import app, { moduleManager, container } from './app.js'; import { startWatcher, stopWatcher } from './watcher/watcher.js'; import { logger } from './utils/logger.js'; const PORT = process.env.PORT || 3001; startWatcher(); const server = app.listen(PORT, () => { logger.info(`Server ready on port ${PORT}`); }); async function gracefulShutdown(signal: string) { logger.info(`${signal} signal received`); try { await stopWatcher(); } catch (error) { logger.error('Error stopping watcher:', error); } const activeModules = moduleManager.getActiveModules(); for (const moduleId of activeModules.reverse()) { try { await moduleManager.deactivate(moduleId); logger.info(`Module '${moduleId}' deactivated`); } catch (error) { logger.error(`Error deactivating module '${moduleId}':`, error); } } try { await container.dispose(); logger.info('Service container disposed'); } catch (error) { logger.error('Error disposing container:', error); } server.close(() => { logger.info('Server closed'); process.exit(0); }); } process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); process.on('SIGINT', () => gracefulShutdown('SIGINT')); export default app;