@browserbasehq/orca 3.6.0-gemini-cua → 3.7.1-preview.0
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/cjs/lib/modelUtils.d.ts +10 -0
- package/dist/cjs/lib/modelUtils.js +11 -0
- package/dist/cjs/lib/modelUtils.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js +3 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +4 -3
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +11 -9
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +12 -3
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +107 -22
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +2 -2
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +6 -3
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +13 -7
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +1 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +43 -3
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/cjs/lib/v3/api.js +9 -0
- package/dist/cjs/lib/v3/api.js.map +1 -1
- package/dist/cjs/lib/v3/cache/AgentCache.js +6 -1
- package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/cjs/lib/v3/external_clients/aisdk.js +2 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +35 -11
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +32 -18
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/index.d.ts +2 -1
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +2 -2
- package/dist/cjs/lib/v3/llm/LLMProvider.js +9 -2
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +2 -0
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/llm/providerOptions.d.ts +7 -0
- package/dist/cjs/lib/v3/llm/providerOptions.js +9 -0
- package/dist/cjs/lib/v3/llm/providerOptions.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/agent.d.ts +1 -1
- package/dist/cjs/lib/v3/types/private/agent.js +1 -0
- package/dist/cjs/lib/v3/types/private/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agent.d.ts +10 -1
- package/dist/cjs/lib/v3/types/public/agent.js +3 -0
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/context.d.ts +7 -0
- package/dist/cjs/lib/v3/types/public/context.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +7 -0
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +4 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.js +9 -1
- package/dist/cjs/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js +4 -3
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +2 -0
- package/dist/cjs/lib/v3/understudy/cdp.js +26 -12
- package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/context.d.ts +13 -1
- package/dist/cjs/lib/v3/understudy/context.js +284 -1
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/domainPolicy.d.ts +25 -0
- package/dist/cjs/lib/v3/understudy/domainPolicy.js +162 -0
- package/dist/cjs/lib/v3/understudy/domainPolicy.js.map +1 -0
- package/dist/cjs/lib/v3/v3.js +43 -4
- package/dist/cjs/lib/v3/v3.js.map +1 -1
- package/dist/cjs/lib/v3/verifier/types.d.ts +3 -2
- package/dist/cjs/lib/v3/verifier/types.js.map +1 -1
- package/dist/cjs/lib/version.d.ts +1 -1
- package/dist/cjs/lib/version.js +1 -1
- package/dist/cjs/lib/version.js.map +1 -1
- package/dist/esm/lib/modelUtils.d.ts +10 -0
- package/dist/esm/lib/modelUtils.js +9 -0
- package/dist/esm/lib/modelUtils.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentClient.d.ts +2 -2
- package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js +3 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +4 -3
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +11 -9
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +12 -3
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +107 -22
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.d.ts +2 -2
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +2 -2
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +6 -3
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +13 -7
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.d.ts +1 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +42 -3
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/esm/lib/v3/api.js +9 -0
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/AgentCache.js +6 -1
- package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/esm/lib/v3/external_clients/aisdk.js +2 -0
- package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +35 -11
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +32 -18
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +2 -1
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +2 -2
- package/dist/esm/lib/v3/llm/LLMProvider.js +9 -2
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +2 -0
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/llm/providerOptions.d.ts +7 -0
- package/dist/esm/lib/v3/llm/providerOptions.js +6 -0
- package/dist/esm/lib/v3/llm/providerOptions.js.map +1 -0
- package/dist/esm/lib/v3/types/private/agent.d.ts +1 -1
- package/dist/esm/lib/v3/types/private/agent.js +1 -0
- package/dist/esm/lib/v3/types/private/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +10 -1
- package/dist/esm/lib/v3/types/public/agent.js +3 -0
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/context.d.ts +7 -0
- package/dist/esm/lib/v3/types/public/context.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +7 -0
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +4 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +7 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +4 -3
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
- package/dist/esm/lib/v3/understudy/cdp.d.ts +2 -0
- package/dist/esm/lib/v3/understudy/cdp.js +26 -12
- package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.d.ts +13 -1
- package/dist/esm/lib/v3/understudy/context.js +285 -2
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/domainPolicy.d.ts +25 -0
- package/dist/esm/lib/v3/understudy/domainPolicy.js +158 -0
- package/dist/esm/lib/v3/understudy/domainPolicy.js.map +1 -0
- package/dist/esm/lib/v3/v3.js +44 -5
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/lib/v3/verifier/types.d.ts +3 -2
- package/dist/esm/lib/v3/verifier/types.js.map +1 -1
- package/dist/esm/lib/version.d.ts +1 -1
- package/dist/esm/lib/version.js +1 -1
- package/dist/esm/lib/version.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StagehandClosedError = exports.AgentAbortError = exports.StreamingCallbacksInNonStreamingModeError = exports.ConnectionTimeoutError = exports.PageNotFoundError = exports.ObserveTimeoutError = exports.ExtractTimeoutError = exports.ActTimeoutError = exports.TimeoutError = exports.ResponseParseError = exports.ResponseBodyError = exports.ElementNotVisibleError = exports.StagehandShadowSegmentNotFoundError = exports.StagehandShadowSegmentEmptyError = exports.StagehandShadowRootMissingError = exports.MCPConnectionError = exports.StagehandInitError = exports.ZodSchemaValidationError = exports.CuaModelRequiredError = exports.ExperimentalNotConfiguredError = exports.ExperimentalApiConflictError = exports.XPathResolutionError = exports.ContentFrameNotFoundError = exports.StagehandIframeError = exports.LLMResponseError = exports.StagehandClickError = exports.StagehandLocatorError = exports.StagehandDomProcessError = exports.StagehandEvalError = exports.CreateChatCompletionResponseError = exports.StagehandMissingArgumentError = exports.AgentScreenshotProviderError = exports.StagehandElementNotFoundError = exports.CookieSetError = exports.CookieValidationError = exports.StagehandInvalidArgumentError = exports.HandlerNotInitializedError = exports.MissingLLMConfigurationError = exports.CaptchaTimeoutError = exports.BrowserbaseSessionNotFoundError = exports.StagehandNotInitializedError = exports.InvalidAISDKModelFormatError = exports.StagehandUnsupportedBrowserFeatureError = exports.UnsupportedAISDKModelProviderError = exports.UnsupportedModelProviderError = exports.UnsupportedModelError = exports.MissingEnvironmentVariableError = exports.StagehandEnvironmentError = exports.StagehandDefaultError = exports.StagehandError = void 0;
|
|
4
|
-
exports.UnderstudyCommandException = exports.StagehandSnapshotError = exports.StagehandSetExtraHTTPHeadersError = exports.CdpConnectionClosedError = void 0;
|
|
4
|
+
exports.UnderstudyCommandException = exports.StagehandSnapshotError = exports.StagehandSetDomainPolicyError = exports.StagehandSetExtraHTTPHeadersError = exports.CdpConnectionClosedError = void 0;
|
|
5
5
|
// Avoid .js extension so bundlers resolve TS source
|
|
6
6
|
const version_js_1 = require("../../../version.js");
|
|
7
7
|
class StagehandError extends Error {
|
|
@@ -375,6 +375,14 @@ class StagehandSetExtraHTTPHeadersError extends StagehandError {
|
|
|
375
375
|
}
|
|
376
376
|
}
|
|
377
377
|
exports.StagehandSetExtraHTTPHeadersError = StagehandSetExtraHTTPHeadersError;
|
|
378
|
+
class StagehandSetDomainPolicyError extends StagehandError {
|
|
379
|
+
failures;
|
|
380
|
+
constructor(failures) {
|
|
381
|
+
super(`setDomainPolicy failed for ${failures.length} session(s): ${failures.join(", ")}`);
|
|
382
|
+
this.failures = failures;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
exports.StagehandSetDomainPolicyError = StagehandSetDomainPolicyError;
|
|
378
386
|
class StagehandSnapshotError extends StagehandError {
|
|
379
387
|
constructor(cause) {
|
|
380
388
|
const suffix = cause instanceof Error
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkErrors.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/public/sdkErrors.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodError } from \"zod\";\n// Avoid .js extension so bundlers resolve TS source\nimport { STAGEHAND_VERSION } from \"../../../version.js\";\n\nexport class StagehandError extends Error {\n public readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = this.constructor.name;\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n\nexport class StagehandDefaultError extends StagehandError {\n constructor(error?: unknown) {\n if (error instanceof Error || error instanceof StagehandError) {\n super(\n `\\nHey! We're sorry you ran into an error. \\nStagehand version: ${STAGEHAND_VERSION} \\nIf you need help, please open a Github issue or reach out to us on Discord: https://stagehand.dev/discord\\n\\nFull error:\\n${error.message}`,\n );\n }\n }\n}\n\nexport class StagehandEnvironmentError extends StagehandError {\n constructor(\n currentEnvironment: string,\n requiredEnvironment: string,\n feature: string,\n ) {\n super(\n `You seem to be setting the current environment to ${currentEnvironment}.` +\n `Ensure the environment is set to ${requiredEnvironment} if you want to use ${feature}.`,\n );\n }\n}\n\nexport class MissingEnvironmentVariableError extends StagehandError {\n constructor(missingEnvironmentVariable: string, feature: string) {\n super(\n `${missingEnvironmentVariable} is required to use ${feature}.` +\n `Please set ${missingEnvironmentVariable} in your environment.`,\n );\n }\n}\n\nexport class UnsupportedModelError extends StagehandError {\n constructor(supportedModels: string[], feature?: string) {\n const message = feature\n ? `${feature} requires a valid model.`\n : `Unsupported model.`;\n\n const guidance =\n `\\n\\nPlease use the provider/model format (e.g., \"openai/gpt-4o\", \"anthropic/claude-sonnet-4-5\", \"google/gemini-3-flash-preview\").` +\n `\\n\\nFor a complete list of supported models and providers, see: https://docs.stagehand.dev/v3/configuration/models#configuration-setup`;\n\n super(`${message}${guidance}`);\n }\n}\n\nexport class UnsupportedModelProviderError extends StagehandError {\n constructor(supportedProviders: string[], feature?: string) {\n super(\n feature\n ? `${feature} requires one of the following model providers: ${supportedProviders}`\n : `please use one of the supported model providers: ${supportedProviders}`,\n );\n }\n}\n\nexport class UnsupportedAISDKModelProviderError extends StagehandError {\n constructor(provider: string, supportedProviders: string[]) {\n super(\n `${provider} is not currently supported for aiSDK. please use one of the supported model providers: ${supportedProviders}`,\n );\n }\n}\n\nexport class StagehandUnsupportedBrowserFeatureError extends StagehandError {\n constructor(feature: string, message: string, cause?: unknown) {\n super(`Unsupported browser feature \"${feature}\": ${message}`, cause);\n }\n}\n\nexport class InvalidAISDKModelFormatError extends StagehandError {\n constructor(modelName: string) {\n super(\n `${modelName} does not follow correct format for specifying aiSDK models. Please define your model as 'provider/model-name'. For example: \\`model: 'openai/gpt-4o-mini'\\``,\n );\n }\n}\n\nexport class StagehandNotInitializedError extends StagehandError {\n constructor(prop: string) {\n super(\n `You seem to be calling \\`${prop}\\` on a page in an uninitialized \\`Stagehand\\` object. ` +\n `Ensure you are running \\`await stagehand.init()\\` on the Stagehand object before ` +\n `referencing the \\`page\\` object.`,\n );\n }\n}\n\nexport class BrowserbaseSessionNotFoundError extends StagehandError {\n constructor() {\n super(\"No Browserbase session ID found\");\n }\n}\n\nexport class CaptchaTimeoutError extends StagehandError {\n constructor() {\n super(\"Captcha timeout\");\n }\n}\n\nexport class MissingLLMConfigurationError extends StagehandError {\n constructor() {\n super(\n \"No LLM API key or LLM Client configured. An LLM API key or a custom LLM Client \" +\n \"is required to use act, extract, or observe.\",\n );\n }\n}\n\nexport class HandlerNotInitializedError extends StagehandError {\n constructor(handlerType: string) {\n super(`${handlerType} handler not initialized`);\n }\n}\n\nexport class StagehandInvalidArgumentError extends StagehandError {\n constructor(message: string) {\n super(`InvalidArgumentError: ${message}`);\n }\n}\n\nexport class CookieValidationError extends StagehandError {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class CookieSetError extends StagehandError {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class StagehandElementNotFoundError extends StagehandError {\n constructor(xpaths: string[]) {\n super(`Could not find an element for the given xPath(s): ${xpaths}`);\n }\n}\n\nexport class AgentScreenshotProviderError extends StagehandError {\n constructor(message: string) {\n super(`ScreenshotProviderError: ${message}`);\n }\n}\n\nexport class StagehandMissingArgumentError extends StagehandError {\n constructor(message: string) {\n super(`MissingArgumentError: ${message}`);\n }\n}\n\nexport class CreateChatCompletionResponseError extends StagehandError {\n constructor(message: string) {\n super(`CreateChatCompletionResponseError: ${message}`);\n }\n}\n\nexport class StagehandEvalError extends StagehandError {\n constructor(message: string) {\n super(`StagehandEvalError: ${message}`);\n }\n}\n\nexport class StagehandDomProcessError extends StagehandError {\n constructor(message: string) {\n super(`Error Processing Dom: ${message}`);\n }\n}\n\nexport class StagehandLocatorError extends StagehandError {\n constructor(action: string, selector: string, message: string) {\n super(\n `Error ${action} Element with selector: ${selector} Reason: ${message}`,\n );\n }\n}\n\nexport class StagehandClickError extends StagehandError {\n constructor(message: string, selector: string) {\n super(\n `Error Clicking Element with selector: ${selector} Reason: ${message}`,\n );\n }\n}\n\nexport class LLMResponseError extends StagehandError {\n constructor(primitive: string, message: string) {\n super(`${primitive} LLM response error: ${message}`);\n }\n}\n\nexport class StagehandIframeError extends StagehandError {\n constructor(frameUrl: string, message: string) {\n super(\n `Unable to resolve frameId for iframe with URL: ${frameUrl} Full error: ${message}`,\n );\n }\n}\n\nexport class ContentFrameNotFoundError extends StagehandError {\n constructor(selector: string) {\n super(`Unable to obtain a content frame for selector: ${selector}`);\n }\n}\n\nexport class XPathResolutionError extends StagehandError {\n constructor(xpath: string) {\n super(`XPath \"${xpath}\" does not resolve in the current page or frames`);\n }\n}\n\nexport class ExperimentalApiConflictError extends StagehandError {\n constructor() {\n super(\n \"`experimental` mode cannot be used together with the Stagehand API. \" +\n \"To use experimental features, set experimental: true and disableAPI: true in the stagehand constructor. \" +\n \"To use the Stagehand API, set experimental: false and disableAPI: false (or omit it) in the stagehand constructor.\",\n );\n }\n}\n\nexport class ExperimentalNotConfiguredError extends StagehandError {\n constructor(featureName: string) {\n super(`Feature \"${featureName}\" is an experimental feature, and cannot be configured when disableAPI: false.\n Please set experimental: true and disableAPI: true in the stagehand constructor to use this feature.\n If you wish to use the Stagehand API, please ensure ${featureName} is not defined in your function call,\n and set experimental: false, disableAPI: false (or omit it) in the Stagehand constructor.`);\n }\n}\n\nexport class CuaModelRequiredError extends StagehandError {\n constructor(availableModels: readonly string[]) {\n super(\n `To use the computer use agent (CUA), please provide a CUA model in the agent constructor or stagehand config. ` +\n `Try one of our supported CUA models: ${availableModels.join(\", \")}`,\n );\n }\n}\n\nexport class ZodSchemaValidationError extends Error {\n constructor(\n public readonly received: unknown,\n public readonly issues: ReturnType<ZodError[\"format\"]>,\n ) {\n super(`Zod schema validation failed\n\n— Received —\n${JSON.stringify(received, null, 2)}\n\n— Issues —\n${JSON.stringify(issues, null, 2)}`);\n this.name = \"ZodSchemaValidationError\";\n }\n}\n\nexport class StagehandInitError extends StagehandError {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class MCPConnectionError extends StagehandError {\n public readonly serverUrl: string;\n public readonly originalError: unknown;\n\n constructor(serverUrl: string, originalError: unknown) {\n const errorMessage =\n originalError instanceof Error\n ? originalError.message\n : String(originalError);\n\n super(\n `Failed to connect to MCP server at \"${serverUrl}\". ${errorMessage}. ` +\n `Please verify the server URL is correct and the server is running.`,\n );\n\n this.serverUrl = serverUrl;\n this.originalError = originalError;\n }\n}\n\nexport class StagehandShadowRootMissingError extends StagehandError {\n constructor(detail?: string) {\n super(\n `No shadow root present on the resolved host` +\n (detail ? `: ${detail}` : \"\"),\n );\n }\n}\n\nexport class StagehandShadowSegmentEmptyError extends StagehandError {\n constructor() {\n super(`Empty selector segment after shadow-DOM hop (\"//\")`);\n }\n}\n\nexport class StagehandShadowSegmentNotFoundError extends StagehandError {\n constructor(segment: string, hint?: string) {\n super(\n `Shadow segment '${segment}' matched no element inside shadow root` +\n (hint ? ` ${hint}` : \"\"),\n );\n }\n}\n\nexport class ElementNotVisibleError extends StagehandError {\n constructor(selector: string) {\n super(`Element not visible (no box model): ${selector}`);\n }\n}\n\nexport class ResponseBodyError extends StagehandError {\n constructor(message: string) {\n super(`Failed to retrieve response body: ${message}`);\n }\n}\n\nexport class ResponseParseError extends StagehandError {\n constructor(message: string) {\n super(`Failed to parse response: ${message}`);\n }\n}\n\nexport class TimeoutError extends StagehandError {\n constructor(operation: string, timeoutMs: number) {\n super(`${operation} timed out after ${timeoutMs}ms`);\n }\n}\n\nexport class ActTimeoutError extends TimeoutError {\n constructor(timeoutMs: number) {\n super(\"act()\", timeoutMs);\n this.name = \"ActTimeoutError\";\n }\n}\n\nexport class ExtractTimeoutError extends TimeoutError {\n constructor(timeoutMs: number) {\n super(\"extract()\", timeoutMs);\n this.name = \"ExtractTimeoutError\";\n }\n}\n\nexport class ObserveTimeoutError extends TimeoutError {\n constructor(timeoutMs: number) {\n super(\"observe()\", timeoutMs);\n this.name = \"ObserveTimeoutError\";\n }\n}\n\nexport class PageNotFoundError extends StagehandError {\n constructor(identifier: string) {\n super(`No Page found for ${identifier}`);\n }\n}\n\nexport class ConnectionTimeoutError extends StagehandError {\n constructor(message: string) {\n super(`Connection timeout: ${message}`);\n }\n}\n\nexport class StreamingCallbacksInNonStreamingModeError extends StagehandError {\n public readonly invalidCallbacks: string[];\n\n constructor(invalidCallbacks: string[]) {\n super(\n `Streaming-only callback(s) \"${invalidCallbacks.join('\", \"')}\" cannot be used in non-streaming mode. ` +\n `Set 'stream: true' in AgentConfig to use these callbacks.`,\n );\n this.invalidCallbacks = invalidCallbacks;\n }\n}\n\nexport class AgentAbortError extends StagehandError {\n public readonly reason: string;\n\n constructor(reason?: string) {\n const message = reason\n ? `Agent execution was aborted: ${reason}`\n : \"Agent execution was aborted\";\n super(message);\n this.reason = reason || \"aborted\";\n }\n}\n\nexport class StagehandClosedError extends StagehandError {\n constructor() {\n super(\"Stagehand session was closed\");\n }\n}\n\nexport class CdpConnectionClosedError extends StagehandError {\n constructor(reason: string) {\n super(`CDP connection closed: ${reason}`);\n }\n}\n\nexport class StagehandSetExtraHTTPHeadersError extends StagehandError {\n public readonly failures: string[];\n\n constructor(failures: string[]) {\n super(\n `setExtraHTTPHeaders failed for ${failures.length} session(s): ${failures.join(\", \")}`,\n );\n this.failures = failures;\n }\n}\n\nexport class StagehandSnapshotError extends StagehandError {\n constructor(cause?: unknown) {\n const suffix =\n cause instanceof Error\n ? `: ${cause.message}`\n : cause\n ? `: ${String(cause)}`\n : \"\";\n super(`error taking snapshot${suffix}`, cause);\n }\n}\n\nexport class UnderstudyCommandException extends StagehandError {\n constructor(message: string, cause?: unknown) {\n super(message, cause);\n this.name = \"UnderstudyCommandException\";\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdkErrors.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/public/sdkErrors.ts"],"names":[],"mappings":";;;;AACA,oDAAoD;AACpD,oDAAwD;AAExD,MAAa,cAAe,SAAQ,KAAK;IACvB,KAAK,CAAW;IAEhC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAVD,wCAUC;AAED,MAAa,qBAAsB,SAAQ,cAAc;IACvD,YAAY,KAAe;QACzB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YAC9D,KAAK,CACH,kEAAkE,8BAAiB,gIAAgI,KAAK,CAAC,OAAO,EAAE,CACnO,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AARD,sDAQC;AAED,MAAa,yBAA0B,SAAQ,cAAc;IAC3D,YACE,kBAA0B,EAC1B,mBAA2B,EAC3B,OAAe;QAEf,KAAK,CACH,qDAAqD,kBAAkB,GAAG;YACxE,oCAAoC,mBAAmB,uBAAuB,OAAO,GAAG,CAC3F,CAAC;IACJ,CAAC;CACF;AAXD,8DAWC;AAED,MAAa,+BAAgC,SAAQ,cAAc;IACjE,YAAY,0BAAkC,EAAE,OAAe;QAC7D,KAAK,CACH,GAAG,0BAA0B,uBAAuB,OAAO,GAAG;YAC5D,cAAc,0BAA0B,uBAAuB,CAClE,CAAC;IACJ,CAAC;CACF;AAPD,0EAOC;AAED,MAAa,qBAAsB,SAAQ,cAAc;IACvD,YAAY,eAAyB,EAAE,OAAgB;QACrD,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,GAAG,OAAO,0BAA0B;YACtC,CAAC,CAAC,oBAAoB,CAAC;QAEzB,MAAM,QAAQ,GACZ,mIAAmI;YACnI,wIAAwI,CAAC;QAE3I,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAC;IACjC,CAAC;CACF;AAZD,sDAYC;AAED,MAAa,6BAA8B,SAAQ,cAAc;IAC/D,YAAY,kBAA4B,EAAE,OAAgB;QACxD,KAAK,CACH,OAAO;YACL,CAAC,CAAC,GAAG,OAAO,mDAAmD,kBAAkB,EAAE;YACnF,CAAC,CAAC,oDAAoD,kBAAkB,EAAE,CAC7E,CAAC;IACJ,CAAC;CACF;AARD,sEAQC;AAED,MAAa,kCAAmC,SAAQ,cAAc;IACpE,YAAY,QAAgB,EAAE,kBAA4B;QACxD,KAAK,CACH,GAAG,QAAQ,2FAA2F,kBAAkB,EAAE,CAC3H,CAAC;IACJ,CAAC;CACF;AAND,gFAMC;AAED,MAAa,uCAAwC,SAAQ,cAAc;IACzE,YAAY,OAAe,EAAE,OAAe,EAAE,KAAe;QAC3D,KAAK,CAAC,gCAAgC,OAAO,MAAM,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;CACF;AAJD,0FAIC;AAED,MAAa,4BAA6B,SAAQ,cAAc;IAC9D,YAAY,SAAiB;QAC3B,KAAK,CACH,GAAG,SAAS,8JAA8J,CAC3K,CAAC;IACJ,CAAC;CACF;AAND,oEAMC;AAED,MAAa,4BAA6B,SAAQ,cAAc;IAC9D,YAAY,IAAY;QACtB,KAAK,CACH,4BAA4B,IAAI,yDAAyD;YACvF,mFAAmF;YACnF,kCAAkC,CACrC,CAAC;IACJ,CAAC;CACF;AARD,oEAQC;AAED,MAAa,+BAAgC,SAAQ,cAAc;IACjE;QACE,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3C,CAAC;CACF;AAJD,0EAIC;AAED,MAAa,mBAAoB,SAAQ,cAAc;IACrD;QACE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3B,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,4BAA6B,SAAQ,cAAc;IAC9D;QACE,KAAK,CACH,iFAAiF;YAC/E,8CAA8C,CACjD,CAAC;IACJ,CAAC;CACF;AAPD,oEAOC;AAED,MAAa,0BAA2B,SAAQ,cAAc;IAC5D,YAAY,WAAmB;QAC7B,KAAK,CAAC,GAAG,WAAW,0BAA0B,CAAC,CAAC;IAClD,CAAC;CACF;AAJD,gEAIC;AAED,MAAa,6BAA8B,SAAQ,cAAc;IAC/D,YAAY,OAAe;QACzB,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF;AAJD,sEAIC;AAED,MAAa,qBAAsB,SAAQ,cAAc;IACvD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,sDAIC;AAED,MAAa,cAAe,SAAQ,cAAc;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,wCAIC;AAED,MAAa,6BAA8B,SAAQ,cAAc;IAC/D,YAAY,MAAgB;QAC1B,KAAK,CAAC,qDAAqD,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;CACF;AAJD,sEAIC;AAED,MAAa,4BAA6B,SAAQ,cAAc;IAC9D,YAAY,OAAe;QACzB,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF;AAJD,oEAIC;AAED,MAAa,6BAA8B,SAAQ,cAAc;IAC/D,YAAY,OAAe;QACzB,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF;AAJD,sEAIC;AAED,MAAa,iCAAkC,SAAQ,cAAc;IACnE,YAAY,OAAe;QACzB,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;CACF;AAJD,8EAIC;AAED,MAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAJD,gDAIC;AAED,MAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,OAAe;QACzB,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,qBAAsB,SAAQ,cAAc;IACvD,YAAY,MAAc,EAAE,QAAgB,EAAE,OAAe;QAC3D,KAAK,CACH,SAAS,MAAM,2BAA2B,QAAQ,YAAY,OAAO,EAAE,CACxE,CAAC;IACJ,CAAC;CACF;AAND,sDAMC;AAED,MAAa,mBAAoB,SAAQ,cAAc;IACrD,YAAY,OAAe,EAAE,QAAgB;QAC3C,KAAK,CACH,yCAAyC,QAAQ,YAAY,OAAO,EAAE,CACvE,CAAC;IACJ,CAAC;CACF;AAND,kDAMC;AAED,MAAa,gBAAiB,SAAQ,cAAc;IAClD,YAAY,SAAiB,EAAE,OAAe;QAC5C,KAAK,CAAC,GAAG,SAAS,wBAAwB,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAJD,4CAIC;AAED,MAAa,oBAAqB,SAAQ,cAAc;IACtD,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CACH,kDAAkD,QAAQ,gBAAgB,OAAO,EAAE,CACpF,CAAC;IACJ,CAAC;CACF;AAND,oDAMC;AAED,MAAa,yBAA0B,SAAQ,cAAc;IAC3D,YAAY,QAAgB;QAC1B,KAAK,CAAC,kDAAkD,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;CACF;AAJD,8DAIC;AAED,MAAa,oBAAqB,SAAQ,cAAc;IACtD,YAAY,KAAa;QACvB,KAAK,CAAC,UAAU,KAAK,kDAAkD,CAAC,CAAC;IAC3E,CAAC;CACF;AAJD,oDAIC;AAED,MAAa,4BAA6B,SAAQ,cAAc;IAC9D;QACE,KAAK,CACH,sEAAsE;YACpE,0GAA0G;YAC1G,oHAAoH,CACvH,CAAC;IACJ,CAAC;CACF;AARD,oEAQC;AAED,MAAa,8BAA+B,SAAQ,cAAc;IAChE,YAAY,WAAmB;QAC7B,KAAK,CAAC,YAAY,WAAW;;0DAEyB,WAAW;8FACyB,CAAC,CAAC;IAC9F,CAAC;CACF;AAPD,wEAOC;AAED,MAAa,qBAAsB,SAAQ,cAAc;IACvD,YAAY,eAAkC;QAC5C,KAAK,CACH,gHAAgH;YAC9G,wCAAwC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;IACJ,CAAC;CACF;AAPD,sDAOC;AAED,MAAa,wBAAyB,SAAQ,KAAK;IAE/B;IACA;IAFlB,YACkB,QAAiB,EACjB,MAAsC;QAEtD,KAAK,CAAC;;;EAGR,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;;EAGjC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QATjB,aAAQ,GAAR,QAAQ,CAAS;QACjB,WAAM,GAAN,MAAM,CAAgC;QAStD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAdD,4DAcC;AAED,MAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,gDAIC;AAED,MAAa,kBAAmB,SAAQ,cAAc;IACpC,SAAS,CAAS;IAClB,aAAa,CAAU;IAEvC,YAAY,SAAiB,EAAE,aAAsB;QACnD,MAAM,YAAY,GAChB,aAAa,YAAY,KAAK;YAC5B,CAAC,CAAC,aAAa,CAAC,OAAO;YACvB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE5B,KAAK,CACH,uCAAuC,SAAS,MAAM,YAAY,IAAI;YACpE,oEAAoE,CACvE,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAlBD,gDAkBC;AAED,MAAa,+BAAgC,SAAQ,cAAc;IACjE,YAAY,MAAe;QACzB,KAAK,CACH,6CAA6C;YAC3C,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChC,CAAC;IACJ,CAAC;CACF;AAPD,0EAOC;AAED,MAAa,gCAAiC,SAAQ,cAAc;IAClE;QACE,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC9D,CAAC;CACF;AAJD,4EAIC;AAED,MAAa,mCAAoC,SAAQ,cAAc;IACrE,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CACH,mBAAmB,OAAO,yCAAyC;YACjE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3B,CAAC;IACJ,CAAC;CACF;AAPD,kFAOC;AAED,MAAa,sBAAuB,SAAQ,cAAc;IACxD,YAAY,QAAgB;QAC1B,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF;AAJD,wDAIC;AAED,MAAa,iBAAkB,SAAQ,cAAc;IACnD,YAAY,OAAe;QACzB,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;CACF;AAJD,8CAIC;AAED,MAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;CACF;AAJD,gDAIC;AAED,MAAa,YAAa,SAAQ,cAAc;IAC9C,YAAY,SAAiB,EAAE,SAAiB;QAC9C,KAAK,CAAC,GAAG,SAAS,oBAAoB,SAAS,IAAI,CAAC,CAAC;IACvD,CAAC;CACF;AAJD,oCAIC;AAED,MAAa,eAAgB,SAAQ,YAAY;IAC/C,YAAY,SAAiB;QAC3B,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,SAAiB;QAC3B,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,SAAiB;QAC3B,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,MAAa,iBAAkB,SAAQ,cAAc;IACnD,YAAY,UAAkB;QAC5B,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF;AAJD,8CAIC;AAED,MAAa,sBAAuB,SAAQ,cAAc;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAJD,wDAIC;AAED,MAAa,yCAA0C,SAAQ,cAAc;IAC3D,gBAAgB,CAAW;IAE3C,YAAY,gBAA0B;QACpC,KAAK,CACH,+BAA+B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,0CAA0C;YACpG,2DAA2D,CAC9D,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAVD,8FAUC;AAED,MAAa,eAAgB,SAAQ,cAAc;IACjC,MAAM,CAAS;IAE/B,YAAY,MAAe;QACzB,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,gCAAgC,MAAM,EAAE;YAC1C,CAAC,CAAC,6BAA6B,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,SAAS,CAAC;IACpC,CAAC;CACF;AAVD,0CAUC;AAED,MAAa,oBAAqB,SAAQ,cAAc;IACtD;QACE,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACxC,CAAC;CACF;AAJD,oDAIC;AAED,MAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,MAAc;QACxB,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,iCAAkC,SAAQ,cAAc;IACnD,QAAQ,CAAW;IAEnC,YAAY,QAAkB;QAC5B,KAAK,CACH,kCAAkC,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AATD,8EASC;AAED,MAAa,6BAA8B,SAAQ,cAAc;IAC/C,QAAQ,CAAW;IAEnC,YAAY,QAAkB;QAC5B,KAAK,CACH,8BAA8B,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AATD,sEASC;AAED,MAAa,sBAAuB,SAAQ,cAAc;IACxD,YAAY,KAAe;QACzB,MAAM,MAAM,GACV,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE;YACtB,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;gBACtB,CAAC,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,wBAAwB,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF;AAVD,wDAUC;AAED,MAAa,0BAA2B,SAAQ,cAAc;IAC5D,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AALD,gEAKC","sourcesContent":["import { ZodError } from \"zod\";\n// Avoid .js extension so bundlers resolve TS source\nimport { STAGEHAND_VERSION } from \"../../../version.js\";\n\nexport class StagehandError extends Error {\n public readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = this.constructor.name;\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n\nexport class StagehandDefaultError extends StagehandError {\n constructor(error?: unknown) {\n if (error instanceof Error || error instanceof StagehandError) {\n super(\n `\\nHey! We're sorry you ran into an error. \\nStagehand version: ${STAGEHAND_VERSION} \\nIf you need help, please open a Github issue or reach out to us on Discord: https://stagehand.dev/discord\\n\\nFull error:\\n${error.message}`,\n );\n }\n }\n}\n\nexport class StagehandEnvironmentError extends StagehandError {\n constructor(\n currentEnvironment: string,\n requiredEnvironment: string,\n feature: string,\n ) {\n super(\n `You seem to be setting the current environment to ${currentEnvironment}.` +\n `Ensure the environment is set to ${requiredEnvironment} if you want to use ${feature}.`,\n );\n }\n}\n\nexport class MissingEnvironmentVariableError extends StagehandError {\n constructor(missingEnvironmentVariable: string, feature: string) {\n super(\n `${missingEnvironmentVariable} is required to use ${feature}.` +\n `Please set ${missingEnvironmentVariable} in your environment.`,\n );\n }\n}\n\nexport class UnsupportedModelError extends StagehandError {\n constructor(supportedModels: string[], feature?: string) {\n const message = feature\n ? `${feature} requires a valid model.`\n : `Unsupported model.`;\n\n const guidance =\n `\\n\\nPlease use the provider/model format (e.g., \"openai/gpt-4o\", \"anthropic/claude-sonnet-4-5\", \"google/gemini-3-flash-preview\").` +\n `\\n\\nFor a complete list of supported models and providers, see: https://docs.stagehand.dev/v3/configuration/models#configuration-setup`;\n\n super(`${message}${guidance}`);\n }\n}\n\nexport class UnsupportedModelProviderError extends StagehandError {\n constructor(supportedProviders: string[], feature?: string) {\n super(\n feature\n ? `${feature} requires one of the following model providers: ${supportedProviders}`\n : `please use one of the supported model providers: ${supportedProviders}`,\n );\n }\n}\n\nexport class UnsupportedAISDKModelProviderError extends StagehandError {\n constructor(provider: string, supportedProviders: string[]) {\n super(\n `${provider} is not currently supported for aiSDK. please use one of the supported model providers: ${supportedProviders}`,\n );\n }\n}\n\nexport class StagehandUnsupportedBrowserFeatureError extends StagehandError {\n constructor(feature: string, message: string, cause?: unknown) {\n super(`Unsupported browser feature \"${feature}\": ${message}`, cause);\n }\n}\n\nexport class InvalidAISDKModelFormatError extends StagehandError {\n constructor(modelName: string) {\n super(\n `${modelName} does not follow correct format for specifying aiSDK models. Please define your model as 'provider/model-name'. For example: \\`model: 'openai/gpt-4o-mini'\\``,\n );\n }\n}\n\nexport class StagehandNotInitializedError extends StagehandError {\n constructor(prop: string) {\n super(\n `You seem to be calling \\`${prop}\\` on a page in an uninitialized \\`Stagehand\\` object. ` +\n `Ensure you are running \\`await stagehand.init()\\` on the Stagehand object before ` +\n `referencing the \\`page\\` object.`,\n );\n }\n}\n\nexport class BrowserbaseSessionNotFoundError extends StagehandError {\n constructor() {\n super(\"No Browserbase session ID found\");\n }\n}\n\nexport class CaptchaTimeoutError extends StagehandError {\n constructor() {\n super(\"Captcha timeout\");\n }\n}\n\nexport class MissingLLMConfigurationError extends StagehandError {\n constructor() {\n super(\n \"No LLM API key or LLM Client configured. An LLM API key or a custom LLM Client \" +\n \"is required to use act, extract, or observe.\",\n );\n }\n}\n\nexport class HandlerNotInitializedError extends StagehandError {\n constructor(handlerType: string) {\n super(`${handlerType} handler not initialized`);\n }\n}\n\nexport class StagehandInvalidArgumentError extends StagehandError {\n constructor(message: string) {\n super(`InvalidArgumentError: ${message}`);\n }\n}\n\nexport class CookieValidationError extends StagehandError {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class CookieSetError extends StagehandError {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class StagehandElementNotFoundError extends StagehandError {\n constructor(xpaths: string[]) {\n super(`Could not find an element for the given xPath(s): ${xpaths}`);\n }\n}\n\nexport class AgentScreenshotProviderError extends StagehandError {\n constructor(message: string) {\n super(`ScreenshotProviderError: ${message}`);\n }\n}\n\nexport class StagehandMissingArgumentError extends StagehandError {\n constructor(message: string) {\n super(`MissingArgumentError: ${message}`);\n }\n}\n\nexport class CreateChatCompletionResponseError extends StagehandError {\n constructor(message: string) {\n super(`CreateChatCompletionResponseError: ${message}`);\n }\n}\n\nexport class StagehandEvalError extends StagehandError {\n constructor(message: string) {\n super(`StagehandEvalError: ${message}`);\n }\n}\n\nexport class StagehandDomProcessError extends StagehandError {\n constructor(message: string) {\n super(`Error Processing Dom: ${message}`);\n }\n}\n\nexport class StagehandLocatorError extends StagehandError {\n constructor(action: string, selector: string, message: string) {\n super(\n `Error ${action} Element with selector: ${selector} Reason: ${message}`,\n );\n }\n}\n\nexport class StagehandClickError extends StagehandError {\n constructor(message: string, selector: string) {\n super(\n `Error Clicking Element with selector: ${selector} Reason: ${message}`,\n );\n }\n}\n\nexport class LLMResponseError extends StagehandError {\n constructor(primitive: string, message: string) {\n super(`${primitive} LLM response error: ${message}`);\n }\n}\n\nexport class StagehandIframeError extends StagehandError {\n constructor(frameUrl: string, message: string) {\n super(\n `Unable to resolve frameId for iframe with URL: ${frameUrl} Full error: ${message}`,\n );\n }\n}\n\nexport class ContentFrameNotFoundError extends StagehandError {\n constructor(selector: string) {\n super(`Unable to obtain a content frame for selector: ${selector}`);\n }\n}\n\nexport class XPathResolutionError extends StagehandError {\n constructor(xpath: string) {\n super(`XPath \"${xpath}\" does not resolve in the current page or frames`);\n }\n}\n\nexport class ExperimentalApiConflictError extends StagehandError {\n constructor() {\n super(\n \"`experimental` mode cannot be used together with the Stagehand API. \" +\n \"To use experimental features, set experimental: true and disableAPI: true in the stagehand constructor. \" +\n \"To use the Stagehand API, set experimental: false and disableAPI: false (or omit it) in the stagehand constructor.\",\n );\n }\n}\n\nexport class ExperimentalNotConfiguredError extends StagehandError {\n constructor(featureName: string) {\n super(`Feature \"${featureName}\" is an experimental feature, and cannot be configured when disableAPI: false.\n Please set experimental: true and disableAPI: true in the stagehand constructor to use this feature.\n If you wish to use the Stagehand API, please ensure ${featureName} is not defined in your function call,\n and set experimental: false, disableAPI: false (or omit it) in the Stagehand constructor.`);\n }\n}\n\nexport class CuaModelRequiredError extends StagehandError {\n constructor(availableModels: readonly string[]) {\n super(\n `To use the computer use agent (CUA), please provide a CUA model in the agent constructor or stagehand config. ` +\n `Try one of our supported CUA models: ${availableModels.join(\", \")}`,\n );\n }\n}\n\nexport class ZodSchemaValidationError extends Error {\n constructor(\n public readonly received: unknown,\n public readonly issues: ReturnType<ZodError[\"format\"]>,\n ) {\n super(`Zod schema validation failed\n\n— Received —\n${JSON.stringify(received, null, 2)}\n\n— Issues —\n${JSON.stringify(issues, null, 2)}`);\n this.name = \"ZodSchemaValidationError\";\n }\n}\n\nexport class StagehandInitError extends StagehandError {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport class MCPConnectionError extends StagehandError {\n public readonly serverUrl: string;\n public readonly originalError: unknown;\n\n constructor(serverUrl: string, originalError: unknown) {\n const errorMessage =\n originalError instanceof Error\n ? originalError.message\n : String(originalError);\n\n super(\n `Failed to connect to MCP server at \"${serverUrl}\". ${errorMessage}. ` +\n `Please verify the server URL is correct and the server is running.`,\n );\n\n this.serverUrl = serverUrl;\n this.originalError = originalError;\n }\n}\n\nexport class StagehandShadowRootMissingError extends StagehandError {\n constructor(detail?: string) {\n super(\n `No shadow root present on the resolved host` +\n (detail ? `: ${detail}` : \"\"),\n );\n }\n}\n\nexport class StagehandShadowSegmentEmptyError extends StagehandError {\n constructor() {\n super(`Empty selector segment after shadow-DOM hop (\"//\")`);\n }\n}\n\nexport class StagehandShadowSegmentNotFoundError extends StagehandError {\n constructor(segment: string, hint?: string) {\n super(\n `Shadow segment '${segment}' matched no element inside shadow root` +\n (hint ? ` ${hint}` : \"\"),\n );\n }\n}\n\nexport class ElementNotVisibleError extends StagehandError {\n constructor(selector: string) {\n super(`Element not visible (no box model): ${selector}`);\n }\n}\n\nexport class ResponseBodyError extends StagehandError {\n constructor(message: string) {\n super(`Failed to retrieve response body: ${message}`);\n }\n}\n\nexport class ResponseParseError extends StagehandError {\n constructor(message: string) {\n super(`Failed to parse response: ${message}`);\n }\n}\n\nexport class TimeoutError extends StagehandError {\n constructor(operation: string, timeoutMs: number) {\n super(`${operation} timed out after ${timeoutMs}ms`);\n }\n}\n\nexport class ActTimeoutError extends TimeoutError {\n constructor(timeoutMs: number) {\n super(\"act()\", timeoutMs);\n this.name = \"ActTimeoutError\";\n }\n}\n\nexport class ExtractTimeoutError extends TimeoutError {\n constructor(timeoutMs: number) {\n super(\"extract()\", timeoutMs);\n this.name = \"ExtractTimeoutError\";\n }\n}\n\nexport class ObserveTimeoutError extends TimeoutError {\n constructor(timeoutMs: number) {\n super(\"observe()\", timeoutMs);\n this.name = \"ObserveTimeoutError\";\n }\n}\n\nexport class PageNotFoundError extends StagehandError {\n constructor(identifier: string) {\n super(`No Page found for ${identifier}`);\n }\n}\n\nexport class ConnectionTimeoutError extends StagehandError {\n constructor(message: string) {\n super(`Connection timeout: ${message}`);\n }\n}\n\nexport class StreamingCallbacksInNonStreamingModeError extends StagehandError {\n public readonly invalidCallbacks: string[];\n\n constructor(invalidCallbacks: string[]) {\n super(\n `Streaming-only callback(s) \"${invalidCallbacks.join('\", \"')}\" cannot be used in non-streaming mode. ` +\n `Set 'stream: true' in AgentConfig to use these callbacks.`,\n );\n this.invalidCallbacks = invalidCallbacks;\n }\n}\n\nexport class AgentAbortError extends StagehandError {\n public readonly reason: string;\n\n constructor(reason?: string) {\n const message = reason\n ? `Agent execution was aborted: ${reason}`\n : \"Agent execution was aborted\";\n super(message);\n this.reason = reason || \"aborted\";\n }\n}\n\nexport class StagehandClosedError extends StagehandError {\n constructor() {\n super(\"Stagehand session was closed\");\n }\n}\n\nexport class CdpConnectionClosedError extends StagehandError {\n constructor(reason: string) {\n super(`CDP connection closed: ${reason}`);\n }\n}\n\nexport class StagehandSetExtraHTTPHeadersError extends StagehandError {\n public readonly failures: string[];\n\n constructor(failures: string[]) {\n super(\n `setExtraHTTPHeaders failed for ${failures.length} session(s): ${failures.join(\", \")}`,\n );\n this.failures = failures;\n }\n}\n\nexport class StagehandSetDomainPolicyError extends StagehandError {\n public readonly failures: string[];\n\n constructor(failures: string[]) {\n super(\n `setDomainPolicy failed for ${failures.length} session(s): ${failures.join(\", \")}`,\n );\n this.failures = failures;\n }\n}\n\nexport class StagehandSnapshotError extends StagehandError {\n constructor(cause?: unknown) {\n const suffix =\n cause instanceof Error\n ? `: ${cause.message}`\n : cause\n ? `: ${String(cause)}`\n : \"\";\n super(`error taking snapshot${suffix}`, cause);\n }\n}\n\nexport class UnderstudyCommandException extends StagehandError {\n constructor(message: string, cause?: unknown) {\n super(message, cause);\n this.name = \"UnderstudyCommandException\";\n }\n}\n"]}
|
|
@@ -161,14 +161,15 @@ async function tryScopedSnapshot(page, options, context, pierce, sessionToIndex,
|
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
const scopedUrlMap = { ...urlMap };
|
|
164
|
+
const wellFormedOutline = outline.toWellFormed();
|
|
164
165
|
const snapshot = {
|
|
165
|
-
combinedTree:
|
|
166
|
+
combinedTree: wellFormedOutline,
|
|
166
167
|
combinedXpathMap: scopedXpathMap,
|
|
167
168
|
combinedUrlMap: scopedUrlMap,
|
|
168
169
|
perFrame: [
|
|
169
170
|
{
|
|
170
171
|
frameId: targetFrameId,
|
|
171
|
-
outline,
|
|
172
|
+
outline: wellFormedOutline,
|
|
172
173
|
xpathMap,
|
|
173
174
|
urlMap,
|
|
174
175
|
},
|
|
@@ -573,7 +574,7 @@ function mergeFramesIntoSnapshot(context, perFrameMaps, perFrameOutlines, absPre
|
|
|
573
574
|
const rootOutline = perFrameOutlines.find((o) => o.frameId === context.rootId)?.outline ??
|
|
574
575
|
perFrameOutlines[0]?.outline ??
|
|
575
576
|
"";
|
|
576
|
-
const combinedTree = (0, treeFormatUtils_js_1.injectSubtrees)(rootOutline, idToTree);
|
|
577
|
+
const combinedTree = (0, treeFormatUtils_js_1.injectSubtrees)(rootOutline, idToTree).toWellFormed();
|
|
577
578
|
return {
|
|
578
579
|
combinedTree,
|
|
579
580
|
combinedXpathMap,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../../../../../lib/v3/understudy/a11y/snapshot/capture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"../../cdp.js\";\nimport { Page } from \"../../page.js\";\nimport { Frame } from \"../../frame.js\";\nimport {\n FrameSelectorResolver,\n type ResolvedNode,\n type SelectorQuery,\n} from \"../../selectorResolver.js\";\nimport { v3Logger } from \"../../../logger.js\";\nimport type {\n FrameContext,\n FrameDomMaps,\n FrameParentIndex,\n HybridSnapshot,\n SnapshotOptions,\n SessionDomIndex,\n} from \"../../../types/private/index.js\";\nimport { a11yForFrame } from \"./a11yTree.js\";\nimport {\n resolveCssFocusFrameAndTail,\n resolveFocusFrameAndTail,\n listChildrenOf,\n} from \"./focusSelectors.js\";\nimport {\n buildSessionDomIndex,\n domMapsForSession,\n relativizeXPath,\n} from \"./domTree.js\";\nimport { injectSubtrees } from \"./treeFormatUtils.js\";\nimport { ownerSession, parentSession } from \"./sessions.js\";\nimport { normalizeXPath, prefixXPath } from \"./xpathUtils.js\";\n\ntype IgnoredNodeMap = Map<string, Set<number>>;\ntype Interval = { start: number; end: number };\ntype ExclusionIntervalsByFrame = Map<string, Interval[]>;\ntype ChildFrameHost = { childFrameId: string; hostBackendNodeId: number };\ntype ChildFramesByParent = Map<string, ChildFrameHost[]>;\n\n/**\n * Capture a hybrid DOM + Accessibility snapshot for the provided page.\n *\n * Flow overview:\n * 1. (Optional) Scope directly to a requested selector. We walk iframe hops to\n * find the owning frame, build just that frame’s DOM + AX tree, and bail out\n * early when the subtree satisfies the caller.\n * 2. Build DOM indexes for every unique CDP session. DOM.getDocument is called\n * once per session and hydrated so per-frame slices can share the result.\n * 3. Slice each frame’s DOM data from its session index and fetch its AX tree.\n * This yields relative XPath/tag/url maps for the document rooted at that frame.\n * 4. Walk the frame tree to compute absolute iframe prefixes. Every child frame\n * needs the XPath of the iframe element that hosts it so we can prefix maps.\n * 5. Merge all per-frame results into global combined maps and stitch the text\n * outline. The final payload mirrors the legacy shape but is built in layers.\n *\n * Each numbered block below references the step above for easier debugging.\n */\nexport async function captureHybridSnapshot(\n page: Page,\n options?: SnapshotOptions,\n): Promise<HybridSnapshot> {\n const pierce = options?.pierceShadow ?? true;\n const includeIframes = options?.includeIframes !== false;\n const hasIgnoreSelectors = (options?.ignoreSelectors?.length ?? 0) > 0;\n\n const context = buildFrameContext(page);\n const framesInScope = includeIframes ? [...context.frames] : [context.rootId];\n if (!framesInScope.includes(context.rootId)) {\n framesInScope.unshift(context.rootId);\n }\n\n if (!hasIgnoreSelectors) {\n const scopedSnapshot = await tryScopedSnapshot(\n page,\n options,\n context,\n pierce,\n new Map<string, SessionDomIndex>(),\n new Map(),\n );\n if (scopedSnapshot) return scopedSnapshot;\n }\n\n const sessionToIndex = await buildSessionIndexes(page, framesInScope, pierce);\n const ignoredNodesByFrame = await resolveIgnoredNodes(\n page,\n options?.ignoreSelectors,\n context,\n sessionToIndex,\n );\n const exclusionIntervalsByFrame = await buildFrameExclusionIntervals(\n page,\n context,\n sessionToIndex,\n ignoredNodesByFrame,\n );\n if (hasIgnoreSelectors) {\n const scopedSnapshot = await tryScopedSnapshot(\n page,\n options,\n context,\n pierce,\n sessionToIndex,\n exclusionIntervalsByFrame,\n );\n if (scopedSnapshot) return scopedSnapshot;\n }\n\n const { perFrameMaps, perFrameOutlines } = await collectPerFrameMaps(\n page,\n context,\n sessionToIndex,\n options,\n pierce,\n framesInScope,\n exclusionIntervalsByFrame,\n );\n const { absPrefix, iframeHostEncByChild } = await computeFramePrefixes(\n page,\n context,\n perFrameMaps,\n framesInScope,\n );\n\n return mergeFramesIntoSnapshot(\n context,\n perFrameMaps,\n perFrameOutlines,\n absPrefix,\n iframeHostEncByChild,\n framesInScope,\n );\n}\n\n/**\n * Snapshot the current frame tree so downstream helpers have consistent topology\n * without re-querying CDP. The map is intentionally shallow (frameId → parentId)\n * so it is serializable/testable without holding on to CDP handles.\n */\nexport function buildFrameContext(page: Page): FrameContext {\n const rootId = page.mainFrameId();\n const frameTree = page.asProtocolFrameTree(rootId);\n const parentByFrame: FrameParentIndex = new Map();\n (function index(n: Protocol.Page.FrameTree, parent: string | null) {\n parentByFrame.set(n.frame.id, parent);\n for (const c of n.childFrames ?? []) index(c, n.frame.id);\n })(frameTree, null);\n const frames = page.listAllFrameIds();\n return { rootId, parentByFrame, frames };\n}\n\n/**\n * Step 1 – scoped snapshot fast-path. If a selector is provided we try to:\n * 1) Resolve the selector (XPath or CSS) across iframes.\n * 2) Build DOM + AX data only for the owning frame.\n * 3) Bail out early when the selector's subtree satisfies the request.\n *\n * Returns `null` when scoping fails (e.g., selector miss) so the caller can\n * fall back to the full multi-frame snapshot.\n */\nexport async function tryScopedSnapshot(\n page: Page,\n options: SnapshotOptions | undefined,\n context: FrameContext,\n pierce: boolean,\n sessionToIndex: Map<string, SessionDomIndex>,\n exclusionIntervalsByFrame: ExclusionIntervalsByFrame,\n): Promise<HybridSnapshot | null> {\n const requestedFocus = options?.focusSelector?.trim();\n if (!requestedFocus) return null;\n\n const logScopeFallback = () => {\n v3Logger({\n message: `Unable to narrow scope with selector. Falling back to using full DOM`,\n level: 1,\n auxiliary: {\n arguments: {\n value: `selector: ${options?.focusSelector?.trim()}`,\n type: \"string\",\n },\n },\n });\n };\n\n try {\n let targetFrameId: string;\n let tailSelector: string | undefined;\n let absPrefix: string | undefined;\n\n const looksLikeXPath =\n /^xpath=/i.test(requestedFocus) || requestedFocus.startsWith(\"/\");\n if (looksLikeXPath) {\n const focus = normalizeXPath(requestedFocus);\n const hit = await resolveFocusFrameAndTail(\n page,\n focus,\n context.parentByFrame,\n context.rootId,\n );\n targetFrameId = hit.targetFrameId;\n tailSelector = hit.tailXPath || undefined;\n absPrefix = hit.absPrefix;\n } else {\n const cssHit = await resolveCssFocusFrameAndTail(\n page,\n requestedFocus,\n context.parentByFrame,\n context.rootId,\n );\n targetFrameId = cssHit.targetFrameId;\n tailSelector = cssHit.tailSelector || undefined;\n absPrefix = cssHit.absPrefix;\n }\n\n const owningSess = ownerSession(page, targetFrameId);\n const parentId = context.parentByFrame.get(targetFrameId);\n const sameSessionAsParent =\n !!parentId &&\n ownerSession(page, parentId) === ownerSession(page, targetFrameId);\n const { tagNameMap, xpathMap, scrollableMap } = await domMapsForSession(\n owningSess,\n targetFrameId,\n pierce,\n (fid, be) => `${page.getOrdinal(fid)}-${be}`,\n sameSessionAsParent,\n );\n\n const { outline, urlMap, scopeApplied } = await a11yForFrame(\n owningSess,\n targetFrameId,\n {\n focusSelector: tailSelector || undefined,\n isIgnoredBackendNode: makeIsIgnoredBackendNode(\n targetFrameId,\n ownerSessionIndexForFrame(page, targetFrameId, sessionToIndex),\n exclusionIntervalsByFrame,\n ),\n tagNameMap,\n experimental: options?.experimental ?? false,\n scrollableMap,\n encode: (backendNodeId) =>\n `${page.getOrdinal(targetFrameId)}-${backendNodeId}`,\n },\n );\n\n const scopedXpathMap: Record<string, string> = {};\n const isIgnoredBackendNode = makeIsIgnoredBackendNode(\n targetFrameId,\n ownerSessionIndexForFrame(page, targetFrameId, sessionToIndex),\n exclusionIntervalsByFrame,\n );\n const abs = absPrefix ?? \"\";\n const isRoot = !abs || abs === \"/\";\n if (isRoot) {\n for (const [encId, xp] of Object.entries(xpathMap)) {\n const backendNodeId = parseEncodedBackendNodeId(encId);\n if (\n typeof backendNodeId === \"number\" &&\n isIgnoredBackendNode?.(backendNodeId)\n ) {\n continue;\n }\n scopedXpathMap[encId] = xp;\n }\n } else {\n // Prefix relative XPaths so the scoped result matches the global encoding.\n for (const [encId, xp] of Object.entries(xpathMap)) {\n const backendNodeId = parseEncodedBackendNodeId(encId);\n if (\n typeof backendNodeId === \"number\" &&\n isIgnoredBackendNode?.(backendNodeId)\n ) {\n continue;\n }\n scopedXpathMap[encId] = prefixXPath(abs, xp);\n }\n }\n\n const scopedUrlMap: Record<string, string> = { ...urlMap };\n\n const snapshot: HybridSnapshot = {\n combinedTree: outline,\n combinedXpathMap: scopedXpathMap,\n combinedUrlMap: scopedUrlMap,\n perFrame: [\n {\n frameId: targetFrameId,\n outline,\n xpathMap,\n urlMap,\n },\n ],\n };\n\n if (scopeApplied) {\n return snapshot;\n }\n\n logScopeFallback();\n } catch {\n logScopeFallback();\n }\n return null;\n}\n\n/**\n * Step 2 – call DOM.getDocument once per unique CDP session and hydrate the\n * result so per-frame slices can share the structure. We key by session id\n * because same process iframes live inside the same session.\n */\nexport async function buildSessionIndexes(\n page: Page,\n frames: string[],\n pierce: boolean,\n): Promise<Map<string, SessionDomIndex>> {\n const sessionToIndex = new Map<string, SessionDomIndex>();\n const sessionById = new Map<string, CDPSessionLike>();\n for (const frameId of frames) {\n const sess = ownerSession(page, frameId);\n const sid = sess.id ?? \"root\";\n if (!sessionById.has(sid)) sessionById.set(sid, sess);\n }\n for (const [sid, sess] of sessionById.entries()) {\n const idx = await buildSessionDomIndex(sess, pierce);\n sessionToIndex.set(sid, idx);\n }\n return sessionToIndex;\n}\n\n/**\n * Step 3 – derive per-frame DOM maps and accessibility outlines.\n * Each frame:\n * - slices the shared session index down to its document root\n * - builds frame-aware encoded ids (ordinal-backendNodeId)\n * - collects tag/xpath/scrollability maps for DOM-based lookups\n * - fetches its AX tree to produce outlines and URL maps\n */\nexport async function collectPerFrameMaps(\n page: Page,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n options: SnapshotOptions | undefined,\n pierce: boolean,\n frameIds: string[],\n exclusionIntervalsByFrame: ExclusionIntervalsByFrame,\n): Promise<{\n perFrameMaps: Map<string, FrameDomMaps>;\n perFrameOutlines: Array<{ frameId: string; outline: string }>;\n}> {\n const perFrameMaps = new Map<string, FrameDomMaps>();\n const perFrameOutlines: Array<{ frameId: string; outline: string }> = [];\n\n for (const frameId of frameIds) {\n const sess = ownerSession(page, frameId);\n const sid = sess.id ?? \"root\";\n let idx = sessionToIndex.get(sid);\n if (!idx) {\n idx = await buildSessionDomIndex(sess, pierce);\n sessionToIndex.set(sid, idx);\n }\n\n const parentId = context.parentByFrame.get(frameId);\n const sameSessionAsParent =\n !!parentId && ownerSession(page, parentId) === sess;\n\n const docRootBe = await resolveFrameDocRootBackendId(\n page,\n frameId,\n idx,\n sameSessionAsParent,\n );\n\n const tagNameMap: Record<string, string> = {};\n const xpathMap: Record<string, string> = {};\n const scrollableMap: Record<string, boolean> = {};\n const isIgnoredBackendNode = makeIsIgnoredBackendNode(\n frameId,\n idx,\n exclusionIntervalsByFrame,\n );\n const enc = (be: number) => `${page.getOrdinal(frameId)}-${be}`;\n const baseAbs = idx.absByBe.get(docRootBe) ?? \"/\";\n\n for (const [be, nodeAbs] of idx.absByBe.entries()) {\n const nodeDocRoot = idx.docRootOf.get(be);\n if (nodeDocRoot !== docRootBe) continue;\n if (isIgnoredBackendNode?.(be)) continue;\n\n // Translate absolute XPaths into document-relative ones for this frame.\n const rel = relativizeXPath(baseAbs, nodeAbs);\n const key = enc(be);\n xpathMap[key] = rel;\n const tag = idx.tagByBe.get(be);\n if (tag) tagNameMap[key] = tag;\n if (idx.scrollByBe.get(be)) scrollableMap[key] = true;\n }\n\n const { outline, urlMap } = await a11yForFrame(sess, frameId, {\n isIgnoredBackendNode,\n experimental: options?.experimental ?? false,\n tagNameMap,\n scrollableMap,\n encode: (backendNodeId) => `${page.getOrdinal(frameId)}-${backendNodeId}`,\n });\n\n perFrameOutlines.push({ frameId, outline });\n perFrameMaps.set(frameId, { tagNameMap, xpathMap, scrollableMap, urlMap });\n }\n\n return { perFrameMaps, perFrameOutlines };\n}\n\nexport async function resolveIgnoredNodes(\n page: Page,\n ignoreSelectors: string[] | undefined,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n): Promise<IgnoredNodeMap> {\n const ignoredNodesByFrame: IgnoredNodeMap = new Map();\n\n for (const rawSelector of ignoreSelectors ?? []) {\n const selector = rawSelector.trim();\n if (!selector) continue;\n\n try {\n const resolved = await resolveIgnoredNodesForSelector(\n page,\n selector,\n context,\n sessionToIndex,\n );\n for (const match of resolved) {\n const nodes =\n ignoredNodesByFrame.get(match.frameId) ?? new Set<number>();\n nodes.add(match.backendNodeId);\n ignoredNodesByFrame.set(match.frameId, nodes);\n }\n } catch {\n continue;\n }\n }\n\n return ignoredNodesByFrame;\n}\n\nasync function resolveIgnoredNodesForSelector(\n page: Page,\n selector: string,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n): Promise<Array<{ frameId: string; backendNodeId: number }>> {\n const looksLikeXPath = /^xpath=/i.test(selector) || selector.startsWith(\"/\");\n\n if (looksLikeXPath) {\n const hit = await resolveFocusFrameAndTail(\n page,\n normalizeXPath(selector),\n context.parentByFrame,\n context.rootId,\n );\n const targetFrameId = hit.targetFrameId;\n const tailXPath = hit.tailXPath || \"/\";\n if (tailXPath === \"/\") {\n const idx = ownerSessionIndexForFrame(\n page,\n targetFrameId,\n sessionToIndex,\n );\n if (!idx) return [];\n const parentId = context.parentByFrame.get(targetFrameId);\n const sameSessionAsParent =\n !!parentId &&\n ownerSession(page, parentId) === ownerSession(page, targetFrameId);\n const backendNodeId = await resolveFrameDocRootBackendId(\n page,\n targetFrameId,\n idx,\n sameSessionAsParent,\n );\n return [{ frameId: targetFrameId, backendNodeId }];\n }\n return resolveIgnoredNodesInFrame(page, targetFrameId, {\n kind: \"xpath\",\n value: tailXPath,\n });\n }\n\n const hit = await resolveCssFocusFrameAndTail(\n page,\n selector,\n context.parentByFrame,\n context.rootId,\n );\n const targetFrameId = hit.targetFrameId;\n return resolveIgnoredNodesInFrame(page, targetFrameId, {\n kind: \"css\",\n value: hit.tailSelector || selector,\n });\n}\n\nasync function resolveIgnoredNodesInFrame(\n page: Page,\n frameId: string,\n query: SelectorQuery,\n): Promise<Array<{ frameId: string; backendNodeId: number }>> {\n const session = ownerSession(page, frameId);\n const frame = new Frame(session, frameId, \"\", false);\n const resolver = new FrameSelectorResolver(frame);\n const resolvedNodes = await resolver.resolveAll(query);\n if (!resolvedNodes.length) return [];\n\n const backendNodeIds = await describeResolvedNodes(session, resolvedNodes);\n return backendNodeIds.map((backendNodeId) => ({ frameId, backendNodeId }));\n}\n\nasync function describeResolvedNodes(\n session: CDPSessionLike,\n resolvedNodes: ResolvedNode[],\n): Promise<number[]> {\n const backendNodeIds = new Set<number>();\n\n try {\n for (const resolvedNode of resolvedNodes) {\n const desc = await session.send<Protocol.DOM.DescribeNodeResponse>(\n \"DOM.describeNode\",\n { objectId: resolvedNode.objectId },\n );\n const backendNodeId = desc.node.backendNodeId;\n if (typeof backendNodeId === \"number\") {\n backendNodeIds.add(backendNodeId);\n }\n }\n } finally {\n await Promise.all(\n resolvedNodes.map((resolvedNode) =>\n session\n .send(\"Runtime.releaseObject\", { objectId: resolvedNode.objectId })\n .catch(() => {}),\n ),\n );\n }\n\n return [...backendNodeIds];\n}\n\nexport async function buildFrameExclusionIntervals(\n page: Page,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n ignoredNodesByFrame: IgnoredNodeMap,\n): Promise<ExclusionIntervalsByFrame> {\n const intervalsByFrame: ExclusionIntervalsByFrame = new Map();\n if (!ignoredNodesByFrame.size) return intervalsByFrame;\n const childFramesByParent = await resolveChildFramesByParent(page, context);\n const excludedFrames = new Set<string>();\n\n const pushInterval = (frameId: string, start: number, end: number) => {\n const intervals = intervalsByFrame.get(frameId) ?? [];\n intervals.push({ start, end });\n intervalsByFrame.set(frameId, intervals);\n };\n\n const excludeFrameSubtree = async (frameId: string): Promise<void> => {\n if (excludedFrames.has(frameId)) return;\n excludedFrames.add(frameId);\n\n const idx = ownerSessionIndexForFrame(page, frameId, sessionToIndex);\n if (!idx) return;\n const parentId = context.parentByFrame.get(frameId);\n const sameSessionAsParent =\n !!parentId &&\n ownerSession(page, parentId) === ownerSession(page, frameId);\n const docRootBe = await resolveFrameDocRootBackendId(\n page,\n frameId,\n idx,\n sameSessionAsParent,\n );\n const start = idx.enterByBe.get(docRootBe);\n const end = idx.exitByBe.get(docRootBe);\n if (typeof start === \"number\" && typeof end === \"number\") {\n pushInterval(frameId, start, end);\n }\n\n for (const childFrameId of listChildrenOf(context.parentByFrame, frameId)) {\n await excludeFrameSubtree(childFrameId);\n }\n };\n\n const excludeIgnoredNode = async (\n frameId: string,\n backendNodeId: number,\n ): Promise<void> => {\n const idx = ownerSessionIndexForFrame(page, frameId, sessionToIndex);\n if (!idx) return;\n const start = idx.enterByBe.get(backendNodeId);\n const end = idx.exitByBe.get(backendNodeId);\n if (typeof start !== \"number\" || typeof end !== \"number\") return;\n\n pushInterval(frameId, start, end);\n for (const childFrame of childFramesByParent.get(frameId) ?? []) {\n const hostEnter = idx.enterByBe.get(childFrame.hostBackendNodeId);\n if (typeof hostEnter !== \"number\") continue;\n if (hostEnter < start || hostEnter > end) continue;\n await excludeFrameSubtree(childFrame.childFrameId);\n }\n };\n\n for (const [frameId, backendNodeIds] of ignoredNodesByFrame.entries()) {\n for (const backendNodeId of backendNodeIds) {\n await excludeIgnoredNode(frameId, backendNodeId);\n }\n }\n\n for (const [frameId, intervals] of intervalsByFrame.entries()) {\n intervals.sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Interval[] = [];\n for (const interval of intervals) {\n const prev = merged[merged.length - 1];\n if (!prev || interval.start > prev.end) {\n merged.push({ ...interval });\n continue;\n }\n if (interval.end > prev.end) prev.end = interval.end;\n }\n intervalsByFrame.set(frameId, merged);\n }\n\n return intervalsByFrame;\n}\n\nasync function resolveChildFramesByParent(\n page: Page,\n context: FrameContext,\n): Promise<ChildFramesByParent> {\n const childFramesByParent: ChildFramesByParent = new Map();\n\n for (const frameId of context.frames) {\n const parentId = context.parentByFrame.get(frameId);\n if (!parentId) continue;\n\n const session = parentSession(page, context.parentByFrame, frameId);\n if (!session) continue;\n\n try {\n const { backendNodeId } = await session.send<{ backendNodeId?: number }>(\n \"DOM.getFrameOwner\",\n { frameId },\n );\n if (typeof backendNodeId !== \"number\") continue;\n const childFrames = childFramesByParent.get(parentId) ?? [];\n childFrames.push({\n childFrameId: frameId,\n hostBackendNodeId: backendNodeId,\n });\n childFramesByParent.set(parentId, childFrames);\n } catch {\n continue;\n }\n }\n\n return childFramesByParent;\n}\n\nfunction makeIsIgnoredBackendNode(\n frameId: string,\n idx: SessionDomIndex | undefined,\n exclusionIntervalsByFrame: ExclusionIntervalsByFrame,\n): ((backendNodeId: number) => boolean) | undefined {\n if (!idx) return undefined;\n const intervals = exclusionIntervalsByFrame.get(frameId);\n if (!intervals?.length) return undefined;\n\n return (backendNodeId: number): boolean => {\n const enter = idx.enterByBe.get(backendNodeId);\n if (typeof enter !== \"number\") return false;\n\n let lo = 0;\n let hi = intervals.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const interval = intervals[mid]!;\n if (enter < interval.start) {\n hi = mid - 1;\n } else if (enter > interval.end) {\n lo = mid + 1;\n } else {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction parseEncodedBackendNodeId(encodedId: string): number | undefined {\n const parts = encodedId.split(\"-\");\n if (parts.length !== 2) return undefined;\n const backendNodeId = Number(parts[1]);\n return Number.isFinite(backendNodeId) ? backendNodeId : undefined;\n}\n\nfunction ownerSessionIndexForFrame(\n page: Page,\n frameId: string,\n sessionToIndex: Map<string, SessionDomIndex>,\n): SessionDomIndex | undefined {\n const session = ownerSession(page, frameId);\n return sessionToIndex.get(session.id ?? \"root\");\n}\n\nasync function resolveFrameDocRootBackendId(\n page: Page,\n frameId: string,\n idx: SessionDomIndex,\n sameSessionAsParent: boolean,\n): Promise<number> {\n if (!sameSessionAsParent) return idx.rootBackend;\n const session = ownerSession(page, frameId);\n try {\n const { backendNodeId } = await session.send<{ backendNodeId?: number }>(\n \"DOM.getFrameOwner\",\n { frameId },\n );\n if (typeof backendNodeId === \"number\") {\n const docRootBe = idx.contentDocRootByIframe.get(backendNodeId);\n if (typeof docRootBe === \"number\") return docRootBe;\n }\n } catch {\n //\n }\n return idx.rootBackend;\n}\n\n/**\n * Step 4 – walk the frame tree (parent-first) to compute absolute prefixes for\n * every frame. The prefix is the absolute XPath of the iframe element hosting\n * the frame, so we can later convert relative XPaths into cross-frame ones.\n */\nexport async function computeFramePrefixes(\n page: Page,\n context: FrameContext,\n perFrameMaps: Map<string, FrameDomMaps>,\n frameIds: string[],\n): Promise<{\n absPrefix: Map<string, string>;\n iframeHostEncByChild: Map<string, string>;\n}> {\n const absPrefix = new Map<string, string>();\n const iframeHostEncByChild = new Map<string, string>();\n absPrefix.set(context.rootId, \"\");\n const included = new Set(frameIds);\n\n const queue: string[] = [];\n if (included.has(context.rootId)) {\n queue.push(context.rootId);\n }\n\n while (queue.length) {\n const parent = queue.shift()!;\n const parentAbs = absPrefix.get(parent)!;\n\n for (const child of context.frames) {\n if (!included.has(child)) continue;\n if (context.parentByFrame.get(child) !== parent) continue;\n queue.push(child);\n\n const parentSess = parentSession(page, context.parentByFrame, child);\n\n const ownerBackendNodeId = await (async () => {\n try {\n const { backendNodeId } = await parentSess.send<{\n backendNodeId?: number;\n }>(\"DOM.getFrameOwner\", { frameId: child });\n return backendNodeId;\n } catch {\n return undefined;\n }\n })();\n\n if (!ownerBackendNodeId) {\n // OOPIFs resolved via a different session inherit the parent prefix.\n absPrefix.set(child, parentAbs);\n continue;\n }\n\n const parentDom = perFrameMaps.get(parent);\n const iframeEnc = `${page.getOrdinal(parent)}-${ownerBackendNodeId}`;\n const iframeXPath = parentDom?.xpathMap[iframeEnc];\n\n const childAbs = iframeXPath\n ? prefixXPath(parentAbs || \"/\", iframeXPath)\n : parentAbs;\n\n absPrefix.set(child, childAbs);\n iframeHostEncByChild.set(child, iframeEnc);\n }\n }\n\n return { absPrefix, iframeHostEncByChild };\n}\n\n/**\n * Step 5 – merge per-frame maps into the combined snapshot payload. We prefix\n * each frame's relative XPaths with the absolute path collected in step 4,\n * merge URL maps, and stitch text outlines by nesting child trees under the\n * encoded id of their parent iframe host.\n */\nexport function mergeFramesIntoSnapshot(\n context: FrameContext,\n perFrameMaps: Map<string, FrameDomMaps>,\n perFrameOutlines: Array<{ frameId: string; outline: string }>,\n absPrefix: Map<string, string>,\n iframeHostEncByChild: Map<string, string>,\n frameIds: string[],\n): HybridSnapshot {\n const combinedXpathMap: Record<string, string> = {};\n const combinedUrlMap: Record<string, string> = {};\n\n for (const frameId of frameIds) {\n const maps = perFrameMaps.get(frameId);\n if (!maps) continue;\n\n const abs = absPrefix.get(frameId) ?? \"\";\n const isRoot = abs === \"\" || abs === \"/\";\n\n if (isRoot) {\n Object.assign(combinedXpathMap, maps.xpathMap);\n Object.assign(combinedUrlMap, maps.urlMap);\n continue;\n }\n\n for (const [encId, xp] of Object.entries(maps.xpathMap)) {\n combinedXpathMap[encId] = prefixXPath(abs, xp);\n }\n Object.assign(combinedUrlMap, maps.urlMap);\n }\n\n const idToTree = new Map<string, string>();\n for (const { frameId, outline } of perFrameOutlines) {\n const parentEnc = iframeHostEncByChild.get(frameId);\n // The key is the parent iframe's encoded id so injectSubtrees can nest lines.\n if (parentEnc) idToTree.set(parentEnc, outline);\n }\n\n const rootOutline =\n perFrameOutlines.find((o) => o.frameId === context.rootId)?.outline ??\n perFrameOutlines[0]?.outline ??\n \"\";\n const combinedTree = injectSubtrees(rootOutline, idToTree);\n\n return {\n combinedTree,\n combinedXpathMap,\n combinedUrlMap,\n perFrame: perFrameOutlines.map(({ frameId, outline }) => {\n const maps = perFrameMaps.get(frameId);\n return {\n frameId,\n outline,\n xpathMap: maps?.xpathMap ?? {},\n urlMap: maps?.urlMap ?? {},\n };\n }),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../../../../../lib/v3/understudy/a11y/snapshot/capture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"../../cdp.js\";\nimport { Page } from \"../../page.js\";\nimport { Frame } from \"../../frame.js\";\nimport {\n FrameSelectorResolver,\n type ResolvedNode,\n type SelectorQuery,\n} from \"../../selectorResolver.js\";\nimport { v3Logger } from \"../../../logger.js\";\nimport type {\n FrameContext,\n FrameDomMaps,\n FrameParentIndex,\n HybridSnapshot,\n SnapshotOptions,\n SessionDomIndex,\n} from \"../../../types/private/index.js\";\nimport { a11yForFrame } from \"./a11yTree.js\";\nimport {\n resolveCssFocusFrameAndTail,\n resolveFocusFrameAndTail,\n listChildrenOf,\n} from \"./focusSelectors.js\";\nimport {\n buildSessionDomIndex,\n domMapsForSession,\n relativizeXPath,\n} from \"./domTree.js\";\nimport { injectSubtrees } from \"./treeFormatUtils.js\";\nimport { ownerSession, parentSession } from \"./sessions.js\";\nimport { normalizeXPath, prefixXPath } from \"./xpathUtils.js\";\n\ntype IgnoredNodeMap = Map<string, Set<number>>;\ntype Interval = { start: number; end: number };\ntype ExclusionIntervalsByFrame = Map<string, Interval[]>;\ntype ChildFrameHost = { childFrameId: string; hostBackendNodeId: number };\ntype ChildFramesByParent = Map<string, ChildFrameHost[]>;\ntype WellFormedString = string & { toWellFormed(): string };\n\n/**\n * Capture a hybrid DOM + Accessibility snapshot for the provided page.\n *\n * Flow overview:\n * 1. (Optional) Scope directly to a requested selector. We walk iframe hops to\n * find the owning frame, build just that frame’s DOM + AX tree, and bail out\n * early when the subtree satisfies the caller.\n * 2. Build DOM indexes for every unique CDP session. DOM.getDocument is called\n * once per session and hydrated so per-frame slices can share the result.\n * 3. Slice each frame’s DOM data from its session index and fetch its AX tree.\n * This yields relative XPath/tag/url maps for the document rooted at that frame.\n * 4. Walk the frame tree to compute absolute iframe prefixes. Every child frame\n * needs the XPath of the iframe element that hosts it so we can prefix maps.\n * 5. Merge all per-frame results into global combined maps and stitch the text\n * outline. The final payload mirrors the legacy shape but is built in layers.\n *\n * Each numbered block below references the step above for easier debugging.\n */\nexport async function captureHybridSnapshot(\n page: Page,\n options?: SnapshotOptions,\n): Promise<HybridSnapshot> {\n const pierce = options?.pierceShadow ?? true;\n const includeIframes = options?.includeIframes !== false;\n const hasIgnoreSelectors = (options?.ignoreSelectors?.length ?? 0) > 0;\n\n const context = buildFrameContext(page);\n const framesInScope = includeIframes ? [...context.frames] : [context.rootId];\n if (!framesInScope.includes(context.rootId)) {\n framesInScope.unshift(context.rootId);\n }\n\n if (!hasIgnoreSelectors) {\n const scopedSnapshot = await tryScopedSnapshot(\n page,\n options,\n context,\n pierce,\n new Map<string, SessionDomIndex>(),\n new Map(),\n );\n if (scopedSnapshot) return scopedSnapshot;\n }\n\n const sessionToIndex = await buildSessionIndexes(page, framesInScope, pierce);\n const ignoredNodesByFrame = await resolveIgnoredNodes(\n page,\n options?.ignoreSelectors,\n context,\n sessionToIndex,\n );\n const exclusionIntervalsByFrame = await buildFrameExclusionIntervals(\n page,\n context,\n sessionToIndex,\n ignoredNodesByFrame,\n );\n if (hasIgnoreSelectors) {\n const scopedSnapshot = await tryScopedSnapshot(\n page,\n options,\n context,\n pierce,\n sessionToIndex,\n exclusionIntervalsByFrame,\n );\n if (scopedSnapshot) return scopedSnapshot;\n }\n\n const { perFrameMaps, perFrameOutlines } = await collectPerFrameMaps(\n page,\n context,\n sessionToIndex,\n options,\n pierce,\n framesInScope,\n exclusionIntervalsByFrame,\n );\n const { absPrefix, iframeHostEncByChild } = await computeFramePrefixes(\n page,\n context,\n perFrameMaps,\n framesInScope,\n );\n\n return mergeFramesIntoSnapshot(\n context,\n perFrameMaps,\n perFrameOutlines,\n absPrefix,\n iframeHostEncByChild,\n framesInScope,\n );\n}\n\n/**\n * Snapshot the current frame tree so downstream helpers have consistent topology\n * without re-querying CDP. The map is intentionally shallow (frameId → parentId)\n * so it is serializable/testable without holding on to CDP handles.\n */\nexport function buildFrameContext(page: Page): FrameContext {\n const rootId = page.mainFrameId();\n const frameTree = page.asProtocolFrameTree(rootId);\n const parentByFrame: FrameParentIndex = new Map();\n (function index(n: Protocol.Page.FrameTree, parent: string | null) {\n parentByFrame.set(n.frame.id, parent);\n for (const c of n.childFrames ?? []) index(c, n.frame.id);\n })(frameTree, null);\n const frames = page.listAllFrameIds();\n return { rootId, parentByFrame, frames };\n}\n\n/**\n * Step 1 – scoped snapshot fast-path. If a selector is provided we try to:\n * 1) Resolve the selector (XPath or CSS) across iframes.\n * 2) Build DOM + AX data only for the owning frame.\n * 3) Bail out early when the selector's subtree satisfies the request.\n *\n * Returns `null` when scoping fails (e.g., selector miss) so the caller can\n * fall back to the full multi-frame snapshot.\n */\nexport async function tryScopedSnapshot(\n page: Page,\n options: SnapshotOptions | undefined,\n context: FrameContext,\n pierce: boolean,\n sessionToIndex: Map<string, SessionDomIndex>,\n exclusionIntervalsByFrame: ExclusionIntervalsByFrame,\n): Promise<HybridSnapshot | null> {\n const requestedFocus = options?.focusSelector?.trim();\n if (!requestedFocus) return null;\n\n const logScopeFallback = () => {\n v3Logger({\n message: `Unable to narrow scope with selector. Falling back to using full DOM`,\n level: 1,\n auxiliary: {\n arguments: {\n value: `selector: ${options?.focusSelector?.trim()}`,\n type: \"string\",\n },\n },\n });\n };\n\n try {\n let targetFrameId: string;\n let tailSelector: string | undefined;\n let absPrefix: string | undefined;\n\n const looksLikeXPath =\n /^xpath=/i.test(requestedFocus) || requestedFocus.startsWith(\"/\");\n if (looksLikeXPath) {\n const focus = normalizeXPath(requestedFocus);\n const hit = await resolveFocusFrameAndTail(\n page,\n focus,\n context.parentByFrame,\n context.rootId,\n );\n targetFrameId = hit.targetFrameId;\n tailSelector = hit.tailXPath || undefined;\n absPrefix = hit.absPrefix;\n } else {\n const cssHit = await resolveCssFocusFrameAndTail(\n page,\n requestedFocus,\n context.parentByFrame,\n context.rootId,\n );\n targetFrameId = cssHit.targetFrameId;\n tailSelector = cssHit.tailSelector || undefined;\n absPrefix = cssHit.absPrefix;\n }\n\n const owningSess = ownerSession(page, targetFrameId);\n const parentId = context.parentByFrame.get(targetFrameId);\n const sameSessionAsParent =\n !!parentId &&\n ownerSession(page, parentId) === ownerSession(page, targetFrameId);\n const { tagNameMap, xpathMap, scrollableMap } = await domMapsForSession(\n owningSess,\n targetFrameId,\n pierce,\n (fid, be) => `${page.getOrdinal(fid)}-${be}`,\n sameSessionAsParent,\n );\n\n const { outline, urlMap, scopeApplied } = await a11yForFrame(\n owningSess,\n targetFrameId,\n {\n focusSelector: tailSelector || undefined,\n isIgnoredBackendNode: makeIsIgnoredBackendNode(\n targetFrameId,\n ownerSessionIndexForFrame(page, targetFrameId, sessionToIndex),\n exclusionIntervalsByFrame,\n ),\n tagNameMap,\n experimental: options?.experimental ?? false,\n scrollableMap,\n encode: (backendNodeId) =>\n `${page.getOrdinal(targetFrameId)}-${backendNodeId}`,\n },\n );\n\n const scopedXpathMap: Record<string, string> = {};\n const isIgnoredBackendNode = makeIsIgnoredBackendNode(\n targetFrameId,\n ownerSessionIndexForFrame(page, targetFrameId, sessionToIndex),\n exclusionIntervalsByFrame,\n );\n const abs = absPrefix ?? \"\";\n const isRoot = !abs || abs === \"/\";\n if (isRoot) {\n for (const [encId, xp] of Object.entries(xpathMap)) {\n const backendNodeId = parseEncodedBackendNodeId(encId);\n if (\n typeof backendNodeId === \"number\" &&\n isIgnoredBackendNode?.(backendNodeId)\n ) {\n continue;\n }\n scopedXpathMap[encId] = xp;\n }\n } else {\n // Prefix relative XPaths so the scoped result matches the global encoding.\n for (const [encId, xp] of Object.entries(xpathMap)) {\n const backendNodeId = parseEncodedBackendNodeId(encId);\n if (\n typeof backendNodeId === \"number\" &&\n isIgnoredBackendNode?.(backendNodeId)\n ) {\n continue;\n }\n scopedXpathMap[encId] = prefixXPath(abs, xp);\n }\n }\n\n const scopedUrlMap: Record<string, string> = { ...urlMap };\n\n const wellFormedOutline = (outline as WellFormedString).toWellFormed();\n\n const snapshot: HybridSnapshot = {\n combinedTree: wellFormedOutline,\n combinedXpathMap: scopedXpathMap,\n combinedUrlMap: scopedUrlMap,\n perFrame: [\n {\n frameId: targetFrameId,\n outline: wellFormedOutline,\n xpathMap,\n urlMap,\n },\n ],\n };\n\n if (scopeApplied) {\n return snapshot;\n }\n\n logScopeFallback();\n } catch {\n logScopeFallback();\n }\n return null;\n}\n\n/**\n * Step 2 – call DOM.getDocument once per unique CDP session and hydrate the\n * result so per-frame slices can share the structure. We key by session id\n * because same process iframes live inside the same session.\n */\nexport async function buildSessionIndexes(\n page: Page,\n frames: string[],\n pierce: boolean,\n): Promise<Map<string, SessionDomIndex>> {\n const sessionToIndex = new Map<string, SessionDomIndex>();\n const sessionById = new Map<string, CDPSessionLike>();\n for (const frameId of frames) {\n const sess = ownerSession(page, frameId);\n const sid = sess.id ?? \"root\";\n if (!sessionById.has(sid)) sessionById.set(sid, sess);\n }\n for (const [sid, sess] of sessionById.entries()) {\n const idx = await buildSessionDomIndex(sess, pierce);\n sessionToIndex.set(sid, idx);\n }\n return sessionToIndex;\n}\n\n/**\n * Step 3 – derive per-frame DOM maps and accessibility outlines.\n * Each frame:\n * - slices the shared session index down to its document root\n * - builds frame-aware encoded ids (ordinal-backendNodeId)\n * - collects tag/xpath/scrollability maps for DOM-based lookups\n * - fetches its AX tree to produce outlines and URL maps\n */\nexport async function collectPerFrameMaps(\n page: Page,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n options: SnapshotOptions | undefined,\n pierce: boolean,\n frameIds: string[],\n exclusionIntervalsByFrame: ExclusionIntervalsByFrame,\n): Promise<{\n perFrameMaps: Map<string, FrameDomMaps>;\n perFrameOutlines: Array<{ frameId: string; outline: string }>;\n}> {\n const perFrameMaps = new Map<string, FrameDomMaps>();\n const perFrameOutlines: Array<{ frameId: string; outline: string }> = [];\n\n for (const frameId of frameIds) {\n const sess = ownerSession(page, frameId);\n const sid = sess.id ?? \"root\";\n let idx = sessionToIndex.get(sid);\n if (!idx) {\n idx = await buildSessionDomIndex(sess, pierce);\n sessionToIndex.set(sid, idx);\n }\n\n const parentId = context.parentByFrame.get(frameId);\n const sameSessionAsParent =\n !!parentId && ownerSession(page, parentId) === sess;\n\n const docRootBe = await resolveFrameDocRootBackendId(\n page,\n frameId,\n idx,\n sameSessionAsParent,\n );\n\n const tagNameMap: Record<string, string> = {};\n const xpathMap: Record<string, string> = {};\n const scrollableMap: Record<string, boolean> = {};\n const isIgnoredBackendNode = makeIsIgnoredBackendNode(\n frameId,\n idx,\n exclusionIntervalsByFrame,\n );\n const enc = (be: number) => `${page.getOrdinal(frameId)}-${be}`;\n const baseAbs = idx.absByBe.get(docRootBe) ?? \"/\";\n\n for (const [be, nodeAbs] of idx.absByBe.entries()) {\n const nodeDocRoot = idx.docRootOf.get(be);\n if (nodeDocRoot !== docRootBe) continue;\n if (isIgnoredBackendNode?.(be)) continue;\n\n // Translate absolute XPaths into document-relative ones for this frame.\n const rel = relativizeXPath(baseAbs, nodeAbs);\n const key = enc(be);\n xpathMap[key] = rel;\n const tag = idx.tagByBe.get(be);\n if (tag) tagNameMap[key] = tag;\n if (idx.scrollByBe.get(be)) scrollableMap[key] = true;\n }\n\n const { outline, urlMap } = await a11yForFrame(sess, frameId, {\n isIgnoredBackendNode,\n experimental: options?.experimental ?? false,\n tagNameMap,\n scrollableMap,\n encode: (backendNodeId) => `${page.getOrdinal(frameId)}-${backendNodeId}`,\n });\n\n perFrameOutlines.push({ frameId, outline });\n perFrameMaps.set(frameId, { tagNameMap, xpathMap, scrollableMap, urlMap });\n }\n\n return { perFrameMaps, perFrameOutlines };\n}\n\nexport async function resolveIgnoredNodes(\n page: Page,\n ignoreSelectors: string[] | undefined,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n): Promise<IgnoredNodeMap> {\n const ignoredNodesByFrame: IgnoredNodeMap = new Map();\n\n for (const rawSelector of ignoreSelectors ?? []) {\n const selector = rawSelector.trim();\n if (!selector) continue;\n\n try {\n const resolved = await resolveIgnoredNodesForSelector(\n page,\n selector,\n context,\n sessionToIndex,\n );\n for (const match of resolved) {\n const nodes =\n ignoredNodesByFrame.get(match.frameId) ?? new Set<number>();\n nodes.add(match.backendNodeId);\n ignoredNodesByFrame.set(match.frameId, nodes);\n }\n } catch {\n continue;\n }\n }\n\n return ignoredNodesByFrame;\n}\n\nasync function resolveIgnoredNodesForSelector(\n page: Page,\n selector: string,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n): Promise<Array<{ frameId: string; backendNodeId: number }>> {\n const looksLikeXPath = /^xpath=/i.test(selector) || selector.startsWith(\"/\");\n\n if (looksLikeXPath) {\n const hit = await resolveFocusFrameAndTail(\n page,\n normalizeXPath(selector),\n context.parentByFrame,\n context.rootId,\n );\n const targetFrameId = hit.targetFrameId;\n const tailXPath = hit.tailXPath || \"/\";\n if (tailXPath === \"/\") {\n const idx = ownerSessionIndexForFrame(\n page,\n targetFrameId,\n sessionToIndex,\n );\n if (!idx) return [];\n const parentId = context.parentByFrame.get(targetFrameId);\n const sameSessionAsParent =\n !!parentId &&\n ownerSession(page, parentId) === ownerSession(page, targetFrameId);\n const backendNodeId = await resolveFrameDocRootBackendId(\n page,\n targetFrameId,\n idx,\n sameSessionAsParent,\n );\n return [{ frameId: targetFrameId, backendNodeId }];\n }\n return resolveIgnoredNodesInFrame(page, targetFrameId, {\n kind: \"xpath\",\n value: tailXPath,\n });\n }\n\n const hit = await resolveCssFocusFrameAndTail(\n page,\n selector,\n context.parentByFrame,\n context.rootId,\n );\n const targetFrameId = hit.targetFrameId;\n return resolveIgnoredNodesInFrame(page, targetFrameId, {\n kind: \"css\",\n value: hit.tailSelector || selector,\n });\n}\n\nasync function resolveIgnoredNodesInFrame(\n page: Page,\n frameId: string,\n query: SelectorQuery,\n): Promise<Array<{ frameId: string; backendNodeId: number }>> {\n const session = ownerSession(page, frameId);\n const frame = new Frame(session, frameId, \"\", false);\n const resolver = new FrameSelectorResolver(frame);\n const resolvedNodes = await resolver.resolveAll(query);\n if (!resolvedNodes.length) return [];\n\n const backendNodeIds = await describeResolvedNodes(session, resolvedNodes);\n return backendNodeIds.map((backendNodeId) => ({ frameId, backendNodeId }));\n}\n\nasync function describeResolvedNodes(\n session: CDPSessionLike,\n resolvedNodes: ResolvedNode[],\n): Promise<number[]> {\n const backendNodeIds = new Set<number>();\n\n try {\n for (const resolvedNode of resolvedNodes) {\n const desc = await session.send<Protocol.DOM.DescribeNodeResponse>(\n \"DOM.describeNode\",\n { objectId: resolvedNode.objectId },\n );\n const backendNodeId = desc.node.backendNodeId;\n if (typeof backendNodeId === \"number\") {\n backendNodeIds.add(backendNodeId);\n }\n }\n } finally {\n await Promise.all(\n resolvedNodes.map((resolvedNode) =>\n session\n .send(\"Runtime.releaseObject\", { objectId: resolvedNode.objectId })\n .catch(() => {}),\n ),\n );\n }\n\n return [...backendNodeIds];\n}\n\nexport async function buildFrameExclusionIntervals(\n page: Page,\n context: FrameContext,\n sessionToIndex: Map<string, SessionDomIndex>,\n ignoredNodesByFrame: IgnoredNodeMap,\n): Promise<ExclusionIntervalsByFrame> {\n const intervalsByFrame: ExclusionIntervalsByFrame = new Map();\n if (!ignoredNodesByFrame.size) return intervalsByFrame;\n const childFramesByParent = await resolveChildFramesByParent(page, context);\n const excludedFrames = new Set<string>();\n\n const pushInterval = (frameId: string, start: number, end: number) => {\n const intervals = intervalsByFrame.get(frameId) ?? [];\n intervals.push({ start, end });\n intervalsByFrame.set(frameId, intervals);\n };\n\n const excludeFrameSubtree = async (frameId: string): Promise<void> => {\n if (excludedFrames.has(frameId)) return;\n excludedFrames.add(frameId);\n\n const idx = ownerSessionIndexForFrame(page, frameId, sessionToIndex);\n if (!idx) return;\n const parentId = context.parentByFrame.get(frameId);\n const sameSessionAsParent =\n !!parentId &&\n ownerSession(page, parentId) === ownerSession(page, frameId);\n const docRootBe = await resolveFrameDocRootBackendId(\n page,\n frameId,\n idx,\n sameSessionAsParent,\n );\n const start = idx.enterByBe.get(docRootBe);\n const end = idx.exitByBe.get(docRootBe);\n if (typeof start === \"number\" && typeof end === \"number\") {\n pushInterval(frameId, start, end);\n }\n\n for (const childFrameId of listChildrenOf(context.parentByFrame, frameId)) {\n await excludeFrameSubtree(childFrameId);\n }\n };\n\n const excludeIgnoredNode = async (\n frameId: string,\n backendNodeId: number,\n ): Promise<void> => {\n const idx = ownerSessionIndexForFrame(page, frameId, sessionToIndex);\n if (!idx) return;\n const start = idx.enterByBe.get(backendNodeId);\n const end = idx.exitByBe.get(backendNodeId);\n if (typeof start !== \"number\" || typeof end !== \"number\") return;\n\n pushInterval(frameId, start, end);\n for (const childFrame of childFramesByParent.get(frameId) ?? []) {\n const hostEnter = idx.enterByBe.get(childFrame.hostBackendNodeId);\n if (typeof hostEnter !== \"number\") continue;\n if (hostEnter < start || hostEnter > end) continue;\n await excludeFrameSubtree(childFrame.childFrameId);\n }\n };\n\n for (const [frameId, backendNodeIds] of ignoredNodesByFrame.entries()) {\n for (const backendNodeId of backendNodeIds) {\n await excludeIgnoredNode(frameId, backendNodeId);\n }\n }\n\n for (const [frameId, intervals] of intervalsByFrame.entries()) {\n intervals.sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Interval[] = [];\n for (const interval of intervals) {\n const prev = merged[merged.length - 1];\n if (!prev || interval.start > prev.end) {\n merged.push({ ...interval });\n continue;\n }\n if (interval.end > prev.end) prev.end = interval.end;\n }\n intervalsByFrame.set(frameId, merged);\n }\n\n return intervalsByFrame;\n}\n\nasync function resolveChildFramesByParent(\n page: Page,\n context: FrameContext,\n): Promise<ChildFramesByParent> {\n const childFramesByParent: ChildFramesByParent = new Map();\n\n for (const frameId of context.frames) {\n const parentId = context.parentByFrame.get(frameId);\n if (!parentId) continue;\n\n const session = parentSession(page, context.parentByFrame, frameId);\n if (!session) continue;\n\n try {\n const { backendNodeId } = await session.send<{ backendNodeId?: number }>(\n \"DOM.getFrameOwner\",\n { frameId },\n );\n if (typeof backendNodeId !== \"number\") continue;\n const childFrames = childFramesByParent.get(parentId) ?? [];\n childFrames.push({\n childFrameId: frameId,\n hostBackendNodeId: backendNodeId,\n });\n childFramesByParent.set(parentId, childFrames);\n } catch {\n continue;\n }\n }\n\n return childFramesByParent;\n}\n\nfunction makeIsIgnoredBackendNode(\n frameId: string,\n idx: SessionDomIndex | undefined,\n exclusionIntervalsByFrame: ExclusionIntervalsByFrame,\n): ((backendNodeId: number) => boolean) | undefined {\n if (!idx) return undefined;\n const intervals = exclusionIntervalsByFrame.get(frameId);\n if (!intervals?.length) return undefined;\n\n return (backendNodeId: number): boolean => {\n const enter = idx.enterByBe.get(backendNodeId);\n if (typeof enter !== \"number\") return false;\n\n let lo = 0;\n let hi = intervals.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const interval = intervals[mid]!;\n if (enter < interval.start) {\n hi = mid - 1;\n } else if (enter > interval.end) {\n lo = mid + 1;\n } else {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction parseEncodedBackendNodeId(encodedId: string): number | undefined {\n const parts = encodedId.split(\"-\");\n if (parts.length !== 2) return undefined;\n const backendNodeId = Number(parts[1]);\n return Number.isFinite(backendNodeId) ? backendNodeId : undefined;\n}\n\nfunction ownerSessionIndexForFrame(\n page: Page,\n frameId: string,\n sessionToIndex: Map<string, SessionDomIndex>,\n): SessionDomIndex | undefined {\n const session = ownerSession(page, frameId);\n return sessionToIndex.get(session.id ?? \"root\");\n}\n\nasync function resolveFrameDocRootBackendId(\n page: Page,\n frameId: string,\n idx: SessionDomIndex,\n sameSessionAsParent: boolean,\n): Promise<number> {\n if (!sameSessionAsParent) return idx.rootBackend;\n const session = ownerSession(page, frameId);\n try {\n const { backendNodeId } = await session.send<{ backendNodeId?: number }>(\n \"DOM.getFrameOwner\",\n { frameId },\n );\n if (typeof backendNodeId === \"number\") {\n const docRootBe = idx.contentDocRootByIframe.get(backendNodeId);\n if (typeof docRootBe === \"number\") return docRootBe;\n }\n } catch {\n //\n }\n return idx.rootBackend;\n}\n\n/**\n * Step 4 – walk the frame tree (parent-first) to compute absolute prefixes for\n * every frame. The prefix is the absolute XPath of the iframe element hosting\n * the frame, so we can later convert relative XPaths into cross-frame ones.\n */\nexport async function computeFramePrefixes(\n page: Page,\n context: FrameContext,\n perFrameMaps: Map<string, FrameDomMaps>,\n frameIds: string[],\n): Promise<{\n absPrefix: Map<string, string>;\n iframeHostEncByChild: Map<string, string>;\n}> {\n const absPrefix = new Map<string, string>();\n const iframeHostEncByChild = new Map<string, string>();\n absPrefix.set(context.rootId, \"\");\n const included = new Set(frameIds);\n\n const queue: string[] = [];\n if (included.has(context.rootId)) {\n queue.push(context.rootId);\n }\n\n while (queue.length) {\n const parent = queue.shift()!;\n const parentAbs = absPrefix.get(parent)!;\n\n for (const child of context.frames) {\n if (!included.has(child)) continue;\n if (context.parentByFrame.get(child) !== parent) continue;\n queue.push(child);\n\n const parentSess = parentSession(page, context.parentByFrame, child);\n\n const ownerBackendNodeId = await (async () => {\n try {\n const { backendNodeId } = await parentSess.send<{\n backendNodeId?: number;\n }>(\"DOM.getFrameOwner\", { frameId: child });\n return backendNodeId;\n } catch {\n return undefined;\n }\n })();\n\n if (!ownerBackendNodeId) {\n // OOPIFs resolved via a different session inherit the parent prefix.\n absPrefix.set(child, parentAbs);\n continue;\n }\n\n const parentDom = perFrameMaps.get(parent);\n const iframeEnc = `${page.getOrdinal(parent)}-${ownerBackendNodeId}`;\n const iframeXPath = parentDom?.xpathMap[iframeEnc];\n\n const childAbs = iframeXPath\n ? prefixXPath(parentAbs || \"/\", iframeXPath)\n : parentAbs;\n\n absPrefix.set(child, childAbs);\n iframeHostEncByChild.set(child, iframeEnc);\n }\n }\n\n return { absPrefix, iframeHostEncByChild };\n}\n\n/**\n * Step 5 – merge per-frame maps into the combined snapshot payload. We prefix\n * each frame's relative XPaths with the absolute path collected in step 4,\n * merge URL maps, and stitch text outlines by nesting child trees under the\n * encoded id of their parent iframe host.\n */\nexport function mergeFramesIntoSnapshot(\n context: FrameContext,\n perFrameMaps: Map<string, FrameDomMaps>,\n perFrameOutlines: Array<{ frameId: string; outline: string }>,\n absPrefix: Map<string, string>,\n iframeHostEncByChild: Map<string, string>,\n frameIds: string[],\n): HybridSnapshot {\n const combinedXpathMap: Record<string, string> = {};\n const combinedUrlMap: Record<string, string> = {};\n\n for (const frameId of frameIds) {\n const maps = perFrameMaps.get(frameId);\n if (!maps) continue;\n\n const abs = absPrefix.get(frameId) ?? \"\";\n const isRoot = abs === \"\" || abs === \"/\";\n\n if (isRoot) {\n Object.assign(combinedXpathMap, maps.xpathMap);\n Object.assign(combinedUrlMap, maps.urlMap);\n continue;\n }\n\n for (const [encId, xp] of Object.entries(maps.xpathMap)) {\n combinedXpathMap[encId] = prefixXPath(abs, xp);\n }\n Object.assign(combinedUrlMap, maps.urlMap);\n }\n\n const idToTree = new Map<string, string>();\n for (const { frameId, outline } of perFrameOutlines) {\n const parentEnc = iframeHostEncByChild.get(frameId);\n // The key is the parent iframe's encoded id so injectSubtrees can nest lines.\n if (parentEnc) idToTree.set(parentEnc, outline);\n }\n\n const rootOutline =\n perFrameOutlines.find((o) => o.frameId === context.rootId)?.outline ??\n perFrameOutlines[0]?.outline ??\n \"\";\n const combinedTree = (\n injectSubtrees(rootOutline, idToTree) as WellFormedString\n ).toWellFormed();\n\n return {\n combinedTree,\n combinedXpathMap,\n combinedUrlMap,\n perFrame: perFrameOutlines.map(({ frameId, outline }) => {\n const maps = perFrameMaps.get(frameId);\n return {\n frameId,\n outline,\n xpathMap: maps?.xpathMap ?? {},\n urlMap: maps?.urlMap ?? {},\n };\n }),\n };\n}\n"]}
|
|
@@ -42,6 +42,8 @@ export declare class CdpConnection implements CDPSessionLike {
|
|
|
42
42
|
off<P = unknown>(event: string, handler: (params: P) => void): void;
|
|
43
43
|
close(): Promise<void>;
|
|
44
44
|
private rejectAllInflight;
|
|
45
|
+
private clearSessionEventHandlers;
|
|
46
|
+
private rejectSessionPendingWork;
|
|
45
47
|
getSession(sessionId: string): CdpSession | undefined;
|
|
46
48
|
waitForSessionDispatch(sessionId: string, method: string, match?: (params?: object) => boolean): Promise<void>;
|
|
47
49
|
attachToTarget(targetId: string): Promise<CdpSession>;
|
|
@@ -139,6 +139,27 @@ class CdpConnection {
|
|
|
139
139
|
waiter.reject(new sdkErrors_js_1.CdpConnectionClosedError(why));
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
|
+
clearSessionEventHandlers(sessionId) {
|
|
143
|
+
const prefix = `${sessionId}:`;
|
|
144
|
+
for (const key of Array.from(this.eventHandlers.keys())) {
|
|
145
|
+
if (key.startsWith(prefix)) {
|
|
146
|
+
this.eventHandlers.delete(key);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
rejectSessionPendingWork(sessionId, targetId) {
|
|
151
|
+
for (const [id, entry] of this.inflight.entries()) {
|
|
152
|
+
if (entry.sessionId === sessionId) {
|
|
153
|
+
entry.reject(new sdkErrors_js_1.PageNotFoundError(`target closed before CDP response (sessionId=${sessionId}, targetId=${targetId})`));
|
|
154
|
+
this.inflight.delete(id);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
for (const waiter of Array.from(this.sessionDispatchWaiters)) {
|
|
158
|
+
if (waiter.sessionId === sessionId) {
|
|
159
|
+
waiter.reject(new sdkErrors_js_1.PageNotFoundError(`target closed before CDP send (sessionId=${sessionId}, targetId=${targetId})`));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
142
163
|
getSession(sessionId) {
|
|
143
164
|
return this.sessions.get(sessionId);
|
|
144
165
|
}
|
|
@@ -246,17 +267,8 @@ class CdpConnection {
|
|
|
246
267
|
else if (msg.method === "Target.detachedFromTarget") {
|
|
247
268
|
const p = msg
|
|
248
269
|
.params;
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
entry.reject(new sdkErrors_js_1.PageNotFoundError(`target closed before CDP response (sessionId=${p.sessionId}, targetId=${p.targetId})`));
|
|
252
|
-
this.inflight.delete(id);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
for (const waiter of Array.from(this.sessionDispatchWaiters)) {
|
|
256
|
-
if (waiter.sessionId === p.sessionId) {
|
|
257
|
-
waiter.reject(new sdkErrors_js_1.PageNotFoundError(`target closed before CDP send (sessionId=${p.sessionId}, targetId=${p.targetId})`));
|
|
258
|
-
}
|
|
259
|
-
}
|
|
270
|
+
this.rejectSessionPendingWork(p.sessionId, p.targetId ?? null);
|
|
271
|
+
this.clearSessionEventHandlers(p.sessionId);
|
|
260
272
|
this.sessions.delete(p.sessionId);
|
|
261
273
|
this.sessionToTarget.delete(p.sessionId);
|
|
262
274
|
this.latestCdpCallEvent.delete(p.sessionId);
|
|
@@ -266,9 +278,11 @@ class CdpConnection {
|
|
|
266
278
|
// Remove any session mapping for this target
|
|
267
279
|
for (const [sessionId, targetId] of this.sessionToTarget.entries()) {
|
|
268
280
|
if (targetId === p.targetId) {
|
|
281
|
+
this.rejectSessionPendingWork(sessionId, p.targetId);
|
|
282
|
+
this.clearSessionEventHandlers(sessionId);
|
|
283
|
+
this.sessions.delete(sessionId);
|
|
269
284
|
this.sessionToTarget.delete(sessionId);
|
|
270
285
|
this.latestCdpCallEvent.delete(sessionId);
|
|
271
|
-
break;
|
|
272
286
|
}
|
|
273
287
|
}
|
|
274
288
|
}
|