/// type ServerArg = { req: Request; handle: (req: Request) => Promise; mode: "dev" | "prod"; url: { raw: URL; pathname: string; }; }; type ServerSession = { handle: (arg: ServerArg) => Promise; }; export const sessionServer = (arg: { encrypt?: boolean; router?: ( arg: ServerArg & { session: {} } ) => Response | (() => Promise) | void; on: { login: (arg: { mode: "user-pass"; username: string; password: string; }) => Promise; }; }): ServerSession => { const s: ServerSession = { async handle(server_arg) { const { req, handle, mode, url } = server_arg; if (typeof arg.router === "function") { let result = arg.router({ ...server_arg, session: {}, }); if (result && typeof result === "function") { result = await result(); } if (result instanceof Response) { return result; } } return await handle(req); }, }; return s; };