import { chromium } from '@playwright/test'; import { login } from './role-permissions-live.mjs'; const {accessToken}=await login('root'); const browser=await chromium.launch({channel:'msedge',headless:true}); try { const page=await browser.newPage(); await page.addInitScript(t=>sessionStorage.setItem('unreal-tran:web:access-token:v1',t),accessToken); await page.goto('http://127.0.0.1:6180/teaching/virtual-training'); await page.locator('[data-testid="global-digital-human-widget"]').waitFor(); const src=await page.locator('[data-testid="global-digital-human-widget"]').getAttribute('src'); console.log('widget',src); const frame=await page.locator('[data-testid="global-digital-human-widget"]').contentFrame(); await frame.locator('.embed-launcher').waitFor(); const url=new URL(src); const slug=url.pathname.split('/').filter(Boolean).at(-1); for(const origin of [url.origin,'http://127.0.0.1:8003']) { const r=await fetch(`${origin}/open/v1/realtime/${slug}`); const data=await r.json(); const agent=data.data||data; for (const avatar of agent.avatars || []) { const cover=await fetch(new URL(avatar.coverUrl,origin),{headers:{Range:'bytes=0-0'}}); console.log(JSON.stringify({origin,status:r.status,avatar:avatar.name,coverPath:avatar.coverUrl.split('?')[0],coverStatus:cover.status,type:cover.headers.get('content-type'),error:cover.ok?null:await cover.text()})); } } console.log(await frame.locator('.embed-launcher-avatar').evaluate(e=>({tag:e.firstElementChild?.tagName,greenDot:!!e.querySelector('i')}))); } finally {await browser.close();}