fix: various fixes to sentry-reported errors and more

This commit is contained in:
Hampus Kraft
2026-02-18 15:38:51 +00:00
parent 302c0d2a0c
commit 0517a966a3
357 changed files with 25420 additions and 16281 deletions

View File

@@ -26,13 +26,25 @@ import {initializeMetricsService} from '@fluxer/api/src/infrastructure/MetricsSe
import {InstanceConfigRepository} from '@fluxer/api/src/instance/InstanceConfigRepository';
import {ipBanCache} from '@fluxer/api/src/middleware/IpBanMiddleware';
import {initializeServiceSingletons} from '@fluxer/api/src/middleware/ServiceMiddleware';
import {ensureVoiceResourcesInitialized, getKVClient} from '@fluxer/api/src/middleware/ServiceRegistry';
import {
ensureVoiceResourcesInitialized,
getKVClient,
setInjectedWorkerService,
} from '@fluxer/api/src/middleware/ServiceRegistry';
import {ReportRepository} from '@fluxer/api/src/report/ReportRepository';
import {NatsApiRpcListener} from '@fluxer/api/src/rpc/NatsApiRpcListener';
import {initializeSearch, shutdownSearch} from '@fluxer/api/src/SearchFactory';
import {warmupAdminSearchIndexes} from '@fluxer/api/src/search/SearchWarmup';
import {VisionarySlotInitializer} from '@fluxer/api/src/stripe/VisionarySlotInitializer';
import {UserRepository} from '@fluxer/api/src/user/repositories/UserRepository';
import {VoiceDataInitializer} from '@fluxer/api/src/voice/VoiceDataInitializer';
import {JetStreamWorkerQueue} from '@fluxer/api/src/worker/JetStreamWorkerQueue';
import {WorkerService} from '@fluxer/api/src/worker/WorkerService';
import {JetStreamConnectionManager} from '@fluxer/nats/src/JetStreamConnectionManager';
import {NatsConnectionManager} from '@fluxer/nats/src/NatsConnectionManager';
let natsRpcListener: NatsApiRpcListener | null = null;
let jsConnectionManager: JetStreamConnectionManager | null = null;
export function createInitializer(config: APIConfig, logger: ILogger): () => Promise<void> {
return async (): Promise<void> => {
@@ -49,6 +61,19 @@ export function createInitializer(config: APIConfig, logger: ILogger): () => Pro
await initializeServiceSingletons();
logger.info('Service singletons initialized');
if (!config.dev.testModeEnabled) {
jsConnectionManager = new JetStreamConnectionManager({
url: config.nats.jetStreamUrl,
token: config.nats.authToken || undefined,
name: 'api-worker',
});
await jsConnectionManager.connect();
const workerQueue = new JetStreamWorkerQueue(jsConnectionManager);
await workerQueue.ensureInfrastructure();
setInjectedWorkerService(new WorkerService(workerQueue));
logger.info('JetStream worker service initialized');
}
try {
const userRepository = new UserRepository();
const kvDeletionQueue = new KVAccountDeletionQueueService(kvClient, userRepository);
@@ -122,6 +147,16 @@ export function createInitializer(config: APIConfig, logger: ILogger): () => Pro
}
}
if (!config.dev.testModeEnabled) {
const connectionManager = new NatsConnectionManager({
url: config.nats.coreUrl,
token: config.nats.authToken,
name: 'api-rpc-listener',
});
natsRpcListener = new NatsApiRpcListener(connectionManager, logger);
await natsRpcListener.start();
}
logger.info('API service initialization complete');
};
}
@@ -130,6 +165,26 @@ export function createShutdown(logger: ILogger): () => Promise<void> {
return async (): Promise<void> => {
logger.info('Shutting down API service...');
if (natsRpcListener) {
try {
await natsRpcListener.stop();
natsRpcListener = null;
} catch (error) {
logger.error({error}, 'Error shutting down NATS API RPC listener');
}
}
if (jsConnectionManager) {
try {
await jsConnectionManager.drain();
jsConnectionManager = null;
} catch (error) {
logger.error({error}, 'Error draining JetStream worker connection');
}
}
setInjectedWorkerService(undefined);
try {
await shutdownSearch();
logger.info('Search service shut down');

View File

@@ -36,7 +36,6 @@ import {OAuth2Controller} from '@fluxer/api/src/oauth/OAuth2Controller';
import {registerPackControllers} from '@fluxer/api/src/pack/controllers';
import {ReadStateController} from '@fluxer/api/src/read_state/ReadStateController';
import {ReportController} from '@fluxer/api/src/report/ReportController';
import {RpcController} from '@fluxer/api/src/rpc/RpcController';
import {SearchController} from '@fluxer/api/src/search/controllers/SearchController';
import {StripeController} from '@fluxer/api/src/stripe/StripeController';
import {TenorController} from '@fluxer/api/src/tenor/TenorController';
@@ -60,7 +59,6 @@ export function registerControllers(routes: HonoApp, config: APIConfig): void {
registerPackControllers(routes);
ReadStateController(routes);
ReportController(routes);
RpcController(routes);
GuildController(routes);
SearchController(routes);
KlipyController(routes);