|
- 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, {})
- }
|