///
import { ServerContext, useServerRouter } from "./server-route";
export type SessionData | undefined> = T & {
uid: string;
role: string;
sid: string;
expired_at?: number;
created_at: number;
};
export type SingleSession> = {
data: T;
track: (arg: { path: string }) => Promise;
destroy: () => Promise;
};
type FilterSessionArg = {
uid: string;
sid: string;
role: string;
created_at: { gt?: number; lt?: number };
expired_at: { gt?: number; lt?: number };
};
export type ServerSession> = {
create: (
data: Record & {
uid: string;
role: string;
expired_at?: number;
}
) => Promise>;
findMany: (arg: Partial) => Promise[]>;
findFirst: (
arg: Partial
) => Promise>;
current?: SingleSession;
};
type SessionServerHandler = {
cleanup: () => Promise;
handle: (arg: ServerContext) => Promise;
};
export const createSessionServer = >(arg: {
encrypt?: boolean;
router?: ReturnType;
}): SessionServerHandler => {
const internal = {
has_router: false,
router: null as null | ReturnType,
};
const server_session: Omit, "current"> = {
async create(data) {
const new_session: SingleSession = {
data: { ...data, created_at: Date.now() } as T,
async destroy() {},
async track(arg) {},
};
return new_session;
},
async findFirst(arg) {
return null;
},
async findMany(arg) {
return [];
},
};
if (typeof arg.router === "object" && arg.router instanceof Promise) {
internal.has_router = true;
arg.router.then((e) => {
internal.router = e;
});
}
const server_handler: SessionServerHandler = {
async cleanup() {},
async handle(server_arg) {
const { req, handle } = server_arg;
console.log("makaru", internal.has_router, internal.router);
return new Response("fas");
// if (internal.has_router && internal.router) {
// return await internal.router.handle({
// ...server_arg,
// session: {
// ...server_session,
// current: undefined,
// },
// });
// }
// return handle(req);
},
};
return server_handler;
};