Files
dupe/server/modules/websocket.js

36 lines
947 B
JavaScript

import { WebSocketServer } from "ws";
import url from "url";
function parseTokenFromRequest(req) {
try {
const parsed = url.parse(req.url, true);
return parsed.query?.token || null;
} catch (err) {
return null;
}
}
export function createWebsocketServer(server, { verifyToken, onMessage }) {
const wss = new WebSocketServer({ server });
wss.on("connection", (ws, req) => {
const token = parseTokenFromRequest(req);
const decoded = token && verifyToken ? verifyToken(token, "access") : null;
if (!decoded) {
ws.close();
return;
}
ws.user = decoded;
ws.on("message", (msg) => onMessage && onMessage(msg, ws));
ws.on("error", (err) => console.warn("🔌 WebSocket error:", err.message));
});
return wss;
}
export function broadcastJson(wss, payload) {
if (!wss) return;
const data = JSON.stringify(payload);
wss.clients.forEach((c) => c.readyState === 1 && c.send(data));
}