// Started with fork() by the trusted host; boot refs/capabilities travel over IPC, // never command arguments, stdout or service-token-bearing environment variables. import { startBroker } from './runtime.mjs'; import { BusError } from './broker.mjs'; let runtime, booted = false, closing = false; async function close(code) { if (closing) return; closing = true; try { await runtime?.close(); } catch { code = 2; } process.exitCode = code; if (process.connected) process.disconnect(); } if (!process.send) { process.stderr.write('trusted-host-required\n'); process.exitCode = 2; } else { const timer = setTimeout(() => close(2), 10000); process.on('message', async (message) => { try { if (message?.op === 'bindLaunch' && runtime) { try { process.send({ ok: true, launch: runtime.bindLaunch(message.record) }); } catch (e) { process.send({ ok: false, error: e instanceof BusError ? e.code : 'bind-refused' }); } return; } if (message?.op === 'close') { clearTimeout(timer); await close(0); return; } if (message?.op !== 'boot' || booted) throw new BusError('invalid-host-request'); booted = true; clearTimeout(timer); // `trackers` is S3's plain-data boot config; the adapter is loaded only when a business has one. const { trackers, ...config } = message.config ?? {}; if (trackers) { const { tasksAdapter } = await import('../../tasks/src/adapter.mjs'); config.tasks = tasksAdapter({ trackers }); } runtime = await startBroker(config); if (closing) { await runtime.close(); return; } process.send({ ok: true, path: runtime.path, launches: runtime.launches, readers: runtime.readers }); } catch (e) { process.send?.({ ok: false, error: e instanceof BusError ? e.code : 'startup-refused' }, () => close(2), ); } }); process.on('disconnect', () => close(2)); process.on('SIGTERM', () => close(0)); process.on('SIGINT', () => close(0)); }