Files
nage/server/handler.ts
T
2026-09-24 22:23:48 +02:00

50 lines
1.2 KiB
TypeScript

import { STATUS_CODE, STATUS_TEXT, type StatusCode } from "jsr:@std/http";
const ALLOWED_ORIGIN = "http://0.0.0.0:8042";
const sessions = new Map<string, WebSocket>();
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);
}