@opensteer/browser-core 0.7.5 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +25 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brand.ts","../src/identity.ts","../src/geometry.ts","../src/network.ts","../src/snapshots.ts","../src/storage.ts","../src/capabilities.ts","../src/errors.ts","../src/fake-engine.ts","../src/cdp-dom-snapshot.ts","../src/cdp-visual-stability.ts","../src/post-load-tracker.ts","../src/action-boundary.ts"],"names":["nextDocumentEpoch"],"mappings":"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","file":"index.js","sourcesContent":["declare const brandSymbol: unique symbol;\n\nexport type Brand<Value, Name extends string> = Value & {\n readonly [brandSymbol]: Name;\n};\n\nexport function brand<Value, Name extends string>(value: Value): Brand<Value, Name> {\n return value as Brand<Value, Name>;\n}\n","import { brand, type Brand } from \"./brand.js\";\n\ntype StringRefKind =\n | \"SessionRef\"\n | \"PageRef\"\n | \"FrameRef\"\n | \"DocumentRef\"\n | \"NodeRef\"\n | \"NetworkRequestId\"\n | \"DownloadRef\"\n | \"DialogRef\"\n | \"ChooserRef\"\n | \"WorkerRef\";\n\nexport type SessionRef = Brand<string, \"SessionRef\">;\nexport type PageRef = Brand<string, \"PageRef\">;\nexport type FrameRef = Brand<string, \"FrameRef\">;\nexport type DocumentRef = Brand<string, \"DocumentRef\">;\nexport type NodeRef = Brand<string, \"NodeRef\">;\nexport type NetworkRequestId = Brand<string, \"NetworkRequestId\">;\nexport type DownloadRef = Brand<string, \"DownloadRef\">;\nexport type DialogRef = Brand<string, \"DialogRef\">;\nexport type ChooserRef = Brand<string, \"ChooserRef\">;\nexport type WorkerRef = Brand<string, \"WorkerRef\">;\nexport type DocumentEpoch = Brand<number, \"DocumentEpoch\">;\n\nexport interface NodeLocator {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n}\n\nconst REF_PREFIXES = {\n session: \"session\",\n page: \"page\",\n frame: \"frame\",\n document: \"document\",\n node: \"node\",\n request: \"request\",\n download: \"download\",\n dialog: \"dialog\",\n chooser: \"chooser\",\n worker: \"worker\",\n} as const;\n\ntype RefPrefix = (typeof REF_PREFIXES)[keyof typeof REF_PREFIXES];\n\nfunction normalizeRef(prefix: RefPrefix, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new TypeError(`${prefix} reference cannot be empty`);\n }\n\n const canonicalPrefix = `${prefix}:`;\n if (trimmed.startsWith(canonicalPrefix)) {\n if (trimmed.length === canonicalPrefix.length) {\n throw new TypeError(`${prefix} reference must include an identifier`);\n }\n return trimmed;\n }\n\n if (trimmed.includes(\":\")) {\n throw new TypeError(\n `${prefix} reference \"${trimmed}\" must either omit a prefix or use ${canonicalPrefix}`,\n );\n }\n\n return `${canonicalPrefix}${trimmed}`;\n}\n\nfunction hasPrefix(prefix: RefPrefix, value: string): boolean {\n return value.startsWith(`${prefix}:`) && value.length > prefix.length + 1;\n}\n\nfunction createStringRef<Name extends StringRefKind>(\n prefix: RefPrefix,\n value: string,\n): Brand<string, Name> {\n return brand<string, Name>(normalizeRef(prefix, value));\n}\n\nexport function createSessionRef(value: string): SessionRef {\n return createStringRef(\"session\", value);\n}\n\nexport function createPageRef(value: string): PageRef {\n return createStringRef(\"page\", value);\n}\n\nexport function createFrameRef(value: string): FrameRef {\n return createStringRef(\"frame\", value);\n}\n\nexport function createDocumentRef(value: string): DocumentRef {\n return createStringRef(\"document\", value);\n}\n\nexport function createNodeRef(value: string): NodeRef {\n return createStringRef(\"node\", value);\n}\n\nexport function createNetworkRequestId(value: string): NetworkRequestId {\n return createStringRef(\"request\", value);\n}\n\nexport function createDownloadRef(value: string): DownloadRef {\n return createStringRef(\"download\", value);\n}\n\nexport function createDialogRef(value: string): DialogRef {\n return createStringRef(\"dialog\", value);\n}\n\nexport function createChooserRef(value: string): ChooserRef {\n return createStringRef(\"chooser\", value);\n}\n\nexport function createWorkerRef(value: string): WorkerRef {\n return createStringRef(\"worker\", value);\n}\n\nexport function isSessionRef(value: string): value is SessionRef {\n return hasPrefix(\"session\", value);\n}\n\nexport function isPageRef(value: string): value is PageRef {\n return hasPrefix(\"page\", value);\n}\n\nexport function isFrameRef(value: string): value is FrameRef {\n return hasPrefix(\"frame\", value);\n}\n\nexport function isDocumentRef(value: string): value is DocumentRef {\n return hasPrefix(\"document\", value);\n}\n\nexport function isNodeRef(value: string): value is NodeRef {\n return hasPrefix(\"node\", value);\n}\n\nexport function isNetworkRequestId(value: string): value is NetworkRequestId {\n return hasPrefix(\"request\", value);\n}\n\nexport function isDownloadRef(value: string): value is DownloadRef {\n return hasPrefix(\"download\", value);\n}\n\nexport function isDialogRef(value: string): value is DialogRef {\n return hasPrefix(\"dialog\", value);\n}\n\nexport function isChooserRef(value: string): value is ChooserRef {\n return hasPrefix(\"chooser\", value);\n}\n\nexport function isWorkerRef(value: string): value is WorkerRef {\n return hasPrefix(\"worker\", value);\n}\n\nexport function serializeRef(\n ref:\n | SessionRef\n | PageRef\n | FrameRef\n | DocumentRef\n | NodeRef\n | NetworkRequestId\n | DownloadRef\n | DialogRef\n | ChooserRef\n | WorkerRef,\n): string {\n return ref;\n}\n\nexport function createDocumentEpoch(value: number): DocumentEpoch {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(\n `document epoch must be a non-negative integer, received ${String(value)}`,\n );\n }\n return brand<number, \"DocumentEpoch\">(value);\n}\n\nexport function nextDocumentEpoch(epoch: DocumentEpoch): DocumentEpoch {\n return createDocumentEpoch(epoch + 1);\n}\n\nexport function serializeDocumentEpoch(epoch: DocumentEpoch): number {\n return epoch;\n}\n\nexport function createNodeLocator(\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n nodeRef: NodeRef,\n): NodeLocator {\n return { documentRef, documentEpoch, nodeRef };\n}\n","import { brand, type Brand } from \"./brand.js\";\n\nexport interface Point {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface Size {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Rect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport type Quad = readonly [Point, Point, Point, Point];\n\nexport interface ScrollOffset {\n readonly x: number;\n readonly y: number;\n}\n\nexport type CoordinateSpace =\n | \"document-css\"\n | \"layout-viewport-css\"\n | \"visual-viewport-css\"\n | \"computer-display-css\"\n | \"window\"\n | \"screen\"\n | \"device-pixel\";\n\nexport interface LayoutViewport {\n readonly origin: Point;\n readonly size: Size;\n}\n\nexport interface VisualViewport {\n readonly origin: Point;\n readonly offsetWithinLayoutViewport: ScrollOffset;\n readonly size: Size;\n}\n\nexport type DevicePixelRatio = Brand<number, \"DevicePixelRatio\">;\nexport type PageScaleFactor = Brand<number, \"PageScaleFactor\">;\nexport type PageZoomFactor = Brand<number, \"PageZoomFactor\">;\n\nexport interface ViewportMetrics {\n readonly layoutViewport: LayoutViewport;\n readonly visualViewport: VisualViewport;\n readonly scrollOffset: ScrollOffset;\n readonly contentSize: Size;\n readonly devicePixelRatio: DevicePixelRatio;\n readonly pageScaleFactor: PageScaleFactor;\n readonly pageZoomFactor: PageZoomFactor;\n}\n\nfunction assertFinite(value: number, name: string): void {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${name} must be a finite number`);\n }\n}\n\nfunction assertNonNegative(value: number, name: string): void {\n assertFinite(value, name);\n if (value < 0) {\n throw new RangeError(`${name} must be greater than or equal to 0`);\n }\n}\n\nfunction createScale<Name extends string>(value: number, name: string) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(`${name} must be greater than 0`);\n }\n return brand<number, Name>(value);\n}\n\nexport function createPoint(x: number, y: number): Point {\n assertFinite(x, \"point.x\");\n assertFinite(y, \"point.y\");\n return { x, y };\n}\n\nexport function createSize(width: number, height: number): Size {\n assertNonNegative(width, \"size.width\");\n assertNonNegative(height, \"size.height\");\n return { width, height };\n}\n\nexport function createRect(x: number, y: number, width: number, height: number): Rect {\n assertFinite(x, \"rect.x\");\n assertFinite(y, \"rect.y\");\n assertNonNegative(width, \"rect.width\");\n assertNonNegative(height, \"rect.height\");\n return { x, y, width, height };\n}\n\nexport function createScrollOffset(x: number, y: number): ScrollOffset {\n assertFinite(x, \"scrollOffset.x\");\n assertFinite(y, \"scrollOffset.y\");\n return { x, y };\n}\n\nexport function createQuad(points: readonly [Point, Point, Point, Point]): Quad {\n return points;\n}\n\nexport function rectToQuad(rect: Rect): Quad {\n return createQuad([\n createPoint(rect.x, rect.y),\n createPoint(rect.x + rect.width, rect.y),\n createPoint(rect.x + rect.width, rect.y + rect.height),\n createPoint(rect.x, rect.y + rect.height),\n ]);\n}\n\nexport function quadBounds(quad: Quad): Rect {\n const xs = quad.map((point) => point.x);\n const ys = quad.map((point) => point.y);\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs);\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys);\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nexport function rectContainsPoint(rect: Rect, point: Point): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\nexport function createDevicePixelRatio(value: number): DevicePixelRatio {\n return createScale<\"DevicePixelRatio\">(value, \"devicePixelRatio\");\n}\n\nexport function createPageScaleFactor(value: number): PageScaleFactor {\n return createScale<\"PageScaleFactor\">(value, \"pageScaleFactor\");\n}\n\nexport function createPageZoomFactor(value: number): PageZoomFactor {\n return createScale<\"PageZoomFactor\">(value, \"pageZoomFactor\");\n}\n","import type {\n DocumentRef,\n FrameRef,\n NetworkRequestId,\n PageRef,\n SessionRef,\n WorkerRef,\n} from \"./identity.js\";\n\nexport interface HeaderEntry {\n readonly name: string;\n readonly value: string;\n}\n\nexport type BodyPayloadEncoding = \"identity\" | \"base64\" | \"gzip\" | \"deflate\" | \"brotli\" | \"unknown\";\n\nexport interface BodyPayload {\n readonly bytes: Uint8Array;\n readonly encoding: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated: boolean;\n readonly capturedByteLength: number;\n readonly originalByteLength?: number;\n}\n\nexport type NetworkCaptureState = \"pending\" | \"complete\" | \"failed\" | \"skipped\";\n\nexport type NetworkRecordKind = \"http\" | \"websocket\" | \"event-stream\";\n\nexport type NetworkResourceType =\n | \"document\"\n | \"stylesheet\"\n | \"image\"\n | \"media\"\n | \"font\"\n | \"script\"\n | \"fetch\"\n | \"xhr\"\n | \"websocket\"\n | \"event-stream\"\n | \"manifest\"\n | \"texttrack\"\n | \"beacon\"\n | \"ping\"\n | \"preflight\"\n | \"other\";\n\nexport type NetworkInitiatorType =\n | \"parser\"\n | \"script\"\n | \"preload\"\n | \"redirect\"\n | \"user\"\n | \"service-worker\"\n | \"other\";\n\nexport interface NetworkInitiator {\n readonly type: NetworkInitiatorType;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly requestId?: NetworkRequestId;\n readonly stackTrace?: readonly string[];\n}\n\nexport interface NetworkTiming {\n readonly requestStartMs?: number;\n readonly dnsStartMs?: number;\n readonly dnsEndMs?: number;\n readonly connectStartMs?: number;\n readonly connectEndMs?: number;\n readonly sslStartMs?: number;\n readonly sslEndMs?: number;\n readonly requestSentMs?: number;\n readonly responseStartMs?: number;\n readonly responseEndMs?: number;\n readonly workerStartMs?: number;\n readonly workerReadyMs?: number;\n}\n\nexport interface NetworkTransferSizes {\n readonly requestHeadersBytes?: number;\n readonly responseHeadersBytes?: number;\n readonly encodedBodyBytes?: number;\n readonly decodedBodyBytes?: number;\n readonly transferSizeBytes?: number;\n}\n\nexport interface NetworkSourceMetadata {\n readonly protocol?: string;\n readonly remoteAddress?: {\n readonly ip?: string;\n readonly port?: number;\n };\n readonly fromServiceWorker?: boolean;\n readonly fromDiskCache?: boolean;\n readonly fromMemoryCache?: boolean;\n readonly workerRef?: WorkerRef;\n}\n\nexport interface NetworkRecord {\n readonly kind: NetworkRecordKind;\n readonly requestId: NetworkRequestId;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly method: string;\n readonly url: string;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly status?: number;\n readonly statusText?: string;\n readonly resourceType: NetworkResourceType;\n readonly redirectFromRequestId?: NetworkRequestId;\n readonly redirectToRequestId?: NetworkRequestId;\n readonly navigationRequest: boolean;\n readonly initiator?: NetworkInitiator;\n readonly timing?: NetworkTiming;\n readonly transfer?: NetworkTransferSizes;\n readonly source?: NetworkSourceMetadata;\n readonly captureState: NetworkCaptureState;\n readonly requestBodyState: NetworkCaptureState;\n readonly responseBodyState: NetworkCaptureState;\n readonly requestBodySkipReason?: string;\n readonly responseBodySkipReason?: string;\n readonly requestBodyError?: string;\n readonly responseBodyError?: string;\n readonly requestBody?: BodyPayload;\n readonly responseBody?: BodyPayload;\n}\n\nexport interface NetworkRecordFilterInput {\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkResourceType;\n}\n\nexport function createHeaderEntry(name: string, value: string): HeaderEntry {\n return { name, value };\n}\n\nexport function createBodyPayload(\n bytes: Uint8Array,\n options: {\n encoding?: BodyPayloadEncoding;\n mimeType?: string;\n charset?: string;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return {\n bytes,\n encoding: options.encoding ?? \"identity\",\n truncated: options.truncated ?? false,\n capturedByteLength: bytes.byteLength,\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.charset === undefined ? {} : { charset: options.charset }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n };\n}\n\nexport function bodyPayloadFromUtf8(\n value: string,\n options: {\n mimeType?: string;\n encoding?: BodyPayloadEncoding;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return createBodyPayload(new TextEncoder().encode(value), {\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.encoding === undefined ? {} : { encoding: options.encoding }),\n ...(options.truncated === undefined ? {} : { truncated: options.truncated }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n charset: \"utf-8\",\n });\n}\n\nexport function matchesNetworkRecordFilters(\n record: Pick<NetworkRecord, \"url\" | \"method\" | \"status\" | \"resourceType\">,\n filters: NetworkRecordFilterInput,\n): boolean {\n if (filters.url !== undefined && !includesCaseInsensitive(record.url, filters.url)) {\n return false;\n }\n\n let parsedUrl: URL | undefined;\n const getParsedUrl = (): URL => {\n parsedUrl ??= new URL(record.url);\n return parsedUrl;\n };\n\n if (filters.hostname !== undefined) {\n const hostname = getParsedUrl().hostname;\n if (!includesCaseInsensitive(hostname, filters.hostname)) {\n return false;\n }\n }\n\n if (filters.path !== undefined) {\n const path = getParsedUrl().pathname;\n if (!includesCaseInsensitive(path, filters.path)) {\n return false;\n }\n }\n\n if (filters.method !== undefined && !includesCaseInsensitive(record.method, filters.method)) {\n return false;\n }\n\n if (\n filters.status !== undefined &&\n !includesCaseInsensitive(\n record.status === undefined ? \"\" : String(record.status),\n filters.status,\n )\n ) {\n return false;\n }\n\n if (filters.resourceType !== undefined && record.resourceType !== filters.resourceType) {\n return false;\n }\n\n return true;\n}\n\nfunction includesCaseInsensitive(value: string, query: string): boolean {\n return value.toLowerCase().includes(query.toLowerCase());\n}\n","import type { DocumentEpoch, DocumentRef, FrameRef, NodeRef, PageRef } from \"./identity.js\";\nimport type { BodyPayload } from \"./network.js\";\nimport type { CoordinateSpace, Point, Quad, Rect, Size } from \"./geometry.js\";\n\nexport type ScreenshotFormat = \"png\" | \"jpeg\" | \"webp\";\n\nexport interface ScreenshotArtifact {\n readonly pageRef: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n readonly payload: BodyPayload;\n readonly format: ScreenshotFormat;\n readonly size: Size;\n readonly coordinateSpace: CoordinateSpace;\n readonly clip?: Rect;\n}\n\nexport interface HtmlSnapshot {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly capturedAt: number;\n readonly html: string;\n}\n\nexport interface DomSnapshotNode {\n readonly snapshotNodeId: number;\n readonly nodeRef?: NodeRef;\n readonly parentSnapshotNodeId?: number;\n readonly childSnapshotNodeIds: readonly number[];\n readonly shadowRootType?: \"open\" | \"closed\" | \"user-agent\";\n readonly shadowHostNodeRef?: NodeRef;\n readonly contentDocumentRef?: DocumentRef;\n readonly nodeType: number;\n readonly nodeName: string;\n readonly nodeValue: string;\n readonly textContent?: string;\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 readonly attributes: readonly {\n readonly name: string;\n readonly value: string;\n }[];\n readonly layout?: {\n readonly rect?: Rect;\n readonly quad?: Quad;\n readonly paintOrder?: number;\n };\n}\n\nexport type ShadowDomSnapshotMode = \"flattened\" | \"preserved\" | \"unsupported\";\n\nexport interface DomSnapshot {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly parentDocumentRef?: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly capturedAt: number;\n readonly rootSnapshotNodeId: number;\n readonly shadowDomMode: ShadowDomSnapshotMode;\n readonly geometryCoordinateSpace?: CoordinateSpace;\n readonly nodes: readonly DomSnapshotNode[];\n}\n\nexport interface HitTestResult {\n readonly inputPoint: Point;\n readonly inputCoordinateSpace: CoordinateSpace;\n readonly resolvedPoint: Point;\n readonly resolvedCoordinateSpace: CoordinateSpace;\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef?: NodeRef;\n readonly targetQuad?: Quad;\n readonly obscured: boolean;\n readonly pointerEventsSkipped: boolean;\n}\n\nexport type VisualStabilityScope = \"main-frame\" | \"visible-frames\";\n\nexport function findDomSnapshotNode(\n snapshot: DomSnapshot,\n snapshotNodeId: number,\n): DomSnapshotNode | undefined {\n return snapshot.nodes.find((node) => node.snapshotNodeId === snapshotNodeId);\n}\n\nexport function findDomSnapshotNodeByRef(\n snapshot: DomSnapshot,\n nodeRef: NodeRef,\n): DomSnapshotNode | undefined {\n return snapshot.nodes.find((node) => node.nodeRef === nodeRef);\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 {\n allBrowserCapabilities,\n hasCapability,\n type BrowserCapabilities,\n type BrowserCapabilityPath,\n} from \"./capabilities.js\";\nimport type {\n BrowserCoreEngine,\n BrowserInitScriptRegistration,\n BrowserInitScriptInput,\n BrowserRouteRegistration,\n BrowserRouteRegistrationInput,\n FakeBrowserCoreEngineOptions,\n GetNetworkRecordsInput,\n SessionTransportRequest,\n SessionTransportResponse,\n} from \"./contracts.js\";\nimport type { StepEvent, StepResult } from \"./events.js\";\nimport {\n closedPageError,\n closedSessionError,\n createBrowserCoreError,\n staleNodeRefError,\n unsupportedCapabilityError,\n} from \"./errors.js\";\nimport type { ActionBoundarySnapshot } from \"./action-boundary.js\";\nimport {\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createPoint,\n createRect,\n createScrollOffset,\n createSize,\n rectToQuad,\n type CoordinateSpace,\n type Point,\n type Rect,\n type Size,\n type ViewportMetrics,\n} from \"./geometry.js\";\nimport {\n createDocumentEpoch,\n createDocumentRef,\n createFrameRef,\n createNetworkRequestId,\n createNodeRef,\n createPageRef,\n createSessionRef,\n nextDocumentEpoch,\n type DocumentEpoch,\n type DocumentRef,\n type FrameRef,\n type NodeLocator,\n type NodeRef,\n type PageRef,\n type SessionRef,\n} from \"./identity.js\";\nimport type { FrameInfo, PageInfo, PageLifecycleState } from \"./metadata.js\";\nimport {\n bodyPayloadFromUtf8,\n createHeaderEntry,\n matchesNetworkRecordFilters,\n type NetworkRecord,\n} from \"./network.js\";\nimport {\n findDomSnapshotNodeByRef,\n type DomSnapshot,\n type DomSnapshotNode,\n type HitTestResult,\n type HtmlSnapshot,\n type ScreenshotArtifact,\n} from \"./snapshots.js\";\nimport { filterCookieRecords, type CookieRecord, type StorageSnapshot } from \"./storage.js\";\n\ninterface FakeSessionState {\n readonly sessionRef: SessionRef;\n readonly pageRefs: Set<PageRef>;\n cookies: CookieRecord[];\n storage: StorageSnapshot;\n transportResponses: Map<string, SessionTransportResponse>;\n}\n\ninterface FakePageState {\n readonly pageRef: PageRef;\n readonly sessionRef: SessionRef;\n readonly frameRefs: Set<FrameRef>;\n readonly queuedEvents: StepEvent[];\n history: string[];\n historyIndex: number;\n lifecycleState: PageLifecycleState;\n openerPageRef?: PageRef;\n paused: boolean;\n frozen: boolean;\n viewportMetrics: ViewportMetrics;\n}\n\ninterface FakeFrameState {\n frameInfo: FrameInfo;\n}\n\ninterface FakeDocumentState {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n documentRef: DocumentRef;\n documentEpoch: DocumentEpoch;\n url: string;\n htmlSnapshot: HtmlSnapshot;\n domSnapshot: DomSnapshot;\n nodeText: Map<NodeRef, string | null>;\n nodeAttributes: Map<NodeRef, readonly { readonly name: string; readonly value: string }[]>;\n nodeRects: Map<NodeRef, Rect>;\n hitTests: Map<string, Omit<HitTestResult, \"inputPoint\" | \"inputCoordinateSpace\">>;\n networkRecords: NetworkRecord[];\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nfunction titleFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n if (parsed.hostname.length === 0) {\n return url;\n }\n return parsed.hostname;\n } catch {\n return url;\n }\n}\n\nfunction buildTransportKey(request: SessionTransportRequest): string {\n return `${request.method.toUpperCase()} ${request.url}`;\n}\n\nfunction stripFragment(url: string): string {\n const hashIndex = url.indexOf(\"#\");\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction originFromUrl(url: string): string | undefined {\n try {\n return new URL(url).origin;\n } catch {\n return undefined;\n }\n}\n\nexport class FakeBrowserCoreEngine implements BrowserCoreEngine {\n readonly capabilities: Readonly<BrowserCapabilities>;\n\n private readonly sessions = new Map<SessionRef, FakeSessionState>();\n private readonly pages = new Map<PageRef, FakePageState>();\n private readonly frames = new Map<FrameRef, FakeFrameState>();\n private readonly documents = new Map<DocumentRef, FakeDocumentState>();\n private readonly retiredDocuments = new Set<DocumentRef>();\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 stepCounter = 0;\n private eventCounter = 0;\n private timestampMs: number;\n\n constructor(options: FakeBrowserCoreEngineOptions = {}) {\n this.capabilities = options.capabilities ?? allBrowserCapabilities();\n this.timestampMs = options.timestampSeedMs ?? 1_700_000_000_000;\n\n if (options.initialPages && options.initialPages.length > 0) {\n const sessionRef = createSessionRef(`seed-${++this.sessionCounter}`);\n const storage = this.createDefaultStorage(sessionRef);\n this.sessions.set(sessionRef, {\n sessionRef,\n pageRefs: new Set<PageRef>(),\n cookies: [],\n storage,\n transportResponses: new Map(),\n });\n\n for (const page of options.initialPages) {\n void this.createPageInternal(sessionRef, {\n ...(page.url === undefined ? {} : { url: page.url }),\n ...(page.title === undefined ? {} : { title: page.title }),\n ...(page.viewportSize === undefined ? {} : { viewportSize: page.viewportSize }),\n });\n }\n }\n }\n\n enqueueStepEvents(pageRef: PageRef, events: readonly StepEvent[]): void {\n const page = this.requirePage(pageRef);\n for (const event of events) {\n this.assertEventCapability(event.kind);\n page.queuedEvents.push(clone(event));\n }\n }\n\n advanceDocumentEpoch(documentRef: DocumentRef): DocumentEpoch {\n const document = this.requireDocument(documentRef);\n const nextEpoch = nextDocumentEpoch(document.documentEpoch);\n this.rebuildDocumentState(documentRef, {\n documentRef,\n documentEpoch: nextEpoch,\n url: document.url,\n title: titleFromUrl(document.url),\n });\n return nextEpoch;\n }\n\n seedCookies(sessionRef: SessionRef, cookies: readonly CookieRecord[]): void {\n const session = this.requireSession(sessionRef);\n session.cookies = cookies.map((cookie) => clone(cookie));\n }\n\n seedTransportResponse(\n sessionRef: SessionRef,\n request: SessionTransportRequest,\n response: SessionTransportResponse,\n ): void {\n const session = this.requireSession(sessionRef);\n session.transportResponses.set(buildTransportKey(request), clone(response));\n }\n\n async addInitScript(input: BrowserInitScriptInput): Promise<BrowserInitScriptRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.initScripts\")) {\n throw unsupportedCapabilityError(\"instrumentation.initScripts\");\n }\n this.requireSession(input.sessionRef);\n return {\n registrationId: `fake-init-script-${String(++this.stepCounter)}`,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n };\n }\n\n async registerRoute(input: BrowserRouteRegistrationInput): Promise<BrowserRouteRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.routing\")) {\n throw unsupportedCapabilityError(\"instrumentation.routing\");\n }\n this.requireSession(input.sessionRef);\n return {\n routeId: `fake-route-${String(++this.stepCounter)}`,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n };\n }\n\n async createSession(): Promise<SessionRef> {\n this.requireCapability(\"executor.sessionLifecycle\");\n const sessionRef = createSessionRef(`fake-${++this.sessionCounter}`);\n this.sessions.set(sessionRef, {\n sessionRef,\n pageRefs: new Set<PageRef>(),\n cookies: [],\n storage: this.createDefaultStorage(sessionRef),\n transportResponses: new Map(),\n });\n return sessionRef;\n }\n\n async closeSession(input: { readonly sessionRef: SessionRef }): Promise<void> {\n this.requireCapability(\"executor.sessionLifecycle\");\n const session = this.requireSession(input.sessionRef);\n\n for (const pageRef of session.pageRefs) {\n this.destroyPage(pageRef);\n }\n\n this.sessions.delete(input.sessionRef);\n }\n\n async createPage(input: {\n readonly sessionRef: SessionRef;\n readonly openerPageRef?: PageRef;\n readonly url?: string;\n }): Promise<StepResult<PageInfo>> {\n this.requireCapability(\"executor.pageLifecycle\");\n const session = this.requireSession(input.sessionRef);\n const page = this.createPageInternal(session.sessionRef, {\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n ...(input.url === undefined ? {} : { url: input.url }),\n });\n\n const events: StepEvent[] = [];\n const pageCreatedEvent = this.maybeCreateEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: page.pageInfo.pageRef,\n });\n if (pageCreatedEvent) {\n events.push(pageCreatedEvent);\n }\n\n if (input.openerPageRef) {\n const popupOpenedEvent = this.maybeCreateEvent<\"popup-opened\">({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: page.pageInfo.pageRef,\n openerPageRef: input.openerPageRef,\n });\n if (popupOpenedEvent) {\n events.push(popupOpenedEvent);\n }\n }\n\n return this.createStepResult(session.sessionRef, page.pageInfo.pageRef, {\n frameRef: page.frameInfo.frameRef,\n documentRef: page.frameInfo.documentRef,\n documentEpoch: page.frameInfo.documentEpoch,\n events,\n data: clone(page.pageInfo),\n });\n }\n\n async closePage(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.pageLifecycle\");\n const page = this.requirePage(input.pageRef);\n const frameInfo = this.getMainFrameInfo(page.pageRef);\n const sessionRef = page.sessionRef;\n this.destroyPage(page.pageRef);\n const pageClosedEvent = this.maybeCreateEvent({\n kind: \"page-closed\",\n sessionRef,\n pageRef: page.pageRef,\n });\n return this.createStepResult(sessionRef, page.pageRef, {\n frameRef: frameInfo.frameRef,\n documentRef: frameInfo.documentRef,\n documentEpoch: frameInfo.documentEpoch,\n events: pageClosedEvent ? [pageClosedEvent] : [],\n data: undefined,\n });\n }\n\n async activatePage(input: { readonly pageRef: PageRef }): Promise<StepResult<PageInfo>> {\n this.requireCapability(\"executor.pageLifecycle\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: clone(this.pageInfoFromState(page)),\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 return this.performNavigation(input.pageRef, input.url, {\n forceNewDocument: false,\n recordHistory: true,\n ...(input.referrer === undefined ? {} : { referrer: input.referrer }),\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 page = this.requirePage(input.pageRef);\n const pageInfo = this.pageInfoFromState(page);\n return this.performNavigation(input.pageRef, pageInfo.url, {\n forceNewDocument: true,\n recordHistory: false,\n });\n }\n\n async goBack(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n if (page.historyIndex === 0) {\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: false,\n });\n }\n\n page.historyIndex -= 1;\n const url = page.history[page.historyIndex]!;\n const result = await this.performNavigation(input.pageRef, url, {\n forceNewDocument: false,\n recordHistory: false,\n });\n return {\n ...result,\n data: true,\n };\n }\n\n async goForward(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n if (page.historyIndex >= page.history.length - 1) {\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: false,\n });\n }\n\n page.historyIndex += 1;\n const url = page.history[page.historyIndex]!;\n const result = await this.performNavigation(input.pageRef, url, {\n forceNewDocument: false,\n recordHistory: false,\n });\n return {\n ...result,\n data: true,\n };\n }\n\n async stopLoading(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.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 this.requireCapability(\"executor.pointerInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async mouseClick(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly button?: \"left\" | \"middle\" | \"right\";\n readonly clickCount?: number;\n readonly modifiers?: readonly (\"Shift\" | \"Control\" | \"Alt\" | \"Meta\")[];\n }): Promise<StepResult<HitTestResult | undefined>> {\n this.requireCapability(\"executor.pointerInput\");\n const page = this.requirePage(input.pageRef);\n const hitTest = await this.hitTest({\n pageRef: input.pageRef,\n point: input.point,\n coordinateSpace: input.coordinateSpace,\n });\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: hitTest,\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 this.requireCapability(\"executor.pointerInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrame(page.pageRef);\n const nextScroll = createScrollOffset(\n page.viewportMetrics.scrollOffset.x + input.delta.x,\n page.viewportMetrics.scrollOffset.y + input.delta.y,\n );\n page.viewportMetrics = {\n ...page.viewportMetrics,\n scrollOffset: nextScroll,\n layoutViewport: {\n ...page.viewportMetrics.layoutViewport,\n origin: createPoint(nextScroll.x, nextScroll.y),\n },\n visualViewport: {\n ...page.viewportMetrics.visualViewport,\n origin: createPoint(nextScroll.x, nextScroll.y),\n },\n };\n this.rebuildDocumentState(mainFrame.frameInfo.documentRef, {\n documentRef: mainFrame.frameInfo.documentRef,\n documentEpoch: mainFrame.frameInfo.documentEpoch,\n url: mainFrame.frameInfo.url,\n title: titleFromUrl(mainFrame.frameInfo.url),\n });\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameInfo.frameRef,\n documentRef: mainFrame.frameInfo.documentRef,\n documentEpoch: mainFrame.frameInfo.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async keyPress(input: {\n readonly pageRef: PageRef;\n readonly key: string;\n readonly modifiers?: readonly (\"Shift\" | \"Control\" | \"Alt\" | \"Meta\")[];\n }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.keyboardInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async textInput(input: {\n readonly pageRef: PageRef;\n readonly text: string;\n }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.keyboardInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async captureScreenshot(input: {\n readonly pageRef: PageRef;\n readonly format?: \"png\" | \"jpeg\" | \"webp\";\n readonly clip?: Rect;\n readonly clipSpace?: CoordinateSpace;\n readonly fullPage?: boolean;\n readonly includeCursor?: boolean;\n }): Promise<StepResult<ScreenshotArtifact>> {\n this.requireCapability(\"executor.screenshots\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const targetSize = input.fullPage\n ? page.viewportMetrics.contentSize\n : page.viewportMetrics.visualViewport.size;\n const payload = bodyPayloadFromUtf8(\n JSON.stringify({\n pageRef: page.pageRef,\n url: mainFrame.url,\n format: input.format ?? \"webp\",\n includeCursor: input.includeCursor ?? false,\n }),\n { mimeType: `image/${input.format ?? \"webp\"}` },\n );\n const artifact: ScreenshotArtifact = {\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n payload,\n format: input.format ?? \"webp\",\n size: targetSize,\n coordinateSpace: input.clipSpace ?? \"layout-viewport-css\",\n ...(input.clip === undefined ? {} : { clip: input.clip }),\n };\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: artifact,\n });\n }\n\n async setExecutionState(input: {\n readonly pageRef: PageRef;\n readonly paused?: boolean;\n readonly frozen?: boolean;\n }): Promise<\n StepResult<{\n readonly paused: boolean;\n readonly frozen: boolean;\n }>\n > {\n const page = this.requirePage(input.pageRef);\n const pausedChanged = input.paused !== undefined && input.paused !== page.paused;\n const frozenChanged = input.frozen !== undefined && input.frozen !== page.frozen;\n const nextPaused = input.paused ?? page.paused;\n const nextFrozen = input.frozen ?? page.frozen;\n\n if (pausedChanged) {\n this.requireCapability(\n nextPaused ? \"executor.executionControl.pause\" : \"executor.executionControl.resume\",\n );\n }\n if (frozenChanged) {\n this.requireCapability(\"executor.executionControl.freeze\");\n }\n\n page.paused = nextPaused;\n page.frozen = nextFrozen;\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const events = this.drainQueuedEvents(page.pageRef);\n\n if (pausedChanged) {\n const executionEvent = this.maybeCreateEvent({\n kind: nextPaused ? \"paused\" : \"resumed\",\n sessionRef: page.sessionRef,\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n });\n if (executionEvent) {\n events.push(executionEvent);\n }\n }\n\n if (frozenChanged && nextFrozen) {\n const frozenEvent = this.maybeCreateEvent({\n kind: \"frozen\",\n sessionRef: page.sessionRef,\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n });\n if (frozenEvent) {\n events.push(frozenEvent);\n }\n }\n\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events,\n data: {\n paused: page.paused,\n frozen: page.frozen,\n },\n });\n }\n\n async listPages(input: { readonly sessionRef: SessionRef }): Promise<readonly PageInfo[]> {\n this.requireCapability(\"inspector.pageEnumeration\");\n const session = this.requireSession(input.sessionRef);\n return Array.from(session.pageRefs, (pageRef) =>\n clone(this.pageInfoFromState(this.requirePage(pageRef))),\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 this.requireCapability(\"inspector.frameEnumeration\");\n const page = this.requirePage(input.pageRef);\n return Array.from(page.frameRefs, (frameRef) => clone(this.requireFrame(frameRef).frameInfo));\n }\n\n async getPageInfo(input: { readonly pageRef: PageRef }): Promise<PageInfo> {\n this.requireCapability(\"inspector.pageEnumeration\");\n return clone(this.pageInfoFromState(this.requirePage(input.pageRef)));\n }\n\n async getFrameInfo(input: { readonly frameRef: FrameRef }): Promise<FrameInfo> {\n this.requireCapability(\"inspector.frameEnumeration\");\n return clone(this.requireFrame(input.frameRef).frameInfo);\n }\n\n async getHtmlSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<HtmlSnapshot> {\n this.requireCapability(\"inspector.html\");\n const document = this.resolveDocumentInput(input);\n return clone(document.htmlSnapshot);\n }\n\n async getDomSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<DomSnapshot> {\n this.requireCapability(\"inspector.domSnapshot\");\n const document = this.resolveDocumentInput(input);\n return clone(document.domSnapshot);\n }\n\n async getActionBoundarySnapshot(input: {\n readonly pageRef: PageRef;\n }): Promise<ActionBoundarySnapshot> {\n this.requireCapability(\"inspector.frameEnumeration\");\n const page = this.requirePage(input.pageRef);\n const mainFrameRef = Array.from(page.frameRefs).find(\n (frameRef) => this.requireFrame(frameRef).frameInfo.isMainFrame,\n );\n if (mainFrameRef === undefined) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `page ${input.pageRef} does not expose a main frame`,\n );\n }\n const frame = this.requireFrame(mainFrameRef);\n return {\n pageRef: input.pageRef,\n documentRef: frame.frameInfo.documentRef,\n url: frame.frameInfo.url,\n };\n }\n\n async waitForVisualStability(_input: {\n readonly pageRef: PageRef;\n readonly timeoutMs?: number;\n readonly settleMs?: number;\n readonly scope?: \"main-frame\" | \"visible-frames\";\n }): Promise<void> {\n this.requireCapability(\"inspector.visualStability\");\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\n async readText(input: NodeLocator): Promise<string | null> {\n this.requireCapability(\"inspector.text\");\n const document = this.requireLiveNode(input);\n return clone(document.nodeText.get(input.nodeRef) ?? null);\n }\n\n async readAttributes(\n input: NodeLocator,\n ): Promise<readonly { readonly name: string; readonly value: string }[]> {\n this.requireCapability(\"inspector.attributes\");\n const document = this.requireLiveNode(input);\n return clone(document.nodeAttributes.get(input.nodeRef) ?? []);\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 this.requireCapability(\"inspector.hitTest\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const document = this.requireDocument(mainFrame.documentRef);\n const resolvedPoint = this.resolvePoint(\n page.viewportMetrics,\n input.point,\n input.coordinateSpace,\n );\n const key = this.hitTestKey(resolvedPoint, input.ignorePointerEventsNone ?? false);\n const hit = document.hitTests.get(key);\n\n if (hit) {\n return clone({\n inputPoint: input.point,\n inputCoordinateSpace: input.coordinateSpace,\n ...hit,\n });\n }\n\n return {\n inputPoint: input.point,\n inputCoordinateSpace: input.coordinateSpace,\n resolvedPoint,\n resolvedCoordinateSpace: \"document-css\",\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n obscured: false,\n pointerEventsSkipped: false,\n };\n }\n\n async getViewportMetrics(input: { readonly pageRef: PageRef }): Promise<ViewportMetrics> {\n this.requireCapability(\"inspector.viewportMetrics\");\n return clone(this.requirePage(input.pageRef).viewportMetrics);\n }\n\n async getNetworkRecords(input: GetNetworkRecordsInput): Promise<readonly NetworkRecord[]> {\n this.requireCapability(\"inspector.network\");\n input.signal?.throwIfAborted?.();\n const session = this.requireSession(input.sessionRef);\n const records: NetworkRecord[] = [];\n const includeBodies = input.includeBodies ?? false;\n const pageRefs = input.pageRef === undefined ? Array.from(session.pageRefs) : [input.pageRef];\n const requestIds = input.requestIds === undefined ? undefined : new Set(input.requestIds);\n\n for (const pageRef of pageRefs) {\n const page = this.requirePage(pageRef);\n const mainFrame = this.getMainFrame(page.pageRef);\n const document = this.requireDocument(mainFrame.frameInfo.documentRef);\n records.push(\n ...document.networkRecords\n .filter(\n (record) =>\n (requestIds === undefined || requestIds.has(record.requestId)) &&\n matchesNetworkRecordFilters(record, input),\n )\n .map((record) => clone(record)),\n );\n }\n\n if (!includeBodies) {\n return records.map(\n ({ requestBody: _requestBody, responseBody: _responseBody, ...record }) => ({\n ...record,\n }),\n );\n }\n\n this.requireCapability(\"inspector.networkBodies\");\n return records;\n }\n\n async getCookies(input: {\n readonly sessionRef: SessionRef;\n readonly urls?: readonly string[];\n }): Promise<readonly CookieRecord[]> {\n this.requireCapability(\"inspector.cookies\");\n const session = this.requireSession(input.sessionRef);\n const cookies =\n input.urls && input.urls.length > 0\n ? filterCookieRecords(session.cookies, input.urls)\n : session.cookies;\n return cookies.map((cookie) => clone(cookie));\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 const merged = new Map(\n session.cookies.map((cookie) => [\n `${cookie.name}\\u0000${cookie.domain}\\u0000${cookie.path}`,\n clone(cookie),\n ]),\n );\n for (const cookie of input.cookies) {\n merged.set(`${cookie.name}\\u0000${cookie.domain}\\u0000${cookie.path}`, clone(cookie));\n }\n session.cookies = [...merged.values()];\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 this.requireCapability(\"inspector.localStorage\");\n\n if (input.includeSessionStorage ?? true) {\n this.requireCapability(\"inspector.sessionStorage\");\n }\n if (input.includeIndexedDb ?? true) {\n this.requireCapability(\"inspector.indexedDb\");\n }\n\n const snapshot = clone(session.storage);\n return {\n sessionRef: snapshot.sessionRef,\n capturedAt: snapshot.capturedAt,\n origins: snapshot.origins.map((origin) => ({\n origin: origin.origin,\n localStorage: origin.localStorage,\n ...((input.includeIndexedDb ?? true) && origin.indexedDb\n ? { indexedDb: origin.indexedDb }\n : {}),\n })),\n ...((input.includeSessionStorage ?? true)\n ? { sessionStorage: snapshot.sessionStorage ?? [] }\n : {}),\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 page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const value = await Promise.resolve().then(() => {\n const evaluated = (0, eval)(input.script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...args: readonly unknown[]) => unknown)(...(input.args ?? []));\n }\n return evaluated;\n });\n\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: clone(value),\n });\n }\n\n async executeRequest(input: {\n readonly sessionRef: SessionRef;\n readonly request: SessionTransportRequest;\n readonly signal?: AbortSignal;\n }): Promise<StepResult<SessionTransportResponse>> {\n this.requireCapability(\"transport.sessionHttp\");\n input.signal?.throwIfAborted?.();\n const session = this.requireSession(input.sessionRef);\n const key = buildTransportKey(input.request);\n const seededResponse = session.transportResponses.get(key);\n const response =\n seededResponse ??\n ({\n url: input.request.url,\n status: 200,\n statusText: \"OK\",\n headers: [createHeaderEntry(\"content-type\", \"text/plain; charset=utf-8\")],\n body: bodyPayloadFromUtf8(`${input.request.method.toUpperCase()} ${input.request.url}`, {\n mimeType: \"text/plain\",\n }),\n redirected: false,\n } satisfies SessionTransportResponse);\n\n const requestId = createNetworkRequestId(`transport-${++this.requestCounter}`);\n const transportRecord: NetworkRecord = {\n kind: \"http\",\n requestId,\n sessionRef: input.sessionRef,\n method: input.request.method.toUpperCase(),\n url: input.request.url,\n requestHeaders: input.request.headers ?? [],\n responseHeaders: response.headers,\n status: response.status,\n statusText: response.statusText,\n resourceType: \"fetch\",\n navigationRequest: false,\n captureState: \"complete\",\n requestBodyState: input.request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: response.body === undefined ? \"skipped\" : \"complete\",\n ...(input.request.body === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n ...(response.body === undefined ? { responseBodySkipReason: \"not-present\" } : {}),\n ...(input.request.body === undefined ? {} : { requestBody: input.request.body }),\n ...(response.body === undefined ? {} : { responseBody: response.body }),\n };\n\n for (const pageRef of session.pageRefs) {\n const mainFrame = this.getMainFrame(pageRef);\n this.requireDocument(mainFrame.frameInfo.documentRef).networkRecords.push(transportRecord);\n break;\n }\n\n return this.createStepResult(input.sessionRef, undefined, {\n events: [],\n data: clone(response),\n });\n }\n\n private createPageInternal(\n sessionRef: SessionRef,\n options: {\n readonly openerPageRef?: PageRef;\n readonly url?: string;\n readonly title?: string;\n readonly viewportSize?: Size;\n },\n ): { readonly pageInfo: PageInfo; readonly frameInfo: FrameInfo } {\n const session = this.requireSession(sessionRef);\n const pageRef = createPageRef(`fake-${++this.pageCounter}`);\n const frameRef = createFrameRef(`fake-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`fake-${++this.documentCounter}`);\n const documentEpoch = createDocumentEpoch(0);\n const url = options.url ?? \"about:blank\";\n const title = options.title ?? titleFromUrl(url);\n const viewportSize = options.viewportSize ?? createSize(1280, 720);\n const page: FakePageState = {\n pageRef,\n sessionRef,\n frameRefs: new Set([frameRef]),\n queuedEvents: [],\n history: [url],\n historyIndex: 0,\n lifecycleState: \"open\",\n paused: false,\n frozen: false,\n viewportMetrics: {\n layoutViewport: {\n origin: createPoint(0, 0),\n size: viewportSize,\n },\n visualViewport: {\n origin: createPoint(0, 0),\n offsetWithinLayoutViewport: createScrollOffset(0, 0),\n size: viewportSize,\n },\n scrollOffset: createScrollOffset(0, 0),\n contentSize: createSize(1280, 2400),\n devicePixelRatio: createDevicePixelRatio(2),\n pageScaleFactor: createPageScaleFactor(1),\n pageZoomFactor: createPageZoomFactor(1),\n },\n ...(options.openerPageRef === undefined ? {} : { openerPageRef: options.openerPageRef }),\n };\n const frameInfo: FrameInfo = {\n frameRef,\n pageRef,\n documentRef,\n documentEpoch,\n url,\n isMainFrame: true,\n };\n\n this.pages.set(pageRef, page);\n this.frames.set(frameRef, { frameInfo });\n session.pageRefs.add(pageRef);\n this.rebuildDocumentStateForFrame(pageRef, frameRef, {\n documentRef,\n documentEpoch,\n url,\n title,\n });\n session.storage = this.seedDefaultSessionStorage(session.storage, pageRef, frameRef, url);\n\n return {\n pageInfo: this.pageInfoFromState(page, url, title),\n frameInfo,\n };\n }\n\n private pageInfoFromState(page: FakePageState, url?: string, title?: string): PageInfo {\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return {\n pageRef: page.pageRef,\n sessionRef: page.sessionRef,\n url: url ?? mainFrame.url,\n title: title ?? titleFromUrl(mainFrame.url),\n lifecycleState: page.lifecycleState,\n ...(page.openerPageRef === undefined ? {} : { openerPageRef: page.openerPageRef }),\n };\n }\n\n private createDefaultStorage(sessionRef: SessionRef): StorageSnapshot {\n return {\n sessionRef,\n capturedAt: this.timestampMs,\n origins: [\n {\n origin: \"https://example.com\",\n localStorage: [\n { key: \"theme\", value: \"dark\" },\n { key: \"draft\", value: \"hello\" },\n ],\n indexedDb: [\n {\n name: \"app-db\",\n version: 1,\n objectStores: [\n {\n name: \"messages\",\n keyPath: \"id\",\n autoIncrement: false,\n indexes: [],\n records: [\n {\n key: \"1\",\n value: { id: \"1\", text: \"hello\" },\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n sessionStorage: [],\n };\n }\n\n private seedDefaultSessionStorage(\n storage: StorageSnapshot,\n pageRef: PageRef,\n frameRef: FrameRef,\n url: string,\n ): StorageSnapshot {\n const origin = originFromUrl(url);\n if (origin === undefined) {\n return storage;\n }\n\n if (\n storage.sessionStorage?.some(\n (snapshot) =>\n snapshot.pageRef === pageRef &&\n snapshot.frameRef === frameRef &&\n snapshot.origin === origin,\n )\n ) {\n return storage;\n }\n\n return {\n ...storage,\n sessionStorage: [\n ...(storage.sessionStorage ?? []),\n {\n pageRef,\n frameRef,\n origin,\n entries: [{ key: \"csrf\", value: \"token-123\" }],\n },\n ],\n };\n }\n\n private async performNavigation(\n pageRef: PageRef,\n url: string,\n options: {\n readonly referrer?: string;\n readonly forceNewDocument: boolean;\n readonly recordHistory: boolean;\n },\n ): Promise<\n StepResult<{\n readonly pageInfo: PageInfo;\n readonly mainFrame: FrameInfo;\n }>\n > {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(pageRef);\n const mainFrame = this.getMainFrame(page.pageRef);\n const currentFrameInfo = mainFrame.frameInfo;\n const currentDocument = this.requireDocument(currentFrameInfo.documentRef);\n const sameDocument =\n !options.forceNewDocument && stripFragment(currentFrameInfo.url) === stripFragment(url);\n const title = titleFromUrl(url);\n const requestBody =\n options.referrer === undefined\n ? undefined\n : bodyPayloadFromUtf8(options.referrer, { mimeType: \"text/plain\" });\n const requestHeaders =\n options.referrer === undefined ? [] : [createHeaderEntry(\"referer\", options.referrer)];\n\n let nextDocumentRef = currentFrameInfo.documentRef;\n let nextDocumentEpoch = currentFrameInfo.documentEpoch;\n\n if (sameDocument) {\n currentDocument.url = url;\n currentDocument.htmlSnapshot = {\n ...currentDocument.htmlSnapshot,\n url,\n capturedAt: this.nextTimestamp(),\n };\n currentDocument.domSnapshot = {\n ...currentDocument.domSnapshot,\n url,\n capturedAt: this.nextTimestamp(),\n };\n mainFrame.frameInfo = {\n ...currentFrameInfo,\n url,\n };\n } else {\n nextDocumentRef = createDocumentRef(`fake-${++this.documentCounter}`);\n nextDocumentEpoch = createDocumentEpoch(0);\n mainFrame.frameInfo = {\n ...currentFrameInfo,\n url,\n documentRef: nextDocumentRef,\n documentEpoch: nextDocumentEpoch,\n };\n this.rebuildDocumentStateForFrame(page.pageRef, currentFrameInfo.frameRef, {\n documentRef: nextDocumentRef,\n documentEpoch: nextDocumentEpoch,\n url,\n title,\n });\n this.retireDocument(currentFrameInfo.documentRef);\n\n const requestId = createNetworkRequestId(`fake-${++this.requestCounter}`);\n const responseBody = bodyPayloadFromUtf8(`<html><title>${title}</title></html>`, {\n mimeType: \"text/html\",\n });\n this.requireDocument(nextDocumentRef).networkRecords.push({\n kind: \"http\",\n requestId,\n sessionRef: page.sessionRef,\n pageRef: page.pageRef,\n frameRef: currentFrameInfo.frameRef,\n documentRef: nextDocumentRef,\n method: \"GET\",\n url,\n requestHeaders,\n responseHeaders: [\n createHeaderEntry(\"content-type\", \"text/html; charset=utf-8\"),\n createHeaderEntry(\"set-cookie\", \"session=abc\"),\n createHeaderEntry(\"set-cookie\", \"theme=dark\"),\n ],\n status: 200,\n statusText: \"OK\",\n resourceType: \"document\",\n navigationRequest: true,\n captureState: \"complete\",\n requestBodyState: requestBody === undefined ? \"skipped\" : \"complete\",\n responseBodyState: \"complete\",\n ...(requestBody === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n timing: {\n requestStartMs: this.timestampMs,\n responseStartMs: this.timestampMs + 5,\n responseEndMs: this.timestampMs + 10,\n },\n transfer: {\n encodedBodyBytes: responseBody.capturedByteLength,\n decodedBodyBytes: responseBody.capturedByteLength,\n transferSizeBytes: responseBody.capturedByteLength + 256,\n },\n ...(requestBody === undefined ? {} : { requestBody }),\n responseBody,\n });\n }\n\n if (options.recordHistory) {\n page.history = [...page.history.slice(0, page.historyIndex + 1), url];\n page.historyIndex = page.history.length - 1;\n }\n\n const pageInfo = this.pageInfoFromState(page, url, title);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameInfo.frameRef,\n documentRef: nextDocumentRef,\n documentEpoch: nextDocumentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: {\n pageInfo,\n mainFrame: clone(mainFrame.frameInfo),\n },\n });\n }\n\n private createDocumentSnapshot(\n pageRef: PageRef,\n frameRef: FrameRef,\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n url: string,\n title: string,\n ): Omit<FakeDocumentState, \"pageRef\" | \"frameRef\" | \"documentRef\" | \"documentEpoch\" | \"url\"> {\n const bodyRect = createRect(0, 0, 1280, 2400);\n const buttonRect = createRect(16, 16, 160, 48);\n const obscuredRect = createRect(240, 16, 160, 48);\n const titleRect = createRect(16, 96, 220, 32);\n const buttonRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const obscuredRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const documentNodeRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const htmlNodeRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const bodyNodeRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const titleRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const hiddenPanelRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const shadowHostRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const shadowActionRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const nestedShadowHostRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const nestedShadowActionRef = createNodeRef(`fake-${++this.nodeCounter}`);\n\n const nodes: DomSnapshotNode[] = [\n {\n snapshotNodeId: 1,\n nodeRef: documentNodeRef,\n childSnapshotNodeIds: [2],\n nodeType: 9,\n nodeName: \"#document\",\n nodeValue: \"\",\n attributes: [],\n },\n {\n snapshotNodeId: 2,\n nodeRef: htmlNodeRef,\n parentSnapshotNodeId: 1,\n childSnapshotNodeIds: [3],\n nodeType: 1,\n nodeName: \"HTML\",\n nodeValue: \"\",\n attributes: [],\n },\n {\n snapshotNodeId: 3,\n nodeRef: bodyNodeRef,\n parentSnapshotNodeId: 2,\n childSnapshotNodeIds: [4, 5, 6, 7, 8, 9, 10, 11],\n nodeType: 1,\n nodeName: \"BODY\",\n nodeValue: \"\",\n attributes: [],\n layout: {\n rect: bodyRect,\n quad: rectToQuad(bodyRect),\n paintOrder: 1,\n },\n },\n {\n snapshotNodeId: 4,\n nodeRef: buttonRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"BUTTON\",\n nodeValue: \"\",\n textContent: \"Continue\",\n attributes: [\n { name: \"id\", value: \"continue\" },\n { name: \"type\", value: \"button\" },\n ],\n layout: {\n rect: buttonRect,\n quad: rectToQuad(buttonRect),\n paintOrder: 2,\n },\n },\n {\n snapshotNodeId: 5,\n nodeRef: obscuredRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"Overlay\",\n attributes: [{ name: \"id\", value: \"overlay\" }],\n layout: {\n rect: obscuredRect,\n quad: rectToQuad(obscuredRect),\n paintOrder: 3,\n },\n },\n {\n snapshotNodeId: 6,\n nodeRef: titleRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"H1\",\n nodeValue: \"\",\n textContent: \"Snapshot Heading\",\n attributes: [{ name: \"id\", value: \"snapshot-title\" }],\n layout: {\n rect: titleRect,\n quad: rectToQuad(titleRect),\n paintOrder: 4,\n },\n },\n {\n snapshotNodeId: 7,\n nodeRef: hiddenPanelRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"Hidden panel\",\n computedStyle: {\n display: \"none\",\n },\n attributes: [{ name: \"id\", value: \"hidden-panel\" }],\n },\n {\n snapshotNodeId: 8,\n nodeRef: shadowHostRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"\",\n attributes: [{ name: \"id\", value: \"shadow-host\" }],\n },\n {\n snapshotNodeId: 9,\n nodeRef: shadowActionRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n shadowHostNodeRef: shadowHostRef,\n nodeType: 1,\n nodeName: \"BUTTON\",\n nodeValue: \"\",\n textContent: \"Shadow Action\",\n attributes: [{ name: \"id\", value: \"shadow-action\" }],\n },\n {\n snapshotNodeId: 10,\n nodeRef: nestedShadowHostRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"\",\n attributes: [{ name: \"id\", value: \"nested-shadow-host\" }],\n },\n {\n snapshotNodeId: 11,\n nodeRef: nestedShadowActionRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n shadowHostNodeRef: nestedShadowHostRef,\n nodeType: 1,\n nodeName: \"BUTTON\",\n nodeValue: \"\",\n textContent: \"Nested Shadow\",\n attributes: [{ name: \"id\", value: \"nested-shadow-action\" }],\n },\n ];\n\n const domSnapshot: DomSnapshot = {\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n url,\n capturedAt: this.timestampMs,\n rootSnapshotNodeId: 1,\n shadowDomMode: \"flattened\",\n geometryCoordinateSpace: \"document-css\",\n nodes,\n };\n\n const nodeText = new Map<NodeRef, string | null>([\n [buttonRef, \"Continue\"],\n [obscuredRef, \"Overlay\"],\n [titleRef, \"Snapshot Heading\"],\n [hiddenPanelRef, \"Hidden panel\"],\n [shadowHostRef, \"\"],\n [shadowActionRef, \"Shadow Action\"],\n [nestedShadowHostRef, \"\"],\n [nestedShadowActionRef, \"Nested Shadow\"],\n [documentNodeRef, null],\n [htmlNodeRef, null],\n [bodyNodeRef, null],\n ]);\n const nodeAttributes = new Map<\n NodeRef,\n readonly { readonly name: string; readonly value: string }[]\n >([\n [buttonRef, nodes[3]!.attributes],\n [obscuredRef, nodes[4]!.attributes],\n [titleRef, nodes[5]!.attributes],\n [hiddenPanelRef, nodes[6]!.attributes],\n [shadowHostRef, nodes[7]!.attributes],\n [shadowActionRef, nodes[8]!.attributes],\n [nestedShadowHostRef, nodes[9]!.attributes],\n [nestedShadowActionRef, nodes[10]!.attributes],\n [documentNodeRef, []],\n [htmlNodeRef, []],\n [bodyNodeRef, []],\n ]);\n const nodeRects = new Map<NodeRef, Rect>([\n [buttonRef, buttonRect],\n [obscuredRef, obscuredRect],\n [titleRef, titleRect],\n [bodyNodeRef, bodyRect],\n ]);\n const hitTests = new Map<string, Omit<HitTestResult, \"inputPoint\" | \"inputCoordinateSpace\">>([\n [\n this.hitTestKey(createPoint(20, 20), false),\n {\n resolvedPoint: createPoint(20, 20),\n resolvedCoordinateSpace: \"document-css\",\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n nodeRef: buttonRef,\n targetQuad: rectToQuad(buttonRect),\n obscured: false,\n pointerEventsSkipped: false,\n },\n ],\n [\n this.hitTestKey(createPoint(260, 20), false),\n {\n resolvedPoint: createPoint(260, 20),\n resolvedCoordinateSpace: \"document-css\",\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n nodeRef: obscuredRef,\n targetQuad: rectToQuad(obscuredRect),\n obscured: true,\n pointerEventsSkipped: false,\n },\n ],\n [\n this.hitTestKey(createPoint(20, 20), true),\n {\n resolvedPoint: createPoint(20, 20),\n resolvedCoordinateSpace: \"document-css\",\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n nodeRef: buttonRef,\n targetQuad: rectToQuad(buttonRect),\n obscured: false,\n pointerEventsSkipped: true,\n },\n ],\n ]);\n\n return {\n htmlSnapshot: {\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n url,\n capturedAt: this.timestampMs,\n html:\n `<html><head><title>${title}</title></head><body>` +\n `<button id=\"continue\" type=\"button\">Continue</button>` +\n `<div id=\"overlay\">Overlay</div>` +\n `<h1 id=\"snapshot-title\">Snapshot Heading</h1>` +\n `<div id=\"hidden-panel\" style=\"display:none\">Hidden panel</div>` +\n `<div id=\"shadow-host\"></div>` +\n `<button id=\"shadow-action\">Shadow Action</button>` +\n `<div id=\"nested-shadow-host\"></div>` +\n `<button id=\"nested-shadow-action\">Nested Shadow</button>` +\n `</body></html>`,\n },\n domSnapshot,\n nodeText,\n nodeAttributes,\n nodeRects,\n hitTests,\n networkRecords: [],\n };\n }\n\n private rebuildDocumentStateForFrame(\n pageRef: PageRef,\n frameRef: FrameRef,\n input: {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly title: string;\n },\n ): void {\n const nextState = this.createDocumentSnapshot(\n pageRef,\n frameRef,\n input.documentRef,\n input.documentEpoch,\n input.url,\n input.title,\n );\n\n this.retiredDocuments.delete(input.documentRef);\n this.documents.set(input.documentRef, {\n pageRef,\n frameRef,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n url: input.url,\n ...nextState,\n });\n }\n\n private rebuildDocumentState(\n documentRef: DocumentRef,\n input: {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly title: string;\n },\n ): void {\n const existing = this.requireDocument(documentRef);\n this.rebuildDocumentStateForFrame(existing.pageRef, existing.frameRef, input);\n const frame = this.requireFrame(existing.frameRef);\n frame.frameInfo = {\n ...frame.frameInfo,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n url: input.url,\n };\n }\n\n private resolveDocumentInput(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): FakeDocumentState {\n if (input.frameRef && input.documentRef) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either frameRef or documentRef, not both\",\n );\n }\n\n if (input.documentRef) {\n return this.requireDocument(input.documentRef);\n }\n\n if (input.frameRef) {\n return this.requireDocument(this.requireFrame(input.frameRef).frameInfo.documentRef);\n }\n\n throw createBrowserCoreError(\"invalid-argument\", \"either frameRef or documentRef is required\");\n }\n\n private requireLiveNode(input: NodeLocator): FakeDocumentState {\n if (this.retiredDocuments.has(input.documentRef)) {\n throw staleNodeRefError(input);\n }\n\n const document = this.requireDocument(input.documentRef);\n if (document.documentEpoch !== input.documentEpoch) {\n throw staleNodeRefError(input);\n }\n\n const node = findDomSnapshotNodeByRef(document.domSnapshot, input.nodeRef);\n if (!node) {\n throw staleNodeRefError(input);\n }\n\n return document;\n }\n\n private resolvePoint(\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 case \"visual-viewport-css\":\n return createPoint(point.x + metrics.scrollOffset.x, point.y + metrics.scrollOffset.y);\n case \"computer-display-css\":\n throw createBrowserCoreError(\n \"unsupported-capability\",\n `coordinate space ${coordinateSpace} is not supported by the fake engine`,\n {\n details: {\n coordinateSpace,\n },\n },\n );\n case \"window\":\n case \"screen\":\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 }\n\n throw createBrowserCoreError(\n \"invalid-argument\",\n `coordinate space ${coordinateSpace} is not supported by the fake engine`,\n );\n }\n\n private hitTestKey(point: Point, ignorePointerEventsNone: boolean): string {\n return `${Math.round(point.x)}:${Math.round(point.y)}:${ignorePointerEventsNone ? \"ignore\" : \"respect\"}`;\n }\n\n private requireCapability(path: BrowserCapabilityPath): void {\n if (!hasCapability(this.capabilities, path)) {\n throw unsupportedCapabilityError(path);\n }\n }\n\n private assertEventCapability(kind: StepEvent[\"kind\"]): void {\n const capability = this.eventCapabilityForKind(kind);\n if (!hasCapability(this.capabilities, capability)) {\n throw unsupportedCapabilityError(capability);\n }\n }\n\n private eventCapabilityForKind(kind: StepEvent[\"kind\"]): BrowserCapabilityPath {\n switch (kind) {\n case \"page-created\":\n case \"popup-opened\":\n case \"page-closed\":\n return \"events.pageLifecycle\";\n case \"dialog-opened\":\n return \"events.dialog\";\n case \"download-started\":\n case \"download-finished\":\n return \"events.download\";\n case \"chooser-opened\":\n return \"events.chooser\";\n case \"worker-created\":\n case \"worker-destroyed\":\n return \"events.worker\";\n case \"console\":\n return \"events.console\";\n case \"page-error\":\n return \"events.pageError\";\n case \"websocket-opened\":\n case \"websocket-frame\":\n case \"websocket-closed\":\n return \"events.websocket\";\n case \"event-stream-message\":\n return \"events.eventStream\";\n case \"paused\":\n case \"resumed\":\n case \"frozen\":\n return \"events.executionState\";\n }\n }\n\n private createEvent<TKind extends StepEvent[\"kind\"]>(\n value: Omit<Extract<StepEvent, { readonly kind: TKind }>, \"eventId\" | \"timestamp\">,\n ): Extract<StepEvent, { readonly kind: TKind }> {\n this.assertEventCapability(value.kind);\n return {\n ...value,\n eventId: `event:${++this.eventCounter}`,\n timestamp: this.nextTimestamp(),\n } as Extract<StepEvent, { readonly kind: TKind }>;\n }\n\n private maybeCreateEvent<TKind extends StepEvent[\"kind\"]>(\n value: Omit<Extract<StepEvent, { readonly kind: TKind }>, \"eventId\" | \"timestamp\">,\n ): Extract<StepEvent, { readonly kind: TKind }> | undefined {\n if (!hasCapability(this.capabilities, this.eventCapabilityForKind(value.kind))) {\n return undefined;\n }\n\n return this.createEvent(value);\n }\n\n private createStepResult<TData>(\n sessionRef: SessionRef,\n pageRef: PageRef | undefined,\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 startedAt = this.nextTimestamp();\n const completedAt = this.nextTimestamp();\n return {\n stepId: `step:${++this.stepCounter}`,\n sessionRef,\n startedAt,\n completedAt,\n durationMs: completedAt - startedAt,\n events: input.events.map((event) => clone(event)),\n data: clone(input.data),\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 };\n }\n\n private drainQueuedEvents(pageRef: PageRef): StepEvent[] {\n const page = this.requirePage(pageRef);\n const events = page.queuedEvents.splice(0, page.queuedEvents.length);\n return events.map((event) => clone(event));\n }\n\n private requireSession(sessionRef: SessionRef): FakeSessionState {\n const session = this.sessions.get(sessionRef);\n if (!session) {\n throw closedSessionError(sessionRef);\n }\n return session;\n }\n\n private requirePage(pageRef: PageRef): FakePageState {\n const page = this.pages.get(pageRef);\n if (!page || page.lifecycleState === \"closed\") {\n throw closedPageError(pageRef);\n }\n return page;\n }\n\n private requireFrame(frameRef: FrameRef): FakeFrameState {\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): FakeDocumentState {\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 getMainFrame(pageRef: PageRef): FakeFrameState {\n const page = this.requirePage(pageRef);\n const mainFrameRef = Array.from(page.frameRefs).find(\n (frameRef) => this.requireFrame(frameRef).frameInfo.isMainFrame,\n );\n if (!mainFrameRef) {\n throw createBrowserCoreError(\"operation-failed\", `page ${pageRef} has no main frame`);\n }\n return this.requireFrame(mainFrameRef);\n }\n\n private getMainFrameInfo(pageRef: PageRef): FrameInfo {\n return clone(this.getMainFrame(pageRef).frameInfo);\n }\n\n private destroyPage(pageRef: PageRef): void {\n const page = this.requirePage(pageRef);\n page.lifecycleState = \"closed\";\n this.pages.delete(pageRef);\n const session = this.requireSession(page.sessionRef);\n session.pageRefs.delete(pageRef);\n\n for (const frameRef of page.frameRefs) {\n const frame = this.frames.get(frameRef);\n if (!frame) {\n continue;\n }\n this.documents.delete(frame.frameInfo.documentRef);\n this.frames.delete(frameRef);\n }\n }\n\n private retireDocument(documentRef: DocumentRef): void {\n this.documents.delete(documentRef);\n this.retiredDocuments.add(documentRef);\n }\n\n private nextTimestamp(): number {\n return (this.timestampMs += 5);\n }\n}\n\nexport function createFakeBrowserCoreEngine(\n options: FakeBrowserCoreEngineOptions = {},\n): FakeBrowserCoreEngine {\n const capabilities = options.capabilities ?? allBrowserCapabilities();\n return new FakeBrowserCoreEngine({ ...options, capabilities });\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/brand.ts","../src/identity.ts","../src/geometry.ts","../src/network.ts","../src/snapshots.ts","../src/storage.ts","../src/capabilities.ts","../src/errors.ts","../src/fake-engine.ts","../src/cdp-dom-snapshot.ts","../src/cdp-visual-stability.ts","../src/post-load-tracker.ts","../src/action-boundary.ts"],"names":["nextDocumentEpoch"],"mappings":"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","file":"index.js","sourcesContent":["declare const brandSymbol: unique symbol;\n\nexport type Brand<Value, Name extends string> = Value & {\n readonly [brandSymbol]: Name;\n};\n\nexport function brand<Value, Name extends string>(value: Value): Brand<Value, Name> {\n return value as Brand<Value, Name>;\n}\n","import { brand, type Brand } from \"./brand.js\";\n\ntype StringRefKind =\n | \"SessionRef\"\n | \"PageRef\"\n | \"FrameRef\"\n | \"DocumentRef\"\n | \"NodeRef\"\n | \"NetworkRequestId\"\n | \"DownloadRef\"\n | \"DialogRef\"\n | \"ChooserRef\"\n | \"WorkerRef\";\n\nexport type SessionRef = Brand<string, \"SessionRef\">;\nexport type PageRef = Brand<string, \"PageRef\">;\nexport type FrameRef = Brand<string, \"FrameRef\">;\nexport type DocumentRef = Brand<string, \"DocumentRef\">;\nexport type NodeRef = Brand<string, \"NodeRef\">;\nexport type NetworkRequestId = Brand<string, \"NetworkRequestId\">;\nexport type DownloadRef = Brand<string, \"DownloadRef\">;\nexport type DialogRef = Brand<string, \"DialogRef\">;\nexport type ChooserRef = Brand<string, \"ChooserRef\">;\nexport type WorkerRef = Brand<string, \"WorkerRef\">;\nexport type DocumentEpoch = Brand<number, \"DocumentEpoch\">;\n\nexport interface NodeLocator {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n}\n\nconst REF_PREFIXES = {\n session: \"session\",\n page: \"page\",\n frame: \"frame\",\n document: \"document\",\n node: \"node\",\n request: \"request\",\n download: \"download\",\n dialog: \"dialog\",\n chooser: \"chooser\",\n worker: \"worker\",\n} as const;\n\ntype RefPrefix = (typeof REF_PREFIXES)[keyof typeof REF_PREFIXES];\n\nfunction normalizeRef(prefix: RefPrefix, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new TypeError(`${prefix} reference cannot be empty`);\n }\n\n const canonicalPrefix = `${prefix}:`;\n if (trimmed.startsWith(canonicalPrefix)) {\n if (trimmed.length === canonicalPrefix.length) {\n throw new TypeError(`${prefix} reference must include an identifier`);\n }\n return trimmed;\n }\n\n if (trimmed.includes(\":\")) {\n throw new TypeError(\n `${prefix} reference \"${trimmed}\" must either omit a prefix or use ${canonicalPrefix}`,\n );\n }\n\n return `${canonicalPrefix}${trimmed}`;\n}\n\nfunction hasPrefix(prefix: RefPrefix, value: string): boolean {\n return value.startsWith(`${prefix}:`) && value.length > prefix.length + 1;\n}\n\nfunction createStringRef<Name extends StringRefKind>(\n prefix: RefPrefix,\n value: string,\n): Brand<string, Name> {\n return brand<string, Name>(normalizeRef(prefix, value));\n}\n\nexport function createSessionRef(value: string): SessionRef {\n return createStringRef(\"session\", value);\n}\n\nexport function createPageRef(value: string): PageRef {\n return createStringRef(\"page\", value);\n}\n\nexport function createFrameRef(value: string): FrameRef {\n return createStringRef(\"frame\", value);\n}\n\nexport function createDocumentRef(value: string): DocumentRef {\n return createStringRef(\"document\", value);\n}\n\nexport function createNodeRef(value: string): NodeRef {\n return createStringRef(\"node\", value);\n}\n\nexport function createNetworkRequestId(value: string): NetworkRequestId {\n return createStringRef(\"request\", value);\n}\n\nexport function createDownloadRef(value: string): DownloadRef {\n return createStringRef(\"download\", value);\n}\n\nexport function createDialogRef(value: string): DialogRef {\n return createStringRef(\"dialog\", value);\n}\n\nexport function createChooserRef(value: string): ChooserRef {\n return createStringRef(\"chooser\", value);\n}\n\nexport function createWorkerRef(value: string): WorkerRef {\n return createStringRef(\"worker\", value);\n}\n\nexport function isSessionRef(value: string): value is SessionRef {\n return hasPrefix(\"session\", value);\n}\n\nexport function isPageRef(value: string): value is PageRef {\n return hasPrefix(\"page\", value);\n}\n\nexport function isFrameRef(value: string): value is FrameRef {\n return hasPrefix(\"frame\", value);\n}\n\nexport function isDocumentRef(value: string): value is DocumentRef {\n return hasPrefix(\"document\", value);\n}\n\nexport function isNodeRef(value: string): value is NodeRef {\n return hasPrefix(\"node\", value);\n}\n\nexport function isNetworkRequestId(value: string): value is NetworkRequestId {\n return hasPrefix(\"request\", value);\n}\n\nexport function isDownloadRef(value: string): value is DownloadRef {\n return hasPrefix(\"download\", value);\n}\n\nexport function isDialogRef(value: string): value is DialogRef {\n return hasPrefix(\"dialog\", value);\n}\n\nexport function isChooserRef(value: string): value is ChooserRef {\n return hasPrefix(\"chooser\", value);\n}\n\nexport function isWorkerRef(value: string): value is WorkerRef {\n return hasPrefix(\"worker\", value);\n}\n\nexport function serializeRef(\n ref:\n | SessionRef\n | PageRef\n | FrameRef\n | DocumentRef\n | NodeRef\n | NetworkRequestId\n | DownloadRef\n | DialogRef\n | ChooserRef\n | WorkerRef,\n): string {\n return ref;\n}\n\nexport function createDocumentEpoch(value: number): DocumentEpoch {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(\n `document epoch must be a non-negative integer, received ${String(value)}`,\n );\n }\n return brand<number, \"DocumentEpoch\">(value);\n}\n\nexport function nextDocumentEpoch(epoch: DocumentEpoch): DocumentEpoch {\n return createDocumentEpoch(epoch + 1);\n}\n\nexport function serializeDocumentEpoch(epoch: DocumentEpoch): number {\n return epoch;\n}\n\nexport function createNodeLocator(\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n nodeRef: NodeRef,\n): NodeLocator {\n return { documentRef, documentEpoch, nodeRef };\n}\n","import { brand, type Brand } from \"./brand.js\";\n\nexport interface Point {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface Size {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Rect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport type Quad = readonly [Point, Point, Point, Point];\n\nexport interface ScrollOffset {\n readonly x: number;\n readonly y: number;\n}\n\nexport type CoordinateSpace =\n | \"document-css\"\n | \"layout-viewport-css\"\n | \"visual-viewport-css\"\n | \"computer-display-css\"\n | \"window\"\n | \"screen\"\n | \"device-pixel\";\n\nexport interface LayoutViewport {\n readonly origin: Point;\n readonly size: Size;\n}\n\nexport interface VisualViewport {\n readonly origin: Point;\n readonly offsetWithinLayoutViewport: ScrollOffset;\n readonly size: Size;\n}\n\nexport type DevicePixelRatio = Brand<number, \"DevicePixelRatio\">;\nexport type PageScaleFactor = Brand<number, \"PageScaleFactor\">;\nexport type PageZoomFactor = Brand<number, \"PageZoomFactor\">;\n\nexport interface ViewportMetrics {\n readonly layoutViewport: LayoutViewport;\n readonly visualViewport: VisualViewport;\n readonly scrollOffset: ScrollOffset;\n readonly contentSize: Size;\n readonly devicePixelRatio: DevicePixelRatio;\n readonly pageScaleFactor: PageScaleFactor;\n readonly pageZoomFactor: PageZoomFactor;\n}\n\nfunction assertFinite(value: number, name: string): void {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${name} must be a finite number`);\n }\n}\n\nfunction assertNonNegative(value: number, name: string): void {\n assertFinite(value, name);\n if (value < 0) {\n throw new RangeError(`${name} must be greater than or equal to 0`);\n }\n}\n\nfunction createScale<Name extends string>(value: number, name: string) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(`${name} must be greater than 0`);\n }\n return brand<number, Name>(value);\n}\n\nexport function createPoint(x: number, y: number): Point {\n assertFinite(x, \"point.x\");\n assertFinite(y, \"point.y\");\n return { x, y };\n}\n\nexport function createSize(width: number, height: number): Size {\n assertNonNegative(width, \"size.width\");\n assertNonNegative(height, \"size.height\");\n return { width, height };\n}\n\nexport function createRect(x: number, y: number, width: number, height: number): Rect {\n assertFinite(x, \"rect.x\");\n assertFinite(y, \"rect.y\");\n assertNonNegative(width, \"rect.width\");\n assertNonNegative(height, \"rect.height\");\n return { x, y, width, height };\n}\n\nexport function createScrollOffset(x: number, y: number): ScrollOffset {\n assertFinite(x, \"scrollOffset.x\");\n assertFinite(y, \"scrollOffset.y\");\n return { x, y };\n}\n\nexport function createQuad(points: readonly [Point, Point, Point, Point]): Quad {\n return points;\n}\n\nexport function rectToQuad(rect: Rect): Quad {\n return createQuad([\n createPoint(rect.x, rect.y),\n createPoint(rect.x + rect.width, rect.y),\n createPoint(rect.x + rect.width, rect.y + rect.height),\n createPoint(rect.x, rect.y + rect.height),\n ]);\n}\n\nexport function quadBounds(quad: Quad): Rect {\n const xs = quad.map((point) => point.x);\n const ys = quad.map((point) => point.y);\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs);\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys);\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nexport function rectContainsPoint(rect: Rect, point: Point): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\nexport function createDevicePixelRatio(value: number): DevicePixelRatio {\n return createScale<\"DevicePixelRatio\">(value, \"devicePixelRatio\");\n}\n\nexport function createPageScaleFactor(value: number): PageScaleFactor {\n return createScale<\"PageScaleFactor\">(value, \"pageScaleFactor\");\n}\n\nexport function createPageZoomFactor(value: number): PageZoomFactor {\n return createScale<\"PageZoomFactor\">(value, \"pageZoomFactor\");\n}\n","import type {\n DocumentRef,\n FrameRef,\n NetworkRequestId,\n PageRef,\n SessionRef,\n WorkerRef,\n} from \"./identity.js\";\n\nexport interface HeaderEntry {\n readonly name: string;\n readonly value: string;\n}\n\nexport type BodyPayloadEncoding = \"identity\" | \"base64\" | \"gzip\" | \"deflate\" | \"brotli\" | \"unknown\";\n\nexport interface BodyPayload {\n readonly bytes: Uint8Array;\n readonly encoding: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated: boolean;\n readonly capturedByteLength: number;\n readonly originalByteLength?: number;\n}\n\nexport type NetworkCaptureState = \"pending\" | \"complete\" | \"failed\" | \"skipped\";\n\nexport type NetworkRecordKind = \"http\" | \"websocket\" | \"event-stream\";\n\nexport type NetworkResourceType =\n | \"document\"\n | \"stylesheet\"\n | \"image\"\n | \"media\"\n | \"font\"\n | \"script\"\n | \"fetch\"\n | \"xhr\"\n | \"websocket\"\n | \"event-stream\"\n | \"manifest\"\n | \"texttrack\"\n | \"beacon\"\n | \"ping\"\n | \"preflight\"\n | \"other\";\n\nexport type NetworkInitiatorType =\n | \"parser\"\n | \"script\"\n | \"preload\"\n | \"redirect\"\n | \"user\"\n | \"service-worker\"\n | \"other\";\n\nexport interface NetworkInitiator {\n readonly type: NetworkInitiatorType;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly requestId?: NetworkRequestId;\n readonly stackTrace?: readonly string[];\n}\n\nexport interface NetworkTiming {\n readonly requestStartMs?: number;\n readonly dnsStartMs?: number;\n readonly dnsEndMs?: number;\n readonly connectStartMs?: number;\n readonly connectEndMs?: number;\n readonly sslStartMs?: number;\n readonly sslEndMs?: number;\n readonly requestSentMs?: number;\n readonly responseStartMs?: number;\n readonly responseEndMs?: number;\n readonly workerStartMs?: number;\n readonly workerReadyMs?: number;\n}\n\nexport interface NetworkTransferSizes {\n readonly requestHeadersBytes?: number;\n readonly responseHeadersBytes?: number;\n readonly encodedBodyBytes?: number;\n readonly decodedBodyBytes?: number;\n readonly transferSizeBytes?: number;\n}\n\nexport interface NetworkSourceMetadata {\n readonly protocol?: string;\n readonly remoteAddress?: {\n readonly ip?: string;\n readonly port?: number;\n };\n readonly fromServiceWorker?: boolean;\n readonly fromDiskCache?: boolean;\n readonly fromMemoryCache?: boolean;\n readonly workerRef?: WorkerRef;\n}\n\nexport interface NetworkRecord {\n readonly kind: NetworkRecordKind;\n readonly requestId: NetworkRequestId;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly method: string;\n readonly url: string;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly status?: number;\n readonly statusText?: string;\n readonly resourceType: NetworkResourceType;\n readonly redirectFromRequestId?: NetworkRequestId;\n readonly redirectToRequestId?: NetworkRequestId;\n readonly navigationRequest: boolean;\n readonly initiator?: NetworkInitiator;\n readonly timing?: NetworkTiming;\n readonly transfer?: NetworkTransferSizes;\n readonly source?: NetworkSourceMetadata;\n readonly captureState: NetworkCaptureState;\n readonly requestBodyState: NetworkCaptureState;\n readonly responseBodyState: NetworkCaptureState;\n readonly requestBodySkipReason?: string;\n readonly responseBodySkipReason?: string;\n readonly requestBodyError?: string;\n readonly responseBodyError?: string;\n readonly requestBody?: BodyPayload;\n readonly responseBody?: BodyPayload;\n}\n\nexport interface NetworkRecordFilterInput {\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkResourceType;\n}\n\nexport function createHeaderEntry(name: string, value: string): HeaderEntry {\n return { name, value };\n}\n\nexport function createBodyPayload(\n bytes: Uint8Array,\n options: {\n encoding?: BodyPayloadEncoding;\n mimeType?: string;\n charset?: string;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return {\n bytes,\n encoding: options.encoding ?? \"identity\",\n truncated: options.truncated ?? false,\n capturedByteLength: bytes.byteLength,\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.charset === undefined ? {} : { charset: options.charset }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n };\n}\n\nexport function bodyPayloadFromUtf8(\n value: string,\n options: {\n mimeType?: string;\n encoding?: BodyPayloadEncoding;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return createBodyPayload(new TextEncoder().encode(value), {\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.encoding === undefined ? {} : { encoding: options.encoding }),\n ...(options.truncated === undefined ? {} : { truncated: options.truncated }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n charset: \"utf-8\",\n });\n}\n\nexport function matchesNetworkRecordFilters(\n record: Pick<NetworkRecord, \"url\" | \"method\" | \"status\" | \"resourceType\">,\n filters: NetworkRecordFilterInput,\n): boolean {\n if (filters.url !== undefined && !includesCaseInsensitive(record.url, filters.url)) {\n return false;\n }\n\n let parsedUrl: URL | undefined;\n const getParsedUrl = (): URL => {\n parsedUrl ??= new URL(record.url);\n return parsedUrl;\n };\n\n if (filters.hostname !== undefined) {\n const hostname = getParsedUrl().hostname;\n if (!includesCaseInsensitive(hostname, filters.hostname)) {\n return false;\n }\n }\n\n if (filters.path !== undefined) {\n const path = getParsedUrl().pathname;\n if (!includesCaseInsensitive(path, filters.path)) {\n return false;\n }\n }\n\n if (filters.method !== undefined && !includesCaseInsensitive(record.method, filters.method)) {\n return false;\n }\n\n if (\n filters.status !== undefined &&\n !includesCaseInsensitive(\n record.status === undefined ? \"\" : String(record.status),\n filters.status,\n )\n ) {\n return false;\n }\n\n if (filters.resourceType !== undefined && record.resourceType !== filters.resourceType) {\n return false;\n }\n\n return true;\n}\n\nfunction includesCaseInsensitive(value: string, query: string): boolean {\n return value.toLowerCase().includes(query.toLowerCase());\n}\n","import type { DocumentEpoch, DocumentRef, FrameRef, NodeRef, PageRef } from \"./identity.js\";\nimport type { BodyPayload } from \"./network.js\";\nimport type { CoordinateSpace, Point, Quad, Rect, Size } from \"./geometry.js\";\n\nexport type ScreenshotFormat = \"png\" | \"jpeg\" | \"webp\";\n\nexport interface ScreenshotArtifact {\n readonly pageRef: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n readonly payload: BodyPayload;\n readonly format: ScreenshotFormat;\n readonly size: Size;\n readonly coordinateSpace: CoordinateSpace;\n readonly clip?: Rect;\n}\n\nexport interface HtmlSnapshot {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly capturedAt: number;\n readonly html: string;\n}\n\nexport interface DomSnapshotNode {\n readonly snapshotNodeId: number;\n readonly nodeRef?: NodeRef;\n readonly parentSnapshotNodeId?: number;\n readonly childSnapshotNodeIds: readonly number[];\n readonly shadowRootType?: \"open\" | \"closed\" | \"user-agent\";\n readonly shadowHostNodeRef?: NodeRef;\n readonly contentDocumentRef?: DocumentRef;\n readonly nodeType: number;\n readonly nodeName: string;\n readonly nodeValue: string;\n readonly textContent?: string;\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 readonly attributes: readonly {\n readonly name: string;\n readonly value: string;\n }[];\n readonly layout?: {\n readonly rect?: Rect;\n readonly quad?: Quad;\n readonly paintOrder?: number;\n };\n}\n\nexport type ShadowDomSnapshotMode = \"flattened\" | \"preserved\" | \"unsupported\";\n\nexport interface DomSnapshot {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly parentDocumentRef?: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly capturedAt: number;\n readonly rootSnapshotNodeId: number;\n readonly shadowDomMode: ShadowDomSnapshotMode;\n readonly geometryCoordinateSpace?: CoordinateSpace;\n readonly nodes: readonly DomSnapshotNode[];\n}\n\nexport interface HitTestResult {\n readonly inputPoint: Point;\n readonly inputCoordinateSpace: CoordinateSpace;\n readonly resolvedPoint: Point;\n readonly resolvedCoordinateSpace: CoordinateSpace;\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef?: NodeRef;\n readonly targetQuad?: Quad;\n readonly obscured: boolean;\n readonly pointerEventsSkipped: boolean;\n}\n\nexport type VisualStabilityScope = \"main-frame\" | \"visible-frames\";\n\nexport function findDomSnapshotNode(\n snapshot: DomSnapshot,\n snapshotNodeId: number,\n): DomSnapshotNode | undefined {\n return snapshot.nodes.find((node) => node.snapshotNodeId === snapshotNodeId);\n}\n\nexport function findDomSnapshotNodeByRef(\n snapshot: DomSnapshot,\n nodeRef: NodeRef,\n): DomSnapshotNode | undefined {\n return snapshot.nodes.find((node) => node.nodeRef === nodeRef);\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 {\n allBrowserCapabilities,\n hasCapability,\n type BrowserCapabilities,\n type BrowserCapabilityPath,\n} from \"./capabilities.js\";\nimport type {\n BrowserCoreEngine,\n BrowserInitScriptRegistration,\n BrowserInitScriptInput,\n BrowserRouteRegistration,\n BrowserRouteRegistrationInput,\n FakeBrowserCoreEngineOptions,\n GetNetworkRecordsInput,\n SessionTransportRequest,\n SessionTransportResponse,\n} from \"./contracts.js\";\nimport type { StepEvent, StepResult } from \"./events.js\";\nimport {\n closedPageError,\n closedSessionError,\n createBrowserCoreError,\n staleNodeRefError,\n unsupportedCapabilityError,\n} from \"./errors.js\";\nimport type { ActionBoundarySnapshot } from \"./action-boundary.js\";\nimport {\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createPoint,\n createRect,\n createScrollOffset,\n createSize,\n rectToQuad,\n type CoordinateSpace,\n type Point,\n type Rect,\n type Size,\n type ViewportMetrics,\n} from \"./geometry.js\";\nimport {\n createDocumentEpoch,\n createDocumentRef,\n createFrameRef,\n createNetworkRequestId,\n createNodeRef,\n createPageRef,\n createSessionRef,\n nextDocumentEpoch,\n type DocumentEpoch,\n type DocumentRef,\n type FrameRef,\n type NodeLocator,\n type NodeRef,\n type PageRef,\n type SessionRef,\n} from \"./identity.js\";\nimport type { FrameInfo, PageInfo, PageLifecycleState } from \"./metadata.js\";\nimport {\n bodyPayloadFromUtf8,\n createHeaderEntry,\n matchesNetworkRecordFilters,\n type NetworkRecord,\n} from \"./network.js\";\nimport {\n findDomSnapshotNodeByRef,\n type DomSnapshot,\n type DomSnapshotNode,\n type HitTestResult,\n type HtmlSnapshot,\n type ScreenshotArtifact,\n} from \"./snapshots.js\";\nimport { filterCookieRecords, type CookieRecord, type StorageSnapshot } from \"./storage.js\";\n\ninterface FakeSessionState {\n readonly sessionRef: SessionRef;\n readonly pageRefs: Set<PageRef>;\n cookies: CookieRecord[];\n storage: StorageSnapshot;\n transportResponses: Map<string, SessionTransportResponse>;\n}\n\ninterface FakePageState {\n readonly pageRef: PageRef;\n readonly sessionRef: SessionRef;\n readonly frameRefs: Set<FrameRef>;\n readonly queuedEvents: StepEvent[];\n history: string[];\n historyIndex: number;\n lifecycleState: PageLifecycleState;\n openerPageRef?: PageRef;\n paused: boolean;\n frozen: boolean;\n viewportMetrics: ViewportMetrics;\n}\n\ninterface FakeFrameState {\n frameInfo: FrameInfo;\n}\n\ninterface FakeDocumentState {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n documentRef: DocumentRef;\n documentEpoch: DocumentEpoch;\n url: string;\n htmlSnapshot: HtmlSnapshot;\n domSnapshot: DomSnapshot;\n nodeText: Map<NodeRef, string | null>;\n nodeAttributes: Map<NodeRef, readonly { readonly name: string; readonly value: string }[]>;\n nodeRects: Map<NodeRef, Rect>;\n hitTests: Map<string, Omit<HitTestResult, \"inputPoint\" | \"inputCoordinateSpace\">>;\n networkRecords: NetworkRecord[];\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nfunction titleFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n if (parsed.hostname.length === 0) {\n return url;\n }\n return parsed.hostname;\n } catch {\n return url;\n }\n}\n\nfunction buildTransportKey(request: SessionTransportRequest): string {\n return `${request.method.toUpperCase()} ${request.url}`;\n}\n\nfunction stripFragment(url: string): string {\n const hashIndex = url.indexOf(\"#\");\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction originFromUrl(url: string): string | undefined {\n try {\n return new URL(url).origin;\n } catch {\n return undefined;\n }\n}\n\nexport class FakeBrowserCoreEngine implements BrowserCoreEngine {\n readonly capabilities: Readonly<BrowserCapabilities>;\n\n private readonly sessions = new Map<SessionRef, FakeSessionState>();\n private readonly pages = new Map<PageRef, FakePageState>();\n private readonly frames = new Map<FrameRef, FakeFrameState>();\n private readonly documents = new Map<DocumentRef, FakeDocumentState>();\n private readonly retiredDocuments = new Set<DocumentRef>();\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 stepCounter = 0;\n private eventCounter = 0;\n private timestampMs: number;\n\n constructor(options: FakeBrowserCoreEngineOptions = {}) {\n this.capabilities = options.capabilities ?? allBrowserCapabilities();\n this.timestampMs = options.timestampSeedMs ?? 1_700_000_000_000;\n\n if (options.initialPages && options.initialPages.length > 0) {\n const sessionRef = createSessionRef(`seed-${++this.sessionCounter}`);\n const storage = this.createDefaultStorage(sessionRef);\n this.sessions.set(sessionRef, {\n sessionRef,\n pageRefs: new Set<PageRef>(),\n cookies: [],\n storage,\n transportResponses: new Map(),\n });\n\n for (const page of options.initialPages) {\n void this.createPageInternal(sessionRef, {\n ...(page.url === undefined ? {} : { url: page.url }),\n ...(page.title === undefined ? {} : { title: page.title }),\n ...(page.viewportSize === undefined ? {} : { viewportSize: page.viewportSize }),\n });\n }\n }\n }\n\n enqueueStepEvents(pageRef: PageRef, events: readonly StepEvent[]): void {\n const page = this.requirePage(pageRef);\n for (const event of events) {\n this.assertEventCapability(event.kind);\n page.queuedEvents.push(clone(event));\n }\n }\n\n advanceDocumentEpoch(documentRef: DocumentRef): DocumentEpoch {\n const document = this.requireDocument(documentRef);\n const nextEpoch = nextDocumentEpoch(document.documentEpoch);\n this.rebuildDocumentState(documentRef, {\n documentRef,\n documentEpoch: nextEpoch,\n url: document.url,\n title: titleFromUrl(document.url),\n });\n return nextEpoch;\n }\n\n seedCookies(sessionRef: SessionRef, cookies: readonly CookieRecord[]): void {\n const session = this.requireSession(sessionRef);\n session.cookies = cookies.map((cookie) => clone(cookie));\n }\n\n seedTransportResponse(\n sessionRef: SessionRef,\n request: SessionTransportRequest,\n response: SessionTransportResponse,\n ): void {\n const session = this.requireSession(sessionRef);\n session.transportResponses.set(buildTransportKey(request), clone(response));\n }\n\n async addInitScript(input: BrowserInitScriptInput): Promise<BrowserInitScriptRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.initScripts\")) {\n throw unsupportedCapabilityError(\"instrumentation.initScripts\");\n }\n this.requireSession(input.sessionRef);\n return {\n registrationId: `fake-init-script-${String(++this.stepCounter)}`,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n };\n }\n\n async registerRoute(input: BrowserRouteRegistrationInput): Promise<BrowserRouteRegistration> {\n if (!hasCapability(this.capabilities, \"instrumentation.routing\")) {\n throw unsupportedCapabilityError(\"instrumentation.routing\");\n }\n this.requireSession(input.sessionRef);\n return {\n routeId: `fake-route-${String(++this.stepCounter)}`,\n sessionRef: input.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n };\n }\n\n async createSession(): Promise<SessionRef> {\n this.requireCapability(\"executor.sessionLifecycle\");\n const sessionRef = createSessionRef(`fake-${++this.sessionCounter}`);\n this.sessions.set(sessionRef, {\n sessionRef,\n pageRefs: new Set<PageRef>(),\n cookies: [],\n storage: this.createDefaultStorage(sessionRef),\n transportResponses: new Map(),\n });\n return sessionRef;\n }\n\n async closeSession(input: { readonly sessionRef: SessionRef }): Promise<void> {\n this.requireCapability(\"executor.sessionLifecycle\");\n const session = this.requireSession(input.sessionRef);\n\n for (const pageRef of session.pageRefs) {\n this.destroyPage(pageRef);\n }\n\n this.sessions.delete(input.sessionRef);\n }\n\n async createPage(input: {\n readonly sessionRef: SessionRef;\n readonly openerPageRef?: PageRef;\n readonly url?: string;\n }): Promise<StepResult<PageInfo>> {\n this.requireCapability(\"executor.pageLifecycle\");\n const session = this.requireSession(input.sessionRef);\n const page = this.createPageInternal(session.sessionRef, {\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n ...(input.url === undefined ? {} : { url: input.url }),\n });\n\n const events: StepEvent[] = [];\n const pageCreatedEvent = this.maybeCreateEvent({\n kind: \"page-created\",\n sessionRef: session.sessionRef,\n pageRef: page.pageInfo.pageRef,\n });\n if (pageCreatedEvent) {\n events.push(pageCreatedEvent);\n }\n\n if (input.openerPageRef) {\n const popupOpenedEvent = this.maybeCreateEvent<\"popup-opened\">({\n kind: \"popup-opened\",\n sessionRef: session.sessionRef,\n pageRef: page.pageInfo.pageRef,\n openerPageRef: input.openerPageRef,\n });\n if (popupOpenedEvent) {\n events.push(popupOpenedEvent);\n }\n }\n\n return this.createStepResult(session.sessionRef, page.pageInfo.pageRef, {\n frameRef: page.frameInfo.frameRef,\n documentRef: page.frameInfo.documentRef,\n documentEpoch: page.frameInfo.documentEpoch,\n events,\n data: clone(page.pageInfo),\n });\n }\n\n async closePage(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.pageLifecycle\");\n const page = this.requirePage(input.pageRef);\n const frameInfo = this.getMainFrameInfo(page.pageRef);\n const sessionRef = page.sessionRef;\n this.destroyPage(page.pageRef);\n const pageClosedEvent = this.maybeCreateEvent({\n kind: \"page-closed\",\n sessionRef,\n pageRef: page.pageRef,\n });\n return this.createStepResult(sessionRef, page.pageRef, {\n frameRef: frameInfo.frameRef,\n documentRef: frameInfo.documentRef,\n documentEpoch: frameInfo.documentEpoch,\n events: pageClosedEvent ? [pageClosedEvent] : [],\n data: undefined,\n });\n }\n\n async activatePage(input: { readonly pageRef: PageRef }): Promise<StepResult<PageInfo>> {\n this.requireCapability(\"executor.pageLifecycle\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: clone(this.pageInfoFromState(page)),\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 return this.performNavigation(input.pageRef, input.url, {\n forceNewDocument: false,\n recordHistory: true,\n ...(input.referrer === undefined ? {} : { referrer: input.referrer }),\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 page = this.requirePage(input.pageRef);\n const pageInfo = this.pageInfoFromState(page);\n return this.performNavigation(input.pageRef, pageInfo.url, {\n forceNewDocument: true,\n recordHistory: false,\n });\n }\n\n async goBack(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n if (page.historyIndex === 0) {\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: false,\n });\n }\n\n page.historyIndex -= 1;\n const url = page.history[page.historyIndex]!;\n const result = await this.performNavigation(input.pageRef, url, {\n forceNewDocument: false,\n recordHistory: false,\n });\n return {\n ...result,\n data: true,\n };\n }\n\n async goForward(input: { readonly pageRef: PageRef }): Promise<StepResult<boolean>> {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n if (page.historyIndex >= page.history.length - 1) {\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: false,\n });\n }\n\n page.historyIndex += 1;\n const url = page.history[page.historyIndex]!;\n const result = await this.performNavigation(input.pageRef, url, {\n forceNewDocument: false,\n recordHistory: false,\n });\n return {\n ...result,\n data: true,\n };\n }\n\n async stopLoading(input: { readonly pageRef: PageRef }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.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 this.requireCapability(\"executor.pointerInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async mouseClick(input: {\n readonly pageRef: PageRef;\n readonly point: Point;\n readonly coordinateSpace: CoordinateSpace;\n readonly button?: \"left\" | \"middle\" | \"right\";\n readonly clickCount?: number;\n readonly modifiers?: readonly (\"Shift\" | \"Control\" | \"Alt\" | \"Meta\")[];\n }): Promise<StepResult<HitTestResult | undefined>> {\n this.requireCapability(\"executor.pointerInput\");\n const page = this.requirePage(input.pageRef);\n const hitTest = await this.hitTest({\n pageRef: input.pageRef,\n point: input.point,\n coordinateSpace: input.coordinateSpace,\n });\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: hitTest,\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 this.requireCapability(\"executor.pointerInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrame(page.pageRef);\n const nextScroll = createScrollOffset(\n page.viewportMetrics.scrollOffset.x + input.delta.x,\n page.viewportMetrics.scrollOffset.y + input.delta.y,\n );\n page.viewportMetrics = {\n ...page.viewportMetrics,\n scrollOffset: nextScroll,\n layoutViewport: {\n ...page.viewportMetrics.layoutViewport,\n origin: createPoint(nextScroll.x, nextScroll.y),\n },\n visualViewport: {\n ...page.viewportMetrics.visualViewport,\n origin: createPoint(nextScroll.x, nextScroll.y),\n },\n };\n this.rebuildDocumentState(mainFrame.frameInfo.documentRef, {\n documentRef: mainFrame.frameInfo.documentRef,\n documentEpoch: mainFrame.frameInfo.documentEpoch,\n url: mainFrame.frameInfo.url,\n title: titleFromUrl(mainFrame.frameInfo.url),\n });\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameInfo.frameRef,\n documentRef: mainFrame.frameInfo.documentRef,\n documentEpoch: mainFrame.frameInfo.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async keyPress(input: {\n readonly pageRef: PageRef;\n readonly key: string;\n readonly modifiers?: readonly (\"Shift\" | \"Control\" | \"Alt\" | \"Meta\")[];\n }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.keyboardInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async textInput(input: {\n readonly pageRef: PageRef;\n readonly text: string;\n }): Promise<StepResult<void>> {\n this.requireCapability(\"executor.keyboardInput\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: undefined,\n });\n }\n\n async captureScreenshot(input: {\n readonly pageRef: PageRef;\n readonly format?: \"png\" | \"jpeg\" | \"webp\";\n readonly clip?: Rect;\n readonly clipSpace?: CoordinateSpace;\n readonly fullPage?: boolean;\n readonly includeCursor?: boolean;\n }): Promise<StepResult<ScreenshotArtifact>> {\n this.requireCapability(\"executor.screenshots\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const targetSize = input.fullPage\n ? page.viewportMetrics.contentSize\n : page.viewportMetrics.visualViewport.size;\n const payload = bodyPayloadFromUtf8(\n JSON.stringify({\n pageRef: page.pageRef,\n url: mainFrame.url,\n format: input.format ?? \"webp\",\n includeCursor: input.includeCursor ?? false,\n }),\n { mimeType: `image/${input.format ?? \"webp\"}` },\n );\n const artifact: ScreenshotArtifact = {\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n payload,\n format: input.format ?? \"webp\",\n size: targetSize,\n coordinateSpace: input.clipSpace ?? \"layout-viewport-css\",\n ...(input.clip === undefined ? {} : { clip: input.clip }),\n };\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: artifact,\n });\n }\n\n async setExecutionState(input: {\n readonly pageRef: PageRef;\n readonly paused?: boolean;\n readonly frozen?: boolean;\n }): Promise<\n StepResult<{\n readonly paused: boolean;\n readonly frozen: boolean;\n }>\n > {\n const page = this.requirePage(input.pageRef);\n const pausedChanged = input.paused !== undefined && input.paused !== page.paused;\n const frozenChanged = input.frozen !== undefined && input.frozen !== page.frozen;\n const nextPaused = input.paused ?? page.paused;\n const nextFrozen = input.frozen ?? page.frozen;\n\n if (pausedChanged) {\n this.requireCapability(\n nextPaused ? \"executor.executionControl.pause\" : \"executor.executionControl.resume\",\n );\n }\n if (frozenChanged) {\n this.requireCapability(\"executor.executionControl.freeze\");\n }\n\n page.paused = nextPaused;\n page.frozen = nextFrozen;\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const events = this.drainQueuedEvents(page.pageRef);\n\n if (pausedChanged) {\n const executionEvent = this.maybeCreateEvent({\n kind: nextPaused ? \"paused\" : \"resumed\",\n sessionRef: page.sessionRef,\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n });\n if (executionEvent) {\n events.push(executionEvent);\n }\n }\n\n if (frozenChanged && nextFrozen) {\n const frozenEvent = this.maybeCreateEvent({\n kind: \"frozen\",\n sessionRef: page.sessionRef,\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n });\n if (frozenEvent) {\n events.push(frozenEvent);\n }\n }\n\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events,\n data: {\n paused: page.paused,\n frozen: page.frozen,\n },\n });\n }\n\n async listPages(input: { readonly sessionRef: SessionRef }): Promise<readonly PageInfo[]> {\n this.requireCapability(\"inspector.pageEnumeration\");\n const session = this.requireSession(input.sessionRef);\n return Array.from(session.pageRefs, (pageRef) =>\n clone(this.pageInfoFromState(this.requirePage(pageRef))),\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 this.requireCapability(\"inspector.frameEnumeration\");\n const page = this.requirePage(input.pageRef);\n return Array.from(page.frameRefs, (frameRef) => clone(this.requireFrame(frameRef).frameInfo));\n }\n\n async getPageInfo(input: { readonly pageRef: PageRef }): Promise<PageInfo> {\n this.requireCapability(\"inspector.pageEnumeration\");\n return clone(this.pageInfoFromState(this.requirePage(input.pageRef)));\n }\n\n async getFrameInfo(input: { readonly frameRef: FrameRef }): Promise<FrameInfo> {\n this.requireCapability(\"inspector.frameEnumeration\");\n return clone(this.requireFrame(input.frameRef).frameInfo);\n }\n\n async getHtmlSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<HtmlSnapshot> {\n this.requireCapability(\"inspector.html\");\n const document = this.resolveDocumentInput(input);\n return clone(document.htmlSnapshot);\n }\n\n async getDomSnapshot(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): Promise<DomSnapshot> {\n this.requireCapability(\"inspector.domSnapshot\");\n const document = this.resolveDocumentInput(input);\n return clone(document.domSnapshot);\n }\n\n async getActionBoundarySnapshot(input: {\n readonly pageRef: PageRef;\n }): Promise<ActionBoundarySnapshot> {\n this.requireCapability(\"inspector.frameEnumeration\");\n const page = this.requirePage(input.pageRef);\n const mainFrameRef = Array.from(page.frameRefs).find(\n (frameRef) => this.requireFrame(frameRef).frameInfo.isMainFrame,\n );\n if (mainFrameRef === undefined) {\n throw createBrowserCoreError(\n \"operation-failed\",\n `page ${input.pageRef} does not expose a main frame`,\n );\n }\n const frame = this.requireFrame(mainFrameRef);\n return {\n pageRef: input.pageRef,\n documentRef: frame.frameInfo.documentRef,\n url: frame.frameInfo.url,\n };\n }\n\n async waitForVisualStability(_input: {\n readonly pageRef: PageRef;\n readonly timeoutMs?: number;\n readonly settleMs?: number;\n readonly scope?: \"main-frame\" | \"visible-frames\";\n }): Promise<void> {\n this.requireCapability(\"inspector.visualStability\");\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\n async readText(input: NodeLocator): Promise<string | null> {\n this.requireCapability(\"inspector.text\");\n const document = this.requireLiveNode(input);\n return clone(document.nodeText.get(input.nodeRef) ?? null);\n }\n\n async readAttributes(\n input: NodeLocator,\n ): Promise<readonly { readonly name: string; readonly value: string }[]> {\n this.requireCapability(\"inspector.attributes\");\n const document = this.requireLiveNode(input);\n return clone(document.nodeAttributes.get(input.nodeRef) ?? []);\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 this.requireCapability(\"inspector.hitTest\");\n const page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const document = this.requireDocument(mainFrame.documentRef);\n const resolvedPoint = this.resolvePoint(\n page.viewportMetrics,\n input.point,\n input.coordinateSpace,\n );\n const key = this.hitTestKey(resolvedPoint, input.ignorePointerEventsNone ?? false);\n const hit = document.hitTests.get(key);\n\n if (hit) {\n return clone({\n inputPoint: input.point,\n inputCoordinateSpace: input.coordinateSpace,\n ...hit,\n });\n }\n\n return {\n inputPoint: input.point,\n inputCoordinateSpace: input.coordinateSpace,\n resolvedPoint,\n resolvedCoordinateSpace: \"document-css\",\n pageRef: page.pageRef,\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n obscured: false,\n pointerEventsSkipped: false,\n };\n }\n\n async getViewportMetrics(input: { readonly pageRef: PageRef }): Promise<ViewportMetrics> {\n this.requireCapability(\"inspector.viewportMetrics\");\n return clone(this.requirePage(input.pageRef).viewportMetrics);\n }\n\n async getNetworkRecords(input: GetNetworkRecordsInput): Promise<readonly NetworkRecord[]> {\n this.requireCapability(\"inspector.network\");\n input.signal?.throwIfAborted?.();\n const session = this.requireSession(input.sessionRef);\n const records: NetworkRecord[] = [];\n const includeBodies = input.includeBodies ?? false;\n const pageRefs = input.pageRef === undefined ? Array.from(session.pageRefs) : [input.pageRef];\n const requestIds = input.requestIds === undefined ? undefined : new Set(input.requestIds);\n\n for (const pageRef of pageRefs) {\n const page = this.requirePage(pageRef);\n const mainFrame = this.getMainFrame(page.pageRef);\n const document = this.requireDocument(mainFrame.frameInfo.documentRef);\n records.push(\n ...document.networkRecords\n .filter(\n (record) =>\n (requestIds === undefined || requestIds.has(record.requestId)) &&\n matchesNetworkRecordFilters(record, input),\n )\n .map((record) => clone(record)),\n );\n }\n\n if (!includeBodies) {\n return records.map(\n ({ requestBody: _requestBody, responseBody: _responseBody, ...record }) => ({\n ...record,\n }),\n );\n }\n\n this.requireCapability(\"inspector.networkBodies\");\n return records;\n }\n\n async getCookies(input: {\n readonly sessionRef: SessionRef;\n readonly urls?: readonly string[];\n }): Promise<readonly CookieRecord[]> {\n this.requireCapability(\"inspector.cookies\");\n const session = this.requireSession(input.sessionRef);\n const cookies =\n input.urls && input.urls.length > 0\n ? filterCookieRecords(session.cookies, input.urls)\n : session.cookies;\n return cookies.map((cookie) => clone(cookie));\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 const merged = new Map(\n session.cookies.map((cookie) => [\n `${cookie.name}\\u0000${cookie.domain}\\u0000${cookie.path}`,\n clone(cookie),\n ]),\n );\n for (const cookie of input.cookies) {\n merged.set(`${cookie.name}\\u0000${cookie.domain}\\u0000${cookie.path}`, clone(cookie));\n }\n session.cookies = [...merged.values()];\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 this.requireCapability(\"inspector.localStorage\");\n\n if (input.includeSessionStorage ?? true) {\n this.requireCapability(\"inspector.sessionStorage\");\n }\n if (input.includeIndexedDb ?? true) {\n this.requireCapability(\"inspector.indexedDb\");\n }\n\n const snapshot = clone(session.storage);\n return {\n sessionRef: snapshot.sessionRef,\n capturedAt: snapshot.capturedAt,\n origins: snapshot.origins.map((origin) => ({\n origin: origin.origin,\n localStorage: origin.localStorage,\n ...((input.includeIndexedDb ?? true) && origin.indexedDb\n ? { indexedDb: origin.indexedDb }\n : {}),\n })),\n ...((input.includeSessionStorage ?? true)\n ? { sessionStorage: snapshot.sessionStorage ?? [] }\n : {}),\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 page = this.requirePage(input.pageRef);\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n const value = await Promise.resolve().then(() => {\n const evaluated = (0, eval)(input.script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...args: readonly unknown[]) => unknown)(...(input.args ?? []));\n }\n return evaluated;\n });\n\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameRef,\n documentRef: mainFrame.documentRef,\n documentEpoch: mainFrame.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: clone(value),\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 page = this.requirePage(frame.frameInfo.pageRef);\n const value = await Promise.resolve().then(() => {\n const evaluated = (0, eval)(input.script) as unknown;\n if (typeof evaluated === \"function\") {\n return (evaluated as (...args: readonly unknown[]) => unknown)(...(input.args ?? []));\n }\n return evaluated;\n });\n\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: frame.frameInfo.frameRef,\n documentRef: frame.frameInfo.documentRef,\n documentEpoch: frame.frameInfo.documentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: clone(value),\n });\n }\n\n async executeRequest(input: {\n readonly sessionRef: SessionRef;\n readonly request: SessionTransportRequest;\n readonly signal?: AbortSignal;\n }): Promise<StepResult<SessionTransportResponse>> {\n this.requireCapability(\"transport.sessionHttp\");\n input.signal?.throwIfAborted?.();\n const session = this.requireSession(input.sessionRef);\n const key = buildTransportKey(input.request);\n const seededResponse = session.transportResponses.get(key);\n const response =\n seededResponse ??\n ({\n url: input.request.url,\n status: 200,\n statusText: \"OK\",\n headers: [createHeaderEntry(\"content-type\", \"text/plain; charset=utf-8\")],\n body: bodyPayloadFromUtf8(`${input.request.method.toUpperCase()} ${input.request.url}`, {\n mimeType: \"text/plain\",\n }),\n redirected: false,\n } satisfies SessionTransportResponse);\n\n const requestId = createNetworkRequestId(`transport-${++this.requestCounter}`);\n const transportRecord: NetworkRecord = {\n kind: \"http\",\n requestId,\n sessionRef: input.sessionRef,\n method: input.request.method.toUpperCase(),\n url: input.request.url,\n requestHeaders: input.request.headers ?? [],\n responseHeaders: response.headers,\n status: response.status,\n statusText: response.statusText,\n resourceType: \"fetch\",\n navigationRequest: false,\n captureState: \"complete\",\n requestBodyState: input.request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: response.body === undefined ? \"skipped\" : \"complete\",\n ...(input.request.body === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n ...(response.body === undefined ? { responseBodySkipReason: \"not-present\" } : {}),\n ...(input.request.body === undefined ? {} : { requestBody: input.request.body }),\n ...(response.body === undefined ? {} : { responseBody: response.body }),\n };\n\n for (const pageRef of session.pageRefs) {\n const mainFrame = this.getMainFrame(pageRef);\n this.requireDocument(mainFrame.frameInfo.documentRef).networkRecords.push(transportRecord);\n break;\n }\n\n return this.createStepResult(input.sessionRef, undefined, {\n events: [],\n data: clone(response),\n });\n }\n\n private createPageInternal(\n sessionRef: SessionRef,\n options: {\n readonly openerPageRef?: PageRef;\n readonly url?: string;\n readonly title?: string;\n readonly viewportSize?: Size;\n },\n ): { readonly pageInfo: PageInfo; readonly frameInfo: FrameInfo } {\n const session = this.requireSession(sessionRef);\n const pageRef = createPageRef(`fake-${++this.pageCounter}`);\n const frameRef = createFrameRef(`fake-${++this.frameCounter}`);\n const documentRef = createDocumentRef(`fake-${++this.documentCounter}`);\n const documentEpoch = createDocumentEpoch(0);\n const url = options.url ?? \"about:blank\";\n const title = options.title ?? titleFromUrl(url);\n const viewportSize = options.viewportSize ?? createSize(1280, 720);\n const page: FakePageState = {\n pageRef,\n sessionRef,\n frameRefs: new Set([frameRef]),\n queuedEvents: [],\n history: [url],\n historyIndex: 0,\n lifecycleState: \"open\",\n paused: false,\n frozen: false,\n viewportMetrics: {\n layoutViewport: {\n origin: createPoint(0, 0),\n size: viewportSize,\n },\n visualViewport: {\n origin: createPoint(0, 0),\n offsetWithinLayoutViewport: createScrollOffset(0, 0),\n size: viewportSize,\n },\n scrollOffset: createScrollOffset(0, 0),\n contentSize: createSize(1280, 2400),\n devicePixelRatio: createDevicePixelRatio(2),\n pageScaleFactor: createPageScaleFactor(1),\n pageZoomFactor: createPageZoomFactor(1),\n },\n ...(options.openerPageRef === undefined ? {} : { openerPageRef: options.openerPageRef }),\n };\n const frameInfo: FrameInfo = {\n frameRef,\n pageRef,\n documentRef,\n documentEpoch,\n url,\n isMainFrame: true,\n };\n\n this.pages.set(pageRef, page);\n this.frames.set(frameRef, { frameInfo });\n session.pageRefs.add(pageRef);\n this.rebuildDocumentStateForFrame(pageRef, frameRef, {\n documentRef,\n documentEpoch,\n url,\n title,\n });\n session.storage = this.seedDefaultSessionStorage(session.storage, pageRef, frameRef, url);\n\n return {\n pageInfo: this.pageInfoFromState(page, url, title),\n frameInfo,\n };\n }\n\n private pageInfoFromState(page: FakePageState, url?: string, title?: string): PageInfo {\n const mainFrame = this.getMainFrameInfo(page.pageRef);\n return {\n pageRef: page.pageRef,\n sessionRef: page.sessionRef,\n url: url ?? mainFrame.url,\n title: title ?? titleFromUrl(mainFrame.url),\n lifecycleState: page.lifecycleState,\n ...(page.openerPageRef === undefined ? {} : { openerPageRef: page.openerPageRef }),\n };\n }\n\n private createDefaultStorage(sessionRef: SessionRef): StorageSnapshot {\n return {\n sessionRef,\n capturedAt: this.timestampMs,\n origins: [\n {\n origin: \"https://example.com\",\n localStorage: [\n { key: \"theme\", value: \"dark\" },\n { key: \"draft\", value: \"hello\" },\n ],\n indexedDb: [\n {\n name: \"app-db\",\n version: 1,\n objectStores: [\n {\n name: \"messages\",\n keyPath: \"id\",\n autoIncrement: false,\n indexes: [],\n records: [\n {\n key: \"1\",\n value: { id: \"1\", text: \"hello\" },\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n sessionStorage: [],\n };\n }\n\n private seedDefaultSessionStorage(\n storage: StorageSnapshot,\n pageRef: PageRef,\n frameRef: FrameRef,\n url: string,\n ): StorageSnapshot {\n const origin = originFromUrl(url);\n if (origin === undefined) {\n return storage;\n }\n\n if (\n storage.sessionStorage?.some(\n (snapshot) =>\n snapshot.pageRef === pageRef &&\n snapshot.frameRef === frameRef &&\n snapshot.origin === origin,\n )\n ) {\n return storage;\n }\n\n return {\n ...storage,\n sessionStorage: [\n ...(storage.sessionStorage ?? []),\n {\n pageRef,\n frameRef,\n origin,\n entries: [{ key: \"csrf\", value: \"token-123\" }],\n },\n ],\n };\n }\n\n private async performNavigation(\n pageRef: PageRef,\n url: string,\n options: {\n readonly referrer?: string;\n readonly forceNewDocument: boolean;\n readonly recordHistory: boolean;\n },\n ): Promise<\n StepResult<{\n readonly pageInfo: PageInfo;\n readonly mainFrame: FrameInfo;\n }>\n > {\n this.requireCapability(\"executor.navigation\");\n const page = this.requirePage(pageRef);\n const mainFrame = this.getMainFrame(page.pageRef);\n const currentFrameInfo = mainFrame.frameInfo;\n const currentDocument = this.requireDocument(currentFrameInfo.documentRef);\n const sameDocument =\n !options.forceNewDocument && stripFragment(currentFrameInfo.url) === stripFragment(url);\n const title = titleFromUrl(url);\n const requestBody =\n options.referrer === undefined\n ? undefined\n : bodyPayloadFromUtf8(options.referrer, { mimeType: \"text/plain\" });\n const requestHeaders =\n options.referrer === undefined ? [] : [createHeaderEntry(\"referer\", options.referrer)];\n\n let nextDocumentRef = currentFrameInfo.documentRef;\n let nextDocumentEpoch = currentFrameInfo.documentEpoch;\n\n if (sameDocument) {\n currentDocument.url = url;\n currentDocument.htmlSnapshot = {\n ...currentDocument.htmlSnapshot,\n url,\n capturedAt: this.nextTimestamp(),\n };\n currentDocument.domSnapshot = {\n ...currentDocument.domSnapshot,\n url,\n capturedAt: this.nextTimestamp(),\n };\n mainFrame.frameInfo = {\n ...currentFrameInfo,\n url,\n };\n } else {\n nextDocumentRef = createDocumentRef(`fake-${++this.documentCounter}`);\n nextDocumentEpoch = createDocumentEpoch(0);\n mainFrame.frameInfo = {\n ...currentFrameInfo,\n url,\n documentRef: nextDocumentRef,\n documentEpoch: nextDocumentEpoch,\n };\n this.rebuildDocumentStateForFrame(page.pageRef, currentFrameInfo.frameRef, {\n documentRef: nextDocumentRef,\n documentEpoch: nextDocumentEpoch,\n url,\n title,\n });\n this.retireDocument(currentFrameInfo.documentRef);\n\n const requestId = createNetworkRequestId(`fake-${++this.requestCounter}`);\n const responseBody = bodyPayloadFromUtf8(`<html><title>${title}</title></html>`, {\n mimeType: \"text/html\",\n });\n this.requireDocument(nextDocumentRef).networkRecords.push({\n kind: \"http\",\n requestId,\n sessionRef: page.sessionRef,\n pageRef: page.pageRef,\n frameRef: currentFrameInfo.frameRef,\n documentRef: nextDocumentRef,\n method: \"GET\",\n url,\n requestHeaders,\n responseHeaders: [\n createHeaderEntry(\"content-type\", \"text/html; charset=utf-8\"),\n createHeaderEntry(\"set-cookie\", \"session=abc\"),\n createHeaderEntry(\"set-cookie\", \"theme=dark\"),\n ],\n status: 200,\n statusText: \"OK\",\n resourceType: \"document\",\n navigationRequest: true,\n captureState: \"complete\",\n requestBodyState: requestBody === undefined ? \"skipped\" : \"complete\",\n responseBodyState: \"complete\",\n ...(requestBody === undefined ? { requestBodySkipReason: \"not-present\" } : {}),\n timing: {\n requestStartMs: this.timestampMs,\n responseStartMs: this.timestampMs + 5,\n responseEndMs: this.timestampMs + 10,\n },\n transfer: {\n encodedBodyBytes: responseBody.capturedByteLength,\n decodedBodyBytes: responseBody.capturedByteLength,\n transferSizeBytes: responseBody.capturedByteLength + 256,\n },\n ...(requestBody === undefined ? {} : { requestBody }),\n responseBody,\n });\n }\n\n if (options.recordHistory) {\n page.history = [...page.history.slice(0, page.historyIndex + 1), url];\n page.historyIndex = page.history.length - 1;\n }\n\n const pageInfo = this.pageInfoFromState(page, url, title);\n return this.createStepResult(page.sessionRef, page.pageRef, {\n frameRef: mainFrame.frameInfo.frameRef,\n documentRef: nextDocumentRef,\n documentEpoch: nextDocumentEpoch,\n events: this.drainQueuedEvents(page.pageRef),\n data: {\n pageInfo,\n mainFrame: clone(mainFrame.frameInfo),\n },\n });\n }\n\n private createDocumentSnapshot(\n pageRef: PageRef,\n frameRef: FrameRef,\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n url: string,\n title: string,\n ): Omit<FakeDocumentState, \"pageRef\" | \"frameRef\" | \"documentRef\" | \"documentEpoch\" | \"url\"> {\n const bodyRect = createRect(0, 0, 1280, 2400);\n const buttonRect = createRect(16, 16, 160, 48);\n const obscuredRect = createRect(240, 16, 160, 48);\n const titleRect = createRect(16, 96, 220, 32);\n const buttonRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const obscuredRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const documentNodeRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const htmlNodeRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const bodyNodeRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const titleRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const hiddenPanelRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const shadowHostRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const shadowActionRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const nestedShadowHostRef = createNodeRef(`fake-${++this.nodeCounter}`);\n const nestedShadowActionRef = createNodeRef(`fake-${++this.nodeCounter}`);\n\n const nodes: DomSnapshotNode[] = [\n {\n snapshotNodeId: 1,\n nodeRef: documentNodeRef,\n childSnapshotNodeIds: [2],\n nodeType: 9,\n nodeName: \"#document\",\n nodeValue: \"\",\n attributes: [],\n },\n {\n snapshotNodeId: 2,\n nodeRef: htmlNodeRef,\n parentSnapshotNodeId: 1,\n childSnapshotNodeIds: [3],\n nodeType: 1,\n nodeName: \"HTML\",\n nodeValue: \"\",\n attributes: [],\n },\n {\n snapshotNodeId: 3,\n nodeRef: bodyNodeRef,\n parentSnapshotNodeId: 2,\n childSnapshotNodeIds: [4, 5, 6, 7, 8, 9, 10, 11],\n nodeType: 1,\n nodeName: \"BODY\",\n nodeValue: \"\",\n attributes: [],\n layout: {\n rect: bodyRect,\n quad: rectToQuad(bodyRect),\n paintOrder: 1,\n },\n },\n {\n snapshotNodeId: 4,\n nodeRef: buttonRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"BUTTON\",\n nodeValue: \"\",\n textContent: \"Continue\",\n attributes: [\n { name: \"id\", value: \"continue\" },\n { name: \"type\", value: \"button\" },\n ],\n layout: {\n rect: buttonRect,\n quad: rectToQuad(buttonRect),\n paintOrder: 2,\n },\n },\n {\n snapshotNodeId: 5,\n nodeRef: obscuredRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"Overlay\",\n attributes: [{ name: \"id\", value: \"overlay\" }],\n layout: {\n rect: obscuredRect,\n quad: rectToQuad(obscuredRect),\n paintOrder: 3,\n },\n },\n {\n snapshotNodeId: 6,\n nodeRef: titleRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"H1\",\n nodeValue: \"\",\n textContent: \"Snapshot Heading\",\n attributes: [{ name: \"id\", value: \"snapshot-title\" }],\n layout: {\n rect: titleRect,\n quad: rectToQuad(titleRect),\n paintOrder: 4,\n },\n },\n {\n snapshotNodeId: 7,\n nodeRef: hiddenPanelRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"Hidden panel\",\n computedStyle: {\n display: \"none\",\n },\n attributes: [{ name: \"id\", value: \"hidden-panel\" }],\n },\n {\n snapshotNodeId: 8,\n nodeRef: shadowHostRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"\",\n attributes: [{ name: \"id\", value: \"shadow-host\" }],\n },\n {\n snapshotNodeId: 9,\n nodeRef: shadowActionRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n shadowHostNodeRef: shadowHostRef,\n nodeType: 1,\n nodeName: \"BUTTON\",\n nodeValue: \"\",\n textContent: \"Shadow Action\",\n attributes: [{ name: \"id\", value: \"shadow-action\" }],\n },\n {\n snapshotNodeId: 10,\n nodeRef: nestedShadowHostRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n nodeType: 1,\n nodeName: \"DIV\",\n nodeValue: \"\",\n textContent: \"\",\n attributes: [{ name: \"id\", value: \"nested-shadow-host\" }],\n },\n {\n snapshotNodeId: 11,\n nodeRef: nestedShadowActionRef,\n parentSnapshotNodeId: 3,\n childSnapshotNodeIds: [],\n shadowHostNodeRef: nestedShadowHostRef,\n nodeType: 1,\n nodeName: \"BUTTON\",\n nodeValue: \"\",\n textContent: \"Nested Shadow\",\n attributes: [{ name: \"id\", value: \"nested-shadow-action\" }],\n },\n ];\n\n const domSnapshot: DomSnapshot = {\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n url,\n capturedAt: this.timestampMs,\n rootSnapshotNodeId: 1,\n shadowDomMode: \"flattened\",\n geometryCoordinateSpace: \"document-css\",\n nodes,\n };\n\n const nodeText = new Map<NodeRef, string | null>([\n [buttonRef, \"Continue\"],\n [obscuredRef, \"Overlay\"],\n [titleRef, \"Snapshot Heading\"],\n [hiddenPanelRef, \"Hidden panel\"],\n [shadowHostRef, \"\"],\n [shadowActionRef, \"Shadow Action\"],\n [nestedShadowHostRef, \"\"],\n [nestedShadowActionRef, \"Nested Shadow\"],\n [documentNodeRef, null],\n [htmlNodeRef, null],\n [bodyNodeRef, null],\n ]);\n const nodeAttributes = new Map<\n NodeRef,\n readonly { readonly name: string; readonly value: string }[]\n >([\n [buttonRef, nodes[3]!.attributes],\n [obscuredRef, nodes[4]!.attributes],\n [titleRef, nodes[5]!.attributes],\n [hiddenPanelRef, nodes[6]!.attributes],\n [shadowHostRef, nodes[7]!.attributes],\n [shadowActionRef, nodes[8]!.attributes],\n [nestedShadowHostRef, nodes[9]!.attributes],\n [nestedShadowActionRef, nodes[10]!.attributes],\n [documentNodeRef, []],\n [htmlNodeRef, []],\n [bodyNodeRef, []],\n ]);\n const nodeRects = new Map<NodeRef, Rect>([\n [buttonRef, buttonRect],\n [obscuredRef, obscuredRect],\n [titleRef, titleRect],\n [bodyNodeRef, bodyRect],\n ]);\n const hitTests = new Map<string, Omit<HitTestResult, \"inputPoint\" | \"inputCoordinateSpace\">>([\n [\n this.hitTestKey(createPoint(20, 20), false),\n {\n resolvedPoint: createPoint(20, 20),\n resolvedCoordinateSpace: \"document-css\",\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n nodeRef: buttonRef,\n targetQuad: rectToQuad(buttonRect),\n obscured: false,\n pointerEventsSkipped: false,\n },\n ],\n [\n this.hitTestKey(createPoint(260, 20), false),\n {\n resolvedPoint: createPoint(260, 20),\n resolvedCoordinateSpace: \"document-css\",\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n nodeRef: obscuredRef,\n targetQuad: rectToQuad(obscuredRect),\n obscured: true,\n pointerEventsSkipped: false,\n },\n ],\n [\n this.hitTestKey(createPoint(20, 20), true),\n {\n resolvedPoint: createPoint(20, 20),\n resolvedCoordinateSpace: \"document-css\",\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n nodeRef: buttonRef,\n targetQuad: rectToQuad(buttonRect),\n obscured: false,\n pointerEventsSkipped: true,\n },\n ],\n ]);\n\n return {\n htmlSnapshot: {\n pageRef,\n frameRef,\n documentRef,\n documentEpoch,\n url,\n capturedAt: this.timestampMs,\n html:\n `<html><head><title>${title}</title></head><body>` +\n `<button id=\"continue\" type=\"button\">Continue</button>` +\n `<div id=\"overlay\">Overlay</div>` +\n `<h1 id=\"snapshot-title\">Snapshot Heading</h1>` +\n `<div id=\"hidden-panel\" style=\"display:none\">Hidden panel</div>` +\n `<div id=\"shadow-host\"></div>` +\n `<button id=\"shadow-action\">Shadow Action</button>` +\n `<div id=\"nested-shadow-host\"></div>` +\n `<button id=\"nested-shadow-action\">Nested Shadow</button>` +\n `</body></html>`,\n },\n domSnapshot,\n nodeText,\n nodeAttributes,\n nodeRects,\n hitTests,\n networkRecords: [],\n };\n }\n\n private rebuildDocumentStateForFrame(\n pageRef: PageRef,\n frameRef: FrameRef,\n input: {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly title: string;\n },\n ): void {\n const nextState = this.createDocumentSnapshot(\n pageRef,\n frameRef,\n input.documentRef,\n input.documentEpoch,\n input.url,\n input.title,\n );\n\n this.retiredDocuments.delete(input.documentRef);\n this.documents.set(input.documentRef, {\n pageRef,\n frameRef,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n url: input.url,\n ...nextState,\n });\n }\n\n private rebuildDocumentState(\n documentRef: DocumentRef,\n input: {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly url: string;\n readonly title: string;\n },\n ): void {\n const existing = this.requireDocument(documentRef);\n this.rebuildDocumentStateForFrame(existing.pageRef, existing.frameRef, input);\n const frame = this.requireFrame(existing.frameRef);\n frame.frameInfo = {\n ...frame.frameInfo,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n url: input.url,\n };\n }\n\n private resolveDocumentInput(input: {\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n }): FakeDocumentState {\n if (input.frameRef && input.documentRef) {\n throw createBrowserCoreError(\n \"invalid-argument\",\n \"provide either frameRef or documentRef, not both\",\n );\n }\n\n if (input.documentRef) {\n return this.requireDocument(input.documentRef);\n }\n\n if (input.frameRef) {\n return this.requireDocument(this.requireFrame(input.frameRef).frameInfo.documentRef);\n }\n\n throw createBrowserCoreError(\"invalid-argument\", \"either frameRef or documentRef is required\");\n }\n\n private requireLiveNode(input: NodeLocator): FakeDocumentState {\n if (this.retiredDocuments.has(input.documentRef)) {\n throw staleNodeRefError(input);\n }\n\n const document = this.requireDocument(input.documentRef);\n if (document.documentEpoch !== input.documentEpoch) {\n throw staleNodeRefError(input);\n }\n\n const node = findDomSnapshotNodeByRef(document.domSnapshot, input.nodeRef);\n if (!node) {\n throw staleNodeRefError(input);\n }\n\n return document;\n }\n\n private resolvePoint(\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 case \"visual-viewport-css\":\n return createPoint(point.x + metrics.scrollOffset.x, point.y + metrics.scrollOffset.y);\n case \"computer-display-css\":\n throw createBrowserCoreError(\n \"unsupported-capability\",\n `coordinate space ${coordinateSpace} is not supported by the fake engine`,\n {\n details: {\n coordinateSpace,\n },\n },\n );\n case \"window\":\n case \"screen\":\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 }\n\n throw createBrowserCoreError(\n \"invalid-argument\",\n `coordinate space ${coordinateSpace} is not supported by the fake engine`,\n );\n }\n\n private hitTestKey(point: Point, ignorePointerEventsNone: boolean): string {\n return `${Math.round(point.x)}:${Math.round(point.y)}:${ignorePointerEventsNone ? \"ignore\" : \"respect\"}`;\n }\n\n private requireCapability(path: BrowserCapabilityPath): void {\n if (!hasCapability(this.capabilities, path)) {\n throw unsupportedCapabilityError(path);\n }\n }\n\n private assertEventCapability(kind: StepEvent[\"kind\"]): void {\n const capability = this.eventCapabilityForKind(kind);\n if (!hasCapability(this.capabilities, capability)) {\n throw unsupportedCapabilityError(capability);\n }\n }\n\n private eventCapabilityForKind(kind: StepEvent[\"kind\"]): BrowserCapabilityPath {\n switch (kind) {\n case \"page-created\":\n case \"popup-opened\":\n case \"page-closed\":\n return \"events.pageLifecycle\";\n case \"dialog-opened\":\n return \"events.dialog\";\n case \"download-started\":\n case \"download-finished\":\n return \"events.download\";\n case \"chooser-opened\":\n return \"events.chooser\";\n case \"worker-created\":\n case \"worker-destroyed\":\n return \"events.worker\";\n case \"console\":\n return \"events.console\";\n case \"page-error\":\n return \"events.pageError\";\n case \"websocket-opened\":\n case \"websocket-frame\":\n case \"websocket-closed\":\n return \"events.websocket\";\n case \"event-stream-message\":\n return \"events.eventStream\";\n case \"paused\":\n case \"resumed\":\n case \"frozen\":\n return \"events.executionState\";\n }\n }\n\n private createEvent<TKind extends StepEvent[\"kind\"]>(\n value: Omit<Extract<StepEvent, { readonly kind: TKind }>, \"eventId\" | \"timestamp\">,\n ): Extract<StepEvent, { readonly kind: TKind }> {\n this.assertEventCapability(value.kind);\n return {\n ...value,\n eventId: `event:${++this.eventCounter}`,\n timestamp: this.nextTimestamp(),\n } as Extract<StepEvent, { readonly kind: TKind }>;\n }\n\n private maybeCreateEvent<TKind extends StepEvent[\"kind\"]>(\n value: Omit<Extract<StepEvent, { readonly kind: TKind }>, \"eventId\" | \"timestamp\">,\n ): Extract<StepEvent, { readonly kind: TKind }> | undefined {\n if (!hasCapability(this.capabilities, this.eventCapabilityForKind(value.kind))) {\n return undefined;\n }\n\n return this.createEvent(value);\n }\n\n private createStepResult<TData>(\n sessionRef: SessionRef,\n pageRef: PageRef | undefined,\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 startedAt = this.nextTimestamp();\n const completedAt = this.nextTimestamp();\n return {\n stepId: `step:${++this.stepCounter}`,\n sessionRef,\n startedAt,\n completedAt,\n durationMs: completedAt - startedAt,\n events: input.events.map((event) => clone(event)),\n data: clone(input.data),\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 };\n }\n\n private drainQueuedEvents(pageRef: PageRef): StepEvent[] {\n const page = this.requirePage(pageRef);\n const events = page.queuedEvents.splice(0, page.queuedEvents.length);\n return events.map((event) => clone(event));\n }\n\n private requireSession(sessionRef: SessionRef): FakeSessionState {\n const session = this.sessions.get(sessionRef);\n if (!session) {\n throw closedSessionError(sessionRef);\n }\n return session;\n }\n\n private requirePage(pageRef: PageRef): FakePageState {\n const page = this.pages.get(pageRef);\n if (!page || page.lifecycleState === \"closed\") {\n throw closedPageError(pageRef);\n }\n return page;\n }\n\n private requireFrame(frameRef: FrameRef): FakeFrameState {\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): FakeDocumentState {\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 getMainFrame(pageRef: PageRef): FakeFrameState {\n const page = this.requirePage(pageRef);\n const mainFrameRef = Array.from(page.frameRefs).find(\n (frameRef) => this.requireFrame(frameRef).frameInfo.isMainFrame,\n );\n if (!mainFrameRef) {\n throw createBrowserCoreError(\"operation-failed\", `page ${pageRef} has no main frame`);\n }\n return this.requireFrame(mainFrameRef);\n }\n\n private getMainFrameInfo(pageRef: PageRef): FrameInfo {\n return clone(this.getMainFrame(pageRef).frameInfo);\n }\n\n private destroyPage(pageRef: PageRef): void {\n const page = this.requirePage(pageRef);\n page.lifecycleState = \"closed\";\n this.pages.delete(pageRef);\n const session = this.requireSession(page.sessionRef);\n session.pageRefs.delete(pageRef);\n\n for (const frameRef of page.frameRefs) {\n const frame = this.frames.get(frameRef);\n if (!frame) {\n continue;\n }\n this.documents.delete(frame.frameInfo.documentRef);\n this.frames.delete(frameRef);\n }\n }\n\n private retireDocument(documentRef: DocumentRef): void {\n this.documents.delete(documentRef);\n this.retiredDocuments.add(documentRef);\n }\n\n private nextTimestamp(): number {\n return (this.timestampMs += 5);\n }\n}\n\nexport function createFakeBrowserCoreEngine(\n options: FakeBrowserCoreEngineOptions = {},\n): FakeBrowserCoreEngine {\n const capabilities = options.capabilities ?? allBrowserCapabilities();\n return new FakeBrowserCoreEngine({ ...options, capabilities });\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"]}
|