import fs from "node:fs/promises"; import path from "node:path"; import { encode } from "next-auth/jwt"; import { AUTH_STATE_PATH, E2E_AUTH_SECRET, E2E_BASE_URL, } from "./support/environment"; const SESSION_MAX_AGE_SECONDS = 12 * 60 * 60; export default async function globalSetup() { if (process.env.E2E_STORAGE_STATE) return; const now = Date.now(); const baseUrl = new URL(E2E_BASE_URL); const secure = baseUrl.protocol === "https:"; const token = await encode({ secret: E2E_AUTH_SECRET, maxAge: SESSION_MAX_AGE_SECONDS, token: { sub: "playwright-user", username: "playwright", name: "E2E 测试用户", email: "playwright@example.invalid", accessToken: "playwright-access-token", accessTokenIssuedAt: now, accessTokenExpires: now + SESSION_MAX_AGE_SECONDS * 1000, sessionExpiresAt: now + SESSION_MAX_AGE_SECONDS * 1000, }, }); await fs.mkdir(path.dirname(AUTH_STATE_PATH), { recursive: true }); await fs.writeFile( AUTH_STATE_PATH, JSON.stringify( { cookies: [ { name: secure ? "__Secure-next-auth.session-token" : "next-auth.session-token", value: token, domain: baseUrl.hostname, path: "/", expires: Math.floor(now / 1000) + SESSION_MAX_AGE_SECONDS, httpOnly: true, secure, sameSite: "Lax", }, ], origins: [ { origin: baseUrl.origin, localStorage: [ { name: "active_project", value: "playwright-project" }, { name: "MAP_WORKSPACE", value: "tjwater_e2e" }, { name: "NETWORK_NAME", value: "tjwater_e2e" }, { name: "MAP_EXTENT", value: "13508801.93,3608163.35,13555650.64,3633685.14", }, ], }, ], }, null, 2, ), ); }