import { SignJWT } from "jose"; export const TEST_MANAGEMENT_JWT_SECRET = "test-management-jwt-secret"; function appendCookie(existingCookieHeader: string | null, cookie: string): string { if (!existingCookieHeader) return cookie; return `${existingCookieHeader}; ${cookie}`; } export async function createManagementSessionToken( secret = process.env.JWT_SECRET || TEST_MANAGEMENT_JWT_SECRET ): Promise { process.env.JWT_SECRET = secret; return new SignJWT({ authenticated: true }) .setProtectedHeader({ alg: "HS256" }) .setIssuedAt() .setExpirationTime("1h") .sign(new TextEncoder().encode(secret)); } export async function createManagementSessionHeaders(headers?: HeadersInit): Promise { const requestHeaders = new Headers(headers); const token = await createManagementSessionToken(); requestHeaders.set("cookie", appendCookie(requestHeaders.get("cookie"), `auth_token=${token}`)); return requestHeaders; } export async function makeManagementSessionRequest( url: string, options: { method?: string; token?: string; headers?: HeadersInit; body?: BodyInit | Record | unknown[] | number | boolean | null; } = {} ): Promise { const { method = "GET", token, headers, body } = options; const requestHeaders = await createManagementSessionHeaders(headers); if (token) { requestHeaders.set("authorization", `Bearer ${token}`); } const isFormData = typeof FormData !== "undefined" && body instanceof FormData; const isUrlSearchParams = typeof URLSearchParams !== "undefined" && body instanceof URLSearchParams; const isStringBody = typeof body === "string"; const shouldSerializeJson = body !== undefined && !isFormData && !isUrlSearchParams && !isStringBody; if (body !== undefined && !requestHeaders.has("content-type") && !isFormData) { requestHeaders.set( "content-type", isUrlSearchParams ? "application/x-www-form-urlencoded;charset=UTF-8" : "application/json" ); } return new Request(url, { method, headers: requestHeaders, body: shouldSerializeJson ? JSON.stringify(body) : body, }); }