import { SignJWT, jwtVerify } from "jose"; import { getEnv } from "@/lib/env"; export const SESSION_COOKIE_NAME = "bp_session"; const SESSION_MAX_AGE_SECONDS = 60 * 60 * 24 * 30; // 30 days function signingKey(): Uint8Array { return new TextEncoder().encode(getEnv().AUTH_SECRET); } export async function createSessionToken(): Promise { return new SignJWT({}) .setProtectedHeader({ alg: "HS256" }) .setSubject("app") .setIssuedAt() .setExpirationTime(`${SESSION_MAX_AGE_SECONDS}s`) .sign(signingKey()); } export async function verifySessionToken(token: string | undefined | null): Promise { if (!token) return false; try { await jwtVerify(token, signingKey()); return true; } catch { return false; } } export const sessionCookieOptions = { name: SESSION_COOKIE_NAME, httpOnly: true, secure: true, sameSite: "lax" as const, path: "/", maxAge: SESSION_MAX_AGE_SECONDS, };