import type { BrowserContext, Page } from '@playwright/test' import { REFRESH_TOKEN_COOKIE_DEV } from '@/lib/refreshSessionCookie' export const createAccessToken = (role: 'admin' | 'user' = 'user') => { const payload = Buffer.from( JSON.stringify({ sub: `${role}-id`, role, sessionId: `${role}-session`, exp: Math.floor(Date.now() / 1000) + 3600, }) ).toString('base64url') return `header.${payload}.signature` } export const E2E_MOCK_REFRESH_TOKEN = 'e2e-mock-refresh-token' export const nestRefreshCookie = (value = E2E_MOCK_REFRESH_TOKEN) => ({ name: REFRESH_TOKEN_COOKIE_DEV, value, domain: '127.0.0.1', path: '/', httpOnly: true as const, sameSite: 'Lax' as const, }) export async function authenticateAs(context: BrowserContext, page: Page, role: 'admin' | 'user' = 'user') { const accessToken = createAccessToken(role) const expiresAt = Date.now() + 30 * 24 * 60 * 60 * 1000 await context.addCookies([ { name: 'accessToken', value: accessToken, domain: '127.0.0.1', path: '/' }, nestRefreshCookie(), { name: 'userRole', value: role, domain: '127.0.0.1', path: '/' }, { name: 'userStatus', value: 'active', domain: '127.0.0.1', path: '/' }, ]) await page.addInitScript( ({ token, refreshExpiry, userRole }) => { localStorage.setItem( 'user', JSON.stringify({ accessToken: token, userId: `${userRole}-id`, role: userRole, sessionId: `${userRole}-session`, AccessTokenExpireTime: Date.now() + 3600_000, refreshTokenExpireTime: refreshExpiry, status: 'active', }) ) }, { token: accessToken, refreshExpiry: expiresAt, userRole: role } ) } export const authenticateConsumer = (context: BrowserContext, page: Page) => authenticateAs(context, page, 'user')