48 lines
1.2 KiB
TypeScript
Executable File
48 lines
1.2 KiB
TypeScript
Executable File
import { env } from './config/env.js';
|
|
import { db } from './db/client.js';
|
|
import { createApp } from './app.js';
|
|
import { ChatService } from './services/chat-service.js';
|
|
import { clearAllChatConversationJobStates } from './services/chat-room-service.js';
|
|
import { shutdownNotificationProvider } from './services/notification-service.js';
|
|
import { PlanWorker } from './workers/plan-worker.js';
|
|
|
|
const app = createApp();
|
|
const planWorker = new PlanWorker(app.log);
|
|
const chatService = new ChatService(app.log);
|
|
app.server.on('upgrade', chatService.attachUpgradeHandler());
|
|
|
|
async function start() {
|
|
try {
|
|
await clearAllChatConversationJobStates();
|
|
await app.listen({
|
|
host: '0.0.0.0',
|
|
port: env.PORT,
|
|
});
|
|
planWorker.start();
|
|
} catch (error) {
|
|
app.log.error(error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
async function shutdown(signal: string) {
|
|
app.log.info(`Received ${signal}, closing server`);
|
|
|
|
await planWorker.stop();
|
|
chatService.close();
|
|
await app.close();
|
|
await shutdownNotificationProvider();
|
|
await db.destroy();
|
|
process.exit(0);
|
|
}
|
|
|
|
process.on('SIGINT', () => {
|
|
void shutdown('SIGINT');
|
|
});
|
|
|
|
process.on('SIGTERM', () => {
|
|
void shutdown('SIGTERM');
|
|
});
|
|
|
|
void start();
|