CoompanionApp/index.ts

76 lines
2.1 KiB
TypeScript
Raw Normal View History

2026-02-03 13:48:56 +01:00
import home from "./front/index.html";
import play from "./front/play.html";
import privacy from "./front/privacy.html";
2026-02-04 16:28:16 +01:00
import rules from "./front/rules.html";
2026-02-03 13:48:56 +01:00
import { apiRoutes } from "./server/api";
import { handleSocketMessage, registerSocket, unregisterSocket } from "./server/websocket";
const appleAppSiteAssociation = Bun.file("./.well-known/apple-app-site-association");
const assetLinks = Bun.file("./.well-known/assetlinks.json");
const server = Bun.serve({
2026-02-04 16:28:16 +01:00
routes: {
"/.well-known/apple-app-site-association": new Response(appleAppSiteAssociation, {
headers: { "Content-Type": "application/json" },
}),
"/.well-known/assetlinks.json": new Response(assetLinks, {
headers: { "Content-Type": "application/json" },
}),
"/": home,
"/privacy": privacy,
"/rules": Response.redirect("/rules/basics"),
"/rules/:tab": rules,
"/play": play,
"/play/:sessionId": play,
"/play/:sessionId/lobby": play,
"/play/:sessionId/banker": play,
"/play/:sessionId/banker/:tab": play,
"/play/:sessionId/player": play,
"/play/:sessionId/player/:tab": play,
"/play/:sessionId/chat": play,
"/play/:sessionId/chat/new": play,
"/play/:sessionId/chat/:chatId": play,
...apiRoutes,
},
fetch(req, server) {
const url = new URL(req.url);
if (url.pathname === "/ws") {
const sessionId = url.searchParams.get("sessionId");
const playerId = url.searchParams.get("playerId");
if (!sessionId || !playerId) {
return new Response("Missing sessionId or playerId", { status: 400 });
}
const upgraded = server.upgrade(req, {
data: { sessionId, playerId },
});
if (upgraded) {
return;
}
return new Response("Unable to upgrade", { status: 400 });
}
2026-02-03 13:48:56 +01:00
2026-02-04 16:28:16 +01:00
return new Response("Not found", { status: 404 });
},
websocket: {
open(ws) {
const { sessionId, playerId } = ws.data as {
sessionId: string;
playerId: string;
};
registerSocket(ws, sessionId, playerId);
},
message(ws, message) {
handleSocketMessage(ws, message);
},
close(ws) {
unregisterSocket(ws);
},
},
development: {
hmr: true,
console: true,
},
2026-02-03 13:48:56 +01:00
});
console.log(`Listening on ${server.url}`);