import { createDirectRelay } from '../../server/direct-relay.js'; const relay = createDirectRelay(), peers = new Map(), log = []; Bun.serve({ port: 8095, async fetch(req, server) { const url = new URL(req.url); if (url.pathname === '/ws') { const id = url.searchParams.get('id'); if (!['sender', 'receiver'].includes(id)) return new Response('test member required', { status: 403 }); server.upgrade(req, { data: { id } }); return; } if (url.pathname === '/audit') return Response.json(log); if (url.pathname.startsWith('/api/')) { log.push({ http: url.pathname }); return new Response('Media forbidden in direct fixture', { status: 500 }); } if (url.pathname === '/') return new Response(`
`, { headers: { 'Content-Type': 'text/html' } }); const path = url.pathname.slice(1); if (!/^[a-z0-9-]+\.js$/.test(path)) return new Response('not found', { status: 404 }); return new Response(Bun.file(`frontend/${path}`)); }, websocket: { open(ws) { peers.set(ws.data.id, ws); }, message(ws, message) { log.push({ signalling: typeof message === 'string' ? JSON.parse(message).action : 'BINARY' }); relay.handle(ws.data.id, typeof message === 'string' ? message : null, peers, (target,m) => target.send(JSON.stringify(m))); }, close(ws) { peers.delete(ws.data.id); }, } });