// server.js (Bun) — with CORS enabled for WS and HTTP const rooms = new Map(); // roomId ⇒ Set 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") { // 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 }); } // Serve HTML UI for non-WebSocket requests 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) { // Leave all rooms for (const set of rooms.values()) set.delete(ws); // Join target room 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) { // OPEN client.send(payload); } } } }, close(ws) { // Clean up on disconnect for (const set of rooms.values()) set.delete(ws); } } }); console.log("✅ Bun realtime server running on port " + (Bun.env.PORT || 7860)); // // server.js (Bun) // // import { serve } from "bun"; // const rooms = new Map(); // roomId ⇒ Set // Bun.serve({ // port: Number(Bun.env.PORT) || 7860, // fetch(req, server) { // const url = new URL(req.url); // // Upgrade to WebSocket if requested // if (req.headers.get("upgrade")?.toLowerCase() === "websocket") { // // Accept the upgrade and attach room data if needed // return server.upgrade(req) ? undefined : new Response("Upgrade failed", { status: 500 }); // } // // Serve HTML UI for non-WebSocket requests // if (url.pathname === "/") { // return new Response(` // // Dubem Realtime Rooms // // // //

Join a Room & Send Messages

// // //
// // // // `, { // headers: { "Content-Type": "text/html; charset=utf-8" } // }); // } // return new Response("Not Found", { status: 404 }); // }, // websocket: { // message(ws, raw) { // let msg; // try { msg = JSON.parse(raw); } catch { return; } // if (msg.action === "join" && msg.roomId) { // // Leave all rooms // for (const set of rooms.values()) set.delete(ws); // // Join target room // 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) { // 1 === OPEN // client.send(payload); // } // } // } // }, // close(ws) { // // Clean up on disconnect // for (const set of rooms.values()) set.delete(ws); // } // } // }); // console.log("✅ Bun realtime server running on port " + (Bun.env.PORT || 7860));