import { createServer } from 'node:http' import { agentService } from '../services/agents' import { loggerService } from '../services/LoggerService' import { app } from './app' import { config } from './config' const logger = loggerService.withContext('ApiServer') export class ApiServer { private server: ReturnType | null = null async start(): Promise { if (this.server) { logger.warn('Server already running') return } // Load config const { port, host, apiKey } = await config.load() // Initialize AgentService logger.info('Initializing AgentService...') await agentService.initialize() logger.info('AgentService initialized successfully') // Create server with Express app this.server = createServer(app) // Start server return new Promise((resolve, reject) => { this.server!.listen(port, host, () => { logger.info(`API Server started at http://${host}:${port}`) logger.info(`API Key: ${apiKey}`) resolve() }) this.server!.on('error', reject) }) } async stop(): Promise { if (!this.server) return return new Promise((resolve) => { this.server!.close(() => { logger.info('API Server stopped') this.server = null resolve() }) }) } async restart(): Promise { await this.stop() await config.reload() await this.start() } isRunning(): boolean { const hasServer = this.server !== null const isListening = this.server?.listening || false const result = hasServer && isListening logger.debug('isRunning check:', { hasServer, isListening, result }) return result } } export const apiServer = new ApiServer()