prasi-lib/session/server.ts

51 lines
1.1 KiB
TypeScript
Executable File

/// <reference types="bun-types" />
type ServerArg = {
req: Request;
handle: (req: Request) => Promise<Response>;
mode: "dev" | "prod";
url: {
raw: URL;
pathname: string;
};
};
type ServerSession = {
handle: (arg: ServerArg) => Promise<Response>;
};
export const sessionServer = <T>(arg: {
encrypt?: boolean;
router?: (
arg: ServerArg & { session: {} }
) => Response | (() => Promise<Response | void>) | void;
on: {
login: (arg: {
mode: "user-pass";
username: string;
password: string;
}) => Promise<false | T>;
};
}): 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;
};