///
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;
};