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();