Date: 05/02/2026 Status: PARTIELLEMENT TERMINE Projets: browser-connector, connectors-front
Remplacer le refresh screenshot REST par un flux WebSocket temps reel via CDP (Chrome DevTools Protocol) Screencast. Ajouter des interactions directes sur le canvas (click, scroll, clavier).
/ws/screencast sur browser-connector?token=xxxPage.startScreencast envoie frames JPEG base64 en continuclick vanilla JS sur le canvas dans useVisibleTask${ type: 'click', x, y } via WSwheel sur le canvas{ type: 'scroll', direction, amount } via WSkeydown sur le canvas (tabIndex=0){ type: 'type', text }{ type: 'keypress', key }https://browser.33800.nowhere84.com (etaient relatives → 404)contextmenu event sur canvas → ne fire pasmousedown avec e.button === 2 sur canvas → ne fire pasdocument.addEventListener('contextmenu', ..., true) capture phase → ne fire pase.target comparison → ne fire pas| Bug | Cause | Fix | Commit |
|---|---|---|---|
| Qwik serialisation WS | useSignal<WebSocket> pas serialisable |
Pattern receive-only dans useVisibleTask$ |
0e06b4d |
| Unicode escapes | Write tool ecrit \u2713 au lieu de ✓ |
Replace all escapes | fa8f6ae |
| WS session Map lookup fail | Elysia/Bun ws object = ref differente dans open/message/close |
Map key = token string |
7d6a462 |
| 422 /api/fetch | query.maxWidth: 800 (number) au lieu de '800' (string) |
String value | dad0b04 |
| WS message parse fail | Elysia/Bun auto-parse JSON → plain object, Buffer.from(object) crash |
Type check: string/Buffer/object | f56e63c |
| Captures 404 | URLs relatives /files/captures/... |
Prefix https://browser.33800.nowhere84.com |
2fb48f7 |
0e06b4d → WS endpoint initial (session precedente)fa6353f → Support button right-click7d6a462 → Map key = tokenadf9f59 → Resolution 1280x960f56e63c → Fix parse message + quality 80202bf5a → Viewport 1920x10800e06b4d → WS receive-only patternfa8f6ae → Fix unicode escapes15b0af6 → Canvas interactions (click, contextmenu, wheel)dad0b04 → Fix query param string5c49bc9 → Resolution 128047efbaa → mousedown pour right-click84e4a91 → Keyboard, scroll toggle, right-click fix2fb48f7 → Fix capture URLsb651090 → document capture phase right-click85d8e9f → bounds check right-click962d88d → R-Click button UIFrontend (ScrapperTool.tsx)
|
| wss://browser.33800.nowhere84.com/ws/screencast?token=JWT
|
Nginx (192.168.1.104) -- WebSocket Upgrade -->
|
Browser-Connector (192.168.1.12:5404)
|
| CDP: Page.startScreencast (1920x1080, JPEG q80)
|
Chromium (Playwright)
|
| frames JPEG base64 ~2-5 fps
|
--> ws.send({ type: 'frame', image: '...' })
ws n'est PAS la meme reference entre open, message, close → utiliser une string comme cle de MapBuffer.from(object) crash, tester le type avantuseSignal<WebSocket> ne fonctionne pas (pas serialisable). Pattern: WS dans useVisibleTask$ uniquementcontextmenu et mousedown button=2 ne firient pas sur un canvas element. Cause inconnue (ni au niveau element, ni au niveau document). A investiguer./api/fetch attend query: Record<string, string> - toutes les valeurs doivent etre des strings