@opensteer/engine-playwright 0.8.2 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../browser-core/src/brand.ts","../../browser-core/src/identity.ts","../../browser-core/src/geometry.ts","../../browser-core/src/network.ts","../../browser-core/src/capabilities.ts","../../browser-core/src/errors.ts","../../browser-core/src/cdp-dom-snapshot.ts","../../browser-core/src/cdp-visual-stability.ts","../../browser-core/src/post-load-tracker.ts","../../browser-core/src/action-boundary.ts","../../protocol/src/computer-use-bridge.ts","../../protocol/src/dom-action-bridge.ts","../src/options.ts","../src/normalize.ts","../src/coordinate.ts","../src/dom.ts","../src/errors.ts","../src/viewport-screenshot.ts","../src/computer-use.ts","../src/dom-action-bridge.ts","../src/action-settle.ts","../src/storage-capture.ts","../src/engine.ts"],"names":["playwrightErrors","rootOverlay","mode","abortError","normalized","controller","mainFrame"],"mappings":"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","file":"index.js","sourcesContent":["declare const brandSymbol: unique symbol;\n\nexport type Brand<Value, Name extends string> = Value & {\n readonly [brandSymbol]: Name;\n};\n\nexport function brand<Value, Name extends string>(value: Value): Brand<Value, Name> {\n return value as Brand<Value, Name>;\n}\n","import { brand, type Brand } from \"./brand.js\";\n\ntype StringRefKind =\n | \"SessionRef\"\n | \"PageRef\"\n | \"FrameRef\"\n | \"DocumentRef\"\n | \"NodeRef\"\n | \"NetworkRequestId\"\n | \"DownloadRef\"\n | \"DialogRef\"\n | \"ChooserRef\"\n | \"WorkerRef\";\n\nexport type SessionRef = Brand<string, \"SessionRef\">;\nexport type PageRef = Brand<string, \"PageRef\">;\nexport type FrameRef = Brand<string, \"FrameRef\">;\nexport type DocumentRef = Brand<string, \"DocumentRef\">;\nexport type NodeRef = Brand<string, \"NodeRef\">;\nexport type NetworkRequestId = Brand<string, \"NetworkRequestId\">;\nexport type DownloadRef = Brand<string, \"DownloadRef\">;\nexport type DialogRef = Brand<string, \"DialogRef\">;\nexport type ChooserRef = Brand<string, \"ChooserRef\">;\nexport type WorkerRef = Brand<string, \"WorkerRef\">;\nexport type DocumentEpoch = Brand<number, \"DocumentEpoch\">;\n\nexport interface NodeLocator {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n}\n\nconst REF_PREFIXES = {\n session: \"session\",\n page: \"page\",\n frame: \"frame\",\n document: \"document\",\n node: \"node\",\n request: \"request\",\n download: \"download\",\n dialog: \"dialog\",\n chooser: \"chooser\",\n worker: \"worker\",\n} as const;\n\ntype RefPrefix = (typeof REF_PREFIXES)[keyof typeof REF_PREFIXES];\n\nfunction normalizeRef(prefix: RefPrefix, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new TypeError(`${prefix} reference cannot be empty`);\n }\n\n const canonicalPrefix = `${prefix}:`;\n if (trimmed.startsWith(canonicalPrefix)) {\n if (trimmed.length === canonicalPrefix.length) {\n throw new TypeError(`${prefix} reference must include an identifier`);\n }\n return trimmed;\n }\n\n if (trimmed.includes(\":\")) {\n throw new TypeError(\n `${prefix} reference \"${trimmed}\" must either omit a prefix or use ${canonicalPrefix}`,\n );\n }\n\n return `${canonicalPrefix}${trimmed}`;\n}\n\nfunction hasPrefix(prefix: RefPrefix, value: string): boolean {\n return value.startsWith(`${prefix}:`) && value.length > prefix.length + 1;\n}\n\nfunction createStringRef<Name extends StringRefKind>(\n prefix: RefPrefix,\n value: string,\n): Brand<string, Name> {\n return brand<string, Name>(normalizeRef(prefix, value));\n}\n\nexport function createSessionRef(value: string): SessionRef {\n return createStringRef(\"session\", value);\n}\n\nexport function createPageRef(value: string): PageRef {\n return createStringRef(\"page\", value);\n}\n\nexport function createFrameRef(value: string): FrameRef {\n return createStringRef(\"frame\", value);\n}\n\nexport function createDocumentRef(value: string): DocumentRef {\n return createStringRef(\"document\", value);\n}\n\nexport function createNodeRef(value: string): NodeRef {\n return createStringRef(\"node\", value);\n}\n\nexport function createNetworkRequestId(value: string): NetworkRequestId {\n return createStringRef(\"request\", value);\n}\n\nexport function createDownloadRef(value: string): DownloadRef {\n return createStringRef(\"download\", value);\n}\n\nexport function createDialogRef(value: string): DialogRef {\n return createStringRef(\"dialog\", value);\n}\n\nexport function createChooserRef(value: string): ChooserRef {\n return createStringRef(\"chooser\", value);\n}\n\nexport function createWorkerRef(value: string): WorkerRef {\n return createStringRef(\"worker\", value);\n}\n\nexport function isSessionRef(value: string): value is SessionRef {\n return hasPrefix(\"session\", value);\n}\n\nexport function isPageRef(value: string): value is PageRef {\n return hasPrefix(\"page\", value);\n}\n\nexport function isFrameRef(value: string): value is FrameRef {\n return hasPrefix(\"frame\", value);\n}\n\nexport function isDocumentRef(value: string): value is DocumentRef {\n return hasPrefix(\"document\", value);\n}\n\nexport function isNodeRef(value: string): value is NodeRef {\n return hasPrefix(\"node\", value);\n}\n\nexport function isNetworkRequestId(value: string): value is NetworkRequestId {\n return hasPrefix(\"request\", value);\n}\n\nexport function isDownloadRef(value: string): value is DownloadRef {\n return hasPrefix(\"download\", value);\n}\n\nexport function isDialogRef(value: string): value is DialogRef {\n return hasPrefix(\"dialog\", value);\n}\n\nexport function isChooserRef(value: string): value is ChooserRef {\n return hasPrefix(\"chooser\", value);\n}\n\nexport function isWorkerRef(value: string): value is WorkerRef {\n return hasPrefix(\"worker\", value);\n}\n\nexport function serializeRef(\n ref:\n | SessionRef\n | PageRef\n | FrameRef\n | DocumentRef\n | NodeRef\n | NetworkRequestId\n | DownloadRef\n | DialogRef\n | ChooserRef\n | WorkerRef,\n): string {\n return ref;\n}\n\nexport function createDocumentEpoch(value: number): DocumentEpoch {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(\n `document epoch must be a non-negative integer, received ${String(value)}`,\n );\n }\n return brand<number, \"DocumentEpoch\">(value);\n}\n\nexport function nextDocumentEpoch(epoch: DocumentEpoch): DocumentEpoch {\n return createDocumentEpoch(epoch + 1);\n}\n\nexport function serializeDocumentEpoch(epoch: DocumentEpoch): number {\n return epoch;\n}\n\nexport function createNodeLocator(\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n nodeRef: NodeRef,\n): NodeLocator {\n return { documentRef, documentEpoch, nodeRef };\n}\n","import { brand, type Brand } from \"./brand.js\";\n\nexport interface Point {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface Size {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Rect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport type Quad = readonly [Point, Point, Point, Point];\n\nexport interface ScrollOffset {\n readonly x: number;\n readonly y: number;\n}\n\nexport type CoordinateSpace =\n | \"document-css\"\n | \"layout-viewport-css\"\n | \"visual-viewport-css\"\n | \"computer-display-css\"\n | \"window\"\n | \"screen\"\n | \"device-pixel\";\n\nexport interface LayoutViewport {\n readonly origin: Point;\n readonly size: Size;\n}\n\nexport interface VisualViewport {\n readonly origin: Point;\n readonly offsetWithinLayoutViewport: ScrollOffset;\n readonly size: Size;\n}\n\nexport type DevicePixelRatio = Brand<number, \"DevicePixelRatio\">;\nexport type PageScaleFactor = Brand<number, \"PageScaleFactor\">;\nexport type PageZoomFactor = Brand<number, \"PageZoomFactor\">;\n\nexport interface ViewportMetrics {\n readonly layoutViewport: LayoutViewport;\n readonly visualViewport: VisualViewport;\n readonly scrollOffset: ScrollOffset;\n readonly contentSize: Size;\n readonly devicePixelRatio: DevicePixelRatio;\n readonly pageScaleFactor: PageScaleFactor;\n readonly pageZoomFactor: PageZoomFactor;\n}\n\nfunction assertFinite(value: number, name: string): void {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${name} must be a finite number`);\n }\n}\n\nfunction assertNonNegative(value: number, name: string): void {\n assertFinite(value, name);\n if (value < 0) {\n throw new RangeError(`${name} must be greater than or equal to 0`);\n }\n}\n\nfunction createScale<Name extends string>(value: number, name: string) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(`${name} must be greater than 0`);\n }\n return brand<number, Name>(value);\n}\n\nexport function createPoint(x: number, y: number): Point {\n assertFinite(x, \"point.x\");\n assertFinite(y, \"point.y\");\n return { x, y };\n}\n\nexport function createSize(width: number, height: number): Size {\n assertNonNegative(width, \"size.width\");\n assertNonNegative(height, \"size.height\");\n return { width, height };\n}\n\nexport function createRect(x: number, y: number, width: number, height: number): Rect {\n assertFinite(x, \"rect.x\");\n assertFinite(y, \"rect.y\");\n assertNonNegative(width, \"rect.width\");\n assertNonNegative(height, \"rect.height\");\n return { x, y, width, height };\n}\n\nexport function createScrollOffset(x: number, y: number): ScrollOffset {\n assertFinite(x, \"scrollOffset.x\");\n assertFinite(y, \"scrollOffset.y\");\n return { x, y };\n}\n\nexport function createQuad(points: readonly [Point, Point, Point, Point]): Quad {\n return points;\n}\n\nexport function rectToQuad(rect: Rect): Quad {\n return createQuad([\n createPoint(rect.x, rect.y),\n createPoint(rect.x + rect.width, rect.y),\n createPoint(rect.x + rect.width, rect.y + rect.height),\n createPoint(rect.x, rect.y + rect.height),\n ]);\n}\n\nexport function quadBounds(quad: Quad): Rect {\n const xs = quad.map((point) => point.x);\n const ys = quad.map((point) => point.y);\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs);\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys);\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nexport function rectContainsPoint(rect: Rect, point: Point): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\nexport function createDevicePixelRatio(value: number): DevicePixelRatio {\n return createScale<\"DevicePixelRatio\">(value, \"devicePixelRatio\");\n}\n\nexport function createPageScaleFactor(value: number): PageScaleFactor {\n return createScale<\"PageScaleFactor\">(value, \"pageScaleFactor\");\n}\n\nexport function createPageZoomFactor(value: number): PageZoomFactor {\n return createScale<\"PageZoomFactor\">(value, \"pageZoomFactor\");\n}\n","import type {\n DocumentRef,\n FrameRef,\n NetworkRequestId,\n PageRef,\n SessionRef,\n WorkerRef,\n} from \"./identity.js\";\n\nexport interface HeaderEntry {\n readonly name: string;\n readonly value: string;\n}\n\nexport type BodyPayloadEncoding = \"identity\" | \"base64\" | \"gzip\" | \"deflate\" | \"brotli\" | \"unknown\";\n\nexport interface BodyPayload {\n readonly bytes: Uint8Array;\n readonly encoding: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated: boolean;\n readonly capturedByteLength: number;\n readonly originalByteLength?: number;\n}\n\nexport type NetworkCaptureState = \"pending\" | \"complete\" | \"failed\" | \"skipped\";\n\nexport type NetworkRecordKind = \"http\" | \"websocket\" | \"event-stream\";\n\nexport type NetworkResourceType =\n | \"document\"\n | \"stylesheet\"\n | \"image\"\n | \"media\"\n | \"font\"\n | \"script\"\n | \"fetch\"\n | \"xhr\"\n | \"websocket\"\n | \"event-stream\"\n | \"manifest\"\n | \"texttrack\"\n | \"beacon\"\n | \"ping\"\n | \"preflight\"\n | \"other\";\n\nexport type NetworkInitiatorType =\n | \"parser\"\n | \"script\"\n | \"preload\"\n | \"redirect\"\n | \"user\"\n | \"service-worker\"\n | \"other\";\n\nexport interface NetworkInitiator {\n readonly type: NetworkInitiatorType;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly requestId?: NetworkRequestId;\n readonly stackTrace?: readonly string[];\n}\n\nexport interface NetworkTiming {\n readonly requestStartMs?: number;\n readonly dnsStartMs?: number;\n readonly dnsEndMs?: number;\n readonly connectStartMs?: number;\n readonly connectEndMs?: number;\n readonly sslStartMs?: number;\n readonly sslEndMs?: number;\n readonly requestSentMs?: number;\n readonly responseStartMs?: number;\n readonly responseEndMs?: number;\n readonly workerStartMs?: number;\n readonly workerReadyMs?: number;\n}\n\nexport interface NetworkTransferSizes {\n readonly requestHeadersBytes?: number;\n readonly responseHeadersBytes?: number;\n readonly encodedBodyBytes?: number;\n readonly decodedBodyBytes?: number;\n readonly transferSizeBytes?: number;\n}\n\nexport interface NetworkSourceMetadata {\n readonly protocol?: string;\n readonly remoteAddress?: {\n readonly ip?: string;\n readonly port?: number;\n };\n readonly fromServiceWorker?: boolean;\n readonly fromDiskCache?: boolean;\n readonly fromMemoryCache?: boolean;\n readonly workerRef?: WorkerRef;\n}\n\nexport interface NetworkRecord {\n readonly kind: NetworkRecordKind;\n readonly requestId: NetworkRequestId;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly method: string;\n readonly url: string;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly status?: number;\n readonly statusText?: string;\n readonly resourceType: NetworkResourceType;\n readonly redirectFromRequestId?: NetworkRequestId;\n readonly redirectToRequestId?: NetworkRequestId;\n readonly navigationRequest: boolean;\n readonly initiator?: NetworkInitiator;\n readonly timing?: NetworkTiming;\n readonly transfer?: NetworkTransferSizes;\n readonly source?: NetworkSourceMetadata;\n readonly captureState: NetworkCaptureState;\n readonly requestBodyState: NetworkCaptureState;\n readonly responseBodyState: NetworkCaptureState;\n readonly requestBodySkipReason?: string;\n readonly responseBodySkipReason?: string;\n readonly requestBodyError?: string;\n readonly responseBodyError?: string;\n readonly requestBody?: BodyPayload;\n readonly responseBody?: BodyPayload;\n}\n\nexport interface NetworkRecordFilterInput {\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkResourceType;\n}\n\nexport function createHeaderEntry(name: string, value: string): HeaderEntry {\n return { name, value };\n}\n\nexport function createBodyPayload(\n bytes: Uint8Array,\n options: {\n encoding?: BodyPayloadEncoding;\n mimeType?: string;\n charset?: string;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return {\n bytes,\n encoding: options.encoding ?? \"identity\",\n truncated: options.truncated ?? false,\n capturedByteLength: bytes.byteLength,\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.charset === undefined ? {} : { charset: options.charset }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n };\n}\n\nexport function bodyPayloadFromUtf8(\n value: string,\n options: {\n mimeType?: string;\n encoding?: BodyPayloadEncoding;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return createBodyPayload(new TextEncoder().encode(value), {\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.encoding === undefined ? {} : { encoding: options.encoding }),\n ...(options.truncated === undefined ? {} : { truncated: options.truncated }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n charset: \"utf-8\",\n });\n}\n\nexport function matchesNetworkRecordFilters(\n record: Pick<NetworkRecord, \"url\" | \"method\" | \"status\" | \"resourceType\">,\n filters: NetworkRecordFilterInput,\n): boolean {\n if (filters.url !== undefined && !includesCaseInsensitive(record.url, filters.url)) {\n return false;\n }\n\n let parsedUrl: URL | undefined;\n const getParsedUrl = (): URL => {\n parsedUrl ??= new URL(record.url);\n return parsedUrl;\n };\n\n if (filters.hostname !== undefined) {\n const hostname = getParsedUrl().hostname;\n if (!includesCaseInsensitive(hostname, filters.hostname)) {\n return false;\n }\n }\n\n if (filters.path !== undefined) {\n const path = getParsedUrl().pathname;\n if (!includesCaseInsensitive(path, filters.path)) {\n return false;\n }\n }\n\n if (filters.method !== undefined && !includesCaseInsensitive(record.method, filters.method)) {\n return false;\n }\n\n if (\n filters.status !== undefined &&\n !includesCaseInsensitive(\n record.status === undefined ? \"\" : String(record.status),\n filters.status,\n )\n ) {\n return false;\n }\n\n if (filters.resourceType !== undefined && record.resourceType !== filters.resourceType) {\n return false;\n }\n\n return true;\n}\n\nfunction includesCaseInsensitive(value: string, query: string): boolean {\n return value.toLowerCase().includes(query.toLowerCase());\n}\n","export interface BrowserCapabilities {\n readonly executor: {\n readonly sessionLifecycle: boolean;\n readonly pageLifecycle: boolean;\n readonly navigation: boolean;\n readonly pointerInput: boolean;\n readonly keyboardInput: boolean;\n readonly touchInput: boolean;\n readonly screenshots: boolean;\n readonly executionControl: {\n readonly pause: boolean;\n readonly resume: boolean;\n readonly freeze: boolean;\n };\n };\n readonly inspector: {\n readonly pageEnumeration: boolean;\n readonly frameEnumeration: boolean;\n readonly html: boolean;\n readonly domSnapshot: boolean;\n readonly visualStability: boolean;\n readonly text: boolean;\n readonly attributes: boolean;\n readonly hitTest: boolean;\n readonly viewportMetrics: boolean;\n readonly network: boolean;\n readonly networkBodies: boolean;\n readonly cookies: boolean;\n readonly localStorage: boolean;\n readonly sessionStorage: boolean;\n readonly indexedDb: boolean;\n };\n readonly transport: {\n readonly sessionHttp: boolean;\n };\n readonly instrumentation: {\n readonly initScripts: boolean;\n readonly routing: boolean;\n };\n readonly events: {\n readonly pageLifecycle: boolean;\n readonly dialog: boolean;\n readonly download: boolean;\n readonly chooser: boolean;\n readonly worker: boolean;\n readonly console: boolean;\n readonly pageError: boolean;\n readonly websocket: boolean;\n readonly eventStream: boolean;\n readonly executionState: boolean;\n };\n}\n\nexport type BrowserCapabilityPath =\n | \"executor.sessionLifecycle\"\n | \"executor.pageLifecycle\"\n | \"executor.navigation\"\n | \"executor.pointerInput\"\n | \"executor.keyboardInput\"\n | \"executor.touchInput\"\n | \"executor.screenshots\"\n | \"executor.executionControl.pause\"\n | \"executor.executionControl.resume\"\n | \"executor.executionControl.freeze\"\n | \"inspector.pageEnumeration\"\n | \"inspector.frameEnumeration\"\n | \"inspector.html\"\n | \"inspector.domSnapshot\"\n | \"inspector.visualStability\"\n | \"inspector.text\"\n | \"inspector.attributes\"\n | \"inspector.hitTest\"\n | \"inspector.viewportMetrics\"\n | \"inspector.network\"\n | \"inspector.networkBodies\"\n | \"inspector.cookies\"\n | \"inspector.localStorage\"\n | \"inspector.sessionStorage\"\n | \"inspector.indexedDb\"\n | \"transport.sessionHttp\"\n | \"instrumentation.initScripts\"\n | \"instrumentation.routing\"\n | \"events.pageLifecycle\"\n | \"events.dialog\"\n | \"events.download\"\n | \"events.chooser\"\n | \"events.worker\"\n | \"events.console\"\n | \"events.pageError\"\n | \"events.websocket\"\n | \"events.eventStream\"\n | \"events.executionState\";\n\nexport type PartialBrowserCapabilities = {\n readonly [K in keyof BrowserCapabilities]?: BrowserCapabilities[K] extends object\n ? {\n readonly [Inner in keyof BrowserCapabilities[K]]?: BrowserCapabilities[K][Inner] extends object\n ? {\n readonly [Leaf in keyof BrowserCapabilities[K][Inner]]?: BrowserCapabilities[K][Inner][Leaf];\n }\n : BrowserCapabilities[K][Inner];\n }\n : BrowserCapabilities[K];\n};\n\nexport function noBrowserCapabilities(): BrowserCapabilities {\n return {\n executor: {\n sessionLifecycle: false,\n pageLifecycle: false,\n navigation: false,\n pointerInput: false,\n keyboardInput: false,\n touchInput: false,\n screenshots: false,\n executionControl: {\n pause: false,\n resume: false,\n freeze: false,\n },\n },\n inspector: {\n pageEnumeration: false,\n frameEnumeration: false,\n html: false,\n domSnapshot: false,\n visualStability: false,\n text: false,\n attributes: false,\n hitTest: false,\n viewportMetrics: false,\n network: false,\n networkBodies: false,\n cookies: false,\n localStorage: false,\n sessionStorage: false,\n indexedDb: false,\n },\n transport: {\n sessionHttp: false,\n },\n instrumentation: {\n initScripts: false,\n routing: false,\n },\n events: {\n pageLifecycle: false,\n dialog: false,\n download: false,\n chooser: false,\n worker: false,\n console: false,\n pageError: false,\n websocket: false,\n eventStream: false,\n executionState: false,\n },\n };\n}\n\nexport function allBrowserCapabilities(): BrowserCapabilities {\n return mergeBrowserCapabilities(noBrowserCapabilities(), {\n executor: {\n sessionLifecycle: true,\n pageLifecycle: true,\n navigation: true,\n pointerInput: true,\n keyboardInput: true,\n touchInput: true,\n screenshots: true,\n executionControl: {\n pause: true,\n resume: true,\n freeze: true,\n },\n },\n inspector: {\n pageEnumeration: true,\n frameEnumeration: true,\n html: true,\n domSnapshot: true,\n visualStability: true,\n text: true,\n attributes: true,\n hitTest: true,\n viewportMetrics: true,\n network: true,\n networkBodies: true,\n cookies: true,\n localStorage: true,\n sessionStorage: true,\n indexedDb: true,\n },\n transport: {\n sessionHttp: true,\n },\n instrumentation: {\n initScripts: true,\n routing: true,\n },\n events: {\n pageLifecycle: true,\n dialog: true,\n download: true,\n chooser: true,\n worker: true,\n console: true,\n pageError: true,\n websocket: true,\n eventStream: true,\n executionState: true,\n },\n });\n}\n\nexport function mergeBrowserCapabilities(\n base: BrowserCapabilities,\n override: PartialBrowserCapabilities,\n): BrowserCapabilities {\n return {\n executor: {\n ...base.executor,\n ...override.executor,\n executionControl: {\n ...base.executor.executionControl,\n ...override.executor?.executionControl,\n },\n },\n inspector: {\n ...base.inspector,\n ...override.inspector,\n },\n transport: {\n ...base.transport,\n ...override.transport,\n },\n instrumentation: {\n ...base.instrumentation,\n ...override.instrumentation,\n },\n events: {\n ...base.events,\n ...override.events,\n },\n };\n}\n\nexport function hasCapability(\n capabilities: BrowserCapabilities,\n path: BrowserCapabilityPath,\n): boolean {\n switch (path) {\n case \"executor.sessionLifecycle\":\n return capabilities.executor.sessionLifecycle;\n case \"executor.pageLifecycle\":\n return capabilities.executor.pageLifecycle;\n case \"executor.navigation\":\n return capabilities.executor.navigation;\n case \"executor.pointerInput\":\n return capabilities.executor.pointerInput;\n case \"executor.keyboardInput\":\n return capabilities.executor.keyboardInput;\n case \"executor.touchInput\":\n return capabilities.executor.touchInput;\n case \"executor.screenshots\":\n return capabilities.executor.screenshots;\n case \"executor.executionControl.pause\":\n return capabilities.executor.executionControl.pause;\n case \"executor.executionControl.resume\":\n return capabilities.executor.executionControl.resume;\n case \"executor.executionControl.freeze\":\n return capabilities.executor.executionControl.freeze;\n case \"inspector.pageEnumeration\":\n return capabilities.inspector.pageEnumeration;\n case \"inspector.frameEnumeration\":\n return capabilities.inspector.frameEnumeration;\n case \"inspector.html\":\n return capabilities.inspector.html;\n case \"inspector.domSnapshot\":\n return capabilities.inspector.domSnapshot;\n case \"inspector.visualStability\":\n return capabilities.inspector.visualStability;\n case \"inspector.text\":\n return capabilities.inspector.text;\n case \"inspector.attributes\":\n return capabilities.inspector.attributes;\n case \"inspector.hitTest\":\n return capabilities.inspector.hitTest;\n case \"inspector.viewportMetrics\":\n return capabilities.inspector.viewportMetrics;\n case \"inspector.network\":\n return capabilities.inspector.network;\n case \"inspector.networkBodies\":\n return capabilities.inspector.networkBodies;\n case \"inspector.cookies\":\n return capabilities.inspector.cookies;\n case \"inspector.localStorage\":\n return capabilities.inspector.localStorage;\n case \"inspector.sessionStorage\":\n return capabilities.inspector.sessionStorage;\n case \"inspector.indexedDb\":\n return capabilities.inspector.indexedDb;\n case \"transport.sessionHttp\":\n return capabilities.transport.sessionHttp;\n case \"instrumentation.initScripts\":\n return capabilities.instrumentation.initScripts;\n case \"instrumentation.routing\":\n return capabilities.instrumentation.routing;\n case \"events.pageLifecycle\":\n return capabilities.events.pageLifecycle;\n case \"events.dialog\":\n return capabilities.events.dialog;\n case \"events.download\":\n return capabilities.events.download;\n case \"events.chooser\":\n return capabilities.events.chooser;\n case \"events.worker\":\n return capabilities.events.worker;\n case \"events.console\":\n return capabilities.events.console;\n case \"events.pageError\":\n return capabilities.events.pageError;\n case \"events.websocket\":\n return capabilities.events.websocket;\n case \"events.eventStream\":\n return capabilities.events.eventStream;\n case \"events.executionState\":\n return capabilities.events.executionState;\n }\n}\n","import type { BrowserCapabilityPath } from \"./capabilities.js\";\nimport type { DocumentEpoch, DocumentRef, NodeRef, PageRef, SessionRef } from \"./identity.js\";\n\nexport type BrowserCoreErrorCode =\n | \"invalid-argument\"\n | \"invalid-ref\"\n | \"not-found\"\n | \"unsupported-capability\"\n | \"stale-node-ref\"\n | \"session-closed\"\n | \"page-closed\"\n | \"frame-detached\"\n | \"timeout\"\n | \"navigation-failed\"\n | \"operation-failed\";\n\nexport interface BrowserCoreErrorOptions {\n readonly cause?: unknown;\n readonly retriable?: boolean;\n readonly capability?: BrowserCapabilityPath;\n readonly details?: Record<string, unknown>;\n}\n\nexport class BrowserCoreError extends Error {\n readonly code: BrowserCoreErrorCode;\n readonly retriable: boolean;\n readonly capability: BrowserCapabilityPath | undefined;\n readonly details: Record<string, unknown> | undefined;\n\n constructor(code: BrowserCoreErrorCode, message: string, options: BrowserCoreErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = \"BrowserCoreError\";\n this.code = code;\n this.retriable = options.retriable ?? false;\n this.capability = options.capability;\n this.details = options.details;\n }\n}\n\nexport function isBrowserCoreError(value: unknown): value is BrowserCoreError {\n return value instanceof BrowserCoreError;\n}\n\nexport function createBrowserCoreError(\n code: BrowserCoreErrorCode,\n message: string,\n options: BrowserCoreErrorOptions = {},\n): BrowserCoreError {\n return new BrowserCoreError(code, message, options);\n}\n\nexport function unsupportedCapabilityError(capability: BrowserCapabilityPath): BrowserCoreError {\n return new BrowserCoreError(\n \"unsupported-capability\",\n `capability ${capability} is not supported by this backend`,\n {\n capability,\n details: { capability },\n },\n );\n}\n\nexport function staleNodeRefError(input: {\n readonly nodeRef: NodeRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n}): BrowserCoreError {\n return new BrowserCoreError(\n \"stale-node-ref\",\n `node ${input.nodeRef} is stale for ${input.documentRef} at epoch ${input.documentEpoch}`,\n {\n details: {\n nodeRef: input.nodeRef,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n },\n },\n );\n}\n\nexport function closedSessionError(sessionRef: SessionRef): BrowserCoreError {\n return new BrowserCoreError(\"session-closed\", `session ${sessionRef} is closed`, {\n details: { sessionRef },\n });\n}\n\nexport function closedPageError(pageRef: PageRef): BrowserCoreError {\n return new BrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n details: { pageRef },\n });\n}\n","import { createRect, rectToQuad, type Rect } from \"./geometry.js\";\nimport type { DocumentEpoch, DocumentRef, FrameRef, NodeRef, PageRef } from \"./identity.js\";\nimport type { DomSnapshot } from \"./snapshots.js\";\n\nexport const DOM_SNAPSHOT_COMPUTED_STYLE_NAMES = [\n \"display\",\n \"visibility\",\n \"opacity\",\n \"position\",\n \"cursor\",\n \"overflow-x\",\n \"overflow-y\",\n] as const;\n\nexport interface CdpRareStringData {\n readonly index: readonly number[];\n readonly value: readonly number[];\n}\n\nexport interface CdpRareIntegerData {\n readonly index: readonly number[];\n readonly value: readonly number[];\n}\n\nexport interface CdpShadowBoundaryInfo {\n readonly shadowRootType?: \"open\" | \"closed\" | \"user-agent\";\n readonly shadowHostBackendNodeId?: number;\n}\n\nexport interface CdpDomTreeNode {\n readonly backendNodeId?: number;\n readonly children?: readonly CdpDomTreeNode[];\n readonly shadowRoots?: readonly CdpDomTreeNode[];\n readonly contentDocument?: CdpDomTreeNode;\n readonly shadowRootType?: string;\n}\n\nexport interface CdpDomSnapshotDocument {\n readonly frameId: number;\n readonly nodes: {\n readonly parentIndex?: readonly number[];\n readonly nodeType?: readonly number[];\n readonly shadowRootType?: CdpRareStringData;\n readonly nodeName?: readonly number[];\n readonly nodeValue?: readonly number[];\n readonly backendNodeId?: readonly number[];\n readonly attributes?: ReadonlyArray<readonly number[]>;\n readonly textValue?: CdpRareStringData;\n readonly inputValue?: CdpRareStringData;\n readonly contentDocumentIndex?: CdpRareIntegerData;\n };\n readonly layout: {\n readonly nodeIndex: readonly number[];\n readonly styles?: ReadonlyArray<readonly number[]>;\n readonly bounds: ReadonlyArray<readonly number[]>;\n readonly text: readonly number[];\n readonly paintOrders?: readonly number[];\n };\n}\n\nexport interface CapturedCdpDomSnapshot {\n readonly capturedAt: number;\n readonly rawDocument: CdpDomSnapshotDocument;\n readonly shadowBoundariesByBackendNodeId: ReadonlyMap<number, CdpShadowBoundaryInfo>;\n readonly strings: readonly string[];\n}\n\ninterface SnapshotDocumentIdentity {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly parentDocumentRef: DocumentRef | undefined;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n}\n\ninterface DecodedNodeLayout {\n readonly rect?: Rect;\n readonly paintOrder?: number;\n readonly computedStyle?: {\n readonly display?: string;\n readonly visibility?: string;\n readonly opacity?: string;\n readonly position?: string;\n readonly cursor?: string;\n readonly overflowX?: string;\n readonly overflowY?: string;\n };\n}\n\nexport function parseCdpStringTable(strings: readonly string[], index: number | undefined): string {\n if (index === undefined || index < 0) {\n return \"\";\n }\n return strings[index] ?? \"\";\n}\n\nexport function rareCdpStringValue(\n strings: readonly string[],\n data: CdpRareStringData | undefined,\n index: number,\n): string | undefined {\n if (!data) {\n return undefined;\n }\n const matchIndex = data.index.findIndex((candidate) => candidate === index);\n if (matchIndex === -1) {\n return undefined;\n }\n return parseCdpStringTable(strings, data.value[matchIndex]);\n}\n\nexport function rareCdpIntegerValue(\n data: CdpRareIntegerData | undefined,\n index: number,\n): number | undefined {\n if (!data) {\n return undefined;\n }\n const matchIndex = data.index.findIndex((candidate) => candidate === index);\n if (matchIndex === -1) {\n return undefined;\n }\n return data.value[matchIndex];\n}\n\nexport function normalizeCdpShadowRootType(\n value: string | undefined,\n): \"open\" | \"closed\" | \"user-agent\" | undefined {\n switch (value) {\n case \"open\":\n case \"closed\":\n return value;\n case \"user-agent\":\n case \"user_agent\":\n return \"user-agent\";\n default:\n return undefined;\n }\n}\n\nexport function buildCdpShadowBoundaryIndex(\n root: CdpDomTreeNode,\n): ReadonlyMap<number, CdpShadowBoundaryInfo> {\n const byBackendNodeId = new Map<number, CdpShadowBoundaryInfo>();\n\n const visit = (node: CdpDomTreeNode, boundary: CdpShadowBoundaryInfo): void => {\n if (node.backendNodeId !== undefined) {\n byBackendNodeId.set(node.backendNodeId, boundary);\n }\n\n for (const child of node.children ?? []) {\n visit(child, boundary);\n }\n\n for (const shadowRoot of node.shadowRoots ?? []) {\n const normalizedShadowRootType = normalizeCdpShadowRootType(shadowRoot.shadowRootType);\n const shadowBoundary: CdpShadowBoundaryInfo = {\n ...(node.backendNodeId === undefined\n ? {}\n : { shadowHostBackendNodeId: node.backendNodeId }),\n ...(normalizedShadowRootType === undefined\n ? {}\n : { shadowRootType: normalizedShadowRootType }),\n };\n\n if (shadowRoot.backendNodeId !== undefined) {\n byBackendNodeId.set(shadowRoot.backendNodeId, shadowBoundary);\n }\n\n for (const child of shadowRoot.children ?? []) {\n visit(child, shadowBoundary);\n }\n }\n\n if (node.contentDocument) {\n visit(node.contentDocument, {});\n }\n };\n\n visit(root, {});\n return byBackendNodeId;\n}\n\nexport function buildDomSnapshotFromCdpCapture(\n document: SnapshotDocumentIdentity,\n captured: CapturedCdpDomSnapshot,\n nodeRefResolver: (backendNodeId: number) => NodeRef,\n contentDocRefResolver: (contentDocumentIndex: number) => DocumentRef | undefined,\n): DomSnapshot {\n const parentIndexes = captured.rawDocument.nodes.parentIndex ?? [];\n const childIndexes = new Map<number, number[]>();\n for (let index = 0; index < parentIndexes.length; index += 1) {\n const parentIndex = parentIndexes[index];\n if (parentIndex === undefined || parentIndex < 0) {\n continue;\n }\n const children = childIndexes.get(parentIndex) ?? [];\n children.push(index);\n childIndexes.set(parentIndex, children);\n }\n\n const layoutByNodeIndex = decodeLayoutByNodeIndex(captured.rawDocument, captured.strings);\n const aggregatedTextByNodeIndex = buildAggregatedTextIndex(\n captured.rawDocument,\n captured.shadowBoundariesByBackendNodeId,\n captured.strings,\n );\n const rootNodeIndex = findRootNodeIndex(parentIndexes);\n\n const nodes = [];\n const nodeCount = captured.rawDocument.nodes.nodeType?.length ?? 0;\n for (let index = 0; index < nodeCount; index += 1) {\n const backendNodeId = captured.rawDocument.nodes.backendNodeId?.[index];\n const nodeRef = backendNodeId === undefined ? undefined : nodeRefResolver(backendNodeId);\n const rawAttributes = captured.rawDocument.nodes.attributes?.[index] ?? [];\n const attributes: { name: string; value: string }[] = [];\n for (let pairIndex = 0; pairIndex < rawAttributes.length; pairIndex += 2) {\n const nameIndex = rawAttributes[pairIndex];\n const valueIndex = rawAttributes[pairIndex + 1];\n if (nameIndex === undefined || valueIndex === undefined) {\n continue;\n }\n attributes.push({\n name: parseCdpStringTable(captured.strings, nameIndex),\n value: parseCdpStringTable(captured.strings, valueIndex),\n });\n }\n\n const directShadowRootType = rareCdpStringValue(\n captured.strings,\n captured.rawDocument.nodes.shadowRootType,\n index,\n );\n const normalizedShadowRootType = normalizeCdpShadowRootType(directShadowRootType);\n const shadowBoundary =\n backendNodeId === undefined\n ? undefined\n : captured.shadowBoundariesByBackendNodeId.get(backendNodeId);\n const shadowHostNodeRef =\n shadowBoundary?.shadowHostBackendNodeId === undefined\n ? undefined\n : nodeRefResolver(shadowBoundary.shadowHostBackendNodeId);\n const contentDocumentIndex = rareCdpIntegerValue(\n captured.rawDocument.nodes.contentDocumentIndex,\n index,\n );\n const contentDocumentRef =\n contentDocumentIndex === undefined ? undefined : contentDocRefResolver(contentDocumentIndex);\n const layout = layoutByNodeIndex.get(index);\n const textContent = aggregatedTextByNodeIndex.get(index);\n const computedStyle = layout?.computedStyle ?? decodeInlineComputedStyle(attributes);\n\n nodes.push({\n snapshotNodeId: index + 1,\n ...(nodeRef === undefined ? {} : { nodeRef }),\n ...(parentIndexes[index] === undefined || parentIndexes[index]! < 0\n ? {}\n : { parentSnapshotNodeId: parentIndexes[index]! + 1 }),\n childSnapshotNodeIds: (childIndexes.get(index) ?? []).map((childIndex) => childIndex + 1),\n ...(normalizedShadowRootType === undefined\n ? {}\n : { shadowRootType: normalizedShadowRootType }),\n ...(shadowHostNodeRef === undefined ? {} : { shadowHostNodeRef }),\n ...(contentDocumentRef === undefined ? {} : { contentDocumentRef }),\n nodeType: captured.rawDocument.nodes.nodeType?.[index] ?? 0,\n nodeName: parseCdpStringTable(captured.strings, captured.rawDocument.nodes.nodeName?.[index]),\n nodeValue: parseCdpStringTable(\n captured.strings,\n captured.rawDocument.nodes.nodeValue?.[index],\n ),\n ...(textContent === undefined || textContent.length === 0 ? {} : { textContent }),\n ...(computedStyle === undefined ? {} : { computedStyle }),\n attributes,\n ...(layout?.rect === undefined\n ? {}\n : {\n layout: {\n rect: layout.rect,\n quad: rectToQuad(layout.rect),\n ...(layout.paintOrder === undefined ? {} : { paintOrder: layout.paintOrder }),\n },\n }),\n });\n }\n\n return {\n pageRef: document.pageRef,\n frameRef: document.frameRef,\n documentRef: document.documentRef,\n ...(document.parentDocumentRef === undefined\n ? {}\n : { parentDocumentRef: document.parentDocumentRef }),\n documentEpoch: document.documentEpoch,\n url: document.url,\n capturedAt: captured.capturedAt,\n rootSnapshotNodeId: rootNodeIndex + 1,\n shadowDomMode: \"preserved\",\n geometryCoordinateSpace: \"document-css\",\n nodes,\n };\n}\n\nfunction findRootNodeIndex(parentIndexes: readonly number[]): number {\n const explicitRootIndex = parentIndexes.findIndex(\n (parentIndex) => parentIndex === undefined || parentIndex < 0,\n );\n return explicitRootIndex >= 0 ? explicitRootIndex : 0;\n}\n\nfunction decodeLayoutByNodeIndex(\n document: CdpDomSnapshotDocument,\n strings: readonly string[],\n): ReadonlyMap<number, DecodedNodeLayout> {\n const byNodeIndex = new Map<number, DecodedNodeLayout>();\n for (let layoutIndex = 0; layoutIndex < document.layout.nodeIndex.length; layoutIndex += 1) {\n const nodeIndex = document.layout.nodeIndex[layoutIndex];\n if (nodeIndex === undefined) {\n continue;\n }\n\n const bounds = document.layout.bounds[layoutIndex];\n const styleIndexes = document.layout.styles?.[layoutIndex];\n byNodeIndex.set(nodeIndex, {\n ...(bounds === undefined\n ? {}\n : {\n rect: createRect(bounds[0] ?? 0, bounds[1] ?? 0, bounds[2] ?? 0, bounds[3] ?? 0),\n }),\n ...(document.layout.paintOrders?.[layoutIndex] === undefined\n ? {}\n : { paintOrder: document.layout.paintOrders[layoutIndex] }),\n ...(styleIndexes === undefined\n ? {}\n : { computedStyle: decodeComputedStyle(styleIndexes, strings) }),\n });\n }\n return byNodeIndex;\n}\n\nfunction decodeComputedStyle(\n styleIndexes: readonly number[],\n strings: readonly string[],\n): NonNullable<DecodedNodeLayout[\"computedStyle\"]> {\n const styleEntries = DOM_SNAPSHOT_COMPUTED_STYLE_NAMES.reduce<Record<string, string>>(\n (out, propertyName, propertyIndex) => {\n const value = parseCdpStringTable(strings, styleIndexes[propertyIndex]);\n if (value.length > 0) {\n out[propertyName] = value;\n }\n return out;\n },\n {},\n );\n\n return {\n ...(styleEntries.display === undefined ? {} : { display: styleEntries.display }),\n ...(styleEntries.visibility === undefined ? {} : { visibility: styleEntries.visibility }),\n ...(styleEntries.opacity === undefined ? {} : { opacity: styleEntries.opacity }),\n ...(styleEntries.position === undefined ? {} : { position: styleEntries.position }),\n ...(styleEntries.cursor === undefined ? {} : { cursor: styleEntries.cursor }),\n ...(styleEntries[\"overflow-x\"] === undefined ? {} : { overflowX: styleEntries[\"overflow-x\"] }),\n ...(styleEntries[\"overflow-y\"] === undefined ? {} : { overflowY: styleEntries[\"overflow-y\"] }),\n };\n}\n\nfunction decodeInlineComputedStyle(\n attributes: readonly {\n readonly name: string;\n readonly value: string;\n }[],\n): DecodedNodeLayout[\"computedStyle\"] | undefined {\n const styleAttribute = attributes.find((attribute) => attribute.name === \"style\")?.value;\n if (styleAttribute === undefined || styleAttribute.trim().length === 0) {\n return undefined;\n }\n\n const styleEntries = new Map<string, string>();\n for (const declaration of styleAttribute.split(\";\")) {\n const separatorIndex = declaration.indexOf(\":\");\n if (separatorIndex <= 0) {\n continue;\n }\n\n const propertyName = declaration.slice(0, separatorIndex).trim().toLowerCase();\n const propertyValue = declaration.slice(separatorIndex + 1).trim();\n if (propertyName.length === 0 || propertyValue.length === 0) {\n continue;\n }\n\n styleEntries.set(propertyName, propertyValue);\n }\n\n const display = styleEntries.get(\"display\");\n const visibility = styleEntries.get(\"visibility\");\n const opacity = styleEntries.get(\"opacity\");\n const position = styleEntries.get(\"position\");\n const cursor = styleEntries.get(\"cursor\");\n const overflow = styleEntries.get(\"overflow\");\n const overflowX = styleEntries.get(\"overflow-x\") ?? overflow;\n const overflowY = styleEntries.get(\"overflow-y\") ?? overflow;\n\n const computedStyle: NonNullable<DecodedNodeLayout[\"computedStyle\"]> = {\n ...(display === undefined ? {} : { display }),\n ...(visibility === undefined ? {} : { visibility }),\n ...(opacity === undefined ? {} : { opacity }),\n ...(position === undefined ? {} : { position }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(overflowX === undefined ? {} : { overflowX }),\n ...(overflowY === undefined ? {} : { overflowY }),\n };\n\n return Object.keys(computedStyle).length === 0 ? undefined : computedStyle;\n}\n\nfunction buildAggregatedTextIndex(\n document: CdpDomSnapshotDocument,\n shadowBoundariesByBackendNodeId: ReadonlyMap<number, CdpShadowBoundaryInfo>,\n strings: readonly string[],\n): ReadonlyMap<number, string> {\n const parentIndexes = document.nodes.parentIndex ?? [];\n const backendNodeIds = document.nodes.backendNodeId ?? [];\n const childIndexes = new Map<number, number[]>();\n for (let index = 0; index < parentIndexes.length; index += 1) {\n const parentIndex = parentIndexes[index];\n if (parentIndex === undefined || parentIndex < 0) {\n continue;\n }\n const children = childIndexes.get(parentIndex) ?? [];\n children.push(index);\n childIndexes.set(parentIndex, children);\n }\n\n const layoutTextByNodeIndex = new Map<number, string>();\n for (let layoutIndex = 0; layoutIndex < document.layout.nodeIndex.length; layoutIndex += 1) {\n const nodeIndex = document.layout.nodeIndex[layoutIndex];\n if (nodeIndex === undefined) {\n continue;\n }\n const text = parseCdpStringTable(strings, document.layout.text[layoutIndex]);\n if (text.length > 0) {\n layoutTextByNodeIndex.set(nodeIndex, text);\n }\n }\n\n const shadowHostBackendNodeIdByNodeIndex = new Map<number, number | null>();\n const resolveShadowHostBackendNodeId = (index: number): number | null => {\n const existing = shadowHostBackendNodeIdByNodeIndex.get(index);\n if (existing !== undefined) {\n return existing;\n }\n\n const backendNodeId = backendNodeIds[index];\n const directShadowHostBackendNodeId =\n backendNodeId === undefined\n ? undefined\n : shadowBoundariesByBackendNodeId.get(backendNodeId)?.shadowHostBackendNodeId;\n if (directShadowHostBackendNodeId !== undefined) {\n shadowHostBackendNodeIdByNodeIndex.set(index, directShadowHostBackendNodeId);\n return directShadowHostBackendNodeId;\n }\n\n const parentIndex = parentIndexes[index];\n if (parentIndex === undefined || parentIndex < 0) {\n shadowHostBackendNodeIdByNodeIndex.set(index, null);\n return null;\n }\n\n const inheritedShadowHostBackendNodeId = resolveShadowHostBackendNodeId(parentIndex);\n shadowHostBackendNodeIdByNodeIndex.set(index, inheritedShadowHostBackendNodeId);\n return inheritedShadowHostBackendNodeId;\n };\n\n const memo = new Map<number, string>();\n const visit = (index: number): string => {\n const existing = memo.get(index);\n if (existing !== undefined) {\n return existing;\n }\n\n const nodeType = document.nodes.nodeType?.[index] ?? 0;\n const ownText = readOwnNodeText(document, strings, layoutTextByNodeIndex, index);\n if (nodeType === 3 || nodeType === 4) {\n memo.set(index, ownText);\n return ownText;\n }\n\n if (nodeType === 8 || nodeType === 10) {\n memo.set(index, \"\");\n return \"\";\n }\n\n let text = ownText;\n const currentShadowHostBackendNodeId = resolveShadowHostBackendNodeId(index);\n for (const childIndex of childIndexes.get(index) ?? []) {\n if (resolveShadowHostBackendNodeId(childIndex) !== currentShadowHostBackendNodeId) {\n continue;\n }\n text += visit(childIndex);\n }\n memo.set(index, text);\n return text;\n };\n\n const aggregated = new Map<number, string>();\n const nodeCount = document.nodes.nodeType?.length ?? 0;\n for (let index = 0; index < nodeCount; index += 1) {\n const text = visit(index);\n if (text.length > 0) {\n aggregated.set(index, text);\n }\n }\n return aggregated;\n}\n\nfunction readOwnNodeText(\n document: CdpDomSnapshotDocument,\n strings: readonly string[],\n layoutTextByNodeIndex: ReadonlyMap<number, string>,\n index: number,\n): string {\n return (\n rareCdpStringValue(strings, document.nodes.textValue, index) ||\n rareCdpStringValue(strings, document.nodes.inputValue, index) ||\n (document.nodes.nodeType?.[index] === 3 || document.nodes.nodeType?.[index] === 4\n ? parseCdpStringTable(strings, document.nodes.nodeValue?.[index]) ||\n layoutTextByNodeIndex.get(index) ||\n \"\"\n : \"\")\n );\n}\n","import type { VisualStabilityScope } from \"./snapshots.js\";\n\nexport const DEFAULT_VISUAL_STABILITY_TIMEOUT_MS = 30_000;\nexport const DEFAULT_VISUAL_STABILITY_SETTLE_MS = 750;\n\nconst FRAME_EVALUATE_GRACE_MS = 200;\nconst TRANSIENT_CONTEXT_RETRY_DELAY_MS = 25;\nconst STEALTH_WORLD_NAME = \"__opensteer_wait__\";\n\ninterface CdpSessionLike {\n send(method: string, params?: object): Promise<unknown>;\n}\n\ninterface VisualStabilityOptions {\n readonly timeoutMs?: number;\n readonly settleMs?: number;\n readonly scope?: VisualStabilityScope;\n}\n\ninterface CdpFrameTreeNode {\n readonly frame?: {\n readonly id?: string;\n };\n readonly childFrames?: readonly CdpFrameTreeNode[];\n}\n\ninterface CdpGetFrameTreeResult {\n readonly frameTree: CdpFrameTreeNode;\n}\n\ninterface CdpCreateIsolatedWorldResult {\n readonly executionContextId: number;\n}\n\ninterface CdpGetFrameOwnerResult {\n readonly backendNodeId?: number;\n}\n\ninterface CdpExceptionDetails {\n readonly text?: string;\n readonly exception?: {\n readonly description?: string;\n };\n}\n\ninterface CdpRuntimeObject {\n readonly objectId?: string;\n readonly value?: unknown;\n}\n\ninterface CdpResolveNodeResult {\n readonly object?: CdpRuntimeObject;\n}\n\ninterface CdpRuntimeEvaluateResult {\n readonly result: CdpRuntimeObject;\n readonly exceptionDetails?: CdpExceptionDetails;\n}\n\ninterface CdpRuntimeCallFunctionResult {\n readonly result: CdpRuntimeObject;\n readonly exceptionDetails?: CdpExceptionDetails;\n}\n\ninterface FrameRecord {\n readonly frameId: string;\n readonly parentFrameId: string | null;\n}\n\ntype FrameStabilityResult =\n | { readonly kind: \"resolved\" }\n | { readonly kind: \"rejected\"; readonly error: unknown }\n | { readonly kind: \"timeout\" };\n\nconst FRAME_OWNER_VISIBILITY_FUNCTION = `function() {\n if (!(this instanceof HTMLElement)) return false;\n\n var rect = this.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n if (\n rect.bottom <= 0 ||\n rect.right <= 0 ||\n rect.top >= window.innerHeight ||\n rect.left >= window.innerWidth\n ) {\n return false;\n }\n\n var style = window.getComputedStyle(this);\n if (\n style.display === 'none' ||\n style.visibility === 'hidden' ||\n Number(style.opacity) === 0\n ) {\n return false;\n }\n\n return true;\n}`;\n\nexport async function waitForCdpVisualStability(\n cdp: CdpSessionLike,\n options: VisualStabilityOptions = {},\n): Promise<void> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_VISUAL_STABILITY_TIMEOUT_MS;\n const settleMs = options.settleMs ?? DEFAULT_VISUAL_STABILITY_SETTLE_MS;\n const scope = options.scope ?? \"main-frame\";\n\n if (timeoutMs <= 0) {\n return;\n }\n\n const runtime = new StealthCdpRuntime(cdp);\n if (scope === \"visible-frames\") {\n await runtime.waitForVisibleFramesVisualStability(timeoutMs, settleMs);\n return;\n }\n\n await runtime.waitForMainFrameVisualStability(timeoutMs, settleMs);\n}\n\nfunction buildStabilityScript(timeout: number, settleMs: number): string {\n return `new Promise(function(resolve) {\n var deadline = Date.now() + ${timeout};\n var resolved = false;\n var timer = null;\n var observers = [];\n var observedShadowRoots = [];\n var fonts = document.fonts;\n var fontsReady = !fonts || fonts.status === 'loaded';\n var lastRelevantMutationAt = Date.now();\n\n function clearObservers() {\n for (var i = 0; i < observers.length; i++) {\n observers[i].disconnect();\n }\n observers = [];\n }\n\n function done() {\n if (resolved) return;\n resolved = true;\n if (timer) clearTimeout(timer);\n if (safetyTimer) clearTimeout(safetyTimer);\n clearObservers();\n resolve();\n }\n\n function isElementVisiblyIntersectingViewport(element) {\n if (!(element instanceof Element)) return false;\n\n var rect = element.getBoundingClientRect();\n var inViewport =\n rect.width > 0 &&\n rect.height > 0 &&\n rect.bottom > 0 &&\n rect.right > 0 &&\n rect.top < window.innerHeight &&\n rect.left < window.innerWidth;\n\n if (!inViewport) return false;\n\n var style = window.getComputedStyle(element);\n if (style.visibility === 'hidden' || style.display === 'none') {\n return false;\n }\n if (Number(style.opacity) === 0) {\n return false;\n }\n\n return true;\n }\n\n function resolveRelevantElement(node) {\n if (!node) return null;\n if (node instanceof Element) return node;\n if (typeof ShadowRoot !== 'undefined' && node instanceof ShadowRoot) {\n return node.host instanceof Element ? node.host : null;\n }\n var parentElement = node.parentElement;\n return parentElement instanceof Element ? parentElement : null;\n }\n\n function isNodeVisiblyRelevant(node) {\n var element = resolveRelevantElement(node);\n if (!element) return false;\n return isElementVisiblyIntersectingViewport(element);\n }\n\n function hasRelevantMutation(records) {\n for (var i = 0; i < records.length; i++) {\n var record = records[i];\n if (isNodeVisiblyRelevant(record.target)) return true;\n\n var addedNodes = record.addedNodes;\n for (var j = 0; j < addedNodes.length; j++) {\n if (isNodeVisiblyRelevant(addedNodes[j])) return true;\n }\n\n var removedNodes = record.removedNodes;\n for (var k = 0; k < removedNodes.length; k++) {\n if (isNodeVisiblyRelevant(removedNodes[k])) return true;\n }\n }\n\n return false;\n }\n\n function scheduleCheck() {\n if (resolved) return;\n if (timer) clearTimeout(timer);\n\n var remaining = deadline - Date.now();\n if (remaining <= 0) {\n done();\n return;\n }\n\n var checkDelay = Math.min(120, Math.max(16, ${settleMs}));\n timer = setTimeout(checkNow, checkDelay);\n }\n\n function observeMutations(target) {\n if (!target) return;\n var observer = new MutationObserver(function(records) {\n if (!hasRelevantMutation(records)) return;\n lastRelevantMutationAt = Date.now();\n scheduleCheck();\n });\n observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true\n });\n observers.push(observer);\n }\n\n function hasObservedShadowRoot(root) {\n for (var i = 0; i < observedShadowRoots.length; i++) {\n if (observedShadowRoots[i] === root) return true;\n }\n return false;\n }\n\n function observeOpenShadowRoots() {\n if (!document.documentElement || !document.createTreeWalker) return;\n var walker = document.createTreeWalker(\n document.documentElement,\n NodeFilter.SHOW_ELEMENT\n );\n while (walker.nextNode()) {\n var current = walker.currentNode;\n if (!(current instanceof Element)) continue;\n var shadowRoot = current.shadowRoot;\n if (!shadowRoot || shadowRoot.mode !== 'open') continue;\n if (hasObservedShadowRoot(shadowRoot)) continue;\n observedShadowRoots.push(shadowRoot);\n observeMutations(shadowRoot);\n }\n }\n\n function checkViewportImages(root) {\n var images = root.querySelectorAll('img');\n for (var i = 0; i < images.length; i++) {\n var img = images[i];\n if (!isElementVisiblyIntersectingViewport(img)) continue;\n if (!img.complete) return false;\n }\n return true;\n }\n\n function getAnimationTarget(effect) {\n if (!effect) return null;\n var target = effect.target;\n if (target instanceof Element) return target;\n\n if (target && target.element instanceof Element) {\n return target.element;\n }\n\n return null;\n }\n\n function hasRunningVisibleFiniteAnimations() {\n if (typeof document.getAnimations !== 'function') return false;\n var animations = document.getAnimations();\n\n for (var i = 0; i < animations.length; i++) {\n var animation = animations[i];\n if (!animation || animation.playState !== 'running') continue;\n var effect = animation.effect;\n if (!effect || typeof effect.getComputedTiming !== 'function') continue;\n var timing = effect.getComputedTiming();\n var endTime = timing && typeof timing.endTime === 'number'\n ? timing.endTime\n : Number.POSITIVE_INFINITY;\n if (Number.isFinite(endTime) && endTime > 0) {\n var target = getAnimationTarget(effect);\n if (!target) continue;\n if (!isElementVisiblyIntersectingViewport(target)) continue;\n return true;\n }\n }\n\n return false;\n }\n\n function isVisuallyReady() {\n if (!fontsReady) return false;\n if (!checkViewportImages(document)) return false;\n if (hasRunningVisibleFiniteAnimations()) return false;\n return true;\n }\n\n function checkNow() {\n if (Date.now() >= deadline) {\n done();\n return;\n }\n\n observeOpenShadowRoots();\n\n if (!isVisuallyReady()) {\n scheduleCheck();\n return;\n }\n\n if (Date.now() - lastRelevantMutationAt >= ${settleMs}) {\n done();\n return;\n }\n\n scheduleCheck();\n }\n\n observeMutations(document.documentElement);\n observeOpenShadowRoots();\n\n if (fonts && fonts.ready && typeof fonts.ready.then === 'function') {\n fonts.ready.then(function() {\n fontsReady = true;\n scheduleCheck();\n }, function() {\n fontsReady = true;\n scheduleCheck();\n });\n }\n\n var safetyTimer = setTimeout(done, ${timeout});\n\n scheduleCheck();\n})`;\n}\n\nclass StealthCdpRuntime {\n private readonly contextsByFrame = new Map<string, number>();\n\n constructor(private readonly session: CdpSessionLike) {}\n\n async waitForMainFrameVisualStability(timeoutMs: number, settleMs: number): Promise<void> {\n const frameRecords = await this.getFrameRecords();\n const mainFrame = frameRecords[0];\n if (!mainFrame) {\n return;\n }\n\n await this.waitForFrameVisualStability(mainFrame.frameId, timeoutMs, settleMs, true);\n }\n\n async waitForVisibleFramesVisualStability(timeoutMs: number, settleMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n\n while (true) {\n const remaining = Math.max(0, deadline - Date.now());\n if (remaining === 0) {\n return;\n }\n\n const frameIds = await this.collectVisibleFrameIds();\n if (frameIds.length === 0) {\n return;\n }\n\n await Promise.all(\n frameIds.map(async (frameId) => {\n try {\n await this.waitForFrameVisualStability(frameId, remaining, settleMs, false);\n } catch (error) {\n if (isIgnorableFrameError(error)) {\n return;\n }\n throw error;\n }\n }),\n );\n\n const currentFrameIds = await this.collectVisibleFrameIds();\n if (sameFrameIds(frameIds, currentFrameIds)) {\n return;\n }\n }\n }\n\n private async getFrameRecords(): Promise<FrameRecord[]> {\n const treeResult = (await this.session.send(\"Page.getFrameTree\")) as CdpGetFrameTreeResult;\n const records: FrameRecord[] = [];\n walkFrameTree(treeResult.frameTree, null, records);\n return records;\n }\n\n private async collectVisibleFrameIds(): Promise<string[]> {\n const frameRecords = await this.getFrameRecords();\n if (frameRecords.length === 0) {\n return [];\n }\n\n const visibleFrameIds: string[] = [];\n for (const frameRecord of frameRecords) {\n if (!frameRecord.parentFrameId) {\n visibleFrameIds.push(frameRecord.frameId);\n continue;\n }\n\n try {\n const parentContextId = await this.ensureFrameContextId(frameRecord.parentFrameId);\n if (await this.isFrameOwnerVisible(frameRecord.frameId, parentContextId)) {\n visibleFrameIds.push(frameRecord.frameId);\n }\n } catch (error) {\n if (isIgnorableFrameError(error)) {\n continue;\n }\n throw error;\n }\n }\n\n return visibleFrameIds;\n }\n\n private async ensureFrameContextId(frameId: string): Promise<number> {\n const existing = this.contextsByFrame.get(frameId);\n if (existing !== undefined) {\n return existing;\n }\n\n const world = (await this.session.send(\"Page.createIsolatedWorld\", {\n frameId,\n worldName: STEALTH_WORLD_NAME,\n })) as CdpCreateIsolatedWorldResult;\n this.contextsByFrame.set(frameId, world.executionContextId);\n return world.executionContextId;\n }\n\n private async waitForFrameVisualStability(\n frameId: string,\n timeoutMs: number,\n settleMs: number,\n retryTransientContextErrors: boolean,\n ): Promise<void> {\n if (timeoutMs <= 0) {\n return;\n }\n\n const script = buildStabilityScript(timeoutMs, settleMs);\n\n if (!retryTransientContextErrors) {\n let contextId = await this.ensureFrameContextId(frameId);\n try {\n await this.evaluateWithGuard(contextId, script, timeoutMs);\n } catch (error) {\n if (!isMissingExecutionContextError(error)) {\n throw error;\n }\n this.contextsByFrame.delete(frameId);\n contextId = await this.ensureFrameContextId(frameId);\n await this.evaluateWithGuard(contextId, script, timeoutMs);\n }\n return;\n }\n\n const deadline = Date.now() + timeoutMs;\n while (true) {\n const remaining = Math.max(0, deadline - Date.now());\n if (remaining === 0) {\n return;\n }\n\n const contextId = await this.ensureFrameContextId(frameId);\n try {\n await this.evaluateWithGuard(contextId, script, remaining);\n return;\n } catch (error) {\n if (!isTransientExecutionContextError(error)) {\n throw error;\n }\n this.contextsByFrame.delete(frameId);\n await sleep(Math.min(TRANSIENT_CONTEXT_RETRY_DELAY_MS, Math.max(0, deadline - Date.now())));\n }\n }\n }\n\n private async evaluateWithGuard(\n contextId: number,\n script: string,\n timeoutMs: number,\n ): Promise<void> {\n const guardedPromise = this.evaluateScript(contextId, script)\n .then<FrameStabilityResult>(() => ({ kind: \"resolved\" }))\n .catch<FrameStabilityResult>((error) => ({ kind: \"rejected\", error }));\n const timeoutPromise = new Promise<FrameStabilityResult>((resolve) => {\n setTimeout(() => resolve({ kind: \"timeout\" }), timeoutMs + FRAME_EVALUATE_GRACE_MS);\n });\n const outcome = await Promise.race([guardedPromise, timeoutPromise]);\n if (outcome.kind === \"rejected\") {\n throw outcome.error;\n }\n }\n\n private async evaluateScript(contextId: number, script: string): Promise<void> {\n const evaluated = (await this.session.send(\"Runtime.evaluate\", {\n contextId,\n expression: script,\n returnByValue: true,\n awaitPromise: true,\n })) as CdpRuntimeEvaluateResult;\n if (evaluated.exceptionDetails) {\n throw new Error(formatCdpException(evaluated.exceptionDetails));\n }\n }\n\n private async isFrameOwnerVisible(frameId: string, executionContextId: number): Promise<boolean> {\n const frameOwner = (await this.session.send(\"DOM.getFrameOwner\", {\n frameId,\n })) as CdpGetFrameOwnerResult;\n if (frameOwner.backendNodeId === undefined) {\n return false;\n }\n\n const resolved = (await this.session.send(\"DOM.resolveNode\", {\n backendNodeId: frameOwner.backendNodeId,\n executionContextId,\n })) as CdpResolveNodeResult;\n const objectId = resolved.object?.objectId;\n if (!objectId) {\n return false;\n }\n\n try {\n const callResult = (await this.session.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: FRAME_OWNER_VISIBILITY_FUNCTION,\n returnByValue: true,\n })) as CdpRuntimeCallFunctionResult;\n if (callResult.exceptionDetails) {\n throw new Error(formatCdpException(callResult.exceptionDetails));\n }\n return callResult.result.value === true;\n } finally {\n await this.releaseObject(objectId);\n }\n }\n\n private async releaseObject(objectId: string): Promise<void> {\n await this.session\n .send(\"Runtime.releaseObject\", {\n objectId,\n })\n .catch(() => undefined);\n }\n}\n\nfunction walkFrameTree(\n node: CdpFrameTreeNode,\n parentFrameId: string | null,\n records: FrameRecord[],\n): void {\n const frameId = node.frame?.id;\n if (!frameId) {\n return;\n }\n\n records.push({\n frameId,\n parentFrameId,\n });\n\n for (const child of node.childFrames ?? []) {\n walkFrameTree(child, frameId, records);\n }\n}\n\nfunction sameFrameIds(before: readonly string[], after: readonly string[]): boolean {\n if (before.length !== after.length) {\n return false;\n }\n return before.every((frameId) => after.includes(frameId));\n}\n\nfunction formatCdpException(details: CdpExceptionDetails): string {\n return details.exception?.description || details.text || \"CDP runtime evaluation failed.\";\n}\n\nfunction isIgnorableFrameError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes(\"Frame with the given id was not found\") ||\n message.includes(\"No frame for given id found\") ||\n isTransientExecutionContextError(error)\n );\n}\n\nfunction isTransientExecutionContextError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes(\"Execution context was destroyed\") ||\n message.includes(\"Cannot find context with specified id\") ||\n message.includes(\"Cannot find execution context\")\n );\n}\n\nfunction isMissingExecutionContextError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes(\"Cannot find context with specified id\") ||\n message.includes(\"Cannot find execution context\")\n );\n}\n\nfunction sleep(ms: number): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","export const DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS = 400;\nexport const DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS = 100;\n\nexport interface PostLoadTrackerState {\n readonly installedAt: number;\n readonly lastMutationAt: number;\n readonly lastNetworkActivityAt: number;\n readonly now: number;\n readonly pendingFetches: number;\n readonly pendingTimeouts: number;\n readonly pendingXhrs: number;\n readonly readyState: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readNonNegativeNumber(value: unknown): number {\n const parsed = readFiniteNumber(value);\n return parsed === undefined || parsed < 0 ? 0 : parsed;\n}\n\nexport function normalizePostLoadTrackerState(value: unknown): PostLoadTrackerState | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const installedAt = readFiniteNumber(value.installedAt);\n const lastMutationAt = readFiniteNumber(value.lastMutationAt);\n const lastNetworkActivityAt = readFiniteNumber(value.lastNetworkActivityAt);\n const now = readFiniteNumber(value.now);\n const readyState = typeof value.readyState === \"string\" ? value.readyState : undefined;\n if (\n installedAt === undefined ||\n lastMutationAt === undefined ||\n lastNetworkActivityAt === undefined ||\n now === undefined ||\n readyState === undefined\n ) {\n return undefined;\n }\n\n return {\n installedAt,\n lastMutationAt,\n lastNetworkActivityAt,\n now,\n pendingFetches: readNonNegativeNumber(value.pendingFetches),\n pendingTimeouts: readNonNegativeNumber(value.pendingTimeouts),\n pendingXhrs: readNonNegativeNumber(value.pendingXhrs),\n readyState,\n };\n}\n\nexport function buildPostLoadTrackerInstallScript(): string {\n return `(() => {\n const globalObject = globalThis;\n if (globalObject.__opensteerActionBoundaryTrackerInstalled) {\n return true;\n }\n\n const tracker = {\n installedAt: performance.now(),\n lastMutationAt: performance.now(),\n lastNetworkActivityAt: performance.now(),\n pendingFetches: 0,\n pendingTimeouts: 0,\n pendingXhrs: 0,\n readyState: document.readyState,\n timeoutIds: new Set(),\n };\n globalObject.__opensteerActionBoundaryTrackerInstalled = true;\n globalObject.__opensteerActionBoundaryTracker = tracker;\n\n const markMutation = () => {\n tracker.lastMutationAt = performance.now();\n tracker.readyState = document.readyState;\n };\n const markNetwork = () => {\n tracker.lastNetworkActivityAt = performance.now();\n tracker.readyState = document.readyState;\n };\n\n const startObserver = () => {\n const target = document.documentElement ?? document;\n if (!(target instanceof Node)) {\n return;\n }\n const observer = new MutationObserver(markMutation);\n observer.observe(target, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n });\n markMutation();\n };\n\n if (document.documentElement) {\n startObserver();\n } else {\n document.addEventListener(\"DOMContentLoaded\", startObserver, { once: true });\n }\n\n document.addEventListener(\"readystatechange\", markMutation);\n addEventListener(\"load\", markMutation, { once: true });\n\n const nativeSetTimeout = globalObject.setTimeout.bind(globalObject);\n const nativeClearTimeout = globalObject.clearTimeout.bind(globalObject);\n globalObject.setTimeout = function(callback, delay, ...args) {\n tracker.pendingTimeouts += 1;\n markNetwork();\n let handle;\n const wrapped =\n typeof callback === \"function\"\n ? (...callbackArgs) => {\n if (tracker.timeoutIds.delete(handle)) {\n tracker.pendingTimeouts = Math.max(0, tracker.pendingTimeouts - 1);\n }\n try {\n return callback(...callbackArgs);\n } finally {\n markMutation();\n }\n }\n : callback;\n handle = nativeSetTimeout(wrapped, delay, ...args);\n tracker.timeoutIds.add(handle);\n return handle;\n };\n globalObject.clearTimeout = function(handle) {\n if (tracker.timeoutIds.delete(handle)) {\n tracker.pendingTimeouts = Math.max(0, tracker.pendingTimeouts - 1);\n }\n return nativeClearTimeout(handle);\n };\n\n if (typeof globalObject.fetch === \"function\") {\n const nativeFetch = globalObject.fetch.bind(globalObject);\n globalObject.fetch = (...args) => {\n tracker.pendingFetches += 1;\n markNetwork();\n return nativeFetch(...args)\n .finally(() => {\n tracker.pendingFetches = Math.max(0, tracker.pendingFetches - 1);\n markNetwork();\n });\n };\n }\n\n if (typeof globalObject.XMLHttpRequest === \"function\") {\n const NativeXMLHttpRequest = globalObject.XMLHttpRequest;\n const nativeSend = NativeXMLHttpRequest.prototype.send;\n NativeXMLHttpRequest.prototype.send = function(...args) {\n tracker.pendingXhrs += 1;\n markNetwork();\n const finalize = () => {\n this.removeEventListener(\"loadend\", finalize);\n tracker.pendingXhrs = Math.max(0, tracker.pendingXhrs - 1);\n markNetwork();\n };\n this.addEventListener(\"loadend\", finalize, { once: true });\n return nativeSend.apply(this, args);\n };\n }\n\n return true;\n })()`;\n}\n\nexport function buildPostLoadTrackerReadExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker) {\n return null;\n }\n\n return {\n installedAt: Number(tracker.installedAt ?? 0),\n lastMutationAt: Number(tracker.lastMutationAt ?? 0),\n lastNetworkActivityAt: Number(tracker.lastNetworkActivityAt ?? 0),\n now: Number(performance.now()),\n pendingFetches: Number(tracker.pendingFetches ?? 0),\n pendingTimeouts: Number(tracker.pendingTimeouts ?? 0),\n pendingXhrs: Number(tracker.pendingXhrs ?? 0),\n readyState: String(document.readyState),\n };\n })()`;\n}\n\nexport function postLoadTrackerIsSettled(\n tracker: PostLoadTrackerState | undefined,\n quietWindowMs = DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n): boolean {\n if (!tracker) {\n return false;\n }\n\n if (tracker.readyState !== \"complete\") {\n return false;\n }\n\n if (tracker.pendingFetches > 0 || tracker.pendingTimeouts > 0 || tracker.pendingXhrs > 0) {\n return false;\n }\n\n const lastActivityAt = Math.max(\n tracker.installedAt,\n tracker.lastMutationAt,\n tracker.lastNetworkActivityAt,\n );\n return tracker.now - lastActivityAt >= quietWindowMs;\n}\n","import type { DocumentRef, PageRef } from \"./identity.js\";\nimport {\n DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS,\n postLoadTrackerIsSettled,\n type PostLoadTrackerState,\n} from \"./post-load-tracker.js\";\n\nexport const CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS = 30_000;\nexport const CROSS_DOCUMENT_DETECTION_WINDOW_MS = 500;\n\nexport interface ActionBoundarySnapshot {\n readonly pageRef: PageRef;\n readonly documentRef: DocumentRef;\n}\n\nexport type ActionBoundarySettleTrigger = \"dom-action\" | \"navigation\";\nexport type ActionBoundaryTimedOutPhase = \"bootstrap\";\n\nexport interface ActionBoundaryOutcome {\n readonly trigger: ActionBoundarySettleTrigger;\n readonly crossDocument: boolean;\n readonly bootstrapSettled: boolean;\n readonly timedOutPhase?: ActionBoundaryTimedOutPhase;\n}\n\nexport interface WaitForActionBoundaryInput {\n readonly timeoutMs: number;\n readonly signal?: AbortSignal;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly pollIntervalMs?: number;\n getCurrentMainFrameDocumentRef(): DocumentRef | undefined;\n waitForNavigationContentLoaded(timeoutMs: number): Promise<void>;\n readTrackerState(): Promise<PostLoadTrackerState | undefined>;\n throwBackgroundError(): void;\n isPageClosed(): boolean;\n}\n\nexport async function waitForActionBoundary(\n input: WaitForActionBoundaryInput,\n): Promise<ActionBoundaryOutcome> {\n if (input.timeoutMs <= 0) {\n return {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n }\n\n const deadline = Date.now() + input.timeoutMs;\n const crossDocumentDetectionDeadline =\n input.snapshot === undefined\n ? undefined\n : Math.min(deadline, Date.now() + CROSS_DOCUMENT_DETECTION_WINDOW_MS);\n const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS;\n let trigger: ActionBoundarySettleTrigger = \"dom-action\";\n let crossDocument = false;\n let waitedForNavigationContentLoaded = false;\n\n while (Date.now() < deadline) {\n input.throwBackgroundError();\n if (input.isPageClosed()) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n if (input.signal?.aborted) {\n if (isTimeoutAbort(input.signal.reason) && Date.now() >= deadline) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n }\n throw abortError(input.signal);\n }\n\n const currentDocumentRef = input.getCurrentMainFrameDocumentRef();\n if (\n input.snapshot !== undefined &&\n currentDocumentRef !== undefined &&\n currentDocumentRef !== input.snapshot.documentRef\n ) {\n trigger = \"navigation\";\n crossDocument = true;\n if (!waitedForNavigationContentLoaded) {\n waitedForNavigationContentLoaded = true;\n const remaining = Math.max(0, deadline - Date.now());\n if (remaining > 0) {\n await input.waitForNavigationContentLoaded(remaining);\n }\n }\n }\n\n if (\n !crossDocument &&\n crossDocumentDetectionDeadline !== undefined &&\n Date.now() >= crossDocumentDetectionDeadline\n ) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n\n if (crossDocument && postLoadTrackerIsSettled(await input.readTrackerState())) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n\n await delay(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())));\n }\n\n return {\n trigger,\n crossDocument,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n}\n\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nasync function delay(ms: number): Promise<void> {\n if (ms <= 0) {\n return;\n }\n await new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction isTimeoutAbort(reason: unknown): reason is { readonly code: string } {\n return (\n typeof reason === \"object\" && reason !== null && \"code\" in reason && reason.code === \"timeout\"\n );\n}\n","import type {\n ActionBoundaryOutcome,\n ActionBoundarySettleTrigger,\n ActionBoundarySnapshot,\n BrowserCoreEngine,\n PageRef,\n ScreenshotArtifact as BrowserCoreScreenshotArtifact,\n} from \"@opensteer/browser-core\";\n\nimport type {\n OpensteerComputerAction,\n OpensteerComputerAnnotation,\n OpensteerComputerExecuteTiming,\n} from \"./semantic.js\";\nimport type { OpensteerEvent } from \"./events.js\";\nimport type { ViewportMetrics } from \"./geometry.js\";\nimport type { ScreenshotFormat } from \"./snapshots.js\";\n\nexport const OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL = Symbol.for(\"@opensteer/computer-use-bridge\");\n\nexport interface NormalizedComputerScreenshotOptions {\n readonly format: ScreenshotFormat;\n readonly includeCursor: boolean;\n readonly annotations: readonly OpensteerComputerAnnotation[];\n}\n\nexport interface ComputerUseBridgeInput {\n readonly pageRef: PageRef;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly action: OpensteerComputerAction;\n readonly screenshot: NormalizedComputerScreenshotOptions;\n readonly signal: AbortSignal;\n remainingMs(): number | undefined;\n policySettle(pageRef: PageRef, trigger: ActionBoundarySettleTrigger): Promise<void>;\n}\n\nexport interface ComputerUseBridgeOutput {\n readonly pageRef: PageRef;\n readonly screenshot: BrowserCoreScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n readonly events: readonly OpensteerEvent[];\n readonly timing: OpensteerComputerExecuteTiming;\n readonly boundary?: ActionBoundaryOutcome;\n}\n\nexport interface ComputerUseBridge {\n execute(input: ComputerUseBridgeInput): Promise<ComputerUseBridgeOutput>;\n}\n\nexport interface ComputerUseBridgeProvider {\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge;\n}\n\ntype ComputerUseBridgeFactory =\n ComputerUseBridgeProvider[typeof OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL];\n\nfunction isComputerUseBridgeFactory(value: unknown): value is ComputerUseBridgeFactory {\n return typeof value === \"function\";\n}\n\nexport function resolveComputerUseBridge(\n engine: BrowserCoreEngine | ComputerUseBridgeProvider,\n): ComputerUseBridge | undefined {\n const candidate = Reflect.get(engine, OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL);\n return isComputerUseBridgeFactory(candidate) ? candidate.call(engine) : undefined;\n}\n","import type {\n ActionBoundaryOutcome,\n ActionBoundarySettleTrigger,\n ActionBoundarySnapshot,\n BrowserCoreEngine,\n KeyModifier,\n NodeLocator,\n PageRef,\n Point,\n Quad,\n Rect,\n} from \"@opensteer/browser-core\";\nimport type { ReplayElementPath } from \"./dom-path-types.js\";\n\nexport const OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL = Symbol.for(\"@opensteer/dom-action-bridge\");\n\nexport type DomActionScrollAlignment = \"start\" | \"center\" | \"end\" | \"nearest\";\n\nexport interface DomActionTargetInspection {\n readonly connected: boolean;\n readonly visible: boolean;\n readonly enabled: boolean;\n readonly editable: boolean;\n readonly pointerEvents: string;\n readonly bounds?: Rect;\n readonly contentQuads: readonly Quad[];\n}\n\nexport interface DomActionScrollOptions {\n readonly block?: DomActionScrollAlignment;\n readonly inline?: DomActionScrollAlignment;\n}\n\nexport interface DomActionKeyPressInput {\n readonly key: string;\n readonly modifiers?: readonly KeyModifier[];\n}\n\nexport interface DomActionSettleOptions {\n readonly operation: \"dom.click\" | \"dom.hover\" | \"dom.input\" | \"dom.scroll\";\n readonly snapshot?: ActionBoundarySnapshot;\n readonly signal: AbortSignal;\n remainingMs(): number | undefined;\n policySettle(pageRef: PageRef, trigger: ActionBoundarySettleTrigger): Promise<void>;\n}\n\nexport type DomPointerHitRelation =\n | \"self\"\n | \"descendant\"\n | \"ancestor\"\n | \"same-owner\"\n | \"outside\"\n | \"unknown\";\n\nexport interface DomPointerHitAssessment {\n readonly relation: DomPointerHitRelation;\n readonly blocking: boolean;\n readonly ambiguous?: boolean;\n readonly canonicalTarget?: NodeLocator;\n readonly hitOwner?: NodeLocator;\n}\n\nexport interface DomActionBridge {\n buildReplayPath(locator: NodeLocator): Promise<ReplayElementPath>;\n inspectActionTarget(locator: NodeLocator): Promise<DomActionTargetInspection>;\n canonicalizePointerTarget(locator: NodeLocator): Promise<NodeLocator>;\n classifyPointerHit(input: {\n readonly target: NodeLocator;\n readonly hit: NodeLocator;\n readonly point: Point;\n }): Promise<DomPointerHitAssessment>;\n scrollNodeIntoView(locator: NodeLocator, options?: DomActionScrollOptions): Promise<void>;\n focusNode(locator: NodeLocator): Promise<void>;\n pressKey(locator: NodeLocator, input: DomActionKeyPressInput): Promise<void>;\n finalizeDomAction(\n pageRef: PageRef,\n options: DomActionSettleOptions,\n ): Promise<ActionBoundaryOutcome>;\n}\n\nexport interface DomActionBridgeProvider {\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge;\n}\n\ntype DomActionBridgeFactory = DomActionBridgeProvider[typeof OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL];\n\nfunction isDomActionBridgeFactory(value: unknown): value is DomActionBridgeFactory {\n return typeof value === \"function\";\n}\n\nexport function resolveDomActionBridge(\n engine: BrowserCoreEngine | DomActionBridgeProvider,\n): DomActionBridge | undefined {\n const candidate = Reflect.get(engine, OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL);\n return isDomActionBridgeFactory(candidate) ? candidate.call(engine) : undefined;\n}\n","import {\n noBrowserCapabilities,\n mergeBrowserCapabilities,\n type BrowserCapabilities,\n type HeaderEntry,\n} from \"@opensteer/browser-core\";\nimport type { Browser, BrowserContext, Page } from \"playwright\";\n\nexport const DEFAULT_BODY_CAPTURE_LIMIT_BYTES = 1024 * 1024;\n\nexport const PLAYWRIGHT_BROWSER_CORE_CAPABILITIES: BrowserCapabilities = mergeBrowserCapabilities(\n noBrowserCapabilities(),\n {\n executor: {\n sessionLifecycle: true,\n pageLifecycle: true,\n navigation: true,\n pointerInput: true,\n keyboardInput: true,\n screenshots: true,\n executionControl: {\n freeze: true,\n },\n },\n inspector: {\n pageEnumeration: true,\n frameEnumeration: true,\n html: true,\n domSnapshot: true,\n visualStability: true,\n text: true,\n attributes: true,\n hitTest: true,\n viewportMetrics: true,\n network: true,\n networkBodies: true,\n cookies: true,\n localStorage: true,\n sessionStorage: true,\n indexedDb: true,\n },\n transport: {\n sessionHttp: true,\n },\n instrumentation: {\n initScripts: true,\n routing: true,\n },\n events: {\n pageLifecycle: true,\n dialog: true,\n download: true,\n chooser: true,\n console: true,\n pageError: true,\n },\n },\n);\n\nexport interface PlaywrightChromiumLaunchOptions {\n readonly headless?: boolean;\n readonly executablePath?: string;\n readonly channel?: string;\n readonly args?: readonly string[];\n readonly chromiumSandbox?: boolean;\n readonly devtools?: boolean;\n readonly downloadsPath?: string;\n readonly proxy?: {\n readonly server: string;\n readonly bypass?: string;\n readonly username?: string;\n readonly password?: string;\n };\n readonly slowMo?: number;\n readonly timeoutMs?: number;\n}\n\nexport interface PlaywrightBrowserContextOptions {\n readonly ignoreHTTPSErrors?: boolean;\n readonly locale?: string;\n readonly timezoneId?: string;\n readonly userAgent?: string;\n readonly viewport?: {\n readonly width: number;\n readonly height: number;\n } | null;\n readonly javaScriptEnabled?: boolean;\n readonly bypassCSP?: boolean;\n readonly reducedMotion?: \"reduce\" | \"no-preference\";\n readonly colorScheme?: \"light\" | \"dark\" | \"no-preference\";\n readonly extraHTTPHeaders?: readonly HeaderEntry[];\n}\n\nexport interface AdoptedChromiumBrowser {\n readonly browserType: () => { readonly name: () => string };\n readonly close: () => Promise<void>;\n readonly newContext: (options?: Record<string, unknown>) => Promise<unknown>;\n}\n\nexport interface PlaywrightBrowserCoreEngineOptions {\n readonly browser?: AdoptedChromiumBrowser;\n readonly closeBrowserOnDispose?: boolean;\n readonly launch?: PlaywrightChromiumLaunchOptions;\n readonly context?: PlaywrightBrowserContextOptions;\n readonly attachedContext?: BrowserContext;\n readonly attachedPage?: Page;\n readonly closeAttachedContextOnSessionClose?: boolean;\n readonly bodyCaptureLimitBytes?: number;\n}\n\nexport function asChromiumBrowser(browser: AdoptedChromiumBrowser): Browser {\n return browser as unknown as Browser;\n}\n\nexport function buildContextOptions(\n options: PlaywrightBrowserContextOptions | undefined,\n): Record<string, unknown> {\n if (!options) {\n return {\n acceptDownloads: true,\n };\n }\n\n return {\n acceptDownloads: true,\n ...(options.ignoreHTTPSErrors === undefined\n ? {}\n : { ignoreHTTPSErrors: options.ignoreHTTPSErrors }),\n ...(options.locale === undefined ? {} : { locale: options.locale }),\n ...(options.timezoneId === undefined ? {} : { timezoneId: options.timezoneId }),\n ...(options.userAgent === undefined ? {} : { userAgent: options.userAgent }),\n ...(options.viewport === undefined ? {} : { viewport: options.viewport }),\n ...(options.javaScriptEnabled === undefined\n ? {}\n : { javaScriptEnabled: options.javaScriptEnabled }),\n ...(options.bypassCSP === undefined ? {} : { bypassCSP: options.bypassCSP }),\n ...(options.reducedMotion === undefined ? {} : { reducedMotion: options.reducedMotion }),\n ...(options.colorScheme === undefined ? {} : { colorScheme: options.colorScheme }),\n ...(options.extraHTTPHeaders === undefined\n ? {}\n : {\n extraHTTPHeaders: Object.fromEntries(\n options.extraHTTPHeaders.map((header) => [header.name, header.value]),\n ),\n }),\n };\n}\n\nexport function buildLaunchOptions(\n options: PlaywrightChromiumLaunchOptions | undefined,\n): Record<string, unknown> {\n return {\n headless: options?.headless ?? false,\n ...(options?.executablePath === undefined ? {} : { executablePath: options.executablePath }),\n ...(options?.channel === undefined ? {} : { channel: options.channel }),\n ...(options?.args === undefined ? {} : { args: [...options.args] }),\n ...(options?.chromiumSandbox === undefined ? {} : { chromiumSandbox: options.chromiumSandbox }),\n ...(options?.devtools === undefined ? {} : { devtools: options.devtools }),\n ...(options?.downloadsPath === undefined ? {} : { downloadsPath: options.downloadsPath }),\n ...(options?.proxy === undefined ? {} : { proxy: options.proxy }),\n ...(options?.slowMo === undefined ? {} : { slowMo: options.slowMo }),\n ...(options?.timeoutMs === undefined ? {} : { timeout: options.timeoutMs }),\n };\n}\n","import {\n createBodyPayload,\n type BodyPayload,\n type CookieRecord,\n type NetworkResourceType,\n type ScreenshotFormat,\n type StepEvent,\n type StorageEntry,\n} from \"@opensteer/browser-core\";\nimport type { ConsoleMessage, Cookie } from \"playwright\";\nimport type { DomTreeNode, RareIntegerData, RareStringData, ShadowBoundaryInfo } from \"./types.js\";\n\nexport function clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nexport function normalizeSameSite(value: Cookie[\"sameSite\"]): CookieRecord[\"sameSite\"] {\n switch (value) {\n case \"Strict\":\n return \"strict\";\n case \"Lax\":\n return \"lax\";\n case \"None\":\n return \"none\";\n }\n}\n\nexport function normalizeResourceType(value: string): NetworkResourceType {\n switch (value) {\n case \"document\":\n case \"stylesheet\":\n case \"image\":\n case \"media\":\n case \"font\":\n case \"script\":\n case \"texttrack\":\n case \"xhr\":\n case \"fetch\":\n case \"websocket\":\n case \"manifest\":\n return value;\n case \"eventsource\":\n return \"event-stream\";\n default:\n return \"other\";\n }\n}\n\nexport function normalizeDialogType(\n value: string,\n): Extract<StepEvent, { readonly kind: \"dialog-opened\" }>[\"dialogType\"] {\n switch (value) {\n case \"alert\":\n case \"beforeunload\":\n case \"confirm\":\n case \"prompt\":\n return value;\n default:\n return \"alert\";\n }\n}\n\nexport function normalizeConsoleLevel(\n value: ReturnType<ConsoleMessage[\"type\"]>,\n): Extract<StepEvent, { readonly kind: \"console\" }>[\"level\"] {\n switch (value) {\n case \"warning\":\n return \"warn\";\n case \"debug\":\n case \"info\":\n case \"error\":\n case \"trace\":\n return value;\n default:\n return \"log\";\n }\n}\n\nexport function parseMimeType(value: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (value === undefined) {\n return {};\n }\n const [mimeTypePart, ...parts] = value.split(\";\");\n const mimeType = mimeTypePart?.trim();\n let charset: string | undefined;\n for (const part of parts) {\n const [name, rawValue] = part.split(\"=\");\n if (name?.trim().toLowerCase() === \"charset\" && rawValue) {\n charset = rawValue.trim();\n }\n }\n return {\n ...(mimeType ? { mimeType } : {}),\n ...(charset ? { charset } : {}),\n };\n}\n\nexport function captureBodyPayload(\n bytes: Buffer | Uint8Array | null,\n contentType: string | undefined,\n limit: number,\n): BodyPayload | undefined {\n if (bytes === null) {\n return undefined;\n }\n\n const buffer = bytes instanceof Buffer ? bytes : Buffer.from(bytes);\n const truncated = buffer.byteLength > limit;\n const captured = truncated ? buffer.subarray(0, limit) : buffer;\n const { mimeType, charset } = parseMimeType(contentType);\n return createBodyPayload(new Uint8Array(captured), {\n ...(mimeType === undefined ? {} : { mimeType }),\n ...(charset === undefined ? {} : { charset }),\n truncated,\n ...(truncated ? { originalByteLength: buffer.byteLength } : {}),\n });\n}\n\nexport function combineFrameUrl(url: string, fragment?: string): string {\n return `${url}${fragment ?? \"\"}`;\n}\n\nexport function parseStringTable(strings: readonly string[], index: number | undefined): string {\n if (index === undefined) {\n return \"\";\n }\n return strings[index] ?? \"\";\n}\n\nexport function rareStringValue(\n strings: readonly string[],\n data: RareStringData | undefined,\n index: number,\n): string | undefined {\n if (!data) {\n return undefined;\n }\n const rareIndex = data.index.indexOf(index);\n if (rareIndex === -1) {\n return undefined;\n }\n const stringIndex = data.value[rareIndex];\n return parseStringTable(strings, stringIndex);\n}\n\nexport function rareIntegerValue(\n data: RareIntegerData | undefined,\n index: number,\n): number | undefined {\n if (!data) {\n return undefined;\n }\n const rareIndex = data.index.indexOf(index);\n if (rareIndex === -1) {\n return undefined;\n }\n return data.value[rareIndex];\n}\n\nexport function normalizeShadowRootType(\n value: string | undefined,\n): \"open\" | \"closed\" | \"user-agent\" | undefined {\n if (value === \"open\" || value === \"closed\" || value === \"user-agent\") {\n return value;\n }\n return undefined;\n}\n\nexport function buildShadowBoundaryIndex(\n root: DomTreeNode,\n): ReadonlyMap<number, ShadowBoundaryInfo> {\n const byBackendNodeId = new Map<number, ShadowBoundaryInfo>();\n\n const visit = (node: DomTreeNode, boundary: ShadowBoundaryInfo): void => {\n if (node.backendNodeId !== undefined) {\n byBackendNodeId.set(node.backendNodeId, boundary);\n }\n\n for (const child of node.children ?? []) {\n visit(child, boundary);\n }\n\n for (const shadowRoot of node.shadowRoots ?? []) {\n const shadowBoundary: ShadowBoundaryInfo = {\n ...(node.backendNodeId === undefined\n ? {}\n : { shadowHostBackendNodeId: node.backendNodeId }),\n ...(shadowRoot.shadowRootType === undefined\n ? {}\n : { shadowRootType: shadowRoot.shadowRootType }),\n };\n\n for (const child of shadowRoot.children ?? []) {\n visit(child, shadowBoundary);\n }\n }\n\n if (node.contentDocument) {\n visit(node.contentDocument, {});\n }\n };\n\n visit(root, {});\n return byBackendNodeId;\n}\n\nexport function interleavedAttributesToEntries(values: readonly string[]): StorageEntry[] {\n const entries: StorageEntry[] = [];\n for (let index = 0; index < values.length; index += 2) {\n const key = values[index];\n const value = values[index + 1];\n if (key !== undefined && value !== undefined) {\n entries.push({ key, value });\n }\n }\n return entries;\n}\n\nexport function mapScreenshotFormat(format: ScreenshotFormat | undefined): ScreenshotFormat {\n return format ?? \"png\";\n}\n","import {\n createBrowserCoreError,\n createPoint,\n createRect,\n type CoordinateSpace,\n type Point,\n type Rect,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\n\nexport function unsupportedCoordinateSpace(coordinateSpace: CoordinateSpace): never {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n `coordinate space ${coordinateSpace} is not supported by this backend`,\n { details: { coordinateSpace } },\n );\n}\n\nexport function toDocumentPoint(\n metrics: ViewportMetrics,\n point: Point,\n coordinateSpace: CoordinateSpace,\n): Point {\n switch (coordinateSpace) {\n case \"document-css\":\n return point;\n case \"layout-viewport-css\":\n return createPoint(point.x + metrics.scrollOffset.x, point.y + metrics.scrollOffset.y);\n case \"visual-viewport-css\":\n return createPoint(\n point.x + metrics.visualViewport.origin.x,\n point.y + metrics.visualViewport.origin.y,\n );\n case \"device-pixel\":\n return createPoint(\n point.x / metrics.devicePixelRatio + metrics.scrollOffset.x,\n point.y / metrics.devicePixelRatio + metrics.scrollOffset.y,\n );\n case \"computer-display-css\":\n case \"screen\":\n case \"window\":\n unsupportedCoordinateSpace(coordinateSpace);\n }\n}\n\nexport function toViewportPoint(\n metrics: ViewportMetrics,\n point: Point,\n coordinateSpace: CoordinateSpace,\n): Point {\n switch (coordinateSpace) {\n case \"layout-viewport-css\":\n case \"visual-viewport-css\":\n return point;\n case \"document-css\":\n return createPoint(point.x - metrics.scrollOffset.x, point.y - metrics.scrollOffset.y);\n case \"device-pixel\":\n return createPoint(point.x / metrics.devicePixelRatio, point.y / metrics.devicePixelRatio);\n case \"computer-display-css\":\n case \"screen\":\n case \"window\":\n unsupportedCoordinateSpace(coordinateSpace);\n }\n}\n\nexport function toViewportRect(\n metrics: ViewportMetrics,\n rect: Rect,\n coordinateSpace: CoordinateSpace,\n): Rect {\n const origin = toViewportPoint(metrics, createPoint(rect.x, rect.y), coordinateSpace);\n return createRect(origin.x, origin.y, rect.width, rect.height);\n}\n","import {\n buildCdpShadowBoundaryIndex,\n buildDomSnapshotFromCdpCapture,\n DOM_SNAPSHOT_COMPUTED_STYLE_NAMES,\n nextDocumentEpoch,\n parseCdpStringTable,\n staleNodeRefError,\n type DocumentRef,\n type DomSnapshot,\n type NodeLocator,\n type NodeRef,\n} from \"@opensteer/browser-core\";\nimport type { CDPSession } from \"playwright\";\n\nimport type {\n CapturedDomSnapshot,\n DocumentState,\n DomSnapshotDocument,\n DomTreeNode,\n FrameState,\n ShadowBoundaryInfo,\n} from \"./types.js\";\n\nexport async function capturePageDomSnapshot(\n cdp: CDPSession,\n options: {\n readonly includeLayout: boolean;\n },\n): Promise<{\n readonly capturedAt: number;\n readonly documents: readonly DomSnapshotDocument[];\n readonly shadowBoundariesByBackendNodeId: ReadonlyMap<number, ShadowBoundaryInfo>;\n readonly strings: readonly string[];\n}> {\n const capturedAt = Date.now();\n const [snapshotResult, domTreeResult] = await Promise.all([\n cdp.send(\"DOMSnapshot.captureSnapshot\", {\n computedStyles: [...DOM_SNAPSHOT_COMPUTED_STYLE_NAMES],\n includePaintOrder: options.includeLayout,\n includeDOMRects: options.includeLayout,\n }),\n cdp.send(\"DOM.getDocument\", {\n depth: -1,\n pierce: true,\n }),\n ]);\n\n return {\n capturedAt,\n documents: snapshotResult.documents as readonly DomSnapshotDocument[],\n shadowBoundariesByBackendNodeId: buildCdpShadowBoundaryIndex(\n domTreeResult.root as DomTreeNode,\n ) as ReadonlyMap<number, ShadowBoundaryInfo>,\n strings: snapshotResult.strings,\n };\n}\n\nexport function findCapturedDocument(\n captured: {\n readonly documents: readonly DomSnapshotDocument[];\n readonly strings: readonly string[];\n },\n cdpFrameId: string,\n): DomSnapshotDocument | undefined {\n return captured.documents.find(\n (candidate) => parseCdpStringTable(captured.strings, candidate.frameId) === cdpFrameId,\n );\n}\n\nexport function updateDocumentTreeSignature(\n document: DocumentState,\n rawDocument: DomSnapshotDocument,\n retiredDocuments: ReadonlySet<DocumentRef>,\n): void {\n const backendNodeIds = (rawDocument.nodes.backendNodeId ?? [])\n .filter((value): value is number => value !== undefined)\n .slice()\n .sort((left, right) => left - right);\n const signature = `${rawDocument.nodes.nodeType?.length ?? 0}:${backendNodeIds.join(\",\")}`;\n\n if (\n document.domTreeSignature !== undefined &&\n document.domTreeSignature !== signature &&\n !retiredDocuments.has(document.documentRef)\n ) {\n document.documentEpoch = nextDocumentEpoch(document.documentEpoch);\n document.nodeRefsByBackendNodeId.clear();\n document.backendNodeIdsByNodeRef.clear();\n }\n\n document.domTreeSignature = signature;\n}\n\nexport function resolveCapturedContentDocumentRef(\n framesByCdpId: ReadonlyMap<string, FrameState>,\n captured: CapturedDomSnapshot,\n contentDocumentIndex: number,\n): DocumentRef | undefined {\n const contentDocument = captured.documents[contentDocumentIndex];\n if (!contentDocument) {\n return undefined;\n }\n\n const cdpFrameId = parseCdpStringTable(captured.strings, contentDocument.frameId);\n if (cdpFrameId.length === 0) {\n return undefined;\n }\n\n return framesByCdpId.get(cdpFrameId)?.currentDocument.documentRef;\n}\n\nexport function findHtmlBackendNodeId(\n captured: CapturedDomSnapshot,\n document: DocumentState,\n): number | undefined {\n const nodeNames = captured.rawDocument.nodes.nodeName ?? [];\n const backendNodeIds = captured.rawDocument.nodes.backendNodeId ?? [];\n for (let index = 0; index < nodeNames.length; index += 1) {\n if (parseCdpStringTable(captured.strings, nodeNames[index]) === \"HTML\") {\n return backendNodeIds[index];\n }\n }\n return document.backendNodeIdsByNodeRef.values().next().value;\n}\n\nexport function buildDomSnapshot(\n document: DocumentState,\n captured: CapturedDomSnapshot,\n nodeRefResolver: (document: DocumentState, backendNodeId: number) => NodeRef,\n contentDocRefResolver: (contentDocumentIndex: number) => DocumentRef | undefined,\n): DomSnapshot {\n return buildDomSnapshotFromCdpCapture(\n document,\n captured,\n (backendNodeId) => nodeRefResolver(document, backendNodeId),\n contentDocRefResolver,\n );\n}\n\nexport function readTextContent(snapshot: DomSnapshot, input: NodeLocator): string | null {\n const node = snapshot.nodes.find((candidate) => candidate.nodeRef === input.nodeRef);\n if (!node) {\n throw staleNodeRefError(input);\n }\n if (node.nodeType === 9 || node.nodeType === 10) {\n return null;\n }\n return node.textContent ?? \"\";\n}\n","import {\n createBrowserCoreError,\n isBrowserCoreError,\n staleNodeRefError,\n type NodeLocator,\n type PageRef,\n} from \"@opensteer/browser-core\";\nimport { errors as playwrightErrors } from \"playwright\";\nimport type { DocumentState, PageController } from \"./types.js\";\n\nexport function unsupportedCursorCapture(): never {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n \"capturing the cursor in screenshots is not supported by this backend\",\n );\n}\n\nexport function normalizePlaywrightError(error: unknown, pageRef: PageRef): Error {\n if (isBrowserCoreError(error)) {\n return error;\n }\n if (error instanceof playwrightErrors.TimeoutError) {\n return createBrowserCoreError(\"timeout\", error.message, { cause: error });\n }\n if (error instanceof Error && /Navigation failed/i.test(error.message)) {\n return createBrowserCoreError(\"navigation-failed\", error.message, {\n cause: error,\n details: { pageRef },\n });\n }\n if (error instanceof Error) {\n return createBrowserCoreError(\"operation-failed\", error.message, {\n cause: error,\n details: { pageRef },\n });\n }\n return createBrowserCoreError(\"operation-failed\", \"Playwright operation failed\", {\n cause: error,\n details: { pageRef },\n });\n}\n\nexport function isContextClosedError(error: unknown): boolean {\n return (\n error instanceof Error && /Target page, context or browser has been closed/i.test(error.message)\n );\n}\n\nexport function shouldIgnoreBackgroundTaskError(\n controller: PageController,\n error: unknown,\n): boolean {\n return (\n controller.lifecycleState === \"closed\" ||\n controller.explicitCloseInFlight ||\n isContextClosedError(error)\n );\n}\n\nexport function isNodeLookupFailure(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n );\n}\n\nexport function rethrowNodeLookupError(\n error: unknown,\n document: DocumentState,\n input: NodeLocator,\n): never {\n if (isNodeLookupFailure(error)) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: input.documentEpoch,\n nodeRef: input.nodeRef,\n });\n }\n throw error;\n}\n","import {\n createBodyPayload,\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createScrollOffset,\n createSize,\n type ScreenshotArtifact,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\n\nimport type { FrameState, PageController } from \"./types.js\";\n\nexport async function getViewportMetricsFromCdp(controller: {\n readonly cdp: PageController[\"cdp\"];\n}): Promise<ViewportMetrics> {\n const layout = await controller.cdp.send(\"Page.getLayoutMetrics\");\n const dprResult = await controller.cdp.send(\"Runtime.evaluate\", {\n expression: \"window.devicePixelRatio\",\n returnByValue: true,\n });\n const pageZoomFactor = layout.cssVisualViewport.zoom ?? 1;\n const devicePixelRatio = typeof dprResult.result.value === \"number\" ? dprResult.result.value : 1;\n return {\n layoutViewport: {\n origin: { x: layout.cssLayoutViewport.pageX, y: layout.cssLayoutViewport.pageY },\n size: {\n width: layout.cssLayoutViewport.clientWidth,\n height: layout.cssLayoutViewport.clientHeight,\n },\n },\n visualViewport: {\n origin: { x: layout.cssVisualViewport.pageX, y: layout.cssVisualViewport.pageY },\n offsetWithinLayoutViewport: {\n x: layout.cssVisualViewport.offsetX,\n y: layout.cssVisualViewport.offsetY,\n },\n size: {\n width: layout.cssVisualViewport.clientWidth,\n height: layout.cssVisualViewport.clientHeight,\n },\n },\n scrollOffset: {\n x: layout.cssVisualViewport.pageX,\n y: layout.cssVisualViewport.pageY,\n },\n contentSize: {\n width: layout.cssContentSize.width,\n height: layout.cssContentSize.height,\n },\n devicePixelRatio: createDevicePixelRatio(devicePixelRatio),\n pageScaleFactor: createPageScaleFactor(layout.cssVisualViewport.scale),\n pageZoomFactor: createPageZoomFactor(pageZoomFactor),\n };\n}\n\nexport async function captureLayoutViewportScreenshotArtifact(\n controller: PageController,\n frame: FrameState,\n format: ScreenshotArtifact[\"format\"],\n): Promise<{\n readonly artifact: ScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n}> {\n const viewport = await getViewportMetricsFromCdp(controller);\n const clip = {\n x: viewport.visualViewport.origin.x,\n y: viewport.visualViewport.origin.y,\n width: viewport.visualViewport.size.width,\n height: viewport.visualViewport.size.height,\n };\n const bytes =\n format === \"png\" || format === \"jpeg\"\n ? await controller.page.screenshot({\n type: format,\n scale: \"css\",\n clip: {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height,\n },\n })\n : Buffer.from(\n (\n await controller.cdp.send(\"Page.captureScreenshot\", {\n format,\n clip: {\n ...clip,\n scale: 1 / Math.max(1, viewport.devicePixelRatio),\n },\n fromSurface: true,\n })\n ).data,\n \"base64\",\n );\n\n return {\n viewport,\n artifact: {\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n documentRef: frame.currentDocument.documentRef,\n documentEpoch: frame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(bytes), {\n mimeType: `image/${format}`,\n }),\n format,\n size: createSize(viewport.visualViewport.size.width, viewport.visualViewport.size.height),\n coordinateSpace: \"layout-viewport-css\",\n },\n };\n}\n","import {\n type ActionBoundaryOutcome,\n type PageRef,\n type Point,\n type ScreenshotArtifact,\n type StepEvent,\n} from \"@opensteer/browser-core\";\nimport type {\n ComputerUseBridge,\n ComputerUseBridgeInput,\n NormalizedComputerScreenshotOptions,\n OpensteerComputerKeyModifier,\n} from \"@opensteer/protocol\";\nimport type { Frame } from \"playwright\";\n\nimport { mapScreenshotFormat } from \"./normalize.js\";\nimport type { PlaywrightActionBoundaryOptions } from \"./action-settle.js\";\nimport type { FrameState, PageController } from \"./types.js\";\nimport { captureLayoutViewportScreenshotArtifact } from \"./viewport-screenshot.js\";\n\nconst DECORATION_NAMESPACE = \"opensteer-computer-use\";\n\nexport function createPlaywrightComputerUseBridge(context: {\n resolveController(pageRef: PageRef): PageController;\n flushPendingPageTasks(sessionRef: PageController[\"sessionRef\"]): Promise<void>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: PlaywrightActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n requireMainFrame(controller: PageController): FrameState;\n drainQueuedEvents(pageRef: PageRef): readonly StepEvent[];\n withModifiers(\n page: PageController[\"page\"],\n modifiers: readonly OpensteerComputerKeyModifier[] | undefined,\n action: () => Promise<void>,\n ): Promise<void>;\n}): ComputerUseBridge {\n const cursorByPageRef = new Map<PageRef, Point>();\n\n return {\n async execute(input) {\n const startedAt = Date.now();\n const actionController = context.resolveController(input.pageRef);\n const action = input.action;\n let boundary: ActionBoundaryOutcome | undefined;\n let actionMs = 0;\n let waitMs = 0;\n\n const actionStartedAt = Date.now();\n const cursorPoint = pointForAction(action);\n switch (action.type) {\n case \"click\":\n await context.withModifiers(actionController.page, action.modifiers, async () => {\n await actionController.page.mouse.click(action.x, action.y, {\n ...(action.button === undefined ? {} : { button: action.button }),\n ...(action.clickCount === undefined ? {} : { clickCount: action.clickCount }),\n });\n });\n break;\n case \"move\":\n await actionController.page.mouse.move(action.x, action.y);\n break;\n case \"scroll\":\n await actionController.page.mouse.move(action.x, action.y);\n await actionController.page.mouse.wheel(action.deltaX, action.deltaY);\n await waitForAnimationFrame(actionController);\n break;\n case \"type\":\n await actionController.page.keyboard.type(action.text);\n break;\n case \"key\":\n await context.withModifiers(actionController.page, action.modifiers, async () => {\n await actionController.page.keyboard.press(action.key);\n });\n break;\n case \"drag\": {\n const steps = action.steps ?? 10;\n await actionController.page.mouse.move(action.start.x, action.start.y);\n await new Promise<void>((r) => setTimeout(r, 40 + Math.random() * 30));\n await actionController.page.mouse.down();\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const eased = 1 - Math.pow(1 - t, 3);\n const jitterFade = Math.max(0, 1 - i / (steps * 0.85));\n const jx = i < steps ? (Math.random() - 0.5) * 1.6 * jitterFade : 0;\n const jy = i < steps ? (Math.random() - 0.5) * 2.4 * jitterFade : 0;\n const x = action.start.x + (action.end.x - action.start.x) * eased + jx;\n const y = action.start.y + (action.end.y - action.start.y) * eased + jy;\n await actionController.page.mouse.move(Math.round(x), Math.round(y));\n if (i < steps) {\n const baseMs = t < 0.15 ? 22 : t > 0.85 ? 20 : 10;\n await new Promise<void>((r) => setTimeout(r, baseMs + Math.random() * 14));\n }\n }\n await new Promise<void>((r) => setTimeout(r, 30 + Math.random() * 40));\n await actionController.page.mouse.up();\n break;\n }\n case \"screenshot\":\n break;\n case \"wait\":\n await delayWithSignal(action.durationMs, input.signal);\n break;\n }\n actionMs = Date.now() - actionStartedAt;\n\n if (cursorPoint !== undefined) {\n cursorByPageRef.set(actionController.pageRef, cursorPoint);\n }\n\n await context.flushPendingPageTasks(actionController.sessionRef);\n\n if (action.type !== \"screenshot\" && action.type !== \"wait\") {\n const waitStartedAt = Date.now();\n boundary = await context.settleActionBoundary(actionController, {\n signal: input.signal,\n ...(input.snapshot === undefined ? {} : { snapshot: input.snapshot }),\n remainingMs: input.remainingMs,\n policySettle: input.policySettle,\n });\n waitMs = Date.now() - waitStartedAt;\n } else if (action.type === \"wait\") {\n waitMs = actionMs;\n actionMs = 0;\n }\n\n await context.flushPendingPageTasks(actionController.sessionRef);\n const actionEvents = context.drainQueuedEvents(actionController.pageRef);\n const resultPageRef = resolveResultingPageRef(actionController.pageRef, actionEvents);\n let resultController = context.resolveController(resultPageRef);\n if (\n action.type !== \"screenshot\" &&\n action.type !== \"wait\" &&\n resultController.pageRef !== actionController.pageRef\n ) {\n const popupWaitStartedAt = Date.now();\n await context.settleActionBoundary(resultController, {\n signal: input.signal,\n remainingMs: input.remainingMs,\n policySettle: input.policySettle,\n });\n waitMs += Date.now() - popupWaitStartedAt;\n await context.flushPendingPageTasks(actionController.sessionRef);\n resultController = context.resolveController(resultController.pageRef);\n }\n await context.flushDomUpdateTask(resultController);\n\n const screenshotCursor =\n resultController.pageRef === actionController.pageRef\n ? cursorByPageRef.get(resultController.pageRef)\n : undefined;\n const captured = await captureScreenshotWithDecorations(resultController, {\n screenshot: input.screenshot,\n ...(screenshotCursor === undefined ? {} : { cursorPoint: screenshotCursor }),\n });\n\n const events = [\n ...actionEvents,\n ...(resultController.pageRef === actionController.pageRef\n ? []\n : context.drainQueuedEvents(resultController.pageRef)),\n ];\n\n return {\n pageRef: resultController.pageRef,\n screenshot: captured.screenshot,\n viewport: captured.viewport,\n events,\n timing: {\n actionMs,\n waitMs,\n totalMs: Date.now() - startedAt,\n },\n ...(boundary === undefined ? {} : { boundary }),\n };\n },\n };\n}\n\nfunction pointForAction(action: ComputerUseBridgeInput[\"action\"]): Point | undefined {\n switch (action.type) {\n case \"click\":\n case \"move\":\n case \"scroll\":\n return {\n x: action.x,\n y: action.y,\n };\n case \"drag\":\n return action.end;\n case \"key\":\n case \"screenshot\":\n case \"type\":\n case \"wait\":\n return undefined;\n }\n}\n\nfunction resolveResultingPageRef(pageRef: PageRef, events: readonly StepEvent[]): PageRef {\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const event = events[index]!;\n if (event.kind === \"popup-opened\") {\n return event.pageRef;\n }\n }\n return pageRef;\n}\n\nasync function waitForAnimationFrame(controller: PageController): Promise<void> {\n await controller.page.evaluate(\n () =>\n new Promise<void>((resolve) => {\n (\n globalThis as unknown as {\n requestAnimationFrame(callback: () => void): number;\n }\n ).requestAnimationFrame(() => resolve());\n }),\n );\n}\n\nasync function captureScreenshotWithDecorations(\n controller: PageController,\n options: {\n readonly screenshot: NormalizedComputerScreenshotOptions;\n readonly cursorPoint?: Point;\n },\n): Promise<{\n readonly screenshot: ScreenshotArtifact;\n readonly viewport: Awaited<\n ReturnType<typeof captureLayoutViewportScreenshotArtifact>\n >[\"viewport\"];\n}> {\n const shouldDecorate =\n options.screenshot.annotations.length > 0 ||\n (options.screenshot.includeCursor && options.cursorPoint !== undefined);\n\n if (shouldDecorate) {\n await injectDecorations(controller, {\n annotations: options.screenshot.annotations,\n ...(options.screenshot.includeCursor && options.cursorPoint !== undefined\n ? { cursorPoint: options.cursorPoint }\n : {}),\n });\n }\n\n try {\n const format = mapScreenshotFormat(options.screenshot.format);\n const mainFrame = requireMainFrameState(controller);\n const { artifact, viewport } = await captureLayoutViewportScreenshotArtifact(\n controller,\n mainFrame,\n format,\n );\n return {\n screenshot: artifact,\n viewport,\n };\n } finally {\n if (shouldDecorate) {\n await cleanupDecorations(controller);\n }\n }\n}\n\nfunction requireMainFrameState(controller: PageController): FrameState {\n if (!controller.mainFrameRef) {\n throw new Error(`page ${controller.pageRef} has no main frame`);\n }\n const mainFrame = Array.from(controller.framesByCdpId.values()).find(\n (frame) => frame.frameRef === controller.mainFrameRef,\n );\n if (!mainFrame) {\n throw new Error(`page ${controller.pageRef} has no registered main frame state`);\n }\n return mainFrame;\n}\n\nasync function injectDecorations(\n controller: PageController,\n options: {\n readonly annotations: NormalizedComputerScreenshotOptions[\"annotations\"];\n readonly cursorPoint?: Point;\n },\n): Promise<void> {\n const frames = controller.page.frames();\n await Promise.all(\n frames.map(async (frame) => {\n const rootOverlay = frame === controller.page.mainFrame();\n await runFrameScript(frame, options, rootOverlay, \"inject\");\n }),\n );\n}\n\nasync function cleanupDecorations(controller: PageController): Promise<void> {\n await Promise.all(\n controller.page\n .frames()\n .map((frame) =>\n runFrameScript(\n frame,\n { annotations: [] },\n frame === controller.page.mainFrame(),\n \"cleanup\",\n ),\n ),\n );\n}\n\nasync function runFrameScript(\n frame: Frame,\n options: {\n readonly annotations: NormalizedComputerScreenshotOptions[\"annotations\"];\n readonly cursorPoint?: Point;\n },\n rootOverlay: boolean,\n mode: \"inject\" | \"cleanup\",\n): Promise<void> {\n try {\n await frame.evaluate(\n ({\n annotations,\n cursorPoint,\n namespace,\n rootOverlay,\n mode,\n }: {\n readonly annotations: NormalizedComputerScreenshotOptions[\"annotations\"];\n readonly cursorPoint?: Point;\n readonly namespace: string;\n readonly rootOverlay: boolean;\n readonly mode: \"inject\" | \"cleanup\";\n }) => {\n const host = globalThis as unknown as {\n document: any;\n window: {\n innerWidth?: number;\n innerHeight?: number;\n };\n HTMLElement: new (...args: readonly unknown[]) => any;\n getComputedStyle(element: any): {\n readonly overflow?: string;\n readonly overflowX?: string;\n readonly overflowY?: string;\n };\n };\n const document = host.document;\n const window = host.window;\n const HTMLElement = host.HTMLElement;\n const getComputedStyle = host.getComputedStyle;\n const styleId = `${namespace}-style`;\n const overlayId = `${namespace}-overlay`;\n const scrollableClass = `${namespace}-scrollable`;\n\n const cleanup = () => {\n document.getElementById(styleId)?.remove();\n document.getElementById(overlayId)?.remove();\n document.querySelectorAll(`.${scrollableClass}`).forEach((element: any) => {\n element.classList.remove(scrollableClass);\n });\n };\n\n cleanup();\n if (mode === \"cleanup\") {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.id = styleId;\n const css: string[] = [];\n if (annotations.includes(\"clickable\")) {\n css.push(\n `a,button,[role='button'],[role='link'],[onclick],[tabindex]:not([tabindex='-1']){outline:2px solid #4CAF50!important;outline-offset:-2px!important;}`,\n );\n }\n if (annotations.includes(\"typeable\")) {\n css.push(\n `input:not([type='hidden']):not([type='checkbox']):not([type='radio']):not([type='submit']):not([type='button']),textarea,[contenteditable='true']{outline:2px solid #FF9800!important;outline-offset:-2px!important;}`,\n );\n }\n if (annotations.includes(\"scrollable\")) {\n css.push(\n `.${scrollableClass}{outline:2px dashed #9C27B0!important;outline-offset:-2px!important;}`,\n );\n }\n if (annotations.includes(\"selected\")) {\n css.push(`:focus{outline:3px solid #2196F3!important;outline-offset:-3px!important;}`);\n }\n if (css.length > 0) {\n style.textContent = css.join(\"\\n\");\n (document.head ?? document.documentElement)?.appendChild(style);\n }\n\n if (annotations.includes(\"scrollable\")) {\n const nodes = Array.from(document.querySelectorAll(\"*\"));\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue;\n }\n const rect = node.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n continue;\n }\n const computed = getComputedStyle(node);\n const overflow = `${computed.overflow} ${computed.overflowX} ${computed.overflowY}`;\n if (!/(auto|scroll|overlay)/i.test(overflow)) {\n continue;\n }\n if (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth) {\n continue;\n }\n node.classList.add(scrollableClass);\n }\n }\n\n if (!rootOverlay) {\n return;\n }\n\n const overlay = document.createElement(\"div\");\n overlay.id = overlayId;\n overlay.style.position = \"fixed\";\n overlay.style.inset = \"0\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"2147483647\";\n\n if (annotations.includes(\"grid\")) {\n const grid = document.createElement(\"div\");\n grid.style.position = \"absolute\";\n grid.style.inset = \"0\";\n grid.style.backgroundImage =\n \"repeating-linear-gradient(to right, rgba(255,0,0,0.22) 0, rgba(255,0,0,0.22) 1px, transparent 1px, transparent 100px), repeating-linear-gradient(to bottom, rgba(255,0,0,0.22) 0, rgba(255,0,0,0.22) 1px, transparent 1px, transparent 100px)\";\n overlay.appendChild(grid);\n\n const width = window.innerWidth || 0;\n const height = window.innerHeight || 0;\n for (let x = 100; x < width; x += 100) {\n const label = document.createElement(\"div\");\n label.textContent = String(x);\n label.style.position = \"absolute\";\n label.style.left = `${String(x + 4)}px`;\n label.style.top = \"4px\";\n label.style.font = \"11px monospace\";\n label.style.color = \"#b71c1c\";\n label.style.background = \"rgba(255,255,255,0.86)\";\n label.style.padding = \"1px 3px\";\n overlay.appendChild(label);\n }\n for (let y = 100; y < height; y += 100) {\n const label = document.createElement(\"div\");\n label.textContent = String(y);\n label.style.position = \"absolute\";\n label.style.left = \"4px\";\n label.style.top = `${String(y + 4)}px`;\n label.style.font = \"11px monospace\";\n label.style.color = \"#b71c1c\";\n label.style.background = \"rgba(255,255,255,0.86)\";\n label.style.padding = \"1px 3px\";\n overlay.appendChild(label);\n }\n }\n\n if (cursorPoint !== undefined) {\n const cursor = document.createElement(\"div\");\n cursor.style.position = \"absolute\";\n cursor.style.left = `${String(cursorPoint.x)}px`;\n cursor.style.top = `${String(cursorPoint.y)}px`;\n cursor.style.width = \"14px\";\n cursor.style.height = \"14px\";\n cursor.style.border = \"2px solid rgba(17,17,17,0.92)\";\n cursor.style.borderRadius = \"999px\";\n cursor.style.background = \"rgba(255,255,255,0.92)\";\n cursor.style.transform = \"translate(-50%, -50%)\";\n overlay.appendChild(cursor);\n\n const crosshair = document.createElement(\"div\");\n crosshair.style.position = \"absolute\";\n crosshair.style.left = `${String(cursorPoint.x)}px`;\n crosshair.style.top = `${String(cursorPoint.y)}px`;\n crosshair.style.width = \"20px\";\n crosshair.style.height = \"20px\";\n crosshair.style.borderLeft = \"1px solid rgba(17,17,17,0.7)\";\n crosshair.style.borderTop = \"1px solid rgba(17,17,17,0.7)\";\n crosshair.style.transform = \"translate(-50%, -50%)\";\n overlay.appendChild(crosshair);\n }\n\n document.documentElement?.appendChild(overlay);\n },\n {\n annotations: [...options.annotations],\n ...(options.cursorPoint === undefined ? {} : { cursorPoint: options.cursorPoint }),\n namespace: DECORATION_NAMESPACE,\n rootOverlay,\n mode,\n },\n );\n } catch {}\n}\n\nfunction delayWithSignal(durationMs: number, signal: AbortSignal): Promise<void> {\n if (durationMs <= 0) {\n return Promise.resolve();\n }\n if (signal.aborted) {\n return Promise.reject(signal.reason);\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, durationMs);\n const onAbort = () => {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import {\n type ActionBoundaryOutcome,\n createPoint,\n createRect,\n quadBounds,\n staleNodeRefError,\n type FrameRef,\n type KeyModifier,\n type NodeLocator,\n type PageRef,\n type Quad,\n type Rect,\n type SessionRef,\n} from \"@opensteer/browser-core\";\nimport type {\n DomActionBridge,\n DomPointerHitAssessment,\n DomActionTargetInspection,\n ReplayElementPath,\n} from \"@opensteer/protocol\";\nimport type { ElementHandle, Frame } from \"playwright\";\n\nimport { rethrowNodeLookupError } from \"./errors.js\";\nimport type { PlaywrightActionBoundaryOptions } from \"./action-settle.js\";\nimport type { DocumentState, PageController } from \"./types.js\";\nimport { getViewportMetricsFromCdp } from \"./viewport-screenshot.js\";\n\ninterface PlaywrightDomActionBridgeContext {\n resolveController(pageRef: PageRef): PageController;\n flushPendingPageTasks(sessionRef: SessionRef): Promise<void>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: PlaywrightActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n locateBackendNode(document: DocumentState, backendNodeId: number): NodeLocator;\n requireFrame(frameRef: FrameRef): Frame;\n requireLiveNode(locator: NodeLocator): {\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n };\n}\n\nconst READ_ACTION_TARGET_STATE_DECLARATION = String.raw`function() {\n const node = this;\n if (!(node instanceof Element)) {\n return {\n connected: false,\n cssVisible: false,\n enabled: false,\n editable: false,\n pointerEvents: \"auto\",\n };\n }\n\n const ownerWindow = node.ownerDocument?.defaultView;\n if (!ownerWindow) {\n return {\n connected: node.isConnected,\n cssVisible: false,\n enabled: false,\n editable: false,\n pointerEvents: \"auto\",\n };\n }\n\n const style = ownerWindow.getComputedStyle(node);\n\n const enabled =\n typeof node.matches === \"function\"\n ? !node.matches(\":disabled\") && node.getAttribute(\"aria-disabled\") !== \"true\"\n : true;\n\n const editable =\n (node instanceof ownerWindow.HTMLInputElement ||\n node instanceof ownerWindow.HTMLTextAreaElement) &&\n !node.readOnly &&\n enabled\n ? true\n : node instanceof ownerWindow.HTMLSelectElement && enabled\n ? true\n : node.isContentEditable;\n\n return {\n connected: node.isConnected,\n cssVisible:\n style.visibility !== \"hidden\" &&\n style.visibility !== \"collapse\" &&\n style.display !== \"none\",\n enabled,\n editable,\n pointerEvents: style.pointerEvents,\n };\n}`;\n\nconst POINTER_ACTION_HELPERS = String.raw`\n function parentInComposedTree(node) {\n if (!node) {\n return null;\n }\n const slot = \"assignedSlot\" in node ? node.assignedSlot : null;\n if (slot instanceof Element) {\n return slot;\n }\n const parent = node.parentNode;\n if (parent instanceof ShadowRoot) {\n return parent.host;\n }\n return parent instanceof Element ? parent : null;\n }\n\n function closestElementInComposedTree(node) {\n if (!node) {\n return null;\n }\n if (node instanceof Element) {\n return node;\n }\n let current = parentInComposedTree(node);\n while (current) {\n if (current instanceof Element) {\n return current;\n }\n current = parentInComposedTree(current);\n }\n return null;\n }\n\n function hasInteractiveRole(element) {\n const role = element.getAttribute(\"role\");\n return (\n role === \"button\" ||\n role === \"link\" ||\n role === \"menuitem\" ||\n role === \"tab\" ||\n role === \"checkbox\" ||\n role === \"radio\" ||\n role === \"switch\" ||\n role === \"option\"\n );\n }\n\n function isInteractiveElement(element) {\n const tagName = element.localName;\n if (\n tagName === \"button\" ||\n tagName === \"select\" ||\n tagName === \"textarea\" ||\n tagName === \"summary\"\n ) {\n return true;\n }\n if (tagName === \"a\") {\n return element.hasAttribute(\"href\");\n }\n if (tagName === \"input\") {\n return element.getAttribute(\"type\") !== \"hidden\";\n }\n if (element.isContentEditable || hasInteractiveRole(element)) {\n return true;\n }\n\n const tabIndex = element.getAttribute(\"tabindex\");\n if (tabIndex !== null && tabIndex !== \"-1\") {\n return true;\n }\n\n return typeof element.onclick === \"function\";\n }\n\n function findPointerOwner(node) {\n const element = closestElementInComposedTree(node);\n if (!element) {\n return null;\n }\n\n let current = element;\n while (current) {\n if (current.localName === \"label\") {\n const control = \"control\" in current ? current.control : null;\n if (control instanceof Element) {\n return control;\n }\n }\n if (isInteractiveElement(current)) {\n return current;\n }\n current = parentInComposedTree(current);\n }\n\n return element;\n }\n\n function composedContains(container, node) {\n if (!(container instanceof Node) || !(node instanceof Node)) {\n return false;\n }\n let current = node;\n while (current) {\n if (current === container) {\n return true;\n }\n current = parentInComposedTree(current);\n }\n return false;\n }\n\n function documentRectForElement(element) {\n const ownerWindow = element.ownerDocument?.defaultView;\n if (!ownerWindow) {\n return null;\n }\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left + ownerWindow.scrollX,\n top: rect.top + ownerWindow.scrollY,\n right: rect.right + ownerWindow.scrollX,\n bottom: rect.bottom + ownerWindow.scrollY,\n };\n }\n\n function pointInsideDocumentRect(point, rect) {\n return (\n point.x >= rect.left &&\n point.x <= rect.right &&\n point.y >= rect.top &&\n point.y <= rect.bottom\n );\n }\n\n function isVisiblyBlockingElement(element) {\n const ownerWindow = element.ownerDocument?.defaultView;\n if (!ownerWindow) {\n return false;\n }\n const style = ownerWindow.getComputedStyle(element);\n if (\n style.display === \"none\" ||\n style.visibility === \"hidden\" ||\n style.visibility === \"collapse\"\n ) {\n return false;\n }\n if (Number.parseFloat(style.opacity || \"1\") <= 0) {\n return false;\n }\n if (style.pointerEvents === \"none\") {\n return false;\n }\n const rect = element.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n }\n`;\n\nconst RESOLVE_POINTER_OWNER_DECLARATION =\n String.raw`function() {\n ` +\n POINTER_ACTION_HELPERS +\n String.raw`\n return findPointerOwner(this);\n}`;\n\nconst CLASSIFY_POINTER_HIT_DECLARATION =\n String.raw`function(hitNode, point) {\n ` +\n POINTER_ACTION_HELPERS +\n String.raw`\n const targetElement = closestElementInComposedTree(this);\n const hitElement = closestElementInComposedTree(hitNode);\n if (!targetElement || !hitElement) {\n return {\n relation: \"unknown\",\n blocking: false,\n ambiguous: true,\n };\n }\n\n const targetOwner = findPointerOwner(targetElement);\n const hitOwner = findPointerOwner(hitElement);\n let relation = \"outside\";\n if (targetElement === hitElement) {\n relation = \"self\";\n } else if (composedContains(targetElement, hitElement)) {\n relation = \"descendant\";\n } else if (composedContains(hitElement, targetElement)) {\n relation = \"ancestor\";\n } else if (targetOwner && hitOwner && targetOwner === hitOwner) {\n relation = \"same-owner\";\n }\n\n const targetRect = documentRectForElement(targetOwner || targetElement);\n const blockingCandidate = hitOwner || hitElement;\n const blocking =\n relation === \"outside\" &&\n blockingCandidate &&\n blockingCandidate !== targetOwner &&\n isVisiblyBlockingElement(blockingCandidate);\n const ambiguous =\n relation === \"outside\" && !blocking && targetRect\n ? pointInsideDocumentRect(point, targetRect)\n : false;\n\n return {\n relation,\n blocking,\n ambiguous,\n };\n}`;\n\nconst LIVE_REPLAY_PATH_MATCH_ATTRIBUTE_PRIORITY = [\n \"class\",\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n \"name\",\n \"role\",\n \"type\",\n \"aria-label\",\n \"title\",\n \"placeholder\",\n \"for\",\n \"aria-controls\",\n \"aria-labelledby\",\n \"aria-describedby\",\n \"id\",\n \"href\",\n \"value\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"alt\",\n] as const;\n\nconst LIVE_REPLAY_PATH_STABLE_PRIMARY_ATTR_KEYS = [\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n \"name\",\n \"role\",\n \"type\",\n \"aria-label\",\n \"title\",\n \"placeholder\",\n] as const;\n\nconst LIVE_REPLAY_PATH_DEFERRED_MATCH_ATTR_KEYS = [\n \"href\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"value\",\n \"for\",\n \"aria-controls\",\n \"aria-labelledby\",\n \"aria-describedby\",\n] as const;\n\nconst LIVE_REPLAY_PATH_POLICY = {\n matchAttributePriority: LIVE_REPLAY_PATH_MATCH_ATTRIBUTE_PRIORITY,\n stablePrimaryAttrKeys: LIVE_REPLAY_PATH_STABLE_PRIMARY_ATTR_KEYS,\n deferredMatchAttrKeys: LIVE_REPLAY_PATH_DEFERRED_MATCH_ATTR_KEYS,\n};\n\nconst BUILD_LIVE_REPLAY_PATH_DECLARATION = String.raw`function(policy, source) {\n const buildReplayPath = (0, eval)(source);\n return buildReplayPath(this, policy);\n}`;\n\nconst BUILD_LIVE_REPLAY_PATH_SOURCE = String.raw`(target, policy) => {\n const MAX_ATTRIBUTE_VALUE_LENGTH = 300;\n\n function isValidAttrKey(key) {\n const trimmed = String(key || \"\").trim();\n if (!trimmed) return false;\n if (/[\\s\"'<>/]/.test(trimmed)) return false;\n return /^[A-Za-z_][A-Za-z0-9_:\\-.]*$/.test(trimmed);\n }\n\n function isMediaTag(tag) {\n return new Set([\"img\", \"video\", \"source\", \"iframe\"]).has(String(tag || \"\").toLowerCase());\n }\n\n function shouldKeepAttr(tag, key, value) {\n const normalized = String(key || \"\").trim().toLowerCase();\n if (!normalized || !String(value || \"\").trim()) return false;\n if (!isValidAttrKey(key)) return false;\n if (normalized === \"c\") return false;\n if (/^on[a-z]/i.test(normalized)) return false;\n if (new Set([\"style\", \"nonce\", \"integrity\", \"crossorigin\", \"referrerpolicy\", \"autocomplete\"]).has(normalized)) {\n return false;\n }\n if (normalized.startsWith(\"data-os-\") || normalized.startsWith(\"data-opensteer-\")) {\n return false;\n }\n if (\n isMediaTag(tag) &&\n new Set([\n \"data-src\",\n \"data-lazy-src\",\n \"data-original\",\n \"data-lazy\",\n \"data-image\",\n \"data-url\",\n \"data-srcset\",\n \"data-lazy-srcset\",\n \"data-was-processed\",\n ]).has(normalized)\n ) {\n return false;\n }\n return true;\n }\n\n function collectAttrs(node) {\n const tag = node.tagName.toLowerCase();\n const attrs = {};\n for (const attr of Array.from(node.attributes)) {\n if (!shouldKeepAttr(tag, attr.name, attr.value)) {\n continue;\n }\n const value = String(attr.value || \"\");\n if (!value.trim()) continue;\n if (value.length > MAX_ATTRIBUTE_VALUE_LENGTH) continue;\n attrs[attr.name] = value;\n }\n return attrs;\n }\n\n function getSiblings(node, root) {\n if (node.parentElement) return Array.from(node.parentElement.children);\n return Array.from(root.children || []);\n }\n\n function toPosition(node, root) {\n const siblings = getSiblings(node, root);\n const tag = node.tagName.toLowerCase();\n const sameTag = siblings.filter((candidate) => candidate.tagName.toLowerCase() === tag);\n return {\n nthChild: siblings.indexOf(node) + 1,\n nthOfType: sameTag.indexOf(node) + 1,\n };\n }\n\n function buildChain(node) {\n const chain = [];\n let current = node;\n while (current) {\n chain.push(current);\n if (current.parentElement) {\n current = current.parentElement;\n continue;\n }\n break;\n }\n chain.reverse();\n return chain;\n }\n\n function sortAttributeKeys(keys) {\n const priority = Array.isArray(policy?.matchAttributePriority)\n ? policy.matchAttributePriority.map((value) => String(value))\n : [];\n return [...keys].sort((left, right) => {\n const leftIndex = priority.indexOf(left);\n const rightIndex = priority.indexOf(right);\n const leftRank = leftIndex === -1 ? Number.MAX_SAFE_INTEGER : leftIndex;\n const rightRank = rightIndex === -1 ? Number.MAX_SAFE_INTEGER : rightIndex;\n if (leftRank !== rightRank) {\n return leftRank - rightRank;\n }\n return left.localeCompare(right);\n });\n }\n\n function tokenizeClassValue(value) {\n const seen = new Set();\n const out = [];\n for (const token of String(value || \"\").split(/\\s+/)) {\n const normalized = token.trim();\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n out.push(normalized);\n }\n return out;\n }\n\n function clauseKey(clause) {\n return JSON.stringify(clause);\n }\n\n function shouldDeferMatchAttribute(rawKey) {\n const key = String(rawKey || \"\").trim().toLowerCase();\n if (!key || key === \"class\") return false;\n if (key === \"id\" || /(?:^|[-_:])id$/.test(key)) return true;\n const deferred = new Set(\n Array.isArray(policy?.deferredMatchAttrKeys)\n ? policy.deferredMatchAttrKeys.map((value) => String(value))\n : [],\n );\n if (deferred.has(key)) return true;\n const stablePrimary = new Set(\n Array.isArray(policy?.stablePrimaryAttrKeys)\n ? policy.stablePrimaryAttrKeys.map((value) => String(value))\n : [],\n );\n if (key.startsWith(\"data-\") && !stablePrimary.has(key)) return true;\n return !stablePrimary.has(key);\n }\n\n function buildSegmentSelector(data) {\n let selector = String(data.tag || \"*\").toLowerCase();\n for (const clause of data.match || []) {\n if (clause.kind === \"position\") {\n if (clause.axis === \"nthOfType\") {\n selector += \":nth-of-type(\" + Math.max(1, Number(data.position?.nthOfType || 1)) + \")\";\n } else {\n selector += \":nth-child(\" + Math.max(1, Number(data.position?.nthChild || 1)) + \")\";\n }\n continue;\n }\n\n const key = String(clause.key || \"\");\n const value = typeof clause.value === \"string\" ? clause.value : data.attrs?.[key];\n if (!key || !value) continue;\n if (key === \"class\" && (clause.op || \"exact\") === \"exact\") {\n for (const token of tokenizeClassValue(value)) {\n const escapedToken = String(token).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n selector += '[class~=\"' + escapedToken + '\"]';\n }\n continue;\n }\n const escaped = String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n const op = clause.op || \"exact\";\n if (op === \"startsWith\") selector += \"[\" + key + '^=\"' + escaped + '\"]';\n else if (op === \"contains\") selector += \"[\" + key + '*=\"' + escaped + '\"]';\n else selector += \"[\" + key + '=\"' + escaped + '\"]';\n }\n return selector;\n }\n\n function buildCandidates(nodes) {\n const parts = nodes.map((node) => buildSegmentSelector(node));\n const out = [];\n const seen = new Set();\n for (let start = 0; start < parts.length; start += 1) {\n const selector = parts.slice(start).join(\" \");\n if (!selector || seen.has(selector)) continue;\n seen.add(selector);\n out.push(selector);\n }\n return out;\n }\n\n function selectReplayCandidate(nodes, root) {\n const selectors = buildCandidates(nodes);\n let fallback = null;\n let fallbackSelector = null;\n let fallbackCount = 0;\n for (const selector of selectors) {\n let matches = [];\n try {\n matches = Array.from(root.querySelectorAll(selector));\n } catch {\n matches = [];\n }\n if (!matches.length) continue;\n if (matches.length === 1) {\n return {\n element: matches[0],\n selector,\n count: 1,\n mode: \"unique\",\n };\n }\n if (!fallback) {\n fallback = matches[0];\n fallbackSelector = selector;\n fallbackCount = matches.length;\n }\n }\n if (fallback && fallbackSelector) {\n return {\n element: fallback,\n selector: fallbackSelector,\n count: fallbackCount,\n mode: \"fallback\",\n };\n }\n return null;\n }\n\n function buildClausePool(data) {\n const attrs = data.attrs || {};\n const pool = [];\n const deferred = [];\n const used = new Set();\n\n const classValue = String(attrs.class || \"\").trim();\n if (classValue) {\n const clause = { kind: \"attr\", key: \"class\", op: \"exact\", value: classValue };\n used.add(clauseKey(clause));\n pool.push(clause);\n }\n\n for (const key of sortAttributeKeys(Object.keys(attrs))) {\n if (key === \"class\") continue;\n const value = attrs[key];\n if (!value || !String(value).trim()) continue;\n const clause = { kind: \"attr\", key, op: \"exact\" };\n const keyId = clauseKey(clause);\n if (used.has(keyId)) continue;\n used.add(keyId);\n if (shouldDeferMatchAttribute(key)) deferred.push(clause);\n else pool.push(clause);\n }\n\n for (const clause of [\n { kind: \"position\", axis: \"nthOfType\" },\n { kind: \"position\", axis: \"nthChild\" },\n ]) {\n const keyId = clauseKey(clause);\n if (used.has(keyId)) continue;\n used.add(keyId);\n pool.push(clause);\n }\n\n if (!pool.some((clause) => clause.kind === \"attr\")) {\n pool.push(...deferred);\n }\n\n return pool;\n }\n\n function finalizePath(elements, root) {\n if (!elements.length) return null;\n const nodes = elements.map((element) => ({\n tag: element.tagName.toLowerCase(),\n attrs: collectAttrs(element),\n position: toPosition(element, root),\n match: [],\n }));\n\n const pools = nodes.map((node) => {\n node.match = [];\n return [...buildClausePool(node)];\n });\n\n for (let index = 0; index < pools.length; index += 1) {\n const classIndex = pools[index].findIndex(\n (clause) => clause.kind === \"attr\" && clause.key === \"class\",\n );\n if (classIndex < 0) continue;\n const classClause = pools[index][classIndex];\n if (!classClause) continue;\n nodes[index].match.push(classClause);\n pools[index].splice(classIndex, 1);\n }\n\n const expected = elements[elements.length - 1];\n const totalRemaining = pools.reduce((count, pool) => count + pool.length, 0);\n for (let iteration = 0; iteration <= totalRemaining; iteration += 1) {\n const chosen = selectReplayCandidate(nodes, root);\n if (chosen && chosen.mode === \"unique\" && chosen.element === expected) {\n return {\n nodes,\n selector: chosen.selector,\n };\n }\n\n let added = false;\n for (let index = pools.length - 1; index >= 0; index -= 1) {\n const next = pools[index][0];\n if (!next) continue;\n nodes[index].match.push(next);\n pools[index].shift();\n added = true;\n break;\n }\n if (!added) break;\n }\n\n return null;\n }\n\n if (!(target instanceof Element)) return null;\n\n const context = [];\n let currentRoot = target.getRootNode() instanceof ShadowRoot ? target.getRootNode() : document;\n const targetChain = buildChain(target);\n const finalizedTarget = finalizePath(targetChain, currentRoot);\n if (!finalizedTarget) return null;\n\n while (currentRoot instanceof ShadowRoot) {\n const host = currentRoot.host;\n const hostRoot =\n host.getRootNode() instanceof ShadowRoot ? host.getRootNode() : document;\n const hostChain = buildChain(host);\n const finalizedHost = finalizePath(hostChain, hostRoot);\n if (!finalizedHost) return null;\n context.unshift({\n kind: \"shadow\",\n host: finalizedHost.nodes,\n });\n currentRoot = hostRoot;\n }\n\n return {\n resolution: \"deterministic\",\n context,\n nodes: finalizedTarget.nodes,\n };\n}`;\n\nexport function createPlaywrightDomActionBridge(\n context: PlaywrightDomActionBridgeContext,\n): DomActionBridge {\n return {\n buildReplayPath(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const localPath = await buildLiveReplayPathForLocator(\n controller,\n document,\n locator,\n backendNodeId,\n );\n return prefixIframeReplayPath(context, document.frameRef, localPath);\n });\n },\n\n inspectActionTarget(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n const [state, contentQuads] = await Promise.all([\n callNodeFunction(controller, document, locator, backendNodeId, {\n functionDeclaration: READ_ACTION_TARGET_STATE_DECLARATION,\n returnByValue: true,\n }),\n readContentQuads(controller, document, locator, nodeId),\n ]);\n\n return normalizeActionTargetInspection(state, contentQuads);\n });\n },\n\n canonicalizePointerTarget(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n return (\n (await callNodeFunctionForLocator(context, controller, document, locator, backendNodeId, {\n functionDeclaration: RESOLVE_POINTER_OWNER_DECLARATION,\n })) ?? locator\n );\n });\n },\n\n async classifyPointerHit(input) {\n return withLiveNode(\n context,\n input.target,\n async ({ controller, document, backendNodeId }) => {\n const hitLiveNode = context.requireLiveNode(input.hit);\n await context.flushDomUpdateTask(hitLiveNode.controller);\n\n const value = await callNodeFunctionWithNodeArgument(\n controller,\n document,\n input.target,\n backendNodeId,\n input.hit,\n hitLiveNode.backendNodeId,\n {\n functionDeclaration: CLASSIFY_POINTER_HIT_DECLARATION,\n arguments: [{ value: input.point }],\n },\n );\n\n const assessment = normalizePointerHitAssessment(value, input.target);\n if (!assessment.blocking || assessment.relation !== \"outside\") {\n return assessment;\n }\n\n const hitOwner = await callNodeFunctionForLocator(\n context,\n hitLiveNode.controller,\n hitLiveNode.document,\n input.hit,\n hitLiveNode.backendNodeId,\n {\n functionDeclaration: RESOLVE_POINTER_OWNER_DECLARATION,\n },\n );\n\n return {\n ...assessment,\n ...(hitOwner === undefined ? {} : { hitOwner }),\n };\n },\n );\n },\n\n async scrollNodeIntoView(locator, _options) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await sendNodeIdCommand(controller, document, locator, \"DOM.scrollIntoViewIfNeeded\", {\n nodeId,\n });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async focusNode(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await sendNodeIdCommand(controller, document, locator, \"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async pressKey(locator, input) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await sendNodeIdCommand(controller, document, locator, \"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n await withKeyboardModifiers(controller, input.modifiers, async () => {\n await controller.page.keyboard.press(input.key);\n });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async finalizeDomAction(pageRef, options) {\n const controller = context.resolveController(pageRef);\n return context.settleActionBoundary(controller, {\n signal: options.signal,\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n remainingMs: options.remainingMs,\n policySettle: options.policySettle,\n });\n },\n };\n}\n\nasync function withLiveNode<T>(\n context: PlaywrightDomActionBridgeContext,\n locator: NodeLocator,\n callback: (input: {\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n }) => Promise<T>,\n): Promise<T> {\n const liveNode = context.requireLiveNode(locator);\n await context.flushDomUpdateTask(liveNode.controller);\n return callback(liveNode);\n}\n\nasync function withKeyboardModifiers(\n controller: PageController,\n modifiers: readonly KeyModifier[] | undefined,\n action: () => Promise<void>,\n): Promise<void> {\n if (modifiers === undefined || modifiers.length === 0) {\n await action();\n return;\n }\n\n for (const modifier of modifiers) {\n await controller.page.keyboard.down(modifier);\n }\n\n try {\n await action();\n } finally {\n for (const modifier of [...modifiers].reverse()) {\n await controller.page.keyboard.up(modifier);\n }\n }\n}\n\nasync function callNodeFunctionForLocator(\n context: PlaywrightDomActionBridgeContext,\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n },\n): Promise<NodeLocator | undefined> {\n let sourceObjectId: string | undefined;\n let resultObjectId: string | undefined;\n\n try {\n sourceObjectId = await resolveNodeObjectId(controller, document, locator, backendNodeId);\n const evaluated = (await controller.cdp.send(\"Runtime.callFunctionOn\", {\n objectId: sourceObjectId,\n functionDeclaration: input.functionDeclaration,\n returnByValue: false,\n awaitPromise: true,\n })) as {\n readonly result?: {\n readonly objectId?: string;\n readonly subtype?: string;\n };\n };\n\n if (evaluated.result?.subtype === \"null\") {\n return undefined;\n }\n resultObjectId = evaluated.result?.objectId;\n if (resultObjectId === undefined) {\n return undefined;\n }\n\n const requested = (await controller.cdp.send(\"DOM.requestNode\", {\n objectId: resultObjectId,\n })) as {\n readonly nodeId?: number;\n };\n if (requested.nodeId === undefined) {\n return undefined;\n }\n\n const described = (await controller.cdp.send(\"DOM.describeNode\", {\n nodeId: requested.nodeId,\n })) as {\n readonly node?: {\n readonly backendNodeId?: number;\n };\n };\n if (described.node?.backendNodeId === undefined) {\n return undefined;\n }\n\n return context.locateBackendNode(document, described.node.backendNodeId);\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n } finally {\n await releaseObject(controller, resultObjectId);\n await releaseObject(controller, sourceObjectId);\n }\n}\n\nasync function callNodeFunction(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n readonly arguments?: { readonly value: unknown }[];\n readonly returnByValue: boolean;\n },\n): Promise<unknown> {\n let objectId: string | undefined;\n\n try {\n const resolved = (await controller.cdp.send(\"DOM.resolveNode\", {\n backendNodeId,\n })) as {\n readonly object?: {\n readonly objectId?: string;\n };\n };\n objectId = resolved.object?.objectId;\n if (objectId === undefined) {\n throw staleNodeRefError(locator);\n }\n\n const evaluated = (await controller.cdp.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n ...(input.arguments === undefined ? {} : { arguments: input.arguments }),\n returnByValue: input.returnByValue,\n awaitPromise: true,\n })) as {\n readonly result?: {\n readonly value?: unknown;\n };\n };\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n } finally {\n if (objectId !== undefined) {\n await controller.cdp.send(\"Runtime.releaseObject\", { objectId }).catch(() => undefined);\n }\n }\n}\n\nasync function callNodeFunctionWithNodeArgument(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n argumentLocator: NodeLocator,\n argumentBackendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n readonly arguments?: { readonly value: unknown }[];\n },\n): Promise<unknown> {\n let objectId: string | undefined;\n let argumentObjectId: string | undefined;\n\n try {\n objectId = await resolveNodeObjectId(controller, document, locator, backendNodeId);\n argumentObjectId = await resolveNodeObjectId(\n controller,\n document,\n argumentLocator,\n argumentBackendNodeId,\n );\n const evaluated = (await controller.cdp.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n arguments: [{ objectId: argumentObjectId }, ...(input.arguments ?? [])],\n returnByValue: true,\n awaitPromise: true,\n })) as {\n readonly result?: {\n readonly value?: unknown;\n };\n };\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n } finally {\n await releaseObject(controller, argumentObjectId);\n await releaseObject(controller, objectId);\n }\n}\n\nasync function resolveNodeObjectId(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n): Promise<string> {\n try {\n const resolved = (await controller.cdp.send(\"DOM.resolveNode\", {\n backendNodeId,\n })) as {\n readonly object?: {\n readonly objectId?: string;\n };\n };\n const objectId = resolved.object?.objectId;\n if (objectId === undefined) {\n throw staleNodeRefError(locator);\n }\n return objectId;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n }\n}\n\nasync function resolveFrontendNodeId(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n): Promise<number> {\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = (await controller.cdp.send(\"DOM.pushNodesByBackendIdsToFrontend\", {\n backendNodeIds: [backendNodeId],\n })) as {\n readonly nodeIds: readonly number[];\n };\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(locator);\n }\n return nodeId;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n }\n}\n\nasync function sendNodeIdCommand<TResult>(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n method: Parameters<PageController[\"cdp\"][\"send\"]>[0],\n params: Parameters<PageController[\"cdp\"][\"send\"]>[1],\n): Promise<TResult> {\n try {\n return (await controller.cdp.send(method, params)) as TResult;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n }\n}\n\nasync function readContentQuads(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n nodeId: number,\n): Promise<readonly Quad[]> {\n const metrics = await getViewportMetricsFromCdp(controller);\n const result = await sendNodeIdCommand<{\n readonly quads?: ReadonlyArray<readonly number[]>;\n }>(controller, document, locator, \"DOM.getContentQuads\", { nodeId });\n\n return (result.quads ?? [])\n .filter((quad): quad is readonly number[] => quad.length === 8)\n .map((quad) => [\n createPoint(quad[0]! + metrics.scrollOffset.x, quad[1]! + metrics.scrollOffset.y),\n createPoint(quad[2]! + metrics.scrollOffset.x, quad[3]! + metrics.scrollOffset.y),\n createPoint(quad[4]! + metrics.scrollOffset.x, quad[5]! + metrics.scrollOffset.y),\n createPoint(quad[6]! + metrics.scrollOffset.x, quad[7]! + metrics.scrollOffset.y),\n ]);\n}\n\nfunction normalizeActionTargetInspection(\n value: unknown,\n contentQuads: readonly Quad[],\n): DomActionTargetInspection {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"DOM action bridge returned an invalid inspection payload\");\n }\n\n const candidate = value as Record<string, unknown>;\n if (\n typeof candidate.connected !== \"boolean\" ||\n typeof candidate.cssVisible !== \"boolean\" ||\n typeof candidate.enabled !== \"boolean\" ||\n typeof candidate.editable !== \"boolean\" ||\n typeof candidate.pointerEvents !== \"string\"\n ) {\n throw new Error(\"DOM action bridge returned an invalid inspection payload\");\n }\n\n const bounds = contentQuads.length === 0 ? undefined : unionQuadBounds(contentQuads);\n\n return {\n connected: candidate.connected,\n visible: candidate.cssVisible && contentQuads.length > 0,\n enabled: candidate.enabled,\n editable: candidate.editable,\n pointerEvents: candidate.pointerEvents,\n ...(bounds === undefined ? {} : { bounds }),\n contentQuads,\n };\n}\n\nfunction normalizePointerHitAssessment(\n value: unknown,\n canonicalTarget: NodeLocator,\n): DomPointerHitAssessment {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"DOM action bridge returned an invalid pointer hit payload\");\n }\n\n const candidate = value as Record<string, unknown>;\n if (\n candidate.relation !== \"self\" &&\n candidate.relation !== \"descendant\" &&\n candidate.relation !== \"ancestor\" &&\n candidate.relation !== \"same-owner\" &&\n candidate.relation !== \"outside\" &&\n candidate.relation !== \"unknown\"\n ) {\n throw new Error(\"DOM action bridge returned an invalid pointer hit relation\");\n }\n if (typeof candidate.blocking !== \"boolean\") {\n throw new Error(\"DOM action bridge returned an invalid pointer hit payload\");\n }\n if (candidate.ambiguous !== undefined && typeof candidate.ambiguous !== \"boolean\") {\n throw new Error(\"DOM action bridge returned an invalid pointer hit payload\");\n }\n\n return {\n relation: candidate.relation,\n blocking: candidate.blocking,\n ...(candidate.ambiguous === undefined ? {} : { ambiguous: candidate.ambiguous }),\n canonicalTarget,\n };\n}\n\nasync function buildLiveReplayPathForLocator(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n): Promise<ReplayElementPath> {\n const raw = await callNodeFunction(controller, document, locator, backendNodeId, {\n functionDeclaration: BUILD_LIVE_REPLAY_PATH_DECLARATION,\n arguments: [{ value: LIVE_REPLAY_PATH_POLICY }, { value: BUILD_LIVE_REPLAY_PATH_SOURCE }],\n returnByValue: true,\n });\n return requireReplayPath(raw, locator);\n}\n\nasync function prefixIframeReplayPath(\n context: PlaywrightDomActionBridgeContext,\n frameRef: FrameRef,\n localPath: ReplayElementPath,\n): Promise<ReplayElementPath> {\n let currentPath = localPath;\n let currentFrame = context.requireFrame(frameRef);\n\n while (currentFrame.parentFrame() !== null) {\n const frameElement = await currentFrame.frameElement();\n try {\n const hostPath = await buildLiveReplayPathForHandle(frameElement);\n currentPath = {\n resolution: \"deterministic\",\n context: [\n ...hostPath.context,\n { kind: \"iframe\", host: hostPath.nodes },\n ...currentPath.context,\n ],\n nodes: currentPath.nodes,\n };\n } finally {\n await frameElement.dispose().catch(() => undefined);\n }\n\n currentFrame = currentFrame.parentFrame()!;\n }\n\n return currentPath;\n}\n\nasync function buildLiveReplayPathForHandle(handle: ElementHandle): Promise<ReplayElementPath> {\n const raw = await handle.evaluate(\n (element, input) => {\n const buildReplayPath = (0, eval)(input.source);\n return buildReplayPath(element, input.policy);\n },\n {\n policy: LIVE_REPLAY_PATH_POLICY,\n source: BUILD_LIVE_REPLAY_PATH_SOURCE,\n },\n );\n return requireReplayPath(raw);\n}\n\nfunction requireReplayPath(value: unknown, locator?: NodeLocator): ReplayElementPath {\n if (\n !value ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n (value as { readonly resolution?: unknown }).resolution !== \"deterministic\"\n ) {\n throw new Error(\n locator === undefined\n ? \"live DOM replay path builder returned an invalid result\"\n : `live DOM replay path builder returned an invalid result for ${locator.nodeRef}`,\n );\n }\n\n return value as ReplayElementPath;\n}\n\nfunction unionQuadBounds(quads: readonly Quad[]): Rect {\n const bounds = quads.map((quad) => quadBounds(quad));\n const minX = Math.min(...bounds.map((rect) => rect.x));\n const minY = Math.min(...bounds.map((rect) => rect.y));\n const maxX = Math.max(...bounds.map((rect) => rect.x + rect.width));\n const maxY = Math.max(...bounds.map((rect) => rect.y + rect.height));\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nasync function releaseObject(\n controller: PageController,\n objectId: string | undefined,\n): Promise<void> {\n if (objectId === undefined) {\n return;\n }\n await controller.cdp.send(\"Runtime.releaseObject\", { objectId }).catch(() => undefined);\n}\n","import {\n CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS,\n buildPostLoadTrackerInstallScript,\n buildPostLoadTrackerReadExpression,\n normalizePostLoadTrackerState,\n waitForActionBoundary,\n type ActionBoundaryOutcome,\n type ActionBoundarySettleTrigger,\n type ActionBoundarySnapshot,\n type DocumentRef,\n type PageRef,\n} from \"@opensteer/browser-core\";\n\nimport { isContextClosedError, normalizePlaywrightError } from \"./errors.js\";\nimport type { PageController } from \"./types.js\";\n\nexport const DEFAULT_PLAYWRIGHT_ACTION_SETTLE_TIMEOUT_MS = CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS;\n\ninterface PlaywrightActionSettlerContext {\n flushPendingPageTasks(sessionRef: PageController[\"sessionRef\"]): Promise<void>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n getMainFrameDocumentRef(controller: PageController): DocumentRef | undefined;\n throwBackgroundError(controller: PageController): void;\n}\n\nexport interface PlaywrightActionSettleOptions {\n readonly controller: PageController;\n readonly timeoutMs: number;\n readonly signal?: AbortSignal;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly policySettle?: (pageRef: PageRef, trigger: ActionBoundarySettleTrigger) => Promise<void>;\n}\n\nexport interface PlaywrightActionBoundaryOptions {\n readonly signal?: AbortSignal;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly policySettle?: (pageRef: PageRef, trigger: ActionBoundarySettleTrigger) => Promise<void>;\n remainingMs(): number | undefined;\n}\n\ninterface RuntimeEvaluateValueResponse {\n readonly result?: {\n readonly value?: unknown;\n };\n}\n\nexport function clampPlaywrightActionSettleTimeout(timeoutMs: number | undefined): number {\n if (timeoutMs === undefined) {\n return DEFAULT_PLAYWRIGHT_ACTION_SETTLE_TIMEOUT_MS;\n }\n return Math.max(0, Math.min(DEFAULT_PLAYWRIGHT_ACTION_SETTLE_TIMEOUT_MS, timeoutMs));\n}\n\nexport function createPlaywrightActionSettler(context: PlaywrightActionSettlerContext) {\n const installScript = buildPostLoadTrackerInstallScript();\n const readExpression = buildPostLoadTrackerReadExpression();\n\n async function installTracker(controller: PageController): Promise<void> {\n if (!controller.settleTrackerRegistered) {\n await controller.page.addInitScript(installScript);\n controller.settleTrackerRegistered = true;\n }\n\n try {\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: installScript,\n returnByValue: true,\n awaitPromise: true,\n });\n } catch (error) {\n if (controller.lifecycleState === \"closed\" || isContextClosedError(error)) {\n return;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async function readTrackerState(controller: PageController) {\n try {\n const evaluated = (await controller.cdp.send(\"Runtime.evaluate\", {\n expression: readExpression,\n returnByValue: true,\n awaitPromise: true,\n })) as RuntimeEvaluateValueResponse;\n\n return normalizePostLoadTrackerState(evaluated.result?.value);\n } catch (error) {\n if (isIgnorableTrackerReadError(error)) {\n return undefined;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async function settle(options: PlaywrightActionSettleOptions): Promise<ActionBoundaryOutcome> {\n const { controller, timeoutMs, signal, snapshot, policySettle } = options;\n if (timeoutMs <= 0) {\n return {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n }\n\n await context.flushPendingPageTasks(controller.sessionRef);\n\n let boundary: ActionBoundaryOutcome;\n if (snapshot === undefined) {\n if (policySettle) {\n if (signal?.aborted) {\n throw signal.reason ?? abortError();\n }\n await policySettle(controller.pageRef, \"dom-action\");\n }\n boundary = {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: true,\n };\n } else {\n await installTracker(controller);\n boundary = await waitForActionBoundary({\n timeoutMs,\n ...(signal === undefined ? {} : { signal }),\n snapshot,\n getCurrentMainFrameDocumentRef: () => context.getMainFrameDocumentRef(controller),\n waitForNavigationContentLoaded: async (remainingMs) => {\n try {\n await controller.page.waitForLoadState(\"domcontentloaded\", {\n timeout: remainingMs,\n });\n } catch (error) {\n if (controller.lifecycleState === \"closed\" || isContextClosedError(error)) {\n return;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n },\n readTrackerState: () => readTrackerState(controller),\n throwBackgroundError: () => context.throwBackgroundError(controller),\n isPageClosed: () => controller.lifecycleState === \"closed\",\n });\n\n if (policySettle) {\n await policySettle(controller.pageRef, boundary.trigger);\n }\n }\n\n await context.flushPendingPageTasks(controller.sessionRef);\n if (controller.lifecycleState !== \"closed\") {\n await context.flushDomUpdateTask(controller);\n }\n\n return boundary;\n }\n\n return {\n installTracker,\n settle,\n };\n}\n\nfunction abortError() {\n return new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nfunction isIgnorableTrackerReadError(error: unknown): boolean {\n return (\n isContextClosedError(error) ||\n (error instanceof Error &&\n /Execution context was destroyed|Cannot find context|Inspected target navigated or closed/i.test(\n error.message,\n ))\n );\n}\n","import type {\n IndexedDbDatabaseSnapshot,\n IndexedDbIndexSnapshot,\n IndexedDbObjectStoreSnapshot,\n IndexedDbRecord,\n StorageOriginSnapshot,\n} from \"@opensteer/browser-core\";\nimport type { BrowserContext, Page } from \"playwright\";\n\nimport type {\n ExtendedStorageState,\n ExtendedStorageStateOrigin,\n NormalizedIndexedDbDatabase,\n NormalizedIndexedDbStore,\n} from \"./types.js\";\n\nconst ACTIVATION_PATH = \"/__opensteer_storage_capture__\";\nconst ACTIVATION_TIMEOUT_MS = 15_000;\n\ninterface IndexedDbSchemaSnapshot {\n readonly name: string;\n readonly version: number;\n readonly objectStores: readonly IndexedDbStoreSchemaSnapshot[];\n}\n\ninterface IndexedDbStoreSchemaSnapshot {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly autoIncrement: boolean;\n readonly indexes: readonly {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly multiEntry: boolean;\n readonly unique: boolean;\n }[];\n}\n\nexport async function capturePlaywrightStorageOrigins(\n context: BrowserContext,\n origins: readonly string[],\n): Promise<StorageOriginSnapshot[]> {\n const uniqueOrigins = [...new Set(origins)].sort();\n if (uniqueOrigins.length === 0) {\n return [];\n }\n\n const page = await context.newPage();\n try {\n await page.route(\"**/*\", (route) =>\n route.fulfill({\n status: 200,\n contentType: \"text/html\",\n body: '<!doctype html><html><head><meta charset=\"utf-8\"></head><body></body></html>',\n }),\n );\n\n const indexedDbSchemas = new Map<string, readonly IndexedDbSchemaSnapshot[]>();\n for (const origin of uniqueOrigins) {\n await activateOrigin(page, origin);\n indexedDbSchemas.set(origin, await inspectIndexedDbSchemas(page));\n }\n\n const state = (await context.storageState({\n indexedDB: true,\n })) as ExtendedStorageState;\n const normalizedOrigins = new Map(\n state.origins.map((origin) => [origin.origin, origin] as const),\n );\n\n return uniqueOrigins\n .map((origin) =>\n normalizeStorageOrigin(\n normalizedOrigins.get(origin),\n indexedDbSchemas.get(origin) ?? [],\n origin,\n ),\n )\n .filter((origin) => origin !== null);\n } finally {\n await page.close().catch(() => undefined);\n }\n}\n\nasync function activateOrigin(page: Page, origin: string): Promise<void> {\n await page.goto(new URL(ACTIVATION_PATH, origin).toString(), {\n waitUntil: \"domcontentloaded\",\n timeout: ACTIVATION_TIMEOUT_MS,\n });\n}\n\nasync function inspectIndexedDbSchemas(page: Page): Promise<readonly IndexedDbSchemaSnapshot[]> {\n return page.evaluate(async () => {\n interface PageIndexedDbSchemaSnapshot {\n readonly name: string;\n readonly version: number;\n readonly objectStores: readonly {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly autoIncrement: boolean;\n readonly indexes: readonly {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly multiEntry: boolean;\n readonly unique: boolean;\n }[];\n }[];\n }\n\n interface BrowserIndexedDbDescriptor {\n readonly name?: string;\n readonly version?: number;\n }\n\n interface BrowserIndexedDbFactory {\n readonly databases?: () => Promise<readonly BrowserIndexedDbDescriptor[]>;\n readonly open: (name: string) => {\n error: unknown;\n result: {\n readonly name: string;\n readonly version: number;\n readonly objectStoreNames: ArrayLike<string>;\n readonly transaction: (\n storeName: string,\n mode: \"readonly\",\n ) => {\n readonly objectStore: (name: string) => {\n readonly name: string;\n readonly keyPath: unknown;\n readonly autoIncrement: boolean;\n readonly indexNames: ArrayLike<string>;\n readonly index: (name: string) => {\n readonly name: string;\n readonly keyPath: unknown;\n readonly multiEntry: boolean;\n readonly unique: boolean;\n };\n };\n };\n readonly close: () => void;\n };\n onsuccess: (() => void) | null;\n onerror: (() => void) | null;\n };\n }\n\n const browserIndexedDb = (globalThis as { indexedDB?: BrowserIndexedDbFactory }).indexedDB;\n if (typeof browserIndexedDb?.databases !== \"function\") {\n return [] as PageIndexedDbSchemaSnapshot[];\n }\n\n const databases = await browserIndexedDb.databases();\n const snapshots: PageIndexedDbSchemaSnapshot[] = [];\n for (const descriptor of databases) {\n if (!descriptor.name) {\n continue;\n }\n const databaseName = descriptor.name;\n\n snapshots.push(\n await new Promise<PageIndexedDbSchemaSnapshot>((resolve, reject) => {\n const request = browserIndexedDb.open(databaseName);\n request.onerror = () =>\n reject(request.error ?? new Error(`indexedDB.open failed for ${databaseName}`));\n request.onsuccess = () => {\n const db = request.result;\n\n try {\n const objectStores = Array.from(db.objectStoreNames).map((storeName) => {\n const transaction = db.transaction(storeName, \"readonly\");\n const store = transaction.objectStore(storeName);\n return {\n name: store.name,\n ...(serializeKeyPath(store.keyPath) === undefined\n ? {}\n : { keyPath: serializeKeyPath(store.keyPath)! }),\n autoIncrement: store.autoIncrement,\n indexes: Array.from(store.indexNames).map((indexName) => {\n const index = store.index(indexName);\n return {\n name: index.name,\n ...(serializeKeyPath(index.keyPath) === undefined\n ? {}\n : { keyPath: serializeKeyPath(index.keyPath)! }),\n multiEntry: index.multiEntry,\n unique: index.unique,\n };\n }),\n };\n });\n\n resolve({\n name: db.name,\n version: db.version,\n objectStores,\n });\n } catch (error) {\n reject(error);\n } finally {\n db.close();\n }\n };\n }),\n );\n }\n\n return snapshots;\n\n function serializeKeyPath(keyPath: unknown): string | readonly string[] | undefined {\n if (Array.isArray(keyPath) && keyPath.every((entry) => typeof entry === \"string\")) {\n return [...keyPath];\n }\n return typeof keyPath === \"string\" ? keyPath : undefined;\n }\n });\n}\n\nfunction normalizeStorageOrigin(\n origin: ExtendedStorageStateOrigin | undefined,\n indexedDbSchemas: readonly IndexedDbSchemaSnapshot[],\n fallbackOrigin: string,\n): StorageOriginSnapshot | null {\n const databaseMap = new Map<string, NormalizedIndexedDbDatabase>(\n (origin?.indexedDB ?? []).map((database) => [database.name, database]),\n );\n const schemaMap = new Map<string, IndexedDbSchemaSnapshot>(\n indexedDbSchemas.map((database) => [database.name, database]),\n );\n const databaseNames = [...new Set([...databaseMap.keys(), ...schemaMap.keys()])];\n const indexedDb = databaseNames.map((databaseName) =>\n normalizeIndexedDbDatabase(databaseMap.get(databaseName), schemaMap.get(databaseName)),\n );\n\n if ((origin?.localStorage.length ?? 0) === 0 && indexedDb.length === 0) {\n return null;\n }\n\n const normalized: StorageOriginSnapshot = {\n origin: origin?.origin ?? fallbackOrigin,\n localStorage: (origin?.localStorage ?? []).map((entry) => ({\n key: entry.name,\n value: entry.value,\n })),\n };\n return indexedDb.length === 0 ? normalized : { ...normalized, indexedDb };\n}\n\nfunction normalizeIndexedDbDatabase(\n database: NormalizedIndexedDbDatabase | undefined,\n schema: IndexedDbSchemaSnapshot | undefined,\n): IndexedDbDatabaseSnapshot {\n const storeMap = new Map<string, NormalizedIndexedDbStore>(\n (database?.stores ?? []).map((store) => [store.name, store]),\n );\n const schemaStoreMap = new Map<string, IndexedDbStoreSchemaSnapshot>(\n (schema?.objectStores ?? []).map((store) => [store.name, store]),\n );\n const storeNames = [...new Set([...storeMap.keys(), ...schemaStoreMap.keys()])];\n\n return {\n name: database?.name ?? schema?.name ?? \"\",\n version: database?.version ?? schema?.version ?? 1,\n objectStores: storeNames.map((storeName) =>\n normalizeIndexedDbStore(storeMap.get(storeName), schemaStoreMap.get(storeName)),\n ),\n };\n}\n\nfunction normalizeIndexedDbStore(\n store: NormalizedIndexedDbStore | undefined,\n schema: IndexedDbStoreSchemaSnapshot | undefined,\n): IndexedDbObjectStoreSnapshot {\n const keyPath = storeKeyPath(store, schema);\n const indexes: IndexedDbIndexSnapshot[] = (schema?.indexes ?? []).map((index) => {\n const normalized: IndexedDbIndexSnapshot = {\n name: index.name,\n multiEntry: index.multiEntry,\n unique: index.unique,\n };\n return index.keyPath === undefined\n ? normalized\n : { ...normalized, keyPath: cloneKeyPath(index.keyPath)! };\n });\n const records: IndexedDbRecord[] = (store?.records ?? []).map((record) => ({\n key: record.key ?? record.keyEncoded ?? null,\n value: record.value ?? record.valueEncoded ?? null,\n }));\n\n const normalized: IndexedDbObjectStoreSnapshot = {\n name: store?.name ?? schema?.name ?? \"\",\n autoIncrement: store?.autoIncrement ?? schema?.autoIncrement ?? false,\n indexes,\n records,\n };\n if (keyPath === undefined) {\n return normalized;\n }\n\n return {\n ...normalized,\n keyPath,\n };\n}\n\nfunction storeKeyPath(\n store: NormalizedIndexedDbStore | undefined,\n schema: IndexedDbStoreSchemaSnapshot | undefined,\n): string | readonly string[] | undefined {\n if (store?.keyPathArray?.length) {\n return [...store.keyPathArray];\n }\n if (store?.keyPath !== undefined) {\n return store.keyPath;\n }\n return cloneKeyPath(schema?.keyPath);\n}\n\nfunction cloneKeyPath(\n keyPath: string | readonly string[] | undefined,\n): string | readonly string[] | undefined {\n if (Array.isArray(keyPath)) {\n return [...keyPath];\n }\n return keyPath;\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport {\n createBodyPayload,\n createBrowserCoreError,\n createChooserRef,\n createDocumentEpoch,\n createNodeLocator,\n createDocumentRef,\n createDownloadRef,\n createFrameRef,\n createHeaderEntry,\n createNetworkRequestId,\n createNodeRef,\n createPageRef,\n createPoint,\n createSessionRef,\n createSize,\n hasCapability,\n createDialogRef,\n isBrowserCoreError,\n matchesNetworkRecordFilters,\n waitForCdpVisualStability,\n unsupportedCapabilityError,\n staleNodeRefError,\n closedPageError,\n closedSessionError,\n type GetNetworkRecordsInput,\n type BrowserCoreEngine,\n type BrowserInitScriptInput,\n type BrowserInitScriptRegistration,\n type BrowserRouteRegistration,\n type BrowserRouteRegistrationInput,\n type CoordinateSpace,\n type DocumentEpoch,\n type DocumentRef,\n type DomSnapshot,\n type FrameInfo,\n type FrameRef,\n type HitTestResult,\n type HtmlSnapshot,\n type KeyModifier,\n type MouseButton,\n type NetworkRecord,\n type NodeLocator,\n type NodeRef,\n type PageInfo,\n type PageRef,\n type Point,\n type Rect,\n type ScreenshotArtifact,\n type ScreenshotFormat,\n type SessionRef,\n type SessionStorageSnapshot,\n type SessionTransportRequest,\n type SessionTransportResponse,\n type StepEvent,\n type StepResult,\n type StorageEntry,\n type StorageSnapshot,\n type ViewportMetrics,\n type CookieRecord,\n} from \"@opensteer/browser-core\";\nimport { chromium, type Browser, type BrowserContext } from \"playwright\";\nimport {\n OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL,\n OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL,\n type ComputerUseBridge,\n type DomActionBridge,\n} from \"@opensteer/protocol\";\nimport type {\n CDPSession,\n ConsoleMessage,\n Dialog,\n Download,\n Frame,\n Page,\n Request,\n Response,\n Route,\n} from \"playwright\";\n\nimport type {\n SessionState,\n PendingPageRegistration,\n PageController,\n FrameState,\n DocumentState,\n FrameDescriptor,\n FrameTreeNode,\n NetworkRecordState,\n CapturedDomSnapshot,\n ExtendedStorageState,\n} from \"./types.js\";\nimport {\n PLAYWRIGHT_BROWSER_CORE_CAPABILITIES,\n DEFAULT_BODY_CAPTURE_LIMIT_BYTES,\n asChromiumBrowser,\n buildContextOptions,\n buildLaunchOptions,\n type PlaywrightBrowserContextOptions,\n type PlaywrightBrowserCoreEngineOptions,\n} from \"./options.js\";\nimport {\n clone,\n normalizeSameSite,\n normalizeResourceType,\n normalizeDialogType,\n normalizeConsoleLevel,\n captureBodyPayload,\n combineFrameUrl,\n interleavedAttributesToEntries,\n mapScreenshotFormat,\n} from \"./normalize.js\";\nimport { toDocumentPoint, toViewportPoint, toViewportRect } from \"./coordinate.js\";\nimport {\n capturePageDomSnapshot,\n findCapturedDocument,\n updateDocumentTreeSignature,\n buildDomSnapshot as buildDomSnapshotFromCapture,\n resolveCapturedContentDocumentRef,\n findHtmlBackendNodeId,\n readTextContent,\n} from \"./dom.js\";\nimport {\n unsupportedCursorCapture,\n normalizePlaywrightError,\n isContextClosedError,\n shouldIgnoreBackgroundTaskError,\n rethrowNodeLookupError,\n} from \"./errors.js\";\nimport { createPlaywrightComputerUseBridge } from \"./computer-use.js\";\nimport { createPlaywrightDomActionBridge } from \"./dom-action-bridge.js\";\nimport {\n clampPlaywrightActionSettleTimeout,\n createPlaywrightActionSettler,\n} from \"./action-settle.js\";\nimport {\n captureLayoutViewportScreenshotArtifact,\n getViewportMetricsFromCdp,\n} from \"./viewport-screenshot.js\";\nimport { capturePlaywrightStorageOrigins } from \"./storage-capture.js\";\n\nexport type {\n PlaywrightChromiumLaunchOptions,\n PlaywrightBrowserContextOptions,\n AdoptedChromiumBrowser,\n PlaywrightBrowserCoreEngineOptions,\n} from \"./options.js\";\n\nexport class PlaywrightBrowserCoreEngine implements BrowserCoreEngine {\n readonly capabilities = PLAYWRIGHT_BROWSER_CORE_CAPABILITIES;\n\n private readonly browser: Browser;\n private readonly closeBrowserOnDispose: boolean;\n private readonly contextOptions: PlaywrightBrowserContextOptions | undefined;\n private readonly options: PlaywrightBrowserCoreEngineOptions;\n private readonly bodyCaptureLimitBytes: number;\n private readonly sessions = new Map<SessionRef, SessionState>();\n private readonly pages = new Map<PageRef, PageController>();\n private readonly frames = new Map<FrameRef, FrameState>();\n private readonly documents = new Map<DocumentRef, DocumentState>();\n private readonly retiredDocuments = new Set<DocumentRef>();\n private readonly pageByPlaywrightPage = new WeakMap<Page, PageController>();\n private readonly pendingPopupOpeners = new WeakMap<Page, PageRef>();\n private readonly preassignedPopupPageRefs = new WeakMap<Page, PageRef>();\n private readonly actionSettler = createPlaywrightActionSettler({\n flushPendingPageTasks: (sessionRef) => this.flushPendingPageTasks(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n getMainFrameDocumentRef: (controller) =>\n controller.mainFrameRef === undefined\n ? undefined\n : this.frames.get(controller.mainFrameRef)?.currentDocument.documentRef,\n throwBackgroundError: (controller) => this.throwBackgroundError(controller),\n });\n private pageCounter = 0;\n private frameCounter = 0;\n private documentCounter = 0;\n private nodeCounter = 0;\n private requestCounter = 0;\n private sessionCounter = 0;\n private eventCounter = 0;\n private stepCounter = 0;\n private computerUseBridge: ComputerUseBridge | undefined;\n private domActionBridge: DomActionBridge | undefined;\n private disposed = false;\n\n private constructor(\n browser: Browser,\n closeBrowserOnDispose: boolean,\n options: PlaywrightBrowserCoreEngineOptions,\n ) {\n this.browser = browser;\n this.closeBrowserOnDispose = closeBrowserOnDispose;\n this.options = options;\n this.contextOptions = options.context;\n this.bodyCaptureLimitBytes = options.bodyCaptureLimitBytes ?? DEFAULT_BODY_CAPTURE_LIMIT_BYTES;\n }\n\n static async create(\n options: PlaywrightBrowserCoreEngineOptions = {},\n ): Promise<PlaywrightBrowserCoreEngine> {\n if (options.browser) {\n if (options.browser.browserType().name() !== \"chromium\") {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n \"only Chromium browsers are supported by this backend\",\n );\n }\n return new PlaywrightBrowserCoreEngine(\n asChromiumBrowser(options.browser),\n options.closeBrowserOnDispose ?? false,\n options,\n );\n }\n\n const launched = await chromium.launch(buildLaunchOptions(options.launch));\n return new PlaywrightBrowserCoreEngine(launched, true, options);\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n\n for (const sessionRef of Array.from(this.sessions.keys())) {\n await this.closeSession({ sessionRef });\n }\n\n if (this.closeBrowserOnDispose) {\n await this.browser.close();\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge {\n this.computerUseBridge ??= createPlaywrightComputerUseBridge({\n resolveController: (pageRef) => this.requirePage(pageRef),\n flushPendingPageTasks: (sessionRef) => this.flushPendingPageTasks(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({\n controller,\n timeoutMs: clampPlaywrightActionSettleTimeout(options.remainingMs()),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n ...(options.policySettle === undefined ? {} : { policySettle: options.policySettle }),\n }),\n requireMainFrame: (controller) => this.requireMainFrame(controller),\n drainQueuedEvents: (pageRef) => this.drainQueuedEvents(pageRef),\n withModifiers: (page, modifiers, action) => this.withModifiers(page, modifiers, action),\n });\n return this.computerUseBridge;\n }\n\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge {\n this.domActionBridge ??= createPlaywrightDomActionBridge({\n resolveController: (pageRef: PageRef) => this.requirePage(pageRef),\n flushPendingPageTasks: (sessionRef: SessionRef) => this.flushPendingPageTasks(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({\n controller,\n timeoutMs: clampPlaywrightActionSettleTimeout(options.remainingMs()),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n ...(options.policySettle === undefined ? {} : { policySettle: options.policySettle }),\n }),\n locateBackendNode: (document, backendNodeId) =>\n createNodeLocator(\n document.documentRef,\n document.documentEpoch,\n this.nodeRefForBackendNode(document, backendNodeId),\n ),\n requireFrame: (frameRef) => this.requireLiveFrame(frameRef),\n requireLiveNode: (locator) => this.requireLiveNode(locator),\n });\n return this.domActionBridge;\n }\n\n async createSession(): Promise<SessionRef> {\n this.assertNotDisposed();\n const sessionRef = createSessionRef(`playwright-${++this.sessionCounter}`);\n const context =\n this.options.attachedContext ??\n (await this.browser.newContext(buildContextOptions(this.contextOptions)));\n const session: SessionState = {\n sessionRef,\n context,\n pageRefs: new Set<PageRef>(),\n networkRecords: [],\n pendingRegistrations: [],\n pendingPageTasks: new Set(),\n initialPage: this.options.attachedPage,\n closeContextOnSessionClose:\n this.options.attachedContext === undefined\n ? true\n : (this.options.closeAttachedContextOnSessionClose ?? false),\n activePageRef: undefined,\n lifecycleState: \"open\",\n };\n this.sessions.set(sessionRef, session);\n\n context.on(\"page\", (page) => {\n const task = this.handleContextPage(session, page).catch((error) => {\n if (isContextClosedError(error)) {\n return;\n }\n throw error;\n });\n session.pendingPageTasks.add(task);\n void task.finally(() => {\n session.pendingPageTasks.delete(task);\n });\n });\n\n if (session.initialPage) {\n const task = this.handleAttachedInitialPage(session, session.initialPage).catch((error) => {\n if (isContextClosedError(error)) {\n return;\n }\n throw error;\n });\n session.pendingPageTasks.add(task);\n void task.finally(() => {\n session.pendingPageTasks.delete(task);\n });\n }\n\n return sessionRef;\n }\n\n async closeSession(input: { readonly sessionRef: SessionRef }): Promise<void> {\n const session = this.requireSession(input.sessionRef);\n if (session.lifecycleState !== \"open\") {\n return;\n }\n session.lifecycleState = \"closing\";\n for (const controller of Array.from(this.pages.values())) {\n if (controller.sessionRef === session.sessionRef) {\n controller.explicitCloseInFlight = true;\n }\n }\n if (session.closeContextOnSessionClose) {\n await session.context.close().catch((error) => {\n if (isContextClosedError(error)) {\n return;\n }\n throw error;\n });\n }\n for (const pageRef of Array.from(session.pageRefs)) {\n const controller = this.pages.get(pageRef);\n if (controller) {\n this.cleanupPageController(controller);\n }\n }\n session.lifecycleState = \"closed\";\n this.sessions.delete(session.sessionRef);\n }\n\n async createPage(input: {\n readonly sessionRef: SessionRef;\n readonly openerPageRef?: PageRef;\n readonly url?: string;\n }): Promise<StepResult<PageInfo>> {\n const session = this.requireSession(input.sessionRef);\n const startedAt = Date.now();\n if (session.initialPage) {\n const initialPage = session.initialPage;\n session.initialPage = undefined;\n await this.flushPendingPageTasks(session.sessionRef);\n const controller =\n this.pageByPlaywrightPage.get(initialPage) ??\n (await this.initializePageController(session, initialPage, input.openerPageRef, true));\n if (input.url) {\n await controller.page.goto(input.url, {\n waitUntil: \"domcontentloaded\",\n });\n controller.lastKnownTitle = await this.readTitle(\n controller.page,\n controller.lastKnownTitle,\n );\n }\n session.activePageRef = controller.pageRef;\n await this.flushPendingPageTasks(session.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n return this.createStepResult(session.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: await this.buildPageInfo(controller),\n });\n }\n\n const controllerPromise = new Promise<PageController>((resolve, reject) => {\n session.pendingRegistrations.push({\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n resolve,\n reject,\n });\n });\n\n const createdPage = await session.context.newPage();\n const controller = await controllerPromise;\n if (controller.page !== createdPage) {\n throw createBrowserCoreError(\"operation-failed\", \"manual page registration desynchronized\");\n }\n\n if (input.url) {\n await controller.page.goto(input.url, {\n waitUntil: \"domcontentloaded\",\n });\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n }\n session.activePageRef = controller.pageRef;\n await this.flushPendingPageTasks(session.sessionRef);\n await this.flushDomUpdateTask(controller);\n\n const mainFrame = this.requireMainFrame(controller);\n return this.createStepResult(session.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: await this.buildPageInfo(controller),\n });\n }\n\n async closePage(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n const queued = this.drainQueuedEvents(controller.pageRef);\n controller.explicitCloseInFlight = true;\n if (!controller.externallyOwned) {\n await controller.page.close();\n }\n this.cleanupPageController(controller);\n const pageClosedEvent = this.createEvent<\"page-closed\">({\n kind: \"page-closed\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n });\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [...queued, pageClosedEvent],\n data: undefined,\n });\n }\n\n async activatePage(input: { readonly pageRef: PageRef }): Promise<StepResult<PageInfo>> {\n const controller = this.requirePage(input.pageRef);\n this.requireSession(controller.sessionRef).activePageRef = controller.pageRef;\n const startedAt = Date.now();\n await controller.page.bringToFront();\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: await this.buildPageInfo(controller),\n });\n }\n\n async navigate(input: {\n readonly pageRef: PageRef;\n readonly url: string;\n readonly referrer?: string;\n readonly timeoutMs?: number;\n }): Promise<\n StepResult<{\n readonly pageInfo: PageInfo;\n readonly mainFrame: FrameInfo;\n }>\n > {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n try {\n await controller.page.goto(input.url, {\n waitUntil: \"domcontentloaded\",\n ...(input.referrer === undefined ? {} : { referer: input.referrer }),\n ...(input.timeoutMs === undefined ? {} : { timeout: input.timeoutMs }),\n });\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: {\n pageInfo: await this.buildPageInfo(controller),\n mainFrame: this.buildFrameInfo(mainFrame),\n },\n });\n }\n\n async reload(input: { readonly pageRef: PageRef; readonly timeoutMs?: number }): Promise<\n StepResult<{\n readonly pageInfo: PageInfo;\n readonly mainFrame: FrameInfo;\n }>\n > {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n try {\n await controller.page.reload({\n waitUntil: \"domcontentloaded\",\n ...(input.timeoutMs === undefined ? {} : { timeout: input.timeoutMs }),\n });\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: {\n pageInfo: await this.buildPageInfo(controller),\n mainFrame: this.buildFrameInfo(mainFrame),\n },\n });\n }\n\n async goBack(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const beforeHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n try {\n await controller.page.goBack();\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n const afterHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n const changed = afterHistory.currentIndex !== beforeHistory.currentIndex;\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: changed,\n });\n }\n\n async goForward(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const beforeHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n try {\n await controller.page.goForward();\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n const afterHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n const changed = afterHistory.currentIndex !== beforeHistory.currentIndex;\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: changed,\n });\n }\n\n async stopLoading(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n await controller.cdp.send(\"Page.stopLoading\");\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async mouseMove(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n await controller.page.mouse.move(point.x, point.y);\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async mouseClick(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly button?: MouseButton;\n readonly clickCount?: number;\n readonly modifiers?: readonly KeyModifier[];\n }): Promise<StepResult<HitTestResult | undefined>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const hit = await this.hitTest({\n pageRef: input.pageRef,\n point: input.point,\n coordinateSpace: input.coordinateSpace,\n }).catch(() => undefined);\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n await this.withModifiers(controller.page, input.modifiers, async () => {\n await controller.page.mouse.click(point.x, point.y, {\n ...(input.button === undefined ? {} : { button: input.button }),\n ...(input.clickCount === undefined ? {} : { clickCount: input.clickCount }),\n });\n });\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: hit,\n });\n }\n\n async mouseScroll(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly delta: Point;\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n await controller.page.mouse.move(point.x, point.y);\n await controller.page.mouse.wheel(input.delta.x, input.delta.y);\n await controller.page.evaluate(\n () =>\n new Promise<void>((resolve) => {\n const raf = (\n globalThis as typeof globalThis & {\n requestAnimationFrame: (callback: () => void) => number;\n }\n ).requestAnimationFrame;\n raf(() => resolve());\n }),\n );\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async keyPress(input: {\n readonly pageRef: PageRef;\n readonly key: string;\n readonly modifiers?: readonly KeyModifier[];\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n await this.withModifiers(controller.page, input.modifiers, async () => {\n await controller.page.keyboard.press(input.key);\n });\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async textInput(input: {\n readonly pageRef: PageRef;\n readonly text: string;\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n await controller.page.keyboard.type(input.text);\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async captureScreenshot(input: {\n readonly pageRef: PageRef;\n readonly format?: ScreenshotFormat;\n readonly clip?: Rect;\n readonly clipSpace?: CoordinateSpace;\n readonly fullPage?: boolean;\n readonly includeCursor?: boolean;\n }): Promise<StepResult<ScreenshotArtifact>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n if (input.includeCursor) {\n unsupportedCursorCapture();\n }\n\n const format = mapScreenshotFormat(input.format);\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n let clip:\n | {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n }\n | undefined;\n let size = input.fullPage ? metrics.contentSize : metrics.visualViewport.size;\n let coordinateSpace: CoordinateSpace = input.clipSpace ?? \"layout-viewport-css\";\n\n if (input.clip) {\n const viewportRect = toViewportRect(\n metrics,\n input.clip,\n input.clipSpace ?? \"layout-viewport-css\",\n );\n clip = {\n x: viewportRect.x,\n y: viewportRect.y,\n width: viewportRect.width,\n height: viewportRect.height,\n scale: 1,\n };\n size = createSize(input.clip.width, input.clip.height);\n coordinateSpace = input.clipSpace ?? \"layout-viewport-css\";\n } else if (input.fullPage) {\n clip = {\n x: 0,\n y: 0,\n width: metrics.contentSize.width,\n height: metrics.contentSize.height,\n scale: 1,\n };\n coordinateSpace = \"document-css\";\n }\n\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n let artifact: ScreenshotArtifact;\n if (clip === undefined && !input.fullPage) {\n artifact = (await captureLayoutViewportScreenshotArtifact(controller, mainFrame, format))\n .artifact;\n } else if (input.fullPage && (format === \"png\" || format === \"jpeg\")) {\n const bytes = await controller.page.screenshot({\n type: format,\n fullPage: true,\n scale: \"css\",\n });\n artifact = {\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(bytes), {\n mimeType: `image/${format}`,\n }),\n format,\n size,\n coordinateSpace,\n };\n } else {\n const response = await controller.cdp.send(\"Page.captureScreenshot\", {\n format,\n ...(clip === undefined ? {} : { clip }),\n ...(input.fullPage ? { captureBeyondViewport: true } : {}),\n fromSurface: true,\n });\n artifact = {\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(Buffer.from(response.data, \"base64\")), {\n mimeType: `image/${format}`,\n }),\n format,\n size,\n coordinateSpace,\n ...(input.clip === undefined ? {} : { clip: input.clip }),\n };\n }\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: artifact,\n });\n }\n\n async setExecutionState(input: {\n readonly pageRef: PageRef;\n readonly paused?: boolean;\n readonly frozen?: boolean;\n }): Promise<\n StepResult<{\n readonly paused: boolean;\n readonly frozen: boolean;\n }>\n > {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n\n if (input.paused !== undefined) {\n throw unsupportedCapabilityError(\n input.paused ? \"executor.executionControl.pause\" : \"executor.executionControl.resume\",\n );\n }\n\n if (input.frozen !== undefined && input.frozen !== controller.frozen) {\n await controller.cdp.send(\"Page.setWebLifecycleState\", {\n state: input.frozen ? \"frozen\" : \"active\",\n });\n controller.frozen = input.frozen;\n }\n\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: {\n paused: false,\n frozen: controller.frozen,\n },\n });\n }\n\n async listPages(input: { readonly sessionRef: SessionRef }): Promise<readonly PageInfo[]> {\n const session = this.requireSession(input.sessionRef);\n const infos: PageInfo[] = [];\n for (const pageRef of session.pageRefs) {\n const controller = this.pages.get(pageRef);\n if (!controller || controller.lifecycleState === \"closed\") {\n continue;\n }\n try {\n infos.push(await this.buildPageInfo(controller));\n } catch (error) {\n if (\n isBrowserCoreError(error) &&\n (error.code === \"page-closed\" ||\n (error.code === \"operation-failed\" && error.message.includes(\"has no main frame\")))\n ) {\n continue;\n }\n throw error;\n }\n }\n return infos;\n }\n\n async listFrames(input: { readonly pageRef: PageRef }): Promise<readonly FrameInfo[]> {\n const controller = this.requirePage(input.pageRef);\n await this.flushDomUpdateTask(controller);\n return Array.from(controller.framesByCdpId.values())\n .map((frame) => this.buildFrameInfo(frame))\n .sort((left, right) => Number(right.isMainFrame) - Number(left.isMainFrame));\n }\n\n async getPageInfo(input: { readonly pageRef: PageRef }): Promise<PageInfo> {\n return this.buildPageInfo(this.requirePage(input.pageRef));\n }\n\n async getFrameInfo(input: { readonly frameRef: FrameRef }): Promise<FrameInfo> {\n const frame = this.requireFrame(input.frameRef);\n await this.flushDomUpdateTask(this.requirePage(frame.pageRef));\n return this.buildFrameInfo(frame);\n }\n\n async getHtmlSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<HtmlSnapshot> {\n const document = this.resolveDocumentTarget(input);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const captured = await this.captureDomSnapshot(controller, document);\n const rootElementBackendNodeId = findHtmlBackendNodeId(captured, document);\n if (rootElementBackendNodeId === undefined) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `document ${document.documentRef} does not expose an HTML root element`,\n );\n }\n const { outerHTML } = await controller.cdp.send(\"DOM.getOuterHTML\", {\n backendNodeId: rootElementBackendNodeId,\n includeShadowDOM: true,\n });\n\n return {\n pageRef: document.pageRef,\n frameRef: document.frameRef,\n documentRef: document.documentRef,\n documentEpoch: document.documentEpoch,\n url: document.url,\n capturedAt: captured.capturedAt,\n html: outerHTML,\n };\n }\n\n async getDomSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<DomSnapshot> {\n const document = this.resolveDocumentTarget(input);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const captured = await this.captureDomSnapshot(controller, document);\n return buildDomSnapshotFromCapture(\n document,\n captured,\n (doc, backendNodeId) => this.nodeRefForBackendNode(doc, backendNodeId),\n (contentDocIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocIndex),\n );\n }\n\n async waitForVisualStability(input: {\n readonly pageRef: PageRef;\n readonly timeoutMs?: number;\n readonly settleMs?: number;\n readonly scope?: \"main-frame\" | \"visible-frames\";\n }): Promise<void> {\n const controller = this.requirePage(input.pageRef);\n await this.flushDomUpdateTask(controller);\n await waitForCdpVisualStability(controller.cdp, {\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n ...(input.settleMs === undefined ? {} : { settleMs: input.settleMs }),\n ...(input.scope === undefined ? {} : { scope: input.scope }),\n });\n await this.flushDomUpdateTask(controller);\n }\n\n async readText(input: NodeLocator): Promise<string | null> {\n const document = this.requireDocument(input.documentRef);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const { document: liveDocument } = this.requireLiveNode(input);\n const captured = await this.captureDomSnapshot(controller, liveDocument);\n const snapshot = buildDomSnapshotFromCapture(\n liveDocument,\n captured,\n (doc, backendNodeId) => this.nodeRefForBackendNode(doc, backendNodeId),\n (contentDocIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocIndex),\n );\n return readTextContent(snapshot, input);\n }\n\n async readAttributes(\n input: NodeLocator,\n ): Promise<readonly { readonly name: string; readonly value: string }[]> {\n const document = this.requireDocument(input.documentRef);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const { document: liveDocument, backendNodeId } = this.requireLiveNode(input);\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send(\"DOM.pushNodesByBackendIdsToFrontend\", {\n backendNodeIds: [backendNodeId],\n });\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(input);\n }\n const { attributes } = await controller.cdp.send(\"DOM.getAttributes\", { nodeId });\n const normalized = interleavedAttributesToEntries(attributes).map((entry) => ({\n name: entry.key,\n value: entry.value,\n }));\n return normalized;\n } catch (error) {\n rethrowNodeLookupError(error, liveDocument, input);\n }\n }\n\n async hitTest(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly ignorePointerEventsNone?: boolean;\n readonly includeUserAgentShadowDom?: boolean;\n }): Promise<HitTestResult> {\n const controller = this.requirePage(input.pageRef);\n await this.flushDomUpdateTask(controller);\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const viewportPoint = toViewportPoint(metrics, input.point, input.coordinateSpace);\n const documentPoint = toDocumentPoint(metrics, input.point, input.coordinateSpace);\n const hitTestPoint = {\n x: Math.round(viewportPoint.x),\n y: Math.round(viewportPoint.y),\n };\n const raw = await controller.cdp.send(\"DOM.getNodeForLocation\", {\n x: hitTestPoint.x,\n y: hitTestPoint.y,\n ...(input.includeUserAgentShadowDom === undefined\n ? {}\n : { includeUserAgentShadowDOM: input.includeUserAgentShadowDom }),\n ...(input.ignorePointerEventsNone === undefined\n ? {}\n : { ignorePointerEventsNone: input.ignorePointerEventsNone }),\n });\n\n const frame = controller.framesByCdpId.get(raw.frameId);\n if (!frame) {\n throw createBrowserCoreError(\"frame-detached\", `frame ${raw.frameId} is no longer attached`);\n }\n const document = frame.currentDocument;\n const nodeRef = this.nodeRefForBackendNode(document, raw.backendNodeId);\n let targetQuad: HitTestResult[\"targetQuad\"] | undefined;\n if (frame.isMainFrame) {\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send(\"DOM.pushNodesByBackendIdsToFrontend\", {\n backendNodeIds: [raw.backendNodeId],\n });\n const nodeId = frontend.nodeIds[0];\n if (nodeId !== undefined) {\n const quads = await controller.cdp.send(\"DOM.getContentQuads\", { nodeId });\n const quad = quads.quads[0];\n if (quad && quad.length === 8) {\n targetQuad = [\n createPoint(quad[0]! + metrics.scrollOffset.x, quad[1]! + metrics.scrollOffset.y),\n createPoint(quad[2]! + metrics.scrollOffset.x, quad[3]! + metrics.scrollOffset.y),\n createPoint(quad[4]! + metrics.scrollOffset.x, quad[5]! + metrics.scrollOffset.y),\n createPoint(quad[6]! + metrics.scrollOffset.x, quad[7]! + metrics.scrollOffset.y),\n ];\n }\n }\n } catch {\n targetQuad = undefined;\n }\n }\n\n return {\n inputPoint: input.point,\n inputCoordinateSpace: input.coordinateSpace,\n resolvedPoint: documentPoint,\n resolvedCoordinateSpace: \"document-css\",\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n documentRef: document.documentRef,\n documentEpoch: document.documentEpoch,\n ...(nodeRef === undefined ? {} : { nodeRef }),\n ...(targetQuad === undefined ? {} : { targetQuad }),\n obscured: false,\n pointerEventsSkipped: input.ignorePointerEventsNone ?? false,\n };\n }\n\n async getViewportMetrics(input: { readonly pageRef: PageRef }): Promise<ViewportMetrics> {\n const controller = this.requirePage(input.pageRef);\n return getViewportMetricsFromCdp(controller);\n }\n\n async getNetworkRecords(input: GetNetworkRecordsInput): Promise<readonly NetworkRecord[]> {\n const session = this.requireSession(input.sessionRef);\n input.signal?.throwIfAborted?.();\n\n const requestIds = input.requestIds === undefined ? undefined : new Set(input.requestIds);\n const records = session.networkRecords.filter((record) => {\n if (input.pageRef !== undefined && record.pageRef !== input.pageRef) {\n return false;\n }\n if (requestIds !== undefined && !requestIds.has(record.requestId)) {\n return false;\n }\n return matchesNetworkRecordFilters(\n {\n url: record.url,\n method: record.method,\n resourceType: record.resourceType,\n ...(record.status === undefined ? {} : { status: record.status }),\n },\n input,\n );\n });\n\n if (!(input.includeBodies ?? false)) {\n return records.map(({ requestBody: _requestBody, responseBody: _responseBody, ...record }) =>\n clone(record as Omit<NetworkRecord, \"requestBody\" | \"responseBody\">),\n );\n }\n\n await raceWithAbort(\n Promise.all(\n records.map(async (record) => {\n const controller = this.resolvePageForNetworkRecord(record);\n if (!controller) {\n if (record.requestBodyState === \"pending\") {\n record.requestBodyState = \"failed\";\n record.requestBodyError =\n \"request body capture is unavailable because the page is closed\";\n }\n if (record.responseBodyState === \"pending\") {\n record.responseBodyState = \"failed\";\n record.responseBodyError =\n \"response body capture is unavailable because the page is closed\";\n }\n return;\n }\n await this.materializeNetworkRecordBodies(record, controller);\n }),\n ),\n input.signal,\n );\n\n return records.map((record) => clone(record as NetworkRecord));\n }\n\n async getCookies(input: {\n readonly sessionRef: SessionRef;\n readonly urls?: readonly string[];\n }): Promise<readonly CookieRecord[]> {\n const session = this.requireSession(input.sessionRef);\n const cookies = await session.context.cookies(input.urls ?? []);\n return cookies.map((cookie) => {\n const sameSite = normalizeSameSite(cookie.sameSite);\n return {\n sessionRef: input.sessionRef,\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n ...(sameSite === undefined ? {} : { sameSite }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n session: cookie.expires === -1,\n ...(cookie.expires === -1 ? { expiresAt: null } : { expiresAt: cookie.expires * 1000 }),\n };\n });\n }\n\n async setCookies(input: {\n readonly sessionRef: SessionRef;\n readonly cookies: readonly CookieRecord[];\n }): Promise<void> {\n const session = this.requireSession(input.sessionRef);\n if (input.cookies.length === 0) {\n return;\n }\n await session.context.addCookies(\n input.cookies.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n ...(cookie.sameSite === undefined\n ? {}\n : { sameSite: toPlaywrightCookieSameSite(cookie.sameSite) }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n expires:\n cookie.session || cookie.expiresAt === undefined || cookie.expiresAt === null\n ? -1\n : Math.max(1, Math.floor(cookie.expiresAt / 1000)),\n })),\n );\n }\n\n async getStorageSnapshot(input: {\n readonly sessionRef: SessionRef;\n readonly includeSessionStorage?: boolean;\n readonly includeIndexedDb?: boolean;\n }): Promise<StorageSnapshot> {\n const session = this.requireSession(input.sessionRef);\n const includeSessionStorage = input.includeSessionStorage ?? true;\n const includeIndexedDb = input.includeIndexedDb ?? true;\n const state = (await session.context.storageState({\n indexedDB: includeIndexedDb,\n })) as ExtendedStorageState;\n\n const origins = includeIndexedDb\n ? await capturePlaywrightStorageOrigins(\n session.context,\n state.origins.map((origin) => origin.origin),\n )\n : state.origins.map((origin) => ({\n origin: origin.origin,\n localStorage: origin.localStorage.map((entry) => ({\n key: entry.name,\n value: entry.value,\n })),\n }));\n\n const sessionStorage = includeSessionStorage\n ? await this.collectSessionStorageSnapshots(session)\n : undefined;\n\n return {\n sessionRef: input.sessionRef,\n capturedAt: Date.now(),\n origins,\n ...(sessionStorage === undefined ? {} : { sessionStorage }),\n };\n }\n\n async evaluatePage(input: {\n readonly pageRef: PageRef;\n readonly script: string;\n readonly args?: readonly unknown[];\n readonly timeoutMs?: number;\n }): Promise<StepResult<unknown>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n\n try {\n const result = await withTimeout(\n controller.page.evaluate(\n ({ script, args }) => {\n const evaluated = (0, eval)(script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...args: readonly unknown[]) => unknown)(...(args ?? []));\n }\n return evaluated;\n },\n {\n script: input.script,\n args: input.args ?? [],\n },\n ),\n input.timeoutMs,\n );\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: result,\n });\n } catch (error) {\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async addInitScript(input: BrowserInitScriptInput): Promise<BrowserInitScriptRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.initScripts\")) {\n throw unsupportedCapabilityError(\"instrumentation.initScripts\");\n }\n\n const session = this.requireSession(input.sessionRef);\n const registrationId = `init-script:${randomUUID()}`;\n const evaluator = ({ script, args }: { script: string; args: readonly unknown[] }) => {\n const evaluated = (0, eval)(script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...values: readonly unknown[]) => unknown)(...args);\n }\n return evaluated;\n };\n\n if (input.pageRef !== undefined) {\n const controller = this.requirePage(input.pageRef);\n await controller.page.addInitScript(evaluator, {\n script: input.script,\n args: input.args ?? [],\n });\n } else {\n await session.context.addInitScript(evaluator, {\n script: input.script,\n args: input.args ?? [],\n });\n }\n\n return {\n registrationId,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n };\n }\n\n async registerRoute(input: BrowserRouteRegistrationInput): Promise<BrowserRouteRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.routing\")) {\n throw unsupportedCapabilityError(\"instrumentation.routing\");\n }\n\n const session = this.requireSession(input.sessionRef);\n const routeId = `route:${randomUUID()}`;\n let remaining = input.times ?? Number.POSITIVE_INFINITY;\n\n const handler = async (route: Route, request: Request) => {\n if (remaining <= 0) {\n await route.continue();\n return;\n }\n\n const controller = this.pageByPlaywrightPage.get(request.frame().page());\n if (input.pageRef !== undefined && controller?.pageRef !== input.pageRef) {\n await route.continue();\n return;\n }\n\n const resourceType = normalizeResourceType(request.resourceType());\n if (input.resourceTypes !== undefined && !input.resourceTypes.includes(resourceType)) {\n await route.continue();\n return;\n }\n\n remaining -= 1;\n const decision = await input.handler({\n request: {\n url: request.url(),\n method: request.method(),\n headers: Object.entries(request.headers()).map(([name, value]) => ({ name, value })),\n resourceType,\n ...(controller === undefined ? {} : { pageRef: controller.pageRef }),\n ...(request.postDataBuffer() === null\n ? {}\n : { postData: createBodyPayload(new Uint8Array(request.postDataBuffer()!)) }),\n },\n fetchOriginal: async () => {\n const original = await route.fetch();\n const body = new Uint8Array(await original.body());\n return {\n url: original.url(),\n status: original.status(),\n statusText: original.statusText(),\n headers: original\n .headersArray()\n .map((header) => ({ name: header.name, value: header.value })),\n ...(body.byteLength === 0 ? {} : { body: createBodyPayload(body) }),\n redirected: original.url() !== request.url(),\n };\n },\n });\n\n switch (decision.kind) {\n case \"continue\":\n await route.continue();\n return;\n case \"abort\":\n await route.abort(decision.errorCode as never | undefined);\n return;\n case \"fulfill\": {\n const headers =\n decision.headers === undefined\n ? undefined\n : Object.fromEntries(decision.headers.map((header) => [header.name, header.value]));\n const body = decision.body === undefined ? undefined : Buffer.from(decision.body.bytes);\n await route.fulfill({\n status: decision.status ?? 200,\n ...(decision.contentType === undefined ? {} : { contentType: decision.contentType }),\n ...(headers === undefined ? {} : { headers }),\n ...(body === undefined ? {} : { body }),\n });\n }\n }\n };\n\n await session.context.route(input.urlPattern, handler);\n\n return {\n routeId,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n };\n }\n\n async executeRequest(input: {\n readonly sessionRef: SessionRef;\n readonly request: SessionTransportRequest;\n readonly signal?: AbortSignal;\n }): Promise<StepResult<SessionTransportResponse>> {\n const session = this.requireSession(input.sessionRef);\n const startedAt = Date.now();\n const pageRef = session.activePageRef ?? Array.from(session.pageRefs)[0];\n const controller = pageRef === undefined ? undefined : this.pages.get(pageRef);\n const mainFrame = controller === undefined ? undefined : this.requireMainFrame(controller);\n\n const headersObject = Object.fromEntries(\n (input.request.headers ?? []).map((header) => [header.name, header.value]),\n );\n const requestBodyBytes =\n input.request.body === undefined ? undefined : Buffer.from(input.request.body.bytes);\n\n let response: Awaited<ReturnType<BrowserContext[\"request\"][\"fetch\"]>>;\n try {\n input.signal?.throwIfAborted?.();\n response = await raceWithAbort(\n session.context.request.fetch(input.request.url, {\n method: input.request.method,\n headers: headersObject,\n ...(requestBodyBytes === undefined ? {} : { data: requestBodyBytes }),\n failOnStatusCode: false,\n ...(input.request.timeoutMs === undefined ? {} : { timeout: input.request.timeoutMs }),\n ...(input.request.followRedirects === false ? { maxRedirects: 0 } : {}),\n }),\n input.signal,\n );\n } catch (error) {\n if (pageRef !== undefined) {\n throw normalizePlaywrightError(error, pageRef);\n }\n throw createBrowserCoreError(\n \"operation-failed\",\n `session ${input.sessionRef} failed to execute a session HTTP request`,\n );\n }\n\n const responseHeaders = (await response.headersArray()).map((header) =>\n createHeaderEntry(header.name, header.value),\n );\n const responseContentType = responseHeaders.find(\n (header) => header.name.toLowerCase() === \"content-type\",\n )?.value;\n let responseBody: ReturnType<typeof captureBodyPayload> | undefined;\n const responseBodySkipReason = getResponseBodySkipReasonForMetadata({\n method: input.request.method.toUpperCase(),\n status: response.status(),\n resourceType: \"fetch\",\n url: response.url(),\n captureState: \"complete\",\n });\n try {\n responseBody =\n responseBodySkipReason === undefined\n ? captureBodyPayload(\n await response.body(),\n responseContentType ?? undefined,\n this.bodyCaptureLimitBytes,\n )\n : undefined;\n } catch {\n responseBody = undefined;\n }\n\n const requestId = createNetworkRequestId(`transport-${++this.requestCounter}`);\n const record: NetworkRecordState = {\n kind: \"http\",\n requestId,\n sessionRef: input.sessionRef,\n cdpRequestId: undefined,\n pageRef,\n frameRef: mainFrame?.frameRef,\n documentRef: mainFrame?.currentDocument.documentRef,\n method: input.request.method.toUpperCase(),\n url: input.request.url,\n requestHeaders: (input.request.headers ?? []).map((header) =>\n createHeaderEntry(header.name, header.value),\n ),\n responseHeaders,\n status: response.status(),\n statusText: response.statusText(),\n resourceType: \"fetch\",\n redirectFromRequestId: undefined,\n redirectToRequestId: undefined,\n navigationRequest: false,\n timing: undefined,\n transfer: undefined,\n source: undefined,\n captureState: \"complete\",\n requestBodyState: input.request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: responseBody === undefined ? \"skipped\" : \"complete\",\n requestBodySkipReason: input.request.body === undefined ? \"not-present\" : undefined,\n responseBodySkipReason:\n responseBody === undefined\n ? (responseBodySkipReason ?? \"not-present-or-unavailable\")\n : undefined,\n requestBodyError: undefined,\n responseBodyError: undefined,\n requestBody: input.request.body === undefined ? undefined : clone(input.request.body),\n responseBody,\n };\n session.networkRecords.push(record);\n\n return this.createStepResult(input.sessionRef, pageRef, startedAt, {\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(mainFrame === undefined ? {} : { documentRef: mainFrame.currentDocument.documentRef }),\n ...(mainFrame === undefined\n ? {}\n : { documentEpoch: mainFrame.currentDocument.documentEpoch }),\n events: controller === undefined ? [] : this.drainQueuedEvents(controller.pageRef),\n data: {\n url: response.url(),\n status: response.status(),\n statusText: response.statusText(),\n headers: responseHeaders,\n ...(responseBody === undefined ? {} : { body: responseBody }),\n redirected: response.url() !== input.request.url,\n },\n });\n }\n\n private async handleContextPage(session: SessionState, page: Page): Promise<void> {\n if (session.lifecycleState !== \"open\") {\n return;\n }\n const registration = session.pendingRegistrations.shift();\n try {\n const controller = await this.initializePageController(\n session,\n page,\n registration?.openerPageRef,\n false,\n );\n registration?.resolve(controller);\n } catch (error) {\n registration?.reject(error);\n throw error;\n }\n }\n\n private async handleAttachedInitialPage(session: SessionState, page: Page): Promise<void> {\n if (session.lifecycleState !== \"open\") {\n return;\n }\n if (this.pageByPlaywrightPage.has(page)) {\n return;\n }\n if (this.contextOptions?.viewport !== undefined && this.contextOptions.viewport !== null) {\n await page.setViewportSize(this.contextOptions.viewport);\n }\n await this.initializePageController(session, page, undefined, true);\n }\n\n private async initializePageController(\n session: SessionState,\n page: Page,\n forcedOpenerPageRef?: PageRef,\n externallyOwned = false,\n ): Promise<PageController> {\n const cdp = await session.context.newCDPSession(page);\n const pageRef =\n this.preassignedPopupPageRefs.get(page) ?? createPageRef(`playwright-${++this.pageCounter}`);\n this.preassignedPopupPageRefs.delete(page);\n const controller: PageController = {\n pageRef,\n sessionRef: session.sessionRef,\n page,\n cdp,\n externallyOwned,\n queuedEvents: [],\n framesByCdpId: new Map(),\n frameBindings: new WeakMap(),\n documentsByRef: new Map(),\n networkByRequest: new WeakMap(),\n networkByCdpRequestId: new Map(),\n requestBodyTasks: new Map(),\n responseBodyTasks: new Map(),\n backgroundTasks: new Set(),\n domUpdateTask: undefined,\n backgroundError: undefined,\n settleTrackerRegistered: false,\n openerPageRef: undefined,\n mainFrameRef: undefined,\n lifecycleState: \"open\",\n frozen: false,\n explicitCloseInFlight: false,\n lastKnownTitle: \"\",\n };\n\n this.pages.set(pageRef, controller);\n this.pageByPlaywrightPage.set(page, controller);\n session.pageRefs.add(pageRef);\n session.activePageRef = pageRef;\n\n await cdp.send(\"Page.enable\", { enableFileChooserOpenedEvent: true });\n await cdp.send(\"Network.enable\");\n await cdp.send(\"DOM.enable\", { includeWhitespace: \"none\" });\n await cdp.send(\"DOMStorage.enable\");\n await cdp.send(\"DOM.getDocument\", { depth: 0 });\n await this.actionSettler.installTracker(controller);\n\n cdp.on(\"Page.frameAttached\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFrameAttached(controller, payload.frameId, payload.parentFrameId),\n ),\n );\n cdp.on(\"Page.frameDetached\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFrameDetached(controller, payload.frameId),\n ),\n );\n cdp.on(\"Page.frameNavigated\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFrameNavigated(controller, payload.frame),\n ),\n );\n cdp.on(\"Page.navigatedWithinDocument\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNavigatedWithinDocument(controller, payload.frameId, payload.url),\n ),\n );\n cdp.on(\"Page.fileChooserOpened\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFileChooserOpened(controller, payload.mode),\n ),\n );\n cdp.on(\"Network.requestWillBeSent\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkRequestWillBeSent(controller, payload),\n ),\n );\n cdp.on(\"Network.responseReceived\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkResponseReceived(controller, payload),\n ),\n );\n cdp.on(\"Network.responseReceivedExtraInfo\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkResponseReceivedExtraInfo(controller, payload),\n ),\n );\n cdp.on(\"Network.loadingFinished\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkLoadingFinished(controller, payload),\n ),\n );\n cdp.on(\"Network.loadingFailed\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkLoadingFailed(controller, payload),\n ),\n );\n cdp.on(\"DOM.documentUpdated\", () =>\n this.runControllerEvent(controller, () => this.handleDocumentUpdated(controller)),\n );\n\n page.on(\"console\", (message) =>\n this.runControllerEvent(controller, () => this.handleConsole(controller, message)),\n );\n page.on(\"popup\", (popupPage) =>\n this.runControllerEvent(controller, () => {\n const popupPageRef = createPageRef(`playwright-${++this.pageCounter}`);\n this.preassignedPopupPageRefs.set(popupPage, popupPageRef);\n this.pendingPopupOpeners.set(popupPage, controller.pageRef);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"popup-opened\">({\n kind: \"popup-opened\",\n sessionRef: controller.sessionRef,\n pageRef: popupPageRef,\n openerPageRef: controller.pageRef,\n }),\n );\n }),\n );\n page.on(\"dialog\", (dialog) =>\n this.runControllerEvent(controller, () => this.handleDialog(controller, dialog)),\n );\n page.on(\"download\", (download) =>\n this.runControllerEvent(controller, () => this.handleDownload(controller, download)),\n );\n page.on(\"pageerror\", (error) =>\n this.runControllerEvent(controller, () => this.handlePageError(controller, error)),\n );\n page.on(\"request\", (request) =>\n this.runControllerEvent(controller, () => this.handlePlaywrightRequest(controller, request)),\n );\n page.on(\"response\", (response) =>\n this.runControllerEvent(controller, () =>\n this.handlePlaywrightResponse(controller, response),\n ),\n );\n page.on(\"close\", () => this.handleUnexpectedPageClose(controller));\n\n const frameTree = await cdp.send(\"Page.getFrameTree\");\n this.syncFrameTree(controller, frameTree.frameTree);\n this.bindPlaywrightFrames(controller, frameTree.frameTree, page.mainFrame());\n await this.reconcileDocumentEpochs(controller);\n controller.lastKnownTitle = await this.readTitle(page, controller.lastKnownTitle);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"page-created\">({\n kind: \"page-created\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n }),\n );\n\n if (forcedOpenerPageRef !== undefined) {\n controller.openerPageRef = forcedOpenerPageRef;\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"popup-opened\">({\n kind: \"popup-opened\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n openerPageRef: forcedOpenerPageRef,\n }),\n );\n } else {\n const pendingOpenerPageRef = this.pendingPopupOpeners.get(page);\n if (pendingOpenerPageRef !== undefined) {\n this.pendingPopupOpeners.delete(page);\n }\n const opener =\n pendingOpenerPageRef !== undefined ? null : await page.opener().catch(() => null);\n const openerController =\n pendingOpenerPageRef !== undefined\n ? this.pages.get(pendingOpenerPageRef)\n : opener\n ? this.pageByPlaywrightPage.get(opener)\n : undefined;\n if (openerController) {\n controller.openerPageRef = openerController.pageRef;\n }\n }\n\n return controller;\n }\n\n private handleFrameAttached(\n controller: PageController,\n frameId: string,\n parentFrameId: string,\n ): void {\n if (controller.framesByCdpId.has(frameId)) {\n return;\n }\n const parent = controller.framesByCdpId.get(parentFrameId);\n const frameRef = createFrameRef(`playwright-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`playwright-${++this.documentCounter}`);\n const document: DocumentState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: frameId,\n documentRef,\n documentEpoch: createDocumentEpoch(0),\n url: \"about:blank\",\n parentDocumentRef: parent?.currentDocument.documentRef,\n nodeRefsByBackendNodeId: new Map(),\n backendNodeIdsByNodeRef: new Map(),\n domTreeSignature: undefined,\n };\n const frame: FrameState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: frameId,\n parentFrameRef: parent?.frameRef,\n name: undefined,\n isMainFrame: false,\n currentDocument: document,\n };\n controller.framesByCdpId.set(frameId, frame);\n controller.documentsByRef.set(documentRef, document);\n this.frames.set(frameRef, frame);\n this.documents.set(documentRef, document);\n this.retiredDocuments.delete(documentRef);\n this.trackBackgroundTask(controller, this.refreshFrameBindings(controller));\n }\n\n private handleFrameDetached(controller: PageController, frameId: string): void {\n const root = controller.framesByCdpId.get(frameId);\n if (!root) {\n return;\n }\n const descendants = Array.from(controller.framesByCdpId.values()).filter((frame) =>\n this.isDescendantFrame(controller, frame, root.frameRef),\n );\n for (const frame of descendants) {\n this.retireDocument(frame.currentDocument.documentRef);\n this.frames.delete(frame.frameRef);\n controller.framesByCdpId.delete(frame.cdpFrameId);\n controller.documentsByRef.delete(frame.currentDocument.documentRef);\n }\n this.retireDocument(root.currentDocument.documentRef);\n this.frames.delete(root.frameRef);\n controller.framesByCdpId.delete(root.cdpFrameId);\n controller.documentsByRef.delete(root.currentDocument.documentRef);\n this.trackBackgroundTask(controller, this.refreshFrameBindings(controller));\n }\n\n private handleFrameNavigated(controller: PageController, frame: FrameDescriptor): void {\n if (!controller.framesByCdpId.has(frame.id)) {\n this.handleFrameAttached(controller, frame.id, frame.parentId ?? \"\");\n }\n const frameState = controller.framesByCdpId.get(frame.id);\n if (!frameState) {\n return;\n }\n const nextDocumentRef = createDocumentRef(`playwright-${++this.documentCounter}`);\n const parent = frame.parentId ? controller.framesByCdpId.get(frame.parentId) : undefined;\n const nextDocument: DocumentState = {\n pageRef: controller.pageRef,\n frameRef: frameState.frameRef,\n cdpFrameId: frame.id,\n documentRef: nextDocumentRef,\n documentEpoch: createDocumentEpoch(0),\n url: combineFrameUrl(frame.url, frame.urlFragment),\n parentDocumentRef: parent?.currentDocument.documentRef,\n nodeRefsByBackendNodeId: new Map(),\n backendNodeIdsByNodeRef: new Map(),\n domTreeSignature: undefined,\n };\n this.retireDocument(frameState.currentDocument.documentRef);\n frameState.currentDocument = nextDocument;\n frameState.parentFrameRef = parent?.frameRef;\n frameState.name = frame.name;\n frameState.isMainFrame = frame.parentId === undefined;\n if (frame.parentId === undefined) {\n controller.mainFrameRef = frameState.frameRef;\n }\n controller.documentsByRef.set(nextDocumentRef, nextDocument);\n this.documents.set(nextDocumentRef, nextDocument);\n this.retiredDocuments.delete(nextDocumentRef);\n this.trackBackgroundTask(controller, this.refreshFrameBindings(controller));\n this.queueDocumentReconciliation(controller);\n }\n\n private handleNavigatedWithinDocument(\n controller: PageController,\n frameId: string,\n url: string,\n ): void {\n const frame = controller.framesByCdpId.get(frameId);\n if (!frame) {\n return;\n }\n frame.currentDocument.url = url;\n }\n\n private handleDocumentUpdated(controller: PageController): void {\n this.queueDocumentReconciliation(controller);\n }\n\n private syncFrameTree(controller: PageController, tree: FrameTreeNode): void {\n const visit = (node: FrameTreeNode, parentFrameRef?: FrameRef): void => {\n const existing = controller.framesByCdpId.get(node.frame.id);\n if (!existing) {\n const frameRef = createFrameRef(`playwright-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`playwright-${++this.documentCounter}`);\n const document: DocumentState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: node.frame.id,\n documentRef,\n documentEpoch: createDocumentEpoch(0),\n url: combineFrameUrl(node.frame.url, node.frame.urlFragment),\n parentDocumentRef:\n parentFrameRef === undefined\n ? undefined\n : this.requireFrame(parentFrameRef).currentDocument.documentRef,\n nodeRefsByBackendNodeId: new Map(),\n backendNodeIdsByNodeRef: new Map(),\n domTreeSignature: undefined,\n };\n const frame: FrameState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: node.frame.id,\n parentFrameRef,\n name: node.frame.name,\n isMainFrame: parentFrameRef === undefined,\n currentDocument: document,\n };\n controller.framesByCdpId.set(node.frame.id, frame);\n controller.documentsByRef.set(documentRef, document);\n this.frames.set(frameRef, frame);\n this.documents.set(documentRef, document);\n this.retiredDocuments.delete(documentRef);\n if (parentFrameRef === undefined) {\n controller.mainFrameRef = frameRef;\n }\n } else {\n existing.parentFrameRef = parentFrameRef;\n existing.name = node.frame.name;\n existing.isMainFrame = parentFrameRef === undefined;\n existing.currentDocument.url = combineFrameUrl(node.frame.url, node.frame.urlFragment);\n if (parentFrameRef === undefined) {\n controller.mainFrameRef = existing.frameRef;\n }\n }\n\n const current = controller.framesByCdpId.get(node.frame.id);\n for (const child of node.childFrames ?? []) {\n visit(child, current?.frameRef);\n }\n };\n\n visit(tree);\n }\n\n private async refreshFrameBindings(controller: PageController): Promise<void> {\n const frameTree = await controller.cdp.send(\"Page.getFrameTree\");\n this.bindPlaywrightFrames(controller, frameTree.frameTree, controller.page.mainFrame());\n }\n\n private bindPlaywrightFrames(\n controller: PageController,\n tree: FrameTreeNode,\n frame: Frame,\n ): void {\n const frameState = controller.framesByCdpId.get(tree.frame.id);\n if (frameState) {\n controller.frameBindings.set(frame, frameState.frameRef);\n }\n const treeChildren = tree.childFrames ?? [];\n const playwrightChildren = frame.childFrames();\n const length = Math.min(treeChildren.length, playwrightChildren.length);\n for (let index = 0; index < length; index += 1) {\n const nextTree = treeChildren[index];\n const nextFrame = playwrightChildren[index];\n if (nextTree && nextFrame) {\n this.bindPlaywrightFrames(controller, nextTree, nextFrame);\n }\n }\n }\n\n private handleConsole(controller: PageController, message: ConsoleMessage): void {\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"console\">({\n kind: \"console\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n level: normalizeConsoleLevel(message.type()),\n text: message.text(),\n location: {\n url: message.location().url,\n lineNumber: message.location().lineNumber,\n columnNumber: message.location().columnNumber,\n },\n }),\n );\n }\n\n private async handleDialog(controller: PageController, dialog: Dialog): Promise<void> {\n const mainFrame = this.requireMainFrame(controller);\n const dialogRef = createDialogRef(`playwright-${++this.eventCounter}`);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"dialog-opened\">({\n kind: \"dialog-opened\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n dialogRef,\n dialogType: normalizeDialogType(dialog.type()),\n message: dialog.message(),\n ...(dialog.defaultValue().length === 0 ? {} : { defaultValue: dialog.defaultValue() }),\n }),\n );\n await dialog.dismiss().catch(() => {});\n }\n\n private async handleDownload(controller: PageController, download: Download): Promise<void> {\n const mainFrame = this.requireMainFrame(controller);\n const downloadRef = createDownloadRef(`playwright-${++this.eventCounter}`);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"download-started\">({\n kind: \"download-started\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n downloadRef,\n url: download.url(),\n suggestedFilename: download.suggestedFilename(),\n }),\n );\n\n const task = (async () => {\n const failure = await download.failure();\n let filePath: string | undefined;\n try {\n filePath = await download.path();\n } catch {\n filePath = undefined;\n }\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"download-finished\">({\n kind: \"download-finished\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n downloadRef,\n state: failure === null ? \"completed\" : failure === \"canceled\" ? \"canceled\" : \"failed\",\n ...(filePath === undefined ? {} : { filePath }),\n }),\n );\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private handleFileChooserOpened(\n controller: PageController,\n mode: \"selectSingle\" | \"selectMultiple\",\n ): void {\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"chooser-opened\">({\n kind: \"chooser-opened\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n chooserRef: createChooserRef(`playwright-${++this.eventCounter}`),\n chooserType: \"file\",\n multiple: mode === \"selectMultiple\",\n }),\n );\n }\n\n private handlePageError(controller: PageController, error: Error): void {\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"page-error\">({\n kind: \"page-error\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n message: error.message,\n ...(error.stack === undefined ? {} : { stack: error.stack }),\n }),\n );\n }\n\n private handleUnexpectedPageClose(controller: PageController): void {\n controller.lifecycleState = \"closed\";\n if (\n !controller.explicitCloseInFlight &&\n controller.openerPageRef &&\n this.pages.has(controller.openerPageRef)\n ) {\n this.queueEvent(\n controller.openerPageRef,\n this.createEvent<\"page-closed\">({\n kind: \"page-closed\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n }),\n );\n }\n this.cleanupPageController(controller);\n }\n\n private handleNetworkRequestWillBeSent(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly loaderId?: string;\n readonly type?: string;\n readonly frameId?: string;\n readonly request: {\n readonly url: string;\n readonly method: string;\n readonly headers?: Record<string, unknown>;\n readonly hasPostData?: boolean;\n readonly postData?: string;\n };\n readonly initiator?: {\n readonly type?: string;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly stack?: {\n readonly callFrames?: ReadonlyArray<{\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly functionName?: string;\n }>;\n };\n };\n readonly redirectResponse?: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers?: Record<string, unknown>;\n readonly protocol?: string;\n readonly remoteIPAddress?: string;\n readonly remotePort?: number;\n readonly fromDiskCache?: boolean;\n readonly fromServiceWorker?: boolean;\n };\n },\n ): void {\n const session = this.sessions.get(controller.sessionRef);\n if (!session || session.lifecycleState !== \"open\" || controller.lifecycleState !== \"open\") {\n return;\n }\n const prior = controller.networkByCdpRequestId.get(payload.requestId);\n let redirectFromRequestId: NetworkRecordState[\"requestId\"] | undefined;\n if (prior && payload.redirectResponse) {\n this.applyCdpResponseMetadata(prior, payload.redirectResponse);\n prior.captureState = \"complete\";\n prior.responseBodyState = \"skipped\";\n prior.responseBodySkipReason = \"redirect-response\";\n prior.responseBodyError = undefined;\n redirectFromRequestId = prior.requestId;\n }\n\n const frameContext = this.resolveNetworkFrameContext(controller, payload.frameId);\n const nextRequestId = createNetworkRequestId(`playwright-${++this.requestCounter}`);\n const requestHeaders = objectHeadersToEntries(payload.request.headers);\n const requestContentType = headerEntryValue(requestHeaders, \"content-type\");\n const postData = payload.request.postData;\n const requestBody =\n typeof postData === \"string\"\n ? captureBodyPayload(\n Buffer.from(postData, \"utf8\"),\n requestContentType,\n this.bodyCaptureLimitBytes,\n )\n : undefined;\n const record: NetworkRecordState = {\n kind: \"http\",\n requestId: nextRequestId,\n sessionRef: controller.sessionRef,\n cdpRequestId: payload.requestId,\n pageRef: frameContext.pageRef,\n frameRef: frameContext.frameRef,\n documentRef: frameContext.documentRef,\n method: payload.request.method,\n url: payload.request.url,\n requestHeaders,\n responseHeaders: [],\n status: undefined,\n statusText: undefined,\n resourceType: normalizeResourceType((payload.type ?? \"other\").toLowerCase()),\n redirectFromRequestId,\n redirectToRequestId: undefined,\n navigationRequest: payload.type === \"Document\",\n timing: undefined,\n transfer: undefined,\n source: undefined,\n captureState: \"pending\",\n requestBodyState:\n requestBody !== undefined\n ? \"complete\"\n : payload.request.hasPostData === true\n ? \"pending\"\n : \"skipped\",\n responseBodyState: \"pending\",\n requestBodySkipReason:\n requestBody === undefined && payload.request.hasPostData !== true\n ? \"not-present\"\n : undefined,\n responseBodySkipReason: undefined,\n requestBodyError: undefined,\n responseBodyError: undefined,\n requestBody,\n responseBody: undefined,\n ...(payload.initiator === undefined\n ? {}\n : { initiator: normalizeNetworkInitiator(payload.initiator) }),\n };\n\n if (prior && payload.redirectResponse) {\n prior.redirectToRequestId = record.requestId;\n }\n\n controller.networkByCdpRequestId.set(payload.requestId, record);\n session.networkRecords.push(record);\n }\n\n private handlePlaywrightRequest(controller: PageController, request: Request): void {\n if (this.bindPlaywrightRequest(controller, request)) {\n this.enrichPlaywrightRequest(controller, request);\n return;\n }\n const task = (async () => {\n for (let attempt = 0; attempt < 5; attempt += 1) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n if (this.bindPlaywrightRequest(controller, request)) {\n this.enrichPlaywrightRequest(controller, request);\n return;\n }\n }\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private handlePlaywrightResponse(controller: PageController, response: Response): void {\n const request = response.request();\n const record = controller.networkByRequest.get(request);\n if (!record) {\n return;\n }\n const task = (async () => {\n const responseHeaders = (await response.headersArray()).map((header) =>\n createHeaderEntry(header.name, header.value),\n );\n if (responseHeaders.length > 0) {\n record.responseHeaders = responseHeaders;\n }\n if (record.source === undefined) {\n const serverAddr = await response.serverAddr();\n record.source = {\n ...(serverAddr === null\n ? {}\n : {\n remoteAddress: {\n ip: serverAddr.ipAddress,\n port: serverAddr.port,\n },\n }),\n fromServiceWorker: response.fromServiceWorker(),\n };\n }\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private bindPlaywrightRequest(controller: PageController, request: Request): boolean {\n const session = this.sessions.get(controller.sessionRef);\n if (!session) {\n return false;\n }\n const record = [...session.networkRecords]\n .reverse()\n .find(\n (entry) =>\n entry.pageRef === controller.pageRef &&\n entry.method === request.method() &&\n entry.url === request.url() &&\n entry.captureState === \"pending\",\n );\n if (!record) {\n return false;\n }\n controller.networkByRequest.set(request, record);\n return true;\n }\n\n private enrichPlaywrightRequest(controller: PageController, request: Request): void {\n const record = controller.networkByRequest.get(request);\n if (!record) {\n return;\n }\n const task = (async () => {\n const requestHeaders = (await request.headersArray()).map((header) =>\n createHeaderEntry(header.name, header.value),\n );\n if (requestHeaders.length > 0) {\n record.requestHeaders = requestHeaders;\n }\n if (record.requestBody === undefined) {\n const contentType = await request.headerValue(\"content-type\");\n const requestBody = captureBodyPayload(\n request.postDataBuffer(),\n contentType ?? undefined,\n this.bodyCaptureLimitBytes,\n );\n if (requestBody !== undefined) {\n record.requestBody = requestBody;\n record.requestBodyState = \"complete\";\n record.requestBodySkipReason = undefined;\n record.requestBodyError = undefined;\n }\n }\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private handleNetworkResponseReceived(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly response: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers?: Record<string, unknown>;\n readonly protocol?: string;\n readonly remoteIPAddress?: string;\n readonly remotePort?: number;\n readonly fromDiskCache?: boolean;\n readonly fromServiceWorker?: boolean;\n readonly timing?: {\n readonly requestTime: number;\n readonly dnsStart?: number;\n readonly dnsEnd?: number;\n readonly connectStart?: number;\n readonly connectEnd?: number;\n readonly sslStart?: number;\n readonly sslEnd?: number;\n readonly sendStart?: number;\n readonly receiveHeadersStart?: number;\n readonly receiveHeadersEnd?: number;\n readonly workerStart?: number;\n readonly workerReady?: number;\n };\n };\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n this.applyCdpResponseMetadata(record, payload.response);\n record.url = payload.response.url;\n record.timing = normalizeNetworkTiming(payload.response.timing);\n const skipReason = getResponseBodySkipReason(record);\n if (skipReason !== undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = skipReason;\n record.responseBodyError = undefined;\n }\n }\n\n private handleNetworkResponseReceivedExtraInfo(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly headers?: Record<string, unknown>;\n readonly headersText?: string;\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n const parsedFromText = parseRawHeadersText(payload.headersText);\n if (parsedFromText.length > 0) {\n if (\n record.responseHeaders.length === 0 ||\n !record.responseHeaders.some((header) => header.name.toLowerCase() === \"set-cookie\")\n ) {\n record.responseHeaders = parsedFromText;\n }\n return;\n }\n const parsedFromObject = objectHeadersToEntries(payload.headers);\n if (parsedFromObject.length > 0) {\n if (\n record.responseHeaders.length === 0 ||\n !record.responseHeaders.some((header) => header.name.toLowerCase() === \"set-cookie\")\n ) {\n record.responseHeaders = parsedFromObject;\n }\n }\n }\n\n private handleNetworkLoadingFinished(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly encodedDataLength?: number;\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n record.captureState = \"complete\";\n if (record.navigationRequest && record.frameRef) {\n const frame = this.requireFrame(record.frameRef);\n record.documentRef = frame.currentDocument.documentRef;\n }\n record.transfer = {\n ...(record.transfer ?? {}),\n ...(payload.encodedDataLength === undefined\n ? {}\n : { encodedBodyBytes: payload.encodedDataLength }),\n ...(payload.encodedDataLength === undefined\n ? {}\n : { transferSizeBytes: payload.encodedDataLength }),\n ...(record.responseBody === undefined\n ? {}\n : { decodedBodyBytes: record.responseBody.capturedByteLength }),\n };\n if (record.responseBodyState === \"pending\" && getResponseBodySkipReason(record) !== undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = getResponseBodySkipReason(record);\n }\n }\n\n private handleNetworkLoadingFailed(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly errorText?: string;\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n record.captureState = \"failed\";\n if (record.responseBodyState === \"pending\") {\n record.responseBodyState = \"failed\";\n record.responseBodyError = payload.errorText ?? \"request failed before response body capture\";\n }\n }\n\n private async collectSessionStorageSnapshots(\n session: SessionState,\n ): Promise<readonly SessionStorageSnapshot[]> {\n const snapshots: SessionStorageSnapshot[] = [];\n for (const pageRef of session.pageRefs) {\n const controller = this.requirePage(pageRef);\n await this.flushDomUpdateTask(controller);\n for (const frame of controller.framesByCdpId.values()) {\n let origin: string;\n try {\n origin = new URL(frame.currentDocument.url).origin;\n } catch {\n continue;\n }\n if (origin === \"null\") {\n continue;\n }\n let storageKey: string;\n try {\n const resolved = await controller.cdp.send(\"Storage.getStorageKey\", {\n frameId: frame.cdpFrameId,\n });\n storageKey = resolved.storageKey;\n } catch {\n continue;\n }\n const storage = await controller.cdp.send(\"DOMStorage.getDOMStorageItems\", {\n storageId: {\n storageKey,\n isLocalStorage: false,\n },\n });\n snapshots.push({\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n origin,\n entries: storage.entries.reduce<StorageEntry[]>((entries, entry) => {\n const [key, value] = entry;\n if (key !== undefined && value !== undefined) {\n entries.push({ key, value });\n }\n return entries;\n }, []),\n });\n }\n }\n return snapshots;\n }\n\n private async buildPageInfo(controller: PageController): Promise<PageInfo> {\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n const mainFrame =\n controller.mainFrameRef === undefined ? undefined : this.frames.get(controller.mainFrameRef);\n return {\n pageRef: controller.pageRef,\n sessionRef: controller.sessionRef,\n ...(controller.openerPageRef === undefined\n ? {}\n : { openerPageRef: controller.openerPageRef }),\n url: mainFrame?.currentDocument.url ?? this.readUrl(controller.page, \"about:blank\"),\n title: controller.lastKnownTitle,\n lifecycleState: controller.lifecycleState,\n };\n }\n\n private buildFrameInfo(frame: FrameState): FrameInfo {\n return {\n frameRef: frame.frameRef,\n pageRef: frame.pageRef,\n ...(frame.parentFrameRef === undefined ? {} : { parentFrameRef: frame.parentFrameRef }),\n documentRef: frame.currentDocument.documentRef,\n documentEpoch: frame.currentDocument.documentEpoch,\n url: frame.currentDocument.url,\n ...(frame.name === undefined ? {} : { name: frame.name }),\n isMainFrame: frame.isMainFrame,\n };\n }\n\n private async reconcileDocumentEpochs(controller: PageController): Promise<void> {\n const captured = await capturePageDomSnapshot(controller.cdp, { includeLayout: false });\n for (const frame of controller.framesByCdpId.values()) {\n const rawDocument = findCapturedDocument(captured, frame.cdpFrameId);\n if (!rawDocument) {\n continue;\n }\n updateDocumentTreeSignature(frame.currentDocument, rawDocument, this.retiredDocuments);\n }\n }\n\n private queueDocumentReconciliation(controller: PageController): void {\n const queued = (controller.domUpdateTask ?? Promise.resolve()).then(() =>\n this.reconcileDocumentEpochs(controller),\n );\n const tracked = this.trackBackgroundTask(controller, queued);\n const settled = tracked.finally(() => {\n if (controller.domUpdateTask === settled) {\n controller.domUpdateTask = undefined;\n }\n });\n controller.domUpdateTask = settled;\n }\n\n private async flushDomUpdateTask(controller: PageController): Promise<void> {\n while (controller.domUpdateTask) {\n await controller.domUpdateTask;\n }\n this.throwBackgroundError(controller);\n }\n\n private async captureDomSnapshot(\n controller: PageController,\n document: DocumentState,\n ): Promise<CapturedDomSnapshot> {\n const captured = await capturePageDomSnapshot(controller.cdp, { includeLayout: true });\n const rawDocument = findCapturedDocument(captured, document.cdpFrameId);\n if (!rawDocument) {\n throw createBrowserCoreError(\n \"not-found\",\n `document ${document.documentRef} was not found in the current page snapshot`,\n );\n }\n updateDocumentTreeSignature(document, rawDocument, this.retiredDocuments);\n return {\n capturedAt: captured.capturedAt,\n documents: captured.documents,\n rawDocument,\n shadowBoundariesByBackendNodeId: captured.shadowBoundariesByBackendNodeId,\n strings: captured.strings,\n };\n }\n\n private nodeRefForBackendNode(document: DocumentState, backendNodeId: number): NodeRef {\n const existing = document.nodeRefsByBackendNodeId.get(backendNodeId);\n if (existing) {\n return existing;\n }\n const nodeRef = createNodeRef(`playwright-${++this.nodeCounter}`);\n document.nodeRefsByBackendNodeId.set(backendNodeId, nodeRef);\n document.backendNodeIdsByNodeRef.set(nodeRef, backendNodeId);\n return nodeRef;\n }\n\n private resolveDocumentTarget(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): DocumentState {\n if (input.frameRef && input.documentRef) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either frameRef or documentRef, not both\",\n );\n }\n if (input.documentRef) {\n return this.requireDocument(input.documentRef);\n }\n if (input.frameRef) {\n return this.requireFrame(input.frameRef).currentDocument;\n }\n throw createBrowserCoreError(\"invalid-argument\", \"either frameRef or documentRef is required\");\n }\n\n private requireLiveNode(input: NodeLocator): {\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n } {\n if (this.retiredDocuments.has(input.documentRef)) {\n throw staleNodeRefError(input);\n }\n const document = this.documents.get(input.documentRef);\n if (!document) {\n throw createBrowserCoreError(\"not-found\", `document ${input.documentRef} was not found`, {\n details: { documentRef: input.documentRef },\n });\n }\n if (document.documentEpoch !== input.documentEpoch) {\n throw staleNodeRefError(input);\n }\n const backendNodeId = document.backendNodeIdsByNodeRef.get(input.nodeRef);\n if (backendNodeId === undefined) {\n throw staleNodeRefError(input);\n }\n return {\n controller: this.requirePage(document.pageRef),\n document,\n backendNodeId,\n };\n }\n\n private resolveNetworkFrameContext(\n controller: PageController,\n cdpFrameId: string | undefined,\n ): {\n readonly pageRef: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n } {\n if (cdpFrameId === undefined) {\n return { pageRef: controller.pageRef };\n }\n const frame = controller.framesByCdpId.get(cdpFrameId);\n if (!frame) {\n return { pageRef: controller.pageRef };\n }\n return {\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n documentRef: frame.currentDocument.documentRef,\n };\n }\n\n private resolvePageForNetworkRecord(record: NetworkRecordState): PageController | undefined {\n if (record.pageRef !== undefined) {\n const page = this.pages.get(record.pageRef);\n if (page && page.lifecycleState !== \"closed\") {\n return page;\n }\n }\n const session = this.sessions.get(record.sessionRef);\n if (!session) {\n return undefined;\n }\n for (const pageRef of session.pageRefs) {\n const page = this.pages.get(pageRef);\n if (page && page.lifecycleState !== \"closed\") {\n return page;\n }\n }\n return undefined;\n }\n\n private async materializeNetworkRecordBodies(\n record: NetworkRecordState,\n controller: PageController,\n ): Promise<void> {\n await Promise.all([\n this.materializeRequestBody(record, controller),\n this.materializeResponseBody(record, controller),\n ]);\n }\n\n private async materializeRequestBody(\n record: NetworkRecordState,\n controller: PageController,\n ): Promise<void> {\n if (record.requestBodyState !== \"pending\") {\n return;\n }\n const existing = controller.requestBodyTasks.get(record.requestId);\n if (existing) {\n await existing;\n return;\n }\n const task = (async () => {\n if (record.cdpRequestId === undefined) {\n record.requestBodyState = \"failed\";\n record.requestBodyError = \"request body capture is unavailable without a CDP request id\";\n return;\n }\n try {\n const result = await controller.cdp.send(\"Network.getRequestPostData\", {\n requestId: record.cdpRequestId,\n });\n const contentType = headerEntryValue(record.requestHeaders, \"content-type\");\n record.requestBody =\n typeof result.postData === \"string\"\n ? captureBodyPayload(\n Buffer.from(result.postData, \"utf8\"),\n contentType ?? undefined,\n this.bodyCaptureLimitBytes,\n )\n : undefined;\n if (record.requestBody === undefined) {\n record.requestBodyState = \"skipped\";\n record.requestBodySkipReason = \"not-present\";\n return;\n }\n record.requestBodyState = \"complete\";\n record.requestBodySkipReason = undefined;\n record.requestBodyError = undefined;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (/No post data|No resource with given identifier|No data found/i.test(message)) {\n record.requestBodyState = \"skipped\";\n record.requestBodySkipReason = \"not-present\";\n record.requestBodyError = undefined;\n return;\n }\n record.requestBodyState = \"failed\";\n record.requestBodyError = message;\n }\n })();\n controller.requestBodyTasks.set(record.requestId, task);\n try {\n await task;\n } finally {\n controller.requestBodyTasks.delete(record.requestId);\n }\n }\n\n private async materializeResponseBody(\n record: NetworkRecordState,\n controller: PageController,\n ): Promise<void> {\n if (record.responseBodyState !== \"pending\") {\n return;\n }\n if (record.captureState === \"pending\") {\n return;\n }\n const skipReason = getResponseBodySkipReason(record);\n if (skipReason !== undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = skipReason;\n record.responseBodyError = undefined;\n return;\n }\n const existing = controller.responseBodyTasks.get(record.requestId);\n if (existing) {\n await existing;\n return;\n }\n const task = (async () => {\n if (record.cdpRequestId === undefined) {\n record.responseBodyState = \"failed\";\n record.responseBodyError = \"response body capture is unavailable without a CDP request id\";\n return;\n }\n try {\n const result = await controller.cdp.send(\"Network.getResponseBody\", {\n requestId: record.cdpRequestId,\n });\n const contentType = headerEntryValue(record.responseHeaders, \"content-type\");\n const bytes = result.base64Encoded\n ? Buffer.from(result.body, \"base64\")\n : Buffer.from(result.body, \"utf8\");\n const responseBody = captureBodyPayload(\n bytes,\n contentType ?? undefined,\n this.bodyCaptureLimitBytes,\n );\n if (responseBody === undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = \"not-present\";\n return;\n }\n record.responseBody = responseBody;\n record.responseBodyState = \"complete\";\n record.responseBodySkipReason = undefined;\n record.responseBodyError = undefined;\n record.transfer = {\n ...(record.transfer ?? {}),\n decodedBodyBytes: responseBody.capturedByteLength,\n ...(record.transfer?.encodedBodyBytes === undefined\n ? {}\n : { encodedBodyBytes: record.transfer.encodedBodyBytes }),\n ...(record.transfer?.requestHeadersBytes === undefined\n ? {}\n : { requestHeadersBytes: record.transfer.requestHeadersBytes }),\n ...(record.transfer?.responseHeadersBytes === undefined\n ? {}\n : { responseHeadersBytes: record.transfer.responseHeadersBytes }),\n ...(record.transfer?.transferSizeBytes === undefined\n ? {}\n : { transferSizeBytes: record.transfer.transferSizeBytes }),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (/No resource with given identifier|No data found|Could not load body/i.test(message)) {\n record.responseBodyState = \"failed\";\n record.responseBodyError = message;\n return;\n }\n record.responseBodyState = \"failed\";\n record.responseBodyError = message;\n }\n })();\n controller.responseBodyTasks.set(record.requestId, task);\n try {\n await task;\n } finally {\n controller.responseBodyTasks.delete(record.requestId);\n }\n }\n\n private applyCdpResponseMetadata(\n record: NetworkRecordState,\n response: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers?: Record<string, unknown>;\n readonly protocol?: string;\n readonly remoteIPAddress?: string;\n readonly remotePort?: number;\n readonly fromDiskCache?: boolean;\n readonly fromServiceWorker?: boolean;\n },\n ): void {\n record.url = response.url;\n record.status = response.status;\n record.statusText = response.statusText;\n const responseHeaders = objectHeadersToEntries(response.headers);\n if (\n record.responseHeaders.length === 0 ||\n !record.responseHeaders.some((header) => header.name.toLowerCase() === \"set-cookie\")\n ) {\n record.responseHeaders = responseHeaders;\n }\n record.source = {\n ...(response.protocol === undefined ? {} : { protocol: response.protocol }),\n ...(response.remoteIPAddress === undefined && response.remotePort === undefined\n ? {}\n : {\n remoteAddress: {\n ...(response.remoteIPAddress === undefined ? {} : { ip: response.remoteIPAddress }),\n ...(response.remotePort === undefined ? {} : { port: response.remotePort }),\n },\n }),\n ...(response.fromDiskCache === undefined ? {} : { fromDiskCache: response.fromDiskCache }),\n ...(response.fromServiceWorker === undefined\n ? {}\n : { fromServiceWorker: response.fromServiceWorker }),\n };\n }\n\n private requireMainFrame(controller: PageController): FrameState {\n if (!controller.mainFrameRef) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `page ${controller.pageRef} has no main frame`,\n );\n }\n return this.requireFrame(controller.mainFrameRef);\n }\n\n private requireSession(sessionRef: SessionRef): SessionState {\n const session = this.sessions.get(sessionRef);\n if (!session) {\n throw closedSessionError(sessionRef);\n }\n return session;\n }\n\n private requirePage(pageRef: PageRef): PageController {\n const page = this.pages.get(pageRef);\n if (!page || page.lifecycleState === \"closed\") {\n throw closedPageError(pageRef);\n }\n this.throwBackgroundError(page);\n return page;\n }\n\n private requireFrame(frameRef: FrameRef): FrameState {\n const frame = this.frames.get(frameRef);\n if (!frame) {\n throw createBrowserCoreError(\"not-found\", `frame ${frameRef} was not found`, {\n details: { frameRef },\n });\n }\n return frame;\n }\n\n private requireLiveFrame(frameRef: FrameRef): Frame {\n const state = this.requireFrame(frameRef);\n const controller = this.requirePage(state.pageRef);\n for (const frame of controller.page.frames()) {\n if (controller.frameBindings.get(frame) === frameRef) {\n return frame;\n }\n }\n\n throw createBrowserCoreError(\"not-found\", `frame ${frameRef} is not attached to a live page`, {\n details: { frameRef },\n });\n }\n\n private requireDocument(documentRef: DocumentRef): DocumentState {\n const document = this.documents.get(documentRef);\n if (!document) {\n throw createBrowserCoreError(\"not-found\", `document ${documentRef} was not found`, {\n details: { documentRef },\n });\n }\n return document;\n }\n\n private cleanupPageController(controller: PageController): void {\n controller.lifecycleState = \"closed\";\n this.pages.delete(controller.pageRef);\n const session = this.sessions.get(controller.sessionRef);\n if (session) {\n session.pageRefs.delete(controller.pageRef);\n if (session.activePageRef === controller.pageRef) {\n session.activePageRef = Array.from(session.pageRefs)[0];\n }\n }\n for (const frame of controller.framesByCdpId.values()) {\n this.frames.delete(frame.frameRef);\n this.documents.delete(frame.currentDocument.documentRef);\n this.retiredDocuments.add(frame.currentDocument.documentRef);\n }\n controller.framesByCdpId.clear();\n controller.documentsByRef.clear();\n controller.networkByCdpRequestId.clear();\n controller.requestBodyTasks.clear();\n controller.responseBodyTasks.clear();\n }\n\n private isControllerAcceptingEvents(controller: PageController): boolean {\n if (controller.lifecycleState !== \"open\" || controller.explicitCloseInFlight) {\n return false;\n }\n const session = this.sessions.get(controller.sessionRef);\n return session?.lifecycleState === \"open\";\n }\n\n private runControllerEvent(\n controller: PageController,\n handler: () => void | Promise<void>,\n ): void {\n if (!this.isControllerAcceptingEvents(controller)) {\n return;\n }\n try {\n const result = handler();\n if (result instanceof Promise) {\n void result.catch((error) => this.handleControllerEventError(controller, error));\n }\n } catch (error) {\n this.handleControllerEventError(controller, error);\n }\n }\n\n private handleControllerEventError(controller: PageController, error: unknown): void {\n if (\n !this.isControllerAcceptingEvents(controller) ||\n shouldIgnoreBackgroundTaskError(controller, error)\n ) {\n return;\n }\n controller.backgroundError ??= normalizePlaywrightError(error, controller.pageRef);\n }\n\n private trackBackgroundTask(controller: PageController, promise: Promise<void>): Promise<void> {\n const tracked = promise.catch((error) => {\n if (shouldIgnoreBackgroundTaskError(controller, error)) {\n return;\n }\n controller.backgroundError ??= normalizePlaywrightError(error, controller.pageRef);\n });\n controller.backgroundTasks.add(tracked);\n void tracked.finally(() => {\n controller.backgroundTasks.delete(tracked);\n });\n return tracked;\n }\n\n private async flushBackgroundTasks(controller: PageController): Promise<void> {\n if (controller.backgroundTasks.size === 0) {\n this.throwBackgroundError(controller);\n return;\n }\n await Promise.all(Array.from(controller.backgroundTasks));\n this.throwBackgroundError(controller);\n }\n\n private async flushPendingPageTasks(sessionRef: SessionRef): Promise<void> {\n const session = this.sessions.get(sessionRef);\n if (!session) {\n return;\n }\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n const pending = Array.from(session.pendingPageTasks);\n if (pending.length === 0) {\n return;\n }\n await Promise.all(pending);\n }\n }\n\n private throwBackgroundError(controller: PageController): void {\n if (controller.backgroundError) {\n throw controller.backgroundError;\n }\n }\n\n private createEvent<TKind extends StepEvent[\"kind\"]>(\n value: Omit<Extract<StepEvent, { readonly kind: TKind }>, \"eventId\" | \"timestamp\">,\n ): Extract<StepEvent, { readonly kind: TKind }> {\n return {\n ...value,\n eventId: `event:${++this.eventCounter}`,\n timestamp: Date.now(),\n } as Extract<StepEvent, { readonly kind: TKind }>;\n }\n\n private queueEvent(pageRef: PageRef, event: StepEvent): void {\n const controller = this.pages.get(pageRef);\n if (!controller) {\n return;\n }\n controller.queuedEvents.push(event);\n }\n\n private drainQueuedEvents(pageRef: PageRef): StepEvent[] {\n const controller = this.requirePage(pageRef);\n const events = controller.queuedEvents.splice(0, controller.queuedEvents.length);\n return events.map((event) => clone(event));\n }\n\n private createStepResult<TData>(\n sessionRef: SessionRef,\n pageRef: PageRef | undefined,\n startedAt: number,\n input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n readonly events: readonly StepEvent[];\n readonly data: TData;\n },\n ): StepResult<TData> {\n const completedAt = Date.now();\n return {\n stepId: `step:${++this.stepCounter}`,\n sessionRef,\n ...(pageRef === undefined ? {} : { pageRef }),\n ...(input.frameRef === undefined ? {} : { frameRef: input.frameRef }),\n ...(input.documentRef === undefined ? {} : { documentRef: input.documentRef }),\n ...(input.documentEpoch === undefined ? {} : { documentEpoch: input.documentEpoch }),\n startedAt,\n completedAt,\n durationMs: completedAt - startedAt,\n events: input.events.map((event) => clone(event)),\n data: clone(input.data),\n };\n }\n\n private async withModifiers(\n page: Page,\n modifiers: readonly KeyModifier[] | undefined,\n action: () => Promise<void>,\n ): Promise<void> {\n if (!modifiers || modifiers.length === 0) {\n await action();\n return;\n }\n for (const modifier of modifiers) {\n await page.keyboard.down(modifier);\n }\n try {\n await action();\n } finally {\n for (const modifier of [...modifiers].reverse()) {\n await page.keyboard.up(modifier);\n }\n }\n }\n\n private async readTitle(page: Page, fallback: string): Promise<string> {\n try {\n return await page.title();\n } catch {\n return fallback;\n }\n }\n\n private readUrl(page: Page, fallback: string): string {\n try {\n return page.url();\n } catch {\n return fallback;\n }\n }\n\n private retireDocument(documentRef: DocumentRef): void {\n this.documents.delete(documentRef);\n this.retiredDocuments.add(documentRef);\n }\n\n private isDescendantFrame(\n controller: PageController,\n frame: FrameState,\n ancestorFrameRef: FrameRef,\n ): boolean {\n let current = frame.parentFrameRef;\n while (current) {\n if (current === ancestorFrameRef) {\n return true;\n }\n current = this.frames.get(current)?.parentFrameRef;\n }\n return false;\n }\n\n private assertNotDisposed(): void {\n if (this.disposed) {\n throw createBrowserCoreError(\"operation-failed\", \"engine has been disposed\");\n }\n }\n}\n\nfunction toPlaywrightCookieSameSite(value: CookieRecord[\"sameSite\"]): \"Strict\" | \"Lax\" | \"None\" {\n switch (value) {\n case \"strict\":\n return \"Strict\";\n case \"none\":\n return \"None\";\n case \"lax\":\n default:\n return \"Lax\";\n }\n}\n\nexport async function createPlaywrightBrowserCoreEngine(\n options: PlaywrightBrowserCoreEngineOptions = {},\n): Promise<PlaywrightBrowserCoreEngine> {\n return PlaywrightBrowserCoreEngine.create(options);\n}\n\nexport async function connectPlaywrightChromiumBrowser(input: {\n readonly url: string;\n readonly headers?: Readonly<Record<string, string>>;\n}): Promise<Browser> {\n return chromium.connectOverCDP({\n endpointURL: input.url,\n ...(input.headers === undefined ? {} : { headers: input.headers }),\n });\n}\n\nexport async function disconnectPlaywrightChromiumBrowser(browser: Browser): Promise<void> {\n void browser.close().catch(() => undefined);\n}\n\nfunction objectHeadersToEntries(\n headers: Record<string, unknown> | undefined,\n): ReturnType<typeof createHeaderEntry>[] {\n if (!headers) {\n return [];\n }\n return Object.entries(headers).flatMap(([name, value]) => {\n if (typeof value === \"string\" && name.toLowerCase() === \"set-cookie\" && value.includes(\"\\n\")) {\n return value\n .split(\"\\n\")\n .filter((entry) => entry.length > 0)\n .map((entry) => createHeaderEntry(name, entry));\n }\n return [createHeaderEntry(name, stringifyHeaderValue(value))];\n });\n}\n\nfunction stringifyHeaderValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map((entry) => stringifyHeaderValue(entry)).join(\", \");\n }\n return typeof value === \"string\" ? value : String(value ?? \"\");\n}\n\nfunction headerEntryValue(\n headers: readonly { readonly name: string; readonly value: string }[],\n name: string,\n): string | undefined {\n const normalized = name.toLowerCase();\n for (const header of headers) {\n if (header.name.toLowerCase() === normalized) {\n return header.value;\n }\n }\n return undefined;\n}\n\nfunction parseRawHeadersText(value: string | undefined): ReturnType<typeof createHeaderEntry>[] {\n if (value === undefined || value.length === 0) {\n return [];\n }\n return value\n .split(/\\r?\\n/)\n .slice(1)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .flatMap((line) => {\n const index = line.indexOf(\":\");\n if (index <= 0) {\n return [];\n }\n const name = line.slice(0, index).trim();\n const headerValue = line.slice(index + 1).trim();\n return [createHeaderEntry(name, headerValue)];\n });\n}\n\nfunction normalizeNetworkInitiator(initiator: {\n readonly type?: string;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly stack?: {\n readonly callFrames?: ReadonlyArray<{\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly functionName?: string;\n }>;\n };\n}): NonNullable<NetworkRecord[\"initiator\"]> {\n const type =\n initiator.type === \"parser\" ||\n initiator.type === \"script\" ||\n initiator.type === \"preload\" ||\n initiator.type === \"redirect\" ||\n initiator.type === \"user\" ||\n initiator.type === \"service-worker\"\n ? initiator.type\n : \"other\";\n const stackTrace =\n initiator.stack?.callFrames?.map((frame) =>\n [frame.functionName, frame.url, frame.lineNumber, frame.columnNumber]\n .filter((value) => value !== undefined && value !== \"\")\n .join(\" \"),\n ) ?? [];\n return {\n type,\n ...(initiator.url === undefined ? {} : { url: initiator.url }),\n ...(initiator.lineNumber === undefined ? {} : { lineNumber: initiator.lineNumber }),\n ...(initiator.columnNumber === undefined ? {} : { columnNumber: initiator.columnNumber }),\n ...(stackTrace.length === 0 ? {} : { stackTrace }),\n };\n}\n\nfunction normalizeNetworkTiming(\n timing:\n | {\n readonly requestTime: number;\n readonly dnsStart?: number;\n readonly dnsEnd?: number;\n readonly connectStart?: number;\n readonly connectEnd?: number;\n readonly sslStart?: number;\n readonly sslEnd?: number;\n readonly sendStart?: number;\n readonly receiveHeadersStart?: number;\n readonly receiveHeadersEnd?: number;\n readonly workerStart?: number;\n readonly workerReady?: number;\n }\n | undefined,\n): NetworkRecord[\"timing\"] | undefined {\n if (timing === undefined) {\n return undefined;\n }\n const start = timing.requestTime * 1000;\n const at = (value: number | undefined) =>\n value === undefined || value < 0 ? undefined : start + value;\n const normalized: {\n requestStartMs: number;\n dnsStartMs?: number;\n dnsEndMs?: number;\n connectStartMs?: number;\n connectEndMs?: number;\n sslStartMs?: number;\n sslEndMs?: number;\n requestSentMs?: number;\n responseStartMs?: number;\n responseEndMs?: number;\n workerStartMs?: number;\n workerReadyMs?: number;\n } = {\n requestStartMs: start,\n };\n const dnsStartMs = at(timing.dnsStart);\n const dnsEndMs = at(timing.dnsEnd);\n const connectStartMs = at(timing.connectStart);\n const connectEndMs = at(timing.connectEnd);\n const sslStartMs = at(timing.sslStart);\n const sslEndMs = at(timing.sslEnd);\n const requestSentMs = at(timing.sendStart);\n const responseStartMs = at(timing.receiveHeadersStart);\n const responseEndMs = at(timing.receiveHeadersEnd);\n const workerStartMs = at(timing.workerStart);\n const workerReadyMs = at(timing.workerReady);\n if (dnsStartMs !== undefined) normalized.dnsStartMs = dnsStartMs;\n if (dnsEndMs !== undefined) normalized.dnsEndMs = dnsEndMs;\n if (connectStartMs !== undefined) normalized.connectStartMs = connectStartMs;\n if (connectEndMs !== undefined) normalized.connectEndMs = connectEndMs;\n if (sslStartMs !== undefined) normalized.sslStartMs = sslStartMs;\n if (sslEndMs !== undefined) normalized.sslEndMs = sslEndMs;\n if (requestSentMs !== undefined) normalized.requestSentMs = requestSentMs;\n if (responseStartMs !== undefined) normalized.responseStartMs = responseStartMs;\n if (responseEndMs !== undefined) normalized.responseEndMs = responseEndMs;\n if (workerStartMs !== undefined) normalized.workerStartMs = workerStartMs;\n if (workerReadyMs !== undefined) normalized.workerReadyMs = workerReadyMs;\n return normalized;\n}\n\nfunction getResponseBodySkipReason(record: NetworkRecordState): string | undefined {\n return getResponseBodySkipReasonForMetadata({\n method: record.method,\n status: record.status,\n resourceType: record.resourceType,\n url: record.url,\n captureState: record.captureState,\n });\n}\n\nfunction getResponseBodySkipReasonForMetadata(input: {\n readonly method: string;\n readonly status: number | undefined;\n readonly resourceType: NetworkRecordState[\"resourceType\"];\n readonly url: string;\n readonly captureState: NetworkRecordState[\"captureState\"];\n}): string | undefined {\n if (input.captureState === \"failed\") {\n return \"request-failed\";\n }\n if (input.method.toUpperCase() === \"HEAD\") {\n return \"head-request\";\n }\n if (input.status !== undefined && [204, 205, 304].includes(input.status)) {\n return \"status-without-body\";\n }\n if (input.status !== undefined && input.status >= 300 && input.status < 400) {\n return \"redirect-response\";\n }\n if (\n input.resourceType === \"preflight\" ||\n input.resourceType === \"websocket\" ||\n input.resourceType === \"event-stream\"\n ) {\n return \"unsupported-resource-type\";\n }\n if (/^(blob|data):/i.test(input.url)) {\n return \"unsupported-url-scheme\";\n }\n return undefined;\n}\n\nfunction raceWithAbort<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n signal.throwIfAborted?.();\n\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n signal.addEventListener(\n \"abort\",\n () => {\n reject(signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\"));\n },\n { once: true },\n );\n }),\n ]);\n}\n\nfunction withTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined): Promise<T> {\n if (timeoutMs === undefined) {\n return promise;\n }\n\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(\n createBrowserCoreError(\n \"timeout\",\n `page evaluation timed out after ${String(timeoutMs)}ms`,\n ),\n );\n }, timeoutMs);\n }),\n ]);\n}\n"]}
1
+ {"version":3,"sources":["../../browser-core/src/brand.ts","../../browser-core/src/identity.ts","../../browser-core/src/geometry.ts","../../browser-core/src/network.ts","../../browser-core/src/capabilities.ts","../../browser-core/src/errors.ts","../../browser-core/src/cdp-dom-snapshot.ts","../../browser-core/src/cdp-visual-stability.ts","../../browser-core/src/post-load-tracker.ts","../../browser-core/src/action-boundary.ts","../../protocol/src/computer-use-bridge.ts","../../protocol/src/dom-action-bridge.ts","../src/options.ts","../src/normalize.ts","../src/coordinate.ts","../src/dom.ts","../src/errors.ts","../src/viewport-screenshot.ts","../src/computer-use.ts","../src/dom-action-bridge.ts","../src/action-settle.ts","../src/storage-capture.ts","../src/engine.ts"],"names":["playwrightErrors","rootOverlay","mode","delayWithSignal","abortError","normalized","controller","mainFrame"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAyVtC,SAAS,gCACd,OAAA,E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","file":"index.js","sourcesContent":["declare const brandSymbol: unique symbol;\n\nexport type Brand<Value, Name extends string> = Value & {\n readonly [brandSymbol]: Name;\n};\n\nexport function brand<Value, Name extends string>(value: Value): Brand<Value, Name> {\n return value as Brand<Value, Name>;\n}\n","import { brand, type Brand } from \"./brand.js\";\n\ntype StringRefKind =\n | \"SessionRef\"\n | \"PageRef\"\n | \"FrameRef\"\n | \"DocumentRef\"\n | \"NodeRef\"\n | \"NetworkRequestId\"\n | \"DownloadRef\"\n | \"DialogRef\"\n | \"ChooserRef\"\n | \"WorkerRef\";\n\nexport type SessionRef = Brand<string, \"SessionRef\">;\nexport type PageRef = Brand<string, \"PageRef\">;\nexport type FrameRef = Brand<string, \"FrameRef\">;\nexport type DocumentRef = Brand<string, \"DocumentRef\">;\nexport type NodeRef = Brand<string, \"NodeRef\">;\nexport type NetworkRequestId = Brand<string, \"NetworkRequestId\">;\nexport type DownloadRef = Brand<string, \"DownloadRef\">;\nexport type DialogRef = Brand<string, \"DialogRef\">;\nexport type ChooserRef = Brand<string, \"ChooserRef\">;\nexport type WorkerRef = Brand<string, \"WorkerRef\">;\nexport type DocumentEpoch = Brand<number, \"DocumentEpoch\">;\n\nexport interface NodeLocator {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n}\n\nconst REF_PREFIXES = {\n session: \"session\",\n page: \"page\",\n frame: \"frame\",\n document: \"document\",\n node: \"node\",\n request: \"request\",\n download: \"download\",\n dialog: \"dialog\",\n chooser: \"chooser\",\n worker: \"worker\",\n} as const;\n\ntype RefPrefix = (typeof REF_PREFIXES)[keyof typeof REF_PREFIXES];\n\nfunction normalizeRef(prefix: RefPrefix, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new TypeError(`${prefix} reference cannot be empty`);\n }\n\n const canonicalPrefix = `${prefix}:`;\n if (trimmed.startsWith(canonicalPrefix)) {\n if (trimmed.length === canonicalPrefix.length) {\n throw new TypeError(`${prefix} reference must include an identifier`);\n }\n return trimmed;\n }\n\n if (trimmed.includes(\":\")) {\n throw new TypeError(\n `${prefix} reference \"${trimmed}\" must either omit a prefix or use ${canonicalPrefix}`,\n );\n }\n\n return `${canonicalPrefix}${trimmed}`;\n}\n\nfunction hasPrefix(prefix: RefPrefix, value: string): boolean {\n return value.startsWith(`${prefix}:`) && value.length > prefix.length + 1;\n}\n\nfunction createStringRef<Name extends StringRefKind>(\n prefix: RefPrefix,\n value: string,\n): Brand<string, Name> {\n return brand<string, Name>(normalizeRef(prefix, value));\n}\n\nexport function createSessionRef(value: string): SessionRef {\n return createStringRef(\"session\", value);\n}\n\nexport function createPageRef(value: string): PageRef {\n return createStringRef(\"page\", value);\n}\n\nexport function createFrameRef(value: string): FrameRef {\n return createStringRef(\"frame\", value);\n}\n\nexport function createDocumentRef(value: string): DocumentRef {\n return createStringRef(\"document\", value);\n}\n\nexport function createNodeRef(value: string): NodeRef {\n return createStringRef(\"node\", value);\n}\n\nexport function createNetworkRequestId(value: string): NetworkRequestId {\n return createStringRef(\"request\", value);\n}\n\nexport function createDownloadRef(value: string): DownloadRef {\n return createStringRef(\"download\", value);\n}\n\nexport function createDialogRef(value: string): DialogRef {\n return createStringRef(\"dialog\", value);\n}\n\nexport function createChooserRef(value: string): ChooserRef {\n return createStringRef(\"chooser\", value);\n}\n\nexport function createWorkerRef(value: string): WorkerRef {\n return createStringRef(\"worker\", value);\n}\n\nexport function isSessionRef(value: string): value is SessionRef {\n return hasPrefix(\"session\", value);\n}\n\nexport function isPageRef(value: string): value is PageRef {\n return hasPrefix(\"page\", value);\n}\n\nexport function isFrameRef(value: string): value is FrameRef {\n return hasPrefix(\"frame\", value);\n}\n\nexport function isDocumentRef(value: string): value is DocumentRef {\n return hasPrefix(\"document\", value);\n}\n\nexport function isNodeRef(value: string): value is NodeRef {\n return hasPrefix(\"node\", value);\n}\n\nexport function isNetworkRequestId(value: string): value is NetworkRequestId {\n return hasPrefix(\"request\", value);\n}\n\nexport function isDownloadRef(value: string): value is DownloadRef {\n return hasPrefix(\"download\", value);\n}\n\nexport function isDialogRef(value: string): value is DialogRef {\n return hasPrefix(\"dialog\", value);\n}\n\nexport function isChooserRef(value: string): value is ChooserRef {\n return hasPrefix(\"chooser\", value);\n}\n\nexport function isWorkerRef(value: string): value is WorkerRef {\n return hasPrefix(\"worker\", value);\n}\n\nexport function serializeRef(\n ref:\n | SessionRef\n | PageRef\n | FrameRef\n | DocumentRef\n | NodeRef\n | NetworkRequestId\n | DownloadRef\n | DialogRef\n | ChooserRef\n | WorkerRef,\n): string {\n return ref;\n}\n\nexport function createDocumentEpoch(value: number): DocumentEpoch {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(\n `document epoch must be a non-negative integer, received ${String(value)}`,\n );\n }\n return brand<number, \"DocumentEpoch\">(value);\n}\n\nexport function nextDocumentEpoch(epoch: DocumentEpoch): DocumentEpoch {\n return createDocumentEpoch(epoch + 1);\n}\n\nexport function serializeDocumentEpoch(epoch: DocumentEpoch): number {\n return epoch;\n}\n\nexport function createNodeLocator(\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n nodeRef: NodeRef,\n): NodeLocator {\n return { documentRef, documentEpoch, nodeRef };\n}\n","import { brand, type Brand } from \"./brand.js\";\n\nexport interface Point {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface Size {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Rect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport type Quad = readonly [Point, Point, Point, Point];\n\nexport interface ScrollOffset {\n readonly x: number;\n readonly y: number;\n}\n\nexport type CoordinateSpace =\n | \"document-css\"\n | \"layout-viewport-css\"\n | \"visual-viewport-css\"\n | \"computer-display-css\"\n | \"window\"\n | \"screen\"\n | \"device-pixel\";\n\nexport interface LayoutViewport {\n readonly origin: Point;\n readonly size: Size;\n}\n\nexport interface VisualViewport {\n readonly origin: Point;\n readonly offsetWithinLayoutViewport: ScrollOffset;\n readonly size: Size;\n}\n\nexport type DevicePixelRatio = Brand<number, \"DevicePixelRatio\">;\nexport type PageScaleFactor = Brand<number, \"PageScaleFactor\">;\nexport type PageZoomFactor = Brand<number, \"PageZoomFactor\">;\n\nexport interface ViewportMetrics {\n readonly layoutViewport: LayoutViewport;\n readonly visualViewport: VisualViewport;\n readonly scrollOffset: ScrollOffset;\n readonly contentSize: Size;\n readonly devicePixelRatio: DevicePixelRatio;\n readonly pageScaleFactor: PageScaleFactor;\n readonly pageZoomFactor: PageZoomFactor;\n}\n\nfunction assertFinite(value: number, name: string): void {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${name} must be a finite number`);\n }\n}\n\nfunction assertNonNegative(value: number, name: string): void {\n assertFinite(value, name);\n if (value < 0) {\n throw new RangeError(`${name} must be greater than or equal to 0`);\n }\n}\n\nfunction createScale<Name extends string>(value: number, name: string) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(`${name} must be greater than 0`);\n }\n return brand<number, Name>(value);\n}\n\nexport function createPoint(x: number, y: number): Point {\n assertFinite(x, \"point.x\");\n assertFinite(y, \"point.y\");\n return { x, y };\n}\n\nexport function createSize(width: number, height: number): Size {\n assertNonNegative(width, \"size.width\");\n assertNonNegative(height, \"size.height\");\n return { width, height };\n}\n\nexport function createRect(x: number, y: number, width: number, height: number): Rect {\n assertFinite(x, \"rect.x\");\n assertFinite(y, \"rect.y\");\n assertNonNegative(width, \"rect.width\");\n assertNonNegative(height, \"rect.height\");\n return { x, y, width, height };\n}\n\nexport function createScrollOffset(x: number, y: number): ScrollOffset {\n assertFinite(x, \"scrollOffset.x\");\n assertFinite(y, \"scrollOffset.y\");\n return { x, y };\n}\n\nexport function createQuad(points: readonly [Point, Point, Point, Point]): Quad {\n return points;\n}\n\nexport function rectToQuad(rect: Rect): Quad {\n return createQuad([\n createPoint(rect.x, rect.y),\n createPoint(rect.x + rect.width, rect.y),\n createPoint(rect.x + rect.width, rect.y + rect.height),\n createPoint(rect.x, rect.y + rect.height),\n ]);\n}\n\nexport function quadBounds(quad: Quad): Rect {\n const xs = quad.map((point) => point.x);\n const ys = quad.map((point) => point.y);\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs);\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys);\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nexport function rectContainsPoint(rect: Rect, point: Point): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\nexport function createDevicePixelRatio(value: number): DevicePixelRatio {\n return createScale<\"DevicePixelRatio\">(value, \"devicePixelRatio\");\n}\n\nexport function createPageScaleFactor(value: number): PageScaleFactor {\n return createScale<\"PageScaleFactor\">(value, \"pageScaleFactor\");\n}\n\nexport function createPageZoomFactor(value: number): PageZoomFactor {\n return createScale<\"PageZoomFactor\">(value, \"pageZoomFactor\");\n}\n","import type {\n DocumentRef,\n FrameRef,\n NetworkRequestId,\n PageRef,\n SessionRef,\n WorkerRef,\n} from \"./identity.js\";\n\nexport interface HeaderEntry {\n readonly name: string;\n readonly value: string;\n}\n\nexport type BodyPayloadEncoding = \"identity\" | \"base64\" | \"gzip\" | \"deflate\" | \"brotli\" | \"unknown\";\n\nexport interface BodyPayload {\n readonly bytes: Uint8Array;\n readonly encoding: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated: boolean;\n readonly capturedByteLength: number;\n readonly originalByteLength?: number;\n}\n\nexport type NetworkCaptureState = \"pending\" | \"complete\" | \"failed\" | \"skipped\";\n\nexport type NetworkRecordKind = \"http\" | \"websocket\" | \"event-stream\";\n\nexport type NetworkResourceType =\n | \"document\"\n | \"stylesheet\"\n | \"image\"\n | \"media\"\n | \"font\"\n | \"script\"\n | \"fetch\"\n | \"xhr\"\n | \"websocket\"\n | \"event-stream\"\n | \"manifest\"\n | \"texttrack\"\n | \"beacon\"\n | \"ping\"\n | \"preflight\"\n | \"other\";\n\nexport type NetworkInitiatorType =\n | \"parser\"\n | \"script\"\n | \"preload\"\n | \"redirect\"\n | \"user\"\n | \"service-worker\"\n | \"other\";\n\nexport interface NetworkInitiator {\n readonly type: NetworkInitiatorType;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly requestId?: NetworkRequestId;\n readonly stackTrace?: readonly string[];\n}\n\nexport interface NetworkTiming {\n readonly requestStartMs?: number;\n readonly dnsStartMs?: number;\n readonly dnsEndMs?: number;\n readonly connectStartMs?: number;\n readonly connectEndMs?: number;\n readonly sslStartMs?: number;\n readonly sslEndMs?: number;\n readonly requestSentMs?: number;\n readonly responseStartMs?: number;\n readonly responseEndMs?: number;\n readonly workerStartMs?: number;\n readonly workerReadyMs?: number;\n}\n\nexport interface NetworkTransferSizes {\n readonly requestHeadersBytes?: number;\n readonly responseHeadersBytes?: number;\n readonly encodedBodyBytes?: number;\n readonly decodedBodyBytes?: number;\n readonly transferSizeBytes?: number;\n}\n\nexport interface NetworkSourceMetadata {\n readonly protocol?: string;\n readonly remoteAddress?: {\n readonly ip?: string;\n readonly port?: number;\n };\n readonly fromServiceWorker?: boolean;\n readonly fromDiskCache?: boolean;\n readonly fromMemoryCache?: boolean;\n readonly workerRef?: WorkerRef;\n}\n\nexport interface NetworkRecord {\n readonly kind: NetworkRecordKind;\n readonly requestId: NetworkRequestId;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly method: string;\n readonly url: string;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly status?: number;\n readonly statusText?: string;\n readonly resourceType: NetworkResourceType;\n readonly redirectFromRequestId?: NetworkRequestId;\n readonly redirectToRequestId?: NetworkRequestId;\n readonly navigationRequest: boolean;\n readonly initiator?: NetworkInitiator;\n readonly timing?: NetworkTiming;\n readonly transfer?: NetworkTransferSizes;\n readonly source?: NetworkSourceMetadata;\n readonly captureState: NetworkCaptureState;\n readonly requestBodyState: NetworkCaptureState;\n readonly responseBodyState: NetworkCaptureState;\n readonly requestBodySkipReason?: string;\n readonly responseBodySkipReason?: string;\n readonly requestBodyError?: string;\n readonly responseBodyError?: string;\n readonly requestBody?: BodyPayload;\n readonly responseBody?: BodyPayload;\n}\n\nexport interface NetworkRecordFilterInput {\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkResourceType;\n}\n\nexport function createHeaderEntry(name: string, value: string): HeaderEntry {\n return { name, value };\n}\n\nexport function createBodyPayload(\n bytes: Uint8Array,\n options: {\n encoding?: BodyPayloadEncoding;\n mimeType?: string;\n charset?: string;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return {\n bytes,\n encoding: options.encoding ?? \"identity\",\n truncated: options.truncated ?? false,\n capturedByteLength: bytes.byteLength,\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.charset === undefined ? {} : { charset: options.charset }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n };\n}\n\nexport function bodyPayloadFromUtf8(\n value: string,\n options: {\n mimeType?: string;\n encoding?: BodyPayloadEncoding;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return createBodyPayload(new TextEncoder().encode(value), {\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.encoding === undefined ? {} : { encoding: options.encoding }),\n ...(options.truncated === undefined ? {} : { truncated: options.truncated }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n charset: \"utf-8\",\n });\n}\n\nexport function matchesNetworkRecordFilters(\n record: Pick<NetworkRecord, \"url\" | \"method\" | \"status\" | \"resourceType\">,\n filters: NetworkRecordFilterInput,\n): boolean {\n if (filters.url !== undefined && !includesCaseInsensitive(record.url, filters.url)) {\n return false;\n }\n\n let parsedUrl: URL | undefined;\n const getParsedUrl = (): URL => {\n parsedUrl ??= new URL(record.url);\n return parsedUrl;\n };\n\n if (filters.hostname !== undefined) {\n const hostname = getParsedUrl().hostname;\n if (!includesCaseInsensitive(hostname, filters.hostname)) {\n return false;\n }\n }\n\n if (filters.path !== undefined) {\n const path = getParsedUrl().pathname;\n if (!includesCaseInsensitive(path, filters.path)) {\n return false;\n }\n }\n\n if (filters.method !== undefined && !includesCaseInsensitive(record.method, filters.method)) {\n return false;\n }\n\n if (\n filters.status !== undefined &&\n !includesCaseInsensitive(\n record.status === undefined ? \"\" : String(record.status),\n filters.status,\n )\n ) {\n return false;\n }\n\n if (filters.resourceType !== undefined && record.resourceType !== filters.resourceType) {\n return false;\n }\n\n return true;\n}\n\nfunction includesCaseInsensitive(value: string, query: string): boolean {\n return value.toLowerCase().includes(query.toLowerCase());\n}\n","export interface BrowserCapabilities {\n readonly executor: {\n readonly sessionLifecycle: boolean;\n readonly pageLifecycle: boolean;\n readonly navigation: boolean;\n readonly pointerInput: boolean;\n readonly keyboardInput: boolean;\n readonly touchInput: boolean;\n readonly screenshots: boolean;\n readonly executionControl: {\n readonly pause: boolean;\n readonly resume: boolean;\n readonly freeze: boolean;\n };\n };\n readonly inspector: {\n readonly pageEnumeration: boolean;\n readonly frameEnumeration: boolean;\n readonly html: boolean;\n readonly domSnapshot: boolean;\n readonly visualStability: boolean;\n readonly text: boolean;\n readonly attributes: boolean;\n readonly hitTest: boolean;\n readonly viewportMetrics: boolean;\n readonly network: boolean;\n readonly networkBodies: boolean;\n readonly cookies: boolean;\n readonly localStorage: boolean;\n readonly sessionStorage: boolean;\n readonly indexedDb: boolean;\n };\n readonly transport: {\n readonly sessionHttp: boolean;\n };\n readonly instrumentation: {\n readonly initScripts: boolean;\n readonly routing: boolean;\n };\n readonly events: {\n readonly pageLifecycle: boolean;\n readonly dialog: boolean;\n readonly download: boolean;\n readonly chooser: boolean;\n readonly worker: boolean;\n readonly console: boolean;\n readonly pageError: boolean;\n readonly websocket: boolean;\n readonly eventStream: boolean;\n readonly executionState: boolean;\n };\n}\n\nexport type BrowserCapabilityPath =\n | \"executor.sessionLifecycle\"\n | \"executor.pageLifecycle\"\n | \"executor.navigation\"\n | \"executor.pointerInput\"\n | \"executor.keyboardInput\"\n | \"executor.touchInput\"\n | \"executor.screenshots\"\n | \"executor.executionControl.pause\"\n | \"executor.executionControl.resume\"\n | \"executor.executionControl.freeze\"\n | \"inspector.pageEnumeration\"\n | \"inspector.frameEnumeration\"\n | \"inspector.html\"\n | \"inspector.domSnapshot\"\n | \"inspector.visualStability\"\n | \"inspector.text\"\n | \"inspector.attributes\"\n | \"inspector.hitTest\"\n | \"inspector.viewportMetrics\"\n | \"inspector.network\"\n | \"inspector.networkBodies\"\n | \"inspector.cookies\"\n | \"inspector.localStorage\"\n | \"inspector.sessionStorage\"\n | \"inspector.indexedDb\"\n | \"transport.sessionHttp\"\n | \"instrumentation.initScripts\"\n | \"instrumentation.routing\"\n | \"events.pageLifecycle\"\n | \"events.dialog\"\n | \"events.download\"\n | \"events.chooser\"\n | \"events.worker\"\n | \"events.console\"\n | \"events.pageError\"\n | \"events.websocket\"\n | \"events.eventStream\"\n | \"events.executionState\";\n\nexport type PartialBrowserCapabilities = {\n readonly [K in keyof BrowserCapabilities]?: BrowserCapabilities[K] extends object\n ? {\n readonly [Inner in keyof BrowserCapabilities[K]]?: BrowserCapabilities[K][Inner] extends object\n ? {\n readonly [Leaf in keyof BrowserCapabilities[K][Inner]]?: BrowserCapabilities[K][Inner][Leaf];\n }\n : BrowserCapabilities[K][Inner];\n }\n : BrowserCapabilities[K];\n};\n\nexport function noBrowserCapabilities(): BrowserCapabilities {\n return {\n executor: {\n sessionLifecycle: false,\n pageLifecycle: false,\n navigation: false,\n pointerInput: false,\n keyboardInput: false,\n touchInput: false,\n screenshots: false,\n executionControl: {\n pause: false,\n resume: false,\n freeze: false,\n },\n },\n inspector: {\n pageEnumeration: false,\n frameEnumeration: false,\n html: false,\n domSnapshot: false,\n visualStability: false,\n text: false,\n attributes: false,\n hitTest: false,\n viewportMetrics: false,\n network: false,\n networkBodies: false,\n cookies: false,\n localStorage: false,\n sessionStorage: false,\n indexedDb: false,\n },\n transport: {\n sessionHttp: false,\n },\n instrumentation: {\n initScripts: false,\n routing: false,\n },\n events: {\n pageLifecycle: false,\n dialog: false,\n download: false,\n chooser: false,\n worker: false,\n console: false,\n pageError: false,\n websocket: false,\n eventStream: false,\n executionState: false,\n },\n };\n}\n\nexport function allBrowserCapabilities(): BrowserCapabilities {\n return mergeBrowserCapabilities(noBrowserCapabilities(), {\n executor: {\n sessionLifecycle: true,\n pageLifecycle: true,\n navigation: true,\n pointerInput: true,\n keyboardInput: true,\n touchInput: true,\n screenshots: true,\n executionControl: {\n pause: true,\n resume: true,\n freeze: true,\n },\n },\n inspector: {\n pageEnumeration: true,\n frameEnumeration: true,\n html: true,\n domSnapshot: true,\n visualStability: true,\n text: true,\n attributes: true,\n hitTest: true,\n viewportMetrics: true,\n network: true,\n networkBodies: true,\n cookies: true,\n localStorage: true,\n sessionStorage: true,\n indexedDb: true,\n },\n transport: {\n sessionHttp: true,\n },\n instrumentation: {\n initScripts: true,\n routing: true,\n },\n events: {\n pageLifecycle: true,\n dialog: true,\n download: true,\n chooser: true,\n worker: true,\n console: true,\n pageError: true,\n websocket: true,\n eventStream: true,\n executionState: true,\n },\n });\n}\n\nexport function mergeBrowserCapabilities(\n base: BrowserCapabilities,\n override: PartialBrowserCapabilities,\n): BrowserCapabilities {\n return {\n executor: {\n ...base.executor,\n ...override.executor,\n executionControl: {\n ...base.executor.executionControl,\n ...override.executor?.executionControl,\n },\n },\n inspector: {\n ...base.inspector,\n ...override.inspector,\n },\n transport: {\n ...base.transport,\n ...override.transport,\n },\n instrumentation: {\n ...base.instrumentation,\n ...override.instrumentation,\n },\n events: {\n ...base.events,\n ...override.events,\n },\n };\n}\n\nexport function hasCapability(\n capabilities: BrowserCapabilities,\n path: BrowserCapabilityPath,\n): boolean {\n switch (path) {\n case \"executor.sessionLifecycle\":\n return capabilities.executor.sessionLifecycle;\n case \"executor.pageLifecycle\":\n return capabilities.executor.pageLifecycle;\n case \"executor.navigation\":\n return capabilities.executor.navigation;\n case \"executor.pointerInput\":\n return capabilities.executor.pointerInput;\n case \"executor.keyboardInput\":\n return capabilities.executor.keyboardInput;\n case \"executor.touchInput\":\n return capabilities.executor.touchInput;\n case \"executor.screenshots\":\n return capabilities.executor.screenshots;\n case \"executor.executionControl.pause\":\n return capabilities.executor.executionControl.pause;\n case \"executor.executionControl.resume\":\n return capabilities.executor.executionControl.resume;\n case \"executor.executionControl.freeze\":\n return capabilities.executor.executionControl.freeze;\n case \"inspector.pageEnumeration\":\n return capabilities.inspector.pageEnumeration;\n case \"inspector.frameEnumeration\":\n return capabilities.inspector.frameEnumeration;\n case \"inspector.html\":\n return capabilities.inspector.html;\n case \"inspector.domSnapshot\":\n return capabilities.inspector.domSnapshot;\n case \"inspector.visualStability\":\n return capabilities.inspector.visualStability;\n case \"inspector.text\":\n return capabilities.inspector.text;\n case \"inspector.attributes\":\n return capabilities.inspector.attributes;\n case \"inspector.hitTest\":\n return capabilities.inspector.hitTest;\n case \"inspector.viewportMetrics\":\n return capabilities.inspector.viewportMetrics;\n case \"inspector.network\":\n return capabilities.inspector.network;\n case \"inspector.networkBodies\":\n return capabilities.inspector.networkBodies;\n case \"inspector.cookies\":\n return capabilities.inspector.cookies;\n case \"inspector.localStorage\":\n return capabilities.inspector.localStorage;\n case \"inspector.sessionStorage\":\n return capabilities.inspector.sessionStorage;\n case \"inspector.indexedDb\":\n return capabilities.inspector.indexedDb;\n case \"transport.sessionHttp\":\n return capabilities.transport.sessionHttp;\n case \"instrumentation.initScripts\":\n return capabilities.instrumentation.initScripts;\n case \"instrumentation.routing\":\n return capabilities.instrumentation.routing;\n case \"events.pageLifecycle\":\n return capabilities.events.pageLifecycle;\n case \"events.dialog\":\n return capabilities.events.dialog;\n case \"events.download\":\n return capabilities.events.download;\n case \"events.chooser\":\n return capabilities.events.chooser;\n case \"events.worker\":\n return capabilities.events.worker;\n case \"events.console\":\n return capabilities.events.console;\n case \"events.pageError\":\n return capabilities.events.pageError;\n case \"events.websocket\":\n return capabilities.events.websocket;\n case \"events.eventStream\":\n return capabilities.events.eventStream;\n case \"events.executionState\":\n return capabilities.events.executionState;\n }\n}\n","import type { BrowserCapabilityPath } from \"./capabilities.js\";\nimport type { DocumentEpoch, DocumentRef, NodeRef, PageRef, SessionRef } from \"./identity.js\";\n\nexport type BrowserCoreErrorCode =\n | \"invalid-argument\"\n | \"invalid-ref\"\n | \"not-found\"\n | \"unsupported-capability\"\n | \"stale-node-ref\"\n | \"session-closed\"\n | \"page-closed\"\n | \"frame-detached\"\n | \"timeout\"\n | \"navigation-failed\"\n | \"operation-failed\";\n\nexport interface BrowserCoreErrorOptions {\n readonly cause?: unknown;\n readonly retriable?: boolean;\n readonly capability?: BrowserCapabilityPath;\n readonly details?: Record<string, unknown>;\n}\n\nexport class BrowserCoreError extends Error {\n readonly code: BrowserCoreErrorCode;\n readonly retriable: boolean;\n readonly capability: BrowserCapabilityPath | undefined;\n readonly details: Record<string, unknown> | undefined;\n\n constructor(code: BrowserCoreErrorCode, message: string, options: BrowserCoreErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = \"BrowserCoreError\";\n this.code = code;\n this.retriable = options.retriable ?? false;\n this.capability = options.capability;\n this.details = options.details;\n }\n}\n\nexport function isBrowserCoreError(value: unknown): value is BrowserCoreError {\n return value instanceof BrowserCoreError;\n}\n\nexport function createBrowserCoreError(\n code: BrowserCoreErrorCode,\n message: string,\n options: BrowserCoreErrorOptions = {},\n): BrowserCoreError {\n return new BrowserCoreError(code, message, options);\n}\n\nexport function unsupportedCapabilityError(capability: BrowserCapabilityPath): BrowserCoreError {\n return new BrowserCoreError(\n \"unsupported-capability\",\n `capability ${capability} is not supported by this backend`,\n {\n capability,\n details: { capability },\n },\n );\n}\n\nexport function staleNodeRefError(input: {\n readonly nodeRef: NodeRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n}): BrowserCoreError {\n return new BrowserCoreError(\n \"stale-node-ref\",\n `node ${input.nodeRef} is stale for ${input.documentRef} at epoch ${input.documentEpoch}`,\n {\n details: {\n nodeRef: input.nodeRef,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n },\n },\n );\n}\n\nexport function closedSessionError(sessionRef: SessionRef): BrowserCoreError {\n return new BrowserCoreError(\"session-closed\", `session ${sessionRef} is closed`, {\n details: { sessionRef },\n });\n}\n\nexport function closedPageError(pageRef: PageRef): BrowserCoreError {\n return new BrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n details: { pageRef },\n });\n}\n","import { createRect, rectToQuad, type Rect } from \"./geometry.js\";\nimport type { DocumentEpoch, DocumentRef, FrameRef, NodeRef, PageRef } from \"./identity.js\";\nimport type { DomSnapshot } from \"./snapshots.js\";\n\nexport const DOM_SNAPSHOT_COMPUTED_STYLE_NAMES = [\n \"display\",\n \"visibility\",\n \"opacity\",\n \"position\",\n \"cursor\",\n \"overflow-x\",\n \"overflow-y\",\n] as const;\n\nexport interface CdpRareStringData {\n readonly index: readonly number[];\n readonly value: readonly number[];\n}\n\nexport interface CdpRareIntegerData {\n readonly index: readonly number[];\n readonly value: readonly number[];\n}\n\nexport interface CdpShadowBoundaryInfo {\n readonly shadowRootType?: \"open\" | \"closed\" | \"user-agent\";\n readonly shadowHostBackendNodeId?: number;\n}\n\nexport interface CdpDomTreeNode {\n readonly backendNodeId?: number;\n readonly children?: readonly CdpDomTreeNode[];\n readonly shadowRoots?: readonly CdpDomTreeNode[];\n readonly contentDocument?: CdpDomTreeNode;\n readonly shadowRootType?: string;\n}\n\nexport interface CdpDomSnapshotDocument {\n readonly frameId: number;\n readonly nodes: {\n readonly parentIndex?: readonly number[];\n readonly nodeType?: readonly number[];\n readonly shadowRootType?: CdpRareStringData;\n readonly nodeName?: readonly number[];\n readonly nodeValue?: readonly number[];\n readonly backendNodeId?: readonly number[];\n readonly attributes?: ReadonlyArray<readonly number[]>;\n readonly textValue?: CdpRareStringData;\n readonly inputValue?: CdpRareStringData;\n readonly contentDocumentIndex?: CdpRareIntegerData;\n };\n readonly layout: {\n readonly nodeIndex: readonly number[];\n readonly styles?: ReadonlyArray<readonly number[]>;\n readonly bounds: ReadonlyArray<readonly number[]>;\n readonly text: readonly number[];\n readonly paintOrders?: readonly number[];\n };\n}\n\nexport interface CapturedCdpDomSnapshot {\n readonly capturedAt: number;\n readonly rawDocument: CdpDomSnapshotDocument;\n readonly shadowBoundariesByBackendNodeId: ReadonlyMap<number, CdpShadowBoundaryInfo>;\n readonly strings: readonly string[];\n}\n\ninterface SnapshotDocumentIdentity {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly parentDocumentRef: DocumentRef | undefined;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n}\n\ninterface DecodedNodeLayout {\n readonly rect?: Rect;\n readonly paintOrder?: number;\n readonly computedStyle?: {\n readonly display?: string;\n readonly visibility?: string;\n readonly opacity?: string;\n readonly position?: string;\n readonly cursor?: string;\n readonly overflowX?: string;\n readonly overflowY?: string;\n };\n}\n\nexport function parseCdpStringTable(strings: readonly string[], index: number | undefined): string {\n if (index === undefined || index < 0) {\n return \"\";\n }\n return strings[index] ?? \"\";\n}\n\nexport function rareCdpStringValue(\n strings: readonly string[],\n data: CdpRareStringData | undefined,\n index: number,\n): string | undefined {\n if (!data) {\n return undefined;\n }\n const matchIndex = data.index.findIndex((candidate) => candidate === index);\n if (matchIndex === -1) {\n return undefined;\n }\n return parseCdpStringTable(strings, data.value[matchIndex]);\n}\n\nexport function rareCdpIntegerValue(\n data: CdpRareIntegerData | undefined,\n index: number,\n): number | undefined {\n if (!data) {\n return undefined;\n }\n const matchIndex = data.index.findIndex((candidate) => candidate === index);\n if (matchIndex === -1) {\n return undefined;\n }\n return data.value[matchIndex];\n}\n\nexport function normalizeCdpShadowRootType(\n value: string | undefined,\n): \"open\" | \"closed\" | \"user-agent\" | undefined {\n switch (value) {\n case \"open\":\n case \"closed\":\n return value;\n case \"user-agent\":\n case \"user_agent\":\n return \"user-agent\";\n default:\n return undefined;\n }\n}\n\nexport function buildCdpShadowBoundaryIndex(\n root: CdpDomTreeNode,\n): ReadonlyMap<number, CdpShadowBoundaryInfo> {\n const byBackendNodeId = new Map<number, CdpShadowBoundaryInfo>();\n\n const visit = (node: CdpDomTreeNode, boundary: CdpShadowBoundaryInfo): void => {\n if (node.backendNodeId !== undefined) {\n byBackendNodeId.set(node.backendNodeId, boundary);\n }\n\n for (const child of node.children ?? []) {\n visit(child, boundary);\n }\n\n for (const shadowRoot of node.shadowRoots ?? []) {\n const normalizedShadowRootType = normalizeCdpShadowRootType(shadowRoot.shadowRootType);\n const shadowBoundary: CdpShadowBoundaryInfo = {\n ...(node.backendNodeId === undefined\n ? {}\n : { shadowHostBackendNodeId: node.backendNodeId }),\n ...(normalizedShadowRootType === undefined\n ? {}\n : { shadowRootType: normalizedShadowRootType }),\n };\n\n if (shadowRoot.backendNodeId !== undefined) {\n byBackendNodeId.set(shadowRoot.backendNodeId, shadowBoundary);\n }\n\n for (const child of shadowRoot.children ?? []) {\n visit(child, shadowBoundary);\n }\n }\n\n if (node.contentDocument) {\n visit(node.contentDocument, {});\n }\n };\n\n visit(root, {});\n return byBackendNodeId;\n}\n\nexport function buildDomSnapshotFromCdpCapture(\n document: SnapshotDocumentIdentity,\n captured: CapturedCdpDomSnapshot,\n nodeRefResolver: (backendNodeId: number) => NodeRef,\n contentDocRefResolver: (contentDocumentIndex: number) => DocumentRef | undefined,\n): DomSnapshot {\n const parentIndexes = captured.rawDocument.nodes.parentIndex ?? [];\n const childIndexes = new Map<number, number[]>();\n for (let index = 0; index < parentIndexes.length; index += 1) {\n const parentIndex = parentIndexes[index];\n if (parentIndex === undefined || parentIndex < 0) {\n continue;\n }\n const children = childIndexes.get(parentIndex) ?? [];\n children.push(index);\n childIndexes.set(parentIndex, children);\n }\n\n const layoutByNodeIndex = decodeLayoutByNodeIndex(captured.rawDocument, captured.strings);\n const aggregatedTextByNodeIndex = buildAggregatedTextIndex(\n captured.rawDocument,\n captured.shadowBoundariesByBackendNodeId,\n captured.strings,\n );\n const rootNodeIndex = findRootNodeIndex(parentIndexes);\n\n const nodes = [];\n const nodeCount = captured.rawDocument.nodes.nodeType?.length ?? 0;\n for (let index = 0; index < nodeCount; index += 1) {\n const backendNodeId = captured.rawDocument.nodes.backendNodeId?.[index];\n const nodeRef = backendNodeId === undefined ? undefined : nodeRefResolver(backendNodeId);\n const rawAttributes = captured.rawDocument.nodes.attributes?.[index] ?? [];\n const attributes: { name: string; value: string }[] = [];\n for (let pairIndex = 0; pairIndex < rawAttributes.length; pairIndex += 2) {\n const nameIndex = rawAttributes[pairIndex];\n const valueIndex = rawAttributes[pairIndex + 1];\n if (nameIndex === undefined || valueIndex === undefined) {\n continue;\n }\n attributes.push({\n name: parseCdpStringTable(captured.strings, nameIndex),\n value: parseCdpStringTable(captured.strings, valueIndex),\n });\n }\n\n const directShadowRootType = rareCdpStringValue(\n captured.strings,\n captured.rawDocument.nodes.shadowRootType,\n index,\n );\n const normalizedShadowRootType = normalizeCdpShadowRootType(directShadowRootType);\n const shadowBoundary =\n backendNodeId === undefined\n ? undefined\n : captured.shadowBoundariesByBackendNodeId.get(backendNodeId);\n const shadowHostNodeRef =\n shadowBoundary?.shadowHostBackendNodeId === undefined\n ? undefined\n : nodeRefResolver(shadowBoundary.shadowHostBackendNodeId);\n const contentDocumentIndex = rareCdpIntegerValue(\n captured.rawDocument.nodes.contentDocumentIndex,\n index,\n );\n const contentDocumentRef =\n contentDocumentIndex === undefined ? undefined : contentDocRefResolver(contentDocumentIndex);\n const layout = layoutByNodeIndex.get(index);\n const textContent = aggregatedTextByNodeIndex.get(index);\n const computedStyle = layout?.computedStyle ?? decodeInlineComputedStyle(attributes);\n\n nodes.push({\n snapshotNodeId: index + 1,\n ...(nodeRef === undefined ? {} : { nodeRef }),\n ...(parentIndexes[index] === undefined || parentIndexes[index]! < 0\n ? {}\n : { parentSnapshotNodeId: parentIndexes[index]! + 1 }),\n childSnapshotNodeIds: (childIndexes.get(index) ?? []).map((childIndex) => childIndex + 1),\n ...(normalizedShadowRootType === undefined\n ? {}\n : { shadowRootType: normalizedShadowRootType }),\n ...(shadowHostNodeRef === undefined ? {} : { shadowHostNodeRef }),\n ...(contentDocumentRef === undefined ? {} : { contentDocumentRef }),\n nodeType: captured.rawDocument.nodes.nodeType?.[index] ?? 0,\n nodeName: parseCdpStringTable(captured.strings, captured.rawDocument.nodes.nodeName?.[index]),\n nodeValue: parseCdpStringTable(\n captured.strings,\n captured.rawDocument.nodes.nodeValue?.[index],\n ),\n ...(textContent === undefined || textContent.length === 0 ? {} : { textContent }),\n ...(computedStyle === undefined ? {} : { computedStyle }),\n attributes,\n ...(layout?.rect === undefined\n ? {}\n : {\n layout: {\n rect: layout.rect,\n quad: rectToQuad(layout.rect),\n ...(layout.paintOrder === undefined ? {} : { paintOrder: layout.paintOrder }),\n },\n }),\n });\n }\n\n return {\n pageRef: document.pageRef,\n frameRef: document.frameRef,\n documentRef: document.documentRef,\n ...(document.parentDocumentRef === undefined\n ? {}\n : { parentDocumentRef: document.parentDocumentRef }),\n documentEpoch: document.documentEpoch,\n url: document.url,\n capturedAt: captured.capturedAt,\n rootSnapshotNodeId: rootNodeIndex + 1,\n shadowDomMode: \"preserved\",\n geometryCoordinateSpace: \"document-css\",\n nodes,\n };\n}\n\nfunction findRootNodeIndex(parentIndexes: readonly number[]): number {\n const explicitRootIndex = parentIndexes.findIndex(\n (parentIndex) => parentIndex === undefined || parentIndex < 0,\n );\n return explicitRootIndex >= 0 ? explicitRootIndex : 0;\n}\n\nfunction decodeLayoutByNodeIndex(\n document: CdpDomSnapshotDocument,\n strings: readonly string[],\n): ReadonlyMap<number, DecodedNodeLayout> {\n const byNodeIndex = new Map<number, DecodedNodeLayout>();\n for (let layoutIndex = 0; layoutIndex < document.layout.nodeIndex.length; layoutIndex += 1) {\n const nodeIndex = document.layout.nodeIndex[layoutIndex];\n if (nodeIndex === undefined) {\n continue;\n }\n\n const bounds = document.layout.bounds[layoutIndex];\n const styleIndexes = document.layout.styles?.[layoutIndex];\n byNodeIndex.set(nodeIndex, {\n ...(bounds === undefined\n ? {}\n : {\n rect: createRect(bounds[0] ?? 0, bounds[1] ?? 0, bounds[2] ?? 0, bounds[3] ?? 0),\n }),\n ...(document.layout.paintOrders?.[layoutIndex] === undefined\n ? {}\n : { paintOrder: document.layout.paintOrders[layoutIndex] }),\n ...(styleIndexes === undefined\n ? {}\n : { computedStyle: decodeComputedStyle(styleIndexes, strings) }),\n });\n }\n return byNodeIndex;\n}\n\nfunction decodeComputedStyle(\n styleIndexes: readonly number[],\n strings: readonly string[],\n): NonNullable<DecodedNodeLayout[\"computedStyle\"]> {\n const styleEntries = DOM_SNAPSHOT_COMPUTED_STYLE_NAMES.reduce<Record<string, string>>(\n (out, propertyName, propertyIndex) => {\n const value = parseCdpStringTable(strings, styleIndexes[propertyIndex]);\n if (value.length > 0) {\n out[propertyName] = value;\n }\n return out;\n },\n {},\n );\n\n return {\n ...(styleEntries.display === undefined ? {} : { display: styleEntries.display }),\n ...(styleEntries.visibility === undefined ? {} : { visibility: styleEntries.visibility }),\n ...(styleEntries.opacity === undefined ? {} : { opacity: styleEntries.opacity }),\n ...(styleEntries.position === undefined ? {} : { position: styleEntries.position }),\n ...(styleEntries.cursor === undefined ? {} : { cursor: styleEntries.cursor }),\n ...(styleEntries[\"overflow-x\"] === undefined ? {} : { overflowX: styleEntries[\"overflow-x\"] }),\n ...(styleEntries[\"overflow-y\"] === undefined ? {} : { overflowY: styleEntries[\"overflow-y\"] }),\n };\n}\n\nfunction decodeInlineComputedStyle(\n attributes: readonly {\n readonly name: string;\n readonly value: string;\n }[],\n): DecodedNodeLayout[\"computedStyle\"] | undefined {\n const styleAttribute = attributes.find((attribute) => attribute.name === \"style\")?.value;\n if (styleAttribute === undefined || styleAttribute.trim().length === 0) {\n return undefined;\n }\n\n const styleEntries = new Map<string, string>();\n for (const declaration of styleAttribute.split(\";\")) {\n const separatorIndex = declaration.indexOf(\":\");\n if (separatorIndex <= 0) {\n continue;\n }\n\n const propertyName = declaration.slice(0, separatorIndex).trim().toLowerCase();\n const propertyValue = declaration.slice(separatorIndex + 1).trim();\n if (propertyName.length === 0 || propertyValue.length === 0) {\n continue;\n }\n\n styleEntries.set(propertyName, propertyValue);\n }\n\n const display = styleEntries.get(\"display\");\n const visibility = styleEntries.get(\"visibility\");\n const opacity = styleEntries.get(\"opacity\");\n const position = styleEntries.get(\"position\");\n const cursor = styleEntries.get(\"cursor\");\n const overflow = styleEntries.get(\"overflow\");\n const overflowX = styleEntries.get(\"overflow-x\") ?? overflow;\n const overflowY = styleEntries.get(\"overflow-y\") ?? overflow;\n\n const computedStyle: NonNullable<DecodedNodeLayout[\"computedStyle\"]> = {\n ...(display === undefined ? {} : { display }),\n ...(visibility === undefined ? {} : { visibility }),\n ...(opacity === undefined ? {} : { opacity }),\n ...(position === undefined ? {} : { position }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(overflowX === undefined ? {} : { overflowX }),\n ...(overflowY === undefined ? {} : { overflowY }),\n };\n\n return Object.keys(computedStyle).length === 0 ? undefined : computedStyle;\n}\n\nfunction buildAggregatedTextIndex(\n document: CdpDomSnapshotDocument,\n shadowBoundariesByBackendNodeId: ReadonlyMap<number, CdpShadowBoundaryInfo>,\n strings: readonly string[],\n): ReadonlyMap<number, string> {\n const parentIndexes = document.nodes.parentIndex ?? [];\n const backendNodeIds = document.nodes.backendNodeId ?? [];\n const childIndexes = new Map<number, number[]>();\n for (let index = 0; index < parentIndexes.length; index += 1) {\n const parentIndex = parentIndexes[index];\n if (parentIndex === undefined || parentIndex < 0) {\n continue;\n }\n const children = childIndexes.get(parentIndex) ?? [];\n children.push(index);\n childIndexes.set(parentIndex, children);\n }\n\n const layoutTextByNodeIndex = new Map<number, string>();\n for (let layoutIndex = 0; layoutIndex < document.layout.nodeIndex.length; layoutIndex += 1) {\n const nodeIndex = document.layout.nodeIndex[layoutIndex];\n if (nodeIndex === undefined) {\n continue;\n }\n const text = parseCdpStringTable(strings, document.layout.text[layoutIndex]);\n if (text.length > 0) {\n layoutTextByNodeIndex.set(nodeIndex, text);\n }\n }\n\n const shadowHostBackendNodeIdByNodeIndex = new Map<number, number | null>();\n const resolveShadowHostBackendNodeId = (index: number): number | null => {\n const existing = shadowHostBackendNodeIdByNodeIndex.get(index);\n if (existing !== undefined) {\n return existing;\n }\n\n const backendNodeId = backendNodeIds[index];\n const directShadowHostBackendNodeId =\n backendNodeId === undefined\n ? undefined\n : shadowBoundariesByBackendNodeId.get(backendNodeId)?.shadowHostBackendNodeId;\n if (directShadowHostBackendNodeId !== undefined) {\n shadowHostBackendNodeIdByNodeIndex.set(index, directShadowHostBackendNodeId);\n return directShadowHostBackendNodeId;\n }\n\n const parentIndex = parentIndexes[index];\n if (parentIndex === undefined || parentIndex < 0) {\n shadowHostBackendNodeIdByNodeIndex.set(index, null);\n return null;\n }\n\n const inheritedShadowHostBackendNodeId = resolveShadowHostBackendNodeId(parentIndex);\n shadowHostBackendNodeIdByNodeIndex.set(index, inheritedShadowHostBackendNodeId);\n return inheritedShadowHostBackendNodeId;\n };\n\n const memo = new Map<number, string>();\n const visit = (index: number): string => {\n const existing = memo.get(index);\n if (existing !== undefined) {\n return existing;\n }\n\n const nodeType = document.nodes.nodeType?.[index] ?? 0;\n const ownText = readOwnNodeText(document, strings, layoutTextByNodeIndex, index);\n if (nodeType === 3 || nodeType === 4) {\n memo.set(index, ownText);\n return ownText;\n }\n\n if (nodeType === 8 || nodeType === 10) {\n memo.set(index, \"\");\n return \"\";\n }\n\n let text = ownText;\n const currentShadowHostBackendNodeId = resolveShadowHostBackendNodeId(index);\n for (const childIndex of childIndexes.get(index) ?? []) {\n if (resolveShadowHostBackendNodeId(childIndex) !== currentShadowHostBackendNodeId) {\n continue;\n }\n text += visit(childIndex);\n }\n memo.set(index, text);\n return text;\n };\n\n const aggregated = new Map<number, string>();\n const nodeCount = document.nodes.nodeType?.length ?? 0;\n for (let index = 0; index < nodeCount; index += 1) {\n const text = visit(index);\n if (text.length > 0) {\n aggregated.set(index, text);\n }\n }\n return aggregated;\n}\n\nfunction readOwnNodeText(\n document: CdpDomSnapshotDocument,\n strings: readonly string[],\n layoutTextByNodeIndex: ReadonlyMap<number, string>,\n index: number,\n): string {\n return (\n rareCdpStringValue(strings, document.nodes.textValue, index) ||\n rareCdpStringValue(strings, document.nodes.inputValue, index) ||\n (document.nodes.nodeType?.[index] === 3 || document.nodes.nodeType?.[index] === 4\n ? parseCdpStringTable(strings, document.nodes.nodeValue?.[index]) ||\n layoutTextByNodeIndex.get(index) ||\n \"\"\n : \"\")\n );\n}\n","import type { VisualStabilityScope } from \"./snapshots.js\";\n\nexport const DEFAULT_VISUAL_STABILITY_TIMEOUT_MS = 30_000;\nexport const DEFAULT_VISUAL_STABILITY_SETTLE_MS = 750;\n\nconst FRAME_EVALUATE_GRACE_MS = 200;\nconst TRANSIENT_CONTEXT_RETRY_DELAY_MS = 25;\nconst STEALTH_WORLD_NAME = \"__opensteer_wait__\";\n\ninterface CdpSessionLike {\n send(method: string, params?: object): Promise<unknown>;\n}\n\ninterface VisualStabilityOptions {\n readonly timeoutMs?: number;\n readonly settleMs?: number;\n readonly scope?: VisualStabilityScope;\n}\n\ninterface CdpFrameTreeNode {\n readonly frame?: {\n readonly id?: string;\n };\n readonly childFrames?: readonly CdpFrameTreeNode[];\n}\n\ninterface CdpGetFrameTreeResult {\n readonly frameTree: CdpFrameTreeNode;\n}\n\ninterface CdpCreateIsolatedWorldResult {\n readonly executionContextId: number;\n}\n\ninterface CdpGetFrameOwnerResult {\n readonly backendNodeId?: number;\n}\n\ninterface CdpExceptionDetails {\n readonly text?: string;\n readonly exception?: {\n readonly description?: string;\n };\n}\n\ninterface CdpRuntimeObject {\n readonly objectId?: string;\n readonly value?: unknown;\n}\n\ninterface CdpResolveNodeResult {\n readonly object?: CdpRuntimeObject;\n}\n\ninterface CdpRuntimeEvaluateResult {\n readonly result: CdpRuntimeObject;\n readonly exceptionDetails?: CdpExceptionDetails;\n}\n\ninterface CdpRuntimeCallFunctionResult {\n readonly result: CdpRuntimeObject;\n readonly exceptionDetails?: CdpExceptionDetails;\n}\n\ninterface FrameRecord {\n readonly frameId: string;\n readonly parentFrameId: string | null;\n}\n\ntype FrameStabilityResult =\n | { readonly kind: \"resolved\" }\n | { readonly kind: \"rejected\"; readonly error: unknown }\n | { readonly kind: \"timeout\" };\n\nconst FRAME_OWNER_VISIBILITY_FUNCTION = `function() {\n if (!(this instanceof HTMLElement)) return false;\n\n var rect = this.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n if (\n rect.bottom <= 0 ||\n rect.right <= 0 ||\n rect.top >= window.innerHeight ||\n rect.left >= window.innerWidth\n ) {\n return false;\n }\n\n var style = window.getComputedStyle(this);\n if (\n style.display === 'none' ||\n style.visibility === 'hidden' ||\n Number(style.opacity) === 0\n ) {\n return false;\n }\n\n return true;\n}`;\n\nexport async function waitForCdpVisualStability(\n cdp: CdpSessionLike,\n options: VisualStabilityOptions = {},\n): Promise<void> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_VISUAL_STABILITY_TIMEOUT_MS;\n const settleMs = options.settleMs ?? DEFAULT_VISUAL_STABILITY_SETTLE_MS;\n const scope = options.scope ?? \"main-frame\";\n\n if (timeoutMs <= 0) {\n return;\n }\n\n const runtime = new StealthCdpRuntime(cdp);\n if (scope === \"visible-frames\") {\n await runtime.waitForVisibleFramesVisualStability(timeoutMs, settleMs);\n return;\n }\n\n await runtime.waitForMainFrameVisualStability(timeoutMs, settleMs);\n}\n\nfunction buildStabilityScript(timeout: number, settleMs: number): string {\n return `new Promise(function(resolve) {\n var deadline = Date.now() + ${timeout};\n var resolved = false;\n var timer = null;\n var observers = [];\n var observedShadowRoots = [];\n var fonts = document.fonts;\n var fontsReady = !fonts || fonts.status === 'loaded';\n var lastRelevantMutationAt = Date.now();\n\n function clearObservers() {\n for (var i = 0; i < observers.length; i++) {\n observers[i].disconnect();\n }\n observers = [];\n }\n\n function done() {\n if (resolved) return;\n resolved = true;\n if (timer) clearTimeout(timer);\n if (safetyTimer) clearTimeout(safetyTimer);\n clearObservers();\n resolve();\n }\n\n function isElementVisiblyIntersectingViewport(element) {\n if (!(element instanceof Element)) return false;\n\n var rect = element.getBoundingClientRect();\n var inViewport =\n rect.width > 0 &&\n rect.height > 0 &&\n rect.bottom > 0 &&\n rect.right > 0 &&\n rect.top < window.innerHeight &&\n rect.left < window.innerWidth;\n\n if (!inViewport) return false;\n\n var style = window.getComputedStyle(element);\n if (style.visibility === 'hidden' || style.display === 'none') {\n return false;\n }\n if (Number(style.opacity) === 0) {\n return false;\n }\n\n return true;\n }\n\n function resolveRelevantElement(node) {\n if (!node) return null;\n if (node instanceof Element) return node;\n if (typeof ShadowRoot !== 'undefined' && node instanceof ShadowRoot) {\n return node.host instanceof Element ? node.host : null;\n }\n var parentElement = node.parentElement;\n return parentElement instanceof Element ? parentElement : null;\n }\n\n function isNodeVisiblyRelevant(node) {\n var element = resolveRelevantElement(node);\n if (!element) return false;\n return isElementVisiblyIntersectingViewport(element);\n }\n\n function hasRelevantMutation(records) {\n for (var i = 0; i < records.length; i++) {\n var record = records[i];\n if (isNodeVisiblyRelevant(record.target)) return true;\n\n var addedNodes = record.addedNodes;\n for (var j = 0; j < addedNodes.length; j++) {\n if (isNodeVisiblyRelevant(addedNodes[j])) return true;\n }\n\n var removedNodes = record.removedNodes;\n for (var k = 0; k < removedNodes.length; k++) {\n if (isNodeVisiblyRelevant(removedNodes[k])) return true;\n }\n }\n\n return false;\n }\n\n function scheduleCheck() {\n if (resolved) return;\n if (timer) clearTimeout(timer);\n\n var remaining = deadline - Date.now();\n if (remaining <= 0) {\n done();\n return;\n }\n\n var checkDelay = Math.min(120, Math.max(16, ${settleMs}));\n timer = setTimeout(checkNow, checkDelay);\n }\n\n function observeMutations(target) {\n if (!target) return;\n var observer = new MutationObserver(function(records) {\n if (!hasRelevantMutation(records)) return;\n lastRelevantMutationAt = Date.now();\n scheduleCheck();\n });\n observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true\n });\n observers.push(observer);\n }\n\n function hasObservedShadowRoot(root) {\n for (var i = 0; i < observedShadowRoots.length; i++) {\n if (observedShadowRoots[i] === root) return true;\n }\n return false;\n }\n\n function observeOpenShadowRoots() {\n if (!document.documentElement || !document.createTreeWalker) return;\n var walker = document.createTreeWalker(\n document.documentElement,\n NodeFilter.SHOW_ELEMENT\n );\n while (walker.nextNode()) {\n var current = walker.currentNode;\n if (!(current instanceof Element)) continue;\n var shadowRoot = current.shadowRoot;\n if (!shadowRoot || shadowRoot.mode !== 'open') continue;\n if (hasObservedShadowRoot(shadowRoot)) continue;\n observedShadowRoots.push(shadowRoot);\n observeMutations(shadowRoot);\n }\n }\n\n function checkViewportImages(root) {\n var images = root.querySelectorAll('img');\n for (var i = 0; i < images.length; i++) {\n var img = images[i];\n if (!isElementVisiblyIntersectingViewport(img)) continue;\n if (!img.complete) return false;\n }\n return true;\n }\n\n function getAnimationTarget(effect) {\n if (!effect) return null;\n var target = effect.target;\n if (target instanceof Element) return target;\n\n if (target && target.element instanceof Element) {\n return target.element;\n }\n\n return null;\n }\n\n function hasRunningVisibleFiniteAnimations() {\n if (typeof document.getAnimations !== 'function') return false;\n var animations = document.getAnimations();\n\n for (var i = 0; i < animations.length; i++) {\n var animation = animations[i];\n if (!animation || animation.playState !== 'running') continue;\n var effect = animation.effect;\n if (!effect || typeof effect.getComputedTiming !== 'function') continue;\n var timing = effect.getComputedTiming();\n var endTime = timing && typeof timing.endTime === 'number'\n ? timing.endTime\n : Number.POSITIVE_INFINITY;\n if (Number.isFinite(endTime) && endTime > 0) {\n var target = getAnimationTarget(effect);\n if (!target) continue;\n if (!isElementVisiblyIntersectingViewport(target)) continue;\n return true;\n }\n }\n\n return false;\n }\n\n function isVisuallyReady() {\n if (!fontsReady) return false;\n if (!checkViewportImages(document)) return false;\n if (hasRunningVisibleFiniteAnimations()) return false;\n return true;\n }\n\n function checkNow() {\n if (Date.now() >= deadline) {\n done();\n return;\n }\n\n observeOpenShadowRoots();\n\n if (!isVisuallyReady()) {\n scheduleCheck();\n return;\n }\n\n if (Date.now() - lastRelevantMutationAt >= ${settleMs}) {\n done();\n return;\n }\n\n scheduleCheck();\n }\n\n observeMutations(document.documentElement);\n observeOpenShadowRoots();\n\n if (fonts && fonts.ready && typeof fonts.ready.then === 'function') {\n fonts.ready.then(function() {\n fontsReady = true;\n scheduleCheck();\n }, function() {\n fontsReady = true;\n scheduleCheck();\n });\n }\n\n var safetyTimer = setTimeout(done, ${timeout});\n\n scheduleCheck();\n})`;\n}\n\nclass StealthCdpRuntime {\n private readonly contextsByFrame = new Map<string, number>();\n\n constructor(private readonly session: CdpSessionLike) {}\n\n async waitForMainFrameVisualStability(timeoutMs: number, settleMs: number): Promise<void> {\n const frameRecords = await this.getFrameRecords();\n const mainFrame = frameRecords[0];\n if (!mainFrame) {\n return;\n }\n\n await this.waitForFrameVisualStability(mainFrame.frameId, timeoutMs, settleMs, true);\n }\n\n async waitForVisibleFramesVisualStability(timeoutMs: number, settleMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n\n while (true) {\n const remaining = Math.max(0, deadline - Date.now());\n if (remaining === 0) {\n return;\n }\n\n const frameIds = await this.collectVisibleFrameIds();\n if (frameIds.length === 0) {\n return;\n }\n\n await Promise.all(\n frameIds.map(async (frameId) => {\n try {\n await this.waitForFrameVisualStability(frameId, remaining, settleMs, false);\n } catch (error) {\n if (isIgnorableFrameError(error)) {\n return;\n }\n throw error;\n }\n }),\n );\n\n const currentFrameIds = await this.collectVisibleFrameIds();\n if (sameFrameIds(frameIds, currentFrameIds)) {\n return;\n }\n }\n }\n\n private async getFrameRecords(): Promise<FrameRecord[]> {\n const treeResult = (await this.session.send(\"Page.getFrameTree\")) as CdpGetFrameTreeResult;\n const records: FrameRecord[] = [];\n walkFrameTree(treeResult.frameTree, null, records);\n return records;\n }\n\n private async collectVisibleFrameIds(): Promise<string[]> {\n const frameRecords = await this.getFrameRecords();\n if (frameRecords.length === 0) {\n return [];\n }\n\n const visibleFrameIds: string[] = [];\n for (const frameRecord of frameRecords) {\n if (!frameRecord.parentFrameId) {\n visibleFrameIds.push(frameRecord.frameId);\n continue;\n }\n\n try {\n const parentContextId = await this.ensureFrameContextId(frameRecord.parentFrameId);\n if (await this.isFrameOwnerVisible(frameRecord.frameId, parentContextId)) {\n visibleFrameIds.push(frameRecord.frameId);\n }\n } catch (error) {\n if (isIgnorableFrameError(error)) {\n continue;\n }\n throw error;\n }\n }\n\n return visibleFrameIds;\n }\n\n private async ensureFrameContextId(frameId: string): Promise<number> {\n const existing = this.contextsByFrame.get(frameId);\n if (existing !== undefined) {\n return existing;\n }\n\n const world = (await this.session.send(\"Page.createIsolatedWorld\", {\n frameId,\n worldName: STEALTH_WORLD_NAME,\n })) as CdpCreateIsolatedWorldResult;\n this.contextsByFrame.set(frameId, world.executionContextId);\n return world.executionContextId;\n }\n\n private async waitForFrameVisualStability(\n frameId: string,\n timeoutMs: number,\n settleMs: number,\n retryTransientContextErrors: boolean,\n ): Promise<void> {\n if (timeoutMs <= 0) {\n return;\n }\n\n const script = buildStabilityScript(timeoutMs, settleMs);\n\n if (!retryTransientContextErrors) {\n let contextId = await this.ensureFrameContextId(frameId);\n try {\n await this.evaluateWithGuard(contextId, script, timeoutMs);\n } catch (error) {\n if (!isMissingExecutionContextError(error)) {\n throw error;\n }\n this.contextsByFrame.delete(frameId);\n contextId = await this.ensureFrameContextId(frameId);\n await this.evaluateWithGuard(contextId, script, timeoutMs);\n }\n return;\n }\n\n const deadline = Date.now() + timeoutMs;\n while (true) {\n const remaining = Math.max(0, deadline - Date.now());\n if (remaining === 0) {\n return;\n }\n\n const contextId = await this.ensureFrameContextId(frameId);\n try {\n await this.evaluateWithGuard(contextId, script, remaining);\n return;\n } catch (error) {\n if (!isTransientExecutionContextError(error)) {\n throw error;\n }\n this.contextsByFrame.delete(frameId);\n await sleep(Math.min(TRANSIENT_CONTEXT_RETRY_DELAY_MS, Math.max(0, deadline - Date.now())));\n }\n }\n }\n\n private async evaluateWithGuard(\n contextId: number,\n script: string,\n timeoutMs: number,\n ): Promise<void> {\n const guardedPromise = this.evaluateScript(contextId, script)\n .then<FrameStabilityResult>(() => ({ kind: \"resolved\" }))\n .catch<FrameStabilityResult>((error) => ({ kind: \"rejected\", error }));\n const timeoutPromise = new Promise<FrameStabilityResult>((resolve) => {\n setTimeout(() => resolve({ kind: \"timeout\" }), timeoutMs + FRAME_EVALUATE_GRACE_MS);\n });\n const outcome = await Promise.race([guardedPromise, timeoutPromise]);\n if (outcome.kind === \"rejected\") {\n throw outcome.error;\n }\n }\n\n private async evaluateScript(contextId: number, script: string): Promise<void> {\n const evaluated = (await this.session.send(\"Runtime.evaluate\", {\n contextId,\n expression: script,\n returnByValue: true,\n awaitPromise: true,\n })) as CdpRuntimeEvaluateResult;\n if (evaluated.exceptionDetails) {\n throw new Error(formatCdpException(evaluated.exceptionDetails));\n }\n }\n\n private async isFrameOwnerVisible(frameId: string, executionContextId: number): Promise<boolean> {\n const frameOwner = (await this.session.send(\"DOM.getFrameOwner\", {\n frameId,\n })) as CdpGetFrameOwnerResult;\n if (frameOwner.backendNodeId === undefined) {\n return false;\n }\n\n const resolved = (await this.session.send(\"DOM.resolveNode\", {\n backendNodeId: frameOwner.backendNodeId,\n executionContextId,\n })) as CdpResolveNodeResult;\n const objectId = resolved.object?.objectId;\n if (!objectId) {\n return false;\n }\n\n try {\n const callResult = (await this.session.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: FRAME_OWNER_VISIBILITY_FUNCTION,\n returnByValue: true,\n })) as CdpRuntimeCallFunctionResult;\n if (callResult.exceptionDetails) {\n throw new Error(formatCdpException(callResult.exceptionDetails));\n }\n return callResult.result.value === true;\n } finally {\n await this.releaseObject(objectId);\n }\n }\n\n private async releaseObject(objectId: string): Promise<void> {\n await this.session\n .send(\"Runtime.releaseObject\", {\n objectId,\n })\n .catch(() => undefined);\n }\n}\n\nfunction walkFrameTree(\n node: CdpFrameTreeNode,\n parentFrameId: string | null,\n records: FrameRecord[],\n): void {\n const frameId = node.frame?.id;\n if (!frameId) {\n return;\n }\n\n records.push({\n frameId,\n parentFrameId,\n });\n\n for (const child of node.childFrames ?? []) {\n walkFrameTree(child, frameId, records);\n }\n}\n\nfunction sameFrameIds(before: readonly string[], after: readonly string[]): boolean {\n if (before.length !== after.length) {\n return false;\n }\n return before.every((frameId) => after.includes(frameId));\n}\n\nfunction formatCdpException(details: CdpExceptionDetails): string {\n return details.exception?.description || details.text || \"CDP runtime evaluation failed.\";\n}\n\nfunction isIgnorableFrameError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes(\"Frame with the given id was not found\") ||\n message.includes(\"No frame for given id found\") ||\n isTransientExecutionContextError(error)\n );\n}\n\nfunction isTransientExecutionContextError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes(\"Execution context was destroyed\") ||\n message.includes(\"Cannot find context with specified id\") ||\n message.includes(\"Cannot find execution context\")\n );\n}\n\nfunction isMissingExecutionContextError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes(\"Cannot find context with specified id\") ||\n message.includes(\"Cannot find execution context\")\n );\n}\n\nfunction sleep(ms: number): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","export const DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS = 400;\nexport const DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS = 100;\n\nexport interface PostLoadTrackerState {\n readonly installedAt: number;\n readonly lastMutationAt: number;\n readonly lastNetworkActivityAt: number;\n readonly lastTrackedNetworkActivityAt: number;\n readonly now: number;\n readonly pendingFetches: number;\n readonly pendingTimeouts: number;\n readonly pendingXhrs: number;\n readonly trackedPendingFetches: number;\n readonly trackedPendingXhrs: number;\n readonly collecting: boolean;\n readonly readyState: string;\n}\n\nexport interface PostLoadTrackerSnapshot {\n readonly lastTrackedNetworkActivityAt: number;\n readonly trackedPendingFetches: number;\n readonly trackedPendingXhrs: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readNonNegativeNumber(value: unknown): number {\n const parsed = readFiniteNumber(value);\n return parsed === undefined || parsed < 0 ? 0 : parsed;\n}\n\nexport function normalizePostLoadTrackerState(value: unknown): PostLoadTrackerState | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const installedAt = readFiniteNumber(value.installedAt);\n const lastMutationAt = readFiniteNumber(value.lastMutationAt);\n const lastNetworkActivityAt = readFiniteNumber(value.lastNetworkActivityAt);\n const lastTrackedNetworkActivityAt = readFiniteNumber(value.lastTrackedNetworkActivityAt);\n const now = readFiniteNumber(value.now);\n const readyState = typeof value.readyState === \"string\" ? value.readyState : undefined;\n if (\n installedAt === undefined ||\n lastMutationAt === undefined ||\n lastNetworkActivityAt === undefined ||\n lastTrackedNetworkActivityAt === undefined ||\n now === undefined ||\n readyState === undefined\n ) {\n return undefined;\n }\n\n return {\n installedAt,\n lastMutationAt,\n lastNetworkActivityAt,\n lastTrackedNetworkActivityAt,\n now,\n pendingFetches: readNonNegativeNumber(value.pendingFetches),\n pendingTimeouts: readNonNegativeNumber(value.pendingTimeouts),\n pendingXhrs: readNonNegativeNumber(value.pendingXhrs),\n trackedPendingFetches: readNonNegativeNumber(value.trackedPendingFetches),\n trackedPendingXhrs: readNonNegativeNumber(value.trackedPendingXhrs),\n collecting: value.collecting === true,\n readyState,\n };\n}\n\nexport function buildPostLoadTrackerInstallScript(): string {\n return `(() => {\n const globalObject = globalThis;\n if (globalObject.__opensteerActionBoundaryTrackerInstalled) {\n return true;\n }\n\n const tracker = {\n installedAt: performance.now(),\n lastMutationAt: performance.now(),\n lastNetworkActivityAt: performance.now(),\n lastTrackedNetworkActivityAt: performance.now(),\n pendingFetches: 0,\n pendingTimeouts: 0,\n pendingXhrs: 0,\n trackedPendingFetches: 0,\n trackedPendingXhrs: 0,\n collecting: true,\n readyState: document.readyState,\n };\n globalObject.__opensteerActionBoundaryTrackerInstalled = true;\n globalObject.__opensteerActionBoundaryTracker = tracker;\n\n const markMutation = () => {\n tracker.lastMutationAt = performance.now();\n tracker.readyState = document.readyState;\n };\n const markNetwork = () => {\n tracker.lastNetworkActivityAt = performance.now();\n tracker.readyState = document.readyState;\n };\n const markTrackedNetwork = () => {\n tracker.lastTrackedNetworkActivityAt = performance.now();\n markNetwork();\n };\n const resetTracking = () => {\n const now = performance.now();\n tracker.lastTrackedNetworkActivityAt = now;\n tracker.trackedPendingFetches = 0;\n tracker.trackedPendingXhrs = 0;\n tracker.collecting = true;\n tracker.readyState = document.readyState;\n };\n\n const startObserver = () => {\n const target = document.documentElement ?? document;\n if (!(target instanceof Node)) {\n return;\n }\n const observer = new MutationObserver(markMutation);\n observer.observe(target, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n });\n markMutation();\n };\n\n if (document.documentElement) {\n startObserver();\n } else {\n document.addEventListener(\"DOMContentLoaded\", startObserver, { once: true });\n }\n\n document.addEventListener(\"readystatechange\", markMutation);\n addEventListener(\"load\", markMutation, { once: true });\n\n if (typeof globalObject.fetch === \"function\") {\n const nativeFetch = globalObject.fetch.bind(globalObject);\n globalObject.fetch = (...args) => {\n const tracked = tracker.collecting === true;\n tracker.pendingFetches += 1;\n if (tracked) {\n tracker.trackedPendingFetches += 1;\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n return nativeFetch(...args)\n .finally(() => {\n tracker.pendingFetches = Math.max(0, tracker.pendingFetches - 1);\n if (tracked) {\n tracker.trackedPendingFetches = Math.max(0, tracker.trackedPendingFetches - 1);\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n });\n };\n }\n\n if (typeof globalObject.XMLHttpRequest === \"function\") {\n const NativeXMLHttpRequest = globalObject.XMLHttpRequest;\n const nativeSend = NativeXMLHttpRequest.prototype.send;\n NativeXMLHttpRequest.prototype.send = function(...args) {\n const tracked = tracker.collecting === true;\n tracker.pendingXhrs += 1;\n if (tracked) {\n tracker.trackedPendingXhrs += 1;\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n const finalize = () => {\n this.removeEventListener(\"loadend\", finalize);\n tracker.pendingXhrs = Math.max(0, tracker.pendingXhrs - 1);\n if (tracked) {\n tracker.trackedPendingXhrs = Math.max(0, tracker.trackedPendingXhrs - 1);\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n };\n this.addEventListener(\"loadend\", finalize, { once: true });\n return nativeSend.apply(this, args);\n };\n }\n\n tracker.beginObservation = () => {\n resetTracking();\n return true;\n };\n tracker.freezeObservation = () => {\n tracker.collecting = false;\n tracker.readyState = document.readyState;\n return true;\n };\n\n return true;\n })()`;\n}\n\nexport function buildPostLoadTrackerBeginExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker || typeof tracker.beginObservation !== \"function\") {\n return false;\n }\n return tracker.beginObservation();\n })()`;\n}\n\nexport function buildPostLoadTrackerFreezeExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker || typeof tracker.freezeObservation !== \"function\") {\n return false;\n }\n return tracker.freezeObservation();\n })()`;\n}\n\nexport function buildPostLoadTrackerReadExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker) {\n return null;\n }\n\n return {\n installedAt: Number(tracker.installedAt ?? 0),\n lastMutationAt: Number(tracker.lastMutationAt ?? 0),\n lastNetworkActivityAt: Number(tracker.lastNetworkActivityAt ?? 0),\n lastTrackedNetworkActivityAt: Number(tracker.lastTrackedNetworkActivityAt ?? 0),\n now: Number(performance.now()),\n pendingFetches: Number(tracker.pendingFetches ?? 0),\n pendingTimeouts: Number(tracker.pendingTimeouts ?? 0),\n pendingXhrs: Number(tracker.pendingXhrs ?? 0),\n trackedPendingFetches: Number(tracker.trackedPendingFetches ?? 0),\n trackedPendingXhrs: Number(tracker.trackedPendingXhrs ?? 0),\n collecting: tracker.collecting === true,\n readyState: String(document.readyState),\n };\n })()`;\n}\n\nexport function capturePostLoadTrackerSnapshot(\n tracker: PostLoadTrackerState,\n): PostLoadTrackerSnapshot {\n return {\n lastTrackedNetworkActivityAt: tracker.lastTrackedNetworkActivityAt,\n trackedPendingFetches: tracker.trackedPendingFetches,\n trackedPendingXhrs: tracker.trackedPendingXhrs,\n };\n}\n\nexport function postLoadTrackerHasTrackedNetworkActivitySince(\n snapshot: PostLoadTrackerSnapshot,\n tracker: PostLoadTrackerState | undefined,\n): boolean {\n if (!tracker) {\n return false;\n }\n\n return (\n tracker.trackedPendingFetches > snapshot.trackedPendingFetches ||\n tracker.trackedPendingXhrs > snapshot.trackedPendingXhrs ||\n tracker.lastTrackedNetworkActivityAt > snapshot.lastTrackedNetworkActivityAt\n );\n}\n\nexport function postLoadTrackerIsSettled(\n tracker: PostLoadTrackerState | undefined,\n quietWindowMs = DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n): boolean {\n if (!tracker) {\n return false;\n }\n\n if (tracker.readyState !== \"complete\") {\n return false;\n }\n\n if (tracker.trackedPendingFetches > 0 || tracker.trackedPendingXhrs > 0) {\n return false;\n }\n\n const lastActivityAt = Math.max(\n tracker.installedAt,\n tracker.lastMutationAt,\n tracker.lastTrackedNetworkActivityAt,\n );\n return tracker.now - lastActivityAt >= quietWindowMs;\n}\n","import type { DocumentRef, PageRef } from \"./identity.js\";\nimport {\n DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS,\n postLoadTrackerHasTrackedNetworkActivitySince,\n type PostLoadTrackerSnapshot,\n type PostLoadTrackerState,\n} from \"./post-load-tracker.js\";\n\nexport const CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS = 30_000;\nexport const CROSS_DOCUMENT_DETECTION_WINDOW_MS = 500;\n\nexport interface ActionBoundarySnapshot {\n readonly pageRef: PageRef;\n readonly documentRef: DocumentRef;\n readonly url?: string;\n readonly tracker?: PostLoadTrackerSnapshot;\n}\n\nexport type ActionBoundarySettleTrigger = \"dom-action\" | \"navigation\";\nexport type ActionBoundaryTimedOutPhase = \"bootstrap\";\n\nexport interface ActionBoundaryOutcome {\n readonly trigger: ActionBoundarySettleTrigger;\n readonly crossDocument: boolean;\n readonly bootstrapSettled: boolean;\n readonly timedOutPhase?: ActionBoundaryTimedOutPhase;\n}\n\nexport interface WaitForActionBoundaryInput {\n readonly timeoutMs: number;\n readonly signal?: AbortSignal;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly pollIntervalMs?: number;\n getCurrentMainFrameDocumentRef(): DocumentRef | undefined;\n getCurrentPageUrl?(): string | undefined;\n isCurrentMainFrameBootstrapSettled?(): boolean;\n readTrackerState(): Promise<PostLoadTrackerState | undefined>;\n throwBackgroundError(): void;\n isPageClosed(): boolean;\n}\n\nexport async function waitForActionBoundary(\n input: WaitForActionBoundaryInput,\n): Promise<ActionBoundaryOutcome> {\n if (input.timeoutMs <= 0) {\n return {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n }\n\n const deadline = Date.now() + input.timeoutMs;\n const crossDocumentDetectionDeadline =\n input.snapshot === undefined\n ? undefined\n : Math.min(deadline, Date.now() + CROSS_DOCUMENT_DETECTION_WINDOW_MS);\n const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS;\n let trigger: ActionBoundarySettleTrigger = \"dom-action\";\n let crossDocument = false;\n let sameDocumentAsyncActivity = false;\n\n while (Date.now() < deadline) {\n input.throwBackgroundError();\n if (input.isPageClosed()) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n if (input.signal?.aborted) {\n if (isTimeoutAbort(input.signal.reason) && Date.now() >= deadline) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n }\n throw abortError(input.signal);\n }\n\n const currentDocumentRef = input.getCurrentMainFrameDocumentRef();\n const currentPageUrl = input.getCurrentPageUrl?.();\n if (\n input.snapshot !== undefined &&\n currentDocumentRef !== undefined &&\n currentDocumentRef !== input.snapshot.documentRef\n ) {\n trigger = \"navigation\";\n crossDocument = true;\n }\n if (\n !crossDocument &&\n !sameDocumentAsyncActivity &&\n input.snapshot?.tracker !== undefined &&\n postLoadTrackerHasTrackedNetworkActivitySince(\n input.snapshot.tracker,\n await input.readTrackerState(),\n )\n ) {\n trigger = \"navigation\";\n sameDocumentAsyncActivity = true;\n }\n if (\n !crossDocument &&\n input.snapshot?.url !== undefined &&\n currentPageUrl !== undefined &&\n currentPageUrl !== input.snapshot.url &&\n input.isCurrentMainFrameBootstrapSettled !== undefined &&\n !input.isCurrentMainFrameBootstrapSettled()\n ) {\n trigger = \"navigation\";\n crossDocument = true;\n }\n\n if (\n !crossDocument &&\n crossDocumentDetectionDeadline !== undefined &&\n Date.now() >= crossDocumentDetectionDeadline\n ) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n\n if (sameDocumentAsyncActivity) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n\n if (\n crossDocument &&\n input.isCurrentMainFrameBootstrapSettled !== undefined &&\n !input.isCurrentMainFrameBootstrapSettled()\n ) {\n await delay(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())));\n continue;\n }\n\n if (crossDocument) {\n return {\n trigger,\n crossDocument,\n bootstrapSettled: true,\n };\n }\n\n await delay(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())));\n }\n\n return {\n trigger,\n crossDocument,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n}\n\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nasync function delay(ms: number): Promise<void> {\n if (ms <= 0) {\n return;\n }\n await new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction isTimeoutAbort(reason: unknown): reason is { readonly code: string } {\n return (\n typeof reason === \"object\" && reason !== null && \"code\" in reason && reason.code === \"timeout\"\n );\n}\n","import type {\n ActionBoundaryOutcome,\n ActionBoundarySettleTrigger,\n ActionBoundarySnapshot,\n BrowserCoreEngine,\n PageRef,\n ScreenshotArtifact as BrowserCoreScreenshotArtifact,\n} from \"@opensteer/browser-core\";\n\nimport type {\n OpensteerComputerAction,\n OpensteerComputerAnnotation,\n OpensteerComputerExecuteTiming,\n} from \"./semantic.js\";\nimport type { OpensteerEvent } from \"./events.js\";\nimport type { ViewportMetrics } from \"./geometry.js\";\nimport type { ScreenshotFormat } from \"./snapshots.js\";\n\nexport const OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL = Symbol.for(\"@opensteer/computer-use-bridge\");\n\nexport interface NormalizedComputerScreenshotOptions {\n readonly format: ScreenshotFormat;\n readonly includeCursor: boolean;\n readonly annotations: readonly OpensteerComputerAnnotation[];\n}\n\nexport interface ComputerUseBridgeInput {\n readonly pageRef: PageRef;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly action: OpensteerComputerAction;\n readonly screenshot: NormalizedComputerScreenshotOptions;\n readonly signal: AbortSignal;\n remainingMs(): number | undefined;\n policySettle(pageRef: PageRef, trigger: ActionBoundarySettleTrigger): Promise<void>;\n}\n\nexport interface ComputerUseBridgeOutput {\n readonly pageRef: PageRef;\n readonly screenshot: BrowserCoreScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n readonly events: readonly OpensteerEvent[];\n readonly timing: OpensteerComputerExecuteTiming;\n readonly boundary?: ActionBoundaryOutcome;\n}\n\nexport interface ComputerUseBridge {\n execute(input: ComputerUseBridgeInput): Promise<ComputerUseBridgeOutput>;\n}\n\nexport interface ComputerUseBridgeProvider {\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge;\n}\n\ntype ComputerUseBridgeFactory =\n ComputerUseBridgeProvider[typeof OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL];\n\nfunction isComputerUseBridgeFactory(value: unknown): value is ComputerUseBridgeFactory {\n return typeof value === \"function\";\n}\n\nexport function resolveComputerUseBridge(\n engine: BrowserCoreEngine | ComputerUseBridgeProvider,\n): ComputerUseBridge | undefined {\n const candidate = Reflect.get(engine, OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL);\n return isComputerUseBridgeFactory(candidate) ? candidate.call(engine) : undefined;\n}\n","import type {\n ActionBoundaryOutcome,\n ActionBoundarySettleTrigger,\n ActionBoundarySnapshot,\n BrowserCoreEngine,\n KeyModifier,\n NodeLocator,\n PageRef,\n Point,\n Quad,\n Rect,\n} from \"@opensteer/browser-core\";\nimport type { ReplayElementPath } from \"./dom-path-types.js\";\n\nexport const OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL = Symbol.for(\"@opensteer/dom-action-bridge\");\n\nexport type DomActionScrollAlignment = \"start\" | \"center\" | \"end\" | \"nearest\";\n\nexport interface DomActionTargetInspection {\n readonly connected: boolean;\n readonly visible: boolean;\n readonly enabled: boolean;\n readonly editable: boolean;\n readonly pointerEvents: string;\n readonly bounds?: Rect;\n readonly contentQuads: readonly Quad[];\n}\n\nexport interface DomActionScrollOptions {\n readonly block?: DomActionScrollAlignment;\n readonly inline?: DomActionScrollAlignment;\n}\n\nexport interface DomActionKeyPressInput {\n readonly key: string;\n readonly modifiers?: readonly KeyModifier[];\n}\n\nexport interface DomActionSettleOptions {\n readonly operation: \"dom.click\" | \"dom.hover\" | \"dom.input\" | \"dom.scroll\";\n readonly snapshot?: ActionBoundarySnapshot;\n readonly signal: AbortSignal;\n remainingMs(): number | undefined;\n policySettle(pageRef: PageRef, trigger: ActionBoundarySettleTrigger): Promise<void>;\n}\n\nexport type DomPointerHitRelation =\n | \"self\"\n | \"descendant\"\n | \"ancestor\"\n | \"same-owner\"\n | \"outside\"\n | \"unknown\";\n\nexport interface DomPointerHitAssessment {\n readonly relation: DomPointerHitRelation;\n readonly blocking: boolean;\n readonly ambiguous?: boolean;\n readonly canonicalTarget?: NodeLocator;\n readonly hitOwner?: NodeLocator;\n}\n\nexport interface DomActionBridge {\n buildReplayPath(locator: NodeLocator): Promise<ReplayElementPath>;\n inspectActionTarget(locator: NodeLocator): Promise<DomActionTargetInspection>;\n canonicalizePointerTarget(locator: NodeLocator): Promise<NodeLocator>;\n classifyPointerHit(input: {\n readonly target: NodeLocator;\n readonly hit: NodeLocator;\n readonly point: Point;\n }): Promise<DomPointerHitAssessment>;\n scrollNodeIntoView(locator: NodeLocator, options?: DomActionScrollOptions): Promise<void>;\n focusNode(locator: NodeLocator): Promise<void>;\n pressKey(locator: NodeLocator, input: DomActionKeyPressInput): Promise<void>;\n finalizeDomAction(\n pageRef: PageRef,\n options: DomActionSettleOptions,\n ): Promise<ActionBoundaryOutcome>;\n}\n\nexport interface DomActionBridgeProvider {\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge;\n}\n\ntype DomActionBridgeFactory = DomActionBridgeProvider[typeof OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL];\n\nfunction isDomActionBridgeFactory(value: unknown): value is DomActionBridgeFactory {\n return typeof value === \"function\";\n}\n\nexport function resolveDomActionBridge(\n engine: BrowserCoreEngine | DomActionBridgeProvider,\n): DomActionBridge | undefined {\n const candidate = Reflect.get(engine, OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL);\n return isDomActionBridgeFactory(candidate) ? candidate.call(engine) : undefined;\n}\n","import {\n noBrowserCapabilities,\n mergeBrowserCapabilities,\n type BrowserCapabilities,\n type HeaderEntry,\n} from \"@opensteer/browser-core\";\nimport type { Browser, BrowserContext, Page } from \"playwright\";\n\nexport const DEFAULT_BODY_CAPTURE_LIMIT_BYTES = 1024 * 1024;\n\nexport const PLAYWRIGHT_BROWSER_CORE_CAPABILITIES: BrowserCapabilities = mergeBrowserCapabilities(\n noBrowserCapabilities(),\n {\n executor: {\n sessionLifecycle: true,\n pageLifecycle: true,\n navigation: true,\n pointerInput: true,\n keyboardInput: true,\n screenshots: true,\n executionControl: {\n freeze: true,\n },\n },\n inspector: {\n pageEnumeration: true,\n frameEnumeration: true,\n html: true,\n domSnapshot: true,\n visualStability: true,\n text: true,\n attributes: true,\n hitTest: true,\n viewportMetrics: true,\n network: true,\n networkBodies: true,\n cookies: true,\n localStorage: true,\n sessionStorage: true,\n indexedDb: true,\n },\n transport: {\n sessionHttp: true,\n },\n instrumentation: {\n initScripts: true,\n routing: true,\n },\n events: {\n pageLifecycle: true,\n dialog: true,\n download: true,\n chooser: true,\n console: true,\n pageError: true,\n },\n },\n);\n\nexport interface PlaywrightChromiumLaunchOptions {\n readonly headless?: boolean;\n readonly executablePath?: string;\n readonly channel?: string;\n readonly args?: readonly string[];\n readonly chromiumSandbox?: boolean;\n readonly devtools?: boolean;\n readonly downloadsPath?: string;\n readonly proxy?: {\n readonly server: string;\n readonly bypass?: string;\n readonly username?: string;\n readonly password?: string;\n };\n readonly slowMo?: number;\n readonly timeoutMs?: number;\n}\n\nexport interface PlaywrightBrowserContextOptions {\n readonly ignoreHTTPSErrors?: boolean;\n readonly locale?: string;\n readonly timezoneId?: string;\n readonly userAgent?: string;\n readonly viewport?: {\n readonly width: number;\n readonly height: number;\n } | null;\n readonly javaScriptEnabled?: boolean;\n readonly bypassCSP?: boolean;\n readonly reducedMotion?: \"reduce\" | \"no-preference\";\n readonly colorScheme?: \"light\" | \"dark\" | \"no-preference\";\n readonly extraHTTPHeaders?: readonly HeaderEntry[];\n}\n\nexport interface AdoptedChromiumBrowser {\n readonly browserType: () => { readonly name: () => string };\n readonly close: () => Promise<void>;\n readonly newContext: (options?: Record<string, unknown>) => Promise<unknown>;\n}\n\nexport interface PlaywrightBrowserCoreEngineOptions {\n readonly browser?: AdoptedChromiumBrowser;\n readonly closeBrowserOnDispose?: boolean;\n readonly launch?: PlaywrightChromiumLaunchOptions;\n readonly context?: PlaywrightBrowserContextOptions;\n readonly attachedContext?: BrowserContext;\n readonly attachedPage?: Page;\n readonly closeAttachedContextOnSessionClose?: boolean;\n readonly bodyCaptureLimitBytes?: number;\n}\n\nexport function asChromiumBrowser(browser: AdoptedChromiumBrowser): Browser {\n return browser as unknown as Browser;\n}\n\nexport function buildContextOptions(\n options: PlaywrightBrowserContextOptions | undefined,\n): Record<string, unknown> {\n if (!options) {\n return {\n acceptDownloads: true,\n };\n }\n\n return {\n acceptDownloads: true,\n ...(options.ignoreHTTPSErrors === undefined\n ? {}\n : { ignoreHTTPSErrors: options.ignoreHTTPSErrors }),\n ...(options.locale === undefined ? {} : { locale: options.locale }),\n ...(options.timezoneId === undefined ? {} : { timezoneId: options.timezoneId }),\n ...(options.userAgent === undefined ? {} : { userAgent: options.userAgent }),\n ...(options.viewport === undefined ? {} : { viewport: options.viewport }),\n ...(options.javaScriptEnabled === undefined\n ? {}\n : { javaScriptEnabled: options.javaScriptEnabled }),\n ...(options.bypassCSP === undefined ? {} : { bypassCSP: options.bypassCSP }),\n ...(options.reducedMotion === undefined ? {} : { reducedMotion: options.reducedMotion }),\n ...(options.colorScheme === undefined ? {} : { colorScheme: options.colorScheme }),\n ...(options.extraHTTPHeaders === undefined\n ? {}\n : {\n extraHTTPHeaders: Object.fromEntries(\n options.extraHTTPHeaders.map((header) => [header.name, header.value]),\n ),\n }),\n };\n}\n\nexport function buildLaunchOptions(\n options: PlaywrightChromiumLaunchOptions | undefined,\n): Record<string, unknown> {\n return {\n headless: options?.headless ?? false,\n ...(options?.executablePath === undefined ? {} : { executablePath: options.executablePath }),\n ...(options?.channel === undefined ? {} : { channel: options.channel }),\n ...(options?.args === undefined ? {} : { args: [...options.args] }),\n ...(options?.chromiumSandbox === undefined ? {} : { chromiumSandbox: options.chromiumSandbox }),\n ...(options?.devtools === undefined ? {} : { devtools: options.devtools }),\n ...(options?.downloadsPath === undefined ? {} : { downloadsPath: options.downloadsPath }),\n ...(options?.proxy === undefined ? {} : { proxy: options.proxy }),\n ...(options?.slowMo === undefined ? {} : { slowMo: options.slowMo }),\n ...(options?.timeoutMs === undefined ? {} : { timeout: options.timeoutMs }),\n };\n}\n","import {\n createBodyPayload,\n type BodyPayload,\n type CookieRecord,\n type NetworkResourceType,\n type ScreenshotFormat,\n type StepEvent,\n type StorageEntry,\n} from \"@opensteer/browser-core\";\nimport type { ConsoleMessage, Cookie } from \"playwright\";\nimport type { DomTreeNode, RareIntegerData, RareStringData, ShadowBoundaryInfo } from \"./types.js\";\n\nexport function clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nexport function normalizeSameSite(value: Cookie[\"sameSite\"]): CookieRecord[\"sameSite\"] {\n switch (value) {\n case \"Strict\":\n return \"strict\";\n case \"Lax\":\n return \"lax\";\n case \"None\":\n return \"none\";\n }\n}\n\nexport function normalizeResourceType(value: string): NetworkResourceType {\n switch (value) {\n case \"document\":\n case \"stylesheet\":\n case \"image\":\n case \"media\":\n case \"font\":\n case \"script\":\n case \"texttrack\":\n case \"xhr\":\n case \"fetch\":\n case \"websocket\":\n case \"manifest\":\n return value;\n case \"eventsource\":\n return \"event-stream\";\n default:\n return \"other\";\n }\n}\n\nexport function normalizeDialogType(\n value: string,\n): Extract<StepEvent, { readonly kind: \"dialog-opened\" }>[\"dialogType\"] {\n switch (value) {\n case \"alert\":\n case \"beforeunload\":\n case \"confirm\":\n case \"prompt\":\n return value;\n default:\n return \"alert\";\n }\n}\n\nexport function normalizeConsoleLevel(\n value: ReturnType<ConsoleMessage[\"type\"]>,\n): Extract<StepEvent, { readonly kind: \"console\" }>[\"level\"] {\n switch (value) {\n case \"warning\":\n return \"warn\";\n case \"debug\":\n case \"info\":\n case \"error\":\n case \"trace\":\n return value;\n default:\n return \"log\";\n }\n}\n\nexport function parseMimeType(value: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (value === undefined) {\n return {};\n }\n const [mimeTypePart, ...parts] = value.split(\";\");\n const mimeType = mimeTypePart?.trim();\n let charset: string | undefined;\n for (const part of parts) {\n const [name, rawValue] = part.split(\"=\");\n if (name?.trim().toLowerCase() === \"charset\" && rawValue) {\n charset = rawValue.trim();\n }\n }\n return {\n ...(mimeType ? { mimeType } : {}),\n ...(charset ? { charset } : {}),\n };\n}\n\nexport function captureBodyPayload(\n bytes: Buffer | Uint8Array | null,\n contentType: string | undefined,\n limit: number,\n): BodyPayload | undefined {\n if (bytes === null) {\n return undefined;\n }\n\n const buffer = bytes instanceof Buffer ? bytes : Buffer.from(bytes);\n const truncated = buffer.byteLength > limit;\n const captured = truncated ? buffer.subarray(0, limit) : buffer;\n const { mimeType, charset } = parseMimeType(contentType);\n return createBodyPayload(new Uint8Array(captured), {\n ...(mimeType === undefined ? {} : { mimeType }),\n ...(charset === undefined ? {} : { charset }),\n truncated,\n ...(truncated ? { originalByteLength: buffer.byteLength } : {}),\n });\n}\n\nexport function combineFrameUrl(url: string, fragment?: string): string {\n return `${url}${fragment ?? \"\"}`;\n}\n\nexport function parseStringTable(strings: readonly string[], index: number | undefined): string {\n if (index === undefined) {\n return \"\";\n }\n return strings[index] ?? \"\";\n}\n\nexport function rareStringValue(\n strings: readonly string[],\n data: RareStringData | undefined,\n index: number,\n): string | undefined {\n if (!data) {\n return undefined;\n }\n const rareIndex = data.index.indexOf(index);\n if (rareIndex === -1) {\n return undefined;\n }\n const stringIndex = data.value[rareIndex];\n return parseStringTable(strings, stringIndex);\n}\n\nexport function rareIntegerValue(\n data: RareIntegerData | undefined,\n index: number,\n): number | undefined {\n if (!data) {\n return undefined;\n }\n const rareIndex = data.index.indexOf(index);\n if (rareIndex === -1) {\n return undefined;\n }\n return data.value[rareIndex];\n}\n\nexport function normalizeShadowRootType(\n value: string | undefined,\n): \"open\" | \"closed\" | \"user-agent\" | undefined {\n if (value === \"open\" || value === \"closed\" || value === \"user-agent\") {\n return value;\n }\n return undefined;\n}\n\nexport function buildShadowBoundaryIndex(\n root: DomTreeNode,\n): ReadonlyMap<number, ShadowBoundaryInfo> {\n const byBackendNodeId = new Map<number, ShadowBoundaryInfo>();\n\n const visit = (node: DomTreeNode, boundary: ShadowBoundaryInfo): void => {\n if (node.backendNodeId !== undefined) {\n byBackendNodeId.set(node.backendNodeId, boundary);\n }\n\n for (const child of node.children ?? []) {\n visit(child, boundary);\n }\n\n for (const shadowRoot of node.shadowRoots ?? []) {\n const shadowBoundary: ShadowBoundaryInfo = {\n ...(node.backendNodeId === undefined\n ? {}\n : { shadowHostBackendNodeId: node.backendNodeId }),\n ...(shadowRoot.shadowRootType === undefined\n ? {}\n : { shadowRootType: shadowRoot.shadowRootType }),\n };\n\n for (const child of shadowRoot.children ?? []) {\n visit(child, shadowBoundary);\n }\n }\n\n if (node.contentDocument) {\n visit(node.contentDocument, {});\n }\n };\n\n visit(root, {});\n return byBackendNodeId;\n}\n\nexport function interleavedAttributesToEntries(values: readonly string[]): StorageEntry[] {\n const entries: StorageEntry[] = [];\n for (let index = 0; index < values.length; index += 2) {\n const key = values[index];\n const value = values[index + 1];\n if (key !== undefined && value !== undefined) {\n entries.push({ key, value });\n }\n }\n return entries;\n}\n\nexport function mapScreenshotFormat(format: ScreenshotFormat | undefined): ScreenshotFormat {\n return format ?? \"png\";\n}\n","import {\n createBrowserCoreError,\n createPoint,\n createRect,\n type CoordinateSpace,\n type Point,\n type Rect,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\n\nexport function unsupportedCoordinateSpace(coordinateSpace: CoordinateSpace): never {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n `coordinate space ${coordinateSpace} is not supported by this backend`,\n { details: { coordinateSpace } },\n );\n}\n\nexport function toDocumentPoint(\n metrics: ViewportMetrics,\n point: Point,\n coordinateSpace: CoordinateSpace,\n): Point {\n switch (coordinateSpace) {\n case \"document-css\":\n return point;\n case \"layout-viewport-css\":\n return createPoint(point.x + metrics.scrollOffset.x, point.y + metrics.scrollOffset.y);\n case \"visual-viewport-css\":\n return createPoint(\n point.x + metrics.visualViewport.origin.x,\n point.y + metrics.visualViewport.origin.y,\n );\n case \"device-pixel\":\n return createPoint(\n point.x / metrics.devicePixelRatio + metrics.scrollOffset.x,\n point.y / metrics.devicePixelRatio + metrics.scrollOffset.y,\n );\n case \"computer-display-css\":\n case \"screen\":\n case \"window\":\n unsupportedCoordinateSpace(coordinateSpace);\n }\n}\n\nexport function toViewportPoint(\n metrics: ViewportMetrics,\n point: Point,\n coordinateSpace: CoordinateSpace,\n): Point {\n switch (coordinateSpace) {\n case \"layout-viewport-css\":\n case \"visual-viewport-css\":\n return point;\n case \"document-css\":\n return createPoint(point.x - metrics.scrollOffset.x, point.y - metrics.scrollOffset.y);\n case \"device-pixel\":\n return createPoint(point.x / metrics.devicePixelRatio, point.y / metrics.devicePixelRatio);\n case \"computer-display-css\":\n case \"screen\":\n case \"window\":\n unsupportedCoordinateSpace(coordinateSpace);\n }\n}\n\nexport function toViewportRect(\n metrics: ViewportMetrics,\n rect: Rect,\n coordinateSpace: CoordinateSpace,\n): Rect {\n const origin = toViewportPoint(metrics, createPoint(rect.x, rect.y), coordinateSpace);\n return createRect(origin.x, origin.y, rect.width, rect.height);\n}\n","import {\n buildCdpShadowBoundaryIndex,\n buildDomSnapshotFromCdpCapture,\n DOM_SNAPSHOT_COMPUTED_STYLE_NAMES,\n nextDocumentEpoch,\n parseCdpStringTable,\n staleNodeRefError,\n type DocumentRef,\n type DomSnapshot,\n type NodeLocator,\n type NodeRef,\n} from \"@opensteer/browser-core\";\nimport type { CDPSession } from \"playwright\";\n\nimport type {\n CapturedDomSnapshot,\n DocumentState,\n DomSnapshotDocument,\n DomTreeNode,\n FrameState,\n ShadowBoundaryInfo,\n} from \"./types.js\";\n\nexport async function capturePageDomSnapshot(\n cdp: CDPSession,\n options: {\n readonly includeLayout: boolean;\n },\n): Promise<{\n readonly capturedAt: number;\n readonly documents: readonly DomSnapshotDocument[];\n readonly shadowBoundariesByBackendNodeId: ReadonlyMap<number, ShadowBoundaryInfo>;\n readonly strings: readonly string[];\n}> {\n const capturedAt = Date.now();\n const [snapshotResult, domTreeResult] = await Promise.all([\n cdp.send(\"DOMSnapshot.captureSnapshot\", {\n computedStyles: [...DOM_SNAPSHOT_COMPUTED_STYLE_NAMES],\n includePaintOrder: options.includeLayout,\n includeDOMRects: options.includeLayout,\n }),\n cdp.send(\"DOM.getDocument\", {\n depth: -1,\n pierce: true,\n }),\n ]);\n\n return {\n capturedAt,\n documents: snapshotResult.documents as readonly DomSnapshotDocument[],\n shadowBoundariesByBackendNodeId: buildCdpShadowBoundaryIndex(\n domTreeResult.root as DomTreeNode,\n ) as ReadonlyMap<number, ShadowBoundaryInfo>,\n strings: snapshotResult.strings,\n };\n}\n\nexport function findCapturedDocument(\n captured: {\n readonly documents: readonly DomSnapshotDocument[];\n readonly strings: readonly string[];\n },\n cdpFrameId: string,\n): DomSnapshotDocument | undefined {\n return captured.documents.find(\n (candidate) => parseCdpStringTable(captured.strings, candidate.frameId) === cdpFrameId,\n );\n}\n\nexport function updateDocumentTreeSignature(\n document: DocumentState,\n rawDocument: DomSnapshotDocument,\n retiredDocuments: ReadonlySet<DocumentRef>,\n): void {\n const backendNodeIds = (rawDocument.nodes.backendNodeId ?? [])\n .filter((value): value is number => value !== undefined)\n .slice()\n .sort((left, right) => left - right);\n const signature = `${rawDocument.nodes.nodeType?.length ?? 0}:${backendNodeIds.join(\",\")}`;\n\n if (\n document.domTreeSignature !== undefined &&\n document.domTreeSignature !== signature &&\n !retiredDocuments.has(document.documentRef)\n ) {\n document.documentEpoch = nextDocumentEpoch(document.documentEpoch);\n document.nodeRefsByBackendNodeId.clear();\n document.backendNodeIdsByNodeRef.clear();\n }\n\n document.domTreeSignature = signature;\n}\n\nexport function resolveCapturedContentDocumentRef(\n framesByCdpId: ReadonlyMap<string, FrameState>,\n captured: CapturedDomSnapshot,\n contentDocumentIndex: number,\n): DocumentRef | undefined {\n const contentDocument = captured.documents[contentDocumentIndex];\n if (!contentDocument) {\n return undefined;\n }\n\n const cdpFrameId = parseCdpStringTable(captured.strings, contentDocument.frameId);\n if (cdpFrameId.length === 0) {\n return undefined;\n }\n\n return framesByCdpId.get(cdpFrameId)?.currentDocument.documentRef;\n}\n\nexport function findHtmlBackendNodeId(\n captured: CapturedDomSnapshot,\n document: DocumentState,\n): number | undefined {\n const nodeNames = captured.rawDocument.nodes.nodeName ?? [];\n const backendNodeIds = captured.rawDocument.nodes.backendNodeId ?? [];\n for (let index = 0; index < nodeNames.length; index += 1) {\n if (parseCdpStringTable(captured.strings, nodeNames[index]) === \"HTML\") {\n return backendNodeIds[index];\n }\n }\n return document.backendNodeIdsByNodeRef.values().next().value;\n}\n\nexport function buildDomSnapshot(\n document: DocumentState,\n captured: CapturedDomSnapshot,\n nodeRefResolver: (document: DocumentState, backendNodeId: number) => NodeRef,\n contentDocRefResolver: (contentDocumentIndex: number) => DocumentRef | undefined,\n): DomSnapshot {\n return buildDomSnapshotFromCdpCapture(\n document,\n captured,\n (backendNodeId) => nodeRefResolver(document, backendNodeId),\n contentDocRefResolver,\n );\n}\n\nexport function readTextContent(snapshot: DomSnapshot, input: NodeLocator): string | null {\n const node = snapshot.nodes.find((candidate) => candidate.nodeRef === input.nodeRef);\n if (!node) {\n throw staleNodeRefError(input);\n }\n if (node.nodeType === 9 || node.nodeType === 10) {\n return null;\n }\n return node.textContent ?? \"\";\n}\n","import {\n createBrowserCoreError,\n isBrowserCoreError,\n staleNodeRefError,\n type NodeLocator,\n type PageRef,\n} from \"@opensteer/browser-core\";\nimport { errors as playwrightErrors } from \"playwright\";\nimport type { DocumentState, PageController } from \"./types.js\";\n\nexport function unsupportedCursorCapture(): never {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n \"capturing the cursor in screenshots is not supported by this backend\",\n );\n}\n\nexport function normalizePlaywrightError(error: unknown, pageRef: PageRef): Error {\n if (isBrowserCoreError(error)) {\n return error;\n }\n if (error instanceof playwrightErrors.TimeoutError) {\n return createBrowserCoreError(\"timeout\", error.message, { cause: error });\n }\n if (error instanceof Error && /Navigation failed/i.test(error.message)) {\n return createBrowserCoreError(\"navigation-failed\", error.message, {\n cause: error,\n details: { pageRef },\n });\n }\n if (error instanceof Error) {\n return createBrowserCoreError(\"operation-failed\", error.message, {\n cause: error,\n details: { pageRef },\n });\n }\n return createBrowserCoreError(\"operation-failed\", \"Playwright operation failed\", {\n cause: error,\n details: { pageRef },\n });\n}\n\nexport function isContextClosedError(error: unknown): boolean {\n return (\n error instanceof Error && /Target page, context or browser has been closed/i.test(error.message)\n );\n}\n\nexport function shouldIgnoreBackgroundTaskError(\n controller: PageController,\n error: unknown,\n): boolean {\n return (\n controller.lifecycleState === \"closed\" ||\n controller.explicitCloseInFlight ||\n isContextClosedError(error)\n );\n}\n\nexport function isNodeLookupFailure(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n );\n}\n\nexport function rethrowNodeLookupError(\n error: unknown,\n document: DocumentState,\n input: NodeLocator,\n): never {\n if (isNodeLookupFailure(error)) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: input.documentEpoch,\n nodeRef: input.nodeRef,\n });\n }\n throw error;\n}\n","import {\n createBodyPayload,\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createScrollOffset,\n createSize,\n type ScreenshotArtifact,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\n\nimport type { FrameState, PageController } from \"./types.js\";\n\nexport async function getViewportMetricsFromCdp(controller: {\n readonly cdp: PageController[\"cdp\"];\n}): Promise<ViewportMetrics> {\n const layout = await controller.cdp.send(\"Page.getLayoutMetrics\");\n const dprResult = await controller.cdp.send(\"Runtime.evaluate\", {\n expression: \"window.devicePixelRatio\",\n returnByValue: true,\n });\n const pageZoomFactor = layout.cssVisualViewport.zoom ?? 1;\n const devicePixelRatio = typeof dprResult.result.value === \"number\" ? dprResult.result.value : 1;\n return {\n layoutViewport: {\n origin: { x: layout.cssLayoutViewport.pageX, y: layout.cssLayoutViewport.pageY },\n size: {\n width: layout.cssLayoutViewport.clientWidth,\n height: layout.cssLayoutViewport.clientHeight,\n },\n },\n visualViewport: {\n origin: { x: layout.cssVisualViewport.pageX, y: layout.cssVisualViewport.pageY },\n offsetWithinLayoutViewport: {\n x: layout.cssVisualViewport.offsetX,\n y: layout.cssVisualViewport.offsetY,\n },\n size: {\n width: layout.cssVisualViewport.clientWidth,\n height: layout.cssVisualViewport.clientHeight,\n },\n },\n scrollOffset: {\n x: layout.cssVisualViewport.pageX,\n y: layout.cssVisualViewport.pageY,\n },\n contentSize: {\n width: layout.cssContentSize.width,\n height: layout.cssContentSize.height,\n },\n devicePixelRatio: createDevicePixelRatio(devicePixelRatio),\n pageScaleFactor: createPageScaleFactor(layout.cssVisualViewport.scale),\n pageZoomFactor: createPageZoomFactor(pageZoomFactor),\n };\n}\n\nexport async function captureLayoutViewportScreenshotArtifact(\n controller: PageController,\n frame: FrameState,\n format: ScreenshotArtifact[\"format\"],\n): Promise<{\n readonly artifact: ScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n}> {\n const viewport = await getViewportMetricsFromCdp(controller);\n const clip = {\n x: viewport.visualViewport.origin.x,\n y: viewport.visualViewport.origin.y,\n width: viewport.visualViewport.size.width,\n height: viewport.visualViewport.size.height,\n };\n const bytes =\n format === \"png\" || format === \"jpeg\"\n ? await controller.page.screenshot({\n type: format,\n scale: \"css\",\n clip: {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height,\n },\n })\n : Buffer.from(\n (\n await controller.cdp.send(\"Page.captureScreenshot\", {\n format,\n clip: {\n ...clip,\n scale: 1 / Math.max(1, viewport.devicePixelRatio),\n },\n fromSurface: true,\n })\n ).data,\n \"base64\",\n );\n\n return {\n viewport,\n artifact: {\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n documentRef: frame.currentDocument.documentRef,\n documentEpoch: frame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(bytes), {\n mimeType: `image/${format}`,\n }),\n format,\n size: createSize(viewport.visualViewport.size.width, viewport.visualViewport.size.height),\n coordinateSpace: \"layout-viewport-css\",\n },\n };\n}\n","import {\n type ActionBoundaryOutcome,\n type PageRef,\n type Point,\n type ScreenshotArtifact,\n type StepEvent,\n} from \"@opensteer/browser-core\";\nimport type {\n ComputerUseBridge,\n ComputerUseBridgeInput,\n NormalizedComputerScreenshotOptions,\n OpensteerComputerKeyModifier,\n} from \"@opensteer/protocol\";\nimport type { Frame } from \"playwright\";\n\nimport { mapScreenshotFormat } from \"./normalize.js\";\nimport type { PlaywrightActionBoundaryOptions } from \"./action-settle.js\";\nimport type { FrameState, PageController } from \"./types.js\";\nimport { captureLayoutViewportScreenshotArtifact } from \"./viewport-screenshot.js\";\n\nconst DECORATION_NAMESPACE = \"opensteer-computer-use\";\n\nexport function createPlaywrightComputerUseBridge(context: {\n resolveController(pageRef: PageRef): PageController;\n flushPendingPageTasks(sessionRef: PageController[\"sessionRef\"]): Promise<void>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: PlaywrightActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n requireMainFrame(controller: PageController): FrameState;\n drainQueuedEvents(pageRef: PageRef): readonly StepEvent[];\n withModifiers(\n page: PageController[\"page\"],\n modifiers: readonly OpensteerComputerKeyModifier[] | undefined,\n action: () => Promise<void>,\n ): Promise<void>;\n}): ComputerUseBridge {\n const cursorByPageRef = new Map<PageRef, Point>();\n\n return {\n async execute(input) {\n const startedAt = Date.now();\n const actionController = context.resolveController(input.pageRef);\n const action = input.action;\n let boundary: ActionBoundaryOutcome | undefined;\n let actionMs = 0;\n let waitMs = 0;\n\n const actionStartedAt = Date.now();\n const cursorPoint = pointForAction(action);\n switch (action.type) {\n case \"click\":\n await context.withModifiers(actionController.page, action.modifiers, async () => {\n await actionController.page.mouse.click(action.x, action.y, {\n ...(action.button === undefined ? {} : { button: action.button }),\n ...(action.clickCount === undefined ? {} : { clickCount: action.clickCount }),\n });\n });\n break;\n case \"move\":\n await actionController.page.mouse.move(action.x, action.y);\n break;\n case \"scroll\":\n await actionController.page.mouse.move(action.x, action.y);\n await actionController.page.mouse.wheel(action.deltaX, action.deltaY);\n await waitForAnimationFrame(actionController);\n break;\n case \"type\":\n await actionController.page.keyboard.type(action.text);\n break;\n case \"key\":\n await context.withModifiers(actionController.page, action.modifiers, async () => {\n await actionController.page.keyboard.press(action.key);\n });\n break;\n case \"drag\": {\n const steps = action.steps ?? 10;\n await actionController.page.mouse.move(action.start.x, action.start.y);\n await new Promise<void>((r) => setTimeout(r, 40 + Math.random() * 30));\n await actionController.page.mouse.down();\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const eased = 1 - Math.pow(1 - t, 3);\n const jitterFade = Math.max(0, 1 - i / (steps * 0.85));\n const jx = i < steps ? (Math.random() - 0.5) * 1.6 * jitterFade : 0;\n const jy = i < steps ? (Math.random() - 0.5) * 2.4 * jitterFade : 0;\n const x = action.start.x + (action.end.x - action.start.x) * eased + jx;\n const y = action.start.y + (action.end.y - action.start.y) * eased + jy;\n await actionController.page.mouse.move(Math.round(x), Math.round(y));\n if (i < steps) {\n const baseMs = t < 0.15 ? 22 : t > 0.85 ? 20 : 10;\n await new Promise<void>((r) => setTimeout(r, baseMs + Math.random() * 14));\n }\n }\n await new Promise<void>((r) => setTimeout(r, 30 + Math.random() * 40));\n await actionController.page.mouse.up();\n break;\n }\n case \"screenshot\":\n break;\n case \"wait\":\n await delayWithSignal(action.durationMs, input.signal);\n break;\n }\n actionMs = Date.now() - actionStartedAt;\n\n if (cursorPoint !== undefined) {\n cursorByPageRef.set(actionController.pageRef, cursorPoint);\n }\n\n await context.flushPendingPageTasks(actionController.sessionRef);\n\n if (action.type !== \"screenshot\" && action.type !== \"wait\") {\n const waitStartedAt = Date.now();\n boundary = await context.settleActionBoundary(actionController, {\n signal: input.signal,\n ...(input.snapshot === undefined ? {} : { snapshot: input.snapshot }),\n remainingMs: input.remainingMs,\n policySettle: input.policySettle,\n });\n waitMs = Date.now() - waitStartedAt;\n } else if (action.type === \"wait\") {\n waitMs = actionMs;\n actionMs = 0;\n }\n\n await context.flushPendingPageTasks(actionController.sessionRef);\n const actionEvents = context.drainQueuedEvents(actionController.pageRef);\n const resultPageRef = resolveResultingPageRef(actionController.pageRef, actionEvents);\n let resultController = context.resolveController(resultPageRef);\n if (\n action.type !== \"screenshot\" &&\n action.type !== \"wait\" &&\n resultController.pageRef !== actionController.pageRef\n ) {\n const popupWaitStartedAt = Date.now();\n await context.settleActionBoundary(resultController, {\n signal: input.signal,\n remainingMs: input.remainingMs,\n policySettle: input.policySettle,\n });\n waitMs += Date.now() - popupWaitStartedAt;\n await context.flushPendingPageTasks(actionController.sessionRef);\n resultController = context.resolveController(resultController.pageRef);\n }\n await context.flushDomUpdateTask(resultController);\n\n const screenshotCursor =\n resultController.pageRef === actionController.pageRef\n ? cursorByPageRef.get(resultController.pageRef)\n : undefined;\n const captured = await captureScreenshotWithDecorations(resultController, {\n screenshot: input.screenshot,\n ...(screenshotCursor === undefined ? {} : { cursorPoint: screenshotCursor }),\n });\n\n const events = [\n ...actionEvents,\n ...(resultController.pageRef === actionController.pageRef\n ? []\n : context.drainQueuedEvents(resultController.pageRef)),\n ];\n\n return {\n pageRef: resultController.pageRef,\n screenshot: captured.screenshot,\n viewport: captured.viewport,\n events,\n timing: {\n actionMs,\n waitMs,\n totalMs: Date.now() - startedAt,\n },\n ...(boundary === undefined ? {} : { boundary }),\n };\n },\n };\n}\n\nfunction pointForAction(action: ComputerUseBridgeInput[\"action\"]): Point | undefined {\n switch (action.type) {\n case \"click\":\n case \"move\":\n case \"scroll\":\n return {\n x: action.x,\n y: action.y,\n };\n case \"drag\":\n return action.end;\n case \"key\":\n case \"screenshot\":\n case \"type\":\n case \"wait\":\n return undefined;\n }\n}\n\nfunction resolveResultingPageRef(pageRef: PageRef, events: readonly StepEvent[]): PageRef {\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const event = events[index]!;\n if (event.kind === \"popup-opened\") {\n return event.pageRef;\n }\n }\n return pageRef;\n}\n\nasync function waitForAnimationFrame(controller: PageController): Promise<void> {\n await controller.page.evaluate(\n () =>\n new Promise<void>((resolve) => {\n (\n globalThis as unknown as {\n requestAnimationFrame(callback: () => void): number;\n }\n ).requestAnimationFrame(() => resolve());\n }),\n );\n}\n\nasync function captureScreenshotWithDecorations(\n controller: PageController,\n options: {\n readonly screenshot: NormalizedComputerScreenshotOptions;\n readonly cursorPoint?: Point;\n },\n): Promise<{\n readonly screenshot: ScreenshotArtifact;\n readonly viewport: Awaited<\n ReturnType<typeof captureLayoutViewportScreenshotArtifact>\n >[\"viewport\"];\n}> {\n const shouldDecorate =\n options.screenshot.annotations.length > 0 ||\n (options.screenshot.includeCursor && options.cursorPoint !== undefined);\n\n if (shouldDecorate) {\n await injectDecorations(controller, {\n annotations: options.screenshot.annotations,\n ...(options.screenshot.includeCursor && options.cursorPoint !== undefined\n ? { cursorPoint: options.cursorPoint }\n : {}),\n });\n }\n\n try {\n const format = mapScreenshotFormat(options.screenshot.format);\n const mainFrame = requireMainFrameState(controller);\n const { artifact, viewport } = await captureLayoutViewportScreenshotArtifact(\n controller,\n mainFrame,\n format,\n );\n return {\n screenshot: artifact,\n viewport,\n };\n } finally {\n if (shouldDecorate) {\n await cleanupDecorations(controller);\n }\n }\n}\n\nfunction requireMainFrameState(controller: PageController): FrameState {\n if (!controller.mainFrameRef) {\n throw new Error(`page ${controller.pageRef} has no main frame`);\n }\n const mainFrame = Array.from(controller.framesByCdpId.values()).find(\n (frame) => frame.frameRef === controller.mainFrameRef,\n );\n if (!mainFrame) {\n throw new Error(`page ${controller.pageRef} has no registered main frame state`);\n }\n return mainFrame;\n}\n\nasync function injectDecorations(\n controller: PageController,\n options: {\n readonly annotations: NormalizedComputerScreenshotOptions[\"annotations\"];\n readonly cursorPoint?: Point;\n },\n): Promise<void> {\n const frames = controller.page.frames();\n await Promise.all(\n frames.map(async (frame) => {\n const rootOverlay = frame === controller.page.mainFrame();\n await runFrameScript(frame, options, rootOverlay, \"inject\");\n }),\n );\n}\n\nasync function cleanupDecorations(controller: PageController): Promise<void> {\n await Promise.all(\n controller.page\n .frames()\n .map((frame) =>\n runFrameScript(\n frame,\n { annotations: [] },\n frame === controller.page.mainFrame(),\n \"cleanup\",\n ),\n ),\n );\n}\n\nasync function runFrameScript(\n frame: Frame,\n options: {\n readonly annotations: NormalizedComputerScreenshotOptions[\"annotations\"];\n readonly cursorPoint?: Point;\n },\n rootOverlay: boolean,\n mode: \"inject\" | \"cleanup\",\n): Promise<void> {\n try {\n await frame.evaluate(\n ({\n annotations,\n cursorPoint,\n namespace,\n rootOverlay,\n mode,\n }: {\n readonly annotations: NormalizedComputerScreenshotOptions[\"annotations\"];\n readonly cursorPoint?: Point;\n readonly namespace: string;\n readonly rootOverlay: boolean;\n readonly mode: \"inject\" | \"cleanup\";\n }) => {\n const host = globalThis as unknown as {\n document: any;\n window: {\n innerWidth?: number;\n innerHeight?: number;\n };\n HTMLElement: new (...args: readonly unknown[]) => any;\n getComputedStyle(element: any): {\n readonly overflow?: string;\n readonly overflowX?: string;\n readonly overflowY?: string;\n };\n };\n const document = host.document;\n const window = host.window;\n const HTMLElement = host.HTMLElement;\n const getComputedStyle = host.getComputedStyle;\n const styleId = `${namespace}-style`;\n const overlayId = `${namespace}-overlay`;\n const scrollableClass = `${namespace}-scrollable`;\n\n const cleanup = () => {\n document.getElementById(styleId)?.remove();\n document.getElementById(overlayId)?.remove();\n document.querySelectorAll(`.${scrollableClass}`).forEach((element: any) => {\n element.classList.remove(scrollableClass);\n });\n };\n\n cleanup();\n if (mode === \"cleanup\") {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.id = styleId;\n const css: string[] = [];\n if (annotations.includes(\"clickable\")) {\n css.push(\n `a,button,[role='button'],[role='link'],[onclick],[tabindex]:not([tabindex='-1']){outline:2px solid #4CAF50!important;outline-offset:-2px!important;}`,\n );\n }\n if (annotations.includes(\"typeable\")) {\n css.push(\n `input:not([type='hidden']):not([type='checkbox']):not([type='radio']):not([type='submit']):not([type='button']),textarea,[contenteditable='true']{outline:2px solid #FF9800!important;outline-offset:-2px!important;}`,\n );\n }\n if (annotations.includes(\"scrollable\")) {\n css.push(\n `.${scrollableClass}{outline:2px dashed #9C27B0!important;outline-offset:-2px!important;}`,\n );\n }\n if (annotations.includes(\"selected\")) {\n css.push(`:focus{outline:3px solid #2196F3!important;outline-offset:-3px!important;}`);\n }\n if (css.length > 0) {\n style.textContent = css.join(\"\\n\");\n (document.head ?? document.documentElement)?.appendChild(style);\n }\n\n if (annotations.includes(\"scrollable\")) {\n const nodes = Array.from(document.querySelectorAll(\"*\"));\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue;\n }\n const rect = node.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n continue;\n }\n const computed = getComputedStyle(node);\n const overflow = `${computed.overflow} ${computed.overflowX} ${computed.overflowY}`;\n if (!/(auto|scroll|overlay)/i.test(overflow)) {\n continue;\n }\n if (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth) {\n continue;\n }\n node.classList.add(scrollableClass);\n }\n }\n\n if (!rootOverlay) {\n return;\n }\n\n const overlay = document.createElement(\"div\");\n overlay.id = overlayId;\n overlay.style.position = \"fixed\";\n overlay.style.inset = \"0\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"2147483647\";\n\n if (annotations.includes(\"grid\")) {\n const grid = document.createElement(\"div\");\n grid.style.position = \"absolute\";\n grid.style.inset = \"0\";\n grid.style.backgroundImage =\n \"repeating-linear-gradient(to right, rgba(255,0,0,0.22) 0, rgba(255,0,0,0.22) 1px, transparent 1px, transparent 100px), repeating-linear-gradient(to bottom, rgba(255,0,0,0.22) 0, rgba(255,0,0,0.22) 1px, transparent 1px, transparent 100px)\";\n overlay.appendChild(grid);\n\n const width = window.innerWidth || 0;\n const height = window.innerHeight || 0;\n for (let x = 100; x < width; x += 100) {\n const label = document.createElement(\"div\");\n label.textContent = String(x);\n label.style.position = \"absolute\";\n label.style.left = `${String(x + 4)}px`;\n label.style.top = \"4px\";\n label.style.font = \"11px monospace\";\n label.style.color = \"#b71c1c\";\n label.style.background = \"rgba(255,255,255,0.86)\";\n label.style.padding = \"1px 3px\";\n overlay.appendChild(label);\n }\n for (let y = 100; y < height; y += 100) {\n const label = document.createElement(\"div\");\n label.textContent = String(y);\n label.style.position = \"absolute\";\n label.style.left = \"4px\";\n label.style.top = `${String(y + 4)}px`;\n label.style.font = \"11px monospace\";\n label.style.color = \"#b71c1c\";\n label.style.background = \"rgba(255,255,255,0.86)\";\n label.style.padding = \"1px 3px\";\n overlay.appendChild(label);\n }\n }\n\n if (cursorPoint !== undefined) {\n const cursor = document.createElement(\"div\");\n cursor.style.position = \"absolute\";\n cursor.style.left = `${String(cursorPoint.x)}px`;\n cursor.style.top = `${String(cursorPoint.y)}px`;\n cursor.style.width = \"14px\";\n cursor.style.height = \"14px\";\n cursor.style.border = \"2px solid rgba(17,17,17,0.92)\";\n cursor.style.borderRadius = \"999px\";\n cursor.style.background = \"rgba(255,255,255,0.92)\";\n cursor.style.transform = \"translate(-50%, -50%)\";\n overlay.appendChild(cursor);\n\n const crosshair = document.createElement(\"div\");\n crosshair.style.position = \"absolute\";\n crosshair.style.left = `${String(cursorPoint.x)}px`;\n crosshair.style.top = `${String(cursorPoint.y)}px`;\n crosshair.style.width = \"20px\";\n crosshair.style.height = \"20px\";\n crosshair.style.borderLeft = \"1px solid rgba(17,17,17,0.7)\";\n crosshair.style.borderTop = \"1px solid rgba(17,17,17,0.7)\";\n crosshair.style.transform = \"translate(-50%, -50%)\";\n overlay.appendChild(crosshair);\n }\n\n document.documentElement?.appendChild(overlay);\n },\n {\n annotations: [...options.annotations],\n ...(options.cursorPoint === undefined ? {} : { cursorPoint: options.cursorPoint }),\n namespace: DECORATION_NAMESPACE,\n rootOverlay,\n mode,\n },\n );\n } catch {}\n}\n\nfunction delayWithSignal(durationMs: number, signal: AbortSignal): Promise<void> {\n if (durationMs <= 0) {\n return Promise.resolve();\n }\n if (signal.aborted) {\n return Promise.reject(signal.reason);\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, durationMs);\n const onAbort = () => {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import {\n type ActionBoundaryOutcome,\n createPoint,\n createRect,\n quadBounds,\n staleNodeRefError,\n type FrameRef,\n type KeyModifier,\n type NodeLocator,\n type PageRef,\n type Quad,\n type Rect,\n type SessionRef,\n} from \"@opensteer/browser-core\";\nimport type {\n DomActionBridge,\n DomPointerHitAssessment,\n DomActionTargetInspection,\n ReplayElementPath,\n} from \"@opensteer/protocol\";\nimport type { ElementHandle, Frame } from \"playwright\";\n\nimport { rethrowNodeLookupError } from \"./errors.js\";\nimport type { PlaywrightActionBoundaryOptions } from \"./action-settle.js\";\nimport type { DocumentState, PageController } from \"./types.js\";\nimport { getViewportMetricsFromCdp } from \"./viewport-screenshot.js\";\n\ninterface PlaywrightDomActionBridgeContext {\n resolveController(pageRef: PageRef): PageController;\n flushPendingPageTasks(sessionRef: SessionRef): Promise<void>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: PlaywrightActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n locateBackendNode(document: DocumentState, backendNodeId: number): NodeLocator;\n requireFrame(frameRef: FrameRef): Frame;\n requireLiveNode(locator: NodeLocator): {\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n };\n}\n\nconst READ_ACTION_TARGET_STATE_DECLARATION = String.raw`function() {\n const node = this;\n if (!(node instanceof Element)) {\n return {\n connected: false,\n cssVisible: false,\n enabled: false,\n editable: false,\n pointerEvents: \"auto\",\n };\n }\n\n const ownerWindow = node.ownerDocument?.defaultView;\n if (!ownerWindow) {\n return {\n connected: node.isConnected,\n cssVisible: false,\n enabled: false,\n editable: false,\n pointerEvents: \"auto\",\n };\n }\n\n const style = ownerWindow.getComputedStyle(node);\n\n const enabled =\n typeof node.matches === \"function\"\n ? !node.matches(\":disabled\") && node.getAttribute(\"aria-disabled\") !== \"true\"\n : true;\n\n const editable =\n (node instanceof ownerWindow.HTMLInputElement ||\n node instanceof ownerWindow.HTMLTextAreaElement) &&\n !node.readOnly &&\n enabled\n ? true\n : node instanceof ownerWindow.HTMLSelectElement && enabled\n ? true\n : node.isContentEditable;\n\n return {\n connected: node.isConnected,\n cssVisible:\n style.visibility !== \"hidden\" &&\n style.visibility !== \"collapse\" &&\n style.display !== \"none\",\n enabled,\n editable,\n pointerEvents: style.pointerEvents,\n };\n}`;\n\nconst POINTER_ACTION_HELPERS = String.raw`\n function parentInComposedTree(node) {\n if (!node) {\n return null;\n }\n const slot = \"assignedSlot\" in node ? node.assignedSlot : null;\n if (slot instanceof Element) {\n return slot;\n }\n const parent = node.parentNode;\n if (parent instanceof ShadowRoot) {\n return parent.host;\n }\n return parent instanceof Element ? parent : null;\n }\n\n function closestElementInComposedTree(node) {\n if (!node) {\n return null;\n }\n if (node instanceof Element) {\n return node;\n }\n let current = parentInComposedTree(node);\n while (current) {\n if (current instanceof Element) {\n return current;\n }\n current = parentInComposedTree(current);\n }\n return null;\n }\n\n function hasInteractiveRole(element) {\n const role = element.getAttribute(\"role\");\n return (\n role === \"button\" ||\n role === \"link\" ||\n role === \"menuitem\" ||\n role === \"tab\" ||\n role === \"checkbox\" ||\n role === \"radio\" ||\n role === \"switch\" ||\n role === \"option\"\n );\n }\n\n function isInteractiveElement(element) {\n const tagName = element.localName;\n if (\n tagName === \"button\" ||\n tagName === \"select\" ||\n tagName === \"textarea\" ||\n tagName === \"summary\"\n ) {\n return true;\n }\n if (tagName === \"a\") {\n return element.hasAttribute(\"href\");\n }\n if (tagName === \"input\") {\n return element.getAttribute(\"type\") !== \"hidden\";\n }\n if (element.isContentEditable || hasInteractiveRole(element)) {\n return true;\n }\n\n const tabIndex = element.getAttribute(\"tabindex\");\n if (tabIndex !== null && tabIndex !== \"-1\") {\n return true;\n }\n\n return typeof element.onclick === \"function\";\n }\n\n function findPointerOwner(node) {\n const element = closestElementInComposedTree(node);\n if (!element) {\n return null;\n }\n\n let current = element;\n while (current) {\n if (current.localName === \"label\") {\n const control = \"control\" in current ? current.control : null;\n if (control instanceof Element) {\n return control;\n }\n }\n if (isInteractiveElement(current)) {\n return current;\n }\n current = parentInComposedTree(current);\n }\n\n return element;\n }\n\n function composedContains(container, node) {\n if (!(container instanceof Node) || !(node instanceof Node)) {\n return false;\n }\n let current = node;\n while (current) {\n if (current === container) {\n return true;\n }\n current = parentInComposedTree(current);\n }\n return false;\n }\n\n function documentRectForElement(element) {\n const ownerWindow = element.ownerDocument?.defaultView;\n if (!ownerWindow) {\n return null;\n }\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left + ownerWindow.scrollX,\n top: rect.top + ownerWindow.scrollY,\n right: rect.right + ownerWindow.scrollX,\n bottom: rect.bottom + ownerWindow.scrollY,\n };\n }\n\n function pointInsideDocumentRect(point, rect) {\n return (\n point.x >= rect.left &&\n point.x <= rect.right &&\n point.y >= rect.top &&\n point.y <= rect.bottom\n );\n }\n\n function isVisiblyBlockingElement(element) {\n const ownerWindow = element.ownerDocument?.defaultView;\n if (!ownerWindow) {\n return false;\n }\n const style = ownerWindow.getComputedStyle(element);\n if (\n style.display === \"none\" ||\n style.visibility === \"hidden\" ||\n style.visibility === \"collapse\"\n ) {\n return false;\n }\n if (Number.parseFloat(style.opacity || \"1\") <= 0) {\n return false;\n }\n if (style.pointerEvents === \"none\") {\n return false;\n }\n const rect = element.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n }\n`;\n\nconst RESOLVE_POINTER_OWNER_DECLARATION =\n String.raw`function() {\n ` +\n POINTER_ACTION_HELPERS +\n String.raw`\n return findPointerOwner(this);\n}`;\n\nconst CLASSIFY_POINTER_HIT_DECLARATION =\n String.raw`function(hitNode, point) {\n ` +\n POINTER_ACTION_HELPERS +\n String.raw`\n const targetElement = closestElementInComposedTree(this);\n const hitElement = closestElementInComposedTree(hitNode);\n if (!targetElement || !hitElement) {\n return {\n relation: \"unknown\",\n blocking: false,\n ambiguous: true,\n };\n }\n\n const targetOwner = findPointerOwner(targetElement);\n const hitOwner = findPointerOwner(hitElement);\n let relation = \"outside\";\n if (targetElement === hitElement) {\n relation = \"self\";\n } else if (composedContains(targetElement, hitElement)) {\n relation = \"descendant\";\n } else if (composedContains(hitElement, targetElement)) {\n relation = \"ancestor\";\n } else if (targetOwner && hitOwner && targetOwner === hitOwner) {\n relation = \"same-owner\";\n }\n\n const targetRect = documentRectForElement(targetOwner || targetElement);\n const blockingCandidate = hitOwner || hitElement;\n const blocking =\n relation === \"outside\" &&\n blockingCandidate &&\n blockingCandidate !== targetOwner &&\n isVisiblyBlockingElement(blockingCandidate);\n const ambiguous =\n relation === \"outside\" && !blocking && targetRect\n ? pointInsideDocumentRect(point, targetRect)\n : false;\n\n return {\n relation,\n blocking,\n ambiguous,\n };\n}`;\n\nconst LIVE_REPLAY_PATH_MATCH_ATTRIBUTE_PRIORITY = [\n \"class\",\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n \"name\",\n \"role\",\n \"type\",\n \"aria-label\",\n \"title\",\n \"placeholder\",\n \"for\",\n \"aria-controls\",\n \"aria-labelledby\",\n \"aria-describedby\",\n \"id\",\n \"href\",\n \"value\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"alt\",\n] as const;\n\nconst LIVE_REPLAY_PATH_STABLE_PRIMARY_ATTR_KEYS = [\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n \"name\",\n \"role\",\n \"type\",\n \"aria-label\",\n \"title\",\n \"placeholder\",\n] as const;\n\nconst LIVE_REPLAY_PATH_DEFERRED_MATCH_ATTR_KEYS = [\n \"href\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"value\",\n \"for\",\n \"aria-controls\",\n \"aria-labelledby\",\n \"aria-describedby\",\n] as const;\n\nconst LIVE_REPLAY_PATH_POLICY = {\n matchAttributePriority: LIVE_REPLAY_PATH_MATCH_ATTRIBUTE_PRIORITY,\n stablePrimaryAttrKeys: LIVE_REPLAY_PATH_STABLE_PRIMARY_ATTR_KEYS,\n deferredMatchAttrKeys: LIVE_REPLAY_PATH_DEFERRED_MATCH_ATTR_KEYS,\n};\n\nconst BUILD_LIVE_REPLAY_PATH_DECLARATION = String.raw`function(policy, source) {\n const buildReplayPath = (0, eval)(source);\n return buildReplayPath(this, policy);\n}`;\n\nconst BUILD_LIVE_REPLAY_PATH_SOURCE = String.raw`(target, policy) => {\n const MAX_ATTRIBUTE_VALUE_LENGTH = 300;\n\n function isValidAttrKey(key) {\n const trimmed = String(key || \"\").trim();\n if (!trimmed) return false;\n if (/[\\s\"'<>/]/.test(trimmed)) return false;\n return /^[A-Za-z_][A-Za-z0-9_:\\-.]*$/.test(trimmed);\n }\n\n function isMediaTag(tag) {\n return new Set([\"img\", \"video\", \"source\", \"iframe\"]).has(String(tag || \"\").toLowerCase());\n }\n\n function shouldKeepAttr(tag, key, value) {\n const normalized = String(key || \"\").trim().toLowerCase();\n if (!normalized || !String(value || \"\").trim()) return false;\n if (!isValidAttrKey(key)) return false;\n if (normalized === \"c\") return false;\n if (/^on[a-z]/i.test(normalized)) return false;\n if (new Set([\"style\", \"nonce\", \"integrity\", \"crossorigin\", \"referrerpolicy\", \"autocomplete\"]).has(normalized)) {\n return false;\n }\n if (normalized.startsWith(\"data-os-\") || normalized.startsWith(\"data-opensteer-\")) {\n return false;\n }\n if (\n isMediaTag(tag) &&\n new Set([\n \"data-src\",\n \"data-lazy-src\",\n \"data-original\",\n \"data-lazy\",\n \"data-image\",\n \"data-url\",\n \"data-srcset\",\n \"data-lazy-srcset\",\n \"data-was-processed\",\n ]).has(normalized)\n ) {\n return false;\n }\n return true;\n }\n\n function collectAttrs(node) {\n const tag = node.tagName.toLowerCase();\n const attrs = {};\n for (const attr of Array.from(node.attributes)) {\n if (!shouldKeepAttr(tag, attr.name, attr.value)) {\n continue;\n }\n const value = String(attr.value || \"\");\n if (!value.trim()) continue;\n if (value.length > MAX_ATTRIBUTE_VALUE_LENGTH) continue;\n attrs[attr.name] = value;\n }\n return attrs;\n }\n\n function getSiblings(node, root) {\n if (node.parentElement) return Array.from(node.parentElement.children);\n return Array.from(root.children || []);\n }\n\n function toPosition(node, root) {\n const siblings = getSiblings(node, root);\n const tag = node.tagName.toLowerCase();\n const sameTag = siblings.filter((candidate) => candidate.tagName.toLowerCase() === tag);\n return {\n nthChild: siblings.indexOf(node) + 1,\n nthOfType: sameTag.indexOf(node) + 1,\n };\n }\n\n function buildChain(node) {\n const chain = [];\n let current = node;\n while (current) {\n chain.push(current);\n if (current.parentElement) {\n current = current.parentElement;\n continue;\n }\n break;\n }\n chain.reverse();\n return chain;\n }\n\n function sortAttributeKeys(keys) {\n const priority = Array.isArray(policy?.matchAttributePriority)\n ? policy.matchAttributePriority.map((value) => String(value))\n : [];\n return [...keys].sort((left, right) => {\n const leftIndex = priority.indexOf(left);\n const rightIndex = priority.indexOf(right);\n const leftRank = leftIndex === -1 ? Number.MAX_SAFE_INTEGER : leftIndex;\n const rightRank = rightIndex === -1 ? Number.MAX_SAFE_INTEGER : rightIndex;\n if (leftRank !== rightRank) {\n return leftRank - rightRank;\n }\n return left.localeCompare(right);\n });\n }\n\n function tokenizeClassValue(value) {\n const seen = new Set();\n const out = [];\n for (const token of String(value || \"\").split(/\\s+/)) {\n const normalized = token.trim();\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n out.push(normalized);\n }\n return out;\n }\n\n function clauseKey(clause) {\n return JSON.stringify(clause);\n }\n\n function shouldDeferMatchAttribute(rawKey) {\n const key = String(rawKey || \"\").trim().toLowerCase();\n if (!key || key === \"class\") return false;\n if (key === \"id\" || /(?:^|[-_:])id$/.test(key)) return true;\n const deferred = new Set(\n Array.isArray(policy?.deferredMatchAttrKeys)\n ? policy.deferredMatchAttrKeys.map((value) => String(value))\n : [],\n );\n if (deferred.has(key)) return true;\n const stablePrimary = new Set(\n Array.isArray(policy?.stablePrimaryAttrKeys)\n ? policy.stablePrimaryAttrKeys.map((value) => String(value))\n : [],\n );\n if (key.startsWith(\"data-\") && !stablePrimary.has(key)) return true;\n return !stablePrimary.has(key);\n }\n\n function buildSegmentSelector(data) {\n let selector = String(data.tag || \"*\").toLowerCase();\n for (const clause of data.match || []) {\n if (clause.kind === \"position\") {\n if (clause.axis === \"nthOfType\") {\n selector += \":nth-of-type(\" + Math.max(1, Number(data.position?.nthOfType || 1)) + \")\";\n } else {\n selector += \":nth-child(\" + Math.max(1, Number(data.position?.nthChild || 1)) + \")\";\n }\n continue;\n }\n\n const key = String(clause.key || \"\");\n const value = typeof clause.value === \"string\" ? clause.value : data.attrs?.[key];\n if (!key || !value) continue;\n if (key === \"class\" && (clause.op || \"exact\") === \"exact\") {\n for (const token of tokenizeClassValue(value)) {\n const escapedToken = String(token).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n selector += '[class~=\"' + escapedToken + '\"]';\n }\n continue;\n }\n const escaped = String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n const op = clause.op || \"exact\";\n if (op === \"startsWith\") selector += \"[\" + key + '^=\"' + escaped + '\"]';\n else if (op === \"contains\") selector += \"[\" + key + '*=\"' + escaped + '\"]';\n else selector += \"[\" + key + '=\"' + escaped + '\"]';\n }\n return selector;\n }\n\n function buildCandidates(nodes) {\n const parts = nodes.map((node) => buildSegmentSelector(node));\n const out = [];\n const seen = new Set();\n for (let start = 0; start < parts.length; start += 1) {\n const selector = parts.slice(start).join(\" \");\n if (!selector || seen.has(selector)) continue;\n seen.add(selector);\n out.push(selector);\n }\n return out;\n }\n\n function selectReplayCandidate(nodes, root) {\n const selectors = buildCandidates(nodes);\n let fallback = null;\n let fallbackSelector = null;\n let fallbackCount = 0;\n for (const selector of selectors) {\n let matches = [];\n try {\n matches = Array.from(root.querySelectorAll(selector));\n } catch {\n matches = [];\n }\n if (!matches.length) continue;\n if (matches.length === 1) {\n return {\n element: matches[0],\n selector,\n count: 1,\n mode: \"unique\",\n };\n }\n if (!fallback) {\n fallback = matches[0];\n fallbackSelector = selector;\n fallbackCount = matches.length;\n }\n }\n if (fallback && fallbackSelector) {\n return {\n element: fallback,\n selector: fallbackSelector,\n count: fallbackCount,\n mode: \"fallback\",\n };\n }\n return null;\n }\n\n function buildClausePool(data) {\n const attrs = data.attrs || {};\n const pool = [];\n const deferred = [];\n const used = new Set();\n\n const classValue = String(attrs.class || \"\").trim();\n if (classValue) {\n const clause = { kind: \"attr\", key: \"class\", op: \"exact\", value: classValue };\n used.add(clauseKey(clause));\n pool.push(clause);\n }\n\n for (const key of sortAttributeKeys(Object.keys(attrs))) {\n if (key === \"class\") continue;\n const value = attrs[key];\n if (!value || !String(value).trim()) continue;\n const clause = { kind: \"attr\", key, op: \"exact\" };\n const keyId = clauseKey(clause);\n if (used.has(keyId)) continue;\n used.add(keyId);\n if (shouldDeferMatchAttribute(key)) deferred.push(clause);\n else pool.push(clause);\n }\n\n for (const clause of [\n { kind: \"position\", axis: \"nthOfType\" },\n { kind: \"position\", axis: \"nthChild\" },\n ]) {\n const keyId = clauseKey(clause);\n if (used.has(keyId)) continue;\n used.add(keyId);\n pool.push(clause);\n }\n\n if (!pool.some((clause) => clause.kind === \"attr\")) {\n pool.push(...deferred);\n }\n\n return pool;\n }\n\n function finalizePath(elements, root) {\n if (!elements.length) return null;\n const nodes = elements.map((element) => ({\n tag: element.tagName.toLowerCase(),\n attrs: collectAttrs(element),\n position: toPosition(element, root),\n match: [],\n }));\n\n const pools = nodes.map((node) => {\n node.match = [];\n return [...buildClausePool(node)];\n });\n\n for (let index = 0; index < pools.length; index += 1) {\n const classIndex = pools[index].findIndex(\n (clause) => clause.kind === \"attr\" && clause.key === \"class\",\n );\n if (classIndex < 0) continue;\n const classClause = pools[index][classIndex];\n if (!classClause) continue;\n nodes[index].match.push(classClause);\n pools[index].splice(classIndex, 1);\n }\n\n const expected = elements[elements.length - 1];\n const totalRemaining = pools.reduce((count, pool) => count + pool.length, 0);\n for (let iteration = 0; iteration <= totalRemaining; iteration += 1) {\n const chosen = selectReplayCandidate(nodes, root);\n if (chosen && chosen.mode === \"unique\" && chosen.element === expected) {\n return {\n nodes,\n selector: chosen.selector,\n };\n }\n\n let added = false;\n for (let index = pools.length - 1; index >= 0; index -= 1) {\n const next = pools[index][0];\n if (!next) continue;\n nodes[index].match.push(next);\n pools[index].shift();\n added = true;\n break;\n }\n if (!added) break;\n }\n\n return null;\n }\n\n if (!(target instanceof Element)) return null;\n\n const context = [];\n let currentRoot = target.getRootNode() instanceof ShadowRoot ? target.getRootNode() : document;\n const targetChain = buildChain(target);\n const finalizedTarget = finalizePath(targetChain, currentRoot);\n if (!finalizedTarget) return null;\n\n while (currentRoot instanceof ShadowRoot) {\n const host = currentRoot.host;\n const hostRoot =\n host.getRootNode() instanceof ShadowRoot ? host.getRootNode() : document;\n const hostChain = buildChain(host);\n const finalizedHost = finalizePath(hostChain, hostRoot);\n if (!finalizedHost) return null;\n context.unshift({\n kind: \"shadow\",\n host: finalizedHost.nodes,\n });\n currentRoot = hostRoot;\n }\n\n return {\n resolution: \"deterministic\",\n context,\n nodes: finalizedTarget.nodes,\n };\n}`;\n\nexport function createPlaywrightDomActionBridge(\n context: PlaywrightDomActionBridgeContext,\n): DomActionBridge {\n return {\n buildReplayPath(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const localPath = await buildLiveReplayPathForLocator(\n controller,\n document,\n locator,\n backendNodeId,\n );\n return prefixIframeReplayPath(context, document.frameRef, localPath);\n });\n },\n\n inspectActionTarget(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n const [state, contentQuads] = await Promise.all([\n callNodeFunction(controller, document, locator, backendNodeId, {\n functionDeclaration: READ_ACTION_TARGET_STATE_DECLARATION,\n returnByValue: true,\n }),\n readContentQuads(controller, document, locator, nodeId),\n ]);\n\n return normalizeActionTargetInspection(state, contentQuads);\n });\n },\n\n canonicalizePointerTarget(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n return (\n (await callNodeFunctionForLocator(context, controller, document, locator, backendNodeId, {\n functionDeclaration: RESOLVE_POINTER_OWNER_DECLARATION,\n })) ?? locator\n );\n });\n },\n\n async classifyPointerHit(input) {\n return withLiveNode(\n context,\n input.target,\n async ({ controller, document, backendNodeId }) => {\n const hitLiveNode = context.requireLiveNode(input.hit);\n await context.flushDomUpdateTask(hitLiveNode.controller);\n\n const value = await callNodeFunctionWithNodeArgument(\n controller,\n document,\n input.target,\n backendNodeId,\n input.hit,\n hitLiveNode.backendNodeId,\n {\n functionDeclaration: CLASSIFY_POINTER_HIT_DECLARATION,\n arguments: [{ value: input.point }],\n },\n );\n\n const assessment = normalizePointerHitAssessment(value, input.target);\n if (!assessment.blocking || assessment.relation !== \"outside\") {\n return assessment;\n }\n\n const hitOwner = await callNodeFunctionForLocator(\n context,\n hitLiveNode.controller,\n hitLiveNode.document,\n input.hit,\n hitLiveNode.backendNodeId,\n {\n functionDeclaration: RESOLVE_POINTER_OWNER_DECLARATION,\n },\n );\n\n return {\n ...assessment,\n ...(hitOwner === undefined ? {} : { hitOwner }),\n };\n },\n );\n },\n\n async scrollNodeIntoView(locator, _options) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await sendNodeIdCommand(controller, document, locator, \"DOM.scrollIntoViewIfNeeded\", {\n nodeId,\n });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async focusNode(locator) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await sendNodeIdCommand(controller, document, locator, \"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async pressKey(locator, input) {\n return withLiveNode(context, locator, async ({ controller, document, backendNodeId }) => {\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await sendNodeIdCommand(controller, document, locator, \"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n await withKeyboardModifiers(controller, input.modifiers, async () => {\n await controller.page.keyboard.press(input.key);\n });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async finalizeDomAction(pageRef, options) {\n const controller = context.resolveController(pageRef);\n return context.settleActionBoundary(controller, {\n signal: options.signal,\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n remainingMs: options.remainingMs,\n policySettle: options.policySettle,\n });\n },\n };\n}\n\nasync function withLiveNode<T>(\n context: PlaywrightDomActionBridgeContext,\n locator: NodeLocator,\n callback: (input: {\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n }) => Promise<T>,\n): Promise<T> {\n const liveNode = context.requireLiveNode(locator);\n await context.flushDomUpdateTask(liveNode.controller);\n return callback(liveNode);\n}\n\nasync function withKeyboardModifiers(\n controller: PageController,\n modifiers: readonly KeyModifier[] | undefined,\n action: () => Promise<void>,\n): Promise<void> {\n if (modifiers === undefined || modifiers.length === 0) {\n await action();\n return;\n }\n\n for (const modifier of modifiers) {\n await controller.page.keyboard.down(modifier);\n }\n\n try {\n await action();\n } finally {\n for (const modifier of [...modifiers].reverse()) {\n await controller.page.keyboard.up(modifier);\n }\n }\n}\n\nasync function callNodeFunctionForLocator(\n context: PlaywrightDomActionBridgeContext,\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n },\n): Promise<NodeLocator | undefined> {\n let sourceObjectId: string | undefined;\n let resultObjectId: string | undefined;\n\n try {\n sourceObjectId = await resolveNodeObjectId(controller, document, locator, backendNodeId);\n const evaluated = (await controller.cdp.send(\"Runtime.callFunctionOn\", {\n objectId: sourceObjectId,\n functionDeclaration: input.functionDeclaration,\n returnByValue: false,\n awaitPromise: true,\n })) as {\n readonly result?: {\n readonly objectId?: string;\n readonly subtype?: string;\n };\n };\n\n if (evaluated.result?.subtype === \"null\") {\n return undefined;\n }\n resultObjectId = evaluated.result?.objectId;\n if (resultObjectId === undefined) {\n return undefined;\n }\n\n const requested = (await controller.cdp.send(\"DOM.requestNode\", {\n objectId: resultObjectId,\n })) as {\n readonly nodeId?: number;\n };\n if (requested.nodeId === undefined) {\n return undefined;\n }\n\n const described = (await controller.cdp.send(\"DOM.describeNode\", {\n nodeId: requested.nodeId,\n })) as {\n readonly node?: {\n readonly backendNodeId?: number;\n };\n };\n if (described.node?.backendNodeId === undefined) {\n return undefined;\n }\n\n return context.locateBackendNode(document, described.node.backendNodeId);\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n } finally {\n await releaseObject(controller, resultObjectId);\n await releaseObject(controller, sourceObjectId);\n }\n}\n\nasync function callNodeFunction(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n readonly arguments?: { readonly value: unknown }[];\n readonly returnByValue: boolean;\n },\n): Promise<unknown> {\n let objectId: string | undefined;\n\n try {\n const resolved = (await controller.cdp.send(\"DOM.resolveNode\", {\n backendNodeId,\n })) as {\n readonly object?: {\n readonly objectId?: string;\n };\n };\n objectId = resolved.object?.objectId;\n if (objectId === undefined) {\n throw staleNodeRefError(locator);\n }\n\n const evaluated = (await controller.cdp.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n ...(input.arguments === undefined ? {} : { arguments: input.arguments }),\n returnByValue: input.returnByValue,\n awaitPromise: true,\n })) as {\n readonly result?: {\n readonly value?: unknown;\n };\n };\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n } finally {\n if (objectId !== undefined) {\n await controller.cdp.send(\"Runtime.releaseObject\", { objectId }).catch(() => undefined);\n }\n }\n}\n\nasync function callNodeFunctionWithNodeArgument(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n argumentLocator: NodeLocator,\n argumentBackendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n readonly arguments?: { readonly value: unknown }[];\n },\n): Promise<unknown> {\n let objectId: string | undefined;\n let argumentObjectId: string | undefined;\n\n try {\n objectId = await resolveNodeObjectId(controller, document, locator, backendNodeId);\n argumentObjectId = await resolveNodeObjectId(\n controller,\n document,\n argumentLocator,\n argumentBackendNodeId,\n );\n const evaluated = (await controller.cdp.send(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n arguments: [{ objectId: argumentObjectId }, ...(input.arguments ?? [])],\n returnByValue: true,\n awaitPromise: true,\n })) as {\n readonly result?: {\n readonly value?: unknown;\n };\n };\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n } finally {\n await releaseObject(controller, argumentObjectId);\n await releaseObject(controller, objectId);\n }\n}\n\nasync function resolveNodeObjectId(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n): Promise<string> {\n try {\n const resolved = (await controller.cdp.send(\"DOM.resolveNode\", {\n backendNodeId,\n })) as {\n readonly object?: {\n readonly objectId?: string;\n };\n };\n const objectId = resolved.object?.objectId;\n if (objectId === undefined) {\n throw staleNodeRefError(locator);\n }\n return objectId;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n }\n}\n\nasync function resolveFrontendNodeId(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n): Promise<number> {\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = (await controller.cdp.send(\"DOM.pushNodesByBackendIdsToFrontend\", {\n backendNodeIds: [backendNodeId],\n })) as {\n readonly nodeIds: readonly number[];\n };\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(locator);\n }\n return nodeId;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n }\n}\n\nasync function sendNodeIdCommand<TResult>(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n method: Parameters<PageController[\"cdp\"][\"send\"]>[0],\n params: Parameters<PageController[\"cdp\"][\"send\"]>[1],\n): Promise<TResult> {\n try {\n return (await controller.cdp.send(method, params)) as TResult;\n } catch (error) {\n rethrowNodeLookupError(error, document, locator);\n }\n}\n\nasync function readContentQuads(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n nodeId: number,\n): Promise<readonly Quad[]> {\n const metrics = await getViewportMetricsFromCdp(controller);\n const result = await sendNodeIdCommand<{\n readonly quads?: ReadonlyArray<readonly number[]>;\n }>(controller, document, locator, \"DOM.getContentQuads\", { nodeId });\n\n return (result.quads ?? [])\n .filter((quad): quad is readonly number[] => quad.length === 8)\n .map((quad) => [\n createPoint(quad[0]! + metrics.scrollOffset.x, quad[1]! + metrics.scrollOffset.y),\n createPoint(quad[2]! + metrics.scrollOffset.x, quad[3]! + metrics.scrollOffset.y),\n createPoint(quad[4]! + metrics.scrollOffset.x, quad[5]! + metrics.scrollOffset.y),\n createPoint(quad[6]! + metrics.scrollOffset.x, quad[7]! + metrics.scrollOffset.y),\n ]);\n}\n\nfunction normalizeActionTargetInspection(\n value: unknown,\n contentQuads: readonly Quad[],\n): DomActionTargetInspection {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"DOM action bridge returned an invalid inspection payload\");\n }\n\n const candidate = value as Record<string, unknown>;\n if (\n typeof candidate.connected !== \"boolean\" ||\n typeof candidate.cssVisible !== \"boolean\" ||\n typeof candidate.enabled !== \"boolean\" ||\n typeof candidate.editable !== \"boolean\" ||\n typeof candidate.pointerEvents !== \"string\"\n ) {\n throw new Error(\"DOM action bridge returned an invalid inspection payload\");\n }\n\n const bounds = contentQuads.length === 0 ? undefined : unionQuadBounds(contentQuads);\n\n return {\n connected: candidate.connected,\n visible: candidate.cssVisible && contentQuads.length > 0,\n enabled: candidate.enabled,\n editable: candidate.editable,\n pointerEvents: candidate.pointerEvents,\n ...(bounds === undefined ? {} : { bounds }),\n contentQuads,\n };\n}\n\nfunction normalizePointerHitAssessment(\n value: unknown,\n canonicalTarget: NodeLocator,\n): DomPointerHitAssessment {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"DOM action bridge returned an invalid pointer hit payload\");\n }\n\n const candidate = value as Record<string, unknown>;\n if (\n candidate.relation !== \"self\" &&\n candidate.relation !== \"descendant\" &&\n candidate.relation !== \"ancestor\" &&\n candidate.relation !== \"same-owner\" &&\n candidate.relation !== \"outside\" &&\n candidate.relation !== \"unknown\"\n ) {\n throw new Error(\"DOM action bridge returned an invalid pointer hit relation\");\n }\n if (typeof candidate.blocking !== \"boolean\") {\n throw new Error(\"DOM action bridge returned an invalid pointer hit payload\");\n }\n if (candidate.ambiguous !== undefined && typeof candidate.ambiguous !== \"boolean\") {\n throw new Error(\"DOM action bridge returned an invalid pointer hit payload\");\n }\n\n return {\n relation: candidate.relation,\n blocking: candidate.blocking,\n ...(candidate.ambiguous === undefined ? {} : { ambiguous: candidate.ambiguous }),\n canonicalTarget,\n };\n}\n\nasync function buildLiveReplayPathForLocator(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n): Promise<ReplayElementPath> {\n const raw = await callNodeFunction(controller, document, locator, backendNodeId, {\n functionDeclaration: BUILD_LIVE_REPLAY_PATH_DECLARATION,\n arguments: [{ value: LIVE_REPLAY_PATH_POLICY }, { value: BUILD_LIVE_REPLAY_PATH_SOURCE }],\n returnByValue: true,\n });\n return requireReplayPath(raw, locator);\n}\n\nasync function prefixIframeReplayPath(\n context: PlaywrightDomActionBridgeContext,\n frameRef: FrameRef,\n localPath: ReplayElementPath,\n): Promise<ReplayElementPath> {\n let currentPath = localPath;\n let currentFrame = context.requireFrame(frameRef);\n\n while (currentFrame.parentFrame() !== null) {\n const frameElement = await currentFrame.frameElement();\n try {\n const hostPath = await buildLiveReplayPathForHandle(frameElement);\n currentPath = {\n resolution: \"deterministic\",\n context: [\n ...hostPath.context,\n { kind: \"iframe\", host: hostPath.nodes },\n ...currentPath.context,\n ],\n nodes: currentPath.nodes,\n };\n } finally {\n await frameElement.dispose().catch(() => undefined);\n }\n\n currentFrame = currentFrame.parentFrame()!;\n }\n\n return currentPath;\n}\n\nasync function buildLiveReplayPathForHandle(handle: ElementHandle): Promise<ReplayElementPath> {\n const raw = await handle.evaluate(\n (element, input) => {\n const buildReplayPath = (0, eval)(input.source);\n return buildReplayPath(element, input.policy);\n },\n {\n policy: LIVE_REPLAY_PATH_POLICY,\n source: BUILD_LIVE_REPLAY_PATH_SOURCE,\n },\n );\n return requireReplayPath(raw);\n}\n\nfunction requireReplayPath(value: unknown, locator?: NodeLocator): ReplayElementPath {\n if (\n !value ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n (value as { readonly resolution?: unknown }).resolution !== \"deterministic\"\n ) {\n throw new Error(\n locator === undefined\n ? \"live DOM replay path builder returned an invalid result\"\n : `live DOM replay path builder returned an invalid result for ${locator.nodeRef}`,\n );\n }\n\n return value as ReplayElementPath;\n}\n\nfunction unionQuadBounds(quads: readonly Quad[]): Rect {\n const bounds = quads.map((quad) => quadBounds(quad));\n const minX = Math.min(...bounds.map((rect) => rect.x));\n const minY = Math.min(...bounds.map((rect) => rect.y));\n const maxX = Math.max(...bounds.map((rect) => rect.x + rect.width));\n const maxY = Math.max(...bounds.map((rect) => rect.y + rect.height));\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nasync function releaseObject(\n controller: PageController,\n objectId: string | undefined,\n): Promise<void> {\n if (objectId === undefined) {\n return;\n }\n await controller.cdp.send(\"Runtime.releaseObject\", { objectId }).catch(() => undefined);\n}\n","import {\n CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS,\n capturePostLoadTrackerSnapshot,\n buildPostLoadTrackerBeginExpression,\n buildPostLoadTrackerFreezeExpression,\n buildPostLoadTrackerInstallScript,\n buildPostLoadTrackerReadExpression,\n normalizePostLoadTrackerState,\n DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n postLoadTrackerIsSettled,\n waitForActionBoundary,\n type ActionBoundaryOutcome,\n type ActionBoundarySettleTrigger,\n type ActionBoundarySnapshot,\n type DocumentRef,\n type PageRef,\n} from \"@opensteer/browser-core\";\n\nimport { isContextClosedError, normalizePlaywrightError } from \"./errors.js\";\nimport type { PageController } from \"./types.js\";\n\nexport const DEFAULT_PLAYWRIGHT_ACTION_SETTLE_TIMEOUT_MS = CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS;\nexport const DEFAULT_PLAYWRIGHT_POST_LOAD_CAPTURE_WINDOW_MS = 1_000;\n\ninterface PlaywrightActionSettlerContext {\n flushPendingPageTasks(sessionRef: PageController[\"sessionRef\"]): Promise<void>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n getMainFrameDocumentRef(controller: PageController): DocumentRef | undefined;\n isCurrentMainFrameBootstrapSettled(controller: PageController): boolean;\n throwBackgroundError(controller: PageController): void;\n}\n\nexport interface PlaywrightActionSettleOptions {\n readonly controller: PageController;\n readonly timeoutMs: number;\n readonly signal?: AbortSignal;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly policySettle?: (pageRef: PageRef, trigger: ActionBoundarySettleTrigger) => Promise<void>;\n}\n\nexport interface PlaywrightActionBoundaryOptions {\n readonly signal?: AbortSignal;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly policySettle?: (pageRef: PageRef, trigger: ActionBoundarySettleTrigger) => Promise<void>;\n remainingMs(): number | undefined;\n}\n\ninterface RuntimeEvaluateValueResponse {\n readonly result?: {\n readonly value?: unknown;\n };\n}\n\nexport function clampPlaywrightActionSettleTimeout(timeoutMs: number | undefined): number {\n if (timeoutMs === undefined) {\n return DEFAULT_PLAYWRIGHT_ACTION_SETTLE_TIMEOUT_MS;\n }\n return Math.max(0, Math.min(DEFAULT_PLAYWRIGHT_ACTION_SETTLE_TIMEOUT_MS, timeoutMs));\n}\n\nexport function createPlaywrightActionSettler(context: PlaywrightActionSettlerContext) {\n const installScript = buildPostLoadTrackerInstallScript();\n const beginExpression = buildPostLoadTrackerBeginExpression();\n const freezeExpression = buildPostLoadTrackerFreezeExpression();\n const readExpression = buildPostLoadTrackerReadExpression();\n\n async function installTracker(controller: PageController): Promise<void> {\n if (!controller.settleTrackerRegistered) {\n await controller.page.addInitScript(installScript);\n controller.settleTrackerRegistered = true;\n }\n\n try {\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: installScript,\n returnByValue: true,\n awaitPromise: true,\n });\n } catch (error) {\n if (controller.lifecycleState === \"closed\" || isContextClosedError(error)) {\n return;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async function readTrackerState(controller: PageController) {\n try {\n const evaluated = (await controller.cdp.send(\"Runtime.evaluate\", {\n expression: readExpression,\n returnByValue: true,\n awaitPromise: true,\n })) as RuntimeEvaluateValueResponse;\n\n return normalizePostLoadTrackerState(evaluated.result?.value);\n } catch (error) {\n if (isIgnorableTrackerReadError(error)) {\n return undefined;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async function beginTrackerObservation(controller: PageController): Promise<void> {\n await installTracker(controller);\n try {\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: beginExpression,\n returnByValue: true,\n awaitPromise: true,\n });\n } catch (error) {\n if (isIgnorableTrackerReadError(error)) {\n return;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async function freezeTrackerObservation(controller: PageController): Promise<void> {\n try {\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: freezeExpression,\n returnByValue: true,\n awaitPromise: true,\n });\n } catch (error) {\n if (isIgnorableTrackerReadError(error)) {\n return;\n }\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async function captureSnapshot(controller: PageController): Promise<ActionBoundarySnapshot> {\n const documentRef = context.getMainFrameDocumentRef(controller);\n if (documentRef === undefined) {\n throw new Error(`page ${controller.pageRef} does not expose a main frame`);\n }\n\n await beginTrackerObservation(controller);\n const tracker = await readTrackerState(controller);\n return {\n pageRef: controller.pageRef,\n documentRef,\n url: controller.page.url(),\n ...(tracker === undefined ? {} : { tracker: capturePostLoadTrackerSnapshot(tracker) }),\n };\n }\n\n async function waitForPostLoadQuiet(input: {\n readonly controller: PageController;\n readonly timeoutMs: number;\n readonly quietMs?: number;\n readonly captureWindowMs?: number;\n readonly signal?: AbortSignal;\n }): Promise<void> {\n const { controller, timeoutMs, signal } = input;\n if (timeoutMs <= 0) {\n return;\n }\n\n const quietMs = input.quietMs ?? DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS;\n const captureWindowMs = Math.max(\n 0,\n Math.min(input.captureWindowMs ?? DEFAULT_PLAYWRIGHT_POST_LOAD_CAPTURE_WINDOW_MS, timeoutMs),\n );\n const deadline = Date.now() + timeoutMs;\n\n await installTracker(controller);\n if (captureWindowMs > 0) {\n await delayWithSignal(captureWindowMs, signal, deadline);\n }\n await freezeTrackerObservation(controller);\n\n while (Date.now() < deadline) {\n if (signal?.aborted) {\n throw signal.reason ?? abortError();\n }\n context.throwBackgroundError(controller);\n if (controller.lifecycleState === \"closed\") {\n return;\n }\n if (postLoadTrackerIsSettled(await readTrackerState(controller), quietMs)) {\n return;\n }\n await delayWithSignal(100, signal, deadline);\n }\n }\n\n async function settle(options: PlaywrightActionSettleOptions): Promise<ActionBoundaryOutcome> {\n const { controller, timeoutMs, signal, snapshot, policySettle } = options;\n if (timeoutMs <= 0) {\n return {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n }\n\n await context.flushPendingPageTasks(controller.sessionRef);\n\n let boundary: ActionBoundaryOutcome;\n if (snapshot === undefined) {\n if (policySettle) {\n if (signal?.aborted) {\n throw signal.reason ?? abortError();\n }\n await policySettle(controller.pageRef, \"dom-action\");\n }\n boundary = {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: true,\n };\n } else {\n await installTracker(controller);\n boundary = await waitForActionBoundary({\n timeoutMs,\n ...(signal === undefined ? {} : { signal }),\n snapshot,\n getCurrentMainFrameDocumentRef: () => context.getMainFrameDocumentRef(controller),\n getCurrentPageUrl: () => controller.page.url(),\n isCurrentMainFrameBootstrapSettled: () =>\n context.isCurrentMainFrameBootstrapSettled(controller),\n readTrackerState: () => readTrackerState(controller),\n throwBackgroundError: () => context.throwBackgroundError(controller),\n isPageClosed: () => controller.lifecycleState === \"closed\",\n });\n\n if (policySettle) {\n await policySettle(controller.pageRef, boundary.trigger);\n }\n }\n\n await context.flushPendingPageTasks(controller.sessionRef);\n if (controller.lifecycleState !== \"closed\") {\n await context.flushDomUpdateTask(controller);\n }\n\n return boundary;\n }\n\n return {\n captureSnapshot,\n installTracker,\n waitForPostLoadQuiet,\n settle,\n };\n}\n\nfunction abortError() {\n return new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nasync function delayWithSignal(\n delayMs: number,\n signal: AbortSignal | undefined,\n deadline: number,\n): Promise<void> {\n const effectiveDelay = Math.max(0, Math.min(delayMs, Math.max(0, deadline - Date.now())));\n if (effectiveDelay <= 0) {\n return;\n }\n if (signal?.aborted) {\n throw signal.reason ?? abortError();\n }\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, effectiveDelay);\n const onAbort = () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n reject(signal?.reason ?? abortError());\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction isIgnorableTrackerReadError(error: unknown): boolean {\n return (\n isContextClosedError(error) ||\n (error instanceof Error &&\n /Execution context was destroyed|Cannot find context|Inspected target navigated or closed/i.test(\n error.message,\n ))\n );\n}\n","import type {\n IndexedDbDatabaseSnapshot,\n IndexedDbIndexSnapshot,\n IndexedDbObjectStoreSnapshot,\n IndexedDbRecord,\n StorageOriginSnapshot,\n} from \"@opensteer/browser-core\";\nimport type { BrowserContext, Page } from \"playwright\";\n\nimport type {\n ExtendedStorageState,\n ExtendedStorageStateOrigin,\n NormalizedIndexedDbDatabase,\n NormalizedIndexedDbStore,\n} from \"./types.js\";\n\nconst ACTIVATION_PATH = \"/__opensteer_storage_capture__\";\nconst ACTIVATION_TIMEOUT_MS = 15_000;\n\ninterface IndexedDbSchemaSnapshot {\n readonly name: string;\n readonly version: number;\n readonly objectStores: readonly IndexedDbStoreSchemaSnapshot[];\n}\n\ninterface IndexedDbStoreSchemaSnapshot {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly autoIncrement: boolean;\n readonly indexes: readonly {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly multiEntry: boolean;\n readonly unique: boolean;\n }[];\n}\n\nexport async function capturePlaywrightStorageOrigins(\n context: BrowserContext,\n origins: readonly string[],\n): Promise<StorageOriginSnapshot[]> {\n const uniqueOrigins = [...new Set(origins)].sort();\n if (uniqueOrigins.length === 0) {\n return [];\n }\n\n const page = await context.newPage();\n try {\n await page.route(\"**/*\", (route) =>\n route.fulfill({\n status: 200,\n contentType: \"text/html\",\n body: '<!doctype html><html><head><meta charset=\"utf-8\"></head><body></body></html>',\n }),\n );\n\n const indexedDbSchemas = new Map<string, readonly IndexedDbSchemaSnapshot[]>();\n for (const origin of uniqueOrigins) {\n await activateOrigin(page, origin);\n indexedDbSchemas.set(origin, await inspectIndexedDbSchemas(page));\n }\n\n const state = (await context.storageState({\n indexedDB: true,\n })) as ExtendedStorageState;\n const normalizedOrigins = new Map(\n state.origins.map((origin) => [origin.origin, origin] as const),\n );\n\n return uniqueOrigins\n .map((origin) =>\n normalizeStorageOrigin(\n normalizedOrigins.get(origin),\n indexedDbSchemas.get(origin) ?? [],\n origin,\n ),\n )\n .filter((origin) => origin !== null);\n } finally {\n await page.close().catch(() => undefined);\n }\n}\n\nasync function activateOrigin(page: Page, origin: string): Promise<void> {\n await page.goto(new URL(ACTIVATION_PATH, origin).toString(), {\n waitUntil: \"domcontentloaded\",\n timeout: ACTIVATION_TIMEOUT_MS,\n });\n}\n\nasync function inspectIndexedDbSchemas(page: Page): Promise<readonly IndexedDbSchemaSnapshot[]> {\n return page.evaluate(async () => {\n interface PageIndexedDbSchemaSnapshot {\n readonly name: string;\n readonly version: number;\n readonly objectStores: readonly {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly autoIncrement: boolean;\n readonly indexes: readonly {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly multiEntry: boolean;\n readonly unique: boolean;\n }[];\n }[];\n }\n\n interface BrowserIndexedDbDescriptor {\n readonly name?: string;\n readonly version?: number;\n }\n\n interface BrowserIndexedDbFactory {\n readonly databases?: () => Promise<readonly BrowserIndexedDbDescriptor[]>;\n readonly open: (name: string) => {\n error: unknown;\n result: {\n readonly name: string;\n readonly version: number;\n readonly objectStoreNames: ArrayLike<string>;\n readonly transaction: (\n storeName: string,\n mode: \"readonly\",\n ) => {\n readonly objectStore: (name: string) => {\n readonly name: string;\n readonly keyPath: unknown;\n readonly autoIncrement: boolean;\n readonly indexNames: ArrayLike<string>;\n readonly index: (name: string) => {\n readonly name: string;\n readonly keyPath: unknown;\n readonly multiEntry: boolean;\n readonly unique: boolean;\n };\n };\n };\n readonly close: () => void;\n };\n onsuccess: (() => void) | null;\n onerror: (() => void) | null;\n };\n }\n\n const browserIndexedDb = (globalThis as { indexedDB?: BrowserIndexedDbFactory }).indexedDB;\n if (typeof browserIndexedDb?.databases !== \"function\") {\n return [] as PageIndexedDbSchemaSnapshot[];\n }\n\n const databases = await browserIndexedDb.databases();\n const snapshots: PageIndexedDbSchemaSnapshot[] = [];\n for (const descriptor of databases) {\n if (!descriptor.name) {\n continue;\n }\n const databaseName = descriptor.name;\n\n snapshots.push(\n await new Promise<PageIndexedDbSchemaSnapshot>((resolve, reject) => {\n const request = browserIndexedDb.open(databaseName);\n request.onerror = () =>\n reject(request.error ?? new Error(`indexedDB.open failed for ${databaseName}`));\n request.onsuccess = () => {\n const db = request.result;\n\n try {\n const objectStores = Array.from(db.objectStoreNames).map((storeName) => {\n const transaction = db.transaction(storeName, \"readonly\");\n const store = transaction.objectStore(storeName);\n return {\n name: store.name,\n ...(serializeKeyPath(store.keyPath) === undefined\n ? {}\n : { keyPath: serializeKeyPath(store.keyPath)! }),\n autoIncrement: store.autoIncrement,\n indexes: Array.from(store.indexNames).map((indexName) => {\n const index = store.index(indexName);\n return {\n name: index.name,\n ...(serializeKeyPath(index.keyPath) === undefined\n ? {}\n : { keyPath: serializeKeyPath(index.keyPath)! }),\n multiEntry: index.multiEntry,\n unique: index.unique,\n };\n }),\n };\n });\n\n resolve({\n name: db.name,\n version: db.version,\n objectStores,\n });\n } catch (error) {\n reject(error);\n } finally {\n db.close();\n }\n };\n }),\n );\n }\n\n return snapshots;\n\n function serializeKeyPath(keyPath: unknown): string | readonly string[] | undefined {\n if (Array.isArray(keyPath) && keyPath.every((entry) => typeof entry === \"string\")) {\n return [...keyPath];\n }\n return typeof keyPath === \"string\" ? keyPath : undefined;\n }\n });\n}\n\nfunction normalizeStorageOrigin(\n origin: ExtendedStorageStateOrigin | undefined,\n indexedDbSchemas: readonly IndexedDbSchemaSnapshot[],\n fallbackOrigin: string,\n): StorageOriginSnapshot | null {\n const databaseMap = new Map<string, NormalizedIndexedDbDatabase>(\n (origin?.indexedDB ?? []).map((database) => [database.name, database]),\n );\n const schemaMap = new Map<string, IndexedDbSchemaSnapshot>(\n indexedDbSchemas.map((database) => [database.name, database]),\n );\n const databaseNames = [...new Set([...databaseMap.keys(), ...schemaMap.keys()])];\n const indexedDb = databaseNames.map((databaseName) =>\n normalizeIndexedDbDatabase(databaseMap.get(databaseName), schemaMap.get(databaseName)),\n );\n\n if ((origin?.localStorage.length ?? 0) === 0 && indexedDb.length === 0) {\n return null;\n }\n\n const normalized: StorageOriginSnapshot = {\n origin: origin?.origin ?? fallbackOrigin,\n localStorage: (origin?.localStorage ?? []).map((entry) => ({\n key: entry.name,\n value: entry.value,\n })),\n };\n return indexedDb.length === 0 ? normalized : { ...normalized, indexedDb };\n}\n\nfunction normalizeIndexedDbDatabase(\n database: NormalizedIndexedDbDatabase | undefined,\n schema: IndexedDbSchemaSnapshot | undefined,\n): IndexedDbDatabaseSnapshot {\n const storeMap = new Map<string, NormalizedIndexedDbStore>(\n (database?.stores ?? []).map((store) => [store.name, store]),\n );\n const schemaStoreMap = new Map<string, IndexedDbStoreSchemaSnapshot>(\n (schema?.objectStores ?? []).map((store) => [store.name, store]),\n );\n const storeNames = [...new Set([...storeMap.keys(), ...schemaStoreMap.keys()])];\n\n return {\n name: database?.name ?? schema?.name ?? \"\",\n version: database?.version ?? schema?.version ?? 1,\n objectStores: storeNames.map((storeName) =>\n normalizeIndexedDbStore(storeMap.get(storeName), schemaStoreMap.get(storeName)),\n ),\n };\n}\n\nfunction normalizeIndexedDbStore(\n store: NormalizedIndexedDbStore | undefined,\n schema: IndexedDbStoreSchemaSnapshot | undefined,\n): IndexedDbObjectStoreSnapshot {\n const keyPath = storeKeyPath(store, schema);\n const indexes: IndexedDbIndexSnapshot[] = (schema?.indexes ?? []).map((index) => {\n const normalized: IndexedDbIndexSnapshot = {\n name: index.name,\n multiEntry: index.multiEntry,\n unique: index.unique,\n };\n return index.keyPath === undefined\n ? normalized\n : { ...normalized, keyPath: cloneKeyPath(index.keyPath)! };\n });\n const records: IndexedDbRecord[] = (store?.records ?? []).map((record) => ({\n key: record.key ?? record.keyEncoded ?? null,\n value: record.value ?? record.valueEncoded ?? null,\n }));\n\n const normalized: IndexedDbObjectStoreSnapshot = {\n name: store?.name ?? schema?.name ?? \"\",\n autoIncrement: store?.autoIncrement ?? schema?.autoIncrement ?? false,\n indexes,\n records,\n };\n if (keyPath === undefined) {\n return normalized;\n }\n\n return {\n ...normalized,\n keyPath,\n };\n}\n\nfunction storeKeyPath(\n store: NormalizedIndexedDbStore | undefined,\n schema: IndexedDbStoreSchemaSnapshot | undefined,\n): string | readonly string[] | undefined {\n if (store?.keyPathArray?.length) {\n return [...store.keyPathArray];\n }\n if (store?.keyPath !== undefined) {\n return store.keyPath;\n }\n return cloneKeyPath(schema?.keyPath);\n}\n\nfunction cloneKeyPath(\n keyPath: string | readonly string[] | undefined,\n): string | readonly string[] | undefined {\n if (Array.isArray(keyPath)) {\n return [...keyPath];\n }\n return keyPath;\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport {\n createBodyPayload,\n createBrowserCoreError,\n createChooserRef,\n createDocumentEpoch,\n createNodeLocator,\n createDocumentRef,\n createDownloadRef,\n createFrameRef,\n createHeaderEntry,\n createNetworkRequestId,\n createNodeRef,\n createPageRef,\n createPoint,\n createSessionRef,\n createSize,\n hasCapability,\n createDialogRef,\n isBrowserCoreError,\n matchesNetworkRecordFilters,\n waitForCdpVisualStability,\n unsupportedCapabilityError,\n staleNodeRefError,\n closedPageError,\n closedSessionError,\n type GetNetworkRecordsInput,\n type BrowserCoreEngine,\n type ActionBoundarySnapshot,\n type BrowserInitScriptInput,\n type BrowserInitScriptRegistration,\n type BrowserRouteRegistration,\n type BrowserRouteRegistrationInput,\n type CoordinateSpace,\n type DocumentEpoch,\n type DocumentRef,\n type DomSnapshot,\n type FrameInfo,\n type FrameRef,\n type HitTestResult,\n type HtmlSnapshot,\n type KeyModifier,\n type MouseButton,\n type NetworkRecord,\n type NodeLocator,\n type NodeRef,\n type PageInfo,\n type PageRef,\n type Point,\n type Rect,\n type ScreenshotArtifact,\n type ScreenshotFormat,\n type SessionRef,\n type SessionStorageSnapshot,\n type SessionTransportRequest,\n type SessionTransportResponse,\n type StepEvent,\n type StepResult,\n type StorageEntry,\n type StorageSnapshot,\n type ViewportMetrics,\n type CookieRecord,\n} from \"@opensteer/browser-core\";\nimport { chromium, type Browser, type BrowserContext } from \"playwright\";\nimport {\n OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL,\n OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL,\n type ComputerUseBridge,\n type DomActionBridge,\n} from \"@opensteer/protocol\";\nimport type {\n CDPSession,\n ConsoleMessage,\n Dialog,\n Download,\n Frame,\n Page,\n Request,\n Response,\n Route,\n} from \"playwright\";\n\nimport type {\n SessionState,\n PendingPageRegistration,\n PageController,\n FrameState,\n DocumentState,\n FrameDescriptor,\n FrameTreeNode,\n NetworkRecordState,\n CapturedDomSnapshot,\n ExtendedStorageState,\n} from \"./types.js\";\nimport {\n PLAYWRIGHT_BROWSER_CORE_CAPABILITIES,\n DEFAULT_BODY_CAPTURE_LIMIT_BYTES,\n asChromiumBrowser,\n buildContextOptions,\n buildLaunchOptions,\n type PlaywrightBrowserContextOptions,\n type PlaywrightBrowserCoreEngineOptions,\n} from \"./options.js\";\nimport {\n clone,\n normalizeSameSite,\n normalizeResourceType,\n normalizeDialogType,\n normalizeConsoleLevel,\n captureBodyPayload,\n combineFrameUrl,\n interleavedAttributesToEntries,\n mapScreenshotFormat,\n} from \"./normalize.js\";\nimport { toDocumentPoint, toViewportPoint, toViewportRect } from \"./coordinate.js\";\nimport {\n capturePageDomSnapshot,\n findCapturedDocument,\n updateDocumentTreeSignature,\n buildDomSnapshot as buildDomSnapshotFromCapture,\n resolveCapturedContentDocumentRef,\n findHtmlBackendNodeId,\n readTextContent,\n} from \"./dom.js\";\nimport {\n unsupportedCursorCapture,\n normalizePlaywrightError,\n isContextClosedError,\n shouldIgnoreBackgroundTaskError,\n rethrowNodeLookupError,\n} from \"./errors.js\";\nimport { createPlaywrightComputerUseBridge } from \"./computer-use.js\";\nimport { createPlaywrightDomActionBridge } from \"./dom-action-bridge.js\";\nimport {\n clampPlaywrightActionSettleTimeout,\n createPlaywrightActionSettler,\n} from \"./action-settle.js\";\nimport {\n captureLayoutViewportScreenshotArtifact,\n getViewportMetricsFromCdp,\n} from \"./viewport-screenshot.js\";\nimport { capturePlaywrightStorageOrigins } from \"./storage-capture.js\";\n\ninterface RuntimeCallFrame {\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n}\n\ninterface RuntimeStackTrace {\n readonly callFrames?: readonly RuntimeCallFrame[];\n}\n\ninterface RuntimeRemoteObjectPreviewProperty {\n readonly name?: string;\n readonly value?: string;\n}\n\ninterface RuntimeRemoteObjectPreview {\n readonly properties?: readonly RuntimeRemoteObjectPreviewProperty[];\n}\n\ninterface RuntimeRemoteObject {\n readonly value?: unknown;\n readonly unserializableValue?: string;\n readonly description?: string;\n readonly preview?: RuntimeRemoteObjectPreview;\n}\n\ninterface RuntimeConsoleApiCalledPayload {\n readonly type?: string;\n readonly args?: readonly RuntimeRemoteObject[];\n readonly stackTrace?: RuntimeStackTrace;\n}\n\ninterface RuntimeExceptionDetails {\n readonly text?: string;\n readonly stackTrace?: RuntimeStackTrace;\n readonly exception?: RuntimeRemoteObject;\n}\n\ninterface RuntimeExceptionThrownPayload {\n readonly exceptionDetails?: RuntimeExceptionDetails;\n}\n\ninterface RecordedPageEvent {\n readonly kind: \"page-error\";\n readonly message?: string;\n readonly stack?: string;\n readonly timestamp: number;\n}\n\nconst PLAYWRIGHT_RUNTIME_EVENT_RECORDER_SOURCE = String.raw`(() => {\n const key = \"__opensteerRuntimeEventRecorder\";\n const globalScope = globalThis;\n if (globalScope[key]?.installed === true) {\n return;\n }\n\n const queue = [];\n const limit = 500;\n const asString = (value) => {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return String(value);\n }\n if (value === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n };\n const enqueue = (entry) => {\n queue.push({\n ...entry,\n timestamp: Date.now(),\n });\n if (queue.length > limit) {\n queue.splice(0, queue.length - limit);\n }\n };\n\n globalScope.addEventListener(\"error\", (event) => {\n enqueue({\n kind: \"page-error\",\n message:\n typeof event.message === \"string\" && event.message.length > 0\n ? event.message\n : event.error?.message || \"Uncaught exception\",\n stack: typeof event.error?.stack === \"string\" ? event.error.stack : undefined,\n });\n });\n\n globalScope.addEventListener(\"unhandledrejection\", (event) => {\n const reason = event.reason;\n enqueue({\n kind: \"page-error\",\n message:\n typeof reason?.message === \"string\" && reason.message.length > 0\n ? reason.message\n : asString(reason),\n stack: typeof reason?.stack === \"string\" ? reason.stack : undefined,\n });\n });\n\n globalScope[key] = {\n installed: true,\n drain() {\n return queue.splice(0, queue.length);\n },\n };\n})();`;\n\nexport type {\n PlaywrightChromiumLaunchOptions,\n PlaywrightBrowserContextOptions,\n AdoptedChromiumBrowser,\n PlaywrightBrowserCoreEngineOptions,\n} from \"./options.js\";\n\nexport class PlaywrightBrowserCoreEngine implements BrowserCoreEngine {\n readonly capabilities = PLAYWRIGHT_BROWSER_CORE_CAPABILITIES;\n\n private readonly browser: Browser;\n private readonly closeBrowserOnDispose: boolean;\n private readonly contextOptions: PlaywrightBrowserContextOptions | undefined;\n private readonly options: PlaywrightBrowserCoreEngineOptions;\n private readonly bodyCaptureLimitBytes: number;\n private readonly sessions = new Map<SessionRef, SessionState>();\n private readonly pages = new Map<PageRef, PageController>();\n private readonly frames = new Map<FrameRef, FrameState>();\n private readonly documents = new Map<DocumentRef, DocumentState>();\n private readonly retiredDocuments = new Set<DocumentRef>();\n private readonly pageByPlaywrightPage = new WeakMap<Page, PageController>();\n private readonly pendingPopupOpeners = new WeakMap<Page, PageRef>();\n private readonly preassignedPopupPageRefs = new WeakMap<Page, PageRef>();\n private readonly actionSettler = createPlaywrightActionSettler({\n flushPendingPageTasks: (sessionRef) => this.flushPendingPageTasks(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n getMainFrameDocumentRef: (controller) =>\n controller.mainFrameRef === undefined\n ? undefined\n : this.frames.get(controller.mainFrameRef)?.currentDocument.documentRef,\n isCurrentMainFrameBootstrapSettled: (controller) =>\n controller.mainFrameRef !== undefined &&\n this.frames.get(controller.mainFrameRef)?.currentDocument.domContentLoadedAt !== undefined,\n throwBackgroundError: (controller) => this.throwBackgroundError(controller),\n });\n private pageCounter = 0;\n private frameCounter = 0;\n private documentCounter = 0;\n private nodeCounter = 0;\n private requestCounter = 0;\n private sessionCounter = 0;\n private eventCounter = 0;\n private stepCounter = 0;\n private computerUseBridge: ComputerUseBridge | undefined;\n private domActionBridge: DomActionBridge | undefined;\n private disposed = false;\n\n private constructor(\n browser: Browser,\n closeBrowserOnDispose: boolean,\n options: PlaywrightBrowserCoreEngineOptions,\n ) {\n this.browser = browser;\n this.closeBrowserOnDispose = closeBrowserOnDispose;\n this.options = options;\n this.contextOptions = options.context;\n this.bodyCaptureLimitBytes = options.bodyCaptureLimitBytes ?? DEFAULT_BODY_CAPTURE_LIMIT_BYTES;\n }\n\n static async create(\n options: PlaywrightBrowserCoreEngineOptions = {},\n ): Promise<PlaywrightBrowserCoreEngine> {\n if (options.browser) {\n if (options.browser.browserType().name() !== \"chromium\") {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n \"only Chromium browsers are supported by this backend\",\n );\n }\n return new PlaywrightBrowserCoreEngine(\n asChromiumBrowser(options.browser),\n options.closeBrowserOnDispose ?? false,\n options,\n );\n }\n\n const launched = await chromium.launch(buildLaunchOptions(options.launch));\n return new PlaywrightBrowserCoreEngine(launched, true, options);\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n\n for (const sessionRef of Array.from(this.sessions.keys())) {\n await this.closeSession({ sessionRef });\n }\n\n if (this.closeBrowserOnDispose) {\n await this.browser.close();\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge {\n this.computerUseBridge ??= createPlaywrightComputerUseBridge({\n resolveController: (pageRef) => this.requirePage(pageRef),\n flushPendingPageTasks: (sessionRef) => this.flushPendingPageTasks(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({\n controller,\n timeoutMs: clampPlaywrightActionSettleTimeout(options.remainingMs()),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n ...(options.policySettle === undefined ? {} : { policySettle: options.policySettle }),\n }),\n requireMainFrame: (controller) => this.requireMainFrame(controller),\n drainQueuedEvents: (pageRef) => this.drainQueuedEvents(pageRef),\n withModifiers: (page, modifiers, action) => this.withModifiers(page, modifiers, action),\n });\n return this.computerUseBridge;\n }\n\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge {\n this.domActionBridge ??= createPlaywrightDomActionBridge({\n resolveController: (pageRef: PageRef) => this.requirePage(pageRef),\n flushPendingPageTasks: (sessionRef: SessionRef) => this.flushPendingPageTasks(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({\n controller,\n timeoutMs: clampPlaywrightActionSettleTimeout(options.remainingMs()),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n ...(options.policySettle === undefined ? {} : { policySettle: options.policySettle }),\n }),\n locateBackendNode: (document, backendNodeId) =>\n createNodeLocator(\n document.documentRef,\n document.documentEpoch,\n this.nodeRefForBackendNode(document, backendNodeId),\n ),\n requireFrame: (frameRef) => this.requireLiveFrame(frameRef),\n requireLiveNode: (locator) => this.requireLiveNode(locator),\n });\n return this.domActionBridge;\n }\n\n async createSession(): Promise<SessionRef> {\n this.assertNotDisposed();\n const sessionRef = createSessionRef(`playwright-${++this.sessionCounter}`);\n const context =\n this.options.attachedContext ??\n (await this.browser.newContext(buildContextOptions(this.contextOptions)));\n const session: SessionState = {\n sessionRef,\n context,\n pageRefs: new Set<PageRef>(),\n networkRecords: [],\n pendingRegistrations: [],\n pendingPageTasks: new Set(),\n initialPage: this.options.attachedPage,\n closeContextOnSessionClose:\n this.options.attachedContext === undefined\n ? true\n : (this.options.closeAttachedContextOnSessionClose ?? false),\n activePageRef: undefined,\n lifecycleState: \"open\",\n };\n this.sessions.set(sessionRef, session);\n\n context.on(\"page\", (page) => {\n const task = this.handleContextPage(session, page).catch((error) => {\n if (isContextClosedError(error)) {\n return;\n }\n throw error;\n });\n session.pendingPageTasks.add(task);\n void task.finally(() => {\n session.pendingPageTasks.delete(task);\n });\n });\n\n if (session.initialPage) {\n const task = this.handleAttachedInitialPage(session, session.initialPage).catch((error) => {\n if (isContextClosedError(error)) {\n return;\n }\n throw error;\n });\n session.pendingPageTasks.add(task);\n void task.finally(() => {\n session.pendingPageTasks.delete(task);\n });\n }\n\n return sessionRef;\n }\n\n async closeSession(input: { readonly sessionRef: SessionRef }): Promise<void> {\n const session = this.requireSession(input.sessionRef);\n if (session.lifecycleState !== \"open\") {\n return;\n }\n session.lifecycleState = \"closing\";\n for (const controller of Array.from(this.pages.values())) {\n if (controller.sessionRef === session.sessionRef) {\n controller.explicitCloseInFlight = true;\n }\n }\n if (session.closeContextOnSessionClose) {\n await session.context.close().catch((error) => {\n if (isContextClosedError(error)) {\n return;\n }\n throw error;\n });\n }\n for (const pageRef of Array.from(session.pageRefs)) {\n const controller = this.pages.get(pageRef);\n if (controller) {\n this.cleanupPageController(controller);\n }\n }\n session.lifecycleState = \"closed\";\n this.sessions.delete(session.sessionRef);\n }\n\n async createPage(input: {\n readonly sessionRef: SessionRef;\n readonly openerPageRef?: PageRef;\n readonly url?: string;\n }): Promise<StepResult<PageInfo>> {\n const session = this.requireSession(input.sessionRef);\n const startedAt = Date.now();\n if (session.initialPage) {\n const initialPage = session.initialPage;\n session.initialPage = undefined;\n await this.flushPendingPageTasks(session.sessionRef);\n const controller =\n this.pageByPlaywrightPage.get(initialPage) ??\n (await this.initializePageController(session, initialPage, input.openerPageRef, true));\n if (input.url) {\n await controller.page.goto(input.url, {\n waitUntil: \"domcontentloaded\",\n });\n controller.lastKnownTitle = await this.readTitle(\n controller.page,\n controller.lastKnownTitle,\n );\n }\n session.activePageRef = controller.pageRef;\n await this.flushPendingPageTasks(session.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n return this.createStepResult(session.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: await this.buildPageInfo(controller),\n });\n }\n\n const controllerPromise = new Promise<PageController>((resolve, reject) => {\n session.pendingRegistrations.push({\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n resolve,\n reject,\n });\n });\n\n const createdPage = await session.context.newPage();\n const controller = await controllerPromise;\n if (controller.page !== createdPage) {\n throw createBrowserCoreError(\"operation-failed\", \"manual page registration desynchronized\");\n }\n\n if (input.url) {\n await controller.page.goto(input.url, {\n waitUntil: \"domcontentloaded\",\n });\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n }\n session.activePageRef = controller.pageRef;\n await this.flushPendingPageTasks(session.sessionRef);\n await this.flushDomUpdateTask(controller);\n\n const mainFrame = this.requireMainFrame(controller);\n return this.createStepResult(session.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: await this.buildPageInfo(controller),\n });\n }\n\n async closePage(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n const queued = this.drainQueuedEvents(controller.pageRef);\n controller.explicitCloseInFlight = true;\n if (!controller.externallyOwned) {\n await controller.page.close();\n }\n this.cleanupPageController(controller);\n const pageClosedEvent = this.createEvent<\"page-closed\">({\n kind: \"page-closed\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n });\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [...queued, pageClosedEvent],\n data: undefined,\n });\n }\n\n async activatePage(input: { readonly pageRef: PageRef }): Promise<StepResult<PageInfo>> {\n const controller = this.requirePage(input.pageRef);\n this.requireSession(controller.sessionRef).activePageRef = controller.pageRef;\n const startedAt = Date.now();\n await controller.page.bringToFront();\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: await this.buildPageInfo(controller),\n });\n }\n\n async navigate(input: {\n readonly pageRef: PageRef;\n readonly url: string;\n readonly referrer?: string;\n readonly timeoutMs?: number;\n }): Promise<\n StepResult<{\n readonly pageInfo: PageInfo;\n readonly mainFrame: FrameInfo;\n }>\n > {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n try {\n await controller.page.goto(input.url, {\n waitUntil: \"domcontentloaded\",\n ...(input.referrer === undefined ? {} : { referer: input.referrer }),\n ...(input.timeoutMs === undefined ? {} : { timeout: input.timeoutMs }),\n });\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: {\n pageInfo: await this.buildPageInfo(controller),\n mainFrame: this.buildFrameInfo(mainFrame),\n },\n });\n }\n\n async reload(input: { readonly pageRef: PageRef; readonly timeoutMs?: number }): Promise<\n StepResult<{\n readonly pageInfo: PageInfo;\n readonly mainFrame: FrameInfo;\n }>\n > {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n try {\n await controller.page.reload({\n waitUntil: \"domcontentloaded\",\n ...(input.timeoutMs === undefined ? {} : { timeout: input.timeoutMs }),\n });\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: {\n pageInfo: await this.buildPageInfo(controller),\n mainFrame: this.buildFrameInfo(mainFrame),\n },\n });\n }\n\n async goBack(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const beforeHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n try {\n await controller.page.goBack();\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n const afterHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n const changed = afterHistory.currentIndex !== beforeHistory.currentIndex;\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: changed,\n });\n }\n\n async goForward(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const beforeHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n try {\n await controller.page.goForward();\n } catch (error) {\n throw normalizePlaywrightError(error, input.pageRef);\n }\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n const afterHistory = await controller.cdp.send(\"Page.getNavigationHistory\");\n const changed = afterHistory.currentIndex !== beforeHistory.currentIndex;\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: changed,\n });\n }\n\n async stopLoading(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n await controller.cdp.send(\"Page.stopLoading\");\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async mouseMove(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n await controller.page.mouse.move(point.x, point.y);\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: undefined,\n });\n }\n\n async mouseClick(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly button?: MouseButton;\n readonly clickCount?: number;\n readonly modifiers?: readonly KeyModifier[];\n }): Promise<StepResult<HitTestResult | undefined>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const hit = await this.hitTest({\n pageRef: input.pageRef,\n point: input.point,\n coordinateSpace: input.coordinateSpace,\n }).catch(() => undefined);\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n await this.withModifiers(controller.page, input.modifiers, async () => {\n await controller.page.mouse.click(point.x, point.y, {\n ...(input.button === undefined ? {} : { button: input.button }),\n ...(input.clickCount === undefined ? {} : { clickCount: input.clickCount }),\n });\n });\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n const events = mergeDistinctStepEvents([\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.drainInstrumentedRuntimeEvents(controller)),\n ]);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events,\n data: hit,\n });\n }\n\n async mouseScroll(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly delta: Point;\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n await controller.page.mouse.move(point.x, point.y);\n await controller.page.mouse.wheel(input.delta.x, input.delta.y);\n await controller.page.evaluate(\n () =>\n new Promise<void>((resolve) => {\n const raf = (\n globalThis as typeof globalThis & {\n requestAnimationFrame: (callback: () => void) => number;\n }\n ).requestAnimationFrame;\n raf(() => resolve());\n }),\n );\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n const events = mergeDistinctStepEvents([\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.drainInstrumentedRuntimeEvents(controller)),\n ]);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events,\n data: undefined,\n });\n }\n\n async keyPress(input: {\n readonly pageRef: PageRef;\n readonly key: string;\n readonly modifiers?: readonly KeyModifier[];\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n await this.withModifiers(controller.page, input.modifiers, async () => {\n await controller.page.keyboard.press(input.key);\n });\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n const events = mergeDistinctStepEvents([\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.drainInstrumentedRuntimeEvents(controller)),\n ]);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events,\n data: undefined,\n });\n }\n\n async textInput(input: {\n readonly pageRef: PageRef;\n readonly text: string;\n }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n await controller.page.keyboard.type(input.text);\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n const events = mergeDistinctStepEvents([\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.drainInstrumentedRuntimeEvents(controller)),\n ]);\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events,\n data: undefined,\n });\n }\n\n async captureScreenshot(input: {\n readonly pageRef: PageRef;\n readonly format?: ScreenshotFormat;\n readonly clip?: Rect;\n readonly clipSpace?: CoordinateSpace;\n readonly fullPage?: boolean;\n readonly includeCursor?: boolean;\n }): Promise<StepResult<ScreenshotArtifact>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n if (input.includeCursor) {\n unsupportedCursorCapture();\n }\n\n const format = mapScreenshotFormat(input.format);\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n let clip:\n | {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n }\n | undefined;\n let size = input.fullPage ? metrics.contentSize : metrics.visualViewport.size;\n let coordinateSpace: CoordinateSpace = input.clipSpace ?? \"layout-viewport-css\";\n\n if (input.clip) {\n const viewportRect = toViewportRect(\n metrics,\n input.clip,\n input.clipSpace ?? \"layout-viewport-css\",\n );\n clip = {\n x: viewportRect.x,\n y: viewportRect.y,\n width: viewportRect.width,\n height: viewportRect.height,\n scale: 1,\n };\n size = createSize(input.clip.width, input.clip.height);\n coordinateSpace = input.clipSpace ?? \"layout-viewport-css\";\n } else if (input.fullPage) {\n clip = {\n x: 0,\n y: 0,\n width: metrics.contentSize.width,\n height: metrics.contentSize.height,\n scale: 1,\n };\n coordinateSpace = \"document-css\";\n }\n\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n let artifact: ScreenshotArtifact;\n if (clip === undefined && !input.fullPage) {\n artifact = (await captureLayoutViewportScreenshotArtifact(controller, mainFrame, format))\n .artifact;\n } else if (input.fullPage && (format === \"png\" || format === \"jpeg\")) {\n const bytes = await controller.page.screenshot({\n type: format,\n fullPage: true,\n scale: \"css\",\n });\n artifact = {\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(bytes), {\n mimeType: `image/${format}`,\n }),\n format,\n size,\n coordinateSpace,\n };\n } else {\n const response = await controller.cdp.send(\"Page.captureScreenshot\", {\n format,\n ...(clip === undefined ? {} : { clip }),\n ...(input.fullPage ? { captureBeyondViewport: true } : {}),\n fromSurface: true,\n });\n artifact = {\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(Buffer.from(response.data, \"base64\")), {\n mimeType: `image/${format}`,\n }),\n format,\n size,\n coordinateSpace,\n ...(input.clip === undefined ? {} : { clip: input.clip }),\n };\n }\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: artifact,\n });\n }\n\n async setExecutionState(input: {\n readonly pageRef: PageRef;\n readonly paused?: boolean;\n readonly frozen?: boolean;\n }): Promise<\n StepResult<{\n readonly paused: boolean;\n readonly frozen: boolean;\n }>\n > {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n\n if (input.paused !== undefined) {\n throw unsupportedCapabilityError(\n input.paused ? \"executor.executionControl.pause\" : \"executor.executionControl.resume\",\n );\n }\n\n if (input.frozen !== undefined && input.frozen !== controller.frozen) {\n await controller.cdp.send(\"Page.setWebLifecycleState\", {\n state: input.frozen ? \"frozen\" : \"active\",\n });\n controller.frozen = input.frozen;\n }\n\n await this.flushPendingPageTasks(controller.sessionRef);\n const mainFrame = this.requireMainFrame(controller);\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: {\n paused: false,\n frozen: controller.frozen,\n },\n });\n }\n\n async listPages(input: { readonly sessionRef: SessionRef }): Promise<readonly PageInfo[]> {\n const session = this.requireSession(input.sessionRef);\n const infos: PageInfo[] = [];\n for (const pageRef of session.pageRefs) {\n const controller = this.pages.get(pageRef);\n if (!controller || controller.lifecycleState === \"closed\") {\n continue;\n }\n try {\n infos.push(await this.buildPageInfo(controller));\n } catch (error) {\n if (\n isBrowserCoreError(error) &&\n (error.code === \"page-closed\" ||\n (error.code === \"operation-failed\" && error.message.includes(\"has no main frame\")))\n ) {\n continue;\n }\n throw error;\n }\n }\n return infos;\n }\n\n async drainEvents(input: { readonly pageRef: PageRef }): Promise<readonly StepEvent[]> {\n const controller = this.requirePage(input.pageRef);\n return mergeDistinctStepEvents([\n ...this.drainQueuedEvents(input.pageRef),\n ...(await this.drainInstrumentedRuntimeEvents(controller)),\n ]);\n }\n\n async listFrames(input: { readonly pageRef: PageRef }): Promise<readonly FrameInfo[]> {\n const controller = this.requirePage(input.pageRef);\n await this.flushDomUpdateTask(controller);\n return Array.from(controller.framesByCdpId.values())\n .map((frame) => this.buildFrameInfo(frame))\n .sort((left, right) => Number(right.isMainFrame) - Number(left.isMainFrame));\n }\n\n async getPageInfo(input: { readonly pageRef: PageRef }): Promise<PageInfo> {\n return this.buildPageInfo(this.requirePage(input.pageRef));\n }\n\n async getFrameInfo(input: { readonly frameRef: FrameRef }): Promise<FrameInfo> {\n const frame = this.requireFrame(input.frameRef);\n await this.flushDomUpdateTask(this.requirePage(frame.pageRef));\n return this.buildFrameInfo(frame);\n }\n\n async getHtmlSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<HtmlSnapshot> {\n const document = this.resolveDocumentTarget(input);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const captured = await this.captureDomSnapshot(controller, document);\n const rootElementBackendNodeId = findHtmlBackendNodeId(captured, document);\n if (rootElementBackendNodeId === undefined) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `document ${document.documentRef} does not expose an HTML root element`,\n );\n }\n const { outerHTML } = await controller.cdp.send(\"DOM.getOuterHTML\", {\n backendNodeId: rootElementBackendNodeId,\n includeShadowDOM: true,\n });\n\n return {\n pageRef: document.pageRef,\n frameRef: document.frameRef,\n documentRef: document.documentRef,\n documentEpoch: document.documentEpoch,\n url: document.url,\n capturedAt: captured.capturedAt,\n html: outerHTML,\n };\n }\n\n async getDomSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<DomSnapshot> {\n const document = this.resolveDocumentTarget(input);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const captured = await this.captureDomSnapshot(controller, document);\n return buildDomSnapshotFromCapture(\n document,\n captured,\n (doc, backendNodeId) => this.nodeRefForBackendNode(doc, backendNodeId),\n (contentDocIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocIndex),\n );\n }\n\n async getActionBoundarySnapshot(input: {\n readonly pageRef: PageRef;\n }): Promise<ActionBoundarySnapshot> {\n const controller = this.requirePage(input.pageRef);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.flushDomUpdateTask(controller);\n return this.actionSettler.captureSnapshot(controller);\n }\n\n async waitForVisualStability(input: {\n readonly pageRef: PageRef;\n readonly timeoutMs?: number;\n readonly settleMs?: number;\n readonly scope?: \"main-frame\" | \"visible-frames\";\n }): Promise<void> {\n const controller = this.requirePage(input.pageRef);\n await this.flushDomUpdateTask(controller);\n await waitForCdpVisualStability(controller.cdp, {\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n ...(input.settleMs === undefined ? {} : { settleMs: input.settleMs }),\n ...(input.scope === undefined ? {} : { scope: input.scope }),\n });\n await this.flushDomUpdateTask(controller);\n }\n\n async waitForPostLoadQuiet(input: {\n readonly pageRef: PageRef;\n readonly timeoutMs?: number;\n readonly quietMs?: number;\n readonly captureWindowMs?: number;\n readonly signal?: AbortSignal;\n }): Promise<void> {\n const controller = this.requirePage(input.pageRef);\n await this.flushPendingPageTasks(controller.sessionRef);\n await this.actionSettler.waitForPostLoadQuiet({\n controller,\n timeoutMs: clampPlaywrightActionSettleTimeout(input.timeoutMs),\n ...(input.quietMs === undefined ? {} : { quietMs: input.quietMs }),\n ...(input.captureWindowMs === undefined ? {} : { captureWindowMs: input.captureWindowMs }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n await this.flushPendingPageTasks(controller.sessionRef);\n if (controller.lifecycleState !== \"closed\") {\n await this.flushDomUpdateTask(controller);\n }\n }\n\n async readText(input: NodeLocator): Promise<string | null> {\n const document = this.requireDocument(input.documentRef);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const { document: liveDocument } = this.requireLiveNode(input);\n const captured = await this.captureDomSnapshot(controller, liveDocument);\n const snapshot = buildDomSnapshotFromCapture(\n liveDocument,\n captured,\n (doc, backendNodeId) => this.nodeRefForBackendNode(doc, backendNodeId),\n (contentDocIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocIndex),\n );\n return readTextContent(snapshot, input);\n }\n\n async readAttributes(\n input: NodeLocator,\n ): Promise<readonly { readonly name: string; readonly value: string }[]> {\n const document = this.requireDocument(input.documentRef);\n const controller = this.requirePage(document.pageRef);\n await this.flushDomUpdateTask(controller);\n const { document: liveDocument, backendNodeId } = this.requireLiveNode(input);\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send(\"DOM.pushNodesByBackendIdsToFrontend\", {\n backendNodeIds: [backendNodeId],\n });\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(input);\n }\n const { attributes } = await controller.cdp.send(\"DOM.getAttributes\", { nodeId });\n const normalized = interleavedAttributesToEntries(attributes).map((entry) => ({\n name: entry.key,\n value: entry.value,\n }));\n return normalized;\n } catch (error) {\n rethrowNodeLookupError(error, liveDocument, input);\n }\n }\n\n async hitTest(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly ignorePointerEventsNone?: boolean;\n readonly includeUserAgentShadowDom?: boolean;\n }): Promise<HitTestResult> {\n const controller = this.requirePage(input.pageRef);\n await this.flushDomUpdateTask(controller);\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const viewportPoint = toViewportPoint(metrics, input.point, input.coordinateSpace);\n const documentPoint = toDocumentPoint(metrics, input.point, input.coordinateSpace);\n const hitTestPoint = {\n x: Math.round(viewportPoint.x),\n y: Math.round(viewportPoint.y),\n };\n const raw = await controller.cdp.send(\"DOM.getNodeForLocation\", {\n x: hitTestPoint.x,\n y: hitTestPoint.y,\n ...(input.includeUserAgentShadowDom === undefined\n ? {}\n : { includeUserAgentShadowDOM: input.includeUserAgentShadowDom }),\n ...(input.ignorePointerEventsNone === undefined\n ? {}\n : { ignorePointerEventsNone: input.ignorePointerEventsNone }),\n });\n\n const frame = controller.framesByCdpId.get(raw.frameId);\n if (!frame) {\n throw createBrowserCoreError(\"frame-detached\", `frame ${raw.frameId} is no longer attached`);\n }\n const document = frame.currentDocument;\n const nodeRef = this.nodeRefForBackendNode(document, raw.backendNodeId);\n let targetQuad: HitTestResult[\"targetQuad\"] | undefined;\n if (frame.isMainFrame) {\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send(\"DOM.pushNodesByBackendIdsToFrontend\", {\n backendNodeIds: [raw.backendNodeId],\n });\n const nodeId = frontend.nodeIds[0];\n if (nodeId !== undefined) {\n const quads = await controller.cdp.send(\"DOM.getContentQuads\", { nodeId });\n const quad = quads.quads[0];\n if (quad && quad.length === 8) {\n targetQuad = [\n createPoint(quad[0]! + metrics.scrollOffset.x, quad[1]! + metrics.scrollOffset.y),\n createPoint(quad[2]! + metrics.scrollOffset.x, quad[3]! + metrics.scrollOffset.y),\n createPoint(quad[4]! + metrics.scrollOffset.x, quad[5]! + metrics.scrollOffset.y),\n createPoint(quad[6]! + metrics.scrollOffset.x, quad[7]! + metrics.scrollOffset.y),\n ];\n }\n }\n } catch {\n targetQuad = undefined;\n }\n }\n\n return {\n inputPoint: input.point,\n inputCoordinateSpace: input.coordinateSpace,\n resolvedPoint: documentPoint,\n resolvedCoordinateSpace: \"document-css\",\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n documentRef: document.documentRef,\n documentEpoch: document.documentEpoch,\n ...(nodeRef === undefined ? {} : { nodeRef }),\n ...(targetQuad === undefined ? {} : { targetQuad }),\n obscured: false,\n pointerEventsSkipped: input.ignorePointerEventsNone ?? false,\n };\n }\n\n async getViewportMetrics(input: { readonly pageRef: PageRef }): Promise<ViewportMetrics> {\n const controller = this.requirePage(input.pageRef);\n return getViewportMetricsFromCdp(controller);\n }\n\n async getNetworkRecords(input: GetNetworkRecordsInput): Promise<readonly NetworkRecord[]> {\n const session = this.requireSession(input.sessionRef);\n input.signal?.throwIfAborted?.();\n\n const requestIds = input.requestIds === undefined ? undefined : new Set(input.requestIds);\n const records = session.networkRecords.filter((record) => {\n if (input.pageRef !== undefined && record.pageRef !== input.pageRef) {\n return false;\n }\n if (requestIds !== undefined && !requestIds.has(record.requestId)) {\n return false;\n }\n return matchesNetworkRecordFilters(\n {\n url: record.url,\n method: record.method,\n resourceType: record.resourceType,\n ...(record.status === undefined ? {} : { status: record.status }),\n },\n input,\n );\n });\n\n if (!(input.includeBodies ?? false)) {\n return records.map(({ requestBody: _requestBody, responseBody: _responseBody, ...record }) =>\n clone(record as Omit<NetworkRecord, \"requestBody\" | \"responseBody\">),\n );\n }\n\n await raceWithAbort(\n Promise.all(\n records.map(async (record) => {\n const controller = this.resolvePageForNetworkRecord(record);\n if (!controller) {\n if (record.requestBodyState === \"pending\") {\n record.requestBodyState = \"failed\";\n record.requestBodyError =\n \"request body capture is unavailable because the page is closed\";\n }\n if (record.responseBodyState === \"pending\") {\n record.responseBodyState = \"failed\";\n record.responseBodyError =\n \"response body capture is unavailable because the page is closed\";\n }\n return;\n }\n await this.materializeNetworkRecordBodies(record, controller);\n }),\n ),\n input.signal,\n );\n\n return records.map((record) => clone(record as NetworkRecord));\n }\n\n async getCookies(input: {\n readonly sessionRef: SessionRef;\n readonly urls?: readonly string[];\n }): Promise<readonly CookieRecord[]> {\n const session = this.requireSession(input.sessionRef);\n const cookies = await session.context.cookies(input.urls ?? []);\n return cookies.map((cookie) => {\n const sameSite = normalizeSameSite(cookie.sameSite);\n return {\n sessionRef: input.sessionRef,\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n ...(sameSite === undefined ? {} : { sameSite }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n session: cookie.expires === -1,\n ...(cookie.expires === -1 ? { expiresAt: null } : { expiresAt: cookie.expires * 1000 }),\n };\n });\n }\n\n async setCookies(input: {\n readonly sessionRef: SessionRef;\n readonly cookies: readonly CookieRecord[];\n }): Promise<void> {\n const session = this.requireSession(input.sessionRef);\n if (input.cookies.length === 0) {\n return;\n }\n await session.context.addCookies(\n input.cookies.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n ...(cookie.sameSite === undefined\n ? {}\n : { sameSite: toPlaywrightCookieSameSite(cookie.sameSite) }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n expires:\n cookie.session || cookie.expiresAt === undefined || cookie.expiresAt === null\n ? -1\n : Math.max(1, Math.floor(cookie.expiresAt / 1000)),\n })),\n );\n }\n\n async getStorageSnapshot(input: {\n readonly sessionRef: SessionRef;\n readonly includeSessionStorage?: boolean;\n readonly includeIndexedDb?: boolean;\n }): Promise<StorageSnapshot> {\n const session = this.requireSession(input.sessionRef);\n const includeSessionStorage = input.includeSessionStorage ?? true;\n const includeIndexedDb = input.includeIndexedDb ?? true;\n const state = (await session.context.storageState({\n indexedDB: includeIndexedDb,\n })) as ExtendedStorageState;\n\n const origins = includeIndexedDb\n ? await capturePlaywrightStorageOrigins(\n session.context,\n state.origins.map((origin) => origin.origin),\n )\n : state.origins.map((origin) => ({\n origin: origin.origin,\n localStorage: origin.localStorage.map((entry) => ({\n key: entry.name,\n value: entry.value,\n })),\n }));\n\n const sessionStorage = includeSessionStorage\n ? await this.collectSessionStorageSnapshots(session)\n : undefined;\n\n return {\n sessionRef: input.sessionRef,\n capturedAt: Date.now(),\n origins,\n ...(sessionStorage === undefined ? {} : { sessionStorage }),\n };\n }\n\n async evaluatePage(input: {\n readonly pageRef: PageRef;\n readonly script: string;\n readonly args?: readonly unknown[];\n readonly timeoutMs?: number;\n }): Promise<StepResult<unknown>> {\n const controller = this.requirePage(input.pageRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n\n try {\n const result = await withTimeout(\n controller.page.evaluate(\n ({ script, args }) => {\n const evaluated = (0, eval)(script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...args: readonly unknown[]) => unknown)(...(args ?? []));\n }\n return evaluated;\n },\n {\n script: input.script,\n args: input.args ?? [],\n },\n ),\n input.timeoutMs,\n );\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: result,\n });\n } catch (error) {\n throw normalizePlaywrightError(error, controller.pageRef);\n }\n }\n\n async addInitScript(input: BrowserInitScriptInput): Promise<BrowserInitScriptRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.initScripts\")) {\n throw unsupportedCapabilityError(\"instrumentation.initScripts\");\n }\n\n const session = this.requireSession(input.sessionRef);\n const registrationId = `init-script:${randomUUID()}`;\n const evaluator = ({ script, args }: { script: string; args: readonly unknown[] }) => {\n const evaluated = (0, eval)(script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...values: readonly unknown[]) => unknown)(...args);\n }\n return evaluated;\n };\n\n if (input.pageRef !== undefined) {\n const controller = this.requirePage(input.pageRef);\n await controller.page.addInitScript(evaluator, {\n script: input.script,\n args: input.args ?? [],\n });\n } else {\n await session.context.addInitScript(evaluator, {\n script: input.script,\n args: input.args ?? [],\n });\n }\n\n return {\n registrationId,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n };\n }\n\n async registerRoute(input: BrowserRouteRegistrationInput): Promise<BrowserRouteRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.routing\")) {\n throw unsupportedCapabilityError(\"instrumentation.routing\");\n }\n\n const session = this.requireSession(input.sessionRef);\n const routeId = `route:${randomUUID()}`;\n let remaining = input.times ?? Number.POSITIVE_INFINITY;\n\n const handler = async (route: Route, request: Request) => {\n if (remaining <= 0) {\n await route.continue();\n return;\n }\n\n const controller = this.pageByPlaywrightPage.get(request.frame().page());\n if (input.pageRef !== undefined && controller?.pageRef !== input.pageRef) {\n await route.continue();\n return;\n }\n\n const resourceType = normalizeResourceType(request.resourceType());\n if (input.resourceTypes !== undefined && !input.resourceTypes.includes(resourceType)) {\n await route.continue();\n return;\n }\n\n remaining -= 1;\n const decision = await input.handler({\n request: {\n url: request.url(),\n method: request.method(),\n headers: Object.entries(request.headers()).map(([name, value]) => ({ name, value })),\n resourceType,\n ...(controller === undefined ? {} : { pageRef: controller.pageRef }),\n ...(request.postDataBuffer() === null\n ? {}\n : { postData: createBodyPayload(new Uint8Array(request.postDataBuffer()!)) }),\n },\n fetchOriginal: async () => {\n const original = await route.fetch();\n const body = new Uint8Array(await original.body());\n return {\n url: original.url(),\n status: original.status(),\n statusText: original.statusText(),\n headers: original\n .headersArray()\n .map((header) => ({ name: header.name, value: header.value })),\n ...(body.byteLength === 0 ? {} : { body: createBodyPayload(body) }),\n redirected: original.url() !== request.url(),\n };\n },\n });\n\n switch (decision.kind) {\n case \"continue\":\n await route.continue();\n return;\n case \"abort\":\n await route.abort(decision.errorCode as never | undefined);\n return;\n case \"fulfill\": {\n const headers =\n decision.headers === undefined\n ? undefined\n : Object.fromEntries(decision.headers.map((header) => [header.name, header.value]));\n const body = decision.body === undefined ? undefined : Buffer.from(decision.body.bytes);\n await route.fulfill({\n status: decision.status ?? 200,\n ...(decision.contentType === undefined ? {} : { contentType: decision.contentType }),\n ...(headers === undefined ? {} : { headers }),\n ...(body === undefined ? {} : { body }),\n });\n }\n }\n };\n\n await session.context.route(input.urlPattern, handler);\n\n return {\n routeId,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n };\n }\n\n async executeRequest(input: {\n readonly sessionRef: SessionRef;\n readonly request: SessionTransportRequest;\n readonly signal?: AbortSignal;\n }): Promise<StepResult<SessionTransportResponse>> {\n const session = this.requireSession(input.sessionRef);\n const startedAt = Date.now();\n const pageRef = session.activePageRef ?? Array.from(session.pageRefs)[0];\n const controller = pageRef === undefined ? undefined : this.pages.get(pageRef);\n const mainFrame = controller === undefined ? undefined : this.requireMainFrame(controller);\n\n const headersObject = Object.fromEntries(\n (input.request.headers ?? []).map((header) => [header.name, header.value]),\n );\n const requestBodyBytes =\n input.request.body === undefined ? undefined : Buffer.from(input.request.body.bytes);\n\n let response: Awaited<ReturnType<BrowserContext[\"request\"][\"fetch\"]>>;\n try {\n input.signal?.throwIfAborted?.();\n response = await raceWithAbort(\n session.context.request.fetch(input.request.url, {\n method: input.request.method,\n headers: headersObject,\n ...(requestBodyBytes === undefined ? {} : { data: requestBodyBytes }),\n failOnStatusCode: false,\n ...(input.request.timeoutMs === undefined ? {} : { timeout: input.request.timeoutMs }),\n ...(input.request.followRedirects === false ? { maxRedirects: 0 } : {}),\n }),\n input.signal,\n );\n } catch (error) {\n if (pageRef !== undefined) {\n throw normalizePlaywrightError(error, pageRef);\n }\n throw createBrowserCoreError(\n \"operation-failed\",\n `session ${input.sessionRef} failed to execute a session HTTP request`,\n );\n }\n\n const responseHeaders = (await response.headersArray()).map((header) =>\n createHeaderEntry(header.name, header.value),\n );\n const responseContentType = responseHeaders.find(\n (header) => header.name.toLowerCase() === \"content-type\",\n )?.value;\n let responseBody: ReturnType<typeof captureBodyPayload> | undefined;\n const responseBodySkipReason = getResponseBodySkipReasonForMetadata({\n method: input.request.method.toUpperCase(),\n status: response.status(),\n resourceType: \"fetch\",\n url: response.url(),\n captureState: \"complete\",\n });\n try {\n responseBody =\n responseBodySkipReason === undefined\n ? captureBodyPayload(\n await response.body(),\n responseContentType ?? undefined,\n this.bodyCaptureLimitBytes,\n )\n : undefined;\n } catch {\n responseBody = undefined;\n }\n\n const requestId = createNetworkRequestId(`transport-${++this.requestCounter}`);\n const record: NetworkRecordState = {\n kind: \"http\",\n requestId,\n sessionRef: input.sessionRef,\n cdpRequestId: undefined,\n pageRef,\n frameRef: mainFrame?.frameRef,\n documentRef: mainFrame?.currentDocument.documentRef,\n method: input.request.method.toUpperCase(),\n url: input.request.url,\n requestHeaders: (input.request.headers ?? []).map((header) =>\n createHeaderEntry(header.name, header.value),\n ),\n responseHeaders,\n status: response.status(),\n statusText: response.statusText(),\n resourceType: \"fetch\",\n redirectFromRequestId: undefined,\n redirectToRequestId: undefined,\n navigationRequest: false,\n timing: undefined,\n transfer: undefined,\n source: undefined,\n captureState: \"complete\",\n requestBodyState: input.request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: responseBody === undefined ? \"skipped\" : \"complete\",\n requestBodySkipReason: input.request.body === undefined ? \"not-present\" : undefined,\n responseBodySkipReason:\n responseBody === undefined\n ? (responseBodySkipReason ?? \"not-present-or-unavailable\")\n : undefined,\n requestBodyError: undefined,\n responseBodyError: undefined,\n requestBody: input.request.body === undefined ? undefined : clone(input.request.body),\n responseBody,\n };\n session.networkRecords.push(record);\n\n return this.createStepResult(input.sessionRef, pageRef, startedAt, {\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(mainFrame === undefined ? {} : { documentRef: mainFrame.currentDocument.documentRef }),\n ...(mainFrame === undefined\n ? {}\n : { documentEpoch: mainFrame.currentDocument.documentEpoch }),\n events: controller === undefined ? [] : this.drainQueuedEvents(controller.pageRef),\n data: {\n url: response.url(),\n status: response.status(),\n statusText: response.statusText(),\n headers: responseHeaders,\n ...(responseBody === undefined ? {} : { body: responseBody }),\n redirected: response.url() !== input.request.url,\n },\n });\n }\n\n private async handleContextPage(session: SessionState, page: Page): Promise<void> {\n if (session.lifecycleState !== \"open\") {\n return;\n }\n const registration = session.pendingRegistrations.shift();\n try {\n const controller = await this.initializePageController(\n session,\n page,\n registration?.openerPageRef,\n false,\n );\n registration?.resolve(controller);\n } catch (error) {\n registration?.reject(error);\n throw error;\n }\n }\n\n private async handleAttachedInitialPage(session: SessionState, page: Page): Promise<void> {\n if (session.lifecycleState !== \"open\") {\n return;\n }\n if (this.pageByPlaywrightPage.has(page)) {\n return;\n }\n if (this.contextOptions?.viewport !== undefined && this.contextOptions.viewport !== null) {\n await page.setViewportSize(this.contextOptions.viewport);\n }\n await this.initializePageController(session, page, undefined, true);\n }\n\n private async initializePageController(\n session: SessionState,\n page: Page,\n forcedOpenerPageRef?: PageRef,\n externallyOwned = false,\n ): Promise<PageController> {\n const cdp = await session.context.newCDPSession(page);\n const pageRef =\n this.preassignedPopupPageRefs.get(page) ?? createPageRef(`playwright-${++this.pageCounter}`);\n this.preassignedPopupPageRefs.delete(page);\n const controller: PageController = {\n pageRef,\n sessionRef: session.sessionRef,\n page,\n cdp,\n externallyOwned,\n queuedEvents: [],\n framesByCdpId: new Map(),\n frameBindings: new WeakMap(),\n documentsByRef: new Map(),\n networkByRequest: new WeakMap(),\n networkByCdpRequestId: new Map(),\n requestBodyTasks: new Map(),\n responseBodyTasks: new Map(),\n backgroundTasks: new Set(),\n domUpdateTask: undefined,\n backgroundError: undefined,\n settleTrackerRegistered: false,\n openerPageRef: undefined,\n mainFrameRef: undefined,\n lifecycleState: \"open\",\n frozen: false,\n explicitCloseInFlight: false,\n lastKnownTitle: \"\",\n };\n\n this.pages.set(pageRef, controller);\n this.pageByPlaywrightPage.set(page, controller);\n session.pageRefs.add(pageRef);\n session.activePageRef = pageRef;\n\n await cdp.send(\"Page.enable\", { enableFileChooserOpenedEvent: true });\n await cdp.send(\"Network.enable\");\n await cdp.send(\"Runtime.enable\");\n await cdp.send(\"DOM.enable\", { includeWhitespace: \"none\" });\n await cdp.send(\"DOMStorage.enable\");\n await cdp.send(\"DOM.getDocument\", { depth: 0 });\n await this.installRuntimeEventRecorder(page);\n await this.actionSettler.installTracker(controller);\n\n cdp.on(\"Page.frameAttached\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFrameAttached(controller, payload.frameId, payload.parentFrameId),\n ),\n );\n cdp.on(\"Page.frameDetached\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFrameDetached(controller, payload.frameId),\n ),\n );\n cdp.on(\"Page.frameNavigated\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFrameNavigated(controller, payload.frame),\n ),\n );\n cdp.on(\"Page.navigatedWithinDocument\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNavigatedWithinDocument(controller, payload.frameId, payload.url),\n ),\n );\n cdp.on(\"Page.fileChooserOpened\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleFileChooserOpened(controller, payload.mode),\n ),\n );\n cdp.on(\"Network.requestWillBeSent\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkRequestWillBeSent(controller, payload),\n ),\n );\n cdp.on(\"Network.responseReceived\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkResponseReceived(controller, payload),\n ),\n );\n cdp.on(\"Network.responseReceivedExtraInfo\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkResponseReceivedExtraInfo(controller, payload),\n ),\n );\n cdp.on(\"Network.loadingFinished\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkLoadingFinished(controller, payload),\n ),\n );\n cdp.on(\"Network.loadingFailed\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleNetworkLoadingFailed(controller, payload),\n ),\n );\n cdp.on(\"DOM.documentUpdated\", () =>\n this.runControllerEvent(controller, () => this.handleDocumentUpdated(controller)),\n );\n cdp.on(\"Runtime.consoleAPICalled\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleRuntimeConsole(controller, payload as RuntimeConsoleApiCalledPayload),\n ),\n );\n cdp.on(\"Runtime.exceptionThrown\", (payload) =>\n this.runControllerEvent(controller, () =>\n this.handleRuntimeException(controller, payload as RuntimeExceptionThrownPayload),\n ),\n );\n page.on(\"popup\", (popupPage) =>\n this.runControllerEvent(controller, () => {\n const popupPageRef = createPageRef(`playwright-${++this.pageCounter}`);\n this.preassignedPopupPageRefs.set(popupPage, popupPageRef);\n this.pendingPopupOpeners.set(popupPage, controller.pageRef);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"popup-opened\">({\n kind: \"popup-opened\",\n sessionRef: controller.sessionRef,\n pageRef: popupPageRef,\n openerPageRef: controller.pageRef,\n }),\n );\n }),\n );\n page.on(\"dialog\", (dialog) =>\n this.runControllerEvent(controller, () => this.handleDialog(controller, dialog)),\n );\n page.on(\"download\", (download) =>\n this.runControllerEvent(controller, () => this.handleDownload(controller, download)),\n );\n page.on(\"request\", (request) =>\n this.runControllerEvent(controller, () => this.handlePlaywrightRequest(controller, request)),\n );\n page.on(\"response\", (response) =>\n this.runControllerEvent(controller, () =>\n this.handlePlaywrightResponse(controller, response),\n ),\n );\n page.on(\"domcontentloaded\", () =>\n this.runControllerEvent(controller, () => this.handlePageDomContentLoaded(controller)),\n );\n page.on(\"close\", () => this.handleUnexpectedPageClose(controller));\n\n const frameTree = await cdp.send(\"Page.getFrameTree\");\n this.syncFrameTree(controller, frameTree.frameTree);\n this.bindPlaywrightFrames(controller, frameTree.frameTree, page.mainFrame());\n await this.reconcileDocumentEpochs(controller);\n controller.lastKnownTitle = await this.readTitle(page, controller.lastKnownTitle);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"page-created\">({\n kind: \"page-created\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n }),\n );\n\n if (forcedOpenerPageRef !== undefined) {\n controller.openerPageRef = forcedOpenerPageRef;\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"popup-opened\">({\n kind: \"popup-opened\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n openerPageRef: forcedOpenerPageRef,\n }),\n );\n } else {\n const pendingOpenerPageRef = this.pendingPopupOpeners.get(page);\n if (pendingOpenerPageRef !== undefined) {\n this.pendingPopupOpeners.delete(page);\n }\n const opener =\n pendingOpenerPageRef !== undefined ? null : await page.opener().catch(() => null);\n const openerController =\n pendingOpenerPageRef !== undefined\n ? this.pages.get(pendingOpenerPageRef)\n : opener\n ? this.pageByPlaywrightPage.get(opener)\n : undefined;\n if (openerController) {\n controller.openerPageRef = openerController.pageRef;\n }\n }\n\n return controller;\n }\n\n private handleFrameAttached(\n controller: PageController,\n frameId: string,\n parentFrameId: string,\n ): void {\n if (controller.framesByCdpId.has(frameId)) {\n return;\n }\n const parent = controller.framesByCdpId.get(parentFrameId);\n const frameRef = createFrameRef(`playwright-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`playwright-${++this.documentCounter}`);\n const document: DocumentState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: frameId,\n documentRef,\n documentEpoch: createDocumentEpoch(0),\n url: \"about:blank\",\n domContentLoadedAt: undefined,\n parentDocumentRef: parent?.currentDocument.documentRef,\n nodeRefsByBackendNodeId: new Map(),\n backendNodeIdsByNodeRef: new Map(),\n domTreeSignature: undefined,\n };\n const frame: FrameState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: frameId,\n parentFrameRef: parent?.frameRef,\n name: undefined,\n isMainFrame: false,\n currentDocument: document,\n };\n controller.framesByCdpId.set(frameId, frame);\n controller.documentsByRef.set(documentRef, document);\n this.frames.set(frameRef, frame);\n this.documents.set(documentRef, document);\n this.retiredDocuments.delete(documentRef);\n this.trackBackgroundTask(controller, this.refreshFrameBindings(controller));\n }\n\n private handleFrameDetached(controller: PageController, frameId: string): void {\n const root = controller.framesByCdpId.get(frameId);\n if (!root) {\n return;\n }\n const descendants = Array.from(controller.framesByCdpId.values()).filter((frame) =>\n this.isDescendantFrame(controller, frame, root.frameRef),\n );\n for (const frame of descendants) {\n this.retireDocument(frame.currentDocument.documentRef);\n this.frames.delete(frame.frameRef);\n controller.framesByCdpId.delete(frame.cdpFrameId);\n controller.documentsByRef.delete(frame.currentDocument.documentRef);\n }\n this.retireDocument(root.currentDocument.documentRef);\n this.frames.delete(root.frameRef);\n controller.framesByCdpId.delete(root.cdpFrameId);\n controller.documentsByRef.delete(root.currentDocument.documentRef);\n this.trackBackgroundTask(controller, this.refreshFrameBindings(controller));\n }\n\n private handleFrameNavigated(controller: PageController, frame: FrameDescriptor): void {\n if (!controller.framesByCdpId.has(frame.id)) {\n this.handleFrameAttached(controller, frame.id, frame.parentId ?? \"\");\n }\n const frameState = controller.framesByCdpId.get(frame.id);\n if (!frameState) {\n return;\n }\n const nextDocumentRef = createDocumentRef(`playwright-${++this.documentCounter}`);\n const parent = frame.parentId ? controller.framesByCdpId.get(frame.parentId) : undefined;\n const nextDocument: DocumentState = {\n pageRef: controller.pageRef,\n frameRef: frameState.frameRef,\n cdpFrameId: frame.id,\n documentRef: nextDocumentRef,\n documentEpoch: createDocumentEpoch(0),\n url: combineFrameUrl(frame.url, frame.urlFragment),\n domContentLoadedAt: undefined,\n parentDocumentRef: parent?.currentDocument.documentRef,\n nodeRefsByBackendNodeId: new Map(),\n backendNodeIdsByNodeRef: new Map(),\n domTreeSignature: undefined,\n };\n this.retireDocument(frameState.currentDocument.documentRef);\n frameState.currentDocument = nextDocument;\n frameState.parentFrameRef = parent?.frameRef;\n frameState.name = frame.name;\n frameState.isMainFrame = frame.parentId === undefined;\n if (frame.parentId === undefined) {\n controller.mainFrameRef = frameState.frameRef;\n }\n controller.documentsByRef.set(nextDocumentRef, nextDocument);\n this.documents.set(nextDocumentRef, nextDocument);\n this.retiredDocuments.delete(nextDocumentRef);\n this.trackBackgroundTask(controller, this.refreshFrameBindings(controller));\n this.queueDocumentReconciliation(controller);\n }\n\n private handleNavigatedWithinDocument(\n controller: PageController,\n frameId: string,\n url: string,\n ): void {\n const frame = controller.framesByCdpId.get(frameId);\n if (!frame) {\n return;\n }\n frame.currentDocument.url = url;\n }\n\n private handleDocumentUpdated(controller: PageController): void {\n this.queueDocumentReconciliation(controller);\n }\n\n private handlePageDomContentLoaded(controller: PageController): void {\n const mainFrame =\n controller.mainFrameRef === undefined ? undefined : this.frames.get(controller.mainFrameRef);\n if (mainFrame === undefined) {\n return;\n }\n mainFrame.currentDocument.domContentLoadedAt = Date.now();\n }\n\n private syncFrameTree(controller: PageController, tree: FrameTreeNode): void {\n const visit = (node: FrameTreeNode, parentFrameRef?: FrameRef): void => {\n const existing = controller.framesByCdpId.get(node.frame.id);\n if (!existing) {\n const frameRef = createFrameRef(`playwright-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`playwright-${++this.documentCounter}`);\n const document: DocumentState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: node.frame.id,\n documentRef,\n documentEpoch: createDocumentEpoch(0),\n url: combineFrameUrl(node.frame.url, node.frame.urlFragment),\n domContentLoadedAt: undefined,\n parentDocumentRef:\n parentFrameRef === undefined\n ? undefined\n : this.requireFrame(parentFrameRef).currentDocument.documentRef,\n nodeRefsByBackendNodeId: new Map(),\n backendNodeIdsByNodeRef: new Map(),\n domTreeSignature: undefined,\n };\n const frame: FrameState = {\n pageRef: controller.pageRef,\n frameRef,\n cdpFrameId: node.frame.id,\n parentFrameRef,\n name: node.frame.name,\n isMainFrame: parentFrameRef === undefined,\n currentDocument: document,\n };\n controller.framesByCdpId.set(node.frame.id, frame);\n controller.documentsByRef.set(documentRef, document);\n this.frames.set(frameRef, frame);\n this.documents.set(documentRef, document);\n this.retiredDocuments.delete(documentRef);\n if (parentFrameRef === undefined) {\n controller.mainFrameRef = frameRef;\n }\n } else {\n existing.parentFrameRef = parentFrameRef;\n existing.name = node.frame.name;\n existing.isMainFrame = parentFrameRef === undefined;\n existing.currentDocument.url = combineFrameUrl(node.frame.url, node.frame.urlFragment);\n if (parentFrameRef === undefined) {\n controller.mainFrameRef = existing.frameRef;\n }\n }\n\n const current = controller.framesByCdpId.get(node.frame.id);\n for (const child of node.childFrames ?? []) {\n visit(child, current?.frameRef);\n }\n };\n\n visit(tree);\n }\n\n private async refreshFrameBindings(controller: PageController): Promise<void> {\n const frameTree = await controller.cdp.send(\"Page.getFrameTree\");\n this.bindPlaywrightFrames(controller, frameTree.frameTree, controller.page.mainFrame());\n }\n\n private bindPlaywrightFrames(\n controller: PageController,\n tree: FrameTreeNode,\n frame: Frame,\n ): void {\n const frameState = controller.framesByCdpId.get(tree.frame.id);\n if (frameState) {\n controller.frameBindings.set(frame, frameState.frameRef);\n }\n const treeChildren = tree.childFrames ?? [];\n const playwrightChildren = frame.childFrames();\n const length = Math.min(treeChildren.length, playwrightChildren.length);\n for (let index = 0; index < length; index += 1) {\n const nextTree = treeChildren[index];\n const nextFrame = playwrightChildren[index];\n if (nextTree && nextFrame) {\n this.bindPlaywrightFrames(controller, nextTree, nextFrame);\n }\n }\n }\n\n private handleRuntimeConsole(\n controller: PageController,\n payload: RuntimeConsoleApiCalledPayload,\n ): void {\n const callFrame = payload.stackTrace?.callFrames?.[0];\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"console\">({\n kind: \"console\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n level: normalizeRuntimeConsoleLevel(payload.type),\n text: formatRuntimeConsoleText(payload),\n location: {\n url: callFrame?.url ?? \"\",\n lineNumber: callFrame?.lineNumber ?? 0,\n columnNumber: callFrame?.columnNumber ?? 0,\n },\n }),\n );\n }\n\n private async handleDialog(controller: PageController, dialog: Dialog): Promise<void> {\n const mainFrame = this.requireMainFrame(controller);\n const dialogRef = createDialogRef(`playwright-${++this.eventCounter}`);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"dialog-opened\">({\n kind: \"dialog-opened\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n dialogRef,\n dialogType: normalizeDialogType(dialog.type()),\n message: dialog.message(),\n ...(dialog.defaultValue().length === 0 ? {} : { defaultValue: dialog.defaultValue() }),\n }),\n );\n await dialog.dismiss().catch(() => {});\n }\n\n private async handleDownload(controller: PageController, download: Download): Promise<void> {\n const mainFrame = this.requireMainFrame(controller);\n const downloadRef = createDownloadRef(`playwright-${++this.eventCounter}`);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"download-started\">({\n kind: \"download-started\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n downloadRef,\n url: download.url(),\n suggestedFilename: download.suggestedFilename(),\n }),\n );\n\n const task = (async () => {\n const failure = await download.failure();\n let filePath: string | undefined;\n try {\n filePath = await download.path();\n } catch {\n filePath = undefined;\n }\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"download-finished\">({\n kind: \"download-finished\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n downloadRef,\n state: failure === null ? \"completed\" : failure === \"canceled\" ? \"canceled\" : \"failed\",\n ...(filePath === undefined ? {} : { filePath }),\n }),\n );\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private handleFileChooserOpened(\n controller: PageController,\n mode: \"selectSingle\" | \"selectMultiple\",\n ): void {\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"chooser-opened\">({\n kind: \"chooser-opened\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n chooserRef: createChooserRef(`playwright-${++this.eventCounter}`),\n chooserType: \"file\",\n multiple: mode === \"selectMultiple\",\n }),\n );\n }\n\n private handleRuntimeException(\n controller: PageController,\n payload: RuntimeExceptionThrownPayload,\n ): void {\n const details = payload.exceptionDetails;\n const message = formatRuntimeExceptionMessage(details);\n const stack = formatRuntimeExceptionStack(details);\n this.queueEvent(\n controller.pageRef,\n this.createEvent<\"page-error\">({\n kind: \"page-error\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n message,\n ...(stack === undefined ? {} : { stack }),\n }),\n );\n }\n\n private handleUnexpectedPageClose(controller: PageController): void {\n controller.lifecycleState = \"closed\";\n if (\n !controller.explicitCloseInFlight &&\n controller.openerPageRef &&\n this.pages.has(controller.openerPageRef)\n ) {\n this.queueEvent(\n controller.openerPageRef,\n this.createEvent<\"page-closed\">({\n kind: \"page-closed\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n }),\n );\n }\n this.cleanupPageController(controller);\n }\n\n private handleNetworkRequestWillBeSent(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly loaderId?: string;\n readonly type?: string;\n readonly frameId?: string;\n readonly request: {\n readonly url: string;\n readonly method: string;\n readonly headers?: Record<string, unknown>;\n readonly hasPostData?: boolean;\n readonly postData?: string;\n };\n readonly initiator?: {\n readonly type?: string;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly stack?: {\n readonly callFrames?: ReadonlyArray<{\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly functionName?: string;\n }>;\n };\n };\n readonly redirectResponse?: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers?: Record<string, unknown>;\n readonly protocol?: string;\n readonly remoteIPAddress?: string;\n readonly remotePort?: number;\n readonly fromDiskCache?: boolean;\n readonly fromServiceWorker?: boolean;\n };\n },\n ): void {\n const session = this.sessions.get(controller.sessionRef);\n if (!session || session.lifecycleState !== \"open\" || controller.lifecycleState !== \"open\") {\n return;\n }\n const prior = controller.networkByCdpRequestId.get(payload.requestId);\n let redirectFromRequestId: NetworkRecordState[\"requestId\"] | undefined;\n if (prior && payload.redirectResponse) {\n this.applyCdpResponseMetadata(prior, payload.redirectResponse);\n prior.captureState = \"complete\";\n prior.responseBodyState = \"skipped\";\n prior.responseBodySkipReason = \"redirect-response\";\n prior.responseBodyError = undefined;\n redirectFromRequestId = prior.requestId;\n }\n\n const frameContext = this.resolveNetworkFrameContext(controller, payload.frameId);\n const nextRequestId = createNetworkRequestId(`playwright-${++this.requestCounter}`);\n const requestHeaders = objectHeadersToEntries(payload.request.headers);\n const requestContentType = headerEntryValue(requestHeaders, \"content-type\");\n const postData = payload.request.postData;\n const requestBody =\n typeof postData === \"string\"\n ? captureBodyPayload(\n Buffer.from(postData, \"utf8\"),\n requestContentType,\n this.bodyCaptureLimitBytes,\n )\n : undefined;\n const record: NetworkRecordState = {\n kind: \"http\",\n requestId: nextRequestId,\n sessionRef: controller.sessionRef,\n cdpRequestId: payload.requestId,\n pageRef: frameContext.pageRef,\n frameRef: frameContext.frameRef,\n documentRef: frameContext.documentRef,\n method: payload.request.method,\n url: payload.request.url,\n requestHeaders,\n responseHeaders: [],\n status: undefined,\n statusText: undefined,\n resourceType: normalizeResourceType((payload.type ?? \"other\").toLowerCase()),\n redirectFromRequestId,\n redirectToRequestId: undefined,\n navigationRequest: payload.type === \"Document\",\n timing: undefined,\n transfer: undefined,\n source: undefined,\n captureState: \"pending\",\n requestBodyState:\n requestBody !== undefined\n ? \"complete\"\n : payload.request.hasPostData === true\n ? \"pending\"\n : \"skipped\",\n responseBodyState: \"pending\",\n requestBodySkipReason:\n requestBody === undefined && payload.request.hasPostData !== true\n ? \"not-present\"\n : undefined,\n responseBodySkipReason: undefined,\n requestBodyError: undefined,\n responseBodyError: undefined,\n requestBody,\n responseBody: undefined,\n ...(payload.initiator === undefined\n ? {}\n : { initiator: normalizeNetworkInitiator(payload.initiator) }),\n };\n\n if (prior && payload.redirectResponse) {\n prior.redirectToRequestId = record.requestId;\n }\n\n controller.networkByCdpRequestId.set(payload.requestId, record);\n session.networkRecords.push(record);\n }\n\n private handlePlaywrightRequest(controller: PageController, request: Request): void {\n if (this.bindPlaywrightRequest(controller, request)) {\n this.enrichPlaywrightRequest(controller, request);\n return;\n }\n const task = (async () => {\n for (let attempt = 0; attempt < 5; attempt += 1) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n if (this.bindPlaywrightRequest(controller, request)) {\n this.enrichPlaywrightRequest(controller, request);\n return;\n }\n }\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private handlePlaywrightResponse(controller: PageController, response: Response): void {\n const request = response.request();\n const record = controller.networkByRequest.get(request);\n if (!record) {\n return;\n }\n const task = (async () => {\n const responseHeaders = (await response.headersArray()).map((header) =>\n createHeaderEntry(header.name, header.value),\n );\n if (responseHeaders.length > 0) {\n record.responseHeaders = responseHeaders;\n }\n if (record.source === undefined) {\n const serverAddr = await response.serverAddr();\n record.source = {\n ...(serverAddr === null\n ? {}\n : {\n remoteAddress: {\n ip: serverAddr.ipAddress,\n port: serverAddr.port,\n },\n }),\n fromServiceWorker: response.fromServiceWorker(),\n };\n }\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private bindPlaywrightRequest(controller: PageController, request: Request): boolean {\n const session = this.sessions.get(controller.sessionRef);\n if (!session) {\n return false;\n }\n const record = [...session.networkRecords]\n .reverse()\n .find(\n (entry) =>\n entry.pageRef === controller.pageRef &&\n entry.method === request.method() &&\n entry.url === request.url() &&\n entry.captureState === \"pending\",\n );\n if (!record) {\n return false;\n }\n controller.networkByRequest.set(request, record);\n return true;\n }\n\n private enrichPlaywrightRequest(controller: PageController, request: Request): void {\n const record = controller.networkByRequest.get(request);\n if (!record) {\n return;\n }\n const task = (async () => {\n const requestHeaders = (await request.headersArray()).map((header) =>\n createHeaderEntry(header.name, header.value),\n );\n if (requestHeaders.length > 0) {\n record.requestHeaders = requestHeaders;\n }\n if (record.requestBody === undefined) {\n const contentType = await request.headerValue(\"content-type\");\n const requestBody = captureBodyPayload(\n request.postDataBuffer(),\n contentType ?? undefined,\n this.bodyCaptureLimitBytes,\n );\n if (requestBody !== undefined) {\n record.requestBody = requestBody;\n record.requestBodyState = \"complete\";\n record.requestBodySkipReason = undefined;\n record.requestBodyError = undefined;\n }\n }\n })();\n this.trackBackgroundTask(controller, task);\n }\n\n private handleNetworkResponseReceived(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly response: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers?: Record<string, unknown>;\n readonly protocol?: string;\n readonly remoteIPAddress?: string;\n readonly remotePort?: number;\n readonly fromDiskCache?: boolean;\n readonly fromServiceWorker?: boolean;\n readonly timing?: {\n readonly requestTime: number;\n readonly dnsStart?: number;\n readonly dnsEnd?: number;\n readonly connectStart?: number;\n readonly connectEnd?: number;\n readonly sslStart?: number;\n readonly sslEnd?: number;\n readonly sendStart?: number;\n readonly receiveHeadersStart?: number;\n readonly receiveHeadersEnd?: number;\n readonly workerStart?: number;\n readonly workerReady?: number;\n };\n };\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n this.applyCdpResponseMetadata(record, payload.response);\n record.url = payload.response.url;\n record.timing = normalizeNetworkTiming(payload.response.timing);\n const skipReason = getResponseBodySkipReason(record);\n if (skipReason !== undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = skipReason;\n record.responseBodyError = undefined;\n }\n }\n\n private handleNetworkResponseReceivedExtraInfo(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly headers?: Record<string, unknown>;\n readonly headersText?: string;\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n const parsedFromText = parseRawHeadersText(payload.headersText);\n if (parsedFromText.length > 0) {\n if (\n record.responseHeaders.length === 0 ||\n !record.responseHeaders.some((header) => header.name.toLowerCase() === \"set-cookie\")\n ) {\n record.responseHeaders = parsedFromText;\n }\n return;\n }\n const parsedFromObject = objectHeadersToEntries(payload.headers);\n if (parsedFromObject.length > 0) {\n if (\n record.responseHeaders.length === 0 ||\n !record.responseHeaders.some((header) => header.name.toLowerCase() === \"set-cookie\")\n ) {\n record.responseHeaders = parsedFromObject;\n }\n }\n }\n\n private handleNetworkLoadingFinished(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly encodedDataLength?: number;\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n record.captureState = \"complete\";\n if (record.navigationRequest && record.frameRef) {\n const frame = this.requireFrame(record.frameRef);\n record.documentRef = frame.currentDocument.documentRef;\n }\n record.transfer = {\n ...(record.transfer ?? {}),\n ...(payload.encodedDataLength === undefined\n ? {}\n : { encodedBodyBytes: payload.encodedDataLength }),\n ...(payload.encodedDataLength === undefined\n ? {}\n : { transferSizeBytes: payload.encodedDataLength }),\n ...(record.responseBody === undefined\n ? {}\n : { decodedBodyBytes: record.responseBody.capturedByteLength }),\n };\n if (record.responseBodyState === \"pending\" && getResponseBodySkipReason(record) !== undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = getResponseBodySkipReason(record);\n }\n }\n\n private handleNetworkLoadingFailed(\n controller: PageController,\n payload: {\n readonly requestId: string;\n readonly errorText?: string;\n },\n ): void {\n const record = controller.networkByCdpRequestId.get(payload.requestId);\n if (!record) {\n return;\n }\n record.captureState = \"failed\";\n if (record.responseBodyState === \"pending\") {\n record.responseBodyState = \"failed\";\n record.responseBodyError = payload.errorText ?? \"request failed before response body capture\";\n }\n }\n\n private async collectSessionStorageSnapshots(\n session: SessionState,\n ): Promise<readonly SessionStorageSnapshot[]> {\n const snapshots: SessionStorageSnapshot[] = [];\n for (const pageRef of session.pageRefs) {\n const controller = this.requirePage(pageRef);\n await this.flushDomUpdateTask(controller);\n for (const frame of controller.framesByCdpId.values()) {\n let origin: string;\n try {\n origin = new URL(frame.currentDocument.url).origin;\n } catch {\n continue;\n }\n if (origin === \"null\") {\n continue;\n }\n let storageKey: string;\n try {\n const resolved = await controller.cdp.send(\"Storage.getStorageKey\", {\n frameId: frame.cdpFrameId,\n });\n storageKey = resolved.storageKey;\n } catch {\n continue;\n }\n const storage = await controller.cdp.send(\"DOMStorage.getDOMStorageItems\", {\n storageId: {\n storageKey,\n isLocalStorage: false,\n },\n });\n snapshots.push({\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n origin,\n entries: storage.entries.reduce<StorageEntry[]>((entries, entry) => {\n const [key, value] = entry;\n if (key !== undefined && value !== undefined) {\n entries.push({ key, value });\n }\n return entries;\n }, []),\n });\n }\n }\n return snapshots;\n }\n\n private async buildPageInfo(controller: PageController): Promise<PageInfo> {\n controller.lastKnownTitle = await this.readTitle(controller.page, controller.lastKnownTitle);\n const mainFrame =\n controller.mainFrameRef === undefined ? undefined : this.frames.get(controller.mainFrameRef);\n return {\n pageRef: controller.pageRef,\n sessionRef: controller.sessionRef,\n ...(controller.openerPageRef === undefined\n ? {}\n : { openerPageRef: controller.openerPageRef }),\n url: mainFrame?.currentDocument.url ?? this.readUrl(controller.page, \"about:blank\"),\n title: controller.lastKnownTitle,\n lifecycleState: controller.lifecycleState,\n };\n }\n\n private buildFrameInfo(frame: FrameState): FrameInfo {\n return {\n frameRef: frame.frameRef,\n pageRef: frame.pageRef,\n ...(frame.parentFrameRef === undefined ? {} : { parentFrameRef: frame.parentFrameRef }),\n documentRef: frame.currentDocument.documentRef,\n documentEpoch: frame.currentDocument.documentEpoch,\n url: frame.currentDocument.url,\n ...(frame.name === undefined ? {} : { name: frame.name }),\n isMainFrame: frame.isMainFrame,\n };\n }\n\n private async reconcileDocumentEpochs(controller: PageController): Promise<void> {\n const captured = await capturePageDomSnapshot(controller.cdp, { includeLayout: false });\n for (const frame of controller.framesByCdpId.values()) {\n const rawDocument = findCapturedDocument(captured, frame.cdpFrameId);\n if (!rawDocument) {\n continue;\n }\n updateDocumentTreeSignature(frame.currentDocument, rawDocument, this.retiredDocuments);\n }\n }\n\n private queueDocumentReconciliation(controller: PageController): void {\n const queued = (controller.domUpdateTask ?? Promise.resolve()).then(() =>\n this.reconcileDocumentEpochs(controller),\n );\n const tracked = this.trackBackgroundTask(controller, queued);\n const settled = tracked.finally(() => {\n if (controller.domUpdateTask === settled) {\n controller.domUpdateTask = undefined;\n }\n });\n controller.domUpdateTask = settled;\n }\n\n private async flushDomUpdateTask(controller: PageController): Promise<void> {\n while (controller.domUpdateTask) {\n await controller.domUpdateTask;\n }\n this.throwBackgroundError(controller);\n }\n\n private async captureDomSnapshot(\n controller: PageController,\n document: DocumentState,\n ): Promise<CapturedDomSnapshot> {\n const captured = await capturePageDomSnapshot(controller.cdp, { includeLayout: true });\n const rawDocument = findCapturedDocument(captured, document.cdpFrameId);\n if (!rawDocument) {\n throw createBrowserCoreError(\n \"not-found\",\n `document ${document.documentRef} was not found in the current page snapshot`,\n );\n }\n updateDocumentTreeSignature(document, rawDocument, this.retiredDocuments);\n return {\n capturedAt: captured.capturedAt,\n documents: captured.documents,\n rawDocument,\n shadowBoundariesByBackendNodeId: captured.shadowBoundariesByBackendNodeId,\n strings: captured.strings,\n };\n }\n\n private nodeRefForBackendNode(document: DocumentState, backendNodeId: number): NodeRef {\n const existing = document.nodeRefsByBackendNodeId.get(backendNodeId);\n if (existing) {\n return existing;\n }\n const nodeRef = createNodeRef(`playwright-${++this.nodeCounter}`);\n document.nodeRefsByBackendNodeId.set(backendNodeId, nodeRef);\n document.backendNodeIdsByNodeRef.set(nodeRef, backendNodeId);\n return nodeRef;\n }\n\n private resolveDocumentTarget(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): DocumentState {\n if (input.frameRef && input.documentRef) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either frameRef or documentRef, not both\",\n );\n }\n if (input.documentRef) {\n return this.requireDocument(input.documentRef);\n }\n if (input.frameRef) {\n return this.requireFrame(input.frameRef).currentDocument;\n }\n throw createBrowserCoreError(\"invalid-argument\", \"either frameRef or documentRef is required\");\n }\n\n private requireLiveNode(input: NodeLocator): {\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n } {\n if (this.retiredDocuments.has(input.documentRef)) {\n throw staleNodeRefError(input);\n }\n const document = this.documents.get(input.documentRef);\n if (!document) {\n throw createBrowserCoreError(\"not-found\", `document ${input.documentRef} was not found`, {\n details: { documentRef: input.documentRef },\n });\n }\n if (document.documentEpoch !== input.documentEpoch) {\n throw staleNodeRefError(input);\n }\n const backendNodeId = document.backendNodeIdsByNodeRef.get(input.nodeRef);\n if (backendNodeId === undefined) {\n throw staleNodeRefError(input);\n }\n return {\n controller: this.requirePage(document.pageRef),\n document,\n backendNodeId,\n };\n }\n\n private resolveNetworkFrameContext(\n controller: PageController,\n cdpFrameId: string | undefined,\n ): {\n readonly pageRef: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n } {\n if (cdpFrameId === undefined) {\n return { pageRef: controller.pageRef };\n }\n const frame = controller.framesByCdpId.get(cdpFrameId);\n if (!frame) {\n return { pageRef: controller.pageRef };\n }\n return {\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n documentRef: frame.currentDocument.documentRef,\n };\n }\n\n private resolvePageForNetworkRecord(record: NetworkRecordState): PageController | undefined {\n if (record.pageRef !== undefined) {\n const page = this.pages.get(record.pageRef);\n if (page && page.lifecycleState !== \"closed\") {\n return page;\n }\n }\n const session = this.sessions.get(record.sessionRef);\n if (!session) {\n return undefined;\n }\n for (const pageRef of session.pageRefs) {\n const page = this.pages.get(pageRef);\n if (page && page.lifecycleState !== \"closed\") {\n return page;\n }\n }\n return undefined;\n }\n\n private async materializeNetworkRecordBodies(\n record: NetworkRecordState,\n controller: PageController,\n ): Promise<void> {\n await Promise.all([\n this.materializeRequestBody(record, controller),\n this.materializeResponseBody(record, controller),\n ]);\n }\n\n private async materializeRequestBody(\n record: NetworkRecordState,\n controller: PageController,\n ): Promise<void> {\n if (record.requestBodyState !== \"pending\") {\n return;\n }\n const existing = controller.requestBodyTasks.get(record.requestId);\n if (existing) {\n await existing;\n return;\n }\n const task = (async () => {\n if (record.cdpRequestId === undefined) {\n record.requestBodyState = \"failed\";\n record.requestBodyError = \"request body capture is unavailable without a CDP request id\";\n return;\n }\n try {\n const result = await controller.cdp.send(\"Network.getRequestPostData\", {\n requestId: record.cdpRequestId,\n });\n const contentType = headerEntryValue(record.requestHeaders, \"content-type\");\n record.requestBody =\n typeof result.postData === \"string\"\n ? captureBodyPayload(\n Buffer.from(result.postData, \"utf8\"),\n contentType ?? undefined,\n this.bodyCaptureLimitBytes,\n )\n : undefined;\n if (record.requestBody === undefined) {\n record.requestBodyState = \"skipped\";\n record.requestBodySkipReason = \"not-present\";\n return;\n }\n record.requestBodyState = \"complete\";\n record.requestBodySkipReason = undefined;\n record.requestBodyError = undefined;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (/No post data|No resource with given identifier|No data found/i.test(message)) {\n record.requestBodyState = \"skipped\";\n record.requestBodySkipReason = \"not-present\";\n record.requestBodyError = undefined;\n return;\n }\n record.requestBodyState = \"failed\";\n record.requestBodyError = message;\n }\n })();\n controller.requestBodyTasks.set(record.requestId, task);\n try {\n await task;\n } finally {\n controller.requestBodyTasks.delete(record.requestId);\n }\n }\n\n private async materializeResponseBody(\n record: NetworkRecordState,\n controller: PageController,\n ): Promise<void> {\n if (record.responseBodyState !== \"pending\") {\n return;\n }\n if (record.captureState === \"pending\") {\n return;\n }\n const skipReason = getResponseBodySkipReason(record);\n if (skipReason !== undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = skipReason;\n record.responseBodyError = undefined;\n return;\n }\n const existing = controller.responseBodyTasks.get(record.requestId);\n if (existing) {\n await existing;\n return;\n }\n const task = (async () => {\n if (record.cdpRequestId === undefined) {\n record.responseBodyState = \"failed\";\n record.responseBodyError = \"response body capture is unavailable without a CDP request id\";\n return;\n }\n try {\n const result = await controller.cdp.send(\"Network.getResponseBody\", {\n requestId: record.cdpRequestId,\n });\n const contentType = headerEntryValue(record.responseHeaders, \"content-type\");\n const bytes = result.base64Encoded\n ? Buffer.from(result.body, \"base64\")\n : Buffer.from(result.body, \"utf8\");\n const responseBody = captureBodyPayload(\n bytes,\n contentType ?? undefined,\n this.bodyCaptureLimitBytes,\n );\n if (responseBody === undefined) {\n record.responseBodyState = \"skipped\";\n record.responseBodySkipReason = \"not-present\";\n return;\n }\n record.responseBody = responseBody;\n record.responseBodyState = \"complete\";\n record.responseBodySkipReason = undefined;\n record.responseBodyError = undefined;\n record.transfer = {\n ...(record.transfer ?? {}),\n decodedBodyBytes: responseBody.capturedByteLength,\n ...(record.transfer?.encodedBodyBytes === undefined\n ? {}\n : { encodedBodyBytes: record.transfer.encodedBodyBytes }),\n ...(record.transfer?.requestHeadersBytes === undefined\n ? {}\n : { requestHeadersBytes: record.transfer.requestHeadersBytes }),\n ...(record.transfer?.responseHeadersBytes === undefined\n ? {}\n : { responseHeadersBytes: record.transfer.responseHeadersBytes }),\n ...(record.transfer?.transferSizeBytes === undefined\n ? {}\n : { transferSizeBytes: record.transfer.transferSizeBytes }),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (/No resource with given identifier|No data found|Could not load body/i.test(message)) {\n record.responseBodyState = \"failed\";\n record.responseBodyError = message;\n return;\n }\n record.responseBodyState = \"failed\";\n record.responseBodyError = message;\n }\n })();\n controller.responseBodyTasks.set(record.requestId, task);\n try {\n await task;\n } finally {\n controller.responseBodyTasks.delete(record.requestId);\n }\n }\n\n private applyCdpResponseMetadata(\n record: NetworkRecordState,\n response: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers?: Record<string, unknown>;\n readonly protocol?: string;\n readonly remoteIPAddress?: string;\n readonly remotePort?: number;\n readonly fromDiskCache?: boolean;\n readonly fromServiceWorker?: boolean;\n },\n ): void {\n record.url = response.url;\n record.status = response.status;\n record.statusText = response.statusText;\n const responseHeaders = objectHeadersToEntries(response.headers);\n if (\n record.responseHeaders.length === 0 ||\n !record.responseHeaders.some((header) => header.name.toLowerCase() === \"set-cookie\")\n ) {\n record.responseHeaders = responseHeaders;\n }\n record.source = {\n ...(response.protocol === undefined ? {} : { protocol: response.protocol }),\n ...(response.remoteIPAddress === undefined && response.remotePort === undefined\n ? {}\n : {\n remoteAddress: {\n ...(response.remoteIPAddress === undefined ? {} : { ip: response.remoteIPAddress }),\n ...(response.remotePort === undefined ? {} : { port: response.remotePort }),\n },\n }),\n ...(response.fromDiskCache === undefined ? {} : { fromDiskCache: response.fromDiskCache }),\n ...(response.fromServiceWorker === undefined\n ? {}\n : { fromServiceWorker: response.fromServiceWorker }),\n };\n }\n\n private requireMainFrame(controller: PageController): FrameState {\n if (!controller.mainFrameRef) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `page ${controller.pageRef} has no main frame`,\n );\n }\n return this.requireFrame(controller.mainFrameRef);\n }\n\n private requireSession(sessionRef: SessionRef): SessionState {\n const session = this.sessions.get(sessionRef);\n if (!session) {\n throw closedSessionError(sessionRef);\n }\n return session;\n }\n\n private requirePage(pageRef: PageRef): PageController {\n const page = this.pages.get(pageRef);\n if (!page || page.lifecycleState === \"closed\") {\n throw closedPageError(pageRef);\n }\n this.throwBackgroundError(page);\n return page;\n }\n\n private requireFrame(frameRef: FrameRef): FrameState {\n const frame = this.frames.get(frameRef);\n if (!frame) {\n throw createBrowserCoreError(\"not-found\", `frame ${frameRef} was not found`, {\n details: { frameRef },\n });\n }\n return frame;\n }\n\n private requireLiveFrame(frameRef: FrameRef): Frame {\n const state = this.requireFrame(frameRef);\n const controller = this.requirePage(state.pageRef);\n for (const frame of controller.page.frames()) {\n if (controller.frameBindings.get(frame) === frameRef) {\n return frame;\n }\n }\n\n throw createBrowserCoreError(\"not-found\", `frame ${frameRef} is not attached to a live page`, {\n details: { frameRef },\n });\n }\n\n private requireDocument(documentRef: DocumentRef): DocumentState {\n const document = this.documents.get(documentRef);\n if (!document) {\n throw createBrowserCoreError(\"not-found\", `document ${documentRef} was not found`, {\n details: { documentRef },\n });\n }\n return document;\n }\n\n private cleanupPageController(controller: PageController): void {\n controller.lifecycleState = \"closed\";\n this.pages.delete(controller.pageRef);\n const session = this.sessions.get(controller.sessionRef);\n if (session) {\n session.pageRefs.delete(controller.pageRef);\n if (session.activePageRef === controller.pageRef) {\n session.activePageRef = Array.from(session.pageRefs)[0];\n }\n }\n for (const frame of controller.framesByCdpId.values()) {\n this.frames.delete(frame.frameRef);\n this.documents.delete(frame.currentDocument.documentRef);\n this.retiredDocuments.add(frame.currentDocument.documentRef);\n }\n controller.framesByCdpId.clear();\n controller.documentsByRef.clear();\n controller.networkByCdpRequestId.clear();\n controller.requestBodyTasks.clear();\n controller.responseBodyTasks.clear();\n }\n\n private isControllerAcceptingEvents(controller: PageController): boolean {\n if (controller.lifecycleState !== \"open\" || controller.explicitCloseInFlight) {\n return false;\n }\n const session = this.sessions.get(controller.sessionRef);\n return session?.lifecycleState === \"open\";\n }\n\n private runControllerEvent(\n controller: PageController,\n handler: () => void | Promise<void>,\n ): void {\n if (!this.isControllerAcceptingEvents(controller)) {\n return;\n }\n try {\n const result = handler();\n if (result instanceof Promise) {\n void result.catch((error) => this.handleControllerEventError(controller, error));\n }\n } catch (error) {\n this.handleControllerEventError(controller, error);\n }\n }\n\n private handleControllerEventError(controller: PageController, error: unknown): void {\n if (\n !this.isControllerAcceptingEvents(controller) ||\n shouldIgnoreBackgroundTaskError(controller, error)\n ) {\n return;\n }\n controller.backgroundError ??= normalizePlaywrightError(error, controller.pageRef);\n }\n\n private trackBackgroundTask(controller: PageController, promise: Promise<void>): Promise<void> {\n const tracked = promise.catch((error) => {\n if (shouldIgnoreBackgroundTaskError(controller, error)) {\n return;\n }\n controller.backgroundError ??= normalizePlaywrightError(error, controller.pageRef);\n });\n controller.backgroundTasks.add(tracked);\n void tracked.finally(() => {\n controller.backgroundTasks.delete(tracked);\n });\n return tracked;\n }\n\n private async flushBackgroundTasks(controller: PageController): Promise<void> {\n if (controller.backgroundTasks.size === 0) {\n this.throwBackgroundError(controller);\n return;\n }\n await Promise.all(Array.from(controller.backgroundTasks));\n this.throwBackgroundError(controller);\n }\n\n private async flushPendingPageTasks(sessionRef: SessionRef): Promise<void> {\n const session = this.sessions.get(sessionRef);\n if (!session) {\n return;\n }\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n const pending = Array.from(session.pendingPageTasks);\n if (pending.length === 0) {\n return;\n }\n await Promise.all(pending);\n }\n }\n\n private throwBackgroundError(controller: PageController): void {\n if (controller.backgroundError) {\n throw controller.backgroundError;\n }\n }\n\n private createEvent<TKind extends StepEvent[\"kind\"]>(\n value: Omit<Extract<StepEvent, { readonly kind: TKind }>, \"eventId\" | \"timestamp\"> & {\n readonly timestamp?: number;\n },\n ): Extract<StepEvent, { readonly kind: TKind }> {\n const { timestamp, ...event } = value;\n return {\n ...event,\n eventId: `event:${++this.eventCounter}`,\n timestamp: timestamp ?? Date.now(),\n } as Extract<StepEvent, { readonly kind: TKind }>;\n }\n\n private queueEvent(pageRef: PageRef, event: StepEvent): void {\n const controller = this.pages.get(pageRef);\n if (!controller) {\n return;\n }\n controller.queuedEvents.push(event);\n }\n\n private async installRuntimeEventRecorder(page: Page): Promise<void> {\n await page.addInitScript({\n content: PLAYWRIGHT_RUNTIME_EVENT_RECORDER_SOURCE,\n });\n await page.evaluate(PLAYWRIGHT_RUNTIME_EVENT_RECORDER_SOURCE).catch(() => undefined);\n }\n\n private async drainInstrumentedRuntimeEvents(\n controller: PageController,\n ): Promise<readonly StepEvent[]> {\n const recorded = await Promise.all(\n controller.page.frames().map(async (frame) => {\n const events = await frame\n .evaluate<RecordedPageEvent[]>(() => {\n const recorder = (\n globalThis as typeof globalThis & {\n __opensteerRuntimeEventRecorder?: {\n readonly drain?: () => RecordedPageEvent[];\n };\n }\n ).__opensteerRuntimeEventRecorder;\n return recorder?.drain?.() ?? [];\n })\n .catch(() => []);\n return events;\n }),\n );\n\n return mergeDistinctStepEvents(\n recorded.flatMap((events) =>\n events.map((event) =>\n this.createEvent<\"page-error\">({\n kind: \"page-error\",\n sessionRef: controller.sessionRef,\n pageRef: controller.pageRef,\n message: event.message ?? \"Uncaught exception\",\n ...(event.stack === undefined ? {} : { stack: event.stack }),\n timestamp: event.timestamp,\n }),\n ),\n ),\n );\n }\n\n private drainQueuedEvents(pageRef: PageRef): StepEvent[] {\n const controller = this.requirePage(pageRef);\n const events = controller.queuedEvents.splice(0, controller.queuedEvents.length);\n return events.map((event) => clone(event));\n }\n\n private createStepResult<TData>(\n sessionRef: SessionRef,\n pageRef: PageRef | undefined,\n startedAt: number,\n input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n readonly events: readonly StepEvent[];\n readonly data: TData;\n },\n ): StepResult<TData> {\n const completedAt = Date.now();\n return {\n stepId: `step:${++this.stepCounter}`,\n sessionRef,\n ...(pageRef === undefined ? {} : { pageRef }),\n ...(input.frameRef === undefined ? {} : { frameRef: input.frameRef }),\n ...(input.documentRef === undefined ? {} : { documentRef: input.documentRef }),\n ...(input.documentEpoch === undefined ? {} : { documentEpoch: input.documentEpoch }),\n startedAt,\n completedAt,\n durationMs: completedAt - startedAt,\n events: input.events.map((event) => clone(event)),\n data: clone(input.data),\n };\n }\n\n private async withModifiers(\n page: Page,\n modifiers: readonly KeyModifier[] | undefined,\n action: () => Promise<void>,\n ): Promise<void> {\n if (!modifiers || modifiers.length === 0) {\n await action();\n return;\n }\n for (const modifier of modifiers) {\n await page.keyboard.down(modifier);\n }\n try {\n await action();\n } finally {\n for (const modifier of [...modifiers].reverse()) {\n await page.keyboard.up(modifier);\n }\n }\n }\n\n private async readTitle(page: Page, fallback: string): Promise<string> {\n try {\n return await page.title();\n } catch {\n return fallback;\n }\n }\n\n private readUrl(page: Page, fallback: string): string {\n try {\n return page.url();\n } catch {\n return fallback;\n }\n }\n\n private retireDocument(documentRef: DocumentRef): void {\n this.documents.delete(documentRef);\n this.retiredDocuments.add(documentRef);\n }\n\n private isDescendantFrame(\n controller: PageController,\n frame: FrameState,\n ancestorFrameRef: FrameRef,\n ): boolean {\n let current = frame.parentFrameRef;\n while (current) {\n if (current === ancestorFrameRef) {\n return true;\n }\n current = this.frames.get(current)?.parentFrameRef;\n }\n return false;\n }\n\n private assertNotDisposed(): void {\n if (this.disposed) {\n throw createBrowserCoreError(\"operation-failed\", \"engine has been disposed\");\n }\n }\n}\n\nfunction toPlaywrightCookieSameSite(value: CookieRecord[\"sameSite\"]): \"Strict\" | \"Lax\" | \"None\" {\n switch (value) {\n case \"strict\":\n return \"Strict\";\n case \"none\":\n return \"None\";\n case \"lax\":\n default:\n return \"Lax\";\n }\n}\n\nexport async function createPlaywrightBrowserCoreEngine(\n options: PlaywrightBrowserCoreEngineOptions = {},\n): Promise<PlaywrightBrowserCoreEngine> {\n return PlaywrightBrowserCoreEngine.create(options);\n}\n\nexport async function connectPlaywrightChromiumBrowser(input: {\n readonly url: string;\n readonly headers?: Readonly<Record<string, string>>;\n}): Promise<Browser> {\n return chromium.connectOverCDP({\n endpointURL: input.url,\n ...(input.headers === undefined ? {} : { headers: input.headers }),\n });\n}\n\nexport async function disconnectPlaywrightChromiumBrowser(browser: Browser): Promise<void> {\n void browser.close().catch(() => undefined);\n}\n\nfunction objectHeadersToEntries(\n headers: Record<string, unknown> | undefined,\n): ReturnType<typeof createHeaderEntry>[] {\n if (!headers) {\n return [];\n }\n return Object.entries(headers).flatMap(([name, value]) => {\n if (typeof value === \"string\" && name.toLowerCase() === \"set-cookie\" && value.includes(\"\\n\")) {\n return value\n .split(\"\\n\")\n .filter((entry) => entry.length > 0)\n .map((entry) => createHeaderEntry(name, entry));\n }\n return [createHeaderEntry(name, stringifyHeaderValue(value))];\n });\n}\n\nfunction stringifyHeaderValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map((entry) => stringifyHeaderValue(entry)).join(\", \");\n }\n return typeof value === \"string\" ? value : String(value ?? \"\");\n}\n\nfunction headerEntryValue(\n headers: readonly { readonly name: string; readonly value: string }[],\n name: string,\n): string | undefined {\n const normalized = name.toLowerCase();\n for (const header of headers) {\n if (header.name.toLowerCase() === normalized) {\n return header.value;\n }\n }\n return undefined;\n}\n\nfunction parseRawHeadersText(value: string | undefined): ReturnType<typeof createHeaderEntry>[] {\n if (value === undefined || value.length === 0) {\n return [];\n }\n return value\n .split(/\\r?\\n/)\n .slice(1)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .flatMap((line) => {\n const index = line.indexOf(\":\");\n if (index <= 0) {\n return [];\n }\n const name = line.slice(0, index).trim();\n const headerValue = line.slice(index + 1).trim();\n return [createHeaderEntry(name, headerValue)];\n });\n}\n\nfunction normalizeNetworkInitiator(initiator: {\n readonly type?: string;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly stack?: {\n readonly callFrames?: ReadonlyArray<{\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly functionName?: string;\n }>;\n };\n}): NonNullable<NetworkRecord[\"initiator\"]> {\n const type =\n initiator.type === \"parser\" ||\n initiator.type === \"script\" ||\n initiator.type === \"preload\" ||\n initiator.type === \"redirect\" ||\n initiator.type === \"user\" ||\n initiator.type === \"service-worker\"\n ? initiator.type\n : \"other\";\n const stackTrace =\n initiator.stack?.callFrames?.map((frame) =>\n [frame.functionName, frame.url, frame.lineNumber, frame.columnNumber]\n .filter((value) => value !== undefined && value !== \"\")\n .join(\" \"),\n ) ?? [];\n return {\n type,\n ...(initiator.url === undefined ? {} : { url: initiator.url }),\n ...(initiator.lineNumber === undefined ? {} : { lineNumber: initiator.lineNumber }),\n ...(initiator.columnNumber === undefined ? {} : { columnNumber: initiator.columnNumber }),\n ...(stackTrace.length === 0 ? {} : { stackTrace }),\n };\n}\n\nfunction normalizeNetworkTiming(\n timing:\n | {\n readonly requestTime: number;\n readonly dnsStart?: number;\n readonly dnsEnd?: number;\n readonly connectStart?: number;\n readonly connectEnd?: number;\n readonly sslStart?: number;\n readonly sslEnd?: number;\n readonly sendStart?: number;\n readonly receiveHeadersStart?: number;\n readonly receiveHeadersEnd?: number;\n readonly workerStart?: number;\n readonly workerReady?: number;\n }\n | undefined,\n): NetworkRecord[\"timing\"] | undefined {\n if (timing === undefined) {\n return undefined;\n }\n const start = timing.requestTime * 1000;\n const at = (value: number | undefined) =>\n value === undefined || value < 0 ? undefined : start + value;\n const normalized: {\n requestStartMs: number;\n dnsStartMs?: number;\n dnsEndMs?: number;\n connectStartMs?: number;\n connectEndMs?: number;\n sslStartMs?: number;\n sslEndMs?: number;\n requestSentMs?: number;\n responseStartMs?: number;\n responseEndMs?: number;\n workerStartMs?: number;\n workerReadyMs?: number;\n } = {\n requestStartMs: start,\n };\n const dnsStartMs = at(timing.dnsStart);\n const dnsEndMs = at(timing.dnsEnd);\n const connectStartMs = at(timing.connectStart);\n const connectEndMs = at(timing.connectEnd);\n const sslStartMs = at(timing.sslStart);\n const sslEndMs = at(timing.sslEnd);\n const requestSentMs = at(timing.sendStart);\n const responseStartMs = at(timing.receiveHeadersStart);\n const responseEndMs = at(timing.receiveHeadersEnd);\n const workerStartMs = at(timing.workerStart);\n const workerReadyMs = at(timing.workerReady);\n if (dnsStartMs !== undefined) normalized.dnsStartMs = dnsStartMs;\n if (dnsEndMs !== undefined) normalized.dnsEndMs = dnsEndMs;\n if (connectStartMs !== undefined) normalized.connectStartMs = connectStartMs;\n if (connectEndMs !== undefined) normalized.connectEndMs = connectEndMs;\n if (sslStartMs !== undefined) normalized.sslStartMs = sslStartMs;\n if (sslEndMs !== undefined) normalized.sslEndMs = sslEndMs;\n if (requestSentMs !== undefined) normalized.requestSentMs = requestSentMs;\n if (responseStartMs !== undefined) normalized.responseStartMs = responseStartMs;\n if (responseEndMs !== undefined) normalized.responseEndMs = responseEndMs;\n if (workerStartMs !== undefined) normalized.workerStartMs = workerStartMs;\n if (workerReadyMs !== undefined) normalized.workerReadyMs = workerReadyMs;\n return normalized;\n}\n\nfunction getResponseBodySkipReason(record: NetworkRecordState): string | undefined {\n return getResponseBodySkipReasonForMetadata({\n method: record.method,\n status: record.status,\n resourceType: record.resourceType,\n url: record.url,\n captureState: record.captureState,\n });\n}\n\nfunction getResponseBodySkipReasonForMetadata(input: {\n readonly method: string;\n readonly status: number | undefined;\n readonly resourceType: NetworkRecordState[\"resourceType\"];\n readonly url: string;\n readonly captureState: NetworkRecordState[\"captureState\"];\n}): string | undefined {\n if (input.captureState === \"failed\") {\n return \"request-failed\";\n }\n if (input.method.toUpperCase() === \"HEAD\") {\n return \"head-request\";\n }\n if (input.status !== undefined && [204, 205, 304].includes(input.status)) {\n return \"status-without-body\";\n }\n if (input.status !== undefined && input.status >= 300 && input.status < 400) {\n return \"redirect-response\";\n }\n if (\n input.resourceType === \"preflight\" ||\n input.resourceType === \"websocket\" ||\n input.resourceType === \"event-stream\"\n ) {\n return \"unsupported-resource-type\";\n }\n if (/^(blob|data):/i.test(input.url)) {\n return \"unsupported-url-scheme\";\n }\n return undefined;\n}\n\nfunction raceWithAbort<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n signal.throwIfAborted?.();\n\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n signal.addEventListener(\n \"abort\",\n () => {\n reject(signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\"));\n },\n { once: true },\n );\n }),\n ]);\n}\n\nfunction withTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined): Promise<T> {\n if (timeoutMs === undefined) {\n return promise;\n }\n\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(\n createBrowserCoreError(\n \"timeout\",\n `page evaluation timed out after ${String(timeoutMs)}ms`,\n ),\n );\n }, timeoutMs);\n }),\n ]);\n}\n\nfunction formatRuntimeConsoleText(payload: RuntimeConsoleApiCalledPayload): string {\n const parts = (payload.args ?? [])\n .map((arg) => formatRuntimeRemoteObject(arg))\n .filter((value) => value.length > 0);\n if (parts.length > 0) {\n return parts.join(\" \");\n }\n return payload.type?.trim() || \"console\";\n}\n\nfunction normalizeRuntimeConsoleLevel(\n value: string | undefined,\n): Extract<StepEvent, { readonly kind: \"console\" }>[\"level\"] {\n switch (value) {\n case \"warning\":\n case \"debug\":\n case \"info\":\n case \"error\":\n case \"trace\":\n return normalizeConsoleLevel(value);\n default:\n return \"log\";\n }\n}\n\nfunction formatRuntimeExceptionMessage(\n details: RuntimeExceptionDetails | undefined,\n): string {\n const description = details?.exception?.description?.trim();\n if (description) {\n const firstLine = description.split(\"\\n\")[0]?.trim() ?? \"\";\n if (firstLine.startsWith(\"Error: \")) {\n return firstLine.slice(\"Error: \".length);\n }\n return firstLine || description;\n }\n\n const value = details?.exception?.value;\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n\n return details?.text?.trim() || \"Uncaught exception\";\n}\n\nfunction formatRuntimeExceptionStack(\n details: RuntimeExceptionDetails | undefined,\n): string | undefined {\n const description = details?.exception?.description?.trim();\n if (description && description.includes(\"\\n\")) {\n return description;\n }\n\n const frames = details?.stackTrace?.callFrames;\n if (!frames || frames.length === 0) {\n return undefined;\n }\n\n return frames\n .map((frame) => {\n const url = frame.url ?? \"<anonymous>\";\n const lineNumber = frame.lineNumber ?? 0;\n const columnNumber = frame.columnNumber ?? 0;\n return ` at ${url}:${lineNumber}:${columnNumber}`;\n })\n .join(\"\\n\");\n}\n\nfunction formatRuntimeRemoteObject(object: RuntimeRemoteObject): string {\n if (object.unserializableValue !== undefined) {\n return object.unserializableValue;\n }\n if (object.value !== undefined) {\n return typeof object.value === \"string\"\n ? object.value\n : JSON.stringify(object.value);\n }\n if (object.description !== undefined && object.description.length > 0) {\n return object.description;\n }\n\n const previewParts =\n object.preview?.properties\n ?.map((property) => {\n if (!property.name) {\n return \"\";\n }\n return property.value === undefined\n ? property.name\n : `${property.name}: ${property.value}`;\n })\n .filter((value) => value.length > 0) ?? [];\n return previewParts.join(\", \");\n}\n\nfunction mergeDistinctStepEvents(events: readonly StepEvent[]): StepEvent[] {\n const seen = new Set<string>();\n const merged: StepEvent[] = [];\n\n for (const event of events) {\n const fingerprint = stepEventFingerprint(event);\n if (seen.has(fingerprint)) {\n continue;\n }\n seen.add(fingerprint);\n merged.push(event);\n }\n\n return merged;\n}\n\nfunction stepEventFingerprint(event: StepEvent): string {\n switch (event.kind) {\n case \"console\":\n return [\n event.kind,\n event.level,\n event.text,\n event.location?.url ?? \"\",\n event.location?.lineNumber ?? \"\",\n event.location?.columnNumber ?? \"\",\n ].join(\"|\");\n case \"page-error\":\n return [event.kind, event.message, event.stack ?? \"\"].join(\"|\");\n default:\n return event.eventId;\n }\n}\n"]}