Files

24 lines
1.2 KiB
TypeScript

import { createApp } from './app.ts';
import { loadServerConfig } from './config.ts';
import { MemoryVisitStore, MongoVisitStore, type VisitStore } from './visits.ts';
async function main() {
const config = loadServerConfig();
let visitStore: VisitStore;
if (config.visitStore === 'memory') {
console.warn('visitStore=memory: visit history is volatile; development/tests only.');
visitStore = new MemoryVisitStore();
} else {
visitStore = await MongoVisitStore.connect(config.mongoUri, config.mongoDatabase);
}
const app = createApp({ visitStore,
allowedOrigins: config.allowedOrigins });
const stop = () => { void app.close().catch(error => { console.error('Shutdown failed', error); process.exitCode = 1; }); };
process.once('SIGINT', stop); process.once('SIGTERM', stop);
app.httpServer.once('error', error => { console.error('HTTP server failed', error); process.exitCode = 1; stop(); });
app.httpServer.listen(config.port, config.host, () => {
console.log(`Sunrise single-instance server listening on ${config.host}:${(app.httpServer.address() as { port: number }).port}`);
});
}
void main().catch(error => { console.error('Server startup failed; admission disabled', error); process.exitCode = 1; });