import type { IncomingMessage } from 'http' import { WebSocket, WebSocketServer } from 'ws' import { log } from '../helpers/log.js' const wsPort = Number(process.env.WS_PORT) const wss = new WebSocketServer({ port: wsPort, perMessageDeflate: false }) const clients = new Set() wss.on('connection', (ws: WebSocket, req: IncomingMessage) => { clients.add(ws) log('ws.client_connected', { clients: clients.size, ip: req.socket.remoteAddress, }) ws.on('close', () => { clients.delete(ws) log('ws.client_closed', { clients: clients.size }) }) }) wss.on('listening', () => { log('ws.server_started', { port: wsPort }) }) export function onEdgeChunk(chunk: Buffer): void { for (const client of clients) { if (client.readyState === WebSocket.OPEN) { client.send(chunk) } } }