SPB Git

Repository Public

main.ts 1.5 KB 42 lines typescript

1/** Entry point: load `AOS_ENV_FILE`, validate config, migrate (kernel), build, listen, shut down gracefully. */2import { buildServer } from './app.js';3import { loadConfig } from './config.js';4import { loadEnvFile } from './env-file.js';5import { kernelMigrate, loadKernel } from './kernel-adapter.js';6import { loadProviders } from './providers-adapter.js';78async function main(): Promise<void> {9  loadEnvFile();10  const config = loadConfig();11  await kernelMigrate(config.databaseUrl);12  const kernel = loadKernel({ databaseUrl: config.databaseUrl, dataDir: config.dataDir });13  const server = await buildServer(config, { kernel: kernel.port, providers: loadProviders() });14  await server.app.listen({ port: config.port, host: config.host });15  await server.startBackground();1617  let closing = false;18  const shutdown = (signal: string): void => {19    if (closing) return;20    closing = true;21    server.app.log.info({ signal }, 'shutting down');22    const force = setTimeout(() => process.exit(1), 10_000);23    force.unref();24    // Stop accepting, close WebSockets with 1001, end the pool.25    server26      .close()27      .then(() => kernel.close())28      .then(29        () => process.exit(0),30        () => process.exit(1),31      );32  };33  process.on('SIGTERM', () => shutdown('SIGTERM'));34  process.on('SIGINT', () => shutdown('SIGINT'));35}3637main().catch((err: unknown) => {38  // Configuration / startup errors only: messages never contain secret values.39  console.error((err as Error).message);40  process.exit(1);41});42
Files main
Menu

Theme