import { STATUS_CODE, STATUS_TEXT, type StatusCode } from "jsr:@std/http"; const ALLOWED_ORIGIN = "http://0.0.0.0:8042"; const sessions = new Map(); function createSession(socket: WebSocket): string { const session = crypto.randomUUID(); sessions.set(session, socket); return session; } function createResponse( status: StatusCode, body: BodyInit | null = null, ): Response { return new Response(body, { status, statusText: STATUS_TEXT[status] }); } export default function (request: Request): Response { if (request.headers.get("upgrade")?.toLowerCase() !== "websocket") { return createResponse(STATUS_CODE.UpgradeRequired); } const url = new URL(request.url); if (url.origin !== ALLOWED_ORIGIN) { return createResponse(STATUS_CODE.BadRequest); } const sessionId = url.searchParams.get("sessionId"); if (sessionId === null) { const upgrade = Deno.upgradeWebSocket(request); createSession(upgrade.socket); return upgrade.response; } else { const session = sessions.get(sessionId); if (session === null) { return createResponse(STATUS_CODE.Unauthorized); } // TODO // I need a new socket every time } return createResponse(STATUS_CODE.InternalServerError); }