diff options
| author | amankumarsingh77 <amankumarsingh7702@gmal.com> | 2026-05-07 12:54:12 +0530 |
|---|---|---|
| committer | amankumarsingh77 <amankumarsingh7702@gmal.com> | 2026-05-07 12:54:12 +0530 |
| commit | 4052e6e6afef1dc20146765963dea7c0289ca401 (patch) | |
| tree | 3734869a41404e6ebcc85d35789aea4684d8e5b0 /src/cdp/session.ts | |
| parent | bd197399048212112d2337b4799ebe20de01a6e8 (diff) | |
release: v0.5.0 — browser_console tool for JS error/console diagnostics
Diffstat (limited to 'src/cdp/session.ts')
| -rw-r--r-- | src/cdp/session.ts | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/cdp/session.ts b/src/cdp/session.ts index 89bdfdd..c839842 100644 --- a/src/cdp/session.ts +++ b/src/cdp/session.ts @@ -4,6 +4,7 @@ import type { DialogInfo } from "./types"; import type { OwnershipRegistry } from "./ownership"; import type { CdpTransport } from "./transport"; import { createNetworkBuffer, type DrainResult, type NetworkFilter } from "./network-buffer"; +import { createConsoleBuffer, type ConsoleDrainResult, type ConsoleFilter } from "./console-buffer"; export type CdpSession = { attachFirstPage(): Promise<Result<{ readonly targetId: string; readonly sessionId: string }, CdpError>>; @@ -15,6 +16,7 @@ export type CdpSession = { takeDialog(): DialogInfo | null; drainPageInfoInvalidations(): boolean; drainNetworkBuffer(filter: NetworkFilter): DrainResult; + drainConsoleBuffer(filter: ConsoleFilter): ConsoleDrainResult; }; export const createCdpSession = ( @@ -26,6 +28,7 @@ export const createCdpSession = ( let dialog: DialogInfo | null = null; let pageInfoDirty = false; const networkBuffer = createNetworkBuffer(); + const consoleBuffer = createConsoleBuffer(); let activeConsumer: Promise<void> = Promise.resolve(); @@ -55,6 +58,8 @@ export const createCdpSession = ( else if (ev.method === "Network.responseReceived") networkBuffer.ingestResponseReceived(ev.params); else if (ev.method === "Network.loadingFinished") networkBuffer.ingestLoadingFinished(ev.params); else if (ev.method === "Network.loadingFailed") networkBuffer.ingestLoadingFailed(ev.params); + else if (ev.method === "Runtime.consoleAPICalled") consoleBuffer.ingestConsoleApi(ev.params); + else if (ev.method === "Log.entryAdded") consoleBuffer.ingestLogEntry(ev.params); } }; @@ -82,7 +87,7 @@ export const createCdpSession = ( // Switching to Promise.all over a single WS pipelines the round-trips and // saves ~3× on tab-switch latency. Defer until session.ts has tests. const enableDomains = async (sid: string): Promise<void> => { - for (const d of ["Page", "DOM", "Runtime", "Network", "Accessibility"]) { + for (const d of ["Page", "DOM", "Runtime", "Network", "Accessibility", "Log"]) { await transport.request(`${d}.enable`, {}, { sessionId: sid }); } }; @@ -153,6 +158,7 @@ export const createCdpSession = ( // Buffer is page-scoped: on switch, the network history of the previous // tab is no longer relevant to what the agent is now looking at. networkBuffer.clear(); + consoleBuffer.clear(); await enableDomains(a.sessionId); return ok(undefined); }, @@ -181,5 +187,8 @@ export const createCdpSession = ( drainNetworkBuffer(filter) { return networkBuffer.drain(filter); }, + drainConsoleBuffer(filter) { + return consoleBuffer.drain(filter); + }, }; }; |
