/** * Server entry point for SentryAgent.ai AgentIdP. * Loads environment variables, creates the app, and starts listening. */ import * as dotenv from 'dotenv'; dotenv.config(); import { createApp } from './app.js'; import { reloadOpaPolicy } from './middleware/opa.js'; const PORT = parseInt(process.env['PORT'] ?? '3000', 10); /** * Bootstraps the application and starts the HTTP server. */ async function main(): Promise { try { const app = await createApp(); const server = app.listen(PORT, () => { // eslint-disable-next-line no-console console.log(`SentryAgent.ai AgentIdP listening on port ${PORT}`); }); // Graceful shutdown const shutdown = (): void => { // eslint-disable-next-line no-console console.log('Shutting down gracefully...'); server.close(() => { process.exit(0); }); }; process.on('SIGTERM', () => { shutdown(); }); process.on('SIGINT', () => { shutdown(); }); // Hot-reload OPA policy without restarting the server process.on('SIGHUP', () => { reloadOpaPolicy().catch((err) => { // eslint-disable-next-line no-console console.error('[AgentIdP] Failed to reload OPA policy:', err); }); }); } catch (err) { // eslint-disable-next-line no-console console.error('Failed to start server:', err); process.exit(1); } } void main();