/// import { ServerContext, useServerRouter } from "../server-route"; import { sessionRouter } from "./router/session-router"; import { newSessionStore } from "./store/session-store"; type SessionServerHandler = { cleanup: () => Promise; handle: (arg: ServerContext) => Promise; }; export const createSessionServer = (arg: { encrypt?: boolean; server_router?: ReturnType; site_id?: string; }): SessionServerHandler => { const session_store = newSessionStore(arg.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.server_router) { const res = await arg.server_router.handle(route_arg); if (res) return res; } return handle(req); }, }; return server_handler; };