// server.js (Bun) const rooms = new Map(); // roomId ⇒ Set const VALID_TOKEN = "mysecrettoken"; // ← your hard-coded secret Bun.serve({ port: Number(Bun.env.PORT) || 7860, fetch(req, server) { const url = new URL(req.url); // Handle CORS preflight if (req.method === "OPTIONS") { return new Response(null, { status: 204, headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Upgrade", "Access-Control-Allow-Credentials": "true", }}); } // Upgrade to WebSocket if requested if (req.headers.get("upgrade")?.toLowerCase() === "websocket") { // **AUTH CHECK**: require ?token=VALID_TOKEN const clientToken = url.searchParams.get("token"); if (clientToken !== VALID_TOKEN) { return new Response("Unauthorized", { status: 401 }); } // Accept the upgrade with CORS headers on the handshake const upgradeRes = server.upgrade(req, { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true", }, }); return upgradeRes ?? new Response("Upgrade failed", { status: 500 }); } // … your existing HTML serve code unchanged … if (url.pathname === "/") { return new Response(` Dubem Realtime Rooms

Join a Room & Send Messages


`, { headers: { "Content-Type": "text/html; charset=utf-8", "Access-Control-Allow-Origin": "*", } }); } return new Response("Not Found", { status: 404, headers: { "Access-Control-Allow-Origin": "*" }, }); }, websocket: { message(ws, raw) { let msg; try { msg = JSON.parse(raw); } catch { return; } if (msg.action === "join" && msg.roomId) { for (const set of rooms.values()) set.delete(ws); let set = rooms.get(msg.roomId); if (!set) { set = new Set(); rooms.set(msg.roomId, set); } set.add(ws); } if (msg.action === "post" && msg.roomId && msg.message) { const set = rooms.get(msg.roomId); if (!set) return; const payload = JSON.stringify({ roomId: msg.roomId, message: msg.message, timestamp: Date.now(), }); for (const client of set) { if (client.readyState === 1) client.send(payload); } } }, close(ws) { for (const set of rooms.values()) set.delete(ws); } } }); console.log("✅ Bun realtime server running on port " + (Bun.env.PORT || 7860));