/* BiDi probe #10 — robust end-to-end snapshot on a fresh home tab. */ const ws = new WebSocket("ws://localhost:9222/session"); let seq = 0; const pending = new Map(); const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); function send(method, params = {}, sessionId = null, timeoutMs = 25000) { const id = ++seq; const msg = { id, method, params }; if (sessionId) msg.sessionId = sessionId; ws.send(JSON.stringify(msg)); return new Promise((resolve, reject) => { const t = setTimeout(() => { pending.delete(id); reject(new Error("timeout " + method)); }, timeoutMs); pending.set(id, { resolve, reject, t }); }); } await new Promise((res, rej) => { ws.onopen = res; ws.onerror = () => rej(new Error("no ws")); }); ws.onmessage = (ev) => { const m = JSON.parse(ev.data); if (m.id && pending.has(m.id)) { const p = pending.get(m.id); pending.delete(m.id); clearTimeout(p.t); m.type === "success" ? p.resolve(m.result) : p.reject(new Error(JSON.stringify(m.error))); } }; const { sessionId } = await send("session.new", { capabilities: {} }); let ctx; try { ctx = await send("browsingContext.create", { type: "tab" }, sessionId); await send("browsingContext.navigate", { context: ctx.context, url: "https://bsky.app/" }, sessionId); console.log("tab", ctx.context, "→ https://bsky.app/ …"); await sleep(12000); await main(); } finally { try { await send("session.end", {}, sessionId, 5000); } catch {} ws.close(); process.exit(0); } async function main() { async function val(expression) { const wrapped = "JSON.stringify(String(" + expression + "))"; let lastErr = "none"; for (let attempt = 0; attempt < 3; attempt++) { try { const r = await send("script.evaluate", { expression: wrapped, target: { context: ctx.context }, awaitPromise: true, resultOwnership: "none" }, sessionId); if (r && r.result && "value" in r.result) return String(r.result.value); lastErr = "no-value:" + JSON.stringify(r); } catch (e) { lastErr = e.message; } await sleep(800); } return "NO-RESULT(" + lastErr + ")"; } async function snap(label) { const raw = await val("window.__suxDiagJSON || ''"); console.log(label, "→", raw); } await snap("t+12s"); await sleep(30000); await snap("t+42s"); await sleep(30000); await snap("t+72s"); }