relay filter/appview bootstrap
1import { logger } from './util/logger';
2
3logger.info('Main app starting...');
4
5const spawnOptions: any = {
6 stdout: 'inherit',
7 stderr: 'inherit',
8};
9
10const dir = __dirname;
11
12type Subprocess = ReturnType<typeof Bun.spawn>;
13
14let pdsListSyncProcess: Subprocess | undefined;
15let pdsBackfillProcess: Subprocess | undefined;
16let firehoseProcess: Subprocess | undefined;
17let serverProcess: Subprocess | undefined;
18
19async function main() {
20 // Run PDS List Sync first and wait for it to complete
21 const pdsListSyncPath = `${dir}/pds/discovery.ts`;
22 pdsListSyncProcess = Bun.spawn(['bun', pdsListSyncPath], spawnOptions);
23 logger.info({ pid: pdsListSyncProcess.pid }, 'pdsListSync process started');
24
25 await pdsListSyncProcess.exited;
26 logger.info('pdsListSync process completed');
27 pdsListSyncProcess = undefined;
28
29 const pdsBackfillPath = `${dir}/pds/backfill.ts`;
30 pdsBackfillProcess = Bun.spawn(['bun', pdsBackfillPath], spawnOptions);
31 logger.info({ pid: pdsBackfillProcess.pid }, 'pdsBackfill process started');
32
33 const firehosePath = `${dir}/services/firehose-listen.ts`;
34 firehoseProcess = Bun.spawn(['bun', firehosePath], spawnOptions);
35 logger.info({ pid: firehoseProcess.pid }, 'Firehose process started');
36
37 firehoseProcess.exited.then((code) => {
38 logger.error({ code }, 'Firehose process exited');
39 });
40
41 const serverPath = `${dir}/services/api.ts`;
42 serverProcess = Bun.spawn(['bun', serverPath], spawnOptions);
43 logger.info({ pid: serverProcess.pid }, 'XRPC Server process started');
44
45 serverProcess.exited.then((code) => {
46 logger.error({ code }, 'XRPC Server process exited');
47 });
48}
49
50const cleanup = () => {
51 logger.info('Stopping all subprocesses...');
52
53 if (pdsListSyncProcess && !pdsListSyncProcess.killed) {
54 pdsListSyncProcess.kill();
55 }
56 if (pdsBackfillProcess && !pdsBackfillProcess.killed) {
57 pdsBackfillProcess.kill();
58 }
59 if (firehoseProcess && !firehoseProcess.killed) {
60 firehoseProcess.kill();
61 }
62 if (serverProcess && !serverProcess.killed) {
63 serverProcess.kill();
64 }
65
66 process.exit(0);
67};
68
69process.on('SIGINT', cleanup);
70process.on('SIGTERM', cleanup);
71
72main();