// The Websocket server is wholly responsible for ingesting messages from // Headplane agent instances (hopefully not more than 1 is running lol) import { WebSocketServer } from 'ws'; import { log } from './utils.mjs'; const wss = new WebSocketServer({ noServer: true }); wss.on('connection', (ws, req) => { // On connection the agent will send its NodeID via Headers // We store this for later use to validate and show on the UI const nodeID = req.headers['x-headplane-ts-node-id']; if (!nodeID) { ws.close(1008, 'ERR_NO_HP_TS_NODE_ID'); return; } }); export async function registerWss(server) { log('SRVX', 'INFO', 'Registering Websocket Server'); server.on('upgrade', (request, socket, head) => { wss.handleUpgrade(request, socket, head, (ws) => { wss.emit('connection', ws, request); }); }); } export function getWss() { return wss; }