@browserbasehq/orca 3.6.0-gemini-cua → 3.7.0-preview.1

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.
Files changed (85) hide show
  1. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +2 -2
  2. package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
  3. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +4 -3
  4. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +11 -9
  5. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  6. package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +12 -3
  7. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +107 -22
  8. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +2 -2
  10. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +2 -2
  11. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  12. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +6 -3
  13. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +13 -7
  14. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  15. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +1 -0
  16. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +40 -2
  17. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  18. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +30 -7
  19. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  20. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +32 -18
  21. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  22. package/dist/cjs/lib/v3/index.d.ts +1 -0
  23. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +2 -2
  24. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  25. package/dist/cjs/lib/v3/types/public/agent.d.ts +9 -0
  26. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  27. package/dist/cjs/lib/v3/types/public/context.d.ts +7 -0
  28. package/dist/cjs/lib/v3/types/public/context.js.map +1 -1
  29. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +4 -0
  30. package/dist/cjs/lib/v3/types/public/sdkErrors.js +9 -1
  31. package/dist/cjs/lib/v3/types/public/sdkErrors.js.map +1 -1
  32. package/dist/cjs/lib/v3/understudy/cdp.d.ts +2 -0
  33. package/dist/cjs/lib/v3/understudy/cdp.js +26 -12
  34. package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
  35. package/dist/cjs/lib/v3/understudy/context.d.ts +13 -1
  36. package/dist/cjs/lib/v3/understudy/context.js +284 -1
  37. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  38. package/dist/cjs/lib/v3/understudy/domainPolicy.d.ts +25 -0
  39. package/dist/cjs/lib/v3/understudy/domainPolicy.js +162 -0
  40. package/dist/cjs/lib/v3/understudy/domainPolicy.js.map +1 -0
  41. package/dist/cjs/lib/v3/v3.js +4 -1
  42. package/dist/cjs/lib/v3/v3.js.map +1 -1
  43. package/dist/esm/lib/v3/agent/AgentClient.d.ts +2 -2
  44. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
  45. package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +4 -3
  46. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +11 -9
  47. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  48. package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +12 -3
  49. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +107 -22
  50. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  51. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.d.ts +2 -2
  52. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +2 -2
  53. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  54. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +6 -3
  55. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +13 -7
  56. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  57. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.d.ts +1 -0
  58. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +39 -2
  59. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  60. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +30 -7
  61. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  62. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +32 -18
  63. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  64. package/dist/esm/lib/v3/index.d.ts +1 -0
  65. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +2 -2
  66. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  67. package/dist/esm/lib/v3/types/public/agent.d.ts +9 -0
  68. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  69. package/dist/esm/lib/v3/types/public/context.d.ts +7 -0
  70. package/dist/esm/lib/v3/types/public/context.js.map +1 -1
  71. package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +4 -0
  72. package/dist/esm/lib/v3/types/public/sdkErrors.js +7 -0
  73. package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
  74. package/dist/esm/lib/v3/understudy/cdp.d.ts +2 -0
  75. package/dist/esm/lib/v3/understudy/cdp.js +26 -12
  76. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
  77. package/dist/esm/lib/v3/understudy/context.d.ts +13 -1
  78. package/dist/esm/lib/v3/understudy/context.js +285 -2
  79. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  80. package/dist/esm/lib/v3/understudy/domainPolicy.d.ts +25 -0
  81. package/dist/esm/lib/v3/understudy/domainPolicy.js +158 -0
  82. package/dist/esm/lib/v3/understudy/domainPolicy.js.map +1 -0
  83. package/dist/esm/lib/v3/v3.js +4 -1
  84. package/dist/esm/lib/v3/v3.js.map +1 -1
  85. package/package.json +3 -3
@@ -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":"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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 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"]}
@@ -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>;
@@ -133,6 +133,27 @@ export class CdpConnection {
133
133
  waiter.reject(new CdpConnectionClosedError(why));
134
134
  }
135
135
  }
136
+ clearSessionEventHandlers(sessionId) {
137
+ const prefix = `${sessionId}:`;
138
+ for (const key of Array.from(this.eventHandlers.keys())) {
139
+ if (key.startsWith(prefix)) {
140
+ this.eventHandlers.delete(key);
141
+ }
142
+ }
143
+ }
144
+ rejectSessionPendingWork(sessionId, targetId) {
145
+ for (const [id, entry] of this.inflight.entries()) {
146
+ if (entry.sessionId === sessionId) {
147
+ entry.reject(new PageNotFoundError(`target closed before CDP response (sessionId=${sessionId}, targetId=${targetId})`));
148
+ this.inflight.delete(id);
149
+ }
150
+ }
151
+ for (const waiter of Array.from(this.sessionDispatchWaiters)) {
152
+ if (waiter.sessionId === sessionId) {
153
+ waiter.reject(new PageNotFoundError(`target closed before CDP send (sessionId=${sessionId}, targetId=${targetId})`));
154
+ }
155
+ }
156
+ }
136
157
  getSession(sessionId) {
137
158
  return this.sessions.get(sessionId);
138
159
  }
@@ -240,17 +261,8 @@ export class CdpConnection {
240
261
  else if (msg.method === "Target.detachedFromTarget") {
241
262
  const p = msg
242
263
  .params;
243
- for (const [id, entry] of this.inflight.entries()) {
244
- if (entry.sessionId === p.sessionId) {
245
- entry.reject(new PageNotFoundError(`target closed before CDP response (sessionId=${p.sessionId}, targetId=${p.targetId})`));
246
- this.inflight.delete(id);
247
- }
248
- }
249
- for (const waiter of Array.from(this.sessionDispatchWaiters)) {
250
- if (waiter.sessionId === p.sessionId) {
251
- waiter.reject(new PageNotFoundError(`target closed before CDP send (sessionId=${p.sessionId}, targetId=${p.targetId})`));
252
- }
253
- }
264
+ this.rejectSessionPendingWork(p.sessionId, p.targetId ?? null);
265
+ this.clearSessionEventHandlers(p.sessionId);
254
266
  this.sessions.delete(p.sessionId);
255
267
  this.sessionToTarget.delete(p.sessionId);
256
268
  this.latestCdpCallEvent.delete(p.sessionId);
@@ -260,9 +272,11 @@ export class CdpConnection {
260
272
  // Remove any session mapping for this target
261
273
  for (const [sessionId, targetId] of this.sessionToTarget.entries()) {
262
274
  if (targetId === p.targetId) {
275
+ this.rejectSessionPendingWork(sessionId, p.targetId);
276
+ this.clearSessionEventHandlers(sessionId);
277
+ this.sessions.delete(sessionId);
263
278
  this.sessionToTarget.delete(sessionId);
264
279
  this.latestCdpCallEvent.delete(sessionId);
265
- break;
266
280
  }
267
281
  }
268
282
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/cdp.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/cdp.ts\nimport WebSocket from \"ws\";\nimport type { Protocol } from \"devtools-protocol\";\nimport { STAGEHAND_VERSION } from \"../../version.js\";\nimport {\n FlowLogger,\n type FlowEvent,\n type FlowLoggerContext,\n} from \"../flowlogger/FlowLogger.js\";\nimport {\n CdpConnectionClosedError,\n PageNotFoundError,\n} from \"../types/public/sdkErrors.js\";\n\n/**\n * CDP transport & session multiplexer\n *\n * Owns the browser WebSocket and multiplexes flattened Target sessions.\n * Tracks inflight CDP calls, routes responses to the right session, and forwards events.\n *\n * This does not interpret Page/DOM/Runtime semantics — callers own that logic.\n */\nexport interface CDPSessionLike {\n send<R = unknown>(method: string, params?: object): Promise<R>;\n on<P = unknown>(event: string, handler: (params: P) => void): void;\n off<P = unknown>(event: string, handler: (params: P) => void): void;\n close(): Promise<void>;\n readonly id: string | null;\n}\n\ntype Inflight = {\n resolve: (v: unknown) => void;\n reject: (e: Error) => void;\n sessionId?: string | null;\n method: string;\n params?: object;\n stack?: string;\n ts: number;\n flowLoggerContext?: FlowLoggerContext | null; // Snapshot of the flow context captured when the request was sent; response handling re-enters this if ALS is gone.\n cdpCallEvent?: Pick<FlowEvent, \"eventId\" | \"eventParentIds\"> | null; // The emitted CdpCallEvent identity; later response/error events attach under this exact parent.\n};\n\ntype EventHandler = (params: unknown) => void;\ntype SessionDispatchWaiter = {\n sessionId: string;\n method: string;\n match?: (params?: object) => boolean;\n resolve: () => void;\n reject: (error: Error) => void;\n};\n\ntype RawMessage =\n | {\n id: number;\n result?: unknown;\n error?: { code: number; message: string; data?: unknown };\n sessionId?: string;\n }\n | { method: string; params?: unknown; sessionId?: string };\n\nexport class CdpConnection implements CDPSessionLike {\n private ws: WebSocket;\n private nextId = 1;\n private inflight = new Map<number, Inflight>(); // Outstanding request records; `_sendViaSession()` inserts and `onMessage()` removes/resolves them.\n private latestCdpCallEvent = new Map<\n // Most recent CDP call per session/root; `_sendViaSession()` refreshes it and later unsolicited messages reuse it as their parent anchor.\n string | null,\n {\n flowLoggerContext: FlowLoggerContext; // Flow context captured when the latest call on this session/root was emitted.\n cdpCallEvent: Pick<FlowEvent, \"eventId\" | \"eventParentIds\">; // Identity of that latest call event; unsolicited messages reuse it as their parent.\n }\n >();\n private eventHandlers = new Map<string, Set<EventHandler>>();\n private sessions = new Map<string, CdpSession>();\n /** Maps sessionId -> targetId (1:1 mapping) */\n private sessionToTarget = new Map<string, string>();\n private sessionDispatchWaiters = new Set<SessionDispatchWaiter>();\n public readonly id: string | null = null; // root\n private transportCloseHandlers = new Set<(why: string) => void>();\n\n public flowLoggerContext?: FlowLoggerContext; // Instance-owned fallback flow context; V3 sets this once and later sends/callbacks re-enter it when ALS is absent.\n\n public onTransportClosed(handler: (why: string) => void): void {\n this.transportCloseHandlers.add(handler);\n }\n public offTransportClosed(handler: (why: string) => void): void {\n this.transportCloseHandlers.delete(handler);\n }\n\n private emitTransportClosed(why: string) {\n for (const h of this.transportCloseHandlers) {\n try {\n h(why);\n } catch {\n //\n }\n }\n }\n\n private constructor(ws: WebSocket) {\n this.ws = ws;\n this.ws.on(\"close\", (code, reason) => {\n // Reason is a Buffer in ws; stringify defensively\n const why = `socket-close code=${code} reason=${String(reason || \"\")}`;\n this.rejectAllInflight(why);\n this.emitTransportClosed(why);\n });\n\n this.ws.on(\"error\", (err) => {\n const why = `socket-error ${err?.message ?? String(err)}`;\n this.rejectAllInflight(why);\n this.emitTransportClosed(why);\n });\n this.ws.on(\"message\", (data) => this.onMessage(data.toString()));\n }\n\n static async connect(\n wsUrl: string,\n options?: { headers?: Record<string, string> },\n ): Promise<CdpConnection> {\n // Include User-Agent header for server-side observability and version tracking\n // Merge user-provided headers, letting them override defaults\n const headers = {\n \"User-Agent\": `Stagehand/${STAGEHAND_VERSION}`,\n ...options?.headers,\n };\n const ws = new WebSocket(wsUrl, { headers });\n await new Promise<void>((resolve, reject) => {\n ws.once(\"open\", () => resolve());\n ws.once(\"error\", (e) => reject(e));\n });\n return new CdpConnection(ws);\n }\n\n async enableAutoAttach(): Promise<void> {\n await this.send(\"Target.setAutoAttach\", {\n autoAttach: true,\n flatten: true,\n waitForDebuggerOnStart: true,\n });\n await this.send(\"Target.setDiscoverTargets\", { discover: true });\n }\n\n async send<R = unknown>(method: string, params?: object): Promise<R> {\n const id = this.nextId++;\n const payload = { id, method, params };\n const stack = new Error().stack?.split(\"\\n\").slice(1, 4).join(\"\\n\");\n const flowLoggerContext = FlowLogger.resolveContext(this.flowLoggerContext);\n const cdpCallEvent = flowLoggerContext\n ? FlowLogger.logCdpCallEvent(flowLoggerContext, {\n method,\n params,\n targetId: null,\n })\n : null;\n if (flowLoggerContext && cdpCallEvent) {\n this.latestCdpCallEvent.set(null, {\n flowLoggerContext,\n cdpCallEvent,\n });\n }\n const p = new Promise<R>((resolve, reject) => {\n this.inflight.set(id, {\n resolve,\n reject,\n sessionId: null,\n method,\n params,\n stack,\n ts: Date.now(),\n flowLoggerContext,\n cdpCallEvent,\n });\n });\n // Prevent unhandledRejection if a session detaches before the caller awaits.\n void p.catch(() => {});\n this.ws.send(JSON.stringify(payload));\n return p;\n }\n\n on<P = unknown>(event: string, handler: (params: P) => void): void {\n const set = this.eventHandlers.get(event) ?? new Set<EventHandler>();\n set.add(handler as EventHandler);\n this.eventHandlers.set(event, set);\n }\n\n off<P = unknown>(event: string, handler: (params: P) => void): void {\n const set = this.eventHandlers.get(event);\n if (set) set.delete(handler as EventHandler);\n }\n\n async close(): Promise<void> {\n if (this.ws.readyState === WebSocket.CLOSED) return;\n await new Promise<void>((resolve) => {\n this.ws.once(\"close\", () => resolve());\n this.ws.close();\n });\n }\n\n private rejectAllInflight(why: string): void {\n for (const [id, entry] of this.inflight.entries()) {\n entry.reject(new CdpConnectionClosedError(why));\n this.inflight.delete(id);\n }\n this.latestCdpCallEvent.clear();\n for (const waiter of Array.from(this.sessionDispatchWaiters)) {\n waiter.reject(new CdpConnectionClosedError(why));\n }\n }\n\n getSession(sessionId: string): CdpSession | undefined {\n return this.sessions.get(sessionId);\n }\n\n waitForSessionDispatch(\n sessionId: string,\n method: string,\n match?: (params?: object) => boolean,\n ): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const waiter: SessionDispatchWaiter = {\n sessionId,\n method,\n match,\n resolve: () => {\n this.sessionDispatchWaiters.delete(waiter);\n resolve();\n },\n reject: (error: Error) => {\n this.sessionDispatchWaiters.delete(waiter);\n reject(error);\n },\n };\n this.sessionDispatchWaiters.add(waiter);\n });\n }\n\n async attachToTarget(targetId: string): Promise<CdpSession> {\n const { sessionId } = (await this.send<{ sessionId: string }>(\n \"Target.attachToTarget\",\n { targetId, flatten: true },\n )) as { sessionId: string };\n\n let session = this.sessions.get(sessionId);\n if (!session) {\n session = new CdpSession(this, sessionId);\n this.sessions.set(sessionId, session);\n }\n this.sessionToTarget.set(sessionId, targetId);\n return session;\n }\n\n async getTargets(): Promise<Protocol.Target.TargetInfo[]> {\n const res = await this.send<{\n targetInfos: Protocol.Target.TargetInfo[];\n }>(\"Target.getTargets\");\n return res.targetInfos;\n }\n\n private onMessage(json: string): void {\n const msg = JSON.parse(json) as RawMessage;\n\n if (\"id\" in msg) {\n const rec = this.inflight.get(msg.id);\n if (!rec) return;\n\n this.inflight.delete(msg.id);\n\n if (\"error\" in msg && msg.error) {\n // Response/error events only make sense if the original send captured\n // both a flow context to re-enter and the emitted CdpCallEvent to hang\n // the terminal edge under.\n if (rec.flowLoggerContext && rec.cdpCallEvent) {\n let targetId: string | null;\n if (rec.sessionId) {\n const mappedTargetId = this.sessionToTarget.get(rec.sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = rec.sessionId;\n }\n } else {\n targetId = null;\n }\n FlowLogger.logCdpResponseEvent(\n rec.flowLoggerContext,\n rec.cdpCallEvent,\n {\n method: rec.method,\n error: `${msg.error.code} ${msg.error.message}`,\n targetId,\n },\n );\n }\n rec.reject(new Error(`${msg.error.code} ${msg.error.message}`));\n } else {\n // Successful responses reuse the same cached call context so the\n // response lands under the exact CdpCallEvent emitted at send time.\n if (rec.flowLoggerContext && rec.cdpCallEvent) {\n let targetId: string | null;\n if (rec.sessionId) {\n const mappedTargetId = this.sessionToTarget.get(rec.sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = rec.sessionId;\n }\n } else {\n targetId = null;\n }\n FlowLogger.logCdpResponseEvent(\n rec.flowLoggerContext,\n rec.cdpCallEvent,\n {\n method: rec.method,\n result: (msg as { result?: unknown }).result,\n targetId,\n },\n );\n }\n rec.resolve((msg as { result?: unknown }).result);\n }\n return;\n }\n\n if (\"method\" in msg) {\n if (msg.method === \"Target.attachedToTarget\") {\n const p = (msg as { params: Protocol.Target.AttachedToTargetEvent })\n .params;\n if (!this.sessions.has(p.sessionId)) {\n this.sessions.set(p.sessionId, new CdpSession(this, p.sessionId));\n }\n this.sessionToTarget.set(p.sessionId, p.targetInfo.targetId);\n } else if (msg.method === \"Target.detachedFromTarget\") {\n const p = (msg as { params: Protocol.Target.DetachedFromTargetEvent })\n .params;\n for (const [id, entry] of this.inflight.entries()) {\n if (entry.sessionId === p.sessionId) {\n entry.reject(\n new PageNotFoundError(\n `target closed before CDP response (sessionId=${p.sessionId}, targetId=${p.targetId})`,\n ),\n );\n this.inflight.delete(id);\n }\n }\n for (const waiter of Array.from(this.sessionDispatchWaiters)) {\n if (waiter.sessionId === p.sessionId) {\n waiter.reject(\n new PageNotFoundError(\n `target closed before CDP send (sessionId=${p.sessionId}, targetId=${p.targetId})`,\n ),\n );\n }\n }\n this.sessions.delete(p.sessionId);\n this.sessionToTarget.delete(p.sessionId);\n this.latestCdpCallEvent.delete(p.sessionId);\n } else if (msg.method === \"Target.targetDestroyed\") {\n const p = (msg as { params: { targetId: string } }).params;\n // Remove any session mapping for this target\n for (const [sessionId, targetId] of this.sessionToTarget.entries()) {\n if (targetId === p.targetId) {\n this.sessionToTarget.delete(sessionId);\n this.latestCdpCallEvent.delete(sessionId);\n break;\n }\n }\n }\n\n const { method, params, sessionId } = msg;\n const latestCdpCallEvent =\n this.latestCdpCallEvent.get(sessionId ?? null) ??\n (sessionId ? this.latestCdpCallEvent.get(null) : null);\n let targetId: string | null;\n if (sessionId) {\n const mappedTargetId = this.sessionToTarget.get(sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = sessionId;\n }\n } else {\n targetId = null;\n }\n\n // Unsolicited protocol messages are attached under the most recent call on\n // that session/root when one is known, so later callbacks still show up\n // in the same flow subtree.\n if (latestCdpCallEvent) {\n FlowLogger.logCdpMessageEvent(\n latestCdpCallEvent.flowLoggerContext,\n latestCdpCallEvent.cdpCallEvent,\n {\n method,\n params,\n targetId,\n },\n );\n }\n\n const dispatch = () => {\n if (sessionId) {\n const session = this.sessions.get(sessionId);\n session?.dispatch(method, params);\n\n // Forward target lifecycle events to root listeners as well.\n // Some browsers emit these via a parent session rather than the root\n // connection; fan-out keeps target tracking consistent.\n if (method.startsWith(\"Target.\")) {\n const handlers = this.eventHandlers.get(method);\n if (handlers) for (const h of handlers) h(params);\n }\n return;\n }\n\n const handlers = this.eventHandlers.get(method);\n if (handlers) for (const h of handlers) h(params);\n };\n\n if (latestCdpCallEvent) {\n FlowLogger.withContext(latestCdpCallEvent.flowLoggerContext, dispatch);\n } else {\n dispatch();\n }\n }\n }\n\n _sendViaSession<R = unknown>(\n sessionId: string,\n method: string,\n params?: object,\n ): Promise<R> {\n const id = this.nextId++;\n const payload = { id, method, params, sessionId };\n const stack = new Error().stack?.split(\"\\n\").slice(1, 4).join(\"\\n\");\n const flowLoggerContext = FlowLogger.resolveContext(this.flowLoggerContext);\n let targetId: string | null;\n const mappedTargetId = this.sessionToTarget.get(sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = null;\n }\n const cdpCallEvent = flowLoggerContext\n ? FlowLogger.logCdpCallEvent(flowLoggerContext, {\n method,\n params,\n targetId,\n })\n : null;\n if (flowLoggerContext && cdpCallEvent) {\n this.latestCdpCallEvent.set(sessionId, {\n flowLoggerContext,\n cdpCallEvent,\n });\n }\n\n const p = new Promise<R>((resolve, reject) => {\n this.inflight.set(id, {\n resolve,\n reject,\n sessionId,\n method,\n params,\n stack,\n ts: Date.now(),\n flowLoggerContext,\n cdpCallEvent,\n });\n });\n // Prevent unhandledRejection if a session detaches before the caller awaits.\n void p.catch(() => {});\n for (const waiter of Array.from(this.sessionDispatchWaiters)) {\n if (waiter.sessionId !== sessionId) continue;\n if (waiter.method !== method) continue;\n if (waiter.match && !waiter.match(params)) continue;\n waiter.resolve();\n break;\n }\n this.ws.send(JSON.stringify(payload));\n return p;\n }\n\n _onSessionEvent(\n sessionId: string,\n event: string,\n handler: EventHandler,\n ): void {\n const key = `${sessionId}:${event}`;\n const set = this.eventHandlers.get(key) ?? new Set<EventHandler>();\n set.add(handler);\n this.eventHandlers.set(key, set);\n }\n\n _offSessionEvent(\n sessionId: string,\n event: string,\n handler: EventHandler,\n ): void {\n const key = `${sessionId}:${event}`;\n const set = this.eventHandlers.get(key);\n if (set) set.delete(handler);\n }\n\n _dispatchToSession(sessionId: string, event: string, params: unknown): void {\n const key = `${sessionId}:${event}`;\n const handlers = this.eventHandlers.get(key);\n if (handlers) for (const h of handlers) h(params);\n }\n}\n\nexport class CdpSession implements CDPSessionLike {\n constructor(\n private readonly root: CdpConnection,\n public readonly id: string,\n ) {}\n\n send<R = unknown>(method: string, params?: object): Promise<R> {\n return this.root._sendViaSession<R>(this.id, method, params);\n }\n\n on<P = unknown>(event: string, handler: (params: P) => void): void {\n this.root._onSessionEvent(this.id, event, handler as EventHandler);\n }\n\n off<P = unknown>(event: string, handler: (params: P) => void): void {\n this.root._offSessionEvent(this.id, event, handler as EventHandler);\n }\n\n async close(): Promise<void> {\n await this.root.send<void>(\"Target.detachFromTarget\", {\n sessionId: this.id,\n });\n }\n\n dispatch(event: string, params: unknown): void {\n this.root._dispatchToSession(this.id, event, params);\n }\n}\n"]}
1
+ {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/cdp.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/cdp.ts\nimport WebSocket from \"ws\";\nimport type { Protocol } from \"devtools-protocol\";\nimport { STAGEHAND_VERSION } from \"../../version.js\";\nimport {\n FlowLogger,\n type FlowEvent,\n type FlowLoggerContext,\n} from \"../flowlogger/FlowLogger.js\";\nimport {\n CdpConnectionClosedError,\n PageNotFoundError,\n} from \"../types/public/sdkErrors.js\";\n\n/**\n * CDP transport & session multiplexer\n *\n * Owns the browser WebSocket and multiplexes flattened Target sessions.\n * Tracks inflight CDP calls, routes responses to the right session, and forwards events.\n *\n * This does not interpret Page/DOM/Runtime semantics — callers own that logic.\n */\nexport interface CDPSessionLike {\n send<R = unknown>(method: string, params?: object): Promise<R>;\n on<P = unknown>(event: string, handler: (params: P) => void): void;\n off<P = unknown>(event: string, handler: (params: P) => void): void;\n close(): Promise<void>;\n readonly id: string | null;\n}\n\ntype Inflight = {\n resolve: (v: unknown) => void;\n reject: (e: Error) => void;\n sessionId?: string | null;\n method: string;\n params?: object;\n stack?: string;\n ts: number;\n flowLoggerContext?: FlowLoggerContext | null; // Snapshot of the flow context captured when the request was sent; response handling re-enters this if ALS is gone.\n cdpCallEvent?: Pick<FlowEvent, \"eventId\" | \"eventParentIds\"> | null; // The emitted CdpCallEvent identity; later response/error events attach under this exact parent.\n};\n\ntype EventHandler = (params: unknown) => void;\ntype SessionDispatchWaiter = {\n sessionId: string;\n method: string;\n match?: (params?: object) => boolean;\n resolve: () => void;\n reject: (error: Error) => void;\n};\n\ntype RawMessage =\n | {\n id: number;\n result?: unknown;\n error?: { code: number; message: string; data?: unknown };\n sessionId?: string;\n }\n | { method: string; params?: unknown; sessionId?: string };\n\nexport class CdpConnection implements CDPSessionLike {\n private ws: WebSocket;\n private nextId = 1;\n private inflight = new Map<number, Inflight>(); // Outstanding request records; `_sendViaSession()` inserts and `onMessage()` removes/resolves them.\n private latestCdpCallEvent = new Map<\n // Most recent CDP call per session/root; `_sendViaSession()` refreshes it and later unsolicited messages reuse it as their parent anchor.\n string | null,\n {\n flowLoggerContext: FlowLoggerContext; // Flow context captured when the latest call on this session/root was emitted.\n cdpCallEvent: Pick<FlowEvent, \"eventId\" | \"eventParentIds\">; // Identity of that latest call event; unsolicited messages reuse it as their parent.\n }\n >();\n private eventHandlers = new Map<string, Set<EventHandler>>();\n private sessions = new Map<string, CdpSession>();\n /** Maps sessionId -> targetId (1:1 mapping) */\n private sessionToTarget = new Map<string, string>();\n private sessionDispatchWaiters = new Set<SessionDispatchWaiter>();\n public readonly id: string | null = null; // root\n private transportCloseHandlers = new Set<(why: string) => void>();\n\n public flowLoggerContext?: FlowLoggerContext; // Instance-owned fallback flow context; V3 sets this once and later sends/callbacks re-enter it when ALS is absent.\n\n public onTransportClosed(handler: (why: string) => void): void {\n this.transportCloseHandlers.add(handler);\n }\n public offTransportClosed(handler: (why: string) => void): void {\n this.transportCloseHandlers.delete(handler);\n }\n\n private emitTransportClosed(why: string) {\n for (const h of this.transportCloseHandlers) {\n try {\n h(why);\n } catch {\n //\n }\n }\n }\n\n private constructor(ws: WebSocket) {\n this.ws = ws;\n this.ws.on(\"close\", (code, reason) => {\n // Reason is a Buffer in ws; stringify defensively\n const why = `socket-close code=${code} reason=${String(reason || \"\")}`;\n this.rejectAllInflight(why);\n this.emitTransportClosed(why);\n });\n\n this.ws.on(\"error\", (err) => {\n const why = `socket-error ${err?.message ?? String(err)}`;\n this.rejectAllInflight(why);\n this.emitTransportClosed(why);\n });\n this.ws.on(\"message\", (data) => this.onMessage(data.toString()));\n }\n\n static async connect(\n wsUrl: string,\n options?: { headers?: Record<string, string> },\n ): Promise<CdpConnection> {\n // Include User-Agent header for server-side observability and version tracking\n // Merge user-provided headers, letting them override defaults\n const headers = {\n \"User-Agent\": `Stagehand/${STAGEHAND_VERSION}`,\n ...options?.headers,\n };\n const ws = new WebSocket(wsUrl, { headers });\n await new Promise<void>((resolve, reject) => {\n ws.once(\"open\", () => resolve());\n ws.once(\"error\", (e) => reject(e));\n });\n return new CdpConnection(ws);\n }\n\n async enableAutoAttach(): Promise<void> {\n await this.send(\"Target.setAutoAttach\", {\n autoAttach: true,\n flatten: true,\n waitForDebuggerOnStart: true,\n });\n await this.send(\"Target.setDiscoverTargets\", { discover: true });\n }\n\n async send<R = unknown>(method: string, params?: object): Promise<R> {\n const id = this.nextId++;\n const payload = { id, method, params };\n const stack = new Error().stack?.split(\"\\n\").slice(1, 4).join(\"\\n\");\n const flowLoggerContext = FlowLogger.resolveContext(this.flowLoggerContext);\n const cdpCallEvent = flowLoggerContext\n ? FlowLogger.logCdpCallEvent(flowLoggerContext, {\n method,\n params,\n targetId: null,\n })\n : null;\n if (flowLoggerContext && cdpCallEvent) {\n this.latestCdpCallEvent.set(null, {\n flowLoggerContext,\n cdpCallEvent,\n });\n }\n const p = new Promise<R>((resolve, reject) => {\n this.inflight.set(id, {\n resolve,\n reject,\n sessionId: null,\n method,\n params,\n stack,\n ts: Date.now(),\n flowLoggerContext,\n cdpCallEvent,\n });\n });\n // Prevent unhandledRejection if a session detaches before the caller awaits.\n void p.catch(() => {});\n this.ws.send(JSON.stringify(payload));\n return p;\n }\n\n on<P = unknown>(event: string, handler: (params: P) => void): void {\n const set = this.eventHandlers.get(event) ?? new Set<EventHandler>();\n set.add(handler as EventHandler);\n this.eventHandlers.set(event, set);\n }\n\n off<P = unknown>(event: string, handler: (params: P) => void): void {\n const set = this.eventHandlers.get(event);\n if (set) set.delete(handler as EventHandler);\n }\n\n async close(): Promise<void> {\n if (this.ws.readyState === WebSocket.CLOSED) return;\n await new Promise<void>((resolve) => {\n this.ws.once(\"close\", () => resolve());\n this.ws.close();\n });\n }\n\n private rejectAllInflight(why: string): void {\n for (const [id, entry] of this.inflight.entries()) {\n entry.reject(new CdpConnectionClosedError(why));\n this.inflight.delete(id);\n }\n this.latestCdpCallEvent.clear();\n for (const waiter of Array.from(this.sessionDispatchWaiters)) {\n waiter.reject(new CdpConnectionClosedError(why));\n }\n }\n\n private clearSessionEventHandlers(sessionId: string): void {\n const prefix = `${sessionId}:`;\n for (const key of Array.from(this.eventHandlers.keys())) {\n if (key.startsWith(prefix)) {\n this.eventHandlers.delete(key);\n }\n }\n }\n\n private rejectSessionPendingWork(\n sessionId: string,\n targetId: string | null,\n ): void {\n for (const [id, entry] of this.inflight.entries()) {\n if (entry.sessionId === sessionId) {\n entry.reject(\n new PageNotFoundError(\n `target closed before CDP response (sessionId=${sessionId}, targetId=${targetId})`,\n ),\n );\n this.inflight.delete(id);\n }\n }\n for (const waiter of Array.from(this.sessionDispatchWaiters)) {\n if (waiter.sessionId === sessionId) {\n waiter.reject(\n new PageNotFoundError(\n `target closed before CDP send (sessionId=${sessionId}, targetId=${targetId})`,\n ),\n );\n }\n }\n }\n\n getSession(sessionId: string): CdpSession | undefined {\n return this.sessions.get(sessionId);\n }\n\n waitForSessionDispatch(\n sessionId: string,\n method: string,\n match?: (params?: object) => boolean,\n ): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const waiter: SessionDispatchWaiter = {\n sessionId,\n method,\n match,\n resolve: () => {\n this.sessionDispatchWaiters.delete(waiter);\n resolve();\n },\n reject: (error: Error) => {\n this.sessionDispatchWaiters.delete(waiter);\n reject(error);\n },\n };\n this.sessionDispatchWaiters.add(waiter);\n });\n }\n\n async attachToTarget(targetId: string): Promise<CdpSession> {\n const { sessionId } = (await this.send<{ sessionId: string }>(\n \"Target.attachToTarget\",\n { targetId, flatten: true },\n )) as { sessionId: string };\n\n let session = this.sessions.get(sessionId);\n if (!session) {\n session = new CdpSession(this, sessionId);\n this.sessions.set(sessionId, session);\n }\n this.sessionToTarget.set(sessionId, targetId);\n return session;\n }\n\n async getTargets(): Promise<Protocol.Target.TargetInfo[]> {\n const res = await this.send<{\n targetInfos: Protocol.Target.TargetInfo[];\n }>(\"Target.getTargets\");\n return res.targetInfos;\n }\n\n private onMessage(json: string): void {\n const msg = JSON.parse(json) as RawMessage;\n\n if (\"id\" in msg) {\n const rec = this.inflight.get(msg.id);\n if (!rec) return;\n\n this.inflight.delete(msg.id);\n\n if (\"error\" in msg && msg.error) {\n // Response/error events only make sense if the original send captured\n // both a flow context to re-enter and the emitted CdpCallEvent to hang\n // the terminal edge under.\n if (rec.flowLoggerContext && rec.cdpCallEvent) {\n let targetId: string | null;\n if (rec.sessionId) {\n const mappedTargetId = this.sessionToTarget.get(rec.sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = rec.sessionId;\n }\n } else {\n targetId = null;\n }\n FlowLogger.logCdpResponseEvent(\n rec.flowLoggerContext,\n rec.cdpCallEvent,\n {\n method: rec.method,\n error: `${msg.error.code} ${msg.error.message}`,\n targetId,\n },\n );\n }\n rec.reject(new Error(`${msg.error.code} ${msg.error.message}`));\n } else {\n // Successful responses reuse the same cached call context so the\n // response lands under the exact CdpCallEvent emitted at send time.\n if (rec.flowLoggerContext && rec.cdpCallEvent) {\n let targetId: string | null;\n if (rec.sessionId) {\n const mappedTargetId = this.sessionToTarget.get(rec.sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = rec.sessionId;\n }\n } else {\n targetId = null;\n }\n FlowLogger.logCdpResponseEvent(\n rec.flowLoggerContext,\n rec.cdpCallEvent,\n {\n method: rec.method,\n result: (msg as { result?: unknown }).result,\n targetId,\n },\n );\n }\n rec.resolve((msg as { result?: unknown }).result);\n }\n return;\n }\n\n if (\"method\" in msg) {\n if (msg.method === \"Target.attachedToTarget\") {\n const p = (msg as { params: Protocol.Target.AttachedToTargetEvent })\n .params;\n if (!this.sessions.has(p.sessionId)) {\n this.sessions.set(p.sessionId, new CdpSession(this, p.sessionId));\n }\n this.sessionToTarget.set(p.sessionId, p.targetInfo.targetId);\n } else if (msg.method === \"Target.detachedFromTarget\") {\n const p = (msg as { params: Protocol.Target.DetachedFromTargetEvent })\n .params;\n this.rejectSessionPendingWork(p.sessionId, p.targetId ?? null);\n this.clearSessionEventHandlers(p.sessionId);\n this.sessions.delete(p.sessionId);\n this.sessionToTarget.delete(p.sessionId);\n this.latestCdpCallEvent.delete(p.sessionId);\n } else if (msg.method === \"Target.targetDestroyed\") {\n const p = (msg as { params: { targetId: string } }).params;\n // Remove any session mapping for this target\n for (const [sessionId, targetId] of this.sessionToTarget.entries()) {\n if (targetId === p.targetId) {\n this.rejectSessionPendingWork(sessionId, p.targetId);\n this.clearSessionEventHandlers(sessionId);\n this.sessions.delete(sessionId);\n this.sessionToTarget.delete(sessionId);\n this.latestCdpCallEvent.delete(sessionId);\n }\n }\n }\n\n const { method, params, sessionId } = msg;\n const latestCdpCallEvent =\n this.latestCdpCallEvent.get(sessionId ?? null) ??\n (sessionId ? this.latestCdpCallEvent.get(null) : null);\n let targetId: string | null;\n if (sessionId) {\n const mappedTargetId = this.sessionToTarget.get(sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = sessionId;\n }\n } else {\n targetId = null;\n }\n\n // Unsolicited protocol messages are attached under the most recent call on\n // that session/root when one is known, so later callbacks still show up\n // in the same flow subtree.\n if (latestCdpCallEvent) {\n FlowLogger.logCdpMessageEvent(\n latestCdpCallEvent.flowLoggerContext,\n latestCdpCallEvent.cdpCallEvent,\n {\n method,\n params,\n targetId,\n },\n );\n }\n\n const dispatch = () => {\n if (sessionId) {\n const session = this.sessions.get(sessionId);\n session?.dispatch(method, params);\n\n // Forward target lifecycle events to root listeners as well.\n // Some browsers emit these via a parent session rather than the root\n // connection; fan-out keeps target tracking consistent.\n if (method.startsWith(\"Target.\")) {\n const handlers = this.eventHandlers.get(method);\n if (handlers) for (const h of handlers) h(params);\n }\n return;\n }\n\n const handlers = this.eventHandlers.get(method);\n if (handlers) for (const h of handlers) h(params);\n };\n\n if (latestCdpCallEvent) {\n FlowLogger.withContext(latestCdpCallEvent.flowLoggerContext, dispatch);\n } else {\n dispatch();\n }\n }\n }\n\n _sendViaSession<R = unknown>(\n sessionId: string,\n method: string,\n params?: object,\n ): Promise<R> {\n const id = this.nextId++;\n const payload = { id, method, params, sessionId };\n const stack = new Error().stack?.split(\"\\n\").slice(1, 4).join(\"\\n\");\n const flowLoggerContext = FlowLogger.resolveContext(this.flowLoggerContext);\n let targetId: string | null;\n const mappedTargetId = this.sessionToTarget.get(sessionId);\n if (mappedTargetId) {\n targetId = mappedTargetId;\n } else {\n targetId = null;\n }\n const cdpCallEvent = flowLoggerContext\n ? FlowLogger.logCdpCallEvent(flowLoggerContext, {\n method,\n params,\n targetId,\n })\n : null;\n if (flowLoggerContext && cdpCallEvent) {\n this.latestCdpCallEvent.set(sessionId, {\n flowLoggerContext,\n cdpCallEvent,\n });\n }\n\n const p = new Promise<R>((resolve, reject) => {\n this.inflight.set(id, {\n resolve,\n reject,\n sessionId,\n method,\n params,\n stack,\n ts: Date.now(),\n flowLoggerContext,\n cdpCallEvent,\n });\n });\n // Prevent unhandledRejection if a session detaches before the caller awaits.\n void p.catch(() => {});\n for (const waiter of Array.from(this.sessionDispatchWaiters)) {\n if (waiter.sessionId !== sessionId) continue;\n if (waiter.method !== method) continue;\n if (waiter.match && !waiter.match(params)) continue;\n waiter.resolve();\n break;\n }\n this.ws.send(JSON.stringify(payload));\n return p;\n }\n\n _onSessionEvent(\n sessionId: string,\n event: string,\n handler: EventHandler,\n ): void {\n const key = `${sessionId}:${event}`;\n const set = this.eventHandlers.get(key) ?? new Set<EventHandler>();\n set.add(handler);\n this.eventHandlers.set(key, set);\n }\n\n _offSessionEvent(\n sessionId: string,\n event: string,\n handler: EventHandler,\n ): void {\n const key = `${sessionId}:${event}`;\n const set = this.eventHandlers.get(key);\n if (set) set.delete(handler);\n }\n\n _dispatchToSession(sessionId: string, event: string, params: unknown): void {\n const key = `${sessionId}:${event}`;\n const handlers = this.eventHandlers.get(key);\n if (handlers) for (const h of handlers) h(params);\n }\n}\n\nexport class CdpSession implements CDPSessionLike {\n constructor(\n private readonly root: CdpConnection,\n public readonly id: string,\n ) {}\n\n send<R = unknown>(method: string, params?: object): Promise<R> {\n return this.root._sendViaSession<R>(this.id, method, params);\n }\n\n on<P = unknown>(event: string, handler: (params: P) => void): void {\n this.root._onSessionEvent(this.id, event, handler as EventHandler);\n }\n\n off<P = unknown>(event: string, handler: (params: P) => void): void {\n this.root._offSessionEvent(this.id, event, handler as EventHandler);\n }\n\n async close(): Promise<void> {\n await this.root.send<void>(\"Target.detachFromTarget\", {\n sessionId: this.id,\n });\n }\n\n dispatch(event: string, params: unknown): void {\n this.root._dispatchToSession(this.id, event, params);\n }\n}\n"]}
@@ -5,7 +5,7 @@ import type { StagehandAPIClient } from "../api.js";
5
5
  import { LocalBrowserLaunchOptions } from "../types/public/index.js";
6
6
  import type { BrowserClipboard } from "../types/public/clipboard.js";
7
7
  import { InitScriptSource } from "../types/private/index.js";
8
- import { Cookie, ClearCookieOptions, CookieParam } from "../types/public/context.js";
8
+ import { Cookie, ClearCookieOptions, CookieParam, DomainPolicy } from "../types/public/context.js";
9
9
  /**
10
10
  * V3Context
11
11
  *
@@ -26,6 +26,7 @@ export declare class V3Context {
26
26
  private readonly _piercerInstalled;
27
27
  private _lastPopupSignalAt;
28
28
  private readonly _targetSessionListeners;
29
+ private readonly _domainPolicySessionListeners;
29
30
  private readonly _sessionInit;
30
31
  private pagesByTarget;
31
32
  private mainFrameToTarget;
@@ -36,8 +37,12 @@ export declare class V3Context {
36
37
  private typeByTarget;
37
38
  private _pageOrder;
38
39
  private pendingCreatedTargetUrl;
40
+ private pageCreationFailures;
41
+ private domainPolicyClosingTargets;
42
+ private domainPolicyClosePromises;
39
43
  private readonly initScripts;
40
44
  private extraHttpHeaders;
45
+ private domainPolicy;
41
46
  private _clipboard?;
42
47
  private installTargetSessionListeners;
43
48
  /**
@@ -68,6 +73,11 @@ export declare class V3Context {
68
73
  setActivePage(page: Page): void;
69
74
  addInitScript<Arg>(script: InitScriptSource<Arg>, arg?: Arg): Promise<void>;
70
75
  setExtraHTTPHeaders(headers: Record<string, string>): Promise<void>;
76
+ getDomainPolicy(): DomainPolicy | null;
77
+ setDomainPolicy(policy: DomainPolicy | null): Promise<void>;
78
+ private installDomainPolicyHandler;
79
+ private uninstallDomainPolicyHandler;
80
+ private handleDomainPolicyRequestPaused;
71
81
  get clipboard(): BrowserClipboard;
72
82
  /**
73
83
  * Return top-level `Page`s (oldest → newest). OOPIF targets are not included.
@@ -108,6 +118,8 @@ export declare class V3Context {
108
118
  * - Resume the target only after listeners are wired.
109
119
  */
110
120
  private onAttachedToTarget;
121
+ private closePopupIfBlockedByDomainPolicy;
122
+ private closeTargetAfterDomainPolicyViolation;
111
123
  /**
112
124
  * Detach handler:
113
125
  * - Remove child session ownership and prune its subtree.