import * as jose from "jose"; import { env } from "./env"; const JWT_ALG = "HS256"; export interface SessionPayload { userId: number; } export async function signSessionToken( payload: SessionPayload, ): Promise { const secret = new TextEncoder().encode(env.jwtSecret); return new jose.SignJWT(payload) .setProtectedHeader({ alg: JWT_ALG }) .setIssuedAt() .setExpirationTime("1 year") .sign(secret); } export async function verifySessionToken( token: string, ): Promise { if (!token) return null; try { const secret = new TextEncoder().encode(env.jwtSecret); const { payload } = await jose.jwtVerify(token, secret, { algorithms: [JWT_ALG], }); const userId = payload.userId as number; if (!userId) return null; return { userId }; } catch { return null; } }