import CDP from 'chrome-remote-interface'; import type { RequestWillBeSentLike, ResponseReceivedLike } from './capture-engine.ts'; import type { TabInfo } from './tabs.ts'; interface CdpTabEventMap { 'Network.requestWillBeSent': RequestWillBeSentLike; 'Network.requestWillBeSentExtraInfo': { requestId: string; headers: Record; }; 'Network.responseReceived': ResponseReceivedLike & { response: ResponseReceivedLike['response'] & { url: string; }; }; 'Network.responseReceivedExtraInfo': { requestId: string; headers: Record; }; 'Network.loadingFinished': { requestId: string; }; } export interface CdpTabClient { send: (method: string, params?: object) => Promise; getResponseBody: (requestId: string) => Promise<{ body: string; base64Encoded: boolean; }>; subscribe: (method: K, listener: (params: CdpTabEventMap[K]) => void) => () => void; subscribeOnce: (method: string, listener: () => void) => () => void; close: () => Promise; } export interface CdpHandles { /** Browser-level connection (target list, attach). */ browser: CDP.Client; /** Returns a per-target session bound to a tab. */ attachToTab: (targetId: string) => Promise; /** Enumerate page targets without assuming a localhost discovery endpoint. */ listTabs: () => Promise; close: () => Promise; } export declare function connectCdp(port: number): Promise; /** Connect to a browser-level or page-level CDP websocket. Browser-level * endpoints (including Popcorn) use flattened Target sessions; a page-level * custom endpoint is exposed as one synthetic tab and used directly. */ export declare function connectCdpUrl(webSocketUrl: string): Promise; export {};