Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
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')
|