@opensteer/engine-abp 0.8.6 → 0.8.7

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.
@@ -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/storage.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/cdp-discovery.ts","../src/cdp-transport.ts","../src/coordinate.ts","../src/dom.ts","../src/errors.ts","../src/launcher.ts","../src/action-events.ts","../src/action-settle.ts","../src/rest-client.ts","../src/scroll.ts","../src/tab-change.ts","../src/computer-use.ts","../src/dom-action-bridge.ts","../src/session-model.ts","../src/engine.ts"],"names":["WebSocket","require","createRequire","join","dirname","accessSync","fsConstants","createServer","fs","spawn","delay","path","isRecord","abortError","rethrowNodeLookupError","headerValue","process","rm","mainFrame","STATUS_CODES","mkdtemp","tmpdir"],"mappings":"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","file":"index.cjs","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","import type { FrameRef, PageRef, SessionRef } from \"./identity.js\";\n\nexport type CookieSameSite = \"strict\" | \"lax\" | \"none\";\nexport type CookiePriority = \"low\" | \"medium\" | \"high\";\n\nexport interface CookieRecord {\n readonly sessionRef: SessionRef;\n readonly name: string;\n readonly value: string;\n readonly domain: string;\n readonly path: string;\n readonly secure: boolean;\n readonly httpOnly: boolean;\n readonly sameSite?: CookieSameSite;\n readonly priority?: CookiePriority;\n readonly partitionKey?: string;\n readonly session: boolean;\n readonly expiresAt?: number | null;\n}\n\nexport interface StorageEntry {\n readonly key: string;\n readonly value: string;\n}\n\nexport interface IndexedDbRecord {\n readonly key: unknown;\n readonly primaryKey?: unknown;\n readonly value: unknown;\n}\n\nexport interface IndexedDbIndexSnapshot {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly multiEntry: boolean;\n readonly unique: boolean;\n}\n\nexport interface IndexedDbObjectStoreSnapshot {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly autoIncrement: boolean;\n readonly indexes: readonly IndexedDbIndexSnapshot[];\n readonly records: readonly IndexedDbRecord[];\n}\n\nexport interface IndexedDbDatabaseSnapshot {\n readonly name: string;\n readonly version: number;\n readonly objectStores: readonly IndexedDbObjectStoreSnapshot[];\n}\n\nexport interface StorageOriginSnapshot {\n readonly origin: string;\n readonly localStorage: readonly StorageEntry[];\n readonly indexedDb?: readonly IndexedDbDatabaseSnapshot[];\n}\n\nexport interface SessionStorageSnapshot {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly origin: string;\n readonly entries: readonly StorageEntry[];\n}\n\nexport interface StorageSnapshot {\n readonly sessionRef: SessionRef;\n readonly capturedAt: number;\n readonly origins: readonly StorageOriginSnapshot[];\n readonly sessionStorage?: readonly SessionStorageSnapshot[];\n}\n\nfunction parseUrl(value: string): URL | null {\n try {\n return new URL(value);\n } catch {\n return null;\n }\n}\n\nfunction isLocalHostname(hostname: string): boolean {\n return hostname === \"localhost\" || hostname.endsWith(\".localhost\");\n}\n\nfunction normalizeCookiePath(path: string): string {\n if (path.length === 0) {\n return \"/\";\n }\n\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nfunction pathMatchesCookiePath(requestPath: string, cookiePath: string): boolean {\n const normalizedRequestPath = requestPath.length === 0 ? \"/\" : requestPath;\n const normalizedCookiePath = normalizeCookiePath(cookiePath);\n\n if (normalizedRequestPath === normalizedCookiePath) {\n return true;\n }\n\n if (!normalizedRequestPath.startsWith(normalizedCookiePath)) {\n return false;\n }\n\n if (normalizedCookiePath.endsWith(\"/\")) {\n return true;\n }\n\n return normalizedRequestPath.charAt(normalizedCookiePath.length) === \"/\";\n}\n\nexport function filterCookieRecords(\n cookies: readonly CookieRecord[],\n urls: readonly string[],\n): CookieRecord[] {\n const parsed = urls.map(parseUrl).filter((url) => url !== null);\n if (parsed.length === 0) {\n return [...cookies];\n }\n\n return cookies.filter((cookie) => {\n return parsed.some((url) => {\n let domain = cookie.domain;\n if (!domain.startsWith(\".\")) {\n domain = `.${domain}`;\n }\n\n if (!`.${url.hostname}`.endsWith(domain)) {\n return false;\n }\n\n if (!pathMatchesCookiePath(url.pathname, cookie.path)) {\n return false;\n }\n\n if (url.protocol !== \"https:\" && !isLocalHostname(url.hostname) && cookie.secure) {\n return false;\n }\n\n return true;\n });\n });\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 mergeBrowserCapabilities,\n noBrowserCapabilities,\n type BrowserCapabilities,\n type HeaderEntry,\n} from \"@opensteer/browser-core\";\n\nexport const ABP_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 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: false,\n routing: false,\n },\n events: {\n pageLifecycle: true,\n dialog: true,\n download: true,\n chooser: true,\n executionState: true,\n },\n },\n);\n\nexport interface AbpLaunchOptions {\n readonly abpExecutablePath?: string;\n readonly browserExecutablePath?: string;\n readonly headless?: boolean;\n readonly userDataDir?: string;\n readonly sessionDir?: string;\n readonly args?: readonly string[];\n readonly verbose?: boolean;\n}\n\nexport interface AdoptedAbpBrowser {\n readonly baseUrl: string;\n readonly remoteDebuggingUrl: string;\n}\n\nexport interface AbpBrowserCoreEngineOptions {\n readonly launch?: AbpLaunchOptions;\n readonly browser?: AdoptedAbpBrowser;\n readonly extraHTTPHeaders?: readonly HeaderEntry[];\n}\n\nexport interface LaunchRequestOptions {\n readonly port: number;\n readonly userDataDir: string;\n readonly sessionDir: string;\n readonly abpExecutablePath?: string;\n readonly browserExecutablePath?: string;\n readonly headless: boolean;\n readonly args: readonly string[];\n readonly verbose: boolean;\n}\n\nexport function normalizeAbpBaseUrl(value: string): string {\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (trimmed.length === 0) {\n throw new TypeError(\"ABP baseUrl cannot be empty\");\n }\n return trimmed.endsWith(\"/api/v1\") ? trimmed : `${trimmed}/api/v1`;\n}\n\nexport function normalizeRemoteDebuggingUrl(value: string): string {\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (trimmed.length === 0) {\n throw new TypeError(\"remoteDebuggingUrl cannot be empty\");\n }\n return trimmed;\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\n\nexport interface CdpVersionResponse {\n readonly Browser?: string;\n readonly \"Protocol-Version\"?: string;\n readonly webSocketDebuggerUrl?: string;\n}\n\nexport async function fetchBrowserWebSocketUrl(remoteDebuggingUrl: string): Promise<string> {\n const response = await fetch(`${remoteDebuggingUrl}/json/version`);\n if (!response.ok) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `failed to query CDP version endpoint at ${remoteDebuggingUrl}`,\n );\n }\n\n const body = (await response.json()) as CdpVersionResponse;\n if (!body.webSocketDebuggerUrl) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `CDP endpoint ${remoteDebuggingUrl} did not return a browser websocket URL`,\n );\n }\n\n return body.webSocketDebuggerUrl;\n}\n\nexport function derivePageWebSocketUrl(browserWebSocketUrl: string, targetId: string): string {\n const url = new URL(browserWebSocketUrl);\n url.pathname = `/devtools/page/${targetId}`;\n url.search = \"\";\n return url.toString();\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\nimport WebSocket from \"ws\";\nimport type { RawData } from \"ws\";\n\ntype EventHandler = (params: Record<string, unknown>) => void;\ntype CloseHandler = (error?: Error) => void;\n\ninterface PendingCommand {\n readonly resolve: (value: unknown) => void;\n readonly reject: (reason: unknown) => void;\n}\n\nexport const PAGE_CDP_METHOD_ALLOWLIST = new Set<string>([\n \"DOM.enable\",\n \"DOM.describeNode\",\n \"DOM.focus\",\n \"DOM.getAttributes\",\n \"DOM.getContentQuads\",\n \"DOM.getDocument\",\n \"DOM.getNodeForLocation\",\n \"DOM.getOuterHTML\",\n \"DOM.pushNodesByBackendIdsToFrontend\",\n \"DOM.requestNode\",\n \"DOM.resolveNode\",\n \"DOM.scrollIntoViewIfNeeded\",\n \"DOMSnapshot.captureSnapshot\",\n \"DOMStorage.disable\",\n \"DOMStorage.enable\",\n \"DOMStorage.getDOMStorageItems\",\n \"Emulation.getScreenInfos\",\n \"IndexedDB.requestData\",\n \"IndexedDB.requestDatabase\",\n \"IndexedDB.requestDatabaseNames\",\n \"Page.addScriptToEvaluateOnNewDocument\",\n \"Page.enable\",\n \"Page.getFrameTree\",\n \"Page.getLayoutMetrics\",\n \"Runtime.callFunctionOn\",\n \"Runtime.evaluate\",\n \"Runtime.releaseObject\",\n \"Storage.getStorageKey\",\n]);\n\nexport const BROWSER_CDP_METHOD_ALLOWLIST = new Set<string>([\n \"Storage.getCookies\",\n \"Storage.setCookies\",\n \"Target.getTargets\",\n]);\n\nexport function assertAllowedCdpMethod(method: string, allowedMethods: ReadonlySet<string>): void {\n if (allowedMethods.has(method)) {\n return;\n }\n\n throw createBrowserCoreError(\n \"operation-failed\",\n `CDP method ${method} is not permitted by the ABP inspector sandbox`,\n {\n details: {\n method,\n },\n },\n );\n}\n\nexport class CdpClient {\n private readonly socket: WebSocket;\n private readonly allowedMethods: ReadonlySet<string>;\n private readonly pending = new Map<number, PendingCommand>();\n private readonly eventHandlers = new Map<string, Set<EventHandler>>();\n private readonly closeHandlers = new Set<CloseHandler>();\n private nextId = 0;\n private readonly opened: Promise<void>;\n private readonly closed: Promise<void>;\n private closedError: Error | undefined;\n\n private constructor(url: string, allowedMethods: ReadonlySet<string>) {\n this.allowedMethods = allowedMethods;\n this.socket = new WebSocket(url);\n this.socket.on(\"message\", (data: RawData) => {\n this.handleMessage(typeof data === \"string\" ? data : data.toString(\"utf8\"));\n });\n\n this.opened = new Promise<void>((resolve, reject) => {\n this.socket.once(\"open\", () => resolve());\n this.socket.once(\"error\", (error: Error) => reject(error));\n });\n\n this.closed = new Promise<void>((resolve) => {\n this.socket.once(\"close\", () => {\n this.flushPending(this.closedError ?? new Error(\"CDP socket closed\"));\n for (const handler of this.closeHandlers) {\n handler(this.closedError);\n }\n resolve();\n });\n this.socket.once(\"error\", (error: Error) => {\n this.closedError = error;\n });\n });\n }\n\n static async connect(input: {\n readonly url: string;\n readonly allowedMethods: ReadonlySet<string>;\n }): Promise<CdpClient> {\n const client = new CdpClient(input.url, input.allowedMethods);\n await client.opened;\n return client;\n }\n\n on(method: string, handler: EventHandler): () => void {\n const handlers = this.eventHandlers.get(method) ?? new Set<EventHandler>();\n handlers.add(handler);\n this.eventHandlers.set(method, handlers);\n return () => {\n const current = this.eventHandlers.get(method);\n if (!current) {\n return;\n }\n current.delete(handler);\n if (current.size === 0) {\n this.eventHandlers.delete(method);\n }\n };\n }\n\n onClose(handler: CloseHandler): () => void {\n this.closeHandlers.add(handler);\n return () => {\n this.closeHandlers.delete(handler);\n };\n }\n\n async send<TResult>(method: string, params: Record<string, unknown> = {}): Promise<TResult> {\n assertAllowedCdpMethod(method, this.allowedMethods);\n await this.opened;\n\n if (this.closedError) {\n throw this.closedError;\n }\n\n const id = ++this.nextId;\n const payload = JSON.stringify({\n id,\n method,\n params,\n });\n\n const result = new Promise<TResult>((resolve, reject) => {\n this.pending.set(id, {\n resolve: (value) => resolve(value as TResult),\n reject,\n });\n });\n\n this.socket.send(payload);\n return result;\n }\n\n async close(): Promise<void> {\n if (\n this.socket.readyState === WebSocket.CLOSED ||\n this.socket.readyState === WebSocket.CLOSING\n ) {\n await this.closed;\n return;\n }\n\n this.socket.close();\n await this.closed;\n }\n\n private handleMessage(message: string): void {\n const parsed = JSON.parse(message) as {\n readonly id?: number;\n readonly method?: string;\n readonly params?: Record<string, unknown>;\n readonly result?: unknown;\n readonly error?: {\n readonly code?: number;\n readonly message?: string;\n };\n };\n\n if (parsed.id !== undefined) {\n const pending = this.pending.get(parsed.id);\n if (!pending) {\n return;\n }\n this.pending.delete(parsed.id);\n if (parsed.error) {\n pending.reject(\n new Error(parsed.error.message ?? `CDP command ${String(parsed.id)} failed`),\n );\n return;\n }\n pending.resolve(parsed.result);\n return;\n }\n\n if (!parsed.method) {\n return;\n }\n\n for (const handler of this.eventHandlers.get(parsed.method) ?? []) {\n handler(parsed.params ?? {});\n }\n }\n\n private flushPending(error: Error): void {\n for (const pending of this.pending.values()) {\n pending.reject(error);\n }\n this.pending.clear();\n }\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\nfunction unsupportedCoordinateSpace(coordinateSpace: CoordinateSpace): never {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n `coordinate space ${coordinateSpace} is not supported by this backend`,\n {\n details: { coordinateSpace },\n },\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","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\";\n\nimport type { CdpClient } from \"./cdp-transport.js\";\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: CdpClient,\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<{\n readonly documents: readonly DomSnapshotDocument[];\n readonly strings: readonly string[];\n }>(\"DOMSnapshot.captureSnapshot\", {\n computedStyles: [...DOM_SNAPSHOT_COMPUTED_STYLE_NAMES],\n includePaintOrder: options.includeLayout,\n includeDOMRects: options.includeLayout,\n }),\n cdp.send<{ readonly root: DomTreeNode }>(\"DOM.getDocument\", {\n depth: -1,\n pierce: true,\n }),\n ]);\n\n return {\n capturedAt,\n documents: snapshotResult.documents,\n shadowBoundariesByBackendNodeId: buildCdpShadowBoundaryIndex(domTreeResult.root) as ReadonlyMap<\n number,\n ShadowBoundaryInfo\n >,\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\";\n\nimport type { DocumentState } from \"./types.js\";\n\nexport class AbpApiError extends Error {\n readonly status: number;\n readonly body: unknown;\n\n constructor(status: number, message: string, body: unknown) {\n super(message);\n this.name = \"AbpApiError\";\n this.status = status;\n this.body = body;\n }\n}\n\nexport function normalizeAbpError(error: unknown, pageRef?: PageRef): Error {\n if (isBrowserCoreError(error)) {\n return error;\n }\n\n if (error instanceof AbpApiError) {\n if (error.status === 408 || error.status === 504) {\n return createBrowserCoreError(\"timeout\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n if (error.status === 404 && pageRef !== undefined) {\n return createBrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n cause: error,\n details: { pageRef },\n });\n }\n\n return createBrowserCoreError(\"operation-failed\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n if (error instanceof Error) {\n if (/timed out/i.test(error.message)) {\n return createBrowserCoreError(\"timeout\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n return createBrowserCoreError(\"operation-failed\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n return createBrowserCoreError(\"operation-failed\", \"ABP operation failed\", {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n}\n\nexport function isActionTimeoutError(error: unknown): boolean {\n return error instanceof AbpApiError && error.status === 504;\n}\n\nexport function isPageClosedApiError(error: unknown): boolean {\n return error instanceof AbpApiError && error.status === 404;\n}\n\nexport function rethrowNodeLookupError(\n error: unknown,\n document: DocumentState,\n input: NodeLocator,\n): never {\n if (error instanceof AbpApiError && error.status === 404) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: input.documentEpoch,\n nodeRef: input.nodeRef,\n });\n }\n\n if (\n error instanceof Error &&\n /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n )\n ) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: input.documentEpoch,\n nodeRef: input.nodeRef,\n });\n }\n\n throw error;\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\nimport { promises as fs } from \"node:fs\";\nimport { accessSync, constants as fsConstants } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createServer } from \"node:net\";\n\nimport type { LaunchRequestOptions } from \"./options.js\";\nimport type { AbpBrowserStatus } from \"./types.js\";\n\nexport interface LaunchedAbpProcess {\n readonly process: ChildProcess;\n readonly baseUrl: string;\n readonly remoteDebuggingUrl: string;\n}\n\ninterface AbpLaunchCommand {\n readonly executablePath: string;\n readonly args: readonly string[];\n}\n\nconst require = createRequire(import.meta.url);\n\nfunction resolveAgentBrowserProtocolRoot(): string | undefined {\n try {\n return join(dirname(require.resolve(\"agent-browser-protocol\")), \"..\");\n } catch {\n return undefined;\n }\n}\n\nfunction resolveExecutablePath(candidates: readonly string[]): string | undefined {\n for (const candidate of candidates) {\n try {\n accessSync(candidate, fsConstants.X_OK);\n return candidate;\n } catch {}\n }\n\n return undefined;\n}\n\nexport async function allocatePort(): Promise<number> {\n const server = createServer();\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, \"127.0.0.1\", () => resolve());\n });\n\n const address = server.address();\n server.close();\n if (!address || typeof address === \"string\") {\n throw createBrowserCoreError(\"operation-failed\", \"failed to allocate a free TCP port\");\n }\n return address.port;\n}\n\nfunction normalizeBrowserArgs(args: readonly string[]): readonly string[] {\n return args.map((arg) => (arg === \"--headless\" ? \"--headless=new\" : arg));\n}\n\nfunction ensureRemoteDebuggingPortArg(args: readonly string[]): readonly string[] {\n if (args.some((arg) => arg.startsWith(\"--remote-debugging-port=\"))) {\n return args;\n }\n\n return [\"--remote-debugging-port=0\", ...args];\n}\n\nexport function resolveDefaultAbpBrowserExecutablePath(): string | undefined {\n const root = resolveAgentBrowserProtocolRoot();\n if (root === undefined) {\n return undefined;\n }\n\n return resolveExecutablePath([join(root, \"browsers\", \"ABP.app\", \"Contents\", \"MacOS\", \"ABP\")]);\n}\n\nexport function resolveDefaultAbpWrapperExecutablePath(): string | undefined {\n const root = resolveAgentBrowserProtocolRoot();\n if (root === undefined) {\n return undefined;\n }\n\n return resolveExecutablePath([join(root, \"dist\", \"bin\", \"abp.js\")]);\n}\n\nexport function resolveDefaultAbpExecutablePath(): string | undefined {\n return resolveDefaultAbpBrowserExecutablePath() ?? resolveDefaultAbpWrapperExecutablePath();\n}\n\nexport function buildAbpLaunchCommand(options: LaunchRequestOptions): AbpLaunchCommand {\n if (options.abpExecutablePath !== undefined && options.browserExecutablePath !== undefined) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either an ABP wrapper executable path or a browser executable path, not both\",\n );\n }\n\n const browserArgs = normalizeBrowserArgs(options.args);\n const browserExecutablePath =\n options.browserExecutablePath ??\n (options.abpExecutablePath === undefined\n ? resolveDefaultAbpBrowserExecutablePath()\n : undefined);\n\n if (browserExecutablePath !== undefined) {\n return {\n executablePath: browserExecutablePath,\n args: [\n `--abp-port=${String(options.port)}`,\n \"--use-mock-keychain\",\n ...(options.headless ? [\"--headless=new\"] : []),\n `--user-data-dir=${options.userDataDir}`,\n `--abp-session-dir=${options.sessionDir}`,\n ...ensureRemoteDebuggingPortArg(browserArgs),\n ],\n };\n }\n\n return {\n executablePath:\n options.abpExecutablePath ??\n resolveDefaultAbpWrapperExecutablePath() ??\n \"agent-browser-protocol\",\n args: [\n \"--port\",\n String(options.port),\n ...(options.headless ? [\"--headless\"] : []),\n \"--user-data-dir\",\n options.userDataDir,\n \"--session-dir\",\n options.sessionDir,\n \"--\",\n ...ensureRemoteDebuggingPortArg(browserArgs),\n ],\n };\n}\n\nexport async function launchAbpProcess(options: LaunchRequestOptions): Promise<LaunchedAbpProcess> {\n await Promise.all([\n fs.mkdir(options.userDataDir, { recursive: true }),\n fs.mkdir(options.sessionDir, { recursive: true }),\n ]);\n\n const command = buildAbpLaunchCommand(options);\n\n const child = spawn(command.executablePath, command.args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const outputBuffer: string[] = [];\n const appendOutput = (chunk: Buffer | string): void => {\n const text = typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\");\n outputBuffer.push(text);\n if (outputBuffer.length > 20) {\n outputBuffer.shift();\n }\n };\n\n const spawnError = new Promise<never>((_, reject) => {\n child.once(\"error\", (error) => {\n reject(\n createBrowserCoreError(\n \"operation-failed\",\n `failed to launch ABP executable ${command.executablePath}: ${error.message}`,\n {\n cause: error,\n },\n ),\n );\n });\n });\n const exitError = new Promise<never>((_, reject) => {\n child.once(\"exit\", (code, signal) => {\n if (code === 0 || signal === \"SIGTERM\" || signal === \"SIGKILL\") {\n return;\n }\n const details =\n outputBuffer.length === 0\n ? undefined\n : {\n output: outputBuffer.join(\"\"),\n };\n reject(\n createBrowserCoreError(\n \"operation-failed\",\n `ABP exited before becoming ready (code=${String(code)}, signal=${String(signal)})`,\n details === undefined ? {} : { details },\n ),\n );\n });\n });\n\n if (options.verbose && child.stdout) {\n child.stdout.pipe(process.stdout);\n }\n if (options.verbose && child.stderr) {\n child.stderr.pipe(process.stderr);\n }\n child.stdout?.on(\"data\", appendOutput);\n child.stderr?.on(\"data\", appendOutput);\n\n const baseUrl = `http://127.0.0.1:${String(options.port)}/api/v1`;\n await Promise.race([waitForReady(baseUrl), spawnError, exitError]);\n const remoteDebuggingPort = await waitForDevToolsPort(options.userDataDir);\n return {\n process: child,\n baseUrl,\n remoteDebuggingUrl: `http://127.0.0.1:${String(remoteDebuggingPort)}`,\n };\n}\n\nasync function waitForReady(baseUrl: string): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < 30_000) {\n try {\n const response = await fetch(`${baseUrl}/browser/status`);\n if (response.ok) {\n const body = (await response.json()) as AbpBrowserStatus;\n if (body.success && body.data.ready) {\n return;\n }\n }\n } catch {}\n\n await delay(200);\n }\n\n throw createBrowserCoreError(\"timeout\", `ABP did not become ready within 30000ms at ${baseUrl}`);\n}\n\nasync function waitForDevToolsPort(userDataDir: string): Promise<number> {\n const path = join(userDataDir, \"DevToolsActivePort\");\n const startedAt = Date.now();\n while (Date.now() - startedAt < 30_000) {\n try {\n const content = await fs.readFile(path, \"utf8\");\n const [line] = content.split(/\\r?\\n/, 1);\n const port = Number(line);\n if (Number.isInteger(port) && port > 0) {\n return port;\n }\n } catch {}\n\n await delay(200);\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `CDP port file was not written to ${userDataDir} within 30000ms`,\n );\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { StepEvent } from \"@opensteer/browser-core\";\n\nimport type { AbpSelectPopupItem } from \"./types.js\";\n\ntype SelectChooserOption = NonNullable<\n Extract<StepEvent, { readonly kind: \"chooser-opened\" }>[\"options\"]\n>[number];\n\ninterface SelectChooserEventData {\n readonly multiple: boolean;\n readonly options?: readonly SelectChooserOption[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readInteger(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isInteger(value) ? value : undefined;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction parseSelectPopupItem(value: unknown): AbpSelectPopupItem | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const index = readInteger(value.index);\n const type = readString(value.type);\n if (index === undefined || type === undefined) {\n return undefined;\n }\n\n const label = readString(value.label);\n const toolTip = readString(value.tool_tip);\n const enabled = readBoolean(value.enabled);\n const checked = readBoolean(value.checked);\n\n return {\n index,\n type,\n ...(label === undefined ? {} : { label }),\n ...(toolTip === undefined ? {} : { tool_tip: toolTip }),\n ...(enabled === undefined ? {} : { enabled }),\n ...(checked === undefined ? {} : { checked }),\n };\n}\n\nfunction isSelectableSelectPopupItem(type: string): boolean {\n return type === \"option\" || type === \"checkable_option\";\n}\n\nexport function buildSelectChooserOptions(\n items: unknown,\n selectedIndex?: number,\n): readonly SelectChooserOption[] | undefined {\n if (!Array.isArray(items)) {\n return undefined;\n }\n\n const options = items.flatMap((value) => {\n const item = parseSelectPopupItem(value);\n if (item === undefined || !isSelectableSelectPopupItem(item.type)) {\n return [];\n }\n\n const label = item.label ?? item.tool_tip ?? \"\";\n return [\n {\n index: item.index,\n label,\n value: label,\n selected: (item.checked ?? false) || item.index === selectedIndex,\n } satisfies SelectChooserOption,\n ];\n });\n\n return options.length === 0 ? undefined : options;\n}\n\nexport function normalizeSelectChooserEventData(\n data: Record<string, unknown>,\n): SelectChooserEventData | undefined {\n const multiple = readBoolean(data.allow_multiple_selection);\n if (multiple === undefined) {\n return undefined;\n }\n\n const selectedIndex = readInteger(data.selected_index);\n const options = buildSelectChooserOptions(data.items, selectedIndex);\n return {\n multiple,\n ...(options === undefined ? {} : { options }),\n };\n}\n","import {\n CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS,\n capturePostLoadTrackerSnapshot,\n buildPostLoadTrackerBeginExpression,\n buildPostLoadTrackerFreezeExpression,\n buildPostLoadTrackerInstallScript,\n buildPostLoadTrackerReadExpression,\n DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n normalizePostLoadTrackerState,\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 type { PageController } from \"./types.js\";\n\nexport const DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS = CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS;\nexport const DEFAULT_ABP_POST_LOAD_CAPTURE_WINDOW_MS = 1_000;\n\ninterface AbpActionSettlerContext {\n syncExecutionPaused(controller: PageController): Promise<boolean>;\n setExecutionPaused(controller: PageController, paused: boolean): 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 isPageClosedError(error: unknown): boolean;\n}\n\nexport interface AbpActionSettleOptions {\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 type AbpActionBoundaryOptions = Omit<AbpActionSettleOptions, \"controller\">;\n\nexport function clampAbpActionSettleTimeout(timeoutMs: number | undefined): number {\n if (timeoutMs === undefined) {\n return DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS;\n }\n return Math.max(0, Math.min(DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS, timeoutMs));\n}\n\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nexport function createAbpActionSettler(context: AbpActionSettlerContext) {\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.cdp.send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source: installScript,\n });\n controller.settleTrackerRegistered = true;\n }\n\n await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.evaluate\", {\n expression: installScript,\n returnByValue: true,\n awaitPromise: true,\n });\n }\n\n async function readTrackerState(controller: PageController) {\n try {\n const evaluated = await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.evaluate\", {\n expression: readExpression,\n returnByValue: true,\n awaitPromise: true,\n });\n\n return normalizePostLoadTrackerState(evaluated.result?.value);\n } catch (error) {\n if (context.isPageClosedError(error)) {\n return undefined;\n }\n throw error;\n }\n }\n\n async function beginTrackerObservation(controller: PageController): Promise<void> {\n await installTracker(controller);\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: beginExpression,\n returnByValue: true,\n awaitPromise: true,\n });\n }\n\n async function freezeTrackerObservation(controller: PageController): Promise<void> {\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: freezeExpression,\n returnByValue: true,\n awaitPromise: true,\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 await beginTrackerObservation(controller);\n const tracker = await readTrackerState(controller);\n return {\n pageRef: controller.pageRef,\n documentRef,\n ...(controller.mainFrameRef === undefined\n ? {}\n : {\n url: controller.framesByCdpId.get(controller.mainFrameRef)?.currentDocument.url,\n }),\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 const quietMs = input.quietMs ?? DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS;\n const captureWindowMs = Math.max(\n 0,\n Math.min(input.captureWindowMs ?? DEFAULT_ABP_POST_LOAD_CAPTURE_WINDOW_MS, timeoutMs),\n );\n const deadline = Date.now() + timeoutMs;\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 abortError(signal);\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: AbpActionSettleOptions): 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 const wasPaused = await context.syncExecutionPaused(controller);\n let boundary: ActionBoundaryOutcome = {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n if (wasPaused) {\n await context.setExecutionPaused(controller, false);\n }\n\n try {\n if (snapshot === undefined) {\n if (policySettle) {\n if (signal?.aborted) {\n throw abortError(signal);\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: () =>\n controller.mainFrameRef === undefined\n ? undefined\n : controller.framesByCdpId.get(controller.mainFrameRef)?.currentDocument.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 } finally {\n if (wasPaused && controller.lifecycleState !== \"closed\") {\n try {\n await context.setExecutionPaused(controller, true);\n } catch (error) {\n if (!context.isPageClosedError(error)) {\n throw error;\n }\n }\n }\n\n if (controller.lifecycleState !== \"closed\") {\n try {\n await context.flushDomUpdateTask(controller);\n } catch (error) {\n if (!context.isPageClosedError(error)) {\n throw error;\n }\n }\n }\n }\n\n return boundary;\n }\n\n return {\n captureSnapshot,\n installTracker,\n waitForPostLoadQuiet,\n settle,\n };\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 abortError(signal);\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(abortError(signal!));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import { createBrowserCoreError, type HeaderEntry } from \"@opensteer/browser-core\";\n\nimport { AbpApiError } from \"./errors.js\";\nimport type {\n AbpActionRequest,\n AbpActionResponse,\n AbpBrowserStatus,\n AbpCurlResponse,\n AbpCurlWireResponse,\n AbpDialogInfo,\n AbpExecuteResult,\n AbpExecutionState,\n AbpNetworkCall,\n AbpNetworkQueryWireResponse,\n AbpRequestOptions,\n AbpRestClientLike,\n AbpWaitUntil,\n AbpTab,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction invalidAbpResponse(path: string): never {\n throw createBrowserCoreError(\n \"operation-failed\",\n `ABP ${path} returned an invalid response shape`,\n );\n}\n\nfunction readStringRecord(value: unknown): Record<string, string> | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const entries = Object.entries(value);\n if (entries.some(([, entryValue]) => typeof entryValue !== \"string\")) {\n return undefined;\n }\n\n return Object.fromEntries(entries) as Record<string, string>;\n}\n\nfunction normalizeNetworkQueryResponse(value: unknown): readonly AbpNetworkCall[] {\n if (!isRecord(value)) {\n invalidAbpResponse(\"/network\");\n }\n\n const response = value as Partial<AbpNetworkQueryWireResponse>;\n if (!Array.isArray(response.requests)) {\n invalidAbpResponse(\"/network\");\n }\n\n return response.requests as readonly AbpNetworkCall[];\n}\n\nfunction normalizeCurlResponse(value: unknown): AbpCurlResponse {\n if (!isRecord(value)) {\n invalidAbpResponse(\"/tabs/{tabId}/curl\");\n }\n\n const response = value as Partial<AbpCurlWireResponse>;\n const status = response.status_code;\n const headers = readStringRecord(response.headers);\n const body = response.body;\n const bodyIsBase64 = response.body_is_base64;\n const url = response.final_url;\n const redirected = response.redirected;\n if (\n !Number.isInteger(status) ||\n headers === undefined ||\n typeof bodyIsBase64 !== \"boolean\" ||\n typeof url !== \"string\" ||\n typeof redirected !== \"boolean\" ||\n (body !== undefined && typeof body !== \"string\")\n ) {\n invalidAbpResponse(\"/tabs/{tabId}/curl\");\n }\n\n return {\n status: status!,\n headers,\n ...(body === undefined ? {} : { body }),\n ...(body === undefined ? {} : { bodyEncoding: bodyIsBase64 ? \"base64\" : \"text\" }),\n url: url!,\n redirected: redirected!,\n };\n}\n\nfunction normalizeExecuteResponse(value: unknown): unknown {\n if (!isRecord(value) || !isRecord(value.result) || !(\"value\" in value.result)) {\n invalidAbpResponse(\"/tabs/{tabId}/execute\");\n }\n\n const result = value.result as unknown as AbpExecuteResult;\n return result.value;\n}\n\nconst DEFAULT_ACTION_COMPLETE_TIMEOUT_MS = 10_000;\n\nexport class AbpRestClient implements AbpRestClientLike {\n private readonly baseUrl: string;\n private readonly extraHeaders: readonly HeaderEntry[];\n\n constructor(baseUrl: string, extraHeaders: readonly HeaderEntry[] = []) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n this.extraHeaders = extraHeaders;\n }\n\n getBrowserStatus(): Promise<AbpBrowserStatus> {\n return this.requestJson(\"/browser/status\");\n }\n\n async shutdownBrowser(): Promise<void> {\n await this.requestJson(\"/browser/shutdown\", {\n method: \"POST\",\n body: {},\n });\n }\n\n listTabs(): Promise<readonly AbpTab[]> {\n return this.requestJson(\"/tabs\");\n }\n\n getTab(tabId: string): Promise<AbpTab> {\n return this.requestJson(`/tabs/${tabId}`);\n }\n\n createTab(): Promise<AbpTab> {\n return this.requestJson(\"/tabs\", {\n method: \"POST\",\n body: {},\n });\n }\n\n async closeTab(tabId: string): Promise<void> {\n await this.requestJson(`/tabs/${tabId}`, {\n method: \"DELETE\",\n });\n }\n\n async activateTab(tabId: string): Promise<void> {\n await this.requestJson(`/tabs/${tabId}/activate`, {\n method: \"POST\",\n body: {},\n });\n }\n\n async stopTab(tabId: string): Promise<void> {\n await this.requestJson(`/tabs/${tabId}/stop`, {\n method: \"POST\",\n body: {},\n });\n }\n\n navigateTab(\n tabId: string,\n body: {\n readonly url: string;\n readonly referrer?: string;\n } & AbpActionRequest,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/navigate`, {\n method: \"POST\",\n body,\n });\n }\n\n reloadTab(tabId: string, body: AbpActionRequest): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/reload`, {\n method: \"POST\",\n body,\n });\n }\n\n goBack(tabId: string, body: AbpActionRequest): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/back`, {\n method: \"POST\",\n body,\n });\n }\n\n goForward(tabId: string, body: AbpActionRequest): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/forward`, {\n method: \"POST\",\n body,\n });\n }\n\n clickTab(\n tabId: string,\n body: {\n readonly x: number;\n readonly y: number;\n readonly button?: string;\n readonly click_count?: number;\n readonly modifiers?: readonly string[];\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/click`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n moveTab(\n tabId: string,\n body: {\n readonly x: number;\n readonly y: number;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/move`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n scrollTab(\n tabId: string,\n body: {\n readonly x: number;\n readonly y: number;\n readonly scrolls: readonly {\n readonly delta_px: number;\n readonly direction: \"x\" | \"y\";\n }[];\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/scroll`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n dragTab(\n tabId: string,\n body: {\n readonly start_x: number;\n readonly start_y: number;\n readonly end_x: number;\n readonly end_y: number;\n readonly steps?: number;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/drag`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n keyPressTab(\n tabId: string,\n body: {\n readonly key: string;\n readonly modifiers?: readonly string[];\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/keyboard/press`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n typeTab(\n tabId: string,\n body: {\n readonly text: string;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/type`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n waitTab(\n tabId: string,\n body: {\n readonly duration_ms: number;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/wait`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n screenshotTab(\n tabId: string,\n body: AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/screenshot`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n executeScript<TResult = unknown>(\n tabId: string,\n script: string,\n options: AbpActionRequest = {},\n ): Promise<TResult> {\n return this.requestJson(\n `/tabs/${tabId}/execute`,\n {\n method: \"POST\",\n body: { script, ...options },\n },\n normalizeExecuteResponse as (value: unknown) => TResult,\n );\n }\n\n getExecutionState(tabId: string): Promise<AbpExecutionState> {\n return this.requestJson(`/tabs/${tabId}/execution`);\n }\n\n setExecutionState(\n tabId: string,\n body: {\n readonly paused: boolean;\n },\n ): Promise<AbpExecutionState> {\n return this.requestJson(`/tabs/${tabId}/execution`, {\n method: \"POST\",\n body,\n });\n }\n\n async getDialog(tabId: string): Promise<AbpDialogInfo | undefined> {\n const result = await this.requestJson<Record<string, unknown>>(`/tabs/${tabId}/dialog`);\n if (!result || result.present !== true) {\n return undefined;\n }\n return {\n dialogType: String(result.dialog_type ?? result.dialogType ?? \"alert\"),\n message: String(result.message ?? \"\"),\n defaultPrompt: typeof result.default_prompt === \"string\" ? result.default_prompt : undefined,\n };\n }\n\n acceptDialog(tabId: string): Promise<void> {\n return this.requestJson(`/tabs/${tabId}/dialog/accept`, {\n method: \"POST\",\n body: {},\n });\n }\n\n dismissDialog(tabId: string): Promise<void> {\n return this.requestJson(`/tabs/${tabId}/dialog/dismiss`, {\n method: \"POST\",\n body: {},\n });\n }\n\n queryNetwork(input: {\n readonly tabId?: string;\n readonly includeBodies: boolean;\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: string;\n }): Promise<readonly AbpNetworkCall[]> {\n const params = new URLSearchParams();\n if (input.tabId !== undefined) {\n params.set(\"tab_id\", input.tabId);\n }\n if (input.includeBodies) {\n params.set(\"include_body\", \"true\");\n }\n if (input.url !== undefined) {\n params.set(\"url\", input.url);\n }\n if (input.hostname !== undefined) {\n params.set(\"hostname\", input.hostname);\n }\n if (input.path !== undefined) {\n params.set(\"url_path\", input.path);\n }\n if (input.method !== undefined) {\n params.set(\"method\", input.method);\n }\n if (input.status !== undefined) {\n params.set(\"status\", input.status);\n }\n if (input.resourceType !== undefined) {\n params.set(\"resource_type\", input.resourceType);\n }\n return this.requestJson(`/network?${params.toString()}`, {}, normalizeNetworkQueryResponse);\n }\n\n curlTab(\n tabId: string,\n body: {\n readonly url: string;\n readonly method: string;\n readonly headers?: Record<string, string>;\n readonly body?: string;\n },\n ): Promise<AbpCurlResponse> {\n return this.requestJson(\n `/tabs/${tabId}/curl`,\n {\n method: \"POST\",\n body,\n },\n normalizeCurlResponse,\n );\n }\n\n private async requestJson<T>(\n path: string,\n options: {\n readonly method?: string;\n readonly body?: unknown;\n readonly signal?: AbortSignal;\n } = {},\n normalize?: (value: unknown) => T,\n ): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: options.method ?? \"GET\",\n headers: {\n accept: \"application/json\",\n ...(options.body === undefined ? {} : { \"content-type\": \"application/json\" }),\n ...Object.fromEntries(this.extraHeaders.map((header) => [header.name, header.value])),\n },\n ...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const parsed = contentType.includes(\"application/json\")\n ? ((await response.json()) as unknown)\n : await response.text();\n\n if (!response.ok) {\n const message =\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"error\" in parsed &&\n typeof parsed.error === \"string\"\n ? parsed.error\n : response.statusText || `ABP request failed with HTTP ${String(response.status)}`;\n throw new AbpApiError(response.status, message, parsed);\n }\n\n return normalize ? normalize(parsed) : (parsed as T);\n }\n}\n\nexport function buildImmediateActionRequest(\n options: {\n readonly captureNetwork?: boolean;\n readonly waitUntil?: AbpWaitUntil;\n readonly screenshot?: {\n readonly area?: \"none\" | \"viewport\";\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n };\n } = {},\n): AbpActionRequest {\n return {\n wait_until: options.waitUntil ?? {\n type: \"immediate\",\n },\n ...(options.screenshot === undefined\n ? {}\n : {\n screenshot: {\n area: options.screenshot.area ?? \"viewport\",\n ...(options.screenshot.cursor === undefined\n ? {}\n : { cursor: options.screenshot.cursor }),\n ...(options.screenshot.format === undefined\n ? {}\n : { format: options.screenshot.format }),\n ...(options.screenshot.markup === undefined\n ? {}\n : { markup: [...options.screenshot.markup] }),\n },\n }),\n ...(options.captureNetwork === false\n ? {}\n : {\n network: {\n types: [\"Document\", \"XHR\", \"Fetch\"],\n },\n }),\n };\n}\n\nexport function buildInputActionRequest(\n options: {\n readonly captureNetwork?: boolean;\n readonly timeoutMs?: number;\n readonly omitDefaultTimeout?: boolean;\n readonly screenshot?: {\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n };\n } = {},\n): AbpActionRequest {\n return buildImmediateActionRequest({\n ...(options.captureNetwork === undefined ? {} : { captureNetwork: options.captureNetwork }),\n waitUntil: buildActionCompleteWaitUntil({\n ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),\n ...(options.omitDefaultTimeout === undefined\n ? {}\n : { omitDefaultTimeout: options.omitDefaultTimeout }),\n }),\n ...(options.screenshot === undefined ? {} : { screenshot: options.screenshot }),\n });\n}\n\nexport function buildImmediateScreenshotRequest(\n screenshot: {\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n } = {},\n): AbpActionRequest {\n return buildImmediateActionRequest({\n captureNetwork: false,\n screenshot,\n });\n}\n\nfunction buildActionCompleteWaitUntil(options: {\n readonly timeoutMs?: number;\n readonly omitDefaultTimeout?: boolean;\n}): AbpWaitUntil {\n const timeoutMs =\n options.timeoutMs === undefined\n ? options.omitDefaultTimeout\n ? undefined\n : DEFAULT_ACTION_COMPLETE_TIMEOUT_MS\n : normalizeActionTimeoutMs(options.timeoutMs);\n\n return {\n type: \"action_complete\",\n ...(timeoutMs === undefined ? {} : { timeout_ms: timeoutMs }),\n };\n}\n\nfunction normalizeActionTimeoutMs(timeoutMs: number): number {\n if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n `ABP action timeout must be a non-negative finite number, received ${String(timeoutMs)}`,\n );\n }\n\n return Math.max(1, Math.ceil(timeoutMs));\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\n\nexport interface AbpScrollSegment {\n readonly delta_px: number;\n readonly direction: \"x\" | \"y\";\n}\n\nexport function buildAbpScrollSegments(delta: {\n readonly x: number;\n readonly y: number;\n}): readonly AbpScrollSegment[] {\n const { x, y } = delta;\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n `ABP scroll deltas must be finite numbers, received (${String(x)}, ${String(y)})`,\n );\n }\n\n const segments: AbpScrollSegment[] = [];\n if (x !== 0) {\n segments.push({\n delta_px: x,\n direction: \"x\",\n });\n }\n if (y !== 0) {\n segments.push({\n delta_px: y,\n direction: \"y\",\n });\n }\n if (segments.length === 0) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"ABP scroll requires at least one non-zero delta\",\n );\n }\n return segments;\n}\n","import type { PageRef, StepEvent } from \"@opensteer/browser-core\";\n\nimport type { AbpActionResponse } from \"./types.js\";\n\nexport interface DiscoveredTabEffects {\n readonly events: readonly StepEvent[];\n readonly activePageRef?: PageRef;\n}\n\nexport function resolveTabChangePageRef(input: {\n readonly controllerPageRef: PageRef;\n readonly response: Pick<AbpActionResponse, \"tab_changed\">;\n readonly actionEvents: readonly StepEvent[];\n readonly discoveredTabs: DiscoveredTabEffects;\n readonly activePageRef: PageRef | undefined;\n}): PageRef {\n if (!input.response.tab_changed) {\n return input.controllerPageRef;\n }\n\n if (input.discoveredTabs.activePageRef !== undefined) {\n return input.discoveredTabs.activePageRef;\n }\n\n for (const event of [...input.actionEvents, ...input.discoveredTabs.events].reverse()) {\n if (event.kind === \"popup-opened\") {\n return event.pageRef;\n }\n }\n\n return input.activePageRef ?? input.controllerPageRef;\n}\n\nexport function collectPopupPageRefs(events: readonly StepEvent[]): readonly PageRef[] {\n const seen = new Set<PageRef>();\n const pageRefs: PageRef[] = [];\n for (const event of events) {\n if (event.kind !== \"popup-opened\" || seen.has(event.pageRef)) {\n continue;\n }\n seen.add(event.pageRef);\n pageRefs.push(event.pageRef);\n }\n return pageRefs;\n}\n","import {\n type ActionBoundaryOutcome,\n createBodyPayload,\n createSize,\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createScrollOffset,\n type FrameRef,\n type PageRef,\n type ScreenshotArtifact,\n type StepEvent,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport type {\n ComputerUseBridge,\n ComputerUseBridgeOutput,\n NormalizedComputerScreenshotOptions,\n} from \"@opensteer/protocol\";\n\nimport { clampAbpActionSettleTimeout, type AbpActionBoundaryOptions } from \"./action-settle.js\";\nimport {\n buildImmediateActionRequest,\n buildImmediateScreenshotRequest,\n buildInputActionRequest,\n} from \"./rest-client.js\";\nimport { buildAbpScrollSegments } from \"./scroll.js\";\nimport {\n collectPopupPageRefs,\n type DiscoveredTabEffects,\n resolveTabChangePageRef,\n} from \"./tab-change.js\";\nimport type { AbpActionResponse, PageController, SessionState } from \"./types.js\";\n\nexport function createAbpComputerUseBridge(context: {\n resolveController(pageRef: PageRef): PageController;\n resolveSession(sessionRef: SessionState[\"sessionRef\"]): SessionState;\n normalizeActionEvents(\n controller: PageController,\n response: AbpActionResponse,\n ): Promise<readonly StepEvent[]>;\n detectNewTabs(\n session: SessionState,\n openerController: PageController,\n ): Promise<DiscoveredTabEffects>;\n executeInputAction(\n session: SessionState,\n controller: PageController,\n execute: () => Promise<AbpActionResponse>,\n ): Promise<{ readonly response: AbpActionResponse; readonly dialogEvents: readonly StepEvent[] }>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: AbpActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n requireMainFrame(controller: PageController): {\n readonly frameRef: FrameRef;\n readonly currentDocument: {\n readonly documentRef: NonNullable<ScreenshotArtifact[\"documentRef\"]>;\n readonly documentEpoch: NonNullable<ScreenshotArtifact[\"documentEpoch\"]>;\n };\n };\n drainQueuedEvents(pageRef: PageRef): readonly StepEvent[];\n}): ComputerUseBridge {\n return {\n async execute(input) {\n const startedAt = Date.now();\n const controller = context.resolveController(input.pageRef);\n const session = context.resolveSession(controller.sessionRef);\n const action = input.action;\n const screenshot = toAbpScreenshotOptions(input.screenshot);\n const remainingMs = input.remainingMs();\n const requestOptions = {\n signal: input.signal,\n };\n const inputActionRequest = buildInputActionRequest({\n captureNetwork: false,\n omitDefaultTimeout: true,\n ...(remainingMs === undefined ? {} : { timeoutMs: remainingMs }),\n screenshot,\n });\n\n let response: AbpActionResponse;\n let dialogEvents: readonly StepEvent[] = [];\n let boundary: ActionBoundaryOutcome | undefined;\n\n switch (action.type) {\n case \"click\": {\n const executed = await context.executeInputAction(session, controller, () =>\n session.rest.clickTab(\n controller.tabId,\n {\n x: action.x,\n y: action.y,\n ...(action.button === undefined ? {} : { button: action.button }),\n ...(action.clickCount === undefined ? {} : { click_count: action.clickCount }),\n ...(action.modifiers === undefined ? {} : { modifiers: [...action.modifiers] }),\n ...inputActionRequest,\n },\n requestOptions,\n ),\n );\n response = executed.response;\n dialogEvents = executed.dialogEvents;\n break;\n }\n case \"move\":\n response = await session.rest.moveTab(\n controller.tabId,\n {\n x: action.x,\n y: action.y,\n ...buildImmediateActionRequest({\n captureNetwork: false,\n screenshot,\n }),\n },\n requestOptions,\n );\n break;\n case \"scroll\":\n response = await session.rest.scrollTab(\n controller.tabId,\n {\n x: action.x,\n y: action.y,\n scrolls: buildAbpScrollSegments({\n x: action.deltaX,\n y: action.deltaY,\n }),\n ...inputActionRequest,\n },\n requestOptions,\n );\n break;\n case \"type\":\n response = await session.rest.typeTab(\n controller.tabId,\n {\n text: action.text,\n ...inputActionRequest,\n },\n requestOptions,\n );\n break;\n case \"key\": {\n const executed = await context.executeInputAction(session, controller, () =>\n session.rest.keyPressTab(\n controller.tabId,\n {\n key: action.key,\n ...(action.modifiers === undefined ? {} : { modifiers: [...action.modifiers] }),\n ...inputActionRequest,\n },\n requestOptions,\n ),\n );\n response = executed.response;\n dialogEvents = executed.dialogEvents;\n break;\n }\n case \"drag\":\n response = await session.rest.dragTab(\n controller.tabId,\n {\n start_x: action.start.x,\n start_y: action.start.y,\n end_x: action.end.x,\n end_y: action.end.y,\n ...(action.steps === undefined ? {} : { steps: action.steps }),\n ...inputActionRequest,\n },\n requestOptions,\n );\n break;\n case \"screenshot\":\n response = await session.rest.screenshotTab(\n controller.tabId,\n buildImmediateScreenshotRequest(screenshot),\n requestOptions,\n );\n break;\n case \"wait\":\n response = await session.rest.waitTab(\n controller.tabId,\n {\n duration_ms: action.durationMs,\n ...buildImmediateActionRequest({\n captureNetwork: false,\n screenshot,\n }),\n },\n requestOptions,\n );\n break;\n }\n\n const actionEvents = await context.normalizeActionEvents(controller, response);\n const discoveredTabs = await context.detectNewTabs(session, controller);\n const popupPageRefs = collectPopupPageRefs([...actionEvents, ...discoveredTabs.events]);\n const resultPageRef = resolveTabChangePageRef({\n controllerPageRef: controller.pageRef,\n response,\n actionEvents,\n discoveredTabs,\n activePageRef: session.activePageRef,\n });\n if (response.tab_changed) {\n session.activePageRef = resultPageRef;\n }\n const resultController = context.resolveController(resultPageRef);\n let displayResponse = response;\n if (action.type !== \"screenshot\") {\n boundary = await context.settleActionBoundary(resultController, {\n timeoutMs: clampAbpActionSettleTimeout(remainingMs),\n ...(resultController.pageRef === controller.pageRef && input.snapshot !== undefined\n ? { snapshot: input.snapshot }\n : {}),\n signal: input.signal,\n policySettle: input.policySettle,\n });\n displayResponse = await session.rest.screenshotTab(\n resultController.tabId,\n buildImmediateScreenshotRequest(screenshot),\n requestOptions,\n );\n } else {\n await context.flushDomUpdateTask(resultController);\n }\n\n const display = materializeDisplayContract({\n context,\n controller: resultController,\n response: displayResponse,\n });\n\n const popupQueuedEvents = popupPageRefs.flatMap((pageRef) =>\n pageRef === controller.pageRef ? [] : context.drainQueuedEvents(pageRef),\n );\n\n return {\n pageRef: resultController.pageRef,\n screenshot: display.screenshot,\n viewport: display.viewport,\n events: [\n ...context.drainQueuedEvents(controller.pageRef),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ...popupQueuedEvents,\n ],\n timing: timingFromResponse(response, Date.now() - startedAt),\n ...(boundary === undefined ? {} : { boundary }),\n };\n },\n };\n}\n\nfunction toAbpScreenshotOptions(screenshot: NormalizedComputerScreenshotOptions): {\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n} {\n return {\n ...(screenshot.includeCursor ? { cursor: true } : {}),\n ...(screenshot.format === undefined ? {} : { format: screenshot.format }),\n ...(screenshot.annotations.length === 0 ? {} : { markup: [...screenshot.annotations] }),\n };\n}\n\nfunction materializeDisplayContract(input: {\n readonly context: Parameters<typeof createAbpComputerUseBridge>[0];\n readonly controller: PageController;\n readonly response: AbpActionResponse;\n}): {\n readonly screenshot: ScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n} {\n const screenshot = input.response.screenshot_after;\n if (screenshot === undefined) {\n throw new Error(\n `ABP action response for ${input.controller.pageRef} did not include screenshot_after`,\n );\n }\n\n const viewport = viewportMetricsFromResponse(input.response, screenshot);\n const mainFrame = input.context.requireMainFrame(input.controller);\n const format =\n (screenshot.format as NormalizedComputerScreenshotOptions[\"format\"] | undefined) ?? \"png\";\n return {\n screenshot: {\n pageRef: input.controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(Buffer.from(screenshot.data, \"base64\")), {\n mimeType: `image/${format}`,\n }),\n format,\n size: createSize(screenshot.width, screenshot.height),\n coordinateSpace: \"layout-viewport-css\",\n },\n viewport,\n };\n}\n\nfunction timingFromResponse(\n response: AbpActionResponse,\n fallbackTotalMs: number,\n): ComputerUseBridgeOutput[\"timing\"] {\n const timing = response.timing;\n if (timing === undefined) {\n return {\n actionMs: fallbackTotalMs,\n waitMs: 0,\n totalMs: fallbackTotalMs,\n };\n }\n\n return {\n actionMs: Math.max(0, timing.action_completed_ms - timing.action_started_ms),\n waitMs: Math.max(0, timing.wait_completed_ms - timing.action_completed_ms),\n totalMs: Math.max(fallbackTotalMs, Math.max(0, timing.duration_ms)),\n };\n}\n\nfunction viewportMetricsFromResponse(\n response: AbpActionResponse,\n screenshot: NonNullable<AbpActionResponse[\"screenshot_after\"]>,\n): ViewportMetrics {\n const scroll = response.scroll;\n if (scroll === undefined) {\n throw new Error(\"ABP action response did not include scroll metrics for screenshot_after\");\n }\n\n const x = scroll.scrollX ?? scroll.horizontal_px;\n const y = scroll.scrollY ?? scroll.vertical_px;\n const pageWidth = scroll.pageWidth ?? scroll.page_width;\n const pageHeight = scroll.pageHeight ?? scroll.page_height;\n const viewportWidth = scroll.viewportWidth ?? scroll.viewport_width;\n const viewportHeight = scroll.viewportHeight ?? scroll.viewport_height;\n\n if (\n x === undefined ||\n y === undefined ||\n pageWidth === undefined ||\n pageHeight === undefined ||\n viewportWidth === undefined ||\n viewportHeight === undefined\n ) {\n throw new Error(\"ABP action response did not include a complete screenshot viewport contract\");\n }\n if (viewportWidth !== screenshot.width || viewportHeight !== screenshot.height) {\n throw new Error(\n `ABP screenshot_after size ${screenshot.width}x${screenshot.height} did not match viewport ${viewportWidth}x${viewportHeight}`,\n );\n }\n\n return {\n layoutViewport: {\n origin: { x, y },\n size: createSize(viewportWidth, viewportHeight),\n },\n visualViewport: {\n origin: { x, y },\n offsetWithinLayoutViewport: createScrollOffset(0, 0),\n size: createSize(viewportWidth, viewportHeight),\n },\n scrollOffset: createScrollOffset(x, y),\n contentSize: createSize(pageWidth, pageHeight),\n devicePixelRatio: createDevicePixelRatio(1),\n pageScaleFactor: createPageScaleFactor(1),\n pageZoomFactor: createPageZoomFactor(1),\n };\n}\n","import {\n type ActionBoundaryOutcome,\n createPoint,\n createBrowserCoreError,\n quadBounds,\n staleNodeRefError,\n type DomSnapshot,\n type DomSnapshotNode,\n type NodeLocator,\n type PageRef,\n type Quad,\n type SessionRef,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport type {\n DomActionBridge,\n DomActionTargetInspection,\n DomPointerHitAssessment,\n ReplayElementPath,\n} from \"@opensteer/protocol\";\n\nimport type { DocumentState, PageController, SessionState } from \"./types.js\";\nimport { clampAbpActionSettleTimeout, type AbpActionBoundaryOptions } from \"./action-settle.js\";\nimport { buildInputActionRequest } from \"./rest-client.js\";\n\ninterface AbpDomActionBridgeContext {\n resolveController(pageRef: PageRef): PageController;\n resolveSession(sessionRef: SessionRef): SessionState;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: AbpActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n syncExecutionPaused(controller: PageController): Promise<boolean>;\n setExecutionPaused(controller: PageController, paused: boolean): Promise<void>;\n isPageClosedError(error: unknown): boolean;\n locateBackendNode(document: DocumentState, backendNodeId: number): NodeLocator;\n requireLiveNode(locator: NodeLocator): {\n readonly document: DocumentState;\n readonly backendNodeId: number;\n };\n getDomSnapshot(documentRef: string): Promise<DomSnapshot>;\n getViewportMetrics(pageRef: PageRef): Promise<ViewportMetrics>;\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 stablePrimaryExact: 150,\n stablePrimaryPrefix: 130,\n attrExact: 100,\n attrPrefix: 80,\n tagOnly: 10,\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 cssEscape(value) {\n return String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n\n function stablePrimaryKey(attrs) {\n for (const key of policy.stablePrimaryAttrKeys || []) {\n if (attrs[key]) return key;\n }\n return null;\n }\n\n function countMatches(root, tag, attrKey, attrValue, mode) {\n const scope = root instanceof ShadowRoot ? root : root.ownerDocument;\n if (!scope || typeof scope.querySelectorAll !== \"function\") return 0;\n const escapedTag = String(tag || \"*\");\n let selector = escapedTag;\n if (attrKey && attrValue) {\n const operator = mode === \"prefix\" ? \"^=\" : \"=\";\n selector += \"[\" + attrKey + operator + \"\\\\\"\" + cssEscape(attrValue) + \"\\\\\"]\";\n }\n try {\n return scope.querySelectorAll(selector).length;\n } catch {\n return 0;\n }\n }\n\n function chooseAttribute(tag, attrs, root) {\n const stableKey = stablePrimaryKey(attrs);\n if (stableKey) {\n const exactCount = countMatches(root, tag, stableKey, attrs[stableKey], \"exact\");\n if (exactCount === 1) {\n return {\n key: stableKey,\n value: attrs[stableKey],\n match: \"exact\",\n };\n }\n }\n\n const entries = Object.entries(attrs)\n .filter(([key]) => !policy.deferredMatchAttrKeys.includes(key))\n .concat(Object.entries(attrs).filter(([key]) => policy.deferredMatchAttrKeys.includes(key)));\n\n for (const [key, value] of entries) {\n const exactCount = countMatches(root, tag, key, value, \"exact\");\n if (exactCount === 1) {\n return { key, value, match: \"exact\" };\n }\n if (value.length >= 4) {\n const prefixLength = Math.min(Math.max(4, Math.floor(value.length / 2)), value.length);\n const prefix = value.slice(0, prefixLength);\n const prefixCount = countMatches(root, tag, key, prefix, \"prefix\");\n if (prefixCount === 1) {\n return { key, value: prefix, match: \"prefix\" };\n }\n }\n }\n\n return null;\n }\n\n function buildChain(node) {\n const nodes = [];\n let current = node;\n while (current && current instanceof Element) {\n nodes.unshift(current);\n current = current.parentElement;\n }\n return nodes;\n }\n\n function finalizePath(chain, root) {\n const result = [];\n for (const node of chain) {\n const tag = node.tagName.toLowerCase();\n const attrs = collectAttrs(node);\n const attribute = chooseAttribute(tag, attrs, root);\n if (attribute) {\n result.push({\n tag,\n attributes: [\n {\n name: attribute.key,\n value: attribute.value,\n match: attribute.match,\n },\n ],\n });\n continue;\n }\n\n const siblings = getSiblings(node, root).filter(\n (candidate) => candidate.tagName.toLowerCase() === tag,\n );\n const index = siblings.indexOf(node);\n result.push({\n tag,\n index: siblings.length <= 1 || index < 0 ? undefined : index,\n });\n }\n\n return {\n nodes: result,\n };\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 = 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 createAbpDomActionBridge(context: AbpDomActionBridgeContext): DomActionBridge {\n return {\n async buildReplayPath(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n return withTemporaryExecutionResume(context, controller, async () => {\n const raw = await callNodeValueFunction(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 });\n return requireReplayPath(raw, locator);\n });\n },\n\n async inspectActionTarget(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const snapshot = await context.getDomSnapshot(locator.documentRef);\n const node = findNode(snapshot, locator);\n if (!node) {\n return disconnectedInspection();\n }\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n const metrics = await context.getViewportMetrics(document.pageRef);\n const contentQuads = await readContentQuads(controller, nodeId, metrics).catch(() =>\n node.layout?.quad === undefined ? [] : [node.layout.quad],\n );\n const bounds = contentQuads.length === 0 ? undefined : quadBounds(contentQuads[0]!);\n\n const hiddenAttribute = hasAttribute(node, \"hidden\");\n const ariaHidden = readAttributeValue(node, \"aria-hidden\") === \"true\";\n const disabled = hasAttribute(node, \"disabled\");\n const ariaDisabled = readAttributeValue(node, \"aria-disabled\") === \"true\";\n const readOnly = hasAttribute(node, \"readonly\");\n const style = readAttributeValue(node, \"style\") ?? \"\";\n const pointerEvents = readInlineStyleValue(style, \"pointer-events\") ?? \"auto\";\n const editable = isEditableElement(node) && !disabled && !ariaDisabled && !readOnly;\n\n return {\n connected: true,\n visible:\n !hiddenAttribute &&\n !ariaHidden &&\n bounds !== undefined &&\n bounds.width > 0 &&\n bounds.height > 0,\n enabled: !disabled && !ariaDisabled,\n editable,\n pointerEvents,\n ...(bounds === undefined ? {} : { bounds }),\n contentQuads,\n } satisfies DomActionTargetInspection;\n },\n\n async canonicalizePointerTarget(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n return withTemporaryExecutionResume(context, controller, async () => {\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 const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n input.target,\n );\n const hitLiveNode = context.requireLiveNode(input.hit);\n\n return withTemporaryExecutionResume(context, controller, async () => {\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 controller,\n 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 async scrollNodeIntoView(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await withTemporaryExecutionResume(context, controller, async () => {\n await controller.cdp.send(\"DOM.scrollIntoViewIfNeeded\", { nodeId });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async focusNode(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await withTemporaryExecutionResume(context, controller, async () => {\n await controller.cdp.send(\"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async pressKey(locator, input) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await withTemporaryExecutionResume(context, controller, async () => {\n await controller.cdp.send(\"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n const session = context.resolveSession(controller.sessionRef);\n await session.rest.keyPressTab(controller.tabId, {\n key: input.key,\n ...(input.modifiers === undefined ? {} : { modifiers: [...input.modifiers] }),\n ...buildInputActionRequest(),\n });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async finalizeDomAction(pageRef, options) {\n const controller = context.resolveController(pageRef);\n const boundary = await context.settleActionBoundary(controller, {\n timeoutMs: clampAbpActionSettleTimeout(options.remainingMs()),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n signal: options.signal,\n policySettle: options.policySettle,\n });\n const session = context.resolveSession(controller.sessionRef);\n if (session.closed) {\n throw createBrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n details: { pageRef },\n });\n }\n return boundary;\n },\n };\n}\n\nasync function prepareLiveNodeContext(\n context: AbpDomActionBridgeContext,\n locator: NodeLocator,\n): Promise<{\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n}> {\n const liveNode = context.requireLiveNode(locator);\n const controller = context.resolveController(liveNode.document.pageRef);\n await context.flushDomUpdateTask(controller);\n return {\n controller,\n document: liveNode.document,\n backendNodeId: liveNode.backendNodeId,\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<{ readonly nodeIds: readonly number[] }>(\n \"DOM.pushNodesByBackendIdsToFrontend\",\n {\n backendNodeIds: [backendNodeId],\n },\n );\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(locator);\n }\n return nodeId;\n } catch (error) {\n if (\n error instanceof Error &&\n /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n )\n ) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: locator.documentEpoch,\n nodeRef: locator.nodeRef,\n });\n }\n throw error;\n }\n}\n\nasync function callNodeFunctionForLocator(\n context: AbpDomActionBridgeContext,\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<{\n readonly result?: {\n readonly objectId?: string;\n readonly subtype?: string;\n };\n }>(\"Runtime.callFunctionOn\", {\n objectId: sourceObjectId,\n functionDeclaration: input.functionDeclaration,\n returnByValue: false,\n awaitPromise: true,\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<{\n readonly nodeId?: number;\n }>(\"DOM.requestNode\", { objectId: resultObjectId });\n if (requested.nodeId === undefined) {\n return undefined;\n }\n\n const described = await controller.cdp.send<{\n readonly node?: {\n readonly backendNodeId?: number;\n };\n }>(\"DOM.describeNode\", { nodeId: requested.nodeId });\n if (described.node?.backendNodeId === undefined) {\n return undefined;\n }\n\n return context.locateBackendNode(document, described.node.backendNodeId);\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n } finally {\n await releaseObject(controller, resultObjectId);\n await releaseObject(controller, sourceObjectId);\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\n const evaluated = await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n arguments: [{ objectId: argumentObjectId }, ...(input.arguments ?? [])],\n returnByValue: true,\n awaitPromise: true,\n });\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n } finally {\n await releaseObject(controller, argumentObjectId);\n await releaseObject(controller, objectId);\n }\n}\n\nasync function callNodeValueFunction(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n readonly arguments?: readonly { readonly value: unknown }[];\n },\n): Promise<unknown> {\n let objectId: string | undefined;\n\n try {\n objectId = await resolveNodeObjectId(controller, document, locator, backendNodeId);\n const evaluated = await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n ...(input.arguments === undefined ? {} : { arguments: [...input.arguments] }),\n returnByValue: true,\n awaitPromise: true,\n });\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n } finally {\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<{\n readonly object?: {\n readonly objectId?: string;\n };\n }>(\"DOM.resolveNode\", {\n backendNodeId,\n });\n const objectId = resolved.object?.objectId;\n if (objectId === undefined) {\n throw staleNodeRefError(locator);\n }\n return objectId;\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n }\n}\n\nasync function withTemporaryExecutionResume<T>(\n context: AbpDomActionBridgeContext,\n controller: PageController,\n execute: () => Promise<T>,\n): Promise<T> {\n const wasPaused = await context.syncExecutionPaused(controller);\n if (wasPaused) {\n await context.setExecutionPaused(controller, false);\n }\n try {\n return await execute();\n } finally {\n if (wasPaused && controller.lifecycleState !== \"closed\") {\n try {\n await context.setExecutionPaused(controller, true);\n } catch (error) {\n if (!context.isPageClosedError(error)) {\n throw error;\n }\n }\n }\n }\n}\n\nfunction findNode(snapshot: DomSnapshot, locator: NodeLocator): DomSnapshotNode | undefined {\n return snapshot.nodes.find((node) => node.nodeRef === locator.nodeRef);\n}\n\nfunction disconnectedInspection(): DomActionTargetInspection {\n return {\n connected: false,\n visible: false,\n enabled: false,\n editable: false,\n pointerEvents: \"auto\",\n contentQuads: [],\n };\n}\n\nfunction hasAttribute(node: DomSnapshotNode, name: string): boolean {\n return node.attributes.some((attribute) => attribute.name === name);\n}\n\nfunction readAttributeValue(node: DomSnapshotNode, name: string): string | undefined {\n return node.attributes.find((attribute) => attribute.name === name)?.value;\n}\n\nfunction isEditableElement(node: DomSnapshotNode): boolean {\n const name = node.nodeName.toLowerCase();\n return (\n name === \"input\" ||\n name === \"textarea\" ||\n name === \"select\" ||\n readAttributeValue(node, \"contenteditable\") === \"\" ||\n readAttributeValue(node, \"contenteditable\") === \"true\"\n );\n}\n\nfunction readInlineStyleValue(style: string, property: string): string | undefined {\n for (const declaration of style.split(\";\")) {\n const separatorIndex = declaration.indexOf(\":\");\n if (separatorIndex === -1) {\n continue;\n }\n const name = declaration.slice(0, separatorIndex).trim().toLowerCase();\n if (name !== property) {\n continue;\n }\n const value = declaration.slice(separatorIndex + 1).trim();\n if (value.length > 0) {\n return value;\n }\n }\n return undefined;\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\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 `live DOM replay path builder returned an invalid result for ${locator.nodeRef}`,\n );\n }\n\n return value as ReplayElementPath;\n}\n\nfunction rethrowNodeLookupError(\n document: DocumentState,\n locator: NodeLocator,\n error: unknown,\n): never {\n if (\n error instanceof Error &&\n /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n )\n ) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: locator.documentEpoch,\n nodeRef: locator.nodeRef,\n });\n }\n throw error;\n}\n\nasync function readContentQuads(\n controller: PageController,\n nodeId: number,\n metrics: ViewportMetrics,\n): Promise<readonly Quad[]> {\n const result = await controller.cdp.send<{\n readonly quads: ReadonlyArray<readonly number[]>;\n }>(\"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\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 type { PageRef } from \"@opensteer/browser-core\";\n\nimport type { AbpCdpTargetInfo } from \"./types.js\";\n\nexport function shouldClaimBootstrapTab(\n bootstrapTabId: string | undefined,\n openerPageRef: PageRef | undefined,\n): bootstrapTabId is string {\n return bootstrapTabId !== undefined && openerPageRef === undefined;\n}\n\nexport function shouldParkPageAsBootstrap(input: {\n readonly launchOwned: boolean;\n readonly remainingLogicalPages: number;\n}): boolean {\n return input.launchOwned && input.remainingLogicalPages === 0;\n}\n\nexport function chooseNextActivePageRef(\n pageRefs: readonly PageRef[],\n preferredPageRef?: PageRef,\n): PageRef | undefined {\n if (preferredPageRef !== undefined && pageRefs.includes(preferredPageRef)) {\n return preferredPageRef;\n }\n return pageRefs[0];\n}\n\nexport function resolveTabOpeners(\n targets: readonly AbpCdpTargetInfo[],\n pageRefByTabId: ReadonlyMap<string, PageRef>,\n): ReadonlyMap<string, PageRef> {\n const openerByTabId = new Map<string, PageRef>();\n\n for (const target of targets) {\n if (target.openerId === undefined) {\n continue;\n }\n\n const openerPageRef = pageRefByTabId.get(target.openerId);\n if (openerPageRef !== undefined) {\n openerByTabId.set(target.targetId, openerPageRef);\n }\n }\n\n return openerByTabId;\n}\n","import {\n bodyPayloadFromUtf8,\n closedPageError,\n closedSessionError,\n createBodyPayload,\n createBrowserCoreError,\n createChooserRef,\n createDevicePixelRatio,\n createDialogRef,\n createDocumentEpoch,\n createNodeLocator,\n createDocumentRef,\n createDownloadRef,\n createFrameRef,\n createHeaderEntry,\n createNetworkRequestId,\n createNodeRef,\n createPageRef,\n createPageScaleFactor,\n createPageZoomFactor,\n createPoint,\n createScrollOffset,\n createSessionRef,\n createSize,\n filterCookieRecords,\n isBrowserCoreError,\n matchesNetworkRecordFilters,\n waitForCdpVisualStability,\n staleNodeRefError,\n unsupportedCapabilityError,\n type BrowserInitScriptInput,\n type BrowserInitScriptRegistration,\n type BrowserRouteRegistrationInput,\n type BrowserRouteRegistration,\n type GetNetworkRecordsInput,\n type ActionBoundarySnapshot,\n type BrowserCoreEngine,\n type BodyPayload,\n type CoordinateSpace,\n type CookieRecord,\n type DocumentEpoch,\n type DocumentRef,\n type DomSnapshot,\n type FrameInfo,\n type FrameRef,\n type HitTestResult,\n type HtmlSnapshot,\n type IndexedDbDatabaseSnapshot,\n type IndexedDbObjectStoreSnapshot,\n type KeyModifier,\n type MouseButton,\n type NetworkRecord,\n type NetworkResourceType,\n type NodeLocator,\n type NodeRef,\n type PageInfo,\n type PageRef,\n type Point,\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 StorageOriginSnapshot,\n type StorageSnapshot,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport {\n OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL,\n OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL,\n type ComputerUseBridge,\n type DomActionBridge,\n} from \"@opensteer/protocol\";\nimport { STATUS_CODES } from \"node:http\";\nimport type { ChildProcess } from \"node:child_process\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n\nimport {\n ABP_BROWSER_CORE_CAPABILITIES,\n normalizeAbpBaseUrl,\n normalizeRemoteDebuggingUrl,\n type AbpBrowserCoreEngineOptions,\n type AbpLaunchOptions,\n type AdoptedAbpBrowser,\n} from \"./options.js\";\nimport { derivePageWebSocketUrl, fetchBrowserWebSocketUrl } from \"./cdp-discovery.js\";\nimport {\n BROWSER_CDP_METHOD_ALLOWLIST,\n CdpClient,\n PAGE_CDP_METHOD_ALLOWLIST,\n} from \"./cdp-transport.js\";\nimport { toDocumentPoint, toViewportPoint } from \"./coordinate.js\";\nimport {\n buildDomSnapshot as buildDomSnapshotFromCapture,\n capturePageDomSnapshot,\n findCapturedDocument,\n findHtmlBackendNodeId,\n readTextContent,\n resolveCapturedContentDocumentRef,\n updateDocumentTreeSignature,\n} from \"./dom.js\";\nimport {\n AbpApiError,\n isActionTimeoutError,\n isPageClosedApiError,\n normalizeAbpError,\n rethrowNodeLookupError,\n} from \"./errors.js\";\nimport { allocatePort, launchAbpProcess } from \"./launcher.js\";\nimport { normalizeSelectChooserEventData } from \"./action-events.js\";\nimport {\n clampAbpActionSettleTimeout,\n createAbpActionSettler,\n DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n} from \"./action-settle.js\";\nimport {\n AbpRestClient,\n buildImmediateActionRequest,\n buildImmediateScreenshotRequest,\n buildInputActionRequest,\n} from \"./rest-client.js\";\nimport { createAbpComputerUseBridge } from \"./computer-use.js\";\nimport { createAbpDomActionBridge } from \"./dom-action-bridge.js\";\nimport { buildAbpScrollSegments } from \"./scroll.js\";\nimport {\n chooseNextActivePageRef,\n resolveTabOpeners,\n shouldClaimBootstrapTab,\n shouldParkPageAsBootstrap,\n} from \"./session-model.js\";\nimport { type DiscoveredTabEffects, resolveTabChangePageRef } from \"./tab-change.js\";\nimport type {\n AbpActionEvent,\n AbpActionResponse,\n AbpCdpCookie,\n AbpCdpTargetInfo,\n AbpDomStorageItemsResult,\n AbpIndexedDbDataResult,\n AbpIndexedDbDatabaseNamesResult,\n AbpIndexedDbDatabaseResult,\n AbpNetworkCall,\n AbpStorageKeyResult,\n AbpTab,\n CapturedDomSnapshot,\n DocumentState,\n FrameDescriptor,\n FrameState,\n FrameTreeNode,\n PageController,\n SessionState,\n} from \"./types.js\";\n\nexport type {\n AbpLaunchOptions,\n AdoptedAbpBrowser,\n AbpBrowserCoreEngineOptions,\n} from \"./options.js\";\n\ninterface MainFrameSnapshot {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly title: string;\n}\n\ninterface LocalStorageOriginState {\n readonly origin: string;\n readonly storageKey: string;\n}\n\ninterface SessionHttpScriptResponse {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: ReadonlyArray<readonly [string, string]>;\n readonly bodyBase64?: string;\n readonly redirected: boolean;\n}\n\ninterface SessionHttpScriptPendingResult {\n readonly state: \"pending\";\n}\n\ninterface SessionHttpScriptFulfilledResult {\n readonly state: \"fulfilled\";\n readonly response: SessionHttpScriptResponse;\n}\n\ninterface SessionHttpScriptRejectedResult {\n readonly state: \"rejected\";\n readonly error: {\n readonly name?: string;\n readonly message: string;\n };\n}\n\ntype SessionHttpScriptPollResult =\n | SessionHttpScriptPendingResult\n | SessionHttpScriptFulfilledResult\n | SessionHttpScriptRejectedResult;\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction combineFrameUrl(url: string, fragment?: string): string {\n return `${url}${fragment ?? \"\"}`;\n}\n\nfunction isAbpPageClosedError(error: unknown): boolean {\n return isPageClosedApiError(error) || (isBrowserCoreError(error) && error.code === \"page-closed\");\n}\n\nfunction buildSessionHttpStartScript(request: SessionTransportRequest): string {\n const serialized = JSON.stringify({\n url: request.url,\n method: request.method,\n headers: (request.headers ?? []).map((header) => [header.name, header.value]),\n bodyBase64:\n request.body === undefined ? undefined : Buffer.from(request.body.bytes).toString(\"base64\"),\n followRedirects: request.followRedirects !== false,\n timeoutMs: request.timeoutMs,\n });\n\n return `(() => {\n const input = ${serialized};\n const state = globalThis.__opensteerSessionHttp ?? (globalThis.__opensteerSessionHttp = {\n nextId: 0,\n requests: Object.create(null),\n });\n const requestId = String(++state.nextId);\n state.requests[requestId] = { state: \"pending\" };\n\n const decodeBase64 = (value) => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const binary = atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index += 1) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n };\n\n const encodeBase64 = (bytes) => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n const chunk = bytes.subarray(offset, offset + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n };\n\n const headers = new Headers();\n for (const [name, value] of input.headers) {\n headers.append(name, value);\n }\n\n const controller = new AbortController();\n const timeoutId =\n typeof input.timeoutMs === \"number\"\n ? setTimeout(\n () => controller.abort(new DOMException(\"session HTTP timed out\", \"AbortError\")),\n input.timeoutMs,\n )\n : undefined;\n\n void fetch(input.url, {\n method: input.method,\n headers,\n credentials: \"include\",\n redirect: input.followRedirects ? \"follow\" : \"manual\",\n signal: controller.signal,\n ...(input.bodyBase64 === undefined ? {} : { body: decodeBase64(input.bodyBase64) }),\n })\n .then(async (response) => {\n const body = new Uint8Array(await response.arrayBuffer());\n const responseHeaders = [];\n response.headers.forEach((value, name) => {\n responseHeaders.push([name, value]);\n });\n state.requests[requestId] = {\n state: \"fulfilled\",\n response: {\n url: response.url,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n bodyBase64: encodeBase64(body),\n redirected: response.redirected,\n },\n };\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n })\n .catch((error) => {\n state.requests[requestId] = {\n state: \"rejected\",\n error: {\n ...(error && typeof error.name === \"string\" ? { name: error.name } : {}),\n message:\n error && typeof error.message === \"string\"\n ? error.message\n : \"session HTTP request failed\",\n },\n };\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n });\n\n return requestId;\n })()`;\n}\n\nfunction buildSessionHttpPollScript(requestId: string): string {\n return `(() => {\n const requests = globalThis.__opensteerSessionHttp?.requests;\n const result = requests?.[${JSON.stringify(requestId)}];\n if (!result || result.state === \"pending\") {\n return { state: \"pending\" };\n }\n delete requests[${JSON.stringify(requestId)}];\n return result;\n })()`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction normalizeSessionHttpScriptResponse(value: unknown): SessionHttpScriptResponse {\n if (!isRecord(value)) {\n throw new Error(\"ABP session HTTP returned an invalid response payload\");\n }\n\n const { url, status, statusText, headers, bodyBase64, redirected } = value;\n if (\n typeof url !== \"string\" ||\n !Number.isInteger(status) ||\n typeof statusText !== \"string\" ||\n !Array.isArray(headers) ||\n typeof redirected !== \"boolean\" ||\n (bodyBase64 !== undefined && typeof bodyBase64 !== \"string\")\n ) {\n throw new Error(\"ABP session HTTP returned an invalid response payload\");\n }\n\n const normalizedHeaders = headers.map((entry) => {\n if (!Array.isArray(entry) || entry.length !== 2) {\n throw new Error(\"ABP session HTTP returned invalid response headers\");\n }\n const [name, headerValue] = entry;\n if (typeof name !== \"string\" || typeof headerValue !== \"string\") {\n throw new Error(\"ABP session HTTP returned invalid response headers\");\n }\n return [name, headerValue] as const;\n });\n const normalizedStatus = status as number;\n\n return {\n url,\n status: normalizedStatus,\n statusText,\n headers: normalizedHeaders,\n ...(bodyBase64 === undefined ? {} : { bodyBase64 }),\n redirected,\n };\n}\n\nfunction normalizeSessionHttpScriptPollResult(value: unknown): SessionHttpScriptPollResult {\n if (!isRecord(value) || typeof value.state !== \"string\") {\n throw new Error(\"ABP session HTTP returned an invalid execution state\");\n }\n\n switch (value.state) {\n case \"pending\":\n return { state: \"pending\" };\n case \"fulfilled\":\n if (!isRecord(value.response)) {\n throw new Error(\"ABP session HTTP returned an invalid completion state\");\n }\n return {\n state: \"fulfilled\",\n response: normalizeSessionHttpScriptResponse(value.response),\n };\n case \"rejected\":\n if (!isRecord(value.error) || typeof value.error.message !== \"string\") {\n throw new Error(\"ABP session HTTP returned an invalid failure state\");\n }\n return {\n state: \"rejected\",\n error: {\n ...(typeof value.error.name === \"string\" ? { name: value.error.name } : {}),\n message: value.error.message,\n },\n };\n default:\n throw new Error(\"ABP session HTTP returned an unknown execution state\");\n }\n}\n\nfunction headerValue(\n headers: readonly { readonly name: string; readonly value: string }[],\n name: string,\n): string | undefined {\n const lowered = name.toLowerCase();\n return headers.find((header) => header.name.toLowerCase() === lowered)?.value;\n}\n\nfunction parseMimeType(value: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (value === undefined) {\n return {};\n }\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\n return {\n ...(mimeType ? { mimeType } : {}),\n ...(charset ? { charset } : {}),\n };\n}\n\nfunction normalizeDialogType(\n value: string | undefined,\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\nfunction normalizeCookieSameSite(value: AbpCdpCookie[\"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\nfunction normalizeCookiePriority(value: AbpCdpCookie[\"priority\"]): CookieRecord[\"priority\"] {\n switch (value) {\n case \"Low\":\n return \"low\";\n case \"Medium\":\n return \"medium\";\n case \"High\":\n return \"high\";\n }\n}\n\nfunction toCdpCookieSameSite(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\nfunction toCdpCookiePriority(value: CookieRecord[\"priority\"]): \"Low\" | \"Medium\" | \"High\" {\n switch (value) {\n case \"low\":\n return \"Low\";\n case \"high\":\n return \"High\";\n case \"medium\":\n default:\n return \"Medium\";\n }\n}\n\nfunction normalizeResourceType(value: string | undefined): NetworkResourceType {\n switch ((value ?? \"\").toLowerCase()) {\n case \"document\":\n return \"document\";\n case \"stylesheet\":\n return \"stylesheet\";\n case \"image\":\n return \"image\";\n case \"media\":\n return \"media\";\n case \"font\":\n return \"font\";\n case \"script\":\n return \"script\";\n case \"fetch\":\n return \"fetch\";\n case \"xhr\":\n return \"xhr\";\n case \"websocket\":\n return \"websocket\";\n case \"manifest\":\n return \"manifest\";\n case \"texttrack\":\n return \"texttrack\";\n case \"beacon\":\n return \"beacon\";\n case \"ping\":\n return \"ping\";\n case \"preflight\":\n return \"preflight\";\n case \"eventsource\":\n return \"event-stream\";\n default:\n return \"other\";\n }\n}\n\nfunction parseHeaderJson(\n value: string | undefined,\n): readonly { readonly name: string; readonly value: string }[] {\n if (value === undefined || value.length === 0) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(value) as Record<string, unknown>;\n return Object.entries(parsed).flatMap(([name, headerValue]) =>\n typeof headerValue === \"string\" ? [createHeaderEntry(name, headerValue)] : [],\n );\n } catch {\n return [];\n }\n}\n\nfunction parseFrameDescriptor(value: unknown): FrameDescriptor | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const candidate = value as Record<string, unknown>;\n if (typeof candidate.id !== \"string\" || typeof candidate.url !== \"string\") {\n return undefined;\n }\n\n return {\n id: candidate.id,\n ...(typeof candidate.parentId === \"string\" ? { parentId: candidate.parentId } : {}),\n ...(typeof candidate.name === \"string\" && candidate.name.length > 0\n ? { name: candidate.name }\n : {}),\n url: candidate.url,\n ...(typeof candidate.urlFragment === \"string\" ? { urlFragment: candidate.urlFragment } : {}),\n };\n}\n\nfunction parseOrigin(value: string): string | undefined {\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nasync function waitForProcessExit(process: ChildProcess | undefined): Promise<void> {\n if (!process || process.exitCode !== null) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const onExit = () => resolve();\n process.once(\"exit\", onExit);\n const timer = setTimeout(() => {\n process.off(\"exit\", onExit);\n try {\n process.kill(\"SIGKILL\");\n } catch {}\n resolve();\n }, 5_000);\n process.once(\"exit\", () => clearTimeout(timer));\n });\n}\n\nexport class AbpBrowserCoreEngine implements BrowserCoreEngine {\n readonly capabilities = ABP_BROWSER_CORE_CAPABILITIES;\n\n private readonly launchOptions: AbpLaunchOptions | undefined;\n private readonly adoptedBrowser: AdoptedAbpBrowser | undefined;\n private readonly extraHTTPHeaders: readonly { readonly name: string; readonly value: string }[];\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 downloadRefsByAbpId = new Map<string, ReturnType<typeof createDownloadRef>>();\n private readonly actionSettler = createAbpActionSettler({\n syncExecutionPaused: (controller) => this.syncControllerExecutionPaused(controller),\n setExecutionPaused: (controller, paused) =>\n this.setControllerExecutionPaused(controller, paused),\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: () => true,\n throwBackgroundError: (controller) => this.throwBackgroundError(controller),\n isPageClosedError: isAbpPageClosedError,\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 computerUseBridge: ComputerUseBridge | undefined;\n private domActionBridge: DomActionBridge | undefined;\n private eventCounter = 0;\n private stepCounter = 0;\n private dialogCounter = 0;\n private chooserCounter = 0;\n private downloadCounter = 0;\n private disposed = false;\n\n private constructor(options: {\n readonly launchOptions?: AbpLaunchOptions;\n readonly adoptedBrowser?: AdoptedAbpBrowser;\n readonly extraHTTPHeaders: readonly { readonly name: string; readonly value: string }[];\n }) {\n this.launchOptions = options.launchOptions;\n this.adoptedBrowser = options.adoptedBrowser;\n this.extraHTTPHeaders = options.extraHTTPHeaders;\n }\n\n static async create(options: AbpBrowserCoreEngineOptions = {}): Promise<AbpBrowserCoreEngine> {\n if (options.browser && options.launch) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either launch or browser options, not both\",\n );\n }\n if (options.launch?.abpExecutablePath && options.launch.browserExecutablePath) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either an ABP wrapper executable path or a browser executable path, not both\",\n );\n }\n\n const adoptedBrowser = options.browser\n ? {\n baseUrl: normalizeAbpBaseUrl(options.browser.baseUrl),\n remoteDebuggingUrl: normalizeRemoteDebuggingUrl(options.browser.remoteDebuggingUrl),\n }\n : undefined;\n\n if (adoptedBrowser) {\n await fetchBrowserWebSocketUrl(adoptedBrowser.remoteDebuggingUrl);\n }\n\n return new AbpBrowserCoreEngine({\n ...(options.browser ? {} : { launchOptions: options.launch }),\n ...(adoptedBrowser === undefined ? {} : { adoptedBrowser }),\n extraHTTPHeaders: options.extraHTTPHeaders ?? [],\n });\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\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge {\n this.computerUseBridge ??= createAbpComputerUseBridge({\n resolveController: (pageRef) => this.requirePage(pageRef),\n resolveSession: (sessionRef) => this.requireSession(sessionRef),\n normalizeActionEvents: (controller, response) =>\n this.normalizeActionEvents(controller, response),\n detectNewTabs: (session, openerController) => this.detectNewTabs(session, openerController),\n executeInputAction: (session, controller, execute) =>\n this.executeInputAction(session, controller, execute),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({ controller, ...options }),\n requireMainFrame: (controller) => this.requireMainFrame(controller),\n drainQueuedEvents: (pageRef) => this.drainQueuedEvents(pageRef),\n });\n return this.computerUseBridge;\n }\n\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge {\n this.domActionBridge ??= createAbpDomActionBridge({\n resolveController: (pageRef: PageRef) => this.requirePage(pageRef),\n resolveSession: (sessionRef: SessionRef) => this.requireSession(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({ controller, ...options }),\n syncExecutionPaused: (controller) => this.syncControllerExecutionPaused(controller),\n setExecutionPaused: (controller, paused) =>\n this.setControllerExecutionPaused(controller, paused),\n isPageClosedError: isAbpPageClosedError,\n locateBackendNode: (document, backendNodeId) =>\n createNodeLocator(\n document.documentRef,\n document.documentEpoch,\n this.nodeRefForBackendNode(document, backendNodeId),\n ),\n requireLiveNode: (locator) => this.requireLiveNode(locator),\n getDomSnapshot: (documentRef: DocumentRef) => this.getDomSnapshot({ documentRef }),\n getViewportMetrics: (pageRef: PageRef) => this.getViewportMetrics({ pageRef }),\n });\n return this.domActionBridge;\n }\n\n async createSession(): Promise<SessionRef> {\n this.assertNotDisposed();\n\n if (this.adoptedBrowser) {\n if (this.sessions.size > 0) {\n throw createBrowserCoreError(\n \"operation-failed\",\n \"adopted ABP engines expose exactly one session\",\n );\n }\n return this.createAdoptedSession();\n }\n\n return this.createLaunchSession();\n }\n\n async closeSession(input: { readonly sessionRef: SessionRef }): Promise<void> {\n const session = this.requireSession(input.sessionRef);\n session.closed = true;\n\n for (const controller of session.controllersByPageRef.values()) {\n controller.explicitCloseInFlight = true;\n }\n\n for (const controller of Array.from(session.controllersByPageRef.values())) {\n await controller.cdp.close().catch(() => undefined);\n this.cleanupPageController(controller);\n }\n\n await session.browserCdp.close().catch(() => undefined);\n\n if (session.closeBrowserOnDispose) {\n await session.rest.shutdownBrowser().catch(() => undefined);\n await waitForProcessExit(session.process);\n }\n\n this.sessions.delete(session.sessionRef);\n\n if (session.ownedUserDataDir && session.userDataDir) {\n await rm(session.userDataDir, { recursive: true, force: true }).catch(() => undefined);\n }\n if (session.ownedSessionDir && session.sessionDir) {\n await rm(session.sessionDir, { recursive: true, force: true }).catch(() => undefined);\n }\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\n let tabId: string;\n if (shouldClaimBootstrapTab(session.bootstrapTabId, input.openerPageRef)) {\n tabId = session.bootstrapTabId;\n session.bootstrapTabId = undefined;\n } else {\n const created = await session.rest.createTab();\n tabId = created.id;\n }\n\n const controller = await this.initializePageController(session, tabId, {\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n });\n session.activePageRef = controller.pageRef;\n\n const directEvents: StepEvent[] = [\n this.createEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n }),\n ];\n\n if (input.openerPageRef !== undefined) {\n directEvents.push(\n this.createEvent({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n openerPageRef: input.openerPageRef,\n }),\n );\n }\n\n if (input.url) {\n const before = await this.captureMainFrameSnapshot(controller);\n let response: AbpActionResponse;\n try {\n response = await session.rest.navigateTab(controller.tabId, {\n url: input.url,\n ...buildImmediateActionRequest(),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: 30_000,\n requireDocumentChange: false,\n observeTitle: false,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const normalizedEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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: [...directEvents, ...normalizedEvents],\n data: await this.buildPageInfo(controller),\n });\n }\n\n await this.waitForMainFrame(controller, 10_000);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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: directEvents,\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n\n controller.explicitCloseInFlight = true;\n\n const remainingLogicalPages = session.pageRefs.size - 1;\n if (\n shouldParkPageAsBootstrap({\n launchOwned: session.closeBrowserOnDispose,\n remainingLogicalPages,\n })\n ) {\n try {\n await session.rest.navigateTab(controller.tabId, {\n url: \"chrome://newtab/\",\n ...buildImmediateActionRequest({\n captureNetwork: false,\n }),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n session.bootstrapTabId = controller.tabId;\n } else {\n try {\n await session.rest.closeTab(controller.tabId);\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n await controller.cdp.close().catch(() => undefined);\n this.cleanupPageController(controller);\n session.activePageRef = chooseNextActivePageRef(Array.from(session.pageRefs));\n\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: [\n this.createEvent({\n kind: \"page-closed\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n ],\n data: undefined,\n });\n }\n\n async activatePage(input: { readonly pageRef: PageRef }): Promise<StepResult<PageInfo>> {\n const controller = this.requirePage(input.pageRef);\n const session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n try {\n await session.rest.activateTab(controller.tabId);\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n session.activePageRef = controller.pageRef;\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\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 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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.navigateTab(controller.tabId, {\n url: input.url,\n ...(input.referrer === undefined ? {} : { referrer: input.referrer }),\n ...buildImmediateActionRequest(),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: input.timeoutMs ?? 30_000,\n requireDocumentChange: false,\n observeTitle: false,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: clampAbpActionSettleTimeout(input.timeoutMs),\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.reloadTab(controller.tabId, buildImmediateActionRequest());\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: input.timeoutMs ?? 30_000,\n requireDocumentChange: true,\n observeTitle: false,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: clampAbpActionSettleTimeout(input.timeoutMs),\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.goBack(controller.tabId, buildImmediateActionRequest());\n } catch (error) {\n if (this.isHistoryBoundaryError(error, \"back\")) {\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: false,\n });\n }\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: 5_000,\n requireDocumentChange: false,\n observeTitle: true,\n allowFallback: true,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\n data: true,\n });\n }\n\n async goForward(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n const controller = this.requirePage(input.pageRef);\n const session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.goForward(controller.tabId, buildImmediateActionRequest());\n } catch (error) {\n if (this.isHistoryBoundaryError(error, \"forward\")) {\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: false,\n });\n }\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: 5_000,\n requireDocumentChange: false,\n observeTitle: true,\n allowFallback: true,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\n data: true,\n });\n }\n\n async stopLoading(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n try {\n await session.rest.stopTab(controller.tabId);\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\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: 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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.moveTab(controller.tabId, {\n x: point.x,\n y: point.y,\n ...buildImmediateActionRequest(),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\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: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.normalizeActionEvents(controller, response)),\n ],\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 session = this.requireSession(controller.sessionRef);\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\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.clickTab(controller.tabId, {\n x: point.x,\n y: point.y,\n ...(input.button === undefined ? {} : { button: input.button }),\n ...(input.clickCount === undefined ? {} : { click_count: input.clickCount }),\n ...(input.modifiers === undefined ? {} : { modifiers: [...input.modifiers] }),\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.scrollTab(controller.tabId, {\n x: point.x,\n y: point.y,\n scrolls: buildAbpScrollSegments(input.delta),\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.keyPressTab(controller.tabId, {\n key: input.key,\n ...(input.modifiers === undefined ? {} : { modifiers: [...input.modifiers] }),\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.typeTab(controller.tabId, {\n text: input.text,\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\n data: undefined,\n });\n }\n\n async captureScreenshot(input: {\n readonly pageRef: PageRef;\n readonly format?: ScreenshotFormat;\n readonly clip?: import(\"@opensteer/browser-core\").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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n if (input.clip) {\n throw unsupportedCapabilityError(\"executor.screenshots\");\n }\n if (input.fullPage) {\n throw unsupportedCapabilityError(\"executor.screenshots\");\n }\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.screenshotTab(\n controller.tabId,\n buildImmediateScreenshotRequest({\n ...(input.includeCursor === undefined ? {} : { cursor: input.includeCursor }),\n ...(input.format === undefined ? {} : { format: input.format }),\n }),\n );\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n const screenshot = response.screenshot_after;\n if (!screenshot) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `ABP screenshot response for ${controller.pageRef} did not include image data`,\n );\n }\n\n const format = (screenshot.format as ScreenshotFormat | undefined) ?? input.format ?? \"png\";\n const payload = createBodyPayload(new Uint8Array(Buffer.from(screenshot.data, \"base64\")), {\n mimeType: `image/${format}`,\n });\n\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: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.normalizeActionEvents(controller, response)),\n ],\n data: {\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload,\n format,\n size: createSize(screenshot.width, screenshot.height),\n coordinateSpace: \"layout-viewport-css\",\n },\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n if (input.paused !== undefined && input.frozen !== undefined && input.paused !== input.frozen) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"ABP pause and freeze controls are the same underlying state\",\n );\n }\n\n const beforePaused = controller.executionPaused;\n const requestedPaused = input.paused ?? input.frozen;\n const state =\n requestedPaused === undefined\n ? await session.rest.getExecutionState(controller.tabId)\n : await session.rest\n .setExecutionState(controller.tabId, { paused: requestedPaused })\n .catch((error) => {\n throw normalizeAbpError(error, controller.pageRef);\n });\n\n const afterPaused = state.paused;\n controller.executionPaused = afterPaused;\n const mainFrame = this.requireMainFrame(controller);\n const events: StepEvent[] = [];\n\n if (!beforePaused && afterPaused) {\n events.push(\n this.createEvent({\n kind: \"paused\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n );\n events.push(\n this.createEvent({\n kind: \"frozen\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n );\n }\n\n if (beforePaused && !afterPaused) {\n events.push(\n this.createEvent({\n kind: \"resumed\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n );\n }\n\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,\n data: {\n paused: afterPaused,\n frozen: afterPaused,\n },\n });\n }\n\n async listPages(input: { readonly sessionRef: SessionRef }): Promise<readonly PageInfo[]> {\n const session = this.requireSession(input.sessionRef);\n return Promise.all(\n Array.from(session.pageRefs, async (pageRef) =>\n this.buildPageInfo(this.requirePage(pageRef)),\n ),\n );\n }\n\n async drainEvents(input: { readonly pageRef: PageRef }): Promise<readonly StepEvent[]> {\n return this.drainQueuedEvents(input.pageRef);\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 response = await controller.cdp.send<{ readonly outerHTML: string }>(\"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: response.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 (liveDocument, backendNodeId) => this.nodeRefForBackendNode(liveDocument, backendNodeId),\n (contentDocumentIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocumentIndex),\n );\n }\n\n async getActionBoundarySnapshot(input: {\n readonly pageRef: PageRef;\n }): Promise<ActionBoundarySnapshot> {\n const controller = this.requirePage(input.pageRef);\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.flushDomUpdateTask(controller);\n await this.actionSettler.waitForPostLoadQuiet({\n controller,\n timeoutMs: clampAbpActionSettleTimeout(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 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 (resolvedDocument, backendNodeId) =>\n this.nodeRefForBackendNode(resolvedDocument, backendNodeId),\n (contentDocumentIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocumentIndex),\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\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send<{ readonly nodeIds: readonly number[] }>(\n \"DOM.pushNodesByBackendIdsToFrontend\",\n {\n backendNodeIds: [backendNodeId],\n },\n );\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(input);\n }\n const attributesResult = await controller.cdp.send<{\n readonly attributes: readonly string[];\n }>(\"DOM.getAttributes\", { nodeId });\n const attributes: { name: string; value: string }[] = [];\n for (let index = 0; index < attributesResult.attributes.length; index += 2) {\n const name = attributesResult.attributes[index];\n const value = attributesResult.attributes[index + 1];\n if (name !== undefined && value !== undefined) {\n attributes.push({ name, value });\n }\n }\n return attributes;\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 raw = await controller.cdp.send<{\n readonly backendNodeId: number;\n readonly frameId: string;\n }>(\"DOM.getNodeForLocation\", {\n x: Math.round(viewportPoint.x),\n y: Math.round(viewportPoint.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\n if (frame.isMainFrame) {\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send<{ readonly nodeIds: readonly number[] }>(\n \"DOM.pushNodesByBackendIdsToFrontend\",\n {\n backendNodeIds: [raw.backendNodeId],\n },\n );\n const nodeId = frontend.nodeIds[0];\n if (nodeId !== undefined) {\n const quads = await controller.cdp.send<{\n readonly quads: ReadonlyArray<readonly number[]>;\n }>(\"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 const layout = await controller.cdp.send<{\n readonly cssLayoutViewport: {\n readonly pageX: number;\n readonly pageY: number;\n readonly clientWidth: number;\n readonly clientHeight: number;\n };\n readonly cssVisualViewport: {\n readonly pageX: number;\n readonly pageY: number;\n readonly offsetX: number;\n readonly offsetY: number;\n readonly clientWidth: number;\n readonly clientHeight: number;\n readonly scale: number;\n readonly zoom?: number;\n };\n readonly cssContentSize: {\n readonly width: number;\n readonly height: number;\n };\n }>(\"Page.getLayoutMetrics\");\n\n let baseDevicePixelRatio = 1;\n try {\n const screens = await controller.cdp.send<{\n readonly screenInfos: ReadonlyArray<{\n readonly isPrimary?: boolean;\n readonly devicePixelRatio?: number;\n }>;\n }>(\"Emulation.getScreenInfos\");\n const primary =\n screens.screenInfos.find((screen) => screen.isPrimary) ?? screens.screenInfos[0];\n baseDevicePixelRatio = primary?.devicePixelRatio ?? 1;\n } catch {\n baseDevicePixelRatio = 1;\n }\n\n const pageZoomFactor = layout.cssVisualViewport.zoom ?? 1;\n return {\n layoutViewport: {\n origin: createPoint(layout.cssLayoutViewport.pageX, layout.cssLayoutViewport.pageY),\n size: createSize(\n layout.cssLayoutViewport.clientWidth,\n layout.cssLayoutViewport.clientHeight,\n ),\n },\n visualViewport: {\n origin: createPoint(layout.cssVisualViewport.pageX, layout.cssVisualViewport.pageY),\n offsetWithinLayoutViewport: createScrollOffset(\n layout.cssVisualViewport.offsetX,\n layout.cssVisualViewport.offsetY,\n ),\n size: createSize(\n layout.cssVisualViewport.clientWidth,\n layout.cssVisualViewport.clientHeight,\n ),\n },\n scrollOffset: createScrollOffset(\n layout.cssVisualViewport.pageX,\n layout.cssVisualViewport.pageY,\n ),\n contentSize: createSize(layout.cssContentSize.width, layout.cssContentSize.height),\n devicePixelRatio: createDevicePixelRatio(baseDevicePixelRatio * pageZoomFactor),\n pageScaleFactor: createPageScaleFactor(layout.cssVisualViewport.scale),\n pageZoomFactor: createPageZoomFactor(pageZoomFactor),\n };\n }\n\n async getNetworkRecords(input: GetNetworkRecordsInput): Promise<readonly NetworkRecord[]> {\n const session = this.requireSession(input.sessionRef);\n const includeBodies = input.includeBodies ?? false;\n const requestIds =\n input.requestIds === undefined\n ? undefined\n : new Set<NetworkRecord[\"requestId\"]>(\n input.requestIds as readonly NetworkRecord[\"requestId\"][],\n );\n input.signal?.throwIfAborted?.();\n\n if (input.pageRef) {\n const controller = this.requirePage(input.pageRef);\n if (controller.sessionRef !== session.sessionRef) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n `page ${input.pageRef} does not belong to session ${input.sessionRef}`,\n );\n }\n return this.readNetworkRecordsForPage(session, controller.pageRef, {\n includeBodies,\n ...(requestIds === undefined ? {} : { requestIds }),\n filters: input,\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n }\n\n const records = await Promise.all(\n Array.from(session.pageRefs, async (pageRef) => {\n return this.readNetworkRecordsForPage(session, pageRef, {\n includeBodies,\n ...(requestIds === undefined ? {} : { requestIds }),\n filters: input,\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n }),\n );\n return records.flat();\n }\n\n private async readNetworkRecordsForPage(\n session: SessionState,\n pageRef: PageRef,\n input: {\n readonly includeBodies: boolean;\n readonly requestIds?: ReadonlySet<NetworkRecord[\"requestId\"]>;\n readonly filters: GetNetworkRecordsInput;\n readonly signal?: AbortSignal;\n },\n ): Promise<readonly NetworkRecord[]> {\n const controller = this.requirePage(pageRef);\n const filterInput = {\n ...(input.filters.url === undefined ? {} : { url: input.filters.url }),\n ...(input.filters.hostname === undefined ? {} : { hostname: input.filters.hostname }),\n ...(input.filters.path === undefined ? {} : { path: input.filters.path }),\n ...(input.filters.method === undefined ? {} : { method: input.filters.method }),\n ...(input.filters.status === undefined ? {} : { status: input.filters.status }),\n ...(input.filters.resourceType === undefined\n ? {}\n : { resourceType: input.filters.resourceType }),\n };\n const metadataCalls = await raceWithAbort(\n session.rest.queryNetwork({\n tabId: controller.tabId,\n includeBodies: false,\n }),\n input.signal,\n );\n const metadataSnapshotRecords = metadataCalls.map((call) =>\n this.normalizeNetworkRecord(session, pageRef, call, false),\n );\n this.storeNetworkRecords(session, metadataSnapshotRecords);\n const metadataRecords = this.readLocalNetworkRecords(session, pageRef, input.includeBodies, {\n filters: filterInput,\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n });\n if (!input.includeBodies) {\n return metadataRecords;\n }\n\n let bodyCalls: readonly AbpNetworkCall[];\n try {\n bodyCalls = await raceWithAbort(\n session.rest.queryNetwork({\n tabId: controller.tabId,\n includeBodies: true,\n }),\n input.signal,\n );\n } catch (error) {\n if (input.signal?.aborted) {\n throw error;\n }\n const failedRecords = metadataRecords.map((record) =>\n this.markNetworkRecordBodyFailure(record, error),\n );\n this.storeNetworkRecords(session, failedRecords);\n return this.readLocalNetworkRecords(session, pageRef, true, {\n filters: filterInput,\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n });\n }\n\n const bodySnapshotRecords = bodyCalls.map((call) =>\n this.normalizeNetworkRecord(session, pageRef, call, true),\n );\n this.storeNetworkRecords(session, bodySnapshotRecords);\n return this.readLocalNetworkRecords(session, pageRef, true, {\n filters: filterInput,\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n });\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 result = await session.browserCdp.send<{ readonly cookies: readonly AbpCdpCookie[] }>(\n \"Storage.getCookies\",\n );\n const cookies = result.cookies.map((cookie) => {\n const sameSite = normalizeCookieSameSite(cookie.sameSite);\n const priority = normalizeCookiePriority(cookie.priority);\n return {\n sessionRef: session.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 ...(priority === undefined ? {} : { priority }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n session: cookie.expires === undefined || cookie.expires < 0,\n ...(cookie.expires === undefined || cookie.expires < 0\n ? { expiresAt: null }\n : { expiresAt: cookie.expires * 1000 }),\n } satisfies CookieRecord;\n });\n\n return input.urls ? filterCookieRecords(cookies, [...input.urls]) : cookies;\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.browserCdp.send(\"Storage.setCookies\", {\n cookies: 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: toCdpCookieSameSite(cookie.sameSite) }),\n ...(cookie.priority === undefined\n ? {}\n : { priority: toCdpCookiePriority(cookie.priority) }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n ...(cookie.session || cookie.expiresAt === undefined || cookie.expiresAt === null\n ? {}\n : { expires: 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 origins = new Map<string, LocalStorageOriginState>();\n\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 const origin = parseOrigin(frame.currentDocument.url);\n if (origin === undefined) {\n continue;\n }\n if (origin === \"null\" || origins.has(origin)) {\n continue;\n }\n try {\n const storageKey = await controller.cdp.send<AbpStorageKeyResult>(\n \"Storage.getStorageKey\",\n {\n frameId: frame.cdpFrameId,\n },\n );\n origins.set(origin, {\n origin,\n storageKey: storageKey.storageKey,\n });\n } catch {}\n }\n }\n\n const normalizedOrigins: StorageOriginSnapshot[] = [];\n for (const { origin, storageKey } of origins.values()) {\n const localStorage = await this.readStorageEntriesForOrigin(session, storageKey, true);\n const indexedDb = includeIndexedDb\n ? await this.readIndexedDbSnapshotForOrigin(session, origin, storageKey)\n : undefined;\n normalizedOrigins.push({\n origin,\n localStorage,\n ...(indexedDb === undefined ? {} : { indexedDb }),\n });\n }\n\n const sessionStorage = includeSessionStorage\n ? await this.collectSessionStorageSnapshots(session)\n : undefined;\n\n return {\n sessionRef: session.sessionRef,\n capturedAt: Date.now(),\n origins: normalizedOrigins,\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n const serialized = JSON.stringify({\n script: input.script,\n args: input.args ?? [],\n });\n\n try {\n const result = await withTimeout(\n session.rest.executeScript<unknown>(\n controller.tabId,\n `(() => {\n const input = ${serialized};\n const evaluated = (0, eval)(input.script);\n if (typeof evaluated === \"function\") {\n return evaluated(...(input.args ?? []));\n }\n return evaluated;\n })()`,\n {\n wait_until: {\n type: \"immediate\",\n },\n screenshot: {\n area: \"none\",\n },\n },\n ),\n input.timeoutMs,\n );\n\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: result,\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n async addInitScript(_input: BrowserInitScriptInput): Promise<BrowserInitScriptRegistration> {\n throw unsupportedCapabilityError(\"instrumentation.initScripts\");\n }\n\n async registerRoute(_input: BrowserRouteRegistrationInput): Promise<BrowserRouteRegistration> {\n throw unsupportedCapabilityError(\"instrumentation.routing\");\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 activePageRef = session.activePageRef;\n if (!activePageRef) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `session ${input.sessionRef} has no active page for session HTTP`,\n );\n }\n\n const controller = this.requirePage(activePageRef);\n const startedAt = Date.now();\n input.signal?.throwIfAborted?.();\n const requestId = await raceWithAbort(\n session.rest.executeScript<string>(\n controller.tabId,\n buildSessionHttpStartScript(input.request),\n {\n wait_until: {\n type: \"immediate\",\n },\n screenshot: {\n area: \"none\",\n },\n },\n ),\n input.signal,\n );\n\n let response: SessionHttpScriptResponse;\n try {\n response = await raceWithAbort(\n this.awaitSessionHttpResponse(session, controller, requestId, input.request.timeoutMs),\n input.signal,\n );\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n const responseHeaders = response.headers.map(([name, value]) => createHeaderEntry(name, value));\n const contentType = headerValue(responseHeaders, \"content-type\");\n const payload =\n response.bodyBase64 === undefined\n ? undefined\n : createBodyPayload(new Uint8Array(Buffer.from(response.bodyBase64, \"base64\")), {\n encoding: \"base64\",\n ...parseMimeType(contentType),\n });\n\n const mainFrame = this.requireMainFrame(controller);\n this.storeNetworkRecords(session, [\n this.createSessionHttpNetworkRecord(session, controller, mainFrame, input.request, response, {\n responseHeaders,\n ...(payload === undefined ? {} : { responseBody: payload }),\n }),\n ]);\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: {\n url: response.url,\n status: response.status,\n statusText: response.statusText || STATUS_CODES[response.status] || \"\",\n headers: responseHeaders,\n ...(payload === undefined ? {} : { body: payload }),\n redirected: response.redirected,\n },\n });\n }\n\n private async awaitSessionHttpResponse(\n session: SessionState,\n controller: PageController,\n requestId: string,\n timeoutMs: number | undefined,\n ): Promise<SessionHttpScriptResponse> {\n const startedAt = Date.now();\n const maxWaitMs =\n timeoutMs === undefined ? 30_000 : Math.max(Math.ceil(timeoutMs) + 1_000, 30_000);\n\n while (Date.now() - startedAt < maxWaitMs) {\n const result = normalizeSessionHttpScriptPollResult(\n await session.rest.executeScript<unknown>(\n controller.tabId,\n buildSessionHttpPollScript(requestId),\n {\n wait_until: {\n type: \"immediate\",\n },\n screenshot: {\n area: \"none\",\n },\n },\n ),\n );\n\n if (result.state === \"pending\") {\n await delay(25);\n continue;\n }\n\n if (result.state === \"rejected\") {\n throw createBrowserCoreError(\n result.error.name === \"AbortError\" ? \"timeout\" : \"operation-failed\",\n result.error.message,\n );\n }\n\n return result.response;\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `session ${session.sessionRef} did not finish a session HTTP request within ${String(maxWaitMs)}ms`,\n );\n }\n\n private async createLaunchSession(): Promise<SessionRef> {\n const sessionRef = createSessionRef(`abp-${++this.sessionCounter}`);\n const userDataDir =\n this.launchOptions?.userDataDir ??\n (await mkdtemp(join(tmpdir(), \"opensteer-abp-user-data-\")));\n const sessionDir =\n this.launchOptions?.sessionDir ?? (await mkdtemp(join(tmpdir(), \"opensteer-abp-session-\")));\n const restPort = await allocatePort();\n const launchArgs = [...(this.launchOptions?.args ?? [])];\n if (!launchArgs.some((arg) => arg.startsWith(\"--remote-debugging-port\"))) {\n launchArgs.push(\"--remote-debugging-port=0\");\n }\n\n const launched = await launchAbpProcess({\n port: restPort,\n userDataDir,\n sessionDir,\n ...(this.launchOptions?.abpExecutablePath === undefined\n ? {}\n : { abpExecutablePath: this.launchOptions.abpExecutablePath }),\n ...(this.launchOptions?.browserExecutablePath === undefined\n ? {}\n : { browserExecutablePath: this.launchOptions.browserExecutablePath }),\n headless: this.launchOptions?.headless ?? true,\n args: launchArgs,\n verbose: this.launchOptions?.verbose ?? false,\n });\n\n try {\n const browserWebSocketUrl = await fetchBrowserWebSocketUrl(launched.remoteDebuggingUrl);\n const browserCdp = await CdpClient.connect({\n url: browserWebSocketUrl,\n allowedMethods: BROWSER_CDP_METHOD_ALLOWLIST,\n });\n const session: SessionState = {\n sessionRef,\n mode: \"launch\",\n baseUrl: launched.baseUrl,\n remoteDebuggingUrl: launched.remoteDebuggingUrl,\n browserWebSocketUrl,\n closeBrowserOnDispose: true,\n rest: new AbpRestClient(launched.baseUrl, this.extraHTTPHeaders),\n browserCdp,\n pageRefs: new Set(),\n controllersByPageRef: new Map(),\n pageRefByTabId: new Map(),\n networkRecordsByRequestId: new Map(),\n userDataDir,\n sessionDir,\n ownedUserDataDir: this.launchOptions?.userDataDir === undefined,\n ownedSessionDir: this.launchOptions?.sessionDir === undefined,\n process: launched.process,\n bootstrapTabId: undefined,\n activePageRef: undefined,\n closed: false,\n };\n this.sessions.set(sessionRef, session);\n\n const tabs = await session.rest.listTabs();\n if (tabs.length > 0) {\n session.bootstrapTabId = tabs[0]?.id;\n }\n return sessionRef;\n } catch (error) {\n launched.process.kill(\"SIGKILL\");\n await waitForProcessExit(launched.process);\n if (this.launchOptions?.userDataDir === undefined) {\n await rm(userDataDir, { recursive: true, force: true }).catch(() => undefined);\n }\n if (this.launchOptions?.sessionDir === undefined) {\n await rm(sessionDir, { recursive: true, force: true }).catch(() => undefined);\n }\n throw error;\n }\n }\n\n private async createAdoptedSession(): Promise<SessionRef> {\n if (!this.adoptedBrowser) {\n throw createBrowserCoreError(\n \"operation-failed\",\n \"adopted browser options are not configured\",\n );\n }\n\n const sessionRef = createSessionRef(`abp-${++this.sessionCounter}`);\n const browserWebSocketUrl = await fetchBrowserWebSocketUrl(\n this.adoptedBrowser.remoteDebuggingUrl,\n );\n const browserCdp = await CdpClient.connect({\n url: browserWebSocketUrl,\n allowedMethods: BROWSER_CDP_METHOD_ALLOWLIST,\n });\n const session: SessionState = {\n sessionRef,\n mode: \"browser\",\n baseUrl: this.adoptedBrowser.baseUrl,\n remoteDebuggingUrl: this.adoptedBrowser.remoteDebuggingUrl,\n browserWebSocketUrl,\n closeBrowserOnDispose: false,\n rest: new AbpRestClient(this.adoptedBrowser.baseUrl, this.extraHTTPHeaders),\n browserCdp,\n pageRefs: new Set(),\n controllersByPageRef: new Map(),\n pageRefByTabId: new Map(),\n networkRecordsByRequestId: new Map(),\n ownedUserDataDir: false,\n ownedSessionDir: false,\n process: undefined,\n bootstrapTabId: undefined,\n activePageRef: undefined,\n closed: false,\n };\n this.sessions.set(sessionRef, session);\n\n const [tabs, targets] = await Promise.all([\n session.rest.listTabs(),\n session.browserCdp.send<{ readonly targetInfos: readonly AbpCdpTargetInfo[] }>(\n \"Target.getTargets\",\n ),\n ]);\n\n for (const tab of tabs) {\n const controller = await this.initializePageController(session, tab.id, {\n metadata: {\n url: tab.url,\n title: tab.title,\n },\n });\n if (tab.active) {\n session.activePageRef = controller.pageRef;\n }\n }\n\n const openerByTabId = resolveTabOpeners(targets.targetInfos, session.pageRefByTabId);\n for (const [tabId, openerPageRef] of openerByTabId) {\n const pageRef = session.pageRefByTabId.get(tabId);\n if (pageRef === undefined) {\n continue;\n }\n this.requirePage(pageRef).openerPageRef = openerPageRef;\n }\n\n session.activePageRef ??= chooseNextActivePageRef(Array.from(session.pageRefs));\n return sessionRef;\n }\n\n private async initializePageController(\n session: SessionState,\n tabId: string,\n options: {\n readonly openerPageRef?: PageRef;\n readonly metadata?: {\n readonly url?: string;\n readonly title?: string;\n };\n readonly installSettleTracker?: boolean;\n } = {},\n ): Promise<PageController> {\n const existingPageRef = session.pageRefByTabId.get(tabId);\n if (existingPageRef) {\n const existing = this.requirePage(existingPageRef);\n if (options.openerPageRef !== undefined) {\n existing.openerPageRef = options.openerPageRef;\n }\n return existing;\n }\n\n const targetInfo = await this.waitForPageTargetInfo(session, tabId, options.metadata);\n const cdp = await CdpClient.connect({\n url: derivePageWebSocketUrl(session.browserWebSocketUrl, targetInfo.targetId),\n allowedMethods: PAGE_CDP_METHOD_ALLOWLIST,\n });\n const pageRef = createPageRef(`abp-${++this.pageCounter}`);\n const controller: PageController = {\n sessionRef: session.sessionRef,\n pageRef,\n tabId,\n cdp,\n queuedEvents: [],\n framesByCdpId: new Map(),\n documentsByRef: new Map(),\n lifecycleState: \"open\",\n openerPageRef: options.openerPageRef,\n mainFrameRef: undefined,\n lastKnownTitle: \"\",\n explicitCloseInFlight: false,\n domUpdateTask: undefined,\n backgroundError: undefined,\n executionPaused: false,\n settleTrackerRegistered: false,\n };\n\n this.pages.set(pageRef, controller);\n session.pageRefs.add(pageRef);\n session.controllersByPageRef.set(pageRef, controller);\n session.pageRefByTabId.set(tabId, pageRef);\n\n cdp.on(\"Page.frameAttached\", (payload) => {\n const frameId = typeof payload.frameId === \"string\" ? payload.frameId : undefined;\n const parentFrameId =\n typeof payload.parentFrameId === \"string\" ? payload.parentFrameId : undefined;\n if (frameId && parentFrameId) {\n this.handleFrameAttached(controller, frameId, parentFrameId);\n }\n });\n cdp.on(\"Page.frameDetached\", (payload) => {\n const frameId = typeof payload.frameId === \"string\" ? payload.frameId : undefined;\n if (frameId) {\n this.handleFrameDetached(controller, frameId);\n }\n });\n cdp.on(\"Page.frameNavigated\", (payload) => {\n const frame = parseFrameDescriptor(payload.frame);\n if (frame) {\n this.handleFrameNavigated(controller, frame);\n }\n });\n cdp.on(\"Page.navigatedWithinDocument\", (payload) => {\n const frameId = typeof payload.frameId === \"string\" ? payload.frameId : undefined;\n const url = typeof payload.url === \"string\" ? payload.url : undefined;\n if (frameId && url) {\n this.handleNavigatedWithinDocument(controller, frameId, url);\n }\n });\n cdp.on(\"DOM.documentUpdated\", () => {\n this.handleDocumentUpdated(controller);\n });\n cdp.onClose((error) => {\n if (controller.explicitCloseInFlight) {\n return;\n }\n controller.backgroundError = error ?? closedPageError(controller.pageRef);\n this.cleanupPageController(controller);\n session.activePageRef = chooseNextActivePageRef(Array.from(session.pageRefs));\n });\n\n try {\n await cdp.send(\"Page.enable\", {\n enableFileChooserOpenedEvent: true,\n });\n await cdp.send(\"DOM.enable\", {\n includeWhitespace: \"none\",\n });\n await cdp.send(\"DOMStorage.enable\");\n const executionState = await session.rest.getExecutionState(tabId).catch(() => undefined);\n const shouldRestorePaused = executionState?.paused ?? false;\n controller.executionPaused = shouldRestorePaused;\n if (shouldRestorePaused) {\n await this.setControllerExecutionPaused(controller, false);\n }\n if (options.installSettleTracker !== false) {\n await this.actionSettler.installTracker(controller);\n }\n const frameTree = await cdp.send<{ readonly frameTree: FrameTreeNode }>(\"Page.getFrameTree\");\n this.syncFrameTree(controller, frameTree.frameTree);\n await this.reconcileDocumentEpochs(controller);\n controller.lastKnownTitle = await this.refreshTabTitle(controller);\n if (!shouldRestorePaused) {\n return controller;\n }\n try {\n await this.setControllerExecutionPaused(controller, true);\n } catch (error) {\n if (!isPageClosedApiError(error)) {\n throw error;\n }\n }\n return controller;\n } catch (error) {\n await cdp.close().catch(() => undefined);\n this.cleanupPageController(controller);\n throw normalizeAbpError(error, pageRef);\n }\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\n const parent = controller.framesByCdpId.get(parentFrameId);\n const frameRef = createFrameRef(`abp-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`abp-${++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 }\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(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 }\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\n const nextDocumentRef = createDocumentRef(`abp-${++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\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.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(`abp-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`abp-${++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 waitForPageTargetInfo(\n session: SessionState,\n tabId: string,\n tabMetadata?: {\n readonly url?: string;\n readonly title?: string;\n },\n ): Promise<AbpCdpTargetInfo> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < 30_000) {\n const targets = await session.browserCdp.send<{\n readonly targetInfos: readonly AbpCdpTargetInfo[];\n }>(\"Target.getTargets\");\n const pageTargets = targets.targetInfos.filter((target) => target.type === \"page\");\n const exactMatch = pageTargets.find(\n (target) => target.type === \"page\" && target.targetId === tabId,\n );\n if (exactMatch) {\n return exactMatch;\n }\n\n const fallbackMatch = resolveFallbackPageTarget(pageTargets, tabMetadata);\n if (fallbackMatch) {\n return fallbackMatch;\n }\n await delay(100);\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `CDP target ${tabId} did not become reachable within 30000ms`,\n );\n }\n\n private async waitForMainFrame(\n controller: PageController,\n timeoutMs: number,\n ): Promise<FrameState> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (controller.mainFrameRef) {\n return this.requireFrame(controller.mainFrameRef);\n }\n await delay(25);\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `page ${controller.pageRef} did not expose a main frame within ${String(timeoutMs)}ms`,\n );\n }\n\n private async waitForNavigationObservation(\n controller: PageController,\n before: MainFrameSnapshot,\n options: {\n readonly timeoutMs: number;\n readonly requireDocumentChange: boolean;\n readonly observeTitle: boolean;\n readonly allowFallback?: boolean;\n },\n ): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < options.timeoutMs) {\n this.throwBackgroundError(controller);\n if (controller.lifecycleState === \"closed\") {\n throw closedPageError(controller.pageRef);\n }\n const frame = controller.mainFrameRef ? this.frames.get(controller.mainFrameRef) : undefined;\n if (frame) {\n if (frame.currentDocument.documentRef !== before.documentRef) {\n await this.flushDomUpdateTask(controller);\n return;\n }\n if (!options.requireDocumentChange && frame.currentDocument.url !== before.url) {\n await this.flushDomUpdateTask(controller);\n return;\n }\n if (options.observeTitle) {\n const title = await this.refreshTabTitle(controller);\n if (title !== before.title) {\n await this.flushDomUpdateTask(controller);\n return;\n }\n }\n }\n await delay(50);\n }\n\n if (options.allowFallback) {\n await delay(150);\n await this.flushDomUpdateTask(controller);\n return;\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `page ${controller.pageRef} did not observe navigation within ${String(options.timeoutMs)}ms`,\n {\n details: {\n pageRef: controller.pageRef,\n },\n },\n );\n }\n\n private async captureMainFrameSnapshot(controller: PageController): Promise<MainFrameSnapshot> {\n await this.flushDomUpdateTask(controller);\n const mainFrame = await this.waitForMainFrame(controller, 10_000);\n const title = await this.refreshTabTitle(controller);\n return {\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n url: mainFrame.currentDocument.url,\n title,\n };\n }\n\n private async setControllerExecutionPaused(\n controller: PageController,\n paused: boolean,\n ): Promise<void> {\n const session = this.requireSession(controller.sessionRef);\n try {\n const state = await session.rest.setExecutionState(controller.tabId, {\n paused,\n });\n controller.executionPaused = state.paused;\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n private async syncControllerExecutionPaused(controller: PageController): Promise<boolean> {\n const session = this.requireSession(controller.sessionRef);\n try {\n const state = await session.rest.getExecutionState(controller.tabId);\n controller.executionPaused = state.paused;\n return state.paused;\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n private async normalizeActionEvents(\n controller: PageController,\n response: AbpActionResponse,\n ): Promise<readonly StepEvent[]> {\n const session = this.requireSession(controller.sessionRef);\n const mainFrame = controller.mainFrameRef\n ? this.frames.get(controller.mainFrameRef)\n : undefined;\n const document = mainFrame?.currentDocument;\n const events: StepEvent[] = [];\n\n for (const event of response.events ?? []) {\n switch (event.type) {\n case \"popup\": {\n const popupTabId =\n this.readString(event.data.targetId) ?? this.readString(event.data.new_tab_id);\n if (!popupTabId) {\n break;\n }\n const openerPageRef =\n (this.readString(event.data.openerId)\n ? session.pageRefByTabId.get(this.readString(event.data.openerId)!)\n : undefined) ?? controller.pageRef;\n const popupController = await this.initializePageController(session, popupTabId, {\n openerPageRef,\n installSettleTracker: false,\n });\n this.queueEvent(\n popupController.pageRef,\n this.createEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n }),\n );\n events.push(\n this.createEvent({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n openerPageRef,\n }),\n );\n break;\n }\n case \"dialog\": {\n events.push(\n this.createEvent({\n kind: \"dialog-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n dialogRef: createDialogRef(`abp-${++this.dialogCounter}`),\n dialogType: normalizeDialogType(\n this.readString(event.data.dialogType) ?? this.readString(event.data.dialog_type),\n ),\n message: this.readString(event.data.message) ?? \"\",\n ...(this.readString(event.data.default_prompt) === undefined\n ? {}\n : { defaultValue: this.readString(event.data.default_prompt)! }),\n }),\n );\n break;\n }\n case \"file_chooser\": {\n const mode = this.readString(event.data.mode);\n events.push(\n this.createEvent({\n kind: \"chooser-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n chooserRef: createChooserRef(`abp-${++this.chooserCounter}`),\n chooserType: \"file\",\n multiple:\n this.readBoolean(event.data.multipleFilesAllowed) ??\n this.readBoolean(event.data.multiple) ??\n mode === \"selectMultiple\",\n }),\n );\n break;\n }\n case \"select_open\": {\n const chooser = normalizeSelectChooserEventData(event.data);\n if (chooser === undefined) {\n break;\n }\n events.push(\n this.createEvent({\n kind: \"chooser-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n chooserRef: createChooserRef(`abp-${++this.chooserCounter}`),\n chooserType: \"select\",\n multiple: chooser.multiple,\n ...(chooser.options === undefined ? {} : { options: chooser.options }),\n }),\n );\n break;\n }\n case \"download_started\": {\n const downloadId =\n this.readString(event.data.downloadId) ??\n this.readString(event.data.download_id) ??\n `abp-download-${++this.downloadCounter}`;\n let downloadRef = this.downloadRefsByAbpId.get(downloadId);\n if (!downloadRef) {\n downloadRef = createDownloadRef(`abp-${++this.downloadCounter}`);\n this.downloadRefsByAbpId.set(downloadId, downloadRef);\n }\n events.push(\n this.createEvent({\n kind: \"download-started\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n downloadRef,\n url: this.readString(event.data.url) ?? \"\",\n ...(this.readString(event.data.suggestedFilename) === undefined\n ? {}\n : { suggestedFilename: this.readString(event.data.suggestedFilename)! }),\n }),\n );\n break;\n }\n case \"download_completed\":\n case \"download_cancelled\": {\n const downloadId =\n this.readString(event.data.downloadId) ??\n this.readString(event.data.download_id) ??\n `abp-download-${++this.downloadCounter}`;\n let downloadRef = this.downloadRefsByAbpId.get(downloadId);\n if (!downloadRef) {\n downloadRef = createDownloadRef(`abp-${++this.downloadCounter}`);\n this.downloadRefsByAbpId.set(downloadId, downloadRef);\n }\n events.push(\n this.createEvent({\n kind: \"download-finished\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n downloadRef,\n state: event.type === \"download_completed\" ? \"completed\" : \"canceled\",\n }),\n );\n break;\n }\n }\n }\n\n return events;\n }\n\n private async executeInputAction(\n session: SessionState,\n controller: PageController,\n execute: () => Promise<AbpActionResponse>,\n ): Promise<{\n readonly response: AbpActionResponse;\n readonly dialogEvents: readonly StepEvent[];\n }> {\n try {\n const response = await execute();\n return { response, dialogEvents: [] };\n } catch (error) {\n if (!isActionTimeoutError(error)) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n const dialogInfo = await session.rest.getDialog(controller.tabId).catch(() => undefined);\n if (!dialogInfo) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n await session.rest.acceptDialog(controller.tabId).catch(() => undefined);\n const mainFrame = controller.mainFrameRef\n ? this.frames.get(controller.mainFrameRef)\n : undefined;\n const document = mainFrame?.currentDocument;\n const dialogEvents: StepEvent[] = [\n this.createEvent({\n kind: \"dialog-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n dialogRef: createDialogRef(`abp-${++this.dialogCounter}`),\n dialogType: normalizeDialogType(dialogInfo.dialogType),\n message: dialogInfo.message,\n ...(dialogInfo.defaultPrompt === undefined\n ? {}\n : { defaultPrompt: dialogInfo.defaultPrompt }),\n }),\n ];\n return { response: { events: [], result: {} }, dialogEvents };\n }\n }\n\n private async detectNewTabs(\n session: SessionState,\n openerController: PageController,\n ): Promise<DiscoveredTabEffects> {\n const events: StepEvent[] = [];\n let activePageRef: PageRef | undefined;\n let tabs: readonly AbpTab[];\n try {\n tabs = await session.rest.listTabs();\n } catch {\n return {\n events,\n };\n }\n\n for (const tab of tabs) {\n if (session.pageRefByTabId.has(tab.id)) {\n continue;\n }\n const popupController = await this.initializePageController(session, tab.id, {\n openerPageRef: openerController.pageRef,\n metadata: {\n url: tab.url,\n title: tab.title,\n },\n installSettleTracker: false,\n });\n this.queueEvent(\n popupController.pageRef,\n this.createEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n }),\n );\n events.push(\n this.createEvent({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n openerPageRef: openerController.pageRef,\n }),\n );\n if (tab.active) {\n activePageRef = popupController.pageRef;\n }\n }\n\n return {\n events,\n ...(activePageRef === undefined ? {} : { activePageRef }),\n };\n }\n\n private applyActionTabChange(\n session: SessionState,\n controllerPageRef: PageRef,\n response: AbpActionResponse,\n actionEvents: readonly StepEvent[],\n discoveredTabs: DiscoveredTabEffects,\n ): void {\n const pageRef = resolveTabChangePageRef({\n controllerPageRef,\n response,\n actionEvents,\n discoveredTabs,\n activePageRef: session.activePageRef,\n });\n if (response.tab_changed) {\n session.activePageRef = pageRef;\n }\n }\n\n private normalizeNetworkRecord(\n session: SessionState,\n pageRef: PageRef,\n call: AbpNetworkCall,\n includeBodies: boolean,\n ): NetworkRecord {\n const requestHeaders = parseHeaderJson(call.request_headers);\n const responseHeaders = parseHeaderJson(call.response_headers);\n const responseContentType = headerValue(responseHeaders, \"content-type\");\n const requestContentType = headerValue(requestHeaders, \"content-type\");\n const requestBody =\n includeBodies && call.request_body !== undefined\n ? bodyPayloadFromUtf8(call.request_body, parseMimeType(requestContentType))\n : undefined;\n const responseBody =\n includeBodies && call.response_body !== undefined\n ? call.response_body_encoding === \"base64\"\n ? createBodyPayload(new Uint8Array(Buffer.from(call.response_body, \"base64\")), {\n encoding: \"base64\",\n ...parseMimeType(responseContentType),\n })\n : bodyPayloadFromUtf8(call.response_body, parseMimeType(responseContentType))\n : undefined;\n\n return {\n kind: \"http\",\n requestId: createNetworkRequestId(call.request_id ?? `abp-${++this.requestCounter}`),\n sessionRef: session.sessionRef,\n pageRef,\n method: call.method,\n url: call.url,\n requestHeaders,\n responseHeaders,\n ...(call.status === undefined ? {} : { status: call.status }),\n resourceType: normalizeResourceType(call.resource_type),\n navigationRequest: normalizeResourceType(call.resource_type) === \"document\",\n captureState: \"complete\",\n requestBodyState:\n call.request_body === undefined ? \"skipped\" : includeBodies ? \"complete\" : \"pending\",\n responseBodyState:\n call.response_body === undefined ? \"skipped\" : includeBodies ? \"complete\" : \"pending\",\n ...(call.request_body === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n ...(call.response_body === undefined ? { responseBodySkipReason: \"not-present\" } : {}),\n ...(requestBody === undefined ? {} : { requestBody }),\n ...(responseBody === undefined ? {} : { responseBody }),\n };\n }\n\n private createSessionHttpNetworkRecord(\n session: SessionState,\n controller: PageController,\n mainFrame: FrameState,\n request: SessionTransportRequest,\n response: SessionHttpScriptResponse,\n bodies: {\n readonly responseHeaders: readonly ReturnType<typeof createHeaderEntry>[];\n readonly responseBody?: BodyPayload;\n },\n ): NetworkRecord {\n return {\n kind: \"http\",\n requestId: createNetworkRequestId(`abp-session-http-${++this.requestCounter}`),\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n method: request.method,\n url: response.url,\n requestHeaders: request.headers ?? [],\n responseHeaders: bodies.responseHeaders,\n status: response.status,\n statusText: response.statusText || STATUS_CODES[response.status] || \"\",\n resourceType: \"fetch\",\n navigationRequest: false,\n captureState: \"complete\",\n requestBodyState: request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: bodies.responseBody === undefined ? \"skipped\" : \"complete\",\n ...(request.body === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n ...(bodies.responseBody === undefined ? { responseBodySkipReason: \"not-present\" } : {}),\n ...(request.body === undefined ? {} : { requestBody: request.body }),\n ...(bodies.responseBody === undefined ? {} : { responseBody: bodies.responseBody }),\n };\n }\n\n private storeDocumentNavigationRecord(\n session: SessionState,\n controller: PageController,\n mainFrame: FrameState,\n ): void {\n const document = mainFrame.currentDocument;\n this.storeNetworkRecords(session, [\n {\n kind: \"http\",\n requestId: createNetworkRequestId(`abp-document-${++this.requestCounter}`),\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: document.documentRef,\n method: \"GET\",\n url: document.url,\n requestHeaders: [],\n responseHeaders: [],\n status: 200,\n statusText: \"OK\",\n resourceType: \"document\",\n navigationRequest: true,\n captureState: \"complete\",\n requestBodyState: \"skipped\",\n responseBodyState: \"skipped\",\n requestBodySkipReason: \"not-present\",\n responseBodySkipReason: \"not-present\",\n },\n ]);\n }\n\n private markNetworkRecordBodyFailure(record: NetworkRecord, error: unknown): NetworkRecord {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ...record,\n requestBodyState: record.requestBodyState === \"pending\" ? \"failed\" : record.requestBodyState,\n responseBodyState:\n record.responseBodyState === \"pending\" ? \"failed\" : record.responseBodyState,\n ...(record.requestBodyState === \"pending\" ? { requestBodyError: message } : {}),\n ...(record.responseBodyState === \"pending\" ? { responseBodyError: message } : {}),\n };\n }\n\n private readLocalNetworkRecords(\n session: SessionState,\n pageRef: PageRef,\n includeBodies: boolean,\n input: {\n readonly requestIds?: ReadonlySet<NetworkRecord[\"requestId\"]>;\n readonly filters: {\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 },\n ): readonly NetworkRecord[] {\n return Array.from(session.networkRecordsByRequestId.values())\n .filter((record) => record.pageRef === pageRef)\n .map((record) => this.projectNetworkRecordBodies(record, includeBodies))\n .filter((record) => input.requestIds === undefined || input.requestIds.has(record.requestId))\n .filter((record) => matchesNetworkRecordFilters(record, input.filters));\n }\n\n private projectNetworkRecordBodies(record: NetworkRecord, includeBodies: boolean): NetworkRecord {\n if (includeBodies) {\n return record;\n }\n const { requestBody: _requestBody, responseBody: _responseBody, ...metadataRecord } = record;\n return {\n ...metadataRecord,\n requestBodyState: record.requestBody === undefined ? record.requestBodyState : \"pending\",\n responseBodyState: record.responseBody === undefined ? record.responseBodyState : \"pending\",\n };\n }\n\n private storeNetworkRecords(session: SessionState, records: readonly NetworkRecord[]): void {\n for (const record of records) {\n session.networkRecordsByRequestId.set(record.requestId, record);\n }\n }\n\n private async readStorageEntriesForOrigin(\n session: SessionState,\n storageKey: string,\n isLocalStorage: boolean,\n ): Promise<readonly StorageEntry[]> {\n const pageRef = session.activePageRef ?? chooseNextActivePageRef(Array.from(session.pageRefs));\n if (!pageRef) {\n return [];\n }\n const controller = this.requirePage(pageRef);\n try {\n const storage = await controller.cdp.send<AbpDomStorageItemsResult>(\n \"DOMStorage.getDOMStorageItems\",\n {\n storageId: {\n storageKey,\n isLocalStorage,\n },\n },\n );\n return storage.entries.map(([key, value]) => ({ key, value }));\n } catch {\n return [];\n }\n }\n\n private async readIndexedDbSnapshotForOrigin(\n session: SessionState,\n origin: string,\n storageKey: string,\n ): Promise<readonly IndexedDbDatabaseSnapshot[] | undefined> {\n const pageRef = session.activePageRef ?? chooseNextActivePageRef(Array.from(session.pageRefs));\n if (!pageRef) {\n return undefined;\n }\n const controller = this.requirePage(pageRef);\n\n let databaseNames: readonly string[];\n try {\n const names = await controller.cdp.send<AbpIndexedDbDatabaseNamesResult>(\n \"IndexedDB.requestDatabaseNames\",\n {\n securityOrigin: origin,\n storageKey,\n },\n );\n databaseNames = names.databaseNames;\n } catch {\n return undefined;\n }\n\n const databases: IndexedDbDatabaseSnapshot[] = [];\n for (const databaseName of databaseNames) {\n try {\n const database = await controller.cdp.send<AbpIndexedDbDatabaseResult>(\n \"IndexedDB.requestDatabase\",\n {\n securityOrigin: origin,\n storageKey,\n databaseName,\n },\n );\n const stores: IndexedDbObjectStoreSnapshot[] = [];\n for (const store of database.databaseWithObjectStores.objectStores) {\n const records: {\n key: unknown;\n primaryKey?: unknown;\n value: unknown;\n }[] = [];\n let skipCount = 0;\n while (true) {\n const data = await controller.cdp.send<AbpIndexedDbDataResult>(\n \"IndexedDB.requestData\",\n {\n securityOrigin: origin,\n storageKey,\n databaseName,\n objectStoreName: store.name,\n indexName: \"\",\n skipCount,\n pageSize: 250,\n keyRange: undefined,\n },\n );\n for (const entry of data.objectStoreDataEntries) {\n records.push({\n key: entry.key ?? null,\n ...(entry.primaryKey === undefined ? {} : { primaryKey: entry.primaryKey }),\n value: entry.value ?? null,\n });\n }\n if (!data.hasMore) {\n break;\n }\n skipCount += data.objectStoreDataEntries.length;\n }\n stores.push({\n name: store.name,\n ...(store.keyPathArray && store.keyPathArray.length > 0\n ? { keyPath: [...store.keyPathArray] }\n : store.keyPath === undefined\n ? {}\n : { keyPath: store.keyPath }),\n autoIncrement: store.autoIncrement ?? false,\n indexes: (store.indexes ?? []).map((index) => ({\n name: index.name,\n ...(index.keyPathArray && index.keyPathArray.length > 0\n ? { keyPath: [...index.keyPathArray] }\n : index.keyPath === undefined\n ? {}\n : { keyPath: index.keyPath }),\n multiEntry: index.multiEntry ?? false,\n unique: index.unique ?? false,\n })),\n records,\n });\n }\n databases.push({\n name: database.databaseWithObjectStores.name,\n version: database.databaseWithObjectStores.version,\n objectStores: stores,\n });\n } catch {}\n }\n\n return databases;\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 const origin = parseOrigin(frame.currentDocument.url);\n if (origin === undefined) {\n continue;\n }\n if (origin === \"null\") {\n continue;\n }\n try {\n const storageKey = await controller.cdp.send<AbpStorageKeyResult>(\n \"Storage.getStorageKey\",\n {\n frameId: frame.cdpFrameId,\n },\n );\n const storage = await controller.cdp.send<AbpDomStorageItemsResult>(\n \"DOMStorage.getDOMStorageItems\",\n {\n storageId: {\n storageKey: storageKey.storageKey,\n isLocalStorage: false,\n },\n },\n );\n snapshots.push({\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n origin,\n entries: storage.entries.map(([key, value]) => ({ key, value })),\n });\n } catch {}\n }\n }\n return snapshots;\n }\n\n private async buildPageInfo(controller: PageController): Promise<PageInfo> {\n const mainFrame = this.requireMainFrame(controller);\n controller.lastKnownTitle = await this.refreshTabTitle(controller);\n return {\n pageRef: controller.pageRef,\n sessionRef: controller.sessionRef,\n ...(controller.openerPageRef === undefined\n ? {}\n : { openerPageRef: controller.openerPageRef }),\n url: mainFrame.currentDocument.url,\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 refreshTabTitle(controller: PageController): Promise<string> {\n try {\n const tab = await this.requireSession(controller.sessionRef).rest.getTab(controller.tabId);\n controller.lastKnownTitle = tab.title;\n return tab.title;\n } catch (error) {\n if (isPageClosedApiError(error)) {\n throw closedPageError(controller.pageRef);\n }\n return controller.lastKnownTitle;\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(async () => {\n await this.reconcileDocumentEpochs(controller);\n });\n const settled = queued\n .catch((error) => {\n controller.backgroundError ??= normalizeAbpError(error, controller.pageRef);\n })\n .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(`abp-${++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 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 document,\n backendNodeId,\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 || session.closed) {\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 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 if (controller.lifecycleState === \"closed\") {\n return;\n }\n controller.lifecycleState = \"closed\";\n this.pages.delete(controller.pageRef);\n const session = this.sessions.get(controller.sessionRef);\n session?.pageRefs.delete(controller.pageRef);\n session?.controllersByPageRef.delete(controller.pageRef);\n session?.pageRefByTabId.delete(controller.tabId);\n if (session?.activePageRef === controller.pageRef) {\n session.activePageRef = chooseNextActivePageRef(Array.from(session.pageRefs));\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.queuedEvents.length = 0;\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: { readonly kind: TKind } & Omit<\n Extract<StepEvent, { readonly kind: TKind }>,\n \"eventId\" | \"timestamp\"\n >,\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 retireDocument(documentRef: DocumentRef): void {\n this.documents.delete(documentRef);\n this.retiredDocuments.add(documentRef);\n }\n\n private isDescendantFrame(frame: FrameState, ancestorFrameRef: FrameRef): 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 isHistoryBoundaryError(error: unknown, direction: \"back\" | \"forward\"): boolean {\n return (\n error instanceof AbpApiError &&\n error.status === 400 &&\n new RegExp(`Cannot go ${direction}`, \"i\").test(error.message)\n );\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n }\n\n private readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n }\n\n private assertNotDisposed(): void {\n if (this.disposed) {\n throw createBrowserCoreError(\"operation-failed\", \"engine has been disposed\");\n }\n }\n}\n\nexport async function createAbpBrowserCoreEngine(\n options: AbpBrowserCoreEngineOptions = {},\n): Promise<AbpBrowserCoreEngine> {\n return AbpBrowserCoreEngine.create(options);\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 resolveFallbackPageTarget(\n targets: readonly AbpCdpTargetInfo[],\n tabMetadata:\n | {\n readonly url?: string;\n readonly title?: string;\n }\n | undefined,\n): AbpCdpTargetInfo | undefined {\n if (tabMetadata?.url) {\n const urlMatches = targets.filter((target) => target.url === tabMetadata.url);\n if (urlMatches.length === 1) {\n return urlMatches[0];\n }\n }\n\n if (tabMetadata?.title) {\n const titleMatches = targets.filter((target) => target.title === tabMetadata.title);\n if (titleMatches.length === 1) {\n return titleMatches[0];\n }\n }\n\n return undefined;\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/storage.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/cdp-discovery.ts","../src/cdp-transport.ts","../src/coordinate.ts","../src/dom.ts","../src/errors.ts","../src/launcher.ts","../src/action-events.ts","../src/action-settle.ts","../src/rest-client.ts","../src/scroll.ts","../src/tab-change.ts","../src/computer-use.ts","../src/dom-action-bridge.ts","../src/session-model.ts","../src/engine.ts"],"names":["WebSocket","require","createRequire","join","dirname","accessSync","fsConstants","createServer","fs","spawn","delay","path","isRecord","abortError","rethrowNodeLookupError","headerValue","process","rm","mainFrame","STATUS_CODES","mkdtemp","tmpdir"],"mappings":"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","file":"index.cjs","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","import type { FrameRef, PageRef, SessionRef } from \"./identity.js\";\n\nexport type CookieSameSite = \"strict\" | \"lax\" | \"none\";\nexport type CookiePriority = \"low\" | \"medium\" | \"high\";\n\nexport interface CookieRecord {\n readonly sessionRef: SessionRef;\n readonly name: string;\n readonly value: string;\n readonly domain: string;\n readonly path: string;\n readonly secure: boolean;\n readonly httpOnly: boolean;\n readonly sameSite?: CookieSameSite;\n readonly priority?: CookiePriority;\n readonly partitionKey?: string;\n readonly session: boolean;\n readonly expiresAt?: number | null;\n}\n\nexport interface StorageEntry {\n readonly key: string;\n readonly value: string;\n}\n\nexport interface IndexedDbRecord {\n readonly key: unknown;\n readonly primaryKey?: unknown;\n readonly value: unknown;\n}\n\nexport interface IndexedDbIndexSnapshot {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly multiEntry: boolean;\n readonly unique: boolean;\n}\n\nexport interface IndexedDbObjectStoreSnapshot {\n readonly name: string;\n readonly keyPath?: string | readonly string[];\n readonly autoIncrement: boolean;\n readonly indexes: readonly IndexedDbIndexSnapshot[];\n readonly records: readonly IndexedDbRecord[];\n}\n\nexport interface IndexedDbDatabaseSnapshot {\n readonly name: string;\n readonly version: number;\n readonly objectStores: readonly IndexedDbObjectStoreSnapshot[];\n}\n\nexport interface StorageOriginSnapshot {\n readonly origin: string;\n readonly localStorage: readonly StorageEntry[];\n readonly indexedDb?: readonly IndexedDbDatabaseSnapshot[];\n}\n\nexport interface SessionStorageSnapshot {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly origin: string;\n readonly entries: readonly StorageEntry[];\n}\n\nexport interface StorageSnapshot {\n readonly sessionRef: SessionRef;\n readonly capturedAt: number;\n readonly origins: readonly StorageOriginSnapshot[];\n readonly sessionStorage?: readonly SessionStorageSnapshot[];\n}\n\nfunction parseUrl(value: string): URL | null {\n try {\n return new URL(value);\n } catch {\n return null;\n }\n}\n\nfunction isLocalHostname(hostname: string): boolean {\n return hostname === \"localhost\" || hostname.endsWith(\".localhost\");\n}\n\nfunction normalizeCookiePath(path: string): string {\n if (path.length === 0) {\n return \"/\";\n }\n\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nfunction pathMatchesCookiePath(requestPath: string, cookiePath: string): boolean {\n const normalizedRequestPath = requestPath.length === 0 ? \"/\" : requestPath;\n const normalizedCookiePath = normalizeCookiePath(cookiePath);\n\n if (normalizedRequestPath === normalizedCookiePath) {\n return true;\n }\n\n if (!normalizedRequestPath.startsWith(normalizedCookiePath)) {\n return false;\n }\n\n if (normalizedCookiePath.endsWith(\"/\")) {\n return true;\n }\n\n return normalizedRequestPath.charAt(normalizedCookiePath.length) === \"/\";\n}\n\nexport function filterCookieRecords(\n cookies: readonly CookieRecord[],\n urls: readonly string[],\n): CookieRecord[] {\n const parsed = urls.map(parseUrl).filter((url) => url !== null);\n if (parsed.length === 0) {\n return [...cookies];\n }\n\n return cookies.filter((cookie) => {\n return parsed.some((url) => {\n let domain = cookie.domain;\n if (!domain.startsWith(\".\")) {\n domain = `.${domain}`;\n }\n\n if (!`.${url.hostname}`.endsWith(domain)) {\n return false;\n }\n\n if (!pathMatchesCookiePath(url.pathname, cookie.path)) {\n return false;\n }\n\n if (url.protocol !== \"https:\" && !isLocalHostname(url.hostname) && cookie.secure) {\n return false;\n }\n\n return true;\n });\n });\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 DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n postLoadTrackerHasTrackedNetworkActivitySince,\n postLoadTrackerIsSettled,\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 if (\n !postLoadTrackerIsSettled(\n await input.readTrackerState(),\n DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n )\n ) {\n await delay(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())));\n continue;\n }\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 mergeBrowserCapabilities,\n noBrowserCapabilities,\n type BrowserCapabilities,\n type HeaderEntry,\n} from \"@opensteer/browser-core\";\n\nexport const ABP_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 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: false,\n routing: false,\n },\n events: {\n pageLifecycle: true,\n dialog: true,\n download: true,\n chooser: true,\n executionState: true,\n },\n },\n);\n\nexport interface AbpLaunchOptions {\n readonly abpExecutablePath?: string;\n readonly browserExecutablePath?: string;\n readonly headless?: boolean;\n readonly userDataDir?: string;\n readonly sessionDir?: string;\n readonly args?: readonly string[];\n readonly verbose?: boolean;\n}\n\nexport interface AdoptedAbpBrowser {\n readonly baseUrl: string;\n readonly remoteDebuggingUrl: string;\n}\n\nexport interface AbpBrowserCoreEngineOptions {\n readonly launch?: AbpLaunchOptions;\n readonly browser?: AdoptedAbpBrowser;\n readonly extraHTTPHeaders?: readonly HeaderEntry[];\n}\n\nexport interface LaunchRequestOptions {\n readonly port: number;\n readonly userDataDir: string;\n readonly sessionDir: string;\n readonly abpExecutablePath?: string;\n readonly browserExecutablePath?: string;\n readonly headless: boolean;\n readonly args: readonly string[];\n readonly verbose: boolean;\n}\n\nexport function normalizeAbpBaseUrl(value: string): string {\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (trimmed.length === 0) {\n throw new TypeError(\"ABP baseUrl cannot be empty\");\n }\n return trimmed.endsWith(\"/api/v1\") ? trimmed : `${trimmed}/api/v1`;\n}\n\nexport function normalizeRemoteDebuggingUrl(value: string): string {\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (trimmed.length === 0) {\n throw new TypeError(\"remoteDebuggingUrl cannot be empty\");\n }\n return trimmed;\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\n\nexport interface CdpVersionResponse {\n readonly Browser?: string;\n readonly \"Protocol-Version\"?: string;\n readonly webSocketDebuggerUrl?: string;\n}\n\nexport async function fetchBrowserWebSocketUrl(remoteDebuggingUrl: string): Promise<string> {\n const response = await fetch(`${remoteDebuggingUrl}/json/version`);\n if (!response.ok) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `failed to query CDP version endpoint at ${remoteDebuggingUrl}`,\n );\n }\n\n const body = (await response.json()) as CdpVersionResponse;\n if (!body.webSocketDebuggerUrl) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `CDP endpoint ${remoteDebuggingUrl} did not return a browser websocket URL`,\n );\n }\n\n return body.webSocketDebuggerUrl;\n}\n\nexport function derivePageWebSocketUrl(browserWebSocketUrl: string, targetId: string): string {\n const url = new URL(browserWebSocketUrl);\n url.pathname = `/devtools/page/${targetId}`;\n url.search = \"\";\n return url.toString();\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\nimport WebSocket from \"ws\";\nimport type { RawData } from \"ws\";\n\ntype EventHandler = (params: Record<string, unknown>) => void;\ntype CloseHandler = (error?: Error) => void;\n\ninterface PendingCommand {\n readonly resolve: (value: unknown) => void;\n readonly reject: (reason: unknown) => void;\n}\n\nexport const PAGE_CDP_METHOD_ALLOWLIST = new Set<string>([\n \"DOM.enable\",\n \"DOM.describeNode\",\n \"DOM.focus\",\n \"DOM.getAttributes\",\n \"DOM.getContentQuads\",\n \"DOM.getDocument\",\n \"DOM.getNodeForLocation\",\n \"DOM.getOuterHTML\",\n \"DOM.pushNodesByBackendIdsToFrontend\",\n \"DOM.requestNode\",\n \"DOM.resolveNode\",\n \"DOM.scrollIntoViewIfNeeded\",\n \"DOMSnapshot.captureSnapshot\",\n \"DOMStorage.disable\",\n \"DOMStorage.enable\",\n \"DOMStorage.getDOMStorageItems\",\n \"Emulation.getScreenInfos\",\n \"IndexedDB.requestData\",\n \"IndexedDB.requestDatabase\",\n \"IndexedDB.requestDatabaseNames\",\n \"Page.addScriptToEvaluateOnNewDocument\",\n \"Page.createIsolatedWorld\",\n \"Page.enable\",\n \"Page.getFrameTree\",\n \"Page.getLayoutMetrics\",\n \"Runtime.callFunctionOn\",\n \"Runtime.evaluate\",\n \"Runtime.releaseObject\",\n \"Storage.getStorageKey\",\n]);\n\nexport const BROWSER_CDP_METHOD_ALLOWLIST = new Set<string>([\n \"Storage.getCookies\",\n \"Storage.setCookies\",\n \"Target.getTargets\",\n]);\n\nexport function assertAllowedCdpMethod(method: string, allowedMethods: ReadonlySet<string>): void {\n if (allowedMethods.has(method)) {\n return;\n }\n\n throw createBrowserCoreError(\n \"operation-failed\",\n `CDP method ${method} is not permitted by the ABP inspector sandbox`,\n {\n details: {\n method,\n },\n },\n );\n}\n\nexport class CdpClient {\n private readonly socket: WebSocket;\n private readonly allowedMethods: ReadonlySet<string>;\n private readonly pending = new Map<number, PendingCommand>();\n private readonly eventHandlers = new Map<string, Set<EventHandler>>();\n private readonly closeHandlers = new Set<CloseHandler>();\n private nextId = 0;\n private readonly opened: Promise<void>;\n private readonly closed: Promise<void>;\n private closedError: Error | undefined;\n\n private constructor(url: string, allowedMethods: ReadonlySet<string>) {\n this.allowedMethods = allowedMethods;\n this.socket = new WebSocket(url);\n this.socket.on(\"message\", (data: RawData) => {\n this.handleMessage(typeof data === \"string\" ? data : data.toString(\"utf8\"));\n });\n\n this.opened = new Promise<void>((resolve, reject) => {\n this.socket.once(\"open\", () => resolve());\n this.socket.once(\"error\", (error: Error) => reject(error));\n });\n\n this.closed = new Promise<void>((resolve) => {\n this.socket.once(\"close\", () => {\n this.flushPending(this.closedError ?? new Error(\"CDP socket closed\"));\n for (const handler of this.closeHandlers) {\n handler(this.closedError);\n }\n resolve();\n });\n this.socket.once(\"error\", (error: Error) => {\n this.closedError = error;\n });\n });\n }\n\n static async connect(input: {\n readonly url: string;\n readonly allowedMethods: ReadonlySet<string>;\n }): Promise<CdpClient> {\n const client = new CdpClient(input.url, input.allowedMethods);\n await client.opened;\n return client;\n }\n\n on(method: string, handler: EventHandler): () => void {\n const handlers = this.eventHandlers.get(method) ?? new Set<EventHandler>();\n handlers.add(handler);\n this.eventHandlers.set(method, handlers);\n return () => {\n const current = this.eventHandlers.get(method);\n if (!current) {\n return;\n }\n current.delete(handler);\n if (current.size === 0) {\n this.eventHandlers.delete(method);\n }\n };\n }\n\n onClose(handler: CloseHandler): () => void {\n this.closeHandlers.add(handler);\n return () => {\n this.closeHandlers.delete(handler);\n };\n }\n\n async send<TResult>(method: string, params: Record<string, unknown> = {}): Promise<TResult> {\n assertAllowedCdpMethod(method, this.allowedMethods);\n await this.opened;\n\n if (this.closedError) {\n throw this.closedError;\n }\n\n const id = ++this.nextId;\n const payload = JSON.stringify({\n id,\n method,\n params,\n });\n\n const result = new Promise<TResult>((resolve, reject) => {\n this.pending.set(id, {\n resolve: (value) => resolve(value as TResult),\n reject,\n });\n });\n\n this.socket.send(payload);\n return result;\n }\n\n async close(): Promise<void> {\n if (\n this.socket.readyState === WebSocket.CLOSED ||\n this.socket.readyState === WebSocket.CLOSING\n ) {\n await this.closed;\n return;\n }\n\n this.socket.close();\n await this.closed;\n }\n\n private handleMessage(message: string): void {\n const parsed = JSON.parse(message) as {\n readonly id?: number;\n readonly method?: string;\n readonly params?: Record<string, unknown>;\n readonly result?: unknown;\n readonly error?: {\n readonly code?: number;\n readonly message?: string;\n };\n };\n\n if (parsed.id !== undefined) {\n const pending = this.pending.get(parsed.id);\n if (!pending) {\n return;\n }\n this.pending.delete(parsed.id);\n if (parsed.error) {\n pending.reject(\n new Error(parsed.error.message ?? `CDP command ${String(parsed.id)} failed`),\n );\n return;\n }\n pending.resolve(parsed.result);\n return;\n }\n\n if (!parsed.method) {\n return;\n }\n\n for (const handler of this.eventHandlers.get(parsed.method) ?? []) {\n handler(parsed.params ?? {});\n }\n }\n\n private flushPending(error: Error): void {\n for (const pending of this.pending.values()) {\n pending.reject(error);\n }\n this.pending.clear();\n }\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\nfunction unsupportedCoordinateSpace(coordinateSpace: CoordinateSpace): never {\n throw createBrowserCoreError(\n \"unsupported-capability\",\n `coordinate space ${coordinateSpace} is not supported by this backend`,\n {\n details: { coordinateSpace },\n },\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","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\";\n\nimport type { CdpClient } from \"./cdp-transport.js\";\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: CdpClient,\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<{\n readonly documents: readonly DomSnapshotDocument[];\n readonly strings: readonly string[];\n }>(\"DOMSnapshot.captureSnapshot\", {\n computedStyles: [...DOM_SNAPSHOT_COMPUTED_STYLE_NAMES],\n includePaintOrder: options.includeLayout,\n includeDOMRects: options.includeLayout,\n }),\n cdp.send<{ readonly root: DomTreeNode }>(\"DOM.getDocument\", {\n depth: -1,\n pierce: true,\n }),\n ]);\n\n return {\n capturedAt,\n documents: snapshotResult.documents,\n shadowBoundariesByBackendNodeId: buildCdpShadowBoundaryIndex(domTreeResult.root) as ReadonlyMap<\n number,\n ShadowBoundaryInfo\n >,\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\";\n\nimport type { DocumentState } from \"./types.js\";\n\nexport class AbpApiError extends Error {\n readonly status: number;\n readonly body: unknown;\n\n constructor(status: number, message: string, body: unknown) {\n super(message);\n this.name = \"AbpApiError\";\n this.status = status;\n this.body = body;\n }\n}\n\nexport function normalizeAbpError(error: unknown, pageRef?: PageRef): Error {\n if (isBrowserCoreError(error)) {\n return error;\n }\n\n if (error instanceof AbpApiError) {\n if (error.status === 408 || error.status === 504) {\n return createBrowserCoreError(\"timeout\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n if (error.status === 404 && pageRef !== undefined) {\n return createBrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n cause: error,\n details: { pageRef },\n });\n }\n\n return createBrowserCoreError(\"operation-failed\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n if (error instanceof Error) {\n if (/timed out/i.test(error.message)) {\n return createBrowserCoreError(\"timeout\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n return createBrowserCoreError(\"operation-failed\", error.message, {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n }\n\n return createBrowserCoreError(\"operation-failed\", \"ABP operation failed\", {\n cause: error,\n ...(pageRef === undefined ? {} : { details: { pageRef } }),\n });\n}\n\nexport function isActionTimeoutError(error: unknown): boolean {\n return error instanceof AbpApiError && error.status === 504;\n}\n\nexport function isPageClosedApiError(error: unknown): boolean {\n return error instanceof AbpApiError && error.status === 404;\n}\n\nexport function rethrowNodeLookupError(\n error: unknown,\n document: DocumentState,\n input: NodeLocator,\n): never {\n if (error instanceof AbpApiError && error.status === 404) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: input.documentEpoch,\n nodeRef: input.nodeRef,\n });\n }\n\n if (\n error instanceof Error &&\n /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n )\n ) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: input.documentEpoch,\n nodeRef: input.nodeRef,\n });\n }\n\n throw error;\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\nimport { promises as fs } from \"node:fs\";\nimport { accessSync, constants as fsConstants } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createServer } from \"node:net\";\n\nimport type { LaunchRequestOptions } from \"./options.js\";\nimport type { AbpBrowserStatus } from \"./types.js\";\n\nexport interface LaunchedAbpProcess {\n readonly process: ChildProcess;\n readonly baseUrl: string;\n readonly remoteDebuggingUrl: string;\n}\n\ninterface AbpLaunchCommand {\n readonly executablePath: string;\n readonly args: readonly string[];\n}\n\nconst require = createRequire(import.meta.url);\n\nfunction resolveAgentBrowserProtocolRoot(): string | undefined {\n try {\n return join(dirname(require.resolve(\"agent-browser-protocol\")), \"..\");\n } catch {\n return undefined;\n }\n}\n\nfunction resolveExecutablePath(candidates: readonly string[]): string | undefined {\n for (const candidate of candidates) {\n try {\n accessSync(candidate, fsConstants.X_OK);\n return candidate;\n } catch {}\n }\n\n return undefined;\n}\n\nexport async function allocatePort(): Promise<number> {\n const server = createServer();\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, \"127.0.0.1\", () => resolve());\n });\n\n const address = server.address();\n server.close();\n if (!address || typeof address === \"string\") {\n throw createBrowserCoreError(\"operation-failed\", \"failed to allocate a free TCP port\");\n }\n return address.port;\n}\n\nfunction normalizeBrowserArgs(args: readonly string[]): readonly string[] {\n return args.map((arg) => (arg === \"--headless\" ? \"--headless=new\" : arg));\n}\n\nfunction ensureRemoteDebuggingPortArg(args: readonly string[]): readonly string[] {\n if (args.some((arg) => arg.startsWith(\"--remote-debugging-port=\"))) {\n return args;\n }\n\n return [\"--remote-debugging-port=0\", ...args];\n}\n\nexport function resolveDefaultAbpBrowserExecutablePath(): string | undefined {\n const root = resolveAgentBrowserProtocolRoot();\n if (root === undefined) {\n return undefined;\n }\n\n return resolveExecutablePath([join(root, \"browsers\", \"ABP.app\", \"Contents\", \"MacOS\", \"ABP\")]);\n}\n\nexport function resolveDefaultAbpWrapperExecutablePath(): string | undefined {\n const root = resolveAgentBrowserProtocolRoot();\n if (root === undefined) {\n return undefined;\n }\n\n return resolveExecutablePath([join(root, \"dist\", \"bin\", \"abp.js\")]);\n}\n\nexport function resolveDefaultAbpExecutablePath(): string | undefined {\n return resolveDefaultAbpBrowserExecutablePath() ?? resolveDefaultAbpWrapperExecutablePath();\n}\n\nexport function buildAbpLaunchCommand(options: LaunchRequestOptions): AbpLaunchCommand {\n if (options.abpExecutablePath !== undefined && options.browserExecutablePath !== undefined) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either an ABP wrapper executable path or a browser executable path, not both\",\n );\n }\n\n const browserArgs = normalizeBrowserArgs(options.args);\n const browserExecutablePath =\n options.browserExecutablePath ??\n (options.abpExecutablePath === undefined\n ? resolveDefaultAbpBrowserExecutablePath()\n : undefined);\n\n if (browserExecutablePath !== undefined) {\n return {\n executablePath: browserExecutablePath,\n args: [\n `--abp-port=${String(options.port)}`,\n \"--use-mock-keychain\",\n ...(options.headless ? [\"--headless=new\"] : []),\n `--user-data-dir=${options.userDataDir}`,\n `--abp-session-dir=${options.sessionDir}`,\n ...ensureRemoteDebuggingPortArg(browserArgs),\n ],\n };\n }\n\n return {\n executablePath:\n options.abpExecutablePath ??\n resolveDefaultAbpWrapperExecutablePath() ??\n \"agent-browser-protocol\",\n args: [\n \"--port\",\n String(options.port),\n ...(options.headless ? [\"--headless\"] : []),\n \"--user-data-dir\",\n options.userDataDir,\n \"--session-dir\",\n options.sessionDir,\n \"--\",\n ...ensureRemoteDebuggingPortArg(browserArgs),\n ],\n };\n}\n\nexport async function launchAbpProcess(options: LaunchRequestOptions): Promise<LaunchedAbpProcess> {\n await Promise.all([\n fs.mkdir(options.userDataDir, { recursive: true }),\n fs.mkdir(options.sessionDir, { recursive: true }),\n ]);\n\n const command = buildAbpLaunchCommand(options);\n\n const child = spawn(command.executablePath, command.args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const outputBuffer: string[] = [];\n const appendOutput = (chunk: Buffer | string): void => {\n const text = typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\");\n outputBuffer.push(text);\n if (outputBuffer.length > 20) {\n outputBuffer.shift();\n }\n };\n\n const spawnError = new Promise<never>((_, reject) => {\n child.once(\"error\", (error) => {\n reject(\n createBrowserCoreError(\n \"operation-failed\",\n `failed to launch ABP executable ${command.executablePath}: ${error.message}`,\n {\n cause: error,\n },\n ),\n );\n });\n });\n const exitError = new Promise<never>((_, reject) => {\n child.once(\"exit\", (code, signal) => {\n if (code === 0 || signal === \"SIGTERM\" || signal === \"SIGKILL\") {\n return;\n }\n const details =\n outputBuffer.length === 0\n ? undefined\n : {\n output: outputBuffer.join(\"\"),\n };\n reject(\n createBrowserCoreError(\n \"operation-failed\",\n `ABP exited before becoming ready (code=${String(code)}, signal=${String(signal)})`,\n details === undefined ? {} : { details },\n ),\n );\n });\n });\n\n if (options.verbose && child.stdout) {\n child.stdout.pipe(process.stdout);\n }\n if (options.verbose && child.stderr) {\n child.stderr.pipe(process.stderr);\n }\n child.stdout?.on(\"data\", appendOutput);\n child.stderr?.on(\"data\", appendOutput);\n\n const baseUrl = `http://127.0.0.1:${String(options.port)}/api/v1`;\n await Promise.race([waitForReady(baseUrl), spawnError, exitError]);\n const remoteDebuggingPort = await waitForDevToolsPort(options.userDataDir);\n return {\n process: child,\n baseUrl,\n remoteDebuggingUrl: `http://127.0.0.1:${String(remoteDebuggingPort)}`,\n };\n}\n\nasync function waitForReady(baseUrl: string): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < 30_000) {\n try {\n const response = await fetch(`${baseUrl}/browser/status`);\n if (response.ok) {\n const body = (await response.json()) as AbpBrowserStatus;\n if (body.success && body.data.ready) {\n return;\n }\n }\n } catch {}\n\n await delay(200);\n }\n\n throw createBrowserCoreError(\"timeout\", `ABP did not become ready within 30000ms at ${baseUrl}`);\n}\n\nasync function waitForDevToolsPort(userDataDir: string): Promise<number> {\n const path = join(userDataDir, \"DevToolsActivePort\");\n const startedAt = Date.now();\n while (Date.now() - startedAt < 30_000) {\n try {\n const content = await fs.readFile(path, \"utf8\");\n const [line] = content.split(/\\r?\\n/, 1);\n const port = Number(line);\n if (Number.isInteger(port) && port > 0) {\n return port;\n }\n } catch {}\n\n await delay(200);\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `CDP port file was not written to ${userDataDir} within 30000ms`,\n );\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { StepEvent } from \"@opensteer/browser-core\";\n\nimport type { AbpSelectPopupItem } from \"./types.js\";\n\ntype SelectChooserOption = NonNullable<\n Extract<StepEvent, { readonly kind: \"chooser-opened\" }>[\"options\"]\n>[number];\n\ninterface SelectChooserEventData {\n readonly multiple: boolean;\n readonly options?: readonly SelectChooserOption[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readInteger(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isInteger(value) ? value : undefined;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction parseSelectPopupItem(value: unknown): AbpSelectPopupItem | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const index = readInteger(value.index);\n const type = readString(value.type);\n if (index === undefined || type === undefined) {\n return undefined;\n }\n\n const label = readString(value.label);\n const toolTip = readString(value.tool_tip);\n const enabled = readBoolean(value.enabled);\n const checked = readBoolean(value.checked);\n\n return {\n index,\n type,\n ...(label === undefined ? {} : { label }),\n ...(toolTip === undefined ? {} : { tool_tip: toolTip }),\n ...(enabled === undefined ? {} : { enabled }),\n ...(checked === undefined ? {} : { checked }),\n };\n}\n\nfunction isSelectableSelectPopupItem(type: string): boolean {\n return type === \"option\" || type === \"checkable_option\";\n}\n\nexport function buildSelectChooserOptions(\n items: unknown,\n selectedIndex?: number,\n): readonly SelectChooserOption[] | undefined {\n if (!Array.isArray(items)) {\n return undefined;\n }\n\n const options = items.flatMap((value) => {\n const item = parseSelectPopupItem(value);\n if (item === undefined || !isSelectableSelectPopupItem(item.type)) {\n return [];\n }\n\n const label = item.label ?? item.tool_tip ?? \"\";\n return [\n {\n index: item.index,\n label,\n value: label,\n selected: (item.checked ?? false) || item.index === selectedIndex,\n } satisfies SelectChooserOption,\n ];\n });\n\n return options.length === 0 ? undefined : options;\n}\n\nexport function normalizeSelectChooserEventData(\n data: Record<string, unknown>,\n): SelectChooserEventData | undefined {\n const multiple = readBoolean(data.allow_multiple_selection);\n if (multiple === undefined) {\n return undefined;\n }\n\n const selectedIndex = readInteger(data.selected_index);\n const options = buildSelectChooserOptions(data.items, selectedIndex);\n return {\n multiple,\n ...(options === undefined ? {} : { options }),\n };\n}\n","import {\n CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS,\n capturePostLoadTrackerSnapshot,\n buildPostLoadTrackerBeginExpression,\n buildPostLoadTrackerFreezeExpression,\n buildPostLoadTrackerInstallScript,\n buildPostLoadTrackerReadExpression,\n DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n normalizePostLoadTrackerState,\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 type { PageController } from \"./types.js\";\n\nexport const DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS = CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS;\nexport const DEFAULT_ABP_POST_LOAD_CAPTURE_WINDOW_MS = 1_000;\n\ninterface AbpActionSettlerContext {\n syncExecutionPaused(controller: PageController): Promise<boolean>;\n setExecutionPaused(controller: PageController, paused: boolean): 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 isPageClosedError(error: unknown): boolean;\n}\n\nexport interface AbpActionSettleOptions {\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 type AbpActionBoundaryOptions = Omit<AbpActionSettleOptions, \"controller\">;\n\nexport function clampAbpActionSettleTimeout(timeoutMs: number | undefined): number {\n if (timeoutMs === undefined) {\n return DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS;\n }\n return Math.max(0, Math.min(DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS, timeoutMs));\n}\n\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n\nexport function createAbpActionSettler(context: AbpActionSettlerContext) {\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.cdp.send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source: installScript,\n });\n controller.settleTrackerRegistered = true;\n }\n\n await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.evaluate\", {\n expression: installScript,\n returnByValue: true,\n awaitPromise: true,\n });\n }\n\n async function readTrackerState(controller: PageController) {\n try {\n const evaluated = await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.evaluate\", {\n expression: readExpression,\n returnByValue: true,\n awaitPromise: true,\n });\n\n return normalizePostLoadTrackerState(evaluated.result?.value);\n } catch (error) {\n if (context.isPageClosedError(error)) {\n return undefined;\n }\n throw error;\n }\n }\n\n async function beginTrackerObservation(controller: PageController): Promise<void> {\n await installTracker(controller);\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: beginExpression,\n returnByValue: true,\n awaitPromise: true,\n });\n }\n\n async function freezeTrackerObservation(controller: PageController): Promise<void> {\n await controller.cdp.send(\"Runtime.evaluate\", {\n expression: freezeExpression,\n returnByValue: true,\n awaitPromise: true,\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 await beginTrackerObservation(controller);\n const tracker = await readTrackerState(controller);\n const mainFrameUrl =\n controller.mainFrameRef === undefined\n ? undefined\n : controller.framesByCdpId.get(controller.mainFrameRef)?.currentDocument.url;\n return {\n pageRef: controller.pageRef,\n documentRef,\n ...(mainFrameUrl === undefined ? {} : { url: mainFrameUrl }),\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 const quietMs = input.quietMs ?? DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS;\n const captureWindowMs = Math.max(\n 0,\n Math.min(input.captureWindowMs ?? DEFAULT_ABP_POST_LOAD_CAPTURE_WINDOW_MS, timeoutMs),\n );\n const deadline = Date.now() + timeoutMs;\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 abortError(signal);\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: AbpActionSettleOptions): 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 const wasPaused = await context.syncExecutionPaused(controller);\n let boundary: ActionBoundaryOutcome = {\n trigger: \"dom-action\",\n crossDocument: false,\n bootstrapSettled: false,\n timedOutPhase: \"bootstrap\",\n };\n if (wasPaused) {\n await context.setExecutionPaused(controller, false);\n }\n\n try {\n if (snapshot === undefined) {\n if (policySettle) {\n if (signal?.aborted) {\n throw abortError(signal);\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: () =>\n controller.mainFrameRef === undefined\n ? undefined\n : controller.framesByCdpId.get(controller.mainFrameRef)?.currentDocument.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 } finally {\n if (wasPaused && controller.lifecycleState !== \"closed\") {\n try {\n await context.setExecutionPaused(controller, true);\n } catch (error) {\n if (!context.isPageClosedError(error)) {\n throw error;\n }\n }\n }\n\n if (controller.lifecycleState !== \"closed\") {\n try {\n await context.flushDomUpdateTask(controller);\n } catch (error) {\n if (!context.isPageClosedError(error)) {\n throw error;\n }\n }\n }\n }\n\n return boundary;\n }\n\n return {\n captureSnapshot,\n installTracker,\n waitForPostLoadQuiet,\n settle,\n };\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 abortError(signal);\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(abortError(signal!));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import { createBrowserCoreError, type HeaderEntry } from \"@opensteer/browser-core\";\n\nimport { AbpApiError } from \"./errors.js\";\nimport type {\n AbpActionRequest,\n AbpActionResponse,\n AbpBrowserStatus,\n AbpCurlResponse,\n AbpCurlWireResponse,\n AbpDialogInfo,\n AbpExecuteResult,\n AbpExecutionState,\n AbpNetworkCall,\n AbpNetworkQueryWireResponse,\n AbpRequestOptions,\n AbpRestClientLike,\n AbpWaitUntil,\n AbpTab,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction invalidAbpResponse(path: string): never {\n throw createBrowserCoreError(\n \"operation-failed\",\n `ABP ${path} returned an invalid response shape`,\n );\n}\n\nfunction readStringRecord(value: unknown): Record<string, string> | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const entries = Object.entries(value);\n if (entries.some(([, entryValue]) => typeof entryValue !== \"string\")) {\n return undefined;\n }\n\n return Object.fromEntries(entries) as Record<string, string>;\n}\n\nfunction normalizeNetworkQueryResponse(value: unknown): readonly AbpNetworkCall[] {\n if (!isRecord(value)) {\n invalidAbpResponse(\"/network\");\n }\n\n const response = value as Partial<AbpNetworkQueryWireResponse>;\n if (!Array.isArray(response.requests)) {\n invalidAbpResponse(\"/network\");\n }\n\n return response.requests as readonly AbpNetworkCall[];\n}\n\nfunction normalizeCurlResponse(value: unknown): AbpCurlResponse {\n if (!isRecord(value)) {\n invalidAbpResponse(\"/tabs/{tabId}/curl\");\n }\n\n const response = value as Partial<AbpCurlWireResponse>;\n const status = response.status_code;\n const headers = readStringRecord(response.headers);\n const body = response.body;\n const bodyIsBase64 = response.body_is_base64;\n const url = response.final_url;\n const redirected = response.redirected;\n if (\n !Number.isInteger(status) ||\n headers === undefined ||\n typeof bodyIsBase64 !== \"boolean\" ||\n typeof url !== \"string\" ||\n typeof redirected !== \"boolean\" ||\n (body !== undefined && typeof body !== \"string\")\n ) {\n invalidAbpResponse(\"/tabs/{tabId}/curl\");\n }\n\n return {\n status: status!,\n headers,\n ...(body === undefined ? {} : { body }),\n ...(body === undefined ? {} : { bodyEncoding: bodyIsBase64 ? \"base64\" : \"text\" }),\n url: url!,\n redirected: redirected!,\n };\n}\n\nfunction normalizeExecuteResponse(value: unknown): unknown {\n if (!isRecord(value) || !isRecord(value.result) || !(\"value\" in value.result)) {\n invalidAbpResponse(\"/tabs/{tabId}/execute\");\n }\n\n const result = value.result as unknown as AbpExecuteResult;\n return result.value;\n}\n\nconst DEFAULT_ACTION_COMPLETE_TIMEOUT_MS = 10_000;\n\nexport class AbpRestClient implements AbpRestClientLike {\n private readonly baseUrl: string;\n private readonly extraHeaders: readonly HeaderEntry[];\n\n constructor(baseUrl: string, extraHeaders: readonly HeaderEntry[] = []) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n this.extraHeaders = extraHeaders;\n }\n\n getBrowserStatus(): Promise<AbpBrowserStatus> {\n return this.requestJson(\"/browser/status\");\n }\n\n async shutdownBrowser(): Promise<void> {\n await this.requestJson(\"/browser/shutdown\", {\n method: \"POST\",\n body: {},\n });\n }\n\n listTabs(): Promise<readonly AbpTab[]> {\n return this.requestJson(\"/tabs\");\n }\n\n getTab(tabId: string): Promise<AbpTab> {\n return this.requestJson(`/tabs/${tabId}`);\n }\n\n createTab(): Promise<AbpTab> {\n return this.requestJson(\"/tabs\", {\n method: \"POST\",\n body: {},\n });\n }\n\n async closeTab(tabId: string): Promise<void> {\n await this.requestJson(`/tabs/${tabId}`, {\n method: \"DELETE\",\n });\n }\n\n async activateTab(tabId: string): Promise<void> {\n await this.requestJson(`/tabs/${tabId}/activate`, {\n method: \"POST\",\n body: {},\n });\n }\n\n async stopTab(tabId: string): Promise<void> {\n await this.requestJson(`/tabs/${tabId}/stop`, {\n method: \"POST\",\n body: {},\n });\n }\n\n navigateTab(\n tabId: string,\n body: {\n readonly url: string;\n readonly referrer?: string;\n } & AbpActionRequest,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/navigate`, {\n method: \"POST\",\n body,\n });\n }\n\n reloadTab(tabId: string, body: AbpActionRequest): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/reload`, {\n method: \"POST\",\n body,\n });\n }\n\n goBack(tabId: string, body: AbpActionRequest): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/back`, {\n method: \"POST\",\n body,\n });\n }\n\n goForward(tabId: string, body: AbpActionRequest): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/forward`, {\n method: \"POST\",\n body,\n });\n }\n\n clickTab(\n tabId: string,\n body: {\n readonly x: number;\n readonly y: number;\n readonly button?: string;\n readonly click_count?: number;\n readonly modifiers?: readonly string[];\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/click`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n moveTab(\n tabId: string,\n body: {\n readonly x: number;\n readonly y: number;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/move`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n scrollTab(\n tabId: string,\n body: {\n readonly x: number;\n readonly y: number;\n readonly scrolls: readonly {\n readonly delta_px: number;\n readonly direction: \"x\" | \"y\";\n }[];\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/scroll`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n dragTab(\n tabId: string,\n body: {\n readonly start_x: number;\n readonly start_y: number;\n readonly end_x: number;\n readonly end_y: number;\n readonly steps?: number;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/drag`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n keyPressTab(\n tabId: string,\n body: {\n readonly key: string;\n readonly modifiers?: readonly string[];\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/keyboard/press`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n typeTab(\n tabId: string,\n body: {\n readonly text: string;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/type`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n waitTab(\n tabId: string,\n body: {\n readonly duration_ms: number;\n } & AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/wait`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n screenshotTab(\n tabId: string,\n body: AbpActionRequest,\n options?: AbpRequestOptions,\n ): Promise<AbpActionResponse> {\n return this.requestJson(`/tabs/${tabId}/screenshot`, {\n method: \"POST\",\n body,\n ...(options?.signal === undefined ? {} : { signal: options.signal }),\n });\n }\n\n executeScript<TResult = unknown>(\n tabId: string,\n script: string,\n options: AbpActionRequest = {},\n ): Promise<TResult> {\n return this.requestJson(\n `/tabs/${tabId}/execute`,\n {\n method: \"POST\",\n body: { script, ...options },\n },\n normalizeExecuteResponse as (value: unknown) => TResult,\n );\n }\n\n getExecutionState(tabId: string): Promise<AbpExecutionState> {\n return this.requestJson(`/tabs/${tabId}/execution`);\n }\n\n setExecutionState(\n tabId: string,\n body: {\n readonly paused: boolean;\n },\n ): Promise<AbpExecutionState> {\n return this.requestJson(`/tabs/${tabId}/execution`, {\n method: \"POST\",\n body,\n });\n }\n\n async getDialog(tabId: string): Promise<AbpDialogInfo | undefined> {\n const result = await this.requestJson<Record<string, unknown>>(`/tabs/${tabId}/dialog`);\n if (!result || result.present !== true) {\n return undefined;\n }\n return {\n dialogType: String(result.dialog_type ?? result.dialogType ?? \"alert\"),\n message: String(result.message ?? \"\"),\n defaultPrompt: typeof result.default_prompt === \"string\" ? result.default_prompt : undefined,\n };\n }\n\n acceptDialog(tabId: string): Promise<void> {\n return this.requestJson(`/tabs/${tabId}/dialog/accept`, {\n method: \"POST\",\n body: {},\n });\n }\n\n dismissDialog(tabId: string): Promise<void> {\n return this.requestJson(`/tabs/${tabId}/dialog/dismiss`, {\n method: \"POST\",\n body: {},\n });\n }\n\n queryNetwork(input: {\n readonly tabId?: string;\n readonly includeBodies: boolean;\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: string;\n }): Promise<readonly AbpNetworkCall[]> {\n const params = new URLSearchParams();\n if (input.tabId !== undefined) {\n params.set(\"tab_id\", input.tabId);\n }\n if (input.includeBodies) {\n params.set(\"include_body\", \"true\");\n }\n if (input.url !== undefined) {\n params.set(\"url\", input.url);\n }\n if (input.hostname !== undefined) {\n params.set(\"hostname\", input.hostname);\n }\n if (input.path !== undefined) {\n params.set(\"url_path\", input.path);\n }\n if (input.method !== undefined) {\n params.set(\"method\", input.method);\n }\n if (input.status !== undefined) {\n params.set(\"status\", input.status);\n }\n if (input.resourceType !== undefined) {\n params.set(\"resource_type\", input.resourceType);\n }\n return this.requestJson(`/network?${params.toString()}`, {}, normalizeNetworkQueryResponse);\n }\n\n curlTab(\n tabId: string,\n body: {\n readonly url: string;\n readonly method: string;\n readonly headers?: Record<string, string>;\n readonly body?: string;\n },\n ): Promise<AbpCurlResponse> {\n return this.requestJson(\n `/tabs/${tabId}/curl`,\n {\n method: \"POST\",\n body,\n },\n normalizeCurlResponse,\n );\n }\n\n private async requestJson<T>(\n path: string,\n options: {\n readonly method?: string;\n readonly body?: unknown;\n readonly signal?: AbortSignal;\n } = {},\n normalize?: (value: unknown) => T,\n ): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: options.method ?? \"GET\",\n headers: {\n accept: \"application/json\",\n ...(options.body === undefined ? {} : { \"content-type\": \"application/json\" }),\n ...Object.fromEntries(this.extraHeaders.map((header) => [header.name, header.value])),\n },\n ...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const parsed = contentType.includes(\"application/json\")\n ? ((await response.json()) as unknown)\n : await response.text();\n\n if (!response.ok) {\n const message =\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"error\" in parsed &&\n typeof parsed.error === \"string\"\n ? parsed.error\n : response.statusText || `ABP request failed with HTTP ${String(response.status)}`;\n throw new AbpApiError(response.status, message, parsed);\n }\n\n return normalize ? normalize(parsed) : (parsed as T);\n }\n}\n\nexport function buildImmediateActionRequest(\n options: {\n readonly captureNetwork?: boolean;\n readonly waitUntil?: AbpWaitUntil;\n readonly screenshot?: {\n readonly area?: \"none\" | \"viewport\";\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n };\n } = {},\n): AbpActionRequest {\n return {\n wait_until: options.waitUntil ?? {\n type: \"immediate\",\n },\n ...(options.screenshot === undefined\n ? {}\n : {\n screenshot: {\n area: options.screenshot.area ?? \"viewport\",\n ...(options.screenshot.cursor === undefined\n ? {}\n : { cursor: options.screenshot.cursor }),\n ...(options.screenshot.format === undefined\n ? {}\n : { format: options.screenshot.format }),\n ...(options.screenshot.markup === undefined\n ? {}\n : { markup: [...options.screenshot.markup] }),\n },\n }),\n ...(options.captureNetwork === false\n ? {}\n : {\n network: {\n types: [\"Document\", \"XHR\", \"Fetch\"],\n },\n }),\n };\n}\n\nexport function buildInputActionRequest(\n options: {\n readonly captureNetwork?: boolean;\n readonly timeoutMs?: number;\n readonly omitDefaultTimeout?: boolean;\n readonly screenshot?: {\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n };\n } = {},\n): AbpActionRequest {\n return buildImmediateActionRequest({\n ...(options.captureNetwork === undefined ? {} : { captureNetwork: options.captureNetwork }),\n waitUntil: buildActionCompleteWaitUntil({\n ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),\n ...(options.omitDefaultTimeout === undefined\n ? {}\n : { omitDefaultTimeout: options.omitDefaultTimeout }),\n }),\n ...(options.screenshot === undefined ? {} : { screenshot: options.screenshot }),\n });\n}\n\nexport function buildImmediateScreenshotRequest(\n screenshot: {\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n } = {},\n): AbpActionRequest {\n return buildImmediateActionRequest({\n captureNetwork: false,\n screenshot,\n });\n}\n\nfunction buildActionCompleteWaitUntil(options: {\n readonly timeoutMs?: number;\n readonly omitDefaultTimeout?: boolean;\n}): AbpWaitUntil {\n const timeoutMs =\n options.timeoutMs === undefined\n ? options.omitDefaultTimeout\n ? undefined\n : DEFAULT_ACTION_COMPLETE_TIMEOUT_MS\n : normalizeActionTimeoutMs(options.timeoutMs);\n\n return {\n type: \"action_complete\",\n ...(timeoutMs === undefined ? {} : { timeout_ms: timeoutMs }),\n };\n}\n\nfunction normalizeActionTimeoutMs(timeoutMs: number): number {\n if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n `ABP action timeout must be a non-negative finite number, received ${String(timeoutMs)}`,\n );\n }\n\n return Math.max(1, Math.ceil(timeoutMs));\n}\n","import { createBrowserCoreError } from \"@opensteer/browser-core\";\n\nexport interface AbpScrollSegment {\n readonly delta_px: number;\n readonly direction: \"x\" | \"y\";\n}\n\nexport function buildAbpScrollSegments(delta: {\n readonly x: number;\n readonly y: number;\n}): readonly AbpScrollSegment[] {\n const { x, y } = delta;\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n `ABP scroll deltas must be finite numbers, received (${String(x)}, ${String(y)})`,\n );\n }\n\n const segments: AbpScrollSegment[] = [];\n if (x !== 0) {\n segments.push({\n delta_px: x,\n direction: \"x\",\n });\n }\n if (y !== 0) {\n segments.push({\n delta_px: y,\n direction: \"y\",\n });\n }\n if (segments.length === 0) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"ABP scroll requires at least one non-zero delta\",\n );\n }\n return segments;\n}\n","import type { PageRef, StepEvent } from \"@opensteer/browser-core\";\n\nimport type { AbpActionResponse } from \"./types.js\";\n\nexport interface DiscoveredTabEffects {\n readonly events: readonly StepEvent[];\n readonly activePageRef?: PageRef;\n}\n\nexport function resolveTabChangePageRef(input: {\n readonly controllerPageRef: PageRef;\n readonly response: Pick<AbpActionResponse, \"tab_changed\">;\n readonly actionEvents: readonly StepEvent[];\n readonly discoveredTabs: DiscoveredTabEffects;\n readonly activePageRef: PageRef | undefined;\n}): PageRef {\n if (!input.response.tab_changed) {\n return input.controllerPageRef;\n }\n\n if (input.discoveredTabs.activePageRef !== undefined) {\n return input.discoveredTabs.activePageRef;\n }\n\n for (const event of [...input.actionEvents, ...input.discoveredTabs.events].reverse()) {\n if (event.kind === \"popup-opened\") {\n return event.pageRef;\n }\n }\n\n return input.activePageRef ?? input.controllerPageRef;\n}\n\nexport function collectPopupPageRefs(events: readonly StepEvent[]): readonly PageRef[] {\n const seen = new Set<PageRef>();\n const pageRefs: PageRef[] = [];\n for (const event of events) {\n if (event.kind !== \"popup-opened\" || seen.has(event.pageRef)) {\n continue;\n }\n seen.add(event.pageRef);\n pageRefs.push(event.pageRef);\n }\n return pageRefs;\n}\n","import {\n type ActionBoundaryOutcome,\n createBodyPayload,\n createSize,\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createScrollOffset,\n type FrameRef,\n type PageRef,\n type ScreenshotArtifact,\n type StepEvent,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport type {\n ComputerUseBridge,\n ComputerUseBridgeOutput,\n NormalizedComputerScreenshotOptions,\n} from \"@opensteer/protocol\";\n\nimport { clampAbpActionSettleTimeout, type AbpActionBoundaryOptions } from \"./action-settle.js\";\nimport {\n buildImmediateActionRequest,\n buildImmediateScreenshotRequest,\n buildInputActionRequest,\n} from \"./rest-client.js\";\nimport { buildAbpScrollSegments } from \"./scroll.js\";\nimport {\n collectPopupPageRefs,\n type DiscoveredTabEffects,\n resolveTabChangePageRef,\n} from \"./tab-change.js\";\nimport type { AbpActionResponse, PageController, SessionState } from \"./types.js\";\n\nexport function createAbpComputerUseBridge(context: {\n resolveController(pageRef: PageRef): PageController;\n resolveSession(sessionRef: SessionState[\"sessionRef\"]): SessionState;\n normalizeActionEvents(\n controller: PageController,\n response: AbpActionResponse,\n ): Promise<readonly StepEvent[]>;\n detectNewTabs(\n session: SessionState,\n openerController: PageController,\n ): Promise<DiscoveredTabEffects>;\n executeInputAction(\n session: SessionState,\n controller: PageController,\n execute: () => Promise<AbpActionResponse>,\n ): Promise<{ readonly response: AbpActionResponse; readonly dialogEvents: readonly StepEvent[] }>;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: AbpActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n requireMainFrame(controller: PageController): {\n readonly frameRef: FrameRef;\n readonly currentDocument: {\n readonly documentRef: NonNullable<ScreenshotArtifact[\"documentRef\"]>;\n readonly documentEpoch: NonNullable<ScreenshotArtifact[\"documentEpoch\"]>;\n };\n };\n drainQueuedEvents(pageRef: PageRef): readonly StepEvent[];\n}): ComputerUseBridge {\n return {\n async execute(input) {\n const startedAt = Date.now();\n const controller = context.resolveController(input.pageRef);\n const session = context.resolveSession(controller.sessionRef);\n const action = input.action;\n const screenshot = toAbpScreenshotOptions(input.screenshot);\n const remainingMs = input.remainingMs();\n const requestOptions = {\n signal: input.signal,\n };\n const inputActionRequest = buildInputActionRequest({\n captureNetwork: false,\n omitDefaultTimeout: true,\n ...(remainingMs === undefined ? {} : { timeoutMs: remainingMs }),\n screenshot,\n });\n\n let response: AbpActionResponse;\n let dialogEvents: readonly StepEvent[] = [];\n let boundary: ActionBoundaryOutcome | undefined;\n\n switch (action.type) {\n case \"click\": {\n const executed = await context.executeInputAction(session, controller, () =>\n session.rest.clickTab(\n controller.tabId,\n {\n x: action.x,\n y: action.y,\n ...(action.button === undefined ? {} : { button: action.button }),\n ...(action.clickCount === undefined ? {} : { click_count: action.clickCount }),\n ...(action.modifiers === undefined ? {} : { modifiers: [...action.modifiers] }),\n ...inputActionRequest,\n },\n requestOptions,\n ),\n );\n response = executed.response;\n dialogEvents = executed.dialogEvents;\n break;\n }\n case \"move\":\n response = await session.rest.moveTab(\n controller.tabId,\n {\n x: action.x,\n y: action.y,\n ...buildImmediateActionRequest({\n captureNetwork: false,\n screenshot,\n }),\n },\n requestOptions,\n );\n break;\n case \"scroll\":\n response = await session.rest.scrollTab(\n controller.tabId,\n {\n x: action.x,\n y: action.y,\n scrolls: buildAbpScrollSegments({\n x: action.deltaX,\n y: action.deltaY,\n }),\n ...inputActionRequest,\n },\n requestOptions,\n );\n break;\n case \"type\":\n response = await session.rest.typeTab(\n controller.tabId,\n {\n text: action.text,\n ...inputActionRequest,\n },\n requestOptions,\n );\n break;\n case \"key\": {\n const executed = await context.executeInputAction(session, controller, () =>\n session.rest.keyPressTab(\n controller.tabId,\n {\n key: action.key,\n ...(action.modifiers === undefined ? {} : { modifiers: [...action.modifiers] }),\n ...inputActionRequest,\n },\n requestOptions,\n ),\n );\n response = executed.response;\n dialogEvents = executed.dialogEvents;\n break;\n }\n case \"drag\":\n response = await session.rest.dragTab(\n controller.tabId,\n {\n start_x: action.start.x,\n start_y: action.start.y,\n end_x: action.end.x,\n end_y: action.end.y,\n ...(action.steps === undefined ? {} : { steps: action.steps }),\n ...inputActionRequest,\n },\n requestOptions,\n );\n break;\n case \"screenshot\":\n response = await session.rest.screenshotTab(\n controller.tabId,\n buildImmediateScreenshotRequest(screenshot),\n requestOptions,\n );\n break;\n case \"wait\":\n response = await session.rest.waitTab(\n controller.tabId,\n {\n duration_ms: action.durationMs,\n ...buildImmediateActionRequest({\n captureNetwork: false,\n screenshot,\n }),\n },\n requestOptions,\n );\n break;\n }\n\n const actionEvents = await context.normalizeActionEvents(controller, response);\n const discoveredTabs = await context.detectNewTabs(session, controller);\n const popupPageRefs = collectPopupPageRefs([...actionEvents, ...discoveredTabs.events]);\n const resultPageRef = resolveTabChangePageRef({\n controllerPageRef: controller.pageRef,\n response,\n actionEvents,\n discoveredTabs,\n activePageRef: session.activePageRef,\n });\n if (response.tab_changed) {\n session.activePageRef = resultPageRef;\n }\n const resultController = context.resolveController(resultPageRef);\n let displayResponse = response;\n if (action.type !== \"screenshot\") {\n boundary = await context.settleActionBoundary(resultController, {\n timeoutMs: clampAbpActionSettleTimeout(remainingMs),\n ...(resultController.pageRef === controller.pageRef && input.snapshot !== undefined\n ? { snapshot: input.snapshot }\n : {}),\n signal: input.signal,\n policySettle: input.policySettle,\n });\n displayResponse = await session.rest.screenshotTab(\n resultController.tabId,\n buildImmediateScreenshotRequest(screenshot),\n requestOptions,\n );\n } else {\n await context.flushDomUpdateTask(resultController);\n }\n\n const display = materializeDisplayContract({\n context,\n controller: resultController,\n response: displayResponse,\n });\n\n const popupQueuedEvents = popupPageRefs.flatMap((pageRef) =>\n pageRef === controller.pageRef ? [] : context.drainQueuedEvents(pageRef),\n );\n\n return {\n pageRef: resultController.pageRef,\n screenshot: display.screenshot,\n viewport: display.viewport,\n events: [\n ...context.drainQueuedEvents(controller.pageRef),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ...popupQueuedEvents,\n ],\n timing: timingFromResponse(response, Date.now() - startedAt),\n ...(boundary === undefined ? {} : { boundary }),\n };\n },\n };\n}\n\nfunction toAbpScreenshotOptions(screenshot: NormalizedComputerScreenshotOptions): {\n readonly cursor?: boolean;\n readonly format?: string;\n readonly markup?: readonly string[];\n} {\n return {\n ...(screenshot.includeCursor ? { cursor: true } : {}),\n ...(screenshot.format === undefined ? {} : { format: screenshot.format }),\n ...(screenshot.annotations.length === 0 ? {} : { markup: [...screenshot.annotations] }),\n };\n}\n\nfunction materializeDisplayContract(input: {\n readonly context: Parameters<typeof createAbpComputerUseBridge>[0];\n readonly controller: PageController;\n readonly response: AbpActionResponse;\n}): {\n readonly screenshot: ScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n} {\n const screenshot = input.response.screenshot_after;\n if (screenshot === undefined) {\n throw new Error(\n `ABP action response for ${input.controller.pageRef} did not include screenshot_after`,\n );\n }\n\n const viewport = viewportMetricsFromResponse(input.response, screenshot);\n const mainFrame = input.context.requireMainFrame(input.controller);\n const format =\n (screenshot.format as NormalizedComputerScreenshotOptions[\"format\"] | undefined) ?? \"png\";\n return {\n screenshot: {\n pageRef: input.controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload: createBodyPayload(new Uint8Array(Buffer.from(screenshot.data, \"base64\")), {\n mimeType: `image/${format}`,\n }),\n format,\n size: createSize(screenshot.width, screenshot.height),\n coordinateSpace: \"layout-viewport-css\",\n },\n viewport,\n };\n}\n\nfunction timingFromResponse(\n response: AbpActionResponse,\n fallbackTotalMs: number,\n): ComputerUseBridgeOutput[\"timing\"] {\n const timing = response.timing;\n if (timing === undefined) {\n return {\n actionMs: fallbackTotalMs,\n waitMs: 0,\n totalMs: fallbackTotalMs,\n };\n }\n\n return {\n actionMs: Math.max(0, timing.action_completed_ms - timing.action_started_ms),\n waitMs: Math.max(0, timing.wait_completed_ms - timing.action_completed_ms),\n totalMs: Math.max(fallbackTotalMs, Math.max(0, timing.duration_ms)),\n };\n}\n\nfunction viewportMetricsFromResponse(\n response: AbpActionResponse,\n screenshot: NonNullable<AbpActionResponse[\"screenshot_after\"]>,\n): ViewportMetrics {\n const scroll = response.scroll;\n if (scroll === undefined) {\n throw new Error(\"ABP action response did not include scroll metrics for screenshot_after\");\n }\n\n const x = scroll.scrollX ?? scroll.horizontal_px;\n const y = scroll.scrollY ?? scroll.vertical_px;\n const pageWidth = scroll.pageWidth ?? scroll.page_width;\n const pageHeight = scroll.pageHeight ?? scroll.page_height;\n const viewportWidth = scroll.viewportWidth ?? scroll.viewport_width;\n const viewportHeight = scroll.viewportHeight ?? scroll.viewport_height;\n\n if (\n x === undefined ||\n y === undefined ||\n pageWidth === undefined ||\n pageHeight === undefined ||\n viewportWidth === undefined ||\n viewportHeight === undefined\n ) {\n throw new Error(\"ABP action response did not include a complete screenshot viewport contract\");\n }\n if (viewportWidth !== screenshot.width || viewportHeight !== screenshot.height) {\n throw new Error(\n `ABP screenshot_after size ${screenshot.width}x${screenshot.height} did not match viewport ${viewportWidth}x${viewportHeight}`,\n );\n }\n\n return {\n layoutViewport: {\n origin: { x, y },\n size: createSize(viewportWidth, viewportHeight),\n },\n visualViewport: {\n origin: { x, y },\n offsetWithinLayoutViewport: createScrollOffset(0, 0),\n size: createSize(viewportWidth, viewportHeight),\n },\n scrollOffset: createScrollOffset(x, y),\n contentSize: createSize(pageWidth, pageHeight),\n devicePixelRatio: createDevicePixelRatio(1),\n pageScaleFactor: createPageScaleFactor(1),\n pageZoomFactor: createPageZoomFactor(1),\n };\n}\n","import {\n type ActionBoundaryOutcome,\n createPoint,\n createBrowserCoreError,\n quadBounds,\n staleNodeRefError,\n type DomSnapshot,\n type DomSnapshotNode,\n type NodeLocator,\n type PageRef,\n type Quad,\n type SessionRef,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport type {\n DomActionBridge,\n DomActionTargetInspection,\n DomPointerHitAssessment,\n ReplayElementPath,\n} from \"@opensteer/protocol\";\n\nimport type { DocumentState, PageController, SessionState } from \"./types.js\";\nimport { clampAbpActionSettleTimeout, type AbpActionBoundaryOptions } from \"./action-settle.js\";\nimport { buildInputActionRequest } from \"./rest-client.js\";\n\ninterface AbpDomActionBridgeContext {\n resolveController(pageRef: PageRef): PageController;\n resolveSession(sessionRef: SessionRef): SessionState;\n flushDomUpdateTask(controller: PageController): Promise<void>;\n settleActionBoundary(\n controller: PageController,\n options: AbpActionBoundaryOptions,\n ): Promise<ActionBoundaryOutcome>;\n syncExecutionPaused(controller: PageController): Promise<boolean>;\n setExecutionPaused(controller: PageController, paused: boolean): Promise<void>;\n isPageClosedError(error: unknown): boolean;\n locateBackendNode(document: DocumentState, backendNodeId: number): NodeLocator;\n requireLiveNode(locator: NodeLocator): {\n readonly document: DocumentState;\n readonly backendNodeId: number;\n };\n getDomSnapshot(documentRef: string): Promise<DomSnapshot>;\n getViewportMetrics(pageRef: PageRef): Promise<ViewportMetrics>;\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 stablePrimaryExact: 150,\n stablePrimaryPrefix: 130,\n attrExact: 100,\n attrPrefix: 80,\n tagOnly: 10,\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 cssEscape(value) {\n return String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n\n function stablePrimaryKey(attrs) {\n for (const key of policy.stablePrimaryAttrKeys || []) {\n if (attrs[key]) return key;\n }\n return null;\n }\n\n function countMatches(root, tag, attrKey, attrValue, mode) {\n const scope = root instanceof ShadowRoot ? root : root.ownerDocument;\n if (!scope || typeof scope.querySelectorAll !== \"function\") return 0;\n const escapedTag = String(tag || \"*\");\n let selector = escapedTag;\n if (attrKey && attrValue) {\n const operator = mode === \"prefix\" ? \"^=\" : \"=\";\n selector += \"[\" + attrKey + operator + \"\\\\\"\" + cssEscape(attrValue) + \"\\\\\"]\";\n }\n try {\n return scope.querySelectorAll(selector).length;\n } catch {\n return 0;\n }\n }\n\n function chooseAttribute(tag, attrs, root) {\n const stableKey = stablePrimaryKey(attrs);\n if (stableKey) {\n const exactCount = countMatches(root, tag, stableKey, attrs[stableKey], \"exact\");\n if (exactCount === 1) {\n return {\n key: stableKey,\n value: attrs[stableKey],\n match: \"exact\",\n };\n }\n }\n\n const entries = Object.entries(attrs)\n .filter(([key]) => !policy.deferredMatchAttrKeys.includes(key))\n .concat(Object.entries(attrs).filter(([key]) => policy.deferredMatchAttrKeys.includes(key)));\n\n for (const [key, value] of entries) {\n const exactCount = countMatches(root, tag, key, value, \"exact\");\n if (exactCount === 1) {\n return { key, value, match: \"exact\" };\n }\n if (value.length >= 4) {\n const prefixLength = Math.min(Math.max(4, Math.floor(value.length / 2)), value.length);\n const prefix = value.slice(0, prefixLength);\n const prefixCount = countMatches(root, tag, key, prefix, \"prefix\");\n if (prefixCount === 1) {\n return { key, value: prefix, match: \"prefix\" };\n }\n }\n }\n\n return null;\n }\n\n function buildChain(node) {\n const nodes = [];\n let current = node;\n while (current && current instanceof Element) {\n nodes.unshift(current);\n current = current.parentElement;\n }\n return nodes;\n }\n\n function finalizePath(chain, root) {\n const result = [];\n for (const node of chain) {\n const tag = node.tagName.toLowerCase();\n const attrs = collectAttrs(node);\n const attribute = chooseAttribute(tag, attrs, root);\n if (attribute) {\n result.push({\n tag,\n attributes: [\n {\n name: attribute.key,\n value: attribute.value,\n match: attribute.match,\n },\n ],\n });\n continue;\n }\n\n const siblings = getSiblings(node, root).filter(\n (candidate) => candidate.tagName.toLowerCase() === tag,\n );\n const index = siblings.indexOf(node);\n result.push({\n tag,\n index: siblings.length <= 1 || index < 0 ? undefined : index,\n });\n }\n\n return {\n nodes: result,\n };\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 = 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 createAbpDomActionBridge(context: AbpDomActionBridgeContext): DomActionBridge {\n return {\n async buildReplayPath(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n return withTemporaryExecutionResume(context, controller, async () => {\n const raw = await callNodeValueFunction(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 });\n return requireReplayPath(raw, locator);\n });\n },\n\n async inspectActionTarget(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const snapshot = await context.getDomSnapshot(locator.documentRef);\n const node = findNode(snapshot, locator);\n if (!node) {\n return disconnectedInspection();\n }\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n const metrics = await context.getViewportMetrics(document.pageRef);\n const contentQuads = await readContentQuads(controller, nodeId, metrics).catch(() =>\n node.layout?.quad === undefined ? [] : [node.layout.quad],\n );\n const bounds = contentQuads.length === 0 ? undefined : quadBounds(contentQuads[0]!);\n\n const hiddenAttribute = hasAttribute(node, \"hidden\");\n const ariaHidden = readAttributeValue(node, \"aria-hidden\") === \"true\";\n const disabled = hasAttribute(node, \"disabled\");\n const ariaDisabled = readAttributeValue(node, \"aria-disabled\") === \"true\";\n const readOnly = hasAttribute(node, \"readonly\");\n const style = readAttributeValue(node, \"style\") ?? \"\";\n const pointerEvents = readInlineStyleValue(style, \"pointer-events\") ?? \"auto\";\n const editable = isEditableElement(node) && !disabled && !ariaDisabled && !readOnly;\n\n return {\n connected: true,\n visible:\n !hiddenAttribute &&\n !ariaHidden &&\n bounds !== undefined &&\n bounds.width > 0 &&\n bounds.height > 0,\n enabled: !disabled && !ariaDisabled,\n editable,\n pointerEvents,\n ...(bounds === undefined ? {} : { bounds }),\n contentQuads,\n } satisfies DomActionTargetInspection;\n },\n\n async canonicalizePointerTarget(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n return withTemporaryExecutionResume(context, controller, async () => {\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 const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n input.target,\n );\n const hitLiveNode = context.requireLiveNode(input.hit);\n\n return withTemporaryExecutionResume(context, controller, async () => {\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 controller,\n 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 async scrollNodeIntoView(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await withTemporaryExecutionResume(context, controller, async () => {\n await controller.cdp.send(\"DOM.scrollIntoViewIfNeeded\", { nodeId });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async focusNode(locator) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await withTemporaryExecutionResume(context, controller, async () => {\n await controller.cdp.send(\"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async pressKey(locator, input) {\n const { controller, document, backendNodeId } = await prepareLiveNodeContext(\n context,\n locator,\n );\n const nodeId = await resolveFrontendNodeId(controller, document, locator, backendNodeId);\n await withTemporaryExecutionResume(context, controller, async () => {\n await controller.cdp.send(\"DOM.focus\", { nodeId });\n await context.flushDomUpdateTask(controller);\n const session = context.resolveSession(controller.sessionRef);\n await session.rest.keyPressTab(controller.tabId, {\n key: input.key,\n ...(input.modifiers === undefined ? {} : { modifiers: [...input.modifiers] }),\n ...buildInputActionRequest(),\n });\n await context.flushDomUpdateTask(controller);\n });\n },\n\n async finalizeDomAction(pageRef, options) {\n const controller = context.resolveController(pageRef);\n const boundary = await context.settleActionBoundary(controller, {\n timeoutMs: clampAbpActionSettleTimeout(options.remainingMs()),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n signal: options.signal,\n policySettle: options.policySettle,\n });\n const session = context.resolveSession(controller.sessionRef);\n if (session.closed) {\n throw createBrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n details: { pageRef },\n });\n }\n return boundary;\n },\n };\n}\n\nasync function prepareLiveNodeContext(\n context: AbpDomActionBridgeContext,\n locator: NodeLocator,\n): Promise<{\n readonly controller: PageController;\n readonly document: DocumentState;\n readonly backendNodeId: number;\n}> {\n const liveNode = context.requireLiveNode(locator);\n const controller = context.resolveController(liveNode.document.pageRef);\n await context.flushDomUpdateTask(controller);\n return {\n controller,\n document: liveNode.document,\n backendNodeId: liveNode.backendNodeId,\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<{ readonly nodeIds: readonly number[] }>(\n \"DOM.pushNodesByBackendIdsToFrontend\",\n {\n backendNodeIds: [backendNodeId],\n },\n );\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(locator);\n }\n return nodeId;\n } catch (error) {\n if (\n error instanceof Error &&\n /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n )\n ) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: locator.documentEpoch,\n nodeRef: locator.nodeRef,\n });\n }\n throw error;\n }\n}\n\nasync function callNodeFunctionForLocator(\n context: AbpDomActionBridgeContext,\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<{\n readonly result?: {\n readonly objectId?: string;\n readonly subtype?: string;\n };\n }>(\"Runtime.callFunctionOn\", {\n objectId: sourceObjectId,\n functionDeclaration: input.functionDeclaration,\n returnByValue: false,\n awaitPromise: true,\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<{\n readonly nodeId?: number;\n }>(\"DOM.requestNode\", { objectId: resultObjectId });\n if (requested.nodeId === undefined) {\n return undefined;\n }\n\n const described = await controller.cdp.send<{\n readonly node?: {\n readonly backendNodeId?: number;\n };\n }>(\"DOM.describeNode\", { nodeId: requested.nodeId });\n if (described.node?.backendNodeId === undefined) {\n return undefined;\n }\n\n return context.locateBackendNode(document, described.node.backendNodeId);\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n } finally {\n await releaseObject(controller, resultObjectId);\n await releaseObject(controller, sourceObjectId);\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\n const evaluated = await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n arguments: [{ objectId: argumentObjectId }, ...(input.arguments ?? [])],\n returnByValue: true,\n awaitPromise: true,\n });\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n } finally {\n await releaseObject(controller, argumentObjectId);\n await releaseObject(controller, objectId);\n }\n}\n\nasync function callNodeValueFunction(\n controller: PageController,\n document: DocumentState,\n locator: NodeLocator,\n backendNodeId: number,\n input: {\n readonly functionDeclaration: string;\n readonly arguments?: readonly { readonly value: unknown }[];\n },\n): Promise<unknown> {\n let objectId: string | undefined;\n\n try {\n objectId = await resolveNodeObjectId(controller, document, locator, backendNodeId);\n const evaluated = await controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: input.functionDeclaration,\n ...(input.arguments === undefined ? {} : { arguments: [...input.arguments] }),\n returnByValue: true,\n awaitPromise: true,\n });\n return evaluated.result?.value;\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n } finally {\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<{\n readonly object?: {\n readonly objectId?: string;\n };\n }>(\"DOM.resolveNode\", {\n backendNodeId,\n });\n const objectId = resolved.object?.objectId;\n if (objectId === undefined) {\n throw staleNodeRefError(locator);\n }\n return objectId;\n } catch (error) {\n rethrowNodeLookupError(document, locator, error);\n }\n}\n\nasync function withTemporaryExecutionResume<T>(\n context: AbpDomActionBridgeContext,\n controller: PageController,\n execute: () => Promise<T>,\n): Promise<T> {\n const wasPaused = await context.syncExecutionPaused(controller);\n if (wasPaused) {\n await context.setExecutionPaused(controller, false);\n }\n try {\n return await execute();\n } finally {\n if (wasPaused && controller.lifecycleState !== \"closed\") {\n try {\n await context.setExecutionPaused(controller, true);\n } catch (error) {\n if (!context.isPageClosedError(error)) {\n throw error;\n }\n }\n }\n }\n}\n\nfunction findNode(snapshot: DomSnapshot, locator: NodeLocator): DomSnapshotNode | undefined {\n return snapshot.nodes.find((node) => node.nodeRef === locator.nodeRef);\n}\n\nfunction disconnectedInspection(): DomActionTargetInspection {\n return {\n connected: false,\n visible: false,\n enabled: false,\n editable: false,\n pointerEvents: \"auto\",\n contentQuads: [],\n };\n}\n\nfunction hasAttribute(node: DomSnapshotNode, name: string): boolean {\n return node.attributes.some((attribute) => attribute.name === name);\n}\n\nfunction readAttributeValue(node: DomSnapshotNode, name: string): string | undefined {\n return node.attributes.find((attribute) => attribute.name === name)?.value;\n}\n\nfunction isEditableElement(node: DomSnapshotNode): boolean {\n const name = node.nodeName.toLowerCase();\n return (\n name === \"input\" ||\n name === \"textarea\" ||\n name === \"select\" ||\n readAttributeValue(node, \"contenteditable\") === \"\" ||\n readAttributeValue(node, \"contenteditable\") === \"true\"\n );\n}\n\nfunction readInlineStyleValue(style: string, property: string): string | undefined {\n for (const declaration of style.split(\";\")) {\n const separatorIndex = declaration.indexOf(\":\");\n if (separatorIndex === -1) {\n continue;\n }\n const name = declaration.slice(0, separatorIndex).trim().toLowerCase();\n if (name !== property) {\n continue;\n }\n const value = declaration.slice(separatorIndex + 1).trim();\n if (value.length > 0) {\n return value;\n }\n }\n return undefined;\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\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 `live DOM replay path builder returned an invalid result for ${locator.nodeRef}`,\n );\n }\n\n return value as ReplayElementPath;\n}\n\nfunction rethrowNodeLookupError(\n document: DocumentState,\n locator: NodeLocator,\n error: unknown,\n): never {\n if (\n error instanceof Error &&\n /No node with given id found|Could not find node with given id|Cannot find context/i.test(\n error.message,\n )\n ) {\n throw staleNodeRefError({\n documentRef: document.documentRef,\n documentEpoch: locator.documentEpoch,\n nodeRef: locator.nodeRef,\n });\n }\n throw error;\n}\n\nasync function readContentQuads(\n controller: PageController,\n nodeId: number,\n metrics: ViewportMetrics,\n): Promise<readonly Quad[]> {\n const result = await controller.cdp.send<{\n readonly quads: ReadonlyArray<readonly number[]>;\n }>(\"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\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 type { PageRef } from \"@opensteer/browser-core\";\n\nimport type { AbpCdpTargetInfo } from \"./types.js\";\n\nexport function shouldClaimBootstrapTab(\n bootstrapTabId: string | undefined,\n openerPageRef: PageRef | undefined,\n): bootstrapTabId is string {\n return bootstrapTabId !== undefined && openerPageRef === undefined;\n}\n\nexport function shouldParkPageAsBootstrap(input: {\n readonly launchOwned: boolean;\n readonly remainingLogicalPages: number;\n}): boolean {\n return input.launchOwned && input.remainingLogicalPages === 0;\n}\n\nexport function chooseNextActivePageRef(\n pageRefs: readonly PageRef[],\n preferredPageRef?: PageRef,\n): PageRef | undefined {\n if (preferredPageRef !== undefined && pageRefs.includes(preferredPageRef)) {\n return preferredPageRef;\n }\n return pageRefs[0];\n}\n\nexport function resolveTabOpeners(\n targets: readonly AbpCdpTargetInfo[],\n pageRefByTabId: ReadonlyMap<string, PageRef>,\n): ReadonlyMap<string, PageRef> {\n const openerByTabId = new Map<string, PageRef>();\n\n for (const target of targets) {\n if (target.openerId === undefined) {\n continue;\n }\n\n const openerPageRef = pageRefByTabId.get(target.openerId);\n if (openerPageRef !== undefined) {\n openerByTabId.set(target.targetId, openerPageRef);\n }\n }\n\n return openerByTabId;\n}\n","import {\n bodyPayloadFromUtf8,\n closedPageError,\n closedSessionError,\n createBodyPayload,\n createBrowserCoreError,\n createChooserRef,\n createDevicePixelRatio,\n createDialogRef,\n createDocumentEpoch,\n createNodeLocator,\n createDocumentRef,\n createDownloadRef,\n createFrameRef,\n createHeaderEntry,\n createNetworkRequestId,\n createNodeRef,\n createPageRef,\n createPageScaleFactor,\n createPageZoomFactor,\n createPoint,\n createScrollOffset,\n createSessionRef,\n createSize,\n filterCookieRecords,\n isBrowserCoreError,\n matchesNetworkRecordFilters,\n waitForCdpVisualStability,\n staleNodeRefError,\n unsupportedCapabilityError,\n type BrowserInitScriptInput,\n type BrowserInitScriptRegistration,\n type BrowserRouteRegistrationInput,\n type BrowserRouteRegistration,\n type GetNetworkRecordsInput,\n type ActionBoundarySnapshot,\n type BrowserCoreEngine,\n type BodyPayload,\n type CoordinateSpace,\n type CookieRecord,\n type DocumentEpoch,\n type DocumentRef,\n type DomSnapshot,\n type FrameInfo,\n type FrameRef,\n type HitTestResult,\n type HtmlSnapshot,\n type IndexedDbDatabaseSnapshot,\n type IndexedDbObjectStoreSnapshot,\n type KeyModifier,\n type MouseButton,\n type NetworkRecord,\n type NetworkResourceType,\n type NodeLocator,\n type NodeRef,\n type PageInfo,\n type PageRef,\n type Point,\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 StorageOriginSnapshot,\n type StorageSnapshot,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport {\n OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL,\n OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL,\n type ComputerUseBridge,\n type DomActionBridge,\n} from \"@opensteer/protocol\";\nimport { STATUS_CODES } from \"node:http\";\nimport type { ChildProcess } from \"node:child_process\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n\nimport {\n ABP_BROWSER_CORE_CAPABILITIES,\n normalizeAbpBaseUrl,\n normalizeRemoteDebuggingUrl,\n type AbpBrowserCoreEngineOptions,\n type AbpLaunchOptions,\n type AdoptedAbpBrowser,\n} from \"./options.js\";\nimport { derivePageWebSocketUrl, fetchBrowserWebSocketUrl } from \"./cdp-discovery.js\";\nimport {\n BROWSER_CDP_METHOD_ALLOWLIST,\n CdpClient,\n PAGE_CDP_METHOD_ALLOWLIST,\n} from \"./cdp-transport.js\";\nimport { toDocumentPoint, toViewportPoint } from \"./coordinate.js\";\nimport {\n buildDomSnapshot as buildDomSnapshotFromCapture,\n capturePageDomSnapshot,\n findCapturedDocument,\n findHtmlBackendNodeId,\n readTextContent,\n resolveCapturedContentDocumentRef,\n updateDocumentTreeSignature,\n} from \"./dom.js\";\nimport {\n AbpApiError,\n isActionTimeoutError,\n isPageClosedApiError,\n normalizeAbpError,\n rethrowNodeLookupError,\n} from \"./errors.js\";\nimport { allocatePort, launchAbpProcess } from \"./launcher.js\";\nimport { normalizeSelectChooserEventData } from \"./action-events.js\";\nimport {\n clampAbpActionSettleTimeout,\n createAbpActionSettler,\n DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n} from \"./action-settle.js\";\nimport {\n AbpRestClient,\n buildImmediateActionRequest,\n buildImmediateScreenshotRequest,\n buildInputActionRequest,\n} from \"./rest-client.js\";\nimport { createAbpComputerUseBridge } from \"./computer-use.js\";\nimport { createAbpDomActionBridge } from \"./dom-action-bridge.js\";\nimport { buildAbpScrollSegments } from \"./scroll.js\";\nimport {\n chooseNextActivePageRef,\n resolveTabOpeners,\n shouldClaimBootstrapTab,\n shouldParkPageAsBootstrap,\n} from \"./session-model.js\";\nimport { type DiscoveredTabEffects, resolveTabChangePageRef } from \"./tab-change.js\";\nimport type {\n AbpActionEvent,\n AbpActionResponse,\n AbpCdpCookie,\n AbpCdpTargetInfo,\n AbpDomStorageItemsResult,\n AbpIndexedDbDataResult,\n AbpIndexedDbDatabaseNamesResult,\n AbpIndexedDbDatabaseResult,\n AbpNetworkCall,\n AbpStorageKeyResult,\n AbpTab,\n CapturedDomSnapshot,\n DocumentState,\n FrameDescriptor,\n FrameState,\n FrameTreeNode,\n PageController,\n SessionState,\n} from \"./types.js\";\n\nexport type {\n AbpLaunchOptions,\n AdoptedAbpBrowser,\n AbpBrowserCoreEngineOptions,\n} from \"./options.js\";\n\ninterface MainFrameSnapshot {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly title: string;\n}\n\ninterface LocalStorageOriginState {\n readonly origin: string;\n readonly storageKey: string;\n}\n\ninterface SessionHttpScriptResponse {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: ReadonlyArray<readonly [string, string]>;\n readonly bodyBase64?: string;\n readonly redirected: boolean;\n}\n\ninterface SessionHttpScriptPendingResult {\n readonly state: \"pending\";\n}\n\ninterface SessionHttpScriptFulfilledResult {\n readonly state: \"fulfilled\";\n readonly response: SessionHttpScriptResponse;\n}\n\ninterface SessionHttpScriptRejectedResult {\n readonly state: \"rejected\";\n readonly error: {\n readonly name?: string;\n readonly message: string;\n };\n}\n\ntype SessionHttpScriptPollResult =\n | SessionHttpScriptPendingResult\n | SessionHttpScriptFulfilledResult\n | SessionHttpScriptRejectedResult;\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction combineFrameUrl(url: string, fragment?: string): string {\n return `${url}${fragment ?? \"\"}`;\n}\n\nfunction isAbpPageClosedError(error: unknown): boolean {\n return isPageClosedApiError(error) || (isBrowserCoreError(error) && error.code === \"page-closed\");\n}\n\nfunction buildSessionHttpStartScript(request: SessionTransportRequest): string {\n const serialized = JSON.stringify({\n url: request.url,\n method: request.method,\n headers: (request.headers ?? []).map((header) => [header.name, header.value]),\n bodyBase64:\n request.body === undefined ? undefined : Buffer.from(request.body.bytes).toString(\"base64\"),\n followRedirects: request.followRedirects !== false,\n timeoutMs: request.timeoutMs,\n });\n\n return `(() => {\n const input = ${serialized};\n const state = globalThis.__opensteerSessionHttp ?? (globalThis.__opensteerSessionHttp = {\n nextId: 0,\n requests: Object.create(null),\n });\n const requestId = String(++state.nextId);\n state.requests[requestId] = { state: \"pending\" };\n\n const decodeBase64 = (value) => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const binary = atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index += 1) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n };\n\n const encodeBase64 = (bytes) => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n const chunk = bytes.subarray(offset, offset + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n };\n\n const headers = new Headers();\n for (const [name, value] of input.headers) {\n headers.append(name, value);\n }\n\n const controller = new AbortController();\n const timeoutId =\n typeof input.timeoutMs === \"number\"\n ? setTimeout(\n () => controller.abort(new DOMException(\"session HTTP timed out\", \"AbortError\")),\n input.timeoutMs,\n )\n : undefined;\n\n void fetch(input.url, {\n method: input.method,\n headers,\n credentials: \"include\",\n redirect: input.followRedirects ? \"follow\" : \"manual\",\n signal: controller.signal,\n ...(input.bodyBase64 === undefined ? {} : { body: decodeBase64(input.bodyBase64) }),\n })\n .then(async (response) => {\n const body = new Uint8Array(await response.arrayBuffer());\n const responseHeaders = [];\n response.headers.forEach((value, name) => {\n responseHeaders.push([name, value]);\n });\n state.requests[requestId] = {\n state: \"fulfilled\",\n response: {\n url: response.url,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n bodyBase64: encodeBase64(body),\n redirected: response.redirected,\n },\n };\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n })\n .catch((error) => {\n state.requests[requestId] = {\n state: \"rejected\",\n error: {\n ...(error && typeof error.name === \"string\" ? { name: error.name } : {}),\n message:\n error && typeof error.message === \"string\"\n ? error.message\n : \"session HTTP request failed\",\n },\n };\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n });\n\n return requestId;\n })()`;\n}\n\nfunction buildSessionHttpPollScript(requestId: string): string {\n return `(() => {\n const requests = globalThis.__opensteerSessionHttp?.requests;\n const result = requests?.[${JSON.stringify(requestId)}];\n if (!result || result.state === \"pending\") {\n return { state: \"pending\" };\n }\n delete requests[${JSON.stringify(requestId)}];\n return result;\n })()`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction normalizeSessionHttpScriptResponse(value: unknown): SessionHttpScriptResponse {\n if (!isRecord(value)) {\n throw new Error(\"ABP session HTTP returned an invalid response payload\");\n }\n\n const { url, status, statusText, headers, bodyBase64, redirected } = value;\n if (\n typeof url !== \"string\" ||\n !Number.isInteger(status) ||\n typeof statusText !== \"string\" ||\n !Array.isArray(headers) ||\n typeof redirected !== \"boolean\" ||\n (bodyBase64 !== undefined && typeof bodyBase64 !== \"string\")\n ) {\n throw new Error(\"ABP session HTTP returned an invalid response payload\");\n }\n\n const normalizedHeaders = headers.map((entry) => {\n if (!Array.isArray(entry) || entry.length !== 2) {\n throw new Error(\"ABP session HTTP returned invalid response headers\");\n }\n const [name, headerValue] = entry;\n if (typeof name !== \"string\" || typeof headerValue !== \"string\") {\n throw new Error(\"ABP session HTTP returned invalid response headers\");\n }\n return [name, headerValue] as const;\n });\n const normalizedStatus = status as number;\n\n return {\n url,\n status: normalizedStatus,\n statusText,\n headers: normalizedHeaders,\n ...(bodyBase64 === undefined ? {} : { bodyBase64 }),\n redirected,\n };\n}\n\nfunction normalizeSessionHttpScriptPollResult(value: unknown): SessionHttpScriptPollResult {\n if (!isRecord(value) || typeof value.state !== \"string\") {\n throw new Error(\"ABP session HTTP returned an invalid execution state\");\n }\n\n switch (value.state) {\n case \"pending\":\n return { state: \"pending\" };\n case \"fulfilled\":\n if (!isRecord(value.response)) {\n throw new Error(\"ABP session HTTP returned an invalid completion state\");\n }\n return {\n state: \"fulfilled\",\n response: normalizeSessionHttpScriptResponse(value.response),\n };\n case \"rejected\":\n if (!isRecord(value.error) || typeof value.error.message !== \"string\") {\n throw new Error(\"ABP session HTTP returned an invalid failure state\");\n }\n return {\n state: \"rejected\",\n error: {\n ...(typeof value.error.name === \"string\" ? { name: value.error.name } : {}),\n message: value.error.message,\n },\n };\n default:\n throw new Error(\"ABP session HTTP returned an unknown execution state\");\n }\n}\n\nfunction headerValue(\n headers: readonly { readonly name: string; readonly value: string }[],\n name: string,\n): string | undefined {\n const lowered = name.toLowerCase();\n return headers.find((header) => header.name.toLowerCase() === lowered)?.value;\n}\n\nfunction parseMimeType(value: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (value === undefined) {\n return {};\n }\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\n return {\n ...(mimeType ? { mimeType } : {}),\n ...(charset ? { charset } : {}),\n };\n}\n\nfunction normalizeDialogType(\n value: string | undefined,\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\nfunction normalizeCookieSameSite(value: AbpCdpCookie[\"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\nfunction normalizeCookiePriority(value: AbpCdpCookie[\"priority\"]): CookieRecord[\"priority\"] {\n switch (value) {\n case \"Low\":\n return \"low\";\n case \"Medium\":\n return \"medium\";\n case \"High\":\n return \"high\";\n }\n}\n\nfunction toCdpCookieSameSite(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\nfunction toCdpCookiePriority(value: CookieRecord[\"priority\"]): \"Low\" | \"Medium\" | \"High\" {\n switch (value) {\n case \"low\":\n return \"Low\";\n case \"high\":\n return \"High\";\n case \"medium\":\n default:\n return \"Medium\";\n }\n}\n\nfunction normalizeResourceType(value: string | undefined): NetworkResourceType {\n switch ((value ?? \"\").toLowerCase()) {\n case \"document\":\n return \"document\";\n case \"stylesheet\":\n return \"stylesheet\";\n case \"image\":\n return \"image\";\n case \"media\":\n return \"media\";\n case \"font\":\n return \"font\";\n case \"script\":\n return \"script\";\n case \"fetch\":\n return \"fetch\";\n case \"xhr\":\n return \"xhr\";\n case \"websocket\":\n return \"websocket\";\n case \"manifest\":\n return \"manifest\";\n case \"texttrack\":\n return \"texttrack\";\n case \"beacon\":\n return \"beacon\";\n case \"ping\":\n return \"ping\";\n case \"preflight\":\n return \"preflight\";\n case \"eventsource\":\n return \"event-stream\";\n default:\n return \"other\";\n }\n}\n\nfunction parseHeaderJson(\n value: string | undefined,\n): readonly { readonly name: string; readonly value: string }[] {\n if (value === undefined || value.length === 0) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(value) as Record<string, unknown>;\n return Object.entries(parsed).flatMap(([name, headerValue]) =>\n typeof headerValue === \"string\" ? [createHeaderEntry(name, headerValue)] : [],\n );\n } catch {\n return [];\n }\n}\n\nfunction parseFrameDescriptor(value: unknown): FrameDescriptor | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const candidate = value as Record<string, unknown>;\n if (typeof candidate.id !== \"string\" || typeof candidate.url !== \"string\") {\n return undefined;\n }\n\n return {\n id: candidate.id,\n ...(typeof candidate.parentId === \"string\" ? { parentId: candidate.parentId } : {}),\n ...(typeof candidate.name === \"string\" && candidate.name.length > 0\n ? { name: candidate.name }\n : {}),\n url: candidate.url,\n ...(typeof candidate.urlFragment === \"string\" ? { urlFragment: candidate.urlFragment } : {}),\n };\n}\n\nfunction parseOrigin(value: string): string | undefined {\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nasync function waitForProcessExit(process: ChildProcess | undefined): Promise<void> {\n if (!process || process.exitCode !== null) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const onExit = () => resolve();\n process.once(\"exit\", onExit);\n const timer = setTimeout(() => {\n process.off(\"exit\", onExit);\n try {\n process.kill(\"SIGKILL\");\n } catch {}\n resolve();\n }, 5_000);\n process.once(\"exit\", () => clearTimeout(timer));\n });\n}\n\nexport class AbpBrowserCoreEngine implements BrowserCoreEngine {\n readonly capabilities = ABP_BROWSER_CORE_CAPABILITIES;\n\n private readonly launchOptions: AbpLaunchOptions | undefined;\n private readonly adoptedBrowser: AdoptedAbpBrowser | undefined;\n private readonly extraHTTPHeaders: readonly { readonly name: string; readonly value: string }[];\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 downloadRefsByAbpId = new Map<string, ReturnType<typeof createDownloadRef>>();\n private readonly actionSettler = createAbpActionSettler({\n syncExecutionPaused: (controller) => this.syncControllerExecutionPaused(controller),\n setExecutionPaused: (controller, paused) =>\n this.setControllerExecutionPaused(controller, paused),\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: () => true,\n throwBackgroundError: (controller) => this.throwBackgroundError(controller),\n isPageClosedError: isAbpPageClosedError,\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 computerUseBridge: ComputerUseBridge | undefined;\n private domActionBridge: DomActionBridge | undefined;\n private eventCounter = 0;\n private stepCounter = 0;\n private dialogCounter = 0;\n private chooserCounter = 0;\n private downloadCounter = 0;\n private disposed = false;\n\n private constructor(options: {\n readonly launchOptions?: AbpLaunchOptions;\n readonly adoptedBrowser?: AdoptedAbpBrowser;\n readonly extraHTTPHeaders: readonly { readonly name: string; readonly value: string }[];\n }) {\n this.launchOptions = options.launchOptions;\n this.adoptedBrowser = options.adoptedBrowser;\n this.extraHTTPHeaders = options.extraHTTPHeaders;\n }\n\n static async create(options: AbpBrowserCoreEngineOptions = {}): Promise<AbpBrowserCoreEngine> {\n if (options.browser && options.launch) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either launch or browser options, not both\",\n );\n }\n if (options.launch?.abpExecutablePath && options.launch.browserExecutablePath) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either an ABP wrapper executable path or a browser executable path, not both\",\n );\n }\n\n const adoptedBrowser = options.browser\n ? {\n baseUrl: normalizeAbpBaseUrl(options.browser.baseUrl),\n remoteDebuggingUrl: normalizeRemoteDebuggingUrl(options.browser.remoteDebuggingUrl),\n }\n : undefined;\n\n if (adoptedBrowser) {\n await fetchBrowserWebSocketUrl(adoptedBrowser.remoteDebuggingUrl);\n }\n\n return new AbpBrowserCoreEngine({\n ...(options.browser ? {} : { launchOptions: options.launch }),\n ...(adoptedBrowser === undefined ? {} : { adoptedBrowser }),\n extraHTTPHeaders: options.extraHTTPHeaders ?? [],\n });\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\n async [Symbol.asyncDispose](): Promise<void> {\n await this.dispose();\n }\n\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge {\n this.computerUseBridge ??= createAbpComputerUseBridge({\n resolveController: (pageRef) => this.requirePage(pageRef),\n resolveSession: (sessionRef) => this.requireSession(sessionRef),\n normalizeActionEvents: (controller, response) =>\n this.normalizeActionEvents(controller, response),\n detectNewTabs: (session, openerController) => this.detectNewTabs(session, openerController),\n executeInputAction: (session, controller, execute) =>\n this.executeInputAction(session, controller, execute),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({ controller, ...options }),\n requireMainFrame: (controller) => this.requireMainFrame(controller),\n drainQueuedEvents: (pageRef) => this.drainQueuedEvents(pageRef),\n });\n return this.computerUseBridge;\n }\n\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge {\n this.domActionBridge ??= createAbpDomActionBridge({\n resolveController: (pageRef: PageRef) => this.requirePage(pageRef),\n resolveSession: (sessionRef: SessionRef) => this.requireSession(sessionRef),\n flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),\n settleActionBoundary: (controller, options) =>\n this.actionSettler.settle({ controller, ...options }),\n syncExecutionPaused: (controller) => this.syncControllerExecutionPaused(controller),\n setExecutionPaused: (controller, paused) =>\n this.setControllerExecutionPaused(controller, paused),\n isPageClosedError: isAbpPageClosedError,\n locateBackendNode: (document, backendNodeId) =>\n createNodeLocator(\n document.documentRef,\n document.documentEpoch,\n this.nodeRefForBackendNode(document, backendNodeId),\n ),\n requireLiveNode: (locator) => this.requireLiveNode(locator),\n getDomSnapshot: (documentRef: DocumentRef) => this.getDomSnapshot({ documentRef }),\n getViewportMetrics: (pageRef: PageRef) => this.getViewportMetrics({ pageRef }),\n });\n return this.domActionBridge;\n }\n\n async createSession(): Promise<SessionRef> {\n this.assertNotDisposed();\n\n if (this.adoptedBrowser) {\n if (this.sessions.size > 0) {\n throw createBrowserCoreError(\n \"operation-failed\",\n \"adopted ABP engines expose exactly one session\",\n );\n }\n return this.createAdoptedSession();\n }\n\n return this.createLaunchSession();\n }\n\n async closeSession(input: { readonly sessionRef: SessionRef }): Promise<void> {\n const session = this.requireSession(input.sessionRef);\n session.closed = true;\n\n for (const controller of session.controllersByPageRef.values()) {\n controller.explicitCloseInFlight = true;\n }\n\n for (const controller of Array.from(session.controllersByPageRef.values())) {\n await controller.cdp.close().catch(() => undefined);\n this.cleanupPageController(controller);\n }\n\n await session.browserCdp.close().catch(() => undefined);\n\n if (session.closeBrowserOnDispose) {\n await session.rest.shutdownBrowser().catch(() => undefined);\n await waitForProcessExit(session.process);\n }\n\n this.sessions.delete(session.sessionRef);\n\n if (session.ownedUserDataDir && session.userDataDir) {\n await rm(session.userDataDir, { recursive: true, force: true }).catch(() => undefined);\n }\n if (session.ownedSessionDir && session.sessionDir) {\n await rm(session.sessionDir, { recursive: true, force: true }).catch(() => undefined);\n }\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\n let tabId: string;\n if (shouldClaimBootstrapTab(session.bootstrapTabId, input.openerPageRef)) {\n tabId = session.bootstrapTabId;\n session.bootstrapTabId = undefined;\n } else {\n const created = await session.rest.createTab();\n tabId = created.id;\n }\n\n const controller = await this.initializePageController(session, tabId, {\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n });\n session.activePageRef = controller.pageRef;\n\n const directEvents: StepEvent[] = [\n this.createEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n }),\n ];\n\n if (input.openerPageRef !== undefined) {\n directEvents.push(\n this.createEvent({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n openerPageRef: input.openerPageRef,\n }),\n );\n }\n\n if (input.url) {\n const before = await this.captureMainFrameSnapshot(controller);\n let response: AbpActionResponse;\n try {\n response = await session.rest.navigateTab(controller.tabId, {\n url: input.url,\n ...buildImmediateActionRequest(),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: 30_000,\n requireDocumentChange: false,\n observeTitle: false,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const normalizedEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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: [...directEvents, ...normalizedEvents],\n data: await this.buildPageInfo(controller),\n });\n }\n\n await this.waitForMainFrame(controller, 10_000);\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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: directEvents,\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n\n controller.explicitCloseInFlight = true;\n\n const remainingLogicalPages = session.pageRefs.size - 1;\n if (\n shouldParkPageAsBootstrap({\n launchOwned: session.closeBrowserOnDispose,\n remainingLogicalPages,\n })\n ) {\n try {\n await session.rest.navigateTab(controller.tabId, {\n url: \"chrome://newtab/\",\n ...buildImmediateActionRequest({\n captureNetwork: false,\n }),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n session.bootstrapTabId = controller.tabId;\n } else {\n try {\n await session.rest.closeTab(controller.tabId);\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n await controller.cdp.close().catch(() => undefined);\n this.cleanupPageController(controller);\n session.activePageRef = chooseNextActivePageRef(Array.from(session.pageRefs));\n\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: [\n this.createEvent({\n kind: \"page-closed\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n ],\n data: undefined,\n });\n }\n\n async activatePage(input: { readonly pageRef: PageRef }): Promise<StepResult<PageInfo>> {\n const controller = this.requirePage(input.pageRef);\n const session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n try {\n await session.rest.activateTab(controller.tabId);\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n session.activePageRef = controller.pageRef;\n await this.flushDomUpdateTask(controller);\n const mainFrame = this.requireMainFrame(controller);\n\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 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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.navigateTab(controller.tabId, {\n url: input.url,\n ...(input.referrer === undefined ? {} : { referrer: input.referrer }),\n ...buildImmediateActionRequest(),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: input.timeoutMs ?? 30_000,\n requireDocumentChange: false,\n observeTitle: false,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: clampAbpActionSettleTimeout(input.timeoutMs),\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.reloadTab(controller.tabId, buildImmediateActionRequest());\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: input.timeoutMs ?? 30_000,\n requireDocumentChange: true,\n observeTitle: false,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: clampAbpActionSettleTimeout(input.timeoutMs),\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.goBack(controller.tabId, buildImmediateActionRequest());\n } catch (error) {\n if (this.isHistoryBoundaryError(error, \"back\")) {\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: false,\n });\n }\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: 5_000,\n requireDocumentChange: false,\n observeTitle: true,\n allowFallback: true,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\n data: true,\n });\n }\n\n async goForward(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n const controller = this.requirePage(input.pageRef);\n const session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const before = await this.captureMainFrameSnapshot(controller);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.goForward(controller.tabId, buildImmediateActionRequest());\n } catch (error) {\n if (this.isHistoryBoundaryError(error, \"forward\")) {\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: false,\n });\n }\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n await this.waitForNavigationObservation(controller, before, {\n timeoutMs: 5_000,\n requireDocumentChange: false,\n observeTitle: true,\n allowFallback: true,\n });\n await this.actionSettler.settle({\n controller,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n\n const directEvents = await this.normalizeActionEvents(controller, response);\n const mainFrame = this.requireMainFrame(controller);\n this.storeDocumentNavigationRecord(session, controller, mainFrame);\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), ...directEvents],\n data: true,\n });\n }\n\n async stopLoading(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n const controller = this.requirePage(input.pageRef);\n const session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n try {\n await session.rest.stopTab(controller.tabId);\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\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: 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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.moveTab(controller.tabId, {\n x: point.x,\n y: point.y,\n ...buildImmediateActionRequest(),\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\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: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.normalizeActionEvents(controller, response)),\n ],\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 session = this.requireSession(controller.sessionRef);\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\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.clickTab(controller.tabId, {\n x: point.x,\n y: point.y,\n ...(input.button === undefined ? {} : { button: input.button }),\n ...(input.clickCount === undefined ? {} : { click_count: input.clickCount }),\n ...(input.modifiers === undefined ? {} : { modifiers: [...input.modifiers] }),\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const metrics = await this.getViewportMetrics({ pageRef: input.pageRef });\n const point = toViewportPoint(metrics, input.point, input.coordinateSpace);\n\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.scrollTab(controller.tabId, {\n x: point.x,\n y: point.y,\n scrolls: buildAbpScrollSegments(input.delta),\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.keyPressTab(controller.tabId, {\n key: input.key,\n ...(input.modifiers === undefined ? {} : { modifiers: [...input.modifiers] }),\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n const { response, dialogEvents } = await this.executeInputAction(session, controller, () =>\n session.rest.typeTab(controller.tabId, {\n text: input.text,\n ...buildInputActionRequest(),\n }),\n );\n\n const actionEvents = await this.normalizeActionEvents(controller, response);\n const discoveredTabs = await this.detectNewTabs(session, controller);\n this.applyActionTabChange(session, controller.pageRef, response, actionEvents, discoveredTabs);\n const resultController = this.requirePage(session.activePageRef ?? controller.pageRef);\n await this.actionSettler.settle({\n controller: resultController,\n timeoutMs: DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS,\n });\n const mainFrame = this.requireMainFrame(resultController);\n return this.createStepResult(session.sessionRef, resultController.pageRef, startedAt, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n events: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(resultController.pageRef === controller.pageRef\n ? []\n : this.drainQueuedEvents(resultController.pageRef)),\n ...actionEvents,\n ...discoveredTabs.events,\n ...dialogEvents,\n ],\n data: undefined,\n });\n }\n\n async captureScreenshot(input: {\n readonly pageRef: PageRef;\n readonly format?: ScreenshotFormat;\n readonly clip?: import(\"@opensteer/browser-core\").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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n if (input.clip) {\n throw unsupportedCapabilityError(\"executor.screenshots\");\n }\n if (input.fullPage) {\n throw unsupportedCapabilityError(\"executor.screenshots\");\n }\n\n let response: AbpActionResponse;\n try {\n response = await session.rest.screenshotTab(\n controller.tabId,\n buildImmediateScreenshotRequest({\n ...(input.includeCursor === undefined ? {} : { cursor: input.includeCursor }),\n ...(input.format === undefined ? {} : { format: input.format }),\n }),\n );\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n const screenshot = response.screenshot_after;\n if (!screenshot) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `ABP screenshot response for ${controller.pageRef} did not include image data`,\n );\n }\n\n const format = (screenshot.format as ScreenshotFormat | undefined) ?? input.format ?? \"png\";\n const payload = createBodyPayload(new Uint8Array(Buffer.from(screenshot.data, \"base64\")), {\n mimeType: `image/${format}`,\n });\n\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: [\n ...this.drainQueuedEvents(controller.pageRef),\n ...(await this.normalizeActionEvents(controller, response)),\n ],\n data: {\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n payload,\n format,\n size: createSize(screenshot.width, screenshot.height),\n coordinateSpace: \"layout-viewport-css\",\n },\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n\n if (input.paused !== undefined && input.frozen !== undefined && input.paused !== input.frozen) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"ABP pause and freeze controls are the same underlying state\",\n );\n }\n\n const beforePaused = controller.executionPaused;\n const requestedPaused = input.paused ?? input.frozen;\n const state =\n requestedPaused === undefined\n ? await session.rest.getExecutionState(controller.tabId)\n : await session.rest\n .setExecutionState(controller.tabId, { paused: requestedPaused })\n .catch((error) => {\n throw normalizeAbpError(error, controller.pageRef);\n });\n\n const afterPaused = state.paused;\n controller.executionPaused = afterPaused;\n const mainFrame = this.requireMainFrame(controller);\n const events: StepEvent[] = [];\n\n if (!beforePaused && afterPaused) {\n events.push(\n this.createEvent({\n kind: \"paused\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n );\n events.push(\n this.createEvent({\n kind: \"frozen\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n );\n }\n\n if (beforePaused && !afterPaused) {\n events.push(\n this.createEvent({\n kind: \"resumed\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n }),\n );\n }\n\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,\n data: {\n paused: afterPaused,\n frozen: afterPaused,\n },\n });\n }\n\n async listPages(input: { readonly sessionRef: SessionRef }): Promise<readonly PageInfo[]> {\n const session = this.requireSession(input.sessionRef);\n return Promise.all(\n Array.from(session.pageRefs, async (pageRef) =>\n this.buildPageInfo(this.requirePage(pageRef)),\n ),\n );\n }\n\n async drainEvents(input: { readonly pageRef: PageRef }): Promise<readonly StepEvent[]> {\n return this.drainQueuedEvents(input.pageRef);\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 response = await controller.cdp.send<{ readonly outerHTML: string }>(\"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: response.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 (liveDocument, backendNodeId) => this.nodeRefForBackendNode(liveDocument, backendNodeId),\n (contentDocumentIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocumentIndex),\n );\n }\n\n async getActionBoundarySnapshot(input: {\n readonly pageRef: PageRef;\n }): Promise<ActionBoundarySnapshot> {\n const controller = this.requirePage(input.pageRef);\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.flushDomUpdateTask(controller);\n await this.actionSettler.waitForPostLoadQuiet({\n controller,\n timeoutMs: clampAbpActionSettleTimeout(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 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 (resolvedDocument, backendNodeId) =>\n this.nodeRefForBackendNode(resolvedDocument, backendNodeId),\n (contentDocumentIndex) =>\n resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocumentIndex),\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\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send<{ readonly nodeIds: readonly number[] }>(\n \"DOM.pushNodesByBackendIdsToFrontend\",\n {\n backendNodeIds: [backendNodeId],\n },\n );\n const nodeId = frontend.nodeIds[0];\n if (nodeId === undefined) {\n throw staleNodeRefError(input);\n }\n const attributesResult = await controller.cdp.send<{\n readonly attributes: readonly string[];\n }>(\"DOM.getAttributes\", { nodeId });\n const attributes: { name: string; value: string }[] = [];\n for (let index = 0; index < attributesResult.attributes.length; index += 2) {\n const name = attributesResult.attributes[index];\n const value = attributesResult.attributes[index + 1];\n if (name !== undefined && value !== undefined) {\n attributes.push({ name, value });\n }\n }\n return attributes;\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 raw = await controller.cdp.send<{\n readonly backendNodeId: number;\n readonly frameId: string;\n }>(\"DOM.getNodeForLocation\", {\n x: Math.round(viewportPoint.x),\n y: Math.round(viewportPoint.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\n if (frame.isMainFrame) {\n try {\n await controller.cdp.send(\"DOM.getDocument\", { depth: 0 });\n const frontend = await controller.cdp.send<{ readonly nodeIds: readonly number[] }>(\n \"DOM.pushNodesByBackendIdsToFrontend\",\n {\n backendNodeIds: [raw.backendNodeId],\n },\n );\n const nodeId = frontend.nodeIds[0];\n if (nodeId !== undefined) {\n const quads = await controller.cdp.send<{\n readonly quads: ReadonlyArray<readonly number[]>;\n }>(\"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 const layout = await controller.cdp.send<{\n readonly cssLayoutViewport: {\n readonly pageX: number;\n readonly pageY: number;\n readonly clientWidth: number;\n readonly clientHeight: number;\n };\n readonly cssVisualViewport: {\n readonly pageX: number;\n readonly pageY: number;\n readonly offsetX: number;\n readonly offsetY: number;\n readonly clientWidth: number;\n readonly clientHeight: number;\n readonly scale: number;\n readonly zoom?: number;\n };\n readonly cssContentSize: {\n readonly width: number;\n readonly height: number;\n };\n }>(\"Page.getLayoutMetrics\");\n\n let baseDevicePixelRatio = 1;\n try {\n const screens = await controller.cdp.send<{\n readonly screenInfos: ReadonlyArray<{\n readonly isPrimary?: boolean;\n readonly devicePixelRatio?: number;\n }>;\n }>(\"Emulation.getScreenInfos\");\n const primary =\n screens.screenInfos.find((screen) => screen.isPrimary) ?? screens.screenInfos[0];\n baseDevicePixelRatio = primary?.devicePixelRatio ?? 1;\n } catch {\n baseDevicePixelRatio = 1;\n }\n\n const pageZoomFactor = layout.cssVisualViewport.zoom ?? 1;\n return {\n layoutViewport: {\n origin: createPoint(layout.cssLayoutViewport.pageX, layout.cssLayoutViewport.pageY),\n size: createSize(\n layout.cssLayoutViewport.clientWidth,\n layout.cssLayoutViewport.clientHeight,\n ),\n },\n visualViewport: {\n origin: createPoint(layout.cssVisualViewport.pageX, layout.cssVisualViewport.pageY),\n offsetWithinLayoutViewport: createScrollOffset(\n layout.cssVisualViewport.offsetX,\n layout.cssVisualViewport.offsetY,\n ),\n size: createSize(\n layout.cssVisualViewport.clientWidth,\n layout.cssVisualViewport.clientHeight,\n ),\n },\n scrollOffset: createScrollOffset(\n layout.cssVisualViewport.pageX,\n layout.cssVisualViewport.pageY,\n ),\n contentSize: createSize(layout.cssContentSize.width, layout.cssContentSize.height),\n devicePixelRatio: createDevicePixelRatio(baseDevicePixelRatio * pageZoomFactor),\n pageScaleFactor: createPageScaleFactor(layout.cssVisualViewport.scale),\n pageZoomFactor: createPageZoomFactor(pageZoomFactor),\n };\n }\n\n async getNetworkRecords(input: GetNetworkRecordsInput): Promise<readonly NetworkRecord[]> {\n const session = this.requireSession(input.sessionRef);\n const includeBodies = input.includeBodies ?? false;\n const requestIds =\n input.requestIds === undefined\n ? undefined\n : new Set<NetworkRecord[\"requestId\"]>(\n input.requestIds as readonly NetworkRecord[\"requestId\"][],\n );\n input.signal?.throwIfAborted?.();\n\n if (input.pageRef) {\n const controller = this.requirePage(input.pageRef);\n if (controller.sessionRef !== session.sessionRef) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n `page ${input.pageRef} does not belong to session ${input.sessionRef}`,\n );\n }\n return this.readNetworkRecordsForPage(session, controller.pageRef, {\n includeBodies,\n ...(requestIds === undefined ? {} : { requestIds }),\n filters: input,\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n }\n\n const records = await Promise.all(\n Array.from(session.pageRefs, async (pageRef) => {\n return this.readNetworkRecordsForPage(session, pageRef, {\n includeBodies,\n ...(requestIds === undefined ? {} : { requestIds }),\n filters: input,\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n }),\n );\n return records.flat();\n }\n\n private async readNetworkRecordsForPage(\n session: SessionState,\n pageRef: PageRef,\n input: {\n readonly includeBodies: boolean;\n readonly requestIds?: ReadonlySet<NetworkRecord[\"requestId\"]>;\n readonly filters: GetNetworkRecordsInput;\n readonly signal?: AbortSignal;\n },\n ): Promise<readonly NetworkRecord[]> {\n const controller = this.requirePage(pageRef);\n const filterInput = {\n ...(input.filters.url === undefined ? {} : { url: input.filters.url }),\n ...(input.filters.hostname === undefined ? {} : { hostname: input.filters.hostname }),\n ...(input.filters.path === undefined ? {} : { path: input.filters.path }),\n ...(input.filters.method === undefined ? {} : { method: input.filters.method }),\n ...(input.filters.status === undefined ? {} : { status: input.filters.status }),\n ...(input.filters.resourceType === undefined\n ? {}\n : { resourceType: input.filters.resourceType }),\n };\n const metadataCalls = await raceWithAbort(\n session.rest.queryNetwork({\n tabId: controller.tabId,\n includeBodies: false,\n }),\n input.signal,\n );\n const metadataSnapshotRecords = metadataCalls.map((call) =>\n this.normalizeNetworkRecord(session, pageRef, call, false),\n );\n this.storeNetworkRecords(session, metadataSnapshotRecords);\n const metadataRecords = this.readLocalNetworkRecords(session, pageRef, input.includeBodies, {\n filters: filterInput,\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n });\n if (!input.includeBodies) {\n return metadataRecords;\n }\n\n let bodyCalls: readonly AbpNetworkCall[];\n try {\n bodyCalls = await raceWithAbort(\n session.rest.queryNetwork({\n tabId: controller.tabId,\n includeBodies: true,\n }),\n input.signal,\n );\n } catch (error) {\n if (input.signal?.aborted) {\n throw error;\n }\n const failedRecords = metadataRecords.map((record) =>\n this.markNetworkRecordBodyFailure(record, error),\n );\n this.storeNetworkRecords(session, failedRecords);\n return this.readLocalNetworkRecords(session, pageRef, true, {\n filters: filterInput,\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n });\n }\n\n const bodySnapshotRecords = bodyCalls.map((call) =>\n this.normalizeNetworkRecord(session, pageRef, call, true),\n );\n this.storeNetworkRecords(session, bodySnapshotRecords);\n return this.readLocalNetworkRecords(session, pageRef, true, {\n filters: filterInput,\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n });\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 result = await session.browserCdp.send<{ readonly cookies: readonly AbpCdpCookie[] }>(\n \"Storage.getCookies\",\n );\n const cookies = result.cookies.map((cookie) => {\n const sameSite = normalizeCookieSameSite(cookie.sameSite);\n const priority = normalizeCookiePriority(cookie.priority);\n return {\n sessionRef: session.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 ...(priority === undefined ? {} : { priority }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n session: cookie.expires === undefined || cookie.expires < 0,\n ...(cookie.expires === undefined || cookie.expires < 0\n ? { expiresAt: null }\n : { expiresAt: cookie.expires * 1000 }),\n } satisfies CookieRecord;\n });\n\n return input.urls ? filterCookieRecords(cookies, [...input.urls]) : cookies;\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.browserCdp.send(\"Storage.setCookies\", {\n cookies: 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: toCdpCookieSameSite(cookie.sameSite) }),\n ...(cookie.priority === undefined\n ? {}\n : { priority: toCdpCookiePriority(cookie.priority) }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n ...(cookie.session || cookie.expiresAt === undefined || cookie.expiresAt === null\n ? {}\n : { expires: 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 origins = new Map<string, LocalStorageOriginState>();\n\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 const origin = parseOrigin(frame.currentDocument.url);\n if (origin === undefined) {\n continue;\n }\n if (origin === \"null\" || origins.has(origin)) {\n continue;\n }\n try {\n const storageKey = await controller.cdp.send<AbpStorageKeyResult>(\n \"Storage.getStorageKey\",\n {\n frameId: frame.cdpFrameId,\n },\n );\n origins.set(origin, {\n origin,\n storageKey: storageKey.storageKey,\n });\n } catch {}\n }\n }\n\n const normalizedOrigins: StorageOriginSnapshot[] = [];\n for (const { origin, storageKey } of origins.values()) {\n const localStorage = await this.readStorageEntriesForOrigin(session, storageKey, true);\n const indexedDb = includeIndexedDb\n ? await this.readIndexedDbSnapshotForOrigin(session, origin, storageKey)\n : undefined;\n normalizedOrigins.push({\n origin,\n localStorage,\n ...(indexedDb === undefined ? {} : { indexedDb }),\n });\n }\n\n const sessionStorage = includeSessionStorage\n ? await this.collectSessionStorageSnapshots(session)\n : undefined;\n\n return {\n sessionRef: session.sessionRef,\n capturedAt: Date.now(),\n origins: normalizedOrigins,\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 session = this.requireSession(controller.sessionRef);\n const startedAt = Date.now();\n const mainFrame = this.requireMainFrame(controller);\n const serialized = JSON.stringify({\n script: input.script,\n args: input.args ?? [],\n });\n\n try {\n const result = await withTimeout(\n session.rest.executeScript<unknown>(\n controller.tabId,\n `(() => {\n const input = ${serialized};\n const evaluated = (0, eval)(input.script);\n if (typeof evaluated === \"function\") {\n return evaluated(...(input.args ?? []));\n }\n return evaluated;\n })()`,\n {\n wait_until: {\n type: \"immediate\",\n },\n screenshot: {\n area: \"none\",\n },\n },\n ),\n input.timeoutMs,\n );\n\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: result,\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n async evaluateFrame(input: {\n readonly frameRef: FrameRef;\n readonly script: string;\n readonly args?: readonly unknown[];\n readonly timeoutMs?: number;\n }): Promise<StepResult<unknown>> {\n const frame = this.requireFrame(input.frameRef);\n const controller = this.requirePage(frame.pageRef);\n const startedAt = Date.now();\n\n try {\n const executionContextId = await withTimeout(\n this.ensureFrameExecutionContext(controller, frame.cdpFrameId),\n input.timeoutMs,\n );\n const serialized = JSON.stringify({\n script: input.script,\n args: input.args ?? [],\n });\n const evaluated = await withTimeout(\n controller.cdp.send<{\n readonly result?: {\n readonly value?: unknown;\n };\n }>(\"Runtime.evaluate\", {\n contextId: executionContextId,\n expression: `(() => {\n const input = ${serialized};\n const evaluated = (0, eval)(input.script);\n if (typeof evaluated === \"function\") {\n return evaluated(...(input.args ?? []));\n }\n return evaluated;\n })()`,\n returnByValue: true,\n awaitPromise: true,\n }),\n input.timeoutMs,\n );\n\n return this.createStepResult(controller.sessionRef, controller.pageRef, startedAt, {\n frameRef: frame.frameRef,\n documentRef: frame.currentDocument.documentRef,\n documentEpoch: frame.currentDocument.documentEpoch,\n events: this.drainQueuedEvents(controller.pageRef),\n data: evaluated.result?.value,\n });\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n async addInitScript(_input: BrowserInitScriptInput): Promise<BrowserInitScriptRegistration> {\n throw unsupportedCapabilityError(\"instrumentation.initScripts\");\n }\n\n async registerRoute(_input: BrowserRouteRegistrationInput): Promise<BrowserRouteRegistration> {\n throw unsupportedCapabilityError(\"instrumentation.routing\");\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 activePageRef = session.activePageRef;\n if (!activePageRef) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `session ${input.sessionRef} has no active page for session HTTP`,\n );\n }\n\n const controller = this.requirePage(activePageRef);\n const startedAt = Date.now();\n input.signal?.throwIfAborted?.();\n const requestId = await raceWithAbort(\n session.rest.executeScript<string>(\n controller.tabId,\n buildSessionHttpStartScript(input.request),\n {\n wait_until: {\n type: \"immediate\",\n },\n screenshot: {\n area: \"none\",\n },\n },\n ),\n input.signal,\n );\n\n let response: SessionHttpScriptResponse;\n try {\n response = await raceWithAbort(\n this.awaitSessionHttpResponse(session, controller, requestId, input.request.timeoutMs),\n input.signal,\n );\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n\n const responseHeaders = response.headers.map(([name, value]) => createHeaderEntry(name, value));\n const contentType = headerValue(responseHeaders, \"content-type\");\n const payload =\n response.bodyBase64 === undefined\n ? undefined\n : createBodyPayload(new Uint8Array(Buffer.from(response.bodyBase64, \"base64\")), {\n encoding: \"base64\",\n ...parseMimeType(contentType),\n });\n\n const mainFrame = this.requireMainFrame(controller);\n this.storeNetworkRecords(session, [\n this.createSessionHttpNetworkRecord(session, controller, mainFrame, input.request, response, {\n responseHeaders,\n ...(payload === undefined ? {} : { responseBody: payload }),\n }),\n ]);\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: {\n url: response.url,\n status: response.status,\n statusText: response.statusText || STATUS_CODES[response.status] || \"\",\n headers: responseHeaders,\n ...(payload === undefined ? {} : { body: payload }),\n redirected: response.redirected,\n },\n });\n }\n\n private async awaitSessionHttpResponse(\n session: SessionState,\n controller: PageController,\n requestId: string,\n timeoutMs: number | undefined,\n ): Promise<SessionHttpScriptResponse> {\n const startedAt = Date.now();\n const maxWaitMs =\n timeoutMs === undefined ? 30_000 : Math.max(Math.ceil(timeoutMs) + 1_000, 30_000);\n\n while (Date.now() - startedAt < maxWaitMs) {\n const result = normalizeSessionHttpScriptPollResult(\n await session.rest.executeScript<unknown>(\n controller.tabId,\n buildSessionHttpPollScript(requestId),\n {\n wait_until: {\n type: \"immediate\",\n },\n screenshot: {\n area: \"none\",\n },\n },\n ),\n );\n\n if (result.state === \"pending\") {\n await delay(25);\n continue;\n }\n\n if (result.state === \"rejected\") {\n throw createBrowserCoreError(\n result.error.name === \"AbortError\" ? \"timeout\" : \"operation-failed\",\n result.error.message,\n );\n }\n\n return result.response;\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `session ${session.sessionRef} did not finish a session HTTP request within ${String(maxWaitMs)}ms`,\n );\n }\n\n private async createLaunchSession(): Promise<SessionRef> {\n const sessionRef = createSessionRef(`abp-${++this.sessionCounter}`);\n const userDataDir =\n this.launchOptions?.userDataDir ??\n (await mkdtemp(join(tmpdir(), \"opensteer-abp-user-data-\")));\n const sessionDir =\n this.launchOptions?.sessionDir ?? (await mkdtemp(join(tmpdir(), \"opensteer-abp-session-\")));\n const restPort = await allocatePort();\n const launchArgs = [...(this.launchOptions?.args ?? [])];\n if (!launchArgs.some((arg) => arg.startsWith(\"--remote-debugging-port\"))) {\n launchArgs.push(\"--remote-debugging-port=0\");\n }\n\n const launched = await launchAbpProcess({\n port: restPort,\n userDataDir,\n sessionDir,\n ...(this.launchOptions?.abpExecutablePath === undefined\n ? {}\n : { abpExecutablePath: this.launchOptions.abpExecutablePath }),\n ...(this.launchOptions?.browserExecutablePath === undefined\n ? {}\n : { browserExecutablePath: this.launchOptions.browserExecutablePath }),\n headless: this.launchOptions?.headless ?? true,\n args: launchArgs,\n verbose: this.launchOptions?.verbose ?? false,\n });\n\n try {\n const browserWebSocketUrl = await fetchBrowserWebSocketUrl(launched.remoteDebuggingUrl);\n const browserCdp = await CdpClient.connect({\n url: browserWebSocketUrl,\n allowedMethods: BROWSER_CDP_METHOD_ALLOWLIST,\n });\n const session: SessionState = {\n sessionRef,\n mode: \"launch\",\n baseUrl: launched.baseUrl,\n remoteDebuggingUrl: launched.remoteDebuggingUrl,\n browserWebSocketUrl,\n closeBrowserOnDispose: true,\n rest: new AbpRestClient(launched.baseUrl, this.extraHTTPHeaders),\n browserCdp,\n pageRefs: new Set(),\n controllersByPageRef: new Map(),\n pageRefByTabId: new Map(),\n networkRecordsByRequestId: new Map(),\n userDataDir,\n sessionDir,\n ownedUserDataDir: this.launchOptions?.userDataDir === undefined,\n ownedSessionDir: this.launchOptions?.sessionDir === undefined,\n process: launched.process,\n bootstrapTabId: undefined,\n activePageRef: undefined,\n closed: false,\n };\n this.sessions.set(sessionRef, session);\n\n const tabs = await session.rest.listTabs();\n if (tabs.length > 0) {\n session.bootstrapTabId = tabs[0]?.id;\n }\n return sessionRef;\n } catch (error) {\n launched.process.kill(\"SIGKILL\");\n await waitForProcessExit(launched.process);\n if (this.launchOptions?.userDataDir === undefined) {\n await rm(userDataDir, { recursive: true, force: true }).catch(() => undefined);\n }\n if (this.launchOptions?.sessionDir === undefined) {\n await rm(sessionDir, { recursive: true, force: true }).catch(() => undefined);\n }\n throw error;\n }\n }\n\n private async createAdoptedSession(): Promise<SessionRef> {\n if (!this.adoptedBrowser) {\n throw createBrowserCoreError(\n \"operation-failed\",\n \"adopted browser options are not configured\",\n );\n }\n\n const sessionRef = createSessionRef(`abp-${++this.sessionCounter}`);\n const browserWebSocketUrl = await fetchBrowserWebSocketUrl(\n this.adoptedBrowser.remoteDebuggingUrl,\n );\n const browserCdp = await CdpClient.connect({\n url: browserWebSocketUrl,\n allowedMethods: BROWSER_CDP_METHOD_ALLOWLIST,\n });\n const session: SessionState = {\n sessionRef,\n mode: \"browser\",\n baseUrl: this.adoptedBrowser.baseUrl,\n remoteDebuggingUrl: this.adoptedBrowser.remoteDebuggingUrl,\n browserWebSocketUrl,\n closeBrowserOnDispose: false,\n rest: new AbpRestClient(this.adoptedBrowser.baseUrl, this.extraHTTPHeaders),\n browserCdp,\n pageRefs: new Set(),\n controllersByPageRef: new Map(),\n pageRefByTabId: new Map(),\n networkRecordsByRequestId: new Map(),\n ownedUserDataDir: false,\n ownedSessionDir: false,\n process: undefined,\n bootstrapTabId: undefined,\n activePageRef: undefined,\n closed: false,\n };\n this.sessions.set(sessionRef, session);\n\n const [tabs, targets] = await Promise.all([\n session.rest.listTabs(),\n session.browserCdp.send<{ readonly targetInfos: readonly AbpCdpTargetInfo[] }>(\n \"Target.getTargets\",\n ),\n ]);\n\n for (const tab of tabs) {\n const controller = await this.initializePageController(session, tab.id, {\n metadata: {\n url: tab.url,\n title: tab.title,\n },\n });\n if (tab.active) {\n session.activePageRef = controller.pageRef;\n }\n }\n\n const openerByTabId = resolveTabOpeners(targets.targetInfos, session.pageRefByTabId);\n for (const [tabId, openerPageRef] of openerByTabId) {\n const pageRef = session.pageRefByTabId.get(tabId);\n if (pageRef === undefined) {\n continue;\n }\n this.requirePage(pageRef).openerPageRef = openerPageRef;\n }\n\n session.activePageRef ??= chooseNextActivePageRef(Array.from(session.pageRefs));\n return sessionRef;\n }\n\n private async initializePageController(\n session: SessionState,\n tabId: string,\n options: {\n readonly openerPageRef?: PageRef;\n readonly metadata?: {\n readonly url?: string;\n readonly title?: string;\n };\n readonly installSettleTracker?: boolean;\n } = {},\n ): Promise<PageController> {\n const existingPageRef = session.pageRefByTabId.get(tabId);\n if (existingPageRef) {\n const existing = this.requirePage(existingPageRef);\n if (options.openerPageRef !== undefined) {\n existing.openerPageRef = options.openerPageRef;\n }\n return existing;\n }\n\n const targetInfo = await this.waitForPageTargetInfo(session, tabId, options.metadata);\n const cdp = await CdpClient.connect({\n url: derivePageWebSocketUrl(session.browserWebSocketUrl, targetInfo.targetId),\n allowedMethods: PAGE_CDP_METHOD_ALLOWLIST,\n });\n const pageRef = createPageRef(`abp-${++this.pageCounter}`);\n const controller: PageController = {\n sessionRef: session.sessionRef,\n pageRef,\n tabId,\n cdp,\n queuedEvents: [],\n framesByCdpId: new Map(),\n documentsByRef: new Map(),\n lifecycleState: \"open\",\n openerPageRef: options.openerPageRef,\n mainFrameRef: undefined,\n lastKnownTitle: \"\",\n explicitCloseInFlight: false,\n domUpdateTask: undefined,\n backgroundError: undefined,\n executionPaused: false,\n settleTrackerRegistered: false,\n };\n\n this.pages.set(pageRef, controller);\n session.pageRefs.add(pageRef);\n session.controllersByPageRef.set(pageRef, controller);\n session.pageRefByTabId.set(tabId, pageRef);\n\n cdp.on(\"Page.frameAttached\", (payload) => {\n const frameId = typeof payload.frameId === \"string\" ? payload.frameId : undefined;\n const parentFrameId =\n typeof payload.parentFrameId === \"string\" ? payload.parentFrameId : undefined;\n if (frameId && parentFrameId) {\n this.handleFrameAttached(controller, frameId, parentFrameId);\n }\n });\n cdp.on(\"Page.frameDetached\", (payload) => {\n const frameId = typeof payload.frameId === \"string\" ? payload.frameId : undefined;\n if (frameId) {\n this.handleFrameDetached(controller, frameId);\n }\n });\n cdp.on(\"Page.frameNavigated\", (payload) => {\n const frame = parseFrameDescriptor(payload.frame);\n if (frame) {\n this.handleFrameNavigated(controller, frame);\n }\n });\n cdp.on(\"Page.navigatedWithinDocument\", (payload) => {\n const frameId = typeof payload.frameId === \"string\" ? payload.frameId : undefined;\n const url = typeof payload.url === \"string\" ? payload.url : undefined;\n if (frameId && url) {\n this.handleNavigatedWithinDocument(controller, frameId, url);\n }\n });\n cdp.on(\"DOM.documentUpdated\", () => {\n this.handleDocumentUpdated(controller);\n });\n cdp.onClose((error) => {\n if (controller.explicitCloseInFlight) {\n return;\n }\n controller.backgroundError = error ?? closedPageError(controller.pageRef);\n this.cleanupPageController(controller);\n session.activePageRef = chooseNextActivePageRef(Array.from(session.pageRefs));\n });\n\n try {\n await cdp.send(\"Page.enable\", {\n enableFileChooserOpenedEvent: true,\n });\n await cdp.send(\"DOM.enable\", {\n includeWhitespace: \"none\",\n });\n await cdp.send(\"DOMStorage.enable\");\n const executionState = await session.rest.getExecutionState(tabId).catch(() => undefined);\n const shouldRestorePaused = executionState?.paused ?? false;\n controller.executionPaused = shouldRestorePaused;\n if (shouldRestorePaused) {\n await this.setControllerExecutionPaused(controller, false);\n }\n if (options.installSettleTracker !== false) {\n await this.actionSettler.installTracker(controller);\n }\n const frameTree = await cdp.send<{ readonly frameTree: FrameTreeNode }>(\"Page.getFrameTree\");\n this.syncFrameTree(controller, frameTree.frameTree);\n await this.reconcileDocumentEpochs(controller);\n controller.lastKnownTitle = await this.refreshTabTitle(controller);\n if (!shouldRestorePaused) {\n return controller;\n }\n try {\n await this.setControllerExecutionPaused(controller, true);\n } catch (error) {\n if (!isPageClosedApiError(error)) {\n throw error;\n }\n }\n return controller;\n } catch (error) {\n await cdp.close().catch(() => undefined);\n this.cleanupPageController(controller);\n throw normalizeAbpError(error, pageRef);\n }\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\n const parent = controller.framesByCdpId.get(parentFrameId);\n const frameRef = createFrameRef(`abp-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`abp-${++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 }\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(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 }\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\n const nextDocumentRef = createDocumentRef(`abp-${++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\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.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(`abp-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`abp-${++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 waitForPageTargetInfo(\n session: SessionState,\n tabId: string,\n tabMetadata?: {\n readonly url?: string;\n readonly title?: string;\n },\n ): Promise<AbpCdpTargetInfo> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < 30_000) {\n const targets = await session.browserCdp.send<{\n readonly targetInfos: readonly AbpCdpTargetInfo[];\n }>(\"Target.getTargets\");\n const pageTargets = targets.targetInfos.filter((target) => target.type === \"page\");\n const exactMatch = pageTargets.find(\n (target) => target.type === \"page\" && target.targetId === tabId,\n );\n if (exactMatch) {\n return exactMatch;\n }\n\n const fallbackMatch = resolveFallbackPageTarget(pageTargets, tabMetadata);\n if (fallbackMatch) {\n return fallbackMatch;\n }\n await delay(100);\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `CDP target ${tabId} did not become reachable within 30000ms`,\n );\n }\n\n private async waitForMainFrame(\n controller: PageController,\n timeoutMs: number,\n ): Promise<FrameState> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (controller.mainFrameRef) {\n return this.requireFrame(controller.mainFrameRef);\n }\n await delay(25);\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `page ${controller.pageRef} did not expose a main frame within ${String(timeoutMs)}ms`,\n );\n }\n\n private async waitForNavigationObservation(\n controller: PageController,\n before: MainFrameSnapshot,\n options: {\n readonly timeoutMs: number;\n readonly requireDocumentChange: boolean;\n readonly observeTitle: boolean;\n readonly allowFallback?: boolean;\n },\n ): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < options.timeoutMs) {\n this.throwBackgroundError(controller);\n if (controller.lifecycleState === \"closed\") {\n throw closedPageError(controller.pageRef);\n }\n const frame = controller.mainFrameRef ? this.frames.get(controller.mainFrameRef) : undefined;\n if (frame) {\n if (frame.currentDocument.documentRef !== before.documentRef) {\n await this.flushDomUpdateTask(controller);\n return;\n }\n if (!options.requireDocumentChange && frame.currentDocument.url !== before.url) {\n await this.flushDomUpdateTask(controller);\n return;\n }\n if (options.observeTitle) {\n const title = await this.refreshTabTitle(controller);\n if (title !== before.title) {\n await this.flushDomUpdateTask(controller);\n return;\n }\n }\n }\n await delay(50);\n }\n\n if (options.allowFallback) {\n await delay(150);\n await this.flushDomUpdateTask(controller);\n return;\n }\n\n throw createBrowserCoreError(\n \"timeout\",\n `page ${controller.pageRef} did not observe navigation within ${String(options.timeoutMs)}ms`,\n {\n details: {\n pageRef: controller.pageRef,\n },\n },\n );\n }\n\n private async captureMainFrameSnapshot(controller: PageController): Promise<MainFrameSnapshot> {\n await this.flushDomUpdateTask(controller);\n const mainFrame = await this.waitForMainFrame(controller, 10_000);\n const title = await this.refreshTabTitle(controller);\n return {\n documentRef: mainFrame.currentDocument.documentRef,\n documentEpoch: mainFrame.currentDocument.documentEpoch,\n url: mainFrame.currentDocument.url,\n title,\n };\n }\n\n private async setControllerExecutionPaused(\n controller: PageController,\n paused: boolean,\n ): Promise<void> {\n const session = this.requireSession(controller.sessionRef);\n try {\n const state = await session.rest.setExecutionState(controller.tabId, {\n paused,\n });\n controller.executionPaused = state.paused;\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n private async syncControllerExecutionPaused(controller: PageController): Promise<boolean> {\n const session = this.requireSession(controller.sessionRef);\n try {\n const state = await session.rest.getExecutionState(controller.tabId);\n controller.executionPaused = state.paused;\n return state.paused;\n } catch (error) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n }\n\n private async normalizeActionEvents(\n controller: PageController,\n response: AbpActionResponse,\n ): Promise<readonly StepEvent[]> {\n const session = this.requireSession(controller.sessionRef);\n const mainFrame = controller.mainFrameRef\n ? this.frames.get(controller.mainFrameRef)\n : undefined;\n const document = mainFrame?.currentDocument;\n const events: StepEvent[] = [];\n\n for (const event of response.events ?? []) {\n switch (event.type) {\n case \"popup\": {\n const popupTabId =\n this.readString(event.data.targetId) ?? this.readString(event.data.new_tab_id);\n if (!popupTabId) {\n break;\n }\n const openerPageRef =\n (this.readString(event.data.openerId)\n ? session.pageRefByTabId.get(this.readString(event.data.openerId)!)\n : undefined) ?? controller.pageRef;\n const popupController = await this.initializePageController(session, popupTabId, {\n openerPageRef,\n installSettleTracker: false,\n });\n this.queueEvent(\n popupController.pageRef,\n this.createEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n }),\n );\n events.push(\n this.createEvent({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n openerPageRef,\n }),\n );\n break;\n }\n case \"dialog\": {\n events.push(\n this.createEvent({\n kind: \"dialog-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n dialogRef: createDialogRef(`abp-${++this.dialogCounter}`),\n dialogType: normalizeDialogType(\n this.readString(event.data.dialogType) ?? this.readString(event.data.dialog_type),\n ),\n message: this.readString(event.data.message) ?? \"\",\n ...(this.readString(event.data.default_prompt) === undefined\n ? {}\n : { defaultValue: this.readString(event.data.default_prompt)! }),\n }),\n );\n break;\n }\n case \"file_chooser\": {\n const mode = this.readString(event.data.mode);\n events.push(\n this.createEvent({\n kind: \"chooser-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n chooserRef: createChooserRef(`abp-${++this.chooserCounter}`),\n chooserType: \"file\",\n multiple:\n this.readBoolean(event.data.multipleFilesAllowed) ??\n this.readBoolean(event.data.multiple) ??\n mode === \"selectMultiple\",\n }),\n );\n break;\n }\n case \"select_open\": {\n const chooser = normalizeSelectChooserEventData(event.data);\n if (chooser === undefined) {\n break;\n }\n events.push(\n this.createEvent({\n kind: \"chooser-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n chooserRef: createChooserRef(`abp-${++this.chooserCounter}`),\n chooserType: \"select\",\n multiple: chooser.multiple,\n ...(chooser.options === undefined ? {} : { options: chooser.options }),\n }),\n );\n break;\n }\n case \"download_started\": {\n const downloadId =\n this.readString(event.data.downloadId) ??\n this.readString(event.data.download_id) ??\n `abp-download-${++this.downloadCounter}`;\n let downloadRef = this.downloadRefsByAbpId.get(downloadId);\n if (!downloadRef) {\n downloadRef = createDownloadRef(`abp-${++this.downloadCounter}`);\n this.downloadRefsByAbpId.set(downloadId, downloadRef);\n }\n events.push(\n this.createEvent({\n kind: \"download-started\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n downloadRef,\n url: this.readString(event.data.url) ?? \"\",\n ...(this.readString(event.data.suggestedFilename) === undefined\n ? {}\n : { suggestedFilename: this.readString(event.data.suggestedFilename)! }),\n }),\n );\n break;\n }\n case \"download_completed\":\n case \"download_cancelled\": {\n const downloadId =\n this.readString(event.data.downloadId) ??\n this.readString(event.data.download_id) ??\n `abp-download-${++this.downloadCounter}`;\n let downloadRef = this.downloadRefsByAbpId.get(downloadId);\n if (!downloadRef) {\n downloadRef = createDownloadRef(`abp-${++this.downloadCounter}`);\n this.downloadRefsByAbpId.set(downloadId, downloadRef);\n }\n events.push(\n this.createEvent({\n kind: \"download-finished\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n downloadRef,\n state: event.type === \"download_completed\" ? \"completed\" : \"canceled\",\n }),\n );\n break;\n }\n }\n }\n\n return events;\n }\n\n private async executeInputAction(\n session: SessionState,\n controller: PageController,\n execute: () => Promise<AbpActionResponse>,\n ): Promise<{\n readonly response: AbpActionResponse;\n readonly dialogEvents: readonly StepEvent[];\n }> {\n try {\n const response = await execute();\n return { response, dialogEvents: [] };\n } catch (error) {\n if (!isActionTimeoutError(error)) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n const dialogInfo = await session.rest.getDialog(controller.tabId).catch(() => undefined);\n if (!dialogInfo) {\n throw normalizeAbpError(error, controller.pageRef);\n }\n await session.rest.acceptDialog(controller.tabId).catch(() => undefined);\n const mainFrame = controller.mainFrameRef\n ? this.frames.get(controller.mainFrameRef)\n : undefined;\n const document = mainFrame?.currentDocument;\n const dialogEvents: StepEvent[] = [\n this.createEvent({\n kind: \"dialog-opened\",\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n ...(mainFrame === undefined ? {} : { frameRef: mainFrame.frameRef }),\n ...(document === undefined ? {} : { documentRef: document.documentRef }),\n ...(document === undefined ? {} : { documentEpoch: document.documentEpoch }),\n dialogRef: createDialogRef(`abp-${++this.dialogCounter}`),\n dialogType: normalizeDialogType(dialogInfo.dialogType),\n message: dialogInfo.message,\n ...(dialogInfo.defaultPrompt === undefined\n ? {}\n : { defaultPrompt: dialogInfo.defaultPrompt }),\n }),\n ];\n return { response: { events: [], result: {} }, dialogEvents };\n }\n }\n\n private async detectNewTabs(\n session: SessionState,\n openerController: PageController,\n ): Promise<DiscoveredTabEffects> {\n const events: StepEvent[] = [];\n let activePageRef: PageRef | undefined;\n let tabs: readonly AbpTab[];\n try {\n tabs = await session.rest.listTabs();\n } catch {\n return {\n events,\n };\n }\n\n for (const tab of tabs) {\n if (session.pageRefByTabId.has(tab.id)) {\n continue;\n }\n const popupController = await this.initializePageController(session, tab.id, {\n openerPageRef: openerController.pageRef,\n metadata: {\n url: tab.url,\n title: tab.title,\n },\n installSettleTracker: false,\n });\n this.queueEvent(\n popupController.pageRef,\n this.createEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n }),\n );\n events.push(\n this.createEvent({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: popupController.pageRef,\n openerPageRef: openerController.pageRef,\n }),\n );\n if (tab.active) {\n activePageRef = popupController.pageRef;\n }\n }\n\n return {\n events,\n ...(activePageRef === undefined ? {} : { activePageRef }),\n };\n }\n\n private applyActionTabChange(\n session: SessionState,\n controllerPageRef: PageRef,\n response: AbpActionResponse,\n actionEvents: readonly StepEvent[],\n discoveredTabs: DiscoveredTabEffects,\n ): void {\n const pageRef = resolveTabChangePageRef({\n controllerPageRef,\n response,\n actionEvents,\n discoveredTabs,\n activePageRef: session.activePageRef,\n });\n if (response.tab_changed) {\n session.activePageRef = pageRef;\n }\n }\n\n private normalizeNetworkRecord(\n session: SessionState,\n pageRef: PageRef,\n call: AbpNetworkCall,\n includeBodies: boolean,\n ): NetworkRecord {\n const requestHeaders = parseHeaderJson(call.request_headers);\n const responseHeaders = parseHeaderJson(call.response_headers);\n const responseContentType = headerValue(responseHeaders, \"content-type\");\n const requestContentType = headerValue(requestHeaders, \"content-type\");\n const requestBody =\n includeBodies && call.request_body !== undefined\n ? bodyPayloadFromUtf8(call.request_body, parseMimeType(requestContentType))\n : undefined;\n const responseBody =\n includeBodies && call.response_body !== undefined\n ? call.response_body_encoding === \"base64\"\n ? createBodyPayload(new Uint8Array(Buffer.from(call.response_body, \"base64\")), {\n encoding: \"base64\",\n ...parseMimeType(responseContentType),\n })\n : bodyPayloadFromUtf8(call.response_body, parseMimeType(responseContentType))\n : undefined;\n\n return {\n kind: \"http\",\n requestId: createNetworkRequestId(call.request_id ?? `abp-${++this.requestCounter}`),\n sessionRef: session.sessionRef,\n pageRef,\n method: call.method,\n url: call.url,\n requestHeaders,\n responseHeaders,\n ...(call.status === undefined ? {} : { status: call.status }),\n resourceType: normalizeResourceType(call.resource_type),\n navigationRequest: normalizeResourceType(call.resource_type) === \"document\",\n captureState: \"complete\",\n requestBodyState:\n call.request_body === undefined ? \"skipped\" : includeBodies ? \"complete\" : \"pending\",\n responseBodyState:\n call.response_body === undefined ? \"skipped\" : includeBodies ? \"complete\" : \"pending\",\n ...(call.request_body === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n ...(call.response_body === undefined ? { responseBodySkipReason: \"not-present\" } : {}),\n ...(requestBody === undefined ? {} : { requestBody }),\n ...(responseBody === undefined ? {} : { responseBody }),\n };\n }\n\n private createSessionHttpNetworkRecord(\n session: SessionState,\n controller: PageController,\n mainFrame: FrameState,\n request: SessionTransportRequest,\n response: SessionHttpScriptResponse,\n bodies: {\n readonly responseHeaders: readonly ReturnType<typeof createHeaderEntry>[];\n readonly responseBody?: BodyPayload;\n },\n ): NetworkRecord {\n return {\n kind: \"http\",\n requestId: createNetworkRequestId(`abp-session-http-${++this.requestCounter}`),\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.currentDocument.documentRef,\n method: request.method,\n url: response.url,\n requestHeaders: request.headers ?? [],\n responseHeaders: bodies.responseHeaders,\n status: response.status,\n statusText: response.statusText || STATUS_CODES[response.status] || \"\",\n resourceType: \"fetch\",\n navigationRequest: false,\n captureState: \"complete\",\n requestBodyState: request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: bodies.responseBody === undefined ? \"skipped\" : \"complete\",\n ...(request.body === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n ...(bodies.responseBody === undefined ? { responseBodySkipReason: \"not-present\" } : {}),\n ...(request.body === undefined ? {} : { requestBody: request.body }),\n ...(bodies.responseBody === undefined ? {} : { responseBody: bodies.responseBody }),\n };\n }\n\n private storeDocumentNavigationRecord(\n session: SessionState,\n controller: PageController,\n mainFrame: FrameState,\n ): void {\n const document = mainFrame.currentDocument;\n this.storeNetworkRecords(session, [\n {\n kind: \"http\",\n requestId: createNetworkRequestId(`abp-document-${++this.requestCounter}`),\n sessionRef: session.sessionRef,\n pageRef: controller.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: document.documentRef,\n method: \"GET\",\n url: document.url,\n requestHeaders: [],\n responseHeaders: [],\n status: 200,\n statusText: \"OK\",\n resourceType: \"document\",\n navigationRequest: true,\n captureState: \"complete\",\n requestBodyState: \"skipped\",\n responseBodyState: \"skipped\",\n requestBodySkipReason: \"not-present\",\n responseBodySkipReason: \"not-present\",\n },\n ]);\n }\n\n private markNetworkRecordBodyFailure(record: NetworkRecord, error: unknown): NetworkRecord {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ...record,\n requestBodyState: record.requestBodyState === \"pending\" ? \"failed\" : record.requestBodyState,\n responseBodyState:\n record.responseBodyState === \"pending\" ? \"failed\" : record.responseBodyState,\n ...(record.requestBodyState === \"pending\" ? { requestBodyError: message } : {}),\n ...(record.responseBodyState === \"pending\" ? { responseBodyError: message } : {}),\n };\n }\n\n private readLocalNetworkRecords(\n session: SessionState,\n pageRef: PageRef,\n includeBodies: boolean,\n input: {\n readonly requestIds?: ReadonlySet<NetworkRecord[\"requestId\"]>;\n readonly filters: {\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 },\n ): readonly NetworkRecord[] {\n return Array.from(session.networkRecordsByRequestId.values())\n .filter((record) => record.pageRef === pageRef)\n .map((record) => this.projectNetworkRecordBodies(record, includeBodies))\n .filter((record) => input.requestIds === undefined || input.requestIds.has(record.requestId))\n .filter((record) => matchesNetworkRecordFilters(record, input.filters));\n }\n\n private projectNetworkRecordBodies(record: NetworkRecord, includeBodies: boolean): NetworkRecord {\n if (includeBodies) {\n return record;\n }\n const { requestBody: _requestBody, responseBody: _responseBody, ...metadataRecord } = record;\n return {\n ...metadataRecord,\n requestBodyState: record.requestBody === undefined ? record.requestBodyState : \"pending\",\n responseBodyState: record.responseBody === undefined ? record.responseBodyState : \"pending\",\n };\n }\n\n private storeNetworkRecords(session: SessionState, records: readonly NetworkRecord[]): void {\n for (const record of records) {\n session.networkRecordsByRequestId.set(record.requestId, record);\n }\n }\n\n private async readStorageEntriesForOrigin(\n session: SessionState,\n storageKey: string,\n isLocalStorage: boolean,\n ): Promise<readonly StorageEntry[]> {\n const pageRef = session.activePageRef ?? chooseNextActivePageRef(Array.from(session.pageRefs));\n if (!pageRef) {\n return [];\n }\n const controller = this.requirePage(pageRef);\n try {\n const storage = await controller.cdp.send<AbpDomStorageItemsResult>(\n \"DOMStorage.getDOMStorageItems\",\n {\n storageId: {\n storageKey,\n isLocalStorage,\n },\n },\n );\n return storage.entries.map(([key, value]) => ({ key, value }));\n } catch {\n return [];\n }\n }\n\n private async readIndexedDbSnapshotForOrigin(\n session: SessionState,\n origin: string,\n storageKey: string,\n ): Promise<readonly IndexedDbDatabaseSnapshot[] | undefined> {\n const pageRef = session.activePageRef ?? chooseNextActivePageRef(Array.from(session.pageRefs));\n if (!pageRef) {\n return undefined;\n }\n const controller = this.requirePage(pageRef);\n\n let databaseNames: readonly string[];\n try {\n const names = await controller.cdp.send<AbpIndexedDbDatabaseNamesResult>(\n \"IndexedDB.requestDatabaseNames\",\n {\n securityOrigin: origin,\n storageKey,\n },\n );\n databaseNames = names.databaseNames;\n } catch {\n return undefined;\n }\n\n const databases: IndexedDbDatabaseSnapshot[] = [];\n for (const databaseName of databaseNames) {\n try {\n const database = await controller.cdp.send<AbpIndexedDbDatabaseResult>(\n \"IndexedDB.requestDatabase\",\n {\n securityOrigin: origin,\n storageKey,\n databaseName,\n },\n );\n const stores: IndexedDbObjectStoreSnapshot[] = [];\n for (const store of database.databaseWithObjectStores.objectStores) {\n const records: {\n key: unknown;\n primaryKey?: unknown;\n value: unknown;\n }[] = [];\n let skipCount = 0;\n while (true) {\n const data = await controller.cdp.send<AbpIndexedDbDataResult>(\n \"IndexedDB.requestData\",\n {\n securityOrigin: origin,\n storageKey,\n databaseName,\n objectStoreName: store.name,\n indexName: \"\",\n skipCount,\n pageSize: 250,\n keyRange: undefined,\n },\n );\n for (const entry of data.objectStoreDataEntries) {\n records.push({\n key: entry.key ?? null,\n ...(entry.primaryKey === undefined ? {} : { primaryKey: entry.primaryKey }),\n value: entry.value ?? null,\n });\n }\n if (!data.hasMore) {\n break;\n }\n skipCount += data.objectStoreDataEntries.length;\n }\n stores.push({\n name: store.name,\n ...(store.keyPathArray && store.keyPathArray.length > 0\n ? { keyPath: [...store.keyPathArray] }\n : store.keyPath === undefined\n ? {}\n : { keyPath: store.keyPath }),\n autoIncrement: store.autoIncrement ?? false,\n indexes: (store.indexes ?? []).map((index) => ({\n name: index.name,\n ...(index.keyPathArray && index.keyPathArray.length > 0\n ? { keyPath: [...index.keyPathArray] }\n : index.keyPath === undefined\n ? {}\n : { keyPath: index.keyPath }),\n multiEntry: index.multiEntry ?? false,\n unique: index.unique ?? false,\n })),\n records,\n });\n }\n databases.push({\n name: database.databaseWithObjectStores.name,\n version: database.databaseWithObjectStores.version,\n objectStores: stores,\n });\n } catch {}\n }\n\n return databases;\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 const origin = parseOrigin(frame.currentDocument.url);\n if (origin === undefined) {\n continue;\n }\n if (origin === \"null\") {\n continue;\n }\n try {\n const storageKey = await controller.cdp.send<AbpStorageKeyResult>(\n \"Storage.getStorageKey\",\n {\n frameId: frame.cdpFrameId,\n },\n );\n const storage = await controller.cdp.send<AbpDomStorageItemsResult>(\n \"DOMStorage.getDOMStorageItems\",\n {\n storageId: {\n storageKey: storageKey.storageKey,\n isLocalStorage: false,\n },\n },\n );\n snapshots.push({\n pageRef: controller.pageRef,\n frameRef: frame.frameRef,\n origin,\n entries: storage.entries.map(([key, value]) => ({ key, value })),\n });\n } catch {}\n }\n }\n return snapshots;\n }\n\n private async buildPageInfo(controller: PageController): Promise<PageInfo> {\n const mainFrame = this.requireMainFrame(controller);\n controller.lastKnownTitle = await this.refreshTabTitle(controller);\n return {\n pageRef: controller.pageRef,\n sessionRef: controller.sessionRef,\n ...(controller.openerPageRef === undefined\n ? {}\n : { openerPageRef: controller.openerPageRef }),\n url: mainFrame.currentDocument.url,\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 refreshTabTitle(controller: PageController): Promise<string> {\n try {\n const tab = await this.requireSession(controller.sessionRef).rest.getTab(controller.tabId);\n controller.lastKnownTitle = tab.title;\n return tab.title;\n } catch (error) {\n if (isPageClosedApiError(error)) {\n throw closedPageError(controller.pageRef);\n }\n return controller.lastKnownTitle;\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(async () => {\n await this.reconcileDocumentEpochs(controller);\n });\n const settled = queued\n .catch((error) => {\n controller.backgroundError ??= normalizeAbpError(error, controller.pageRef);\n })\n .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(`abp-${++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 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 document,\n backendNodeId,\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 || session.closed) {\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 async ensureFrameExecutionContext(\n controller: PageController,\n cdpFrameId: string,\n ): Promise<number> {\n const isolatedWorld = await controller.cdp.send<{\n readonly executionContextId: number;\n }>(\"Page.createIsolatedWorld\", {\n frameId: cdpFrameId,\n worldName: \"__opensteer_snapshot__\",\n // CDP spells this field as `grantUniveralAccess`.\n grantUniveralAccess: true,\n });\n return isolatedWorld.executionContextId;\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 if (controller.lifecycleState === \"closed\") {\n return;\n }\n controller.lifecycleState = \"closed\";\n this.pages.delete(controller.pageRef);\n const session = this.sessions.get(controller.sessionRef);\n session?.pageRefs.delete(controller.pageRef);\n session?.controllersByPageRef.delete(controller.pageRef);\n session?.pageRefByTabId.delete(controller.tabId);\n if (session?.activePageRef === controller.pageRef) {\n session.activePageRef = chooseNextActivePageRef(Array.from(session.pageRefs));\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.queuedEvents.length = 0;\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: { readonly kind: TKind } & Omit<\n Extract<StepEvent, { readonly kind: TKind }>,\n \"eventId\" | \"timestamp\"\n >,\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 retireDocument(documentRef: DocumentRef): void {\n this.documents.delete(documentRef);\n this.retiredDocuments.add(documentRef);\n }\n\n private isDescendantFrame(frame: FrameState, ancestorFrameRef: FrameRef): 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 isHistoryBoundaryError(error: unknown, direction: \"back\" | \"forward\"): boolean {\n return (\n error instanceof AbpApiError &&\n error.status === 400 &&\n new RegExp(`Cannot go ${direction}`, \"i\").test(error.message)\n );\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n }\n\n private readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n }\n\n private assertNotDisposed(): void {\n if (this.disposed) {\n throw createBrowserCoreError(\"operation-failed\", \"engine has been disposed\");\n }\n }\n}\n\nexport async function createAbpBrowserCoreEngine(\n options: AbpBrowserCoreEngineOptions = {},\n): Promise<AbpBrowserCoreEngine> {\n return AbpBrowserCoreEngine.create(options);\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 resolveFallbackPageTarget(\n targets: readonly AbpCdpTargetInfo[],\n tabMetadata:\n | {\n readonly url?: string;\n readonly title?: string;\n }\n | undefined,\n): AbpCdpTargetInfo | undefined {\n if (tabMetadata?.url) {\n const urlMatches = targets.filter((target) => target.url === tabMetadata.url);\n if (urlMatches.length === 1) {\n return urlMatches[0];\n }\n }\n\n if (tabMetadata?.title) {\n const titleMatches = targets.filter((target) => target.title === tabMetadata.title);\n if (titleMatches.length === 1) {\n return titleMatches[0];\n }\n }\n\n return undefined;\n}\n"]}