import { SessionManager } from './sessionManager'; import { HttpServer } from './server/httpServer'; import { logger } from './utils/logger'; import { config } from './config'; let sessionManager: SessionManager; let httpServer: HttpServer; async function main(): Promise { logger.info('Starting Teams Browser Bot Service...'); logger.info(`Environment: ${config.nodeEnv}`); logger.info(`Port: ${config.port}`); logger.info(`Gateway URL: ${config.gatewayWsUrl}`); logger.info(`Headless: ${config.botHeadless}`); // Initialize session manager sessionManager = new SessionManager(); await sessionManager.initialize(); // Start HTTP server httpServer = new HttpServer({ onJoinRequest: async (sessionId, meetingUrl, botName, instanceId, gatewayWsUrl, language, botAccountEmail, botAccountPassword, transferMode) => { await sessionManager.createSession(sessionId, meetingUrl, botName, instanceId, gatewayWsUrl, language, botAccountEmail, botAccountPassword, transferMode); }, onLeaveRequest: async (sessionId) => { await sessionManager.endSession(sessionId); }, onStatusRequest: (sessionId) => { return sessionManager.getSessionStatus(sessionId); }, }); await httpServer.start(); logger.info('Teams Browser Bot Service started successfully'); } // Graceful shutdown async function shutdown(signal: string): Promise { logger.info(`Received ${signal}, shutting down...`); try { if (httpServer) { await httpServer.stop(); } if (sessionManager) { await sessionManager.shutdown(); } logger.info('Shutdown complete'); process.exit(0); } catch (error) { logger.error('Error during shutdown:', error); process.exit(1); } } process.on('SIGTERM', () => shutdown('SIGTERM')); process.on('SIGINT', () => shutdown('SIGINT')); // Handle uncaught errors process.on('uncaughtException', (error) => { logger.error('Uncaught exception:', error); shutdown('uncaughtException'); }); process.on('unhandledRejection', (reason, promise) => { logger.error('Unhandled rejection at:', promise, 'reason:', reason); }); // Start the service main().catch((error) => { logger.error('Failed to start service:', error); process.exit(1); });