import { getSessionForSSR } from "supertokens-node/custom"; import { ensureSuperTokensBackend } from "../server"; import { logger } from "../"; export async function getSessionForStart(request: Request, options?: { sessionRequired?: boolean }) { ensureSuperTokensBackend(); try { const session = await getSessionForSSR(request); if (session.hasToken) { return { hasToken: true, accessTokenPayload: session.accessTokenPayload, userId: session.accessTokenPayload?.sub, sessionHandle: session.accessTokenPayload?.sessionHandle, }; } return null; } catch (error: any) { logger.error("Session error", error); if (error.type === "TRY_REFRESH_TOKEN") { return { hasToken: false, needsRefresh: true, error: 'TRY_REFRESH_TOKEN' }; } if (options?.sessionRequired === false) { return null; } throw error; } } export async function verifySession(request: Request, options?: { sessionRequired?: boolean }) { const session = await getSessionForStart(request, options); if (!session && options?.sessionRequired !== false) { throw new Response("Unauthorized", { status: 401 }); } return session; }