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.processMarginNoteFirehoseEventUseCase,
45 useCases.processCollectionLinkRemovalFirehoseEventUseCase,
46 useCases.processFollowFirehoseEventUseCase,
47 useCases.processConnectionFirehoseEventUseCase,
48 );
49
50 const firehoseEventHandler = new FirehoseEventHandler(
51 processFirehoseEventUseCase,
52 );
53
54 const firehoseWorker = new FirehoseWorkerProcess(
55 configService,
56 firehoseEventHandler,
57 );
58
59 await firehoseWorker.start();
60}
61
62main().catch((error) => {
63 console.error('Failed to start firehose worker:', error);
64 process.exit(1);
65});