import { RudderClient, createClient } from '../../../src/client/RudderClient.js'; import type { TokenStore } from '../../../src/token/TokenStore.js'; import { readArtifact } from './artifact.js'; import type { SeedArtifact } from './types.js'; export function loadArtifact(): SeedArtifact { const file = readArtifact(); if (!file) { throw new Error( 'No seed artifact (.e2e-prod.local.json). Run `npm run test:e2e-prod` (globalSetup seeds automatically).', ); } return { ...file, baseUrl: process.env.RUDDER_E2E_BASE_URL ?? file.baseUrl, projectKey: process.env.RUDDER_E2E_PROJECT_KEY ?? file.projectKey, }; } export function createInMemoryTokenStore(): TokenStore { let access: string | null = null; let refresh: string | null = null; return { getAccessToken: () => access, getRefreshToken: () => refresh, saveTokens: (a, r) => { access = a; refresh = r; }, clear: () => { access = null; refresh = null; }, }; } export function makeProdClient( artifact: SeedArtifact = loadArtifact(), ): RudderClient { return createClient({ baseUrl: artifact.baseUrl, projectKey: artifact.projectKey, tokenStore: createInMemoryTokenStore(), }); } export async function freshPlayer( artifact: SeedArtifact = loadArtifact(), ): Promise { const client = makeProdClient(artifact); await client.auth.loginWithDevice({ region: 'en', language: 'en' }); return client; }