import { chromium } from '@playwright/test' import fs from 'node:fs' import { api, localCredentials } from './review-api.mjs' const login = await api('/api/auth/v1/auth/login', undefined, { ...localCredentials(), roleCode: 'admin', rememberMe: false }) if (login.status !== 200) throw new Error('Probe login failed') const token = login.data.accessToken const manifest = JSON.parse(fs.readFileSync('reports/review-20260905/live/cleanup-manifest.json', 'utf8')) const task = manifest.tasks.find(x => x.code.endsWith('-PHYSICAL')) const browser = await chromium.launch({ channel: process.env.REVIEW_BROWSER_CHANNEL || undefined }) try { const context = await browser.newContext({ viewport: { width: 1440, height: 1000 } }) await context.addInitScript(value => sessionStorage.setItem('unreal-tran:web:access-token:v1', value), token) const page = await context.newPage() const events = [] page.on('response', response => { if (response.url().includes('.mp4')) events.push({ path: new URL(response.url()).pathname, status: response.status(), type: response.headers()['content-type'] }) }) page.on('requestfailed', request => { if (request.url().includes('.mp4')) events.push({ path: new URL(request.url()).pathname, failed: request.failure()?.errorText }) }) await page.goto(`http://127.0.0.1:6180/teaching/physical-training/preview/${task.id}`) await page.locator('[data-physical-video="primary"]').waitFor() await page.waitForTimeout(10000) const video = await page.locator('[data-physical-video="primary"]').evaluate(element => ({ source: element.getAttribute('src'), currentSrc: element.currentSrc, readyState: element.readyState, networkState: element.networkState, error: element.error ? {code: element.error.code, message: element.error.message} : null, mp4: element.canPlayType('video/mp4; codecs="avc1.42E01E"'), webm: element.canPlayType('video/webm; codecs="vp9"') })) const result = { video, events } fs.writeFileSync(`reports/review-20260905/diagnostics/video-probe-${process.env.REVIEW_BROWSER_CHANNEL || 'chromium'}.json`, JSON.stringify(result, null, 2)) console.log(JSON.stringify(result)) } finally { await browser.close() await api('/api/auth/v1/auth/logout', token, {}) }