74 lines
2.2 KiB
TypeScript
74 lines
2.2 KiB
TypeScript
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<void> {
|
|
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<void> {
|
|
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);
|
|
});
|