import { createId } from "@paralleldrive/cuid2"; import { ServerWebSocket, WebSocketHandler } from "bun"; import { Packr } from "msgpackr"; import { WSData } from "../../../../pkgs/core/server/create"; const packr = new Packr({ structuredClone: true }); const conns = new Map< string, { user_id: string; ws: ServerWebSocket; msg: { pending: Record>; resolve: Record void>; }; } >(); const wconns = new WeakMap, string>(); export const syncHandler: WebSocketHandler = { open(ws) { const client_id = createId(); conns.set(client_id, { user_id: "", ws, msg: { pending: {}, resolve: {} }, }); wconns.set(ws, client_id); ws.sendBinary(packr.pack({ type: "client_id", client_id })); }, close(ws, code, reason) { const conn_id = wconns.get(ws); if (conn_id) { conns.delete(conn_id); wconns.delete(ws); } }, message(ws, raw) { const conn_id = wconns.get(ws); if (conn_id) { const conn = conns.get(conn_id); if (conn) { const msg = packr.unpack(Buffer.from(raw)); if (msg.type === "user_id") { const { user_id } = msg; conn.user_id = user_id; } } } }, };