/// import { ServerWebSocket } from "bun"; import { useServerRouter } from "../server/server-route"; import { sessionRouter } from "./router/router"; import { newSessionStore } from "./store/session-store"; import { ServerContext, SessionAuth, SessionStore, SingleSession, } from "./type"; type WS = ServerWebSocket<{ url: string }>; type SessionServerHandler = { cleanup: () => Promise; handle: (arg: ServerContext) => Promise; }; export const initSessionServer = ( server: PrasiServer, arg: { encrypt?: boolean; router?: ReturnType; } ) => { try { const session_store = newSessionStore(server.site_id); const session_router = useServerRouter(sessionRouter); const server_handler: SessionServerHandler = { async cleanup() {}, async handle(server_arg) { const { req, handle, url } = server_arg; const route_arg = { ...server_arg, session: { ...session_store, current: undefined, }, }; if (url.pathname.startsWith("/_session/")) { const res = await session_router.handle(route_arg); if (res) return res; } if (arg.router) { const res = await arg.router.handle(route_arg); if (res) return res; } return handle(req); }, }; server.session = server_handler; } catch (e) { console.log(e); } };