This repository has no description
1// IMPORTANT: Import instrument.ts first to initialize Sentry as early as possible
2import '../instrument';
3
4import { EnvironmentConfigService } from '../shared/infrastructure/config/EnvironmentConfigService';
5import { RepositoryFactory } from '../shared/infrastructure/http/factories/RepositoryFactory';
6import { ServiceFactory } from '../shared/infrastructure/http/factories/ServiceFactory';
7import { UseCaseFactory } from '../shared/infrastructure/http/factories/UseCaseFactory';
8import { FirehoseWorkerProcess } from '../modules/atproto/infrastructure/processes/FirehoseWorkerProcess';
9import { FirehoseEventHandler } from '../modules/atproto/application/handlers/FirehoseEventHandler';
10import { ProcessFirehoseEventUseCase } from '../modules/atproto/application/useCases/ProcessFirehoseEventUseCase';
11import { DrizzleFirehoseEventDuplicationService } from '../modules/atproto/infrastructure/services/DrizzleFirehoseEventDuplicationService';
12import { DatabaseFactory } from '../shared/infrastructure/database/DatabaseFactory';
13
14async function main() {
15 console.log('[FIREHOSE] Starting firehose worker...');
16
17 const configService = new EnvironmentConfigService();
18 const repositories = RepositoryFactory.create(configService);
19 const services = ServiceFactory.createForWorker(configService, repositories);
20 const useCases = UseCaseFactory.createForWorker(repositories, services);
21
22 // Get database connection for duplication service
23 const db = DatabaseFactory.createConnection(
24 configService.getDatabaseConfig(),
25 );
26
27 // Create firehose-specific services
28 const duplicationService = new DrizzleFirehoseEventDuplicationService(
29 db,
30 repositories.atUriResolutionService,
31 configService,
32 );
33
34 // Create main processing use case using the factory-created use cases
35 const processFirehoseEventUseCase = new ProcessFirehoseEventUseCase(
36 duplicationService,
37 configService,
38 useCases.processCardFirehoseEventUseCase,
39 useCases.processCollectionFirehoseEventUseCase,
40 useCases.processCollectionLinkFirehoseEventUseCase,
41 useCases.processMarginBookmarkFirehoseEventUseCase,
42 useCases.processMarginCollectionFirehoseEventUseCase,
43 useCases.processMarginCollectionItemFirehoseEventUseCase,
44 useCases.processCollectionLinkRemovalFirehoseEventUseCase,
45 useCases.processFollowFirehoseEventUseCase,
46 useCases.processConnectionFirehoseEventUseCase,
47 );
48
49 const firehoseEventHandler = new FirehoseEventHandler(
50 processFirehoseEventUseCase,
51 );
52
53 const firehoseWorker = new FirehoseWorkerProcess(
54 configService,
55 firehoseEventHandler,
56 );
57
58 await firehoseWorker.start();
59}
60
61main().catch((error) => {
62 console.error('Failed to start firehose worker:', error);
63 process.exit(1);
64});