import { WebSocketServer, WebSocket } from "ws"; import type { Server } from "http"; type EventType = "docker" | "build" | "log" | "toolset" | "git"; interface ForgeEvent { type: EventType; action: string; data: unknown; timestamp: number; } const clients = new Set(); let wss: WebSocketServer; export function initWebSocket(_server: Server): WebSocketServer { wss = new WebSocketServer({ noServer: true }); wss.on("connection", (ws) => { clients.add(ws); ws.on("close", () => clients.delete(ws)); ws.on("error", () => clients.delete(ws)); }); return wss; } export function handleUpgrade(request: import("http").IncomingMessage, socket: import("stream").Duplex, head: Buffer): void { wss.handleUpgrade(request, socket, head, (ws) => { wss.emit("connection", ws, request); }); } export function broadcast(type: EventType, action: string, data: unknown): void { const event: ForgeEvent = { type, action, data, timestamp: Date.now(), }; const message = JSON.stringify(event); for (const client of clients) { if (client.readyState === WebSocket.OPEN) { client.send(message); } } } export function getClientCount(): number { return clients.size; }