From 893a9d338ceb5d37aefece1df637c9a5888a120e Mon Sep 17 00:00:00 2001 From: amankumarsingh77 Date: Tue, 28 Jul 2026 21:50:38 +0530 Subject: refactor: one CDP transport, not two MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit createCdpTransport was a second full WebSocket-to-Chrome implementation reachable only through client.ts's `?? createCdpTransport()` fallback, which production never took — every session and every automated test passes the daemon transport. transport.ts now holds only the CdpTransport interface, and the client requires a transport instead of inventing one. The "Session with given id not found" match that both transports carried becomes classifyRemoteError in cdp/errors.ts, next to the error kind it produces. test/manual/profile-concurrency-test.ts was the sole caller of the fallback: it drives its own Chrome on a private port. It now spawns a daemon per scenario with BU_CDP_WS set, and refuses to run when a daemon is already up, since that one is bound to a different browser. Co-Authored-By: Claude Opus 5 (1M context) --- src/cdp/errors.ts | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/cdp/errors.ts') diff --git a/src/cdp/errors.ts b/src/cdp/errors.ts index cf1dab7..bf77bbd 100644 --- a/src/cdp/errors.ts +++ b/src/cdp/errors.ts @@ -12,6 +12,10 @@ export type CdpError = { readonly method?: string; }; +// Chrome reports a dead session as a generic protocol error, so the message text is the only signal that a reattach — not a retry — is what will fix it. +export const classifyRemoteError = (message: string): CdpErrorKind => + message.includes("Session with given id not found") ? "session_not_found" : "remote_error"; + export const cdpError = ( kind: CdpErrorKind, message: string, -- cgit v1.2.3