import http from 'http'; import { SentinelClient } from './client'; import { config } from './config'; export function startHealthServer(client: SentinelClient): void { const server = http.createServer((req, res) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS'); res.setHeader('Content-Type', 'application/json'); if (req.method === 'OPTIONS') { res.writeHead(200); res.end(); return; } if (req.url === '/health') { const guilds = client.guilds.cache.size; const commands = client.stores.get('commands')?.size || 0; res.writeHead(200); res.end(JSON.stringify({ status: client.isReady() ? 'online' : 'offline', guilds, commands, uptime: Math.floor(process.uptime()), timestamp: new Date().toISOString(), bot: { tag: client.user?.tag || 'Not ready', id: client.user?.id, }, })); return; } if (req.url === '/stats') { const guildStats = client.guilds.cache.map(g => ({ id: g.id, name: g.name, memberCount: g.memberCount, })); res.writeHead(200); res.end(JSON.stringify({ guilds: guildStats, totalMembers: guildStats.reduce((sum, g) => sum + g.memberCount, 0), uptime: Math.floor(process.uptime()), })); return; } res.writeHead(404); res.end(JSON.stringify({ error: 'Not found' })); }); server.listen(config.health.port, () => { console.log(`🏥 Health server running on port ${config.health.port}`); }); }