const { test, expect } = require('@playwright/test'); test('paired pages save verified bytes directly over WebRTC with metadata-only server logs', async ({ browser, request }) => { const a = await browser.newContext(), b = await browser.newContext(); const sender = await a.newPage(), receiver = await b.newPage(); await sender.goto('/?id=sender'); await receiver.goto('/?id=receiver'); await sender.waitForFunction(() => window.ready); await receiver.waitForFunction(() => window.ready); await receiver.evaluate(async () => { const bytes = Uint8Array.from({ length: 2000000 }, (_, i) => i % 251), h = Sha256.create(); h.update(bytes); const dir = await (await navigator.storage.getDirectory()).getDirectoryHandle('videos', { create: true }); const w = await (await dir.getFileHandle(`testvideo.${h.hex()}.direct.part`, { create: true })).createWritable(); await w.write(bytes.slice(0, 12345)); await w.close(); }); await sender.locator('#send').click(); await expect(receiver.getByRole('dialog')).toBeVisible(); expect(await receiver.evaluate(() => !!window.received)).toBe(false); await receiver.getByRole('button', { name: 'Accept & save' }).click(); await receiver.waitForFunction(() => !!window.received); const result = await receiver.evaluate(async () => { const d = await (await navigator.storage.getDirectory()).getDirectoryHandle('videos'); const f = await (await d.getFileHandle('testvideo.mp4')).getFile(); const hash = Sha256.create(); hash.update(new Uint8Array(await f.arrayBuffer())); return { size: f.size, cid: hash.hex(), expected: window.received.cid }; }); expect(await receiver.evaluate(() => window.resumeOffsets)).toEqual([12345]); expect(result.size).toBe(2000000); expect(result.cid).toBe(result.expected); const logs = await (await request.get('/audit')).json(); expect(logs.every(x => !x.http && ['invite','accept','signal','complete'].includes(x.signalling))).toBe(true); await a.close(); await b.close(); });