@browserbasehq/orca 3.1.0-patch.1 → 3.1.0-patch.2
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/esm/index.d.ts +2 -2
- package/dist/esm/lib/modelUtils.d.ts +3 -0
- package/dist/esm/lib/modelUtils.js +7 -2
- package/dist/esm/lib/modelUtils.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +2 -1
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -1
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +2 -1
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/api.d.ts +16 -1
- package/dist/esm/lib/v3/api.js +41 -5
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +22 -20
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +0 -1
- package/dist/esm/lib/v3/index.js +0 -1
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +5 -2
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +5 -7
- package/dist/esm/lib/v3/shutdown/supervisor.js +52 -62
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +52 -48
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
- package/dist/esm/lib/v3/tests/click-count.spec.js +12 -47
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/envReporter.js +57 -0
- package/dist/esm/lib/v3/tests/envReporter.js.map +7 -0
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +21 -67
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +60 -3
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +13 -1
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +8 -0
- package/dist/esm/lib/v3/types/public/api.js +5 -3
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/index.d.ts +1 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -1
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +3 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +12 -6
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.js +1 -10
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/locator.js +2 -2
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +1 -2
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +13 -10
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/tests/agent-execution-model.test.js +139 -0
- package/dist/esm/tests/agent-execution-model.test.js.map +7 -0
- package/dist/esm/tests/api-multiregion.test.js +73 -0
- package/dist/esm/tests/api-multiregion.test.js.map +7 -0
- package/dist/esm/tests/model-utils.test.js +43 -0
- package/dist/esm/tests/model-utils.test.js.map +7 -0
- package/dist/esm/tests/public-api/export-surface.test.js +0 -1
- package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
- package/dist/esm/tests/public-api/public-error-types.test.js +2 -1
- package/dist/esm/tests/public-api/public-error-types.test.js.map +2 -2
- package/dist/esm/tests/understudy-command-exception.test.js +55 -0
- package/dist/esm/tests/understudy-command-exception.test.js.map +7 -0
- package/package.json +9 -13
- package/dist/esm/lib/v3/cli.d.ts +0 -2
- package/dist/esm/lib/v3/cli.js +0 -10
- package/dist/esm/lib/v3/cli.js.map +0 -1
- package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js.map +0 -1
- package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js.map +0 -1
|
@@ -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 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 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 useApi: false in the stagehand constructor. \" +\n \"To use the Stagehand API, set experimental: false and useApi: true 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 useAPI: true. \n Please set experimental: true and useAPI: false 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, useAPI: true 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 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"]}
|
|
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 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 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 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"]}
|
|
@@ -7,15 +7,6 @@ import { executionContexts } from "./executionContextRegistry.js";
|
|
|
7
7
|
import { normalizeInitScriptSource } from "./initScripts.js";
|
|
8
8
|
import { TimeoutError, PageNotFoundError } from "../types/public/sdkErrors.js";
|
|
9
9
|
import { getEnvTimeoutMs, withTimeout } from "../timeoutConfig.js";
|
|
10
|
-
const DEFAULT_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS = 5000;
|
|
11
|
-
const CI_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS = 30000;
|
|
12
|
-
const FIRST_TOP_LEVEL_PAGE_TIMEOUT_ENV = "STAGEHAND_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS";
|
|
13
|
-
function getFirstTopLevelPageTimeoutMs() {
|
|
14
|
-
return (getEnvTimeoutMs(FIRST_TOP_LEVEL_PAGE_TIMEOUT_ENV) ??
|
|
15
|
-
(process.env.CI
|
|
16
|
-
? CI_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS
|
|
17
|
-
: DEFAULT_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS));
|
|
18
|
-
}
|
|
19
10
|
function isTopLevelPage(info) {
|
|
20
11
|
const ti = info;
|
|
21
12
|
return info.type === "page" && ti.subtype !== "iframe";
|
|
@@ -82,7 +73,7 @@ export class V3Context {
|
|
|
82
73
|
const conn = await CdpConnection.connect(wsUrl);
|
|
83
74
|
const ctx = new V3Context(conn, opts?.env ?? "LOCAL", opts?.apiClient ?? null, opts?.localBrowserLaunchOptions ?? null);
|
|
84
75
|
await ctx.bootstrap();
|
|
85
|
-
await ctx.waitForFirstTopLevelPage(
|
|
76
|
+
await ctx.waitForFirstTopLevelPage(5000);
|
|
86
77
|
return ctx;
|
|
87
78
|
};
|
|
88
79
|
const cdpTimeoutMs = opts?.env === "BROWSERBASE"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/context.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/context.ts\nimport type { Protocol } from \"devtools-protocol\";\nimport { v3Logger } from \"../logger.js\";\nimport { CdpConnection, CDPSessionLike } from \"./cdp.js\";\nimport { Page } from \"./page.js\";\nimport { installV3PiercerIntoSession } from \"./piercer.js\";\nimport { v3ScriptContent } from \"../dom/build/scriptV3Content.js\";\nimport { executionContexts } from \"./executionContextRegistry.js\";\nimport type { StagehandAPIClient } from \"../api.js\";\nimport { LocalBrowserLaunchOptions } from \"../types/public/index.js\";\nimport { InitScriptSource } from \"../types/private/index.js\";\nimport { normalizeInitScriptSource } from \"./initScripts.js\";\nimport { TimeoutError, PageNotFoundError } from \"../types/public/sdkErrors.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"../timeoutConfig.js\";\n\ntype TargetId = string;\ntype SessionId = string;\n\ntype TargetType = \"page\" | \"iframe\" | string;\n\nconst DEFAULT_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS = 5000;\nconst CI_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS = 30000;\nconst FIRST_TOP_LEVEL_PAGE_TIMEOUT_ENV =\n \"STAGEHAND_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS\";\n\nfunction getFirstTopLevelPageTimeoutMs(): number {\n return (\n getEnvTimeoutMs(FIRST_TOP_LEVEL_PAGE_TIMEOUT_ENV) ??\n (process.env.CI\n ? CI_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS\n : DEFAULT_FIRST_TOP_LEVEL_PAGE_TIMEOUT_MS)\n );\n}\n\nfunction isTopLevelPage(info: Protocol.Target.TargetInfo): boolean {\n const ti = info as unknown as { subtype?: string };\n return info.type === \"page\" && ti.subtype !== \"iframe\";\n}\n\n/**\n * V3Context\n *\n * Owns the root CDP connection and wires Target/Page events into Page.\n * Maintains one Page per top-level target, adopts OOPIF child sessions into the owner Page,\n * and tracks target→page and (root) frame→target mappings for lookups.\n *\n * IMPORTANT: FrameId → session ownership is managed inside Page (via its FrameRegistry).\n * Context never “guesses” owners; it simply forwards events (with the emitting session)\n * so Page can record the correct owner at event time.\n */\nexport class V3Context {\n private constructor(\n readonly conn: CdpConnection,\n private readonly env: \"LOCAL\" | \"BROWSERBASE\" = \"LOCAL\",\n private readonly apiClient: StagehandAPIClient | null = null,\n private readonly localBrowserLaunchOptions: LocalBrowserLaunchOptions | null = null,\n ) {}\n\n private readonly _piercerInstalled = new Set<string>();\n // Timestamp for most recent popup/open signal\n private _lastPopupSignalAt = 0;\n private readonly _targetSessionListeners = new Set<SessionId>();\n\n private readonly _sessionInit = new Set<SessionId>();\n private pagesByTarget = new Map<TargetId, Page>();\n private mainFrameToTarget = new Map<string, TargetId>();\n private sessionOwnerPage = new Map<SessionId, Page>();\n private frameOwnerPage = new Map<string, Page>();\n private pendingOopifByMainFrame = new Map<string, SessionId>();\n private createdAtByTarget = new Map<TargetId, number>();\n private typeByTarget = new Map<TargetId, TargetType>();\n private _pageOrder: TargetId[] = [];\n private pendingCreatedTargetUrl = new Map<TargetId, string>();\n private readonly initScripts: string[] = [];\n\n private installTargetSessionListeners(session: CDPSessionLike): void {\n const sessionId = session.id;\n if (!sessionId) return;\n if (this._targetSessionListeners.has(sessionId)) return;\n this._targetSessionListeners.add(sessionId);\n\n session.on<Protocol.Target.AttachedToTargetEvent>(\n \"Target.attachedToTarget\",\n (evt) => {\n void this.onAttachedToTarget(evt.targetInfo, evt.sessionId);\n },\n );\n session.on<Protocol.Target.DetachedFromTargetEvent>(\n \"Target.detachedFromTarget\",\n (evt) => {\n this.onDetachedFromTarget(evt.sessionId, evt.targetId ?? null);\n },\n );\n session.on<Protocol.Target.TargetDestroyedEvent>(\n \"Target.targetDestroyed\",\n (evt) => {\n this.cleanupByTarget(evt.targetId);\n },\n );\n }\n\n /**\n * Create a Context for a given CDP websocket URL and bootstrap target wiring.\n */\n static async create(\n wsUrl: string,\n opts?: {\n env?: \"LOCAL\" | \"BROWSERBASE\";\n apiClient?: StagehandAPIClient | null;\n localBrowserLaunchOptions?: LocalBrowserLaunchOptions | null;\n },\n ): Promise<V3Context> {\n const connectTask = async () => {\n const conn = await CdpConnection.connect(wsUrl);\n const ctx = new V3Context(\n conn,\n opts?.env ?? \"LOCAL\",\n opts?.apiClient ?? null,\n opts?.localBrowserLaunchOptions ?? null,\n );\n await ctx.bootstrap();\n await ctx.waitForFirstTopLevelPage(getFirstTopLevelPageTimeoutMs());\n return ctx;\n };\n\n const cdpTimeoutMs =\n opts?.env === \"BROWSERBASE\"\n ? getEnvTimeoutMs(\"BROWSERBASE_CDP_CONNECT_MAX_MS\")\n : undefined;\n\n if (cdpTimeoutMs) {\n let timedOut = false;\n const connectPromise = connectTask();\n const guarded = withTimeout(\n connectPromise,\n cdpTimeoutMs,\n \"Browserbase CDP connect\",\n ).catch((err) => {\n timedOut = true;\n throw err;\n });\n connectPromise\n .then((ctx) => {\n if (timedOut) void ctx.close();\n })\n .catch(() => {});\n return await guarded;\n }\n\n return await connectTask();\n }\n\n /**\n * Wait until at least one top-level Page has been created and registered.\n * We poll internal maps that bootstrap/onAttachedToTarget populate.\n */\n private async waitForFirstTopLevelPage(timeoutMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n // A top-level Page is present if typeByTarget has an entry \"page\"\n // and pagesByTarget has the corresponding Page object.\n for (const [tid, ttype] of this.typeByTarget) {\n if (ttype === \"page\") {\n const p = this.pagesByTarget.get(tid);\n if (p) return;\n }\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n throw new TimeoutError(\n \"waitForFirstTopLevelPage (no top-level Page)\",\n timeoutMs,\n );\n }\n\n private async waitForInitialTopLevelTargets(\n targetIds: TargetId[],\n timeoutMs = 3000,\n ): Promise<void> {\n if (!targetIds.length) return;\n const pending = new Set(targetIds);\n const deadline = Date.now() + timeoutMs;\n while (pending.size && Date.now() < deadline) {\n for (const tid of Array.from(pending)) {\n if (this.pagesByTarget.has(tid)) {\n pending.delete(tid);\n }\n }\n if (!pending.size) return;\n await new Promise((r) => setTimeout(r, 25));\n }\n if (pending.size) {\n v3Logger({\n category: \"ctx\",\n message: \"Timed out waiting for existing top-level targets to attach\",\n level: 2,\n auxiliary: {\n remainingTargets: {\n value: JSON.stringify(Array.from(pending)),\n type: \"object\",\n },\n },\n });\n }\n }\n\n private async ensurePiercer(session: CDPSessionLike): Promise<boolean> {\n const id = session.id ?? \"\";\n if (this._piercerInstalled.has(id)) return true;\n\n const installed = await installV3PiercerIntoSession(session);\n if (installed) {\n this._piercerInstalled.add(id);\n }\n return installed;\n }\n\n /** Mark a page target as the most-recent one (active). */\n private _pushActive(tid: TargetId): void {\n // remove prior entry if any\n const i = this._pageOrder.indexOf(tid);\n if (i !== -1) this._pageOrder.splice(i, 1);\n this._pageOrder.push(tid);\n }\n\n /** Remove a page target from the recency list (used on close). */\n private _removeFromOrder(tid: TargetId): void {\n const i = this._pageOrder.indexOf(tid);\n if (i !== -1) this._pageOrder.splice(i, 1);\n }\n\n /** Return the current active Page (most-recent page that still exists). */\n public activePage(): Page | undefined {\n // prune any stale ids from the tail\n for (let i = this._pageOrder.length - 1; i >= 0; i--) {\n const tid = this._pageOrder[i]!;\n const p = this.pagesByTarget.get(tid);\n if (p) return p;\n // stale — remove and continue\n this._pageOrder.splice(i, 1);\n }\n // fallback: pick the newest by createdAt if order is empty\n let newestTid: TargetId | undefined;\n let newestTs = -1;\n for (const [tid] of this.pagesByTarget) {\n const ts = this.createdAtByTarget.get(tid) ?? 0;\n if (ts > newestTs) {\n newestTs = ts;\n newestTid = tid;\n }\n }\n return newestTid ? this.pagesByTarget.get(newestTid) : undefined;\n }\n\n /** Explicitly mark a known Page as the most-recent active page (and focus it). */\n public setActivePage(page: Page): void {\n let targetId = page.targetId();\n if (this.pagesByTarget.get(targetId) !== page) {\n const lookup = this.findTargetIdByPage(page);\n if (!lookup) {\n v3Logger({\n category: \"ctx\",\n message: \"setActivePage called with unknown Page\",\n level: 2,\n auxiliary: {\n targetId: { value: String(targetId), type: \"string\" },\n },\n });\n return;\n }\n targetId = lookup;\n }\n\n this._pushActive(targetId);\n\n // Bring the tab to the foreground in headful Chrome (best effort).\n void this.conn.send(\"Target.activateTarget\", { targetId }).catch(() => {});\n }\n\n public async addInitScript<Arg>(\n script: InitScriptSource<Arg>,\n arg?: Arg,\n ): Promise<void> {\n const source = await normalizeInitScriptSource(script, arg);\n if (this.initScripts.includes(source)) return;\n this.initScripts.push(source);\n const pages = this.pages();\n await Promise.all(pages.map((page) => page.registerInitScript(source)));\n }\n\n /**\n * Return top-level `Page`s (oldest → newest). OOPIF targets are not included.\n */\n pages(): Page[] {\n const rows: Array<{ tid: TargetId; page: Page; created: number }> = [];\n for (const [tid, page] of this.pagesByTarget) {\n if (this.typeByTarget.get(tid) === \"page\") {\n rows.push({ tid, page, created: this.createdAtByTarget.get(tid) ?? 0 });\n }\n }\n rows.sort((a, b) => a.created - b.created);\n return rows.map((r) => r.page);\n }\n\n private async applyInitScriptsToPage(\n page: Page,\n opts?: { seedOnly?: boolean },\n ): Promise<void> {\n if (opts?.seedOnly) {\n for (const source of this.initScripts) {\n page.seedInitScript(source);\n }\n return;\n }\n for (const source of this.initScripts) {\n await page.registerInitScript(source);\n }\n }\n\n /**\n * Resolve an owning `Page` by the **top-level main frame id**.\n * Note: child (OOPIF) roots are intentionally not present in this mapping.\n */\n resolvePageByMainFrameId(frameId: string): Page | undefined {\n const targetId = this.mainFrameToTarget.get(frameId);\n return targetId ? this.pagesByTarget.get(targetId) : undefined;\n }\n\n /**\n * Serialize the full frame tree for a given top-level main frame id.\n */\n async getFullFrameTreeByMainFrameId(\n rootMainFrameId: string,\n ): Promise<Protocol.Page.FrameTree> {\n const owner = this.resolvePageByMainFrameId(rootMainFrameId);\n if (!owner) throw new PageNotFoundError(`mainFrameId=${rootMainFrameId}`);\n return owner.asProtocolFrameTree(rootMainFrameId);\n }\n\n /**\n * Create a new top-level page (tab) with the given URL and return its Page object.\n * Waits until the target is attached and registered.\n */\n public async newPage(url = \"about:blank\"): Promise<Page> {\n const targetUrl = String(url ?? \"about:blank\");\n const { targetId } = await this.conn.send<{ targetId: string }>(\n \"Target.createTarget\",\n // Create at about:blank so init scripts can install before first real navigation.\n { url: \"about:blank\" },\n );\n this.pendingCreatedTargetUrl.set(targetId, \"about:blank\");\n // Best-effort bring-to-front\n await this.conn.send(\"Target.activateTarget\", { targetId }).catch(() => {});\n\n const deadline = Date.now() + 5000;\n while (Date.now() < deadline) {\n const page = this.pagesByTarget.get(targetId);\n if (page) {\n // we created at about:blank; navigate only after attach so init scripts run\n // on the first real document. Fire-and-forget so newPage() resolves on attach.\n if (targetUrl !== \"about:blank\") {\n // Seed requested URL into the page cache before navigation events arrive.\n page.seedCurrentUrl(targetUrl);\n void page\n .sendCDP(\"Page.navigate\", { url: targetUrl })\n .catch(() => {});\n }\n return page;\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n throw new TimeoutError(`newPage: target not attached (${targetId})`, 5000);\n }\n\n /**\n * Close CDP and clear all mappings. Best-effort cleanup.\n */\n async close(): Promise<void> {\n await this.conn.close();\n this.pagesByTarget.clear();\n this.mainFrameToTarget.clear();\n this.sessionOwnerPage.clear();\n this.frameOwnerPage.clear();\n this.pendingOopifByMainFrame.clear();\n this.createdAtByTarget.clear();\n this.typeByTarget.clear();\n this.pendingCreatedTargetUrl.clear();\n }\n\n /**\n * Bootstrap target lifecycle:\n * - Attach to existing targets.\n * - Handle auto-attach events.\n * - Clean up on detach/destroy.\n */\n private async bootstrap(): Promise<void> {\n // Live attach via auto-attach (normal path)\n this.conn.on<Protocol.Target.AttachedToTargetEvent>(\n \"Target.attachedToTarget\",\n async (evt) => {\n await this.onAttachedToTarget(evt.targetInfo, evt.sessionId);\n },\n );\n\n // Live detach (clean up session from owner page & frame graph)\n this.conn.on<Protocol.Target.DetachedFromTargetEvent>(\n \"Target.detachedFromTarget\",\n (evt) => {\n this.onDetachedFromTarget(evt.sessionId, evt.targetId ?? null);\n },\n );\n\n // Destroyed targets (fallback cleanup by targetId)\n this.conn.on<Protocol.Target.TargetDestroyedEvent>(\n \"Target.targetDestroyed\",\n (evt) => {\n this.cleanupByTarget(evt.targetId);\n },\n );\n\n this.conn.on<Protocol.Target.TargetCreatedEvent>(\n \"Target.targetCreated\",\n async (evt) => {\n const info = evt.targetInfo;\n // Note popups to help activePage settle\n const ti = info;\n if (info.type === \"page\" && (ti?.openerId || ti?.openerFrameId)) {\n this._notePopupSignal();\n }\n },\n );\n\n // Only enable auto-attach after listeners are ready so replayed targets are captured.\n await this.conn.enableAutoAttach();\n\n const targets = await this.conn.getTargets();\n for (const t of targets) {\n if (t.attached) continue; // auto-attach already handled this target\n try {\n await this.conn.attachToTarget(t.targetId);\n } catch {\n // ignore attach race\n }\n }\n\n const topLevelTargetIds = targets\n .filter((t) => isTopLevelPage(t))\n .map((t) => t.targetId);\n await this.waitForInitialTopLevelTargets(topLevelTargetIds);\n }\n\n /**\n * Handle a newly attached target (top-level or potential OOPIF):\n * - Enable Page domain and lifecycle events.\n * - If top-level → create Page, wire listeners, resume.\n * - Else → probe child root frame id via `Page.getFrameTree` and adopt immediately\n * if the parent is known; otherwise stage until parent `frameAttached`.\n * - Resume the target only after listeners are wired.\n */\n private async onAttachedToTarget(\n info: Protocol.Target.TargetInfo,\n sessionId: SessionId,\n ): Promise<void> {\n // Workers are ignored by Stagehand, but with waitForDebuggerOnStart enabled\n // they still need to be resumed so we don't leave them paused.\n if (\n info.type === \"worker\" ||\n info.type === \"service_worker\" ||\n info.type === \"shared_worker\"\n ) {\n const session = this.conn.getSession(sessionId);\n if (session) {\n await session.send(\"Runtime.runIfWaitingForDebugger\").catch(() => {});\n }\n return;\n }\n\n const session = this.conn.getSession(sessionId);\n if (!session) return;\n\n // Init guard\n if (this._sessionInit.has(sessionId)) return;\n this._sessionInit.add(sessionId);\n\n this.installTargetSessionListeners(session);\n\n // Register for Runtime events before enabling it so we don't miss initial contexts.\n executionContexts.attachSession(session);\n\n // Ensure we only resume once even if multiple code paths hit finally.\n let resumed = false;\n const resume = async (): Promise<void> => {\n if (resumed) return;\n resumed = true;\n // waitForDebuggerOnStart pauses new targets; resume once we've done\n // any \"must happen before first document\" work.\n await session.send(\"Runtime.runIfWaitingForDebugger\").catch(() => {});\n };\n\n // Install any context-level init scripts as early as possible on this session.\n // If this throws, we still resume the target but avoid re-installing later.\n let scriptsInstalled = true;\n let piercerPreRegistered = false;\n const installPromises: Array<Promise<unknown>> = [];\n try {\n const send = (method: string, params?: object) =>\n session.send(method, params).catch(() => {});\n // make sure init scripts land before any subframe work.\n installPromises.push(send(\"Page.enable\"));\n installPromises.push(send(\"Runtime.enable\"));\n installPromises.push(\n session\n .send(\"Target.setAutoAttach\", {\n autoAttach: true,\n waitForDebuggerOnStart: true,\n flatten: true,\n })\n .catch(() => {}),\n );\n // Send init scripts only after auto-attach has been issued.\n if (this.initScripts.length) {\n for (const source of this.initScripts) {\n installPromises.push(\n session.send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source,\n runImmediately: true,\n }),\n );\n }\n }\n // register piercer (shadow-DOM hook) before resume so it runs\n // before page scripts\n installPromises.push(\n session\n .send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source: v3ScriptContent,\n runImmediately: true,\n })\n .then(() => {\n piercerPreRegistered = true;\n })\n .catch(() => {}),\n );\n installPromises.push(resume());\n } catch {\n scriptsInstalled = false;\n }\n if (installPromises.length) {\n const results = await Promise.allSettled(installPromises);\n if (results.some((r) => r.status === \"rejected\")) {\n scriptsInstalled = false;\n }\n }\n\n // Only mark the piercer as installed when the pre-registration actually\n // succeeded. This lets ensurePiercer() short-circuit (avoiding sequential\n // CDP round-trips that delay Page.create / installFrameEventBridges and\n // cause same-process iframe frame-events to be missed) while still falling\n // back to the full install path when registration failed.\n if (piercerPreRegistered) {\n this._piercerInstalled.add(sessionId);\n }\n\n try {\n const piercerReady = await this.ensurePiercer(session);\n if (!piercerReady) return;\n\n await session\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n\n // Top-level handling\n if (isTopLevelPage(info)) {\n const page = await Page.create(\n this.conn,\n session,\n info.targetId,\n this.apiClient,\n this.localBrowserLaunchOptions,\n this.env === \"BROWSERBASE\",\n );\n this.wireSessionToOwnerPage(sessionId, page);\n this.pagesByTarget.set(info.targetId, page);\n this.mainFrameToTarget.set(page.mainFrameId(), info.targetId);\n this.sessionOwnerPage.set(sessionId, page);\n this.frameOwnerPage.set(page.mainFrameId(), page);\n this.typeByTarget.set(info.targetId, \"page\");\n if (!this.createdAtByTarget.has(info.targetId)) {\n this.createdAtByTarget.set(info.targetId, Date.now());\n }\n const pendingSeedUrl = this.pendingCreatedTargetUrl.get(info.targetId);\n this.pendingCreatedTargetUrl.delete(info.targetId);\n page.seedCurrentUrl(pendingSeedUrl ?? info.url ?? \"\");\n this._pushActive(info.targetId);\n this.installFrameEventBridges(sessionId, page);\n // If we already installed scripts at the session level, only seed the\n // Page's registry to avoid double-installing DOMContentLoaded handlers.\n await this.applyInitScriptsToPage(page, {\n seedOnly: scriptsInstalled,\n });\n\n return;\n }\n\n // Child (iframe / OOPIF)\n try {\n const { frameTree } =\n await session.send<Protocol.Page.GetFrameTreeResponse>(\n \"Page.getFrameTree\",\n );\n const childMainId = frameTree.frame.id;\n\n // Try to find owner Page now (it may already have the node in its tree)\n let owner = this.frameOwnerPage.get(childMainId);\n if (!owner) {\n for (const p of this.pagesByTarget.values()) {\n const tree = p.asProtocolFrameTree(p.mainFrameId());\n const has = (function find(n: Protocol.Page.FrameTree): boolean {\n if (n.frame.id === childMainId) return true;\n for (const c of n.childFrames ?? []) if (find(c)) return true;\n return false;\n })(tree);\n if (has) {\n owner = p;\n break;\n }\n }\n }\n\n if (owner) {\n owner.adoptOopifSession(session, childMainId);\n this.sessionOwnerPage.set(sessionId, owner);\n this.installFrameEventBridges(sessionId, owner);\n // Prime the execution-context registry so later lookups succeed even if\n // the frame navigates before we issue a command.\n void executionContexts\n .waitForMainWorld(session, childMainId)\n .catch(() => {});\n } else {\n this.pendingOopifByMainFrame.set(childMainId, sessionId);\n }\n } catch {\n // page.getFrameTree failed. Most likely was an ad iframe\n // that opened & closed before we could attach. ignore\n }\n } finally {\n await resume();\n }\n }\n\n /**\n * Detach handler:\n * - Remove child session ownership and prune its subtree.\n * - If a top-level target, cleanup its `Page` and mappings.\n * - Drop any staged child for this session.\n */\n private onDetachedFromTarget(\n sessionId: SessionId,\n targetId: string | null,\n ): void {\n const owner = this.sessionOwnerPage.get(sessionId);\n if (owner) {\n owner.detachOopifSession(sessionId);\n this.sessionOwnerPage.delete(sessionId);\n }\n\n if (targetId && this.pagesByTarget.has(targetId)) {\n this.cleanupByTarget(targetId);\n }\n\n for (const [fid, sid] of Array.from(\n this.pendingOopifByMainFrame.entries(),\n )) {\n if (sid === sessionId) this.pendingOopifByMainFrame.delete(fid);\n }\n\n this._targetSessionListeners.delete(sessionId);\n this._sessionInit.delete(sessionId);\n this._piercerInstalled.delete(sessionId);\n }\n\n /**\n * Cleanup a top-level Page by target id, removing its root and staged children.\n */\n private cleanupByTarget(targetId: TargetId): void {\n const page = this.pagesByTarget.get(targetId);\n if (!page) return;\n\n const mainId = page.mainFrameId();\n this.mainFrameToTarget.delete(mainId);\n this.frameOwnerPage.delete(mainId);\n\n for (const [sid, p] of Array.from(this.sessionOwnerPage.entries())) {\n if (p === page) this.sessionOwnerPage.delete(sid);\n }\n\n for (const [fid] of Array.from(this.pendingOopifByMainFrame.entries())) {\n const owner = this.frameOwnerPage.get(fid);\n if (!owner || owner === page) this.pendingOopifByMainFrame.delete(fid);\n }\n\n this._removeFromOrder(targetId);\n this.pagesByTarget.delete(targetId);\n this.createdAtByTarget.delete(targetId);\n this.typeByTarget.delete(targetId);\n this.pendingCreatedTargetUrl.delete(targetId);\n }\n\n /**\n * Wire Page-domain frame events for a session into the owning Page & mappings.\n * We forward the *emitting session* with every event so Page can stamp ownership precisely.\n */\n private installFrameEventBridges(sessionId: SessionId, owner: Page): void {\n const session = this.conn.getSession(sessionId);\n if (!session) return;\n\n session.on<Protocol.Page.FrameAttachedEvent>(\n \"Page.frameAttached\",\n (evt) => {\n const { frameId, parentFrameId } = evt;\n\n owner.onFrameAttached(frameId, parentFrameId ?? null, session);\n\n // If we were waiting for this id (OOPIF child), adopt now.\n const pendingChildSessionId = this.pendingOopifByMainFrame.get(frameId);\n if (pendingChildSessionId) {\n const child = this.conn.getSession(pendingChildSessionId);\n if (child) {\n owner.adoptOopifSession(child, frameId);\n this.sessionOwnerPage.set(child.id, owner);\n // Wire bridges for the child so its Page events keep flowing.\n this.installFrameEventBridges(pendingChildSessionId, owner);\n }\n this.pendingOopifByMainFrame.delete(frameId);\n }\n\n // Track Page ownership for quick reverse lookups (debug helpers).\n this.frameOwnerPage.set(frameId, owner);\n\n // Root handoff: keep mainFrameToTarget aligned for the page\n if (!parentFrameId) {\n const newRoot = owner.mainFrameId();\n const topTargetId = this.findTargetIdByPage(owner);\n if (topTargetId) {\n this.mainFrameToTarget.set(newRoot, topTargetId);\n }\n this.frameOwnerPage.set(newRoot, owner);\n }\n },\n );\n\n session.on<Protocol.Page.FrameDetachedEvent>(\n \"Page.frameDetached\",\n (evt) => {\n owner.onFrameDetached(evt.frameId, evt.reason ?? \"remove\");\n if (evt.reason !== \"swap\") {\n this.frameOwnerPage.delete(evt.frameId);\n }\n },\n );\n\n session.on<Protocol.Page.FrameNavigatedEvent>(\n \"Page.frameNavigated\",\n (evt) => {\n owner.onFrameNavigated(evt.frame, session);\n },\n );\n\n session.on<Protocol.Page.NavigatedWithinDocumentEvent>(\n \"Page.navigatedWithinDocument\",\n (evt) => {\n owner.onNavigatedWithinDocument(evt.frameId, evt.url, session);\n },\n );\n\n // Observe window.open to anticipate default page changes\n session.on<Protocol.Page.WindowOpenEvent>(\"Page.windowOpen\", () => {\n this._notePopupSignal();\n });\n }\n\n /**\n * Register that a session belongs to a Page (used by event routing).\n */\n private wireSessionToOwnerPage(sessionId: SessionId, owner: Page): void {\n this.sessionOwnerPage.set(sessionId, owner);\n }\n\n /**\n * Utility: reverse-lookup the top-level target id that owns a given Page.\n */\n private findTargetIdByPage(page: Page): TargetId | undefined {\n for (const [tid, p] of this.pagesByTarget) {\n if (p === page) return tid;\n }\n return undefined;\n }\n\n private _notePopupSignal(): void {\n this._lastPopupSignalAt = Date.now();\n }\n\n /**\n * Await the current active page, waiting briefly if a popup/open was just triggered.\n * Normal path returns immediately; popup path waits up to timeoutMs for the new page.\n */\n async awaitActivePage(timeoutMs?: number): Promise<Page> {\n const defaultTimeout = this.env === \"BROWSERBASE\" ? 4000 : 2000;\n timeoutMs = timeoutMs ?? defaultTimeout;\n // If a popup was just triggered, Chrome (especially on Browserbase)\n // may briefly pause new targets at document start (\"waiting for debugger\").\n const recentWindowMs = this.env === \"BROWSERBASE\" ? 1000 : 300;\n const now = Date.now();\n const hasRecentPopup = now - this._lastPopupSignalAt <= recentWindowMs;\n\n const immediate = this.activePage();\n if (!hasRecentPopup && immediate) return immediate;\n\n const deadline = now + timeoutMs;\n while (Date.now() < deadline) {\n // Prefer most-recent by createdAt\n let newestTid: TargetId | undefined;\n let newestTs = -1;\n for (const [tid] of this.pagesByTarget) {\n const ts = this.createdAtByTarget.get(tid) ?? 0;\n if (ts > newestTs) {\n newestTs = ts;\n newestTid = tid;\n }\n }\n if (newestTid) {\n const p = this.pagesByTarget.get(newestTid);\n if (p && newestTs >= this._lastPopupSignalAt) return p;\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n if (immediate) return immediate;\n throw new PageNotFoundError(\"awaitActivePage: no page available\");\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/context.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/context.ts\nimport type { Protocol } from \"devtools-protocol\";\nimport { v3Logger } from \"../logger.js\";\nimport { CdpConnection, CDPSessionLike } from \"./cdp.js\";\nimport { Page } from \"./page.js\";\nimport { installV3PiercerIntoSession } from \"./piercer.js\";\nimport { v3ScriptContent } from \"../dom/build/scriptV3Content.js\";\nimport { executionContexts } from \"./executionContextRegistry.js\";\nimport type { StagehandAPIClient } from \"../api.js\";\nimport { LocalBrowserLaunchOptions } from \"../types/public/index.js\";\nimport { InitScriptSource } from \"../types/private/index.js\";\nimport { normalizeInitScriptSource } from \"./initScripts.js\";\nimport { TimeoutError, PageNotFoundError } from \"../types/public/sdkErrors.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"../timeoutConfig.js\";\n\ntype TargetId = string;\ntype SessionId = string;\n\ntype TargetType = \"page\" | \"iframe\" | string;\n\nfunction isTopLevelPage(info: Protocol.Target.TargetInfo): boolean {\n const ti = info as unknown as { subtype?: string };\n return info.type === \"page\" && ti.subtype !== \"iframe\";\n}\n\n/**\n * V3Context\n *\n * Owns the root CDP connection and wires Target/Page events into Page.\n * Maintains one Page per top-level target, adopts OOPIF child sessions into the owner Page,\n * and tracks target→page and (root) frame→target mappings for lookups.\n *\n * IMPORTANT: FrameId → session ownership is managed inside Page (via its FrameRegistry).\n * Context never “guesses” owners; it simply forwards events (with the emitting session)\n * so Page can record the correct owner at event time.\n */\nexport class V3Context {\n private constructor(\n readonly conn: CdpConnection,\n private readonly env: \"LOCAL\" | \"BROWSERBASE\" = \"LOCAL\",\n private readonly apiClient: StagehandAPIClient | null = null,\n private readonly localBrowserLaunchOptions: LocalBrowserLaunchOptions | null = null,\n ) {}\n\n private readonly _piercerInstalled = new Set<string>();\n // Timestamp for most recent popup/open signal\n private _lastPopupSignalAt = 0;\n private readonly _targetSessionListeners = new Set<SessionId>();\n\n private readonly _sessionInit = new Set<SessionId>();\n private pagesByTarget = new Map<TargetId, Page>();\n private mainFrameToTarget = new Map<string, TargetId>();\n private sessionOwnerPage = new Map<SessionId, Page>();\n private frameOwnerPage = new Map<string, Page>();\n private pendingOopifByMainFrame = new Map<string, SessionId>();\n private createdAtByTarget = new Map<TargetId, number>();\n private typeByTarget = new Map<TargetId, TargetType>();\n private _pageOrder: TargetId[] = [];\n private pendingCreatedTargetUrl = new Map<TargetId, string>();\n private readonly initScripts: string[] = [];\n\n private installTargetSessionListeners(session: CDPSessionLike): void {\n const sessionId = session.id;\n if (!sessionId) return;\n if (this._targetSessionListeners.has(sessionId)) return;\n this._targetSessionListeners.add(sessionId);\n\n session.on<Protocol.Target.AttachedToTargetEvent>(\n \"Target.attachedToTarget\",\n (evt) => {\n void this.onAttachedToTarget(evt.targetInfo, evt.sessionId);\n },\n );\n session.on<Protocol.Target.DetachedFromTargetEvent>(\n \"Target.detachedFromTarget\",\n (evt) => {\n this.onDetachedFromTarget(evt.sessionId, evt.targetId ?? null);\n },\n );\n session.on<Protocol.Target.TargetDestroyedEvent>(\n \"Target.targetDestroyed\",\n (evt) => {\n this.cleanupByTarget(evt.targetId);\n },\n );\n }\n\n /**\n * Create a Context for a given CDP websocket URL and bootstrap target wiring.\n */\n static async create(\n wsUrl: string,\n opts?: {\n env?: \"LOCAL\" | \"BROWSERBASE\";\n apiClient?: StagehandAPIClient | null;\n localBrowserLaunchOptions?: LocalBrowserLaunchOptions | null;\n },\n ): Promise<V3Context> {\n const connectTask = async () => {\n const conn = await CdpConnection.connect(wsUrl);\n const ctx = new V3Context(\n conn,\n opts?.env ?? \"LOCAL\",\n opts?.apiClient ?? null,\n opts?.localBrowserLaunchOptions ?? null,\n );\n await ctx.bootstrap();\n await ctx.waitForFirstTopLevelPage(5000);\n return ctx;\n };\n\n const cdpTimeoutMs =\n opts?.env === \"BROWSERBASE\"\n ? getEnvTimeoutMs(\"BROWSERBASE_CDP_CONNECT_MAX_MS\")\n : undefined;\n\n if (cdpTimeoutMs) {\n let timedOut = false;\n const connectPromise = connectTask();\n const guarded = withTimeout(\n connectPromise,\n cdpTimeoutMs,\n \"Browserbase CDP connect\",\n ).catch((err) => {\n timedOut = true;\n throw err;\n });\n connectPromise\n .then((ctx) => {\n if (timedOut) void ctx.close();\n })\n .catch(() => {});\n return await guarded;\n }\n\n return await connectTask();\n }\n\n /**\n * Wait until at least one top-level Page has been created and registered.\n * We poll internal maps that bootstrap/onAttachedToTarget populate.\n */\n private async waitForFirstTopLevelPage(timeoutMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n // A top-level Page is present if typeByTarget has an entry \"page\"\n // and pagesByTarget has the corresponding Page object.\n for (const [tid, ttype] of this.typeByTarget) {\n if (ttype === \"page\") {\n const p = this.pagesByTarget.get(tid);\n if (p) return;\n }\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n throw new TimeoutError(\n \"waitForFirstTopLevelPage (no top-level Page)\",\n timeoutMs,\n );\n }\n\n private async waitForInitialTopLevelTargets(\n targetIds: TargetId[],\n timeoutMs = 3000,\n ): Promise<void> {\n if (!targetIds.length) return;\n const pending = new Set(targetIds);\n const deadline = Date.now() + timeoutMs;\n while (pending.size && Date.now() < deadline) {\n for (const tid of Array.from(pending)) {\n if (this.pagesByTarget.has(tid)) {\n pending.delete(tid);\n }\n }\n if (!pending.size) return;\n await new Promise((r) => setTimeout(r, 25));\n }\n if (pending.size) {\n v3Logger({\n category: \"ctx\",\n message: \"Timed out waiting for existing top-level targets to attach\",\n level: 2,\n auxiliary: {\n remainingTargets: {\n value: JSON.stringify(Array.from(pending)),\n type: \"object\",\n },\n },\n });\n }\n }\n\n private async ensurePiercer(session: CDPSessionLike): Promise<boolean> {\n const id = session.id ?? \"\";\n if (this._piercerInstalled.has(id)) return true;\n\n const installed = await installV3PiercerIntoSession(session);\n if (installed) {\n this._piercerInstalled.add(id);\n }\n return installed;\n }\n\n /** Mark a page target as the most-recent one (active). */\n private _pushActive(tid: TargetId): void {\n // remove prior entry if any\n const i = this._pageOrder.indexOf(tid);\n if (i !== -1) this._pageOrder.splice(i, 1);\n this._pageOrder.push(tid);\n }\n\n /** Remove a page target from the recency list (used on close). */\n private _removeFromOrder(tid: TargetId): void {\n const i = this._pageOrder.indexOf(tid);\n if (i !== -1) this._pageOrder.splice(i, 1);\n }\n\n /** Return the current active Page (most-recent page that still exists). */\n public activePage(): Page | undefined {\n // prune any stale ids from the tail\n for (let i = this._pageOrder.length - 1; i >= 0; i--) {\n const tid = this._pageOrder[i]!;\n const p = this.pagesByTarget.get(tid);\n if (p) return p;\n // stale — remove and continue\n this._pageOrder.splice(i, 1);\n }\n // fallback: pick the newest by createdAt if order is empty\n let newestTid: TargetId | undefined;\n let newestTs = -1;\n for (const [tid] of this.pagesByTarget) {\n const ts = this.createdAtByTarget.get(tid) ?? 0;\n if (ts > newestTs) {\n newestTs = ts;\n newestTid = tid;\n }\n }\n return newestTid ? this.pagesByTarget.get(newestTid) : undefined;\n }\n\n /** Explicitly mark a known Page as the most-recent active page (and focus it). */\n public setActivePage(page: Page): void {\n let targetId = page.targetId();\n if (this.pagesByTarget.get(targetId) !== page) {\n const lookup = this.findTargetIdByPage(page);\n if (!lookup) {\n v3Logger({\n category: \"ctx\",\n message: \"setActivePage called with unknown Page\",\n level: 2,\n auxiliary: {\n targetId: { value: String(targetId), type: \"string\" },\n },\n });\n return;\n }\n targetId = lookup;\n }\n\n this._pushActive(targetId);\n\n // Bring the tab to the foreground in headful Chrome (best effort).\n void this.conn.send(\"Target.activateTarget\", { targetId }).catch(() => {});\n }\n\n public async addInitScript<Arg>(\n script: InitScriptSource<Arg>,\n arg?: Arg,\n ): Promise<void> {\n const source = await normalizeInitScriptSource(script, arg);\n if (this.initScripts.includes(source)) return;\n this.initScripts.push(source);\n const pages = this.pages();\n await Promise.all(pages.map((page) => page.registerInitScript(source)));\n }\n\n /**\n * Return top-level `Page`s (oldest → newest). OOPIF targets are not included.\n */\n pages(): Page[] {\n const rows: Array<{ tid: TargetId; page: Page; created: number }> = [];\n for (const [tid, page] of this.pagesByTarget) {\n if (this.typeByTarget.get(tid) === \"page\") {\n rows.push({ tid, page, created: this.createdAtByTarget.get(tid) ?? 0 });\n }\n }\n rows.sort((a, b) => a.created - b.created);\n return rows.map((r) => r.page);\n }\n\n private async applyInitScriptsToPage(\n page: Page,\n opts?: { seedOnly?: boolean },\n ): Promise<void> {\n if (opts?.seedOnly) {\n for (const source of this.initScripts) {\n page.seedInitScript(source);\n }\n return;\n }\n for (const source of this.initScripts) {\n await page.registerInitScript(source);\n }\n }\n\n /**\n * Resolve an owning `Page` by the **top-level main frame id**.\n * Note: child (OOPIF) roots are intentionally not present in this mapping.\n */\n resolvePageByMainFrameId(frameId: string): Page | undefined {\n const targetId = this.mainFrameToTarget.get(frameId);\n return targetId ? this.pagesByTarget.get(targetId) : undefined;\n }\n\n /**\n * Serialize the full frame tree for a given top-level main frame id.\n */\n async getFullFrameTreeByMainFrameId(\n rootMainFrameId: string,\n ): Promise<Protocol.Page.FrameTree> {\n const owner = this.resolvePageByMainFrameId(rootMainFrameId);\n if (!owner) throw new PageNotFoundError(`mainFrameId=${rootMainFrameId}`);\n return owner.asProtocolFrameTree(rootMainFrameId);\n }\n\n /**\n * Create a new top-level page (tab) with the given URL and return its Page object.\n * Waits until the target is attached and registered.\n */\n public async newPage(url = \"about:blank\"): Promise<Page> {\n const targetUrl = String(url ?? \"about:blank\");\n const { targetId } = await this.conn.send<{ targetId: string }>(\n \"Target.createTarget\",\n // Create at about:blank so init scripts can install before first real navigation.\n { url: \"about:blank\" },\n );\n this.pendingCreatedTargetUrl.set(targetId, \"about:blank\");\n // Best-effort bring-to-front\n await this.conn.send(\"Target.activateTarget\", { targetId }).catch(() => {});\n\n const deadline = Date.now() + 5000;\n while (Date.now() < deadline) {\n const page = this.pagesByTarget.get(targetId);\n if (page) {\n // we created at about:blank; navigate only after attach so init scripts run\n // on the first real document. Fire-and-forget so newPage() resolves on attach.\n if (targetUrl !== \"about:blank\") {\n // Seed requested URL into the page cache before navigation events arrive.\n page.seedCurrentUrl(targetUrl);\n void page\n .sendCDP(\"Page.navigate\", { url: targetUrl })\n .catch(() => {});\n }\n return page;\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n throw new TimeoutError(`newPage: target not attached (${targetId})`, 5000);\n }\n\n /**\n * Close CDP and clear all mappings. Best-effort cleanup.\n */\n async close(): Promise<void> {\n await this.conn.close();\n this.pagesByTarget.clear();\n this.mainFrameToTarget.clear();\n this.sessionOwnerPage.clear();\n this.frameOwnerPage.clear();\n this.pendingOopifByMainFrame.clear();\n this.createdAtByTarget.clear();\n this.typeByTarget.clear();\n this.pendingCreatedTargetUrl.clear();\n }\n\n /**\n * Bootstrap target lifecycle:\n * - Attach to existing targets.\n * - Handle auto-attach events.\n * - Clean up on detach/destroy.\n */\n private async bootstrap(): Promise<void> {\n // Live attach via auto-attach (normal path)\n this.conn.on<Protocol.Target.AttachedToTargetEvent>(\n \"Target.attachedToTarget\",\n async (evt) => {\n await this.onAttachedToTarget(evt.targetInfo, evt.sessionId);\n },\n );\n\n // Live detach (clean up session from owner page & frame graph)\n this.conn.on<Protocol.Target.DetachedFromTargetEvent>(\n \"Target.detachedFromTarget\",\n (evt) => {\n this.onDetachedFromTarget(evt.sessionId, evt.targetId ?? null);\n },\n );\n\n // Destroyed targets (fallback cleanup by targetId)\n this.conn.on<Protocol.Target.TargetDestroyedEvent>(\n \"Target.targetDestroyed\",\n (evt) => {\n this.cleanupByTarget(evt.targetId);\n },\n );\n\n this.conn.on<Protocol.Target.TargetCreatedEvent>(\n \"Target.targetCreated\",\n async (evt) => {\n const info = evt.targetInfo;\n // Note popups to help activePage settle\n const ti = info;\n if (info.type === \"page\" && (ti?.openerId || ti?.openerFrameId)) {\n this._notePopupSignal();\n }\n },\n );\n\n // Only enable auto-attach after listeners are ready so replayed targets are captured.\n await this.conn.enableAutoAttach();\n\n const targets = await this.conn.getTargets();\n for (const t of targets) {\n if (t.attached) continue; // auto-attach already handled this target\n try {\n await this.conn.attachToTarget(t.targetId);\n } catch {\n // ignore attach race\n }\n }\n\n const topLevelTargetIds = targets\n .filter((t) => isTopLevelPage(t))\n .map((t) => t.targetId);\n await this.waitForInitialTopLevelTargets(topLevelTargetIds);\n }\n\n /**\n * Handle a newly attached target (top-level or potential OOPIF):\n * - Enable Page domain and lifecycle events.\n * - If top-level → create Page, wire listeners, resume.\n * - Else → probe child root frame id via `Page.getFrameTree` and adopt immediately\n * if the parent is known; otherwise stage until parent `frameAttached`.\n * - Resume the target only after listeners are wired.\n */\n private async onAttachedToTarget(\n info: Protocol.Target.TargetInfo,\n sessionId: SessionId,\n ): Promise<void> {\n // Workers are ignored by Stagehand, but with waitForDebuggerOnStart enabled\n // they still need to be resumed so we don't leave them paused.\n if (\n info.type === \"worker\" ||\n info.type === \"service_worker\" ||\n info.type === \"shared_worker\"\n ) {\n const session = this.conn.getSession(sessionId);\n if (session) {\n await session.send(\"Runtime.runIfWaitingForDebugger\").catch(() => {});\n }\n return;\n }\n\n const session = this.conn.getSession(sessionId);\n if (!session) return;\n\n // Init guard\n if (this._sessionInit.has(sessionId)) return;\n this._sessionInit.add(sessionId);\n\n this.installTargetSessionListeners(session);\n\n // Register for Runtime events before enabling it so we don't miss initial contexts.\n executionContexts.attachSession(session);\n\n // Ensure we only resume once even if multiple code paths hit finally.\n let resumed = false;\n const resume = async (): Promise<void> => {\n if (resumed) return;\n resumed = true;\n // waitForDebuggerOnStart pauses new targets; resume once we've done\n // any \"must happen before first document\" work.\n await session.send(\"Runtime.runIfWaitingForDebugger\").catch(() => {});\n };\n\n // Install any context-level init scripts as early as possible on this session.\n // If this throws, we still resume the target but avoid re-installing later.\n let scriptsInstalled = true;\n let piercerPreRegistered = false;\n const installPromises: Array<Promise<unknown>> = [];\n try {\n const send = (method: string, params?: object) =>\n session.send(method, params).catch(() => {});\n // make sure init scripts land before any subframe work.\n installPromises.push(send(\"Page.enable\"));\n installPromises.push(send(\"Runtime.enable\"));\n installPromises.push(\n session\n .send(\"Target.setAutoAttach\", {\n autoAttach: true,\n waitForDebuggerOnStart: true,\n flatten: true,\n })\n .catch(() => {}),\n );\n // Send init scripts only after auto-attach has been issued.\n if (this.initScripts.length) {\n for (const source of this.initScripts) {\n installPromises.push(\n session.send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source,\n runImmediately: true,\n }),\n );\n }\n }\n // register piercer (shadow-DOM hook) before resume so it runs\n // before page scripts\n installPromises.push(\n session\n .send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source: v3ScriptContent,\n runImmediately: true,\n })\n .then(() => {\n piercerPreRegistered = true;\n })\n .catch(() => {}),\n );\n installPromises.push(resume());\n } catch {\n scriptsInstalled = false;\n }\n if (installPromises.length) {\n const results = await Promise.allSettled(installPromises);\n if (results.some((r) => r.status === \"rejected\")) {\n scriptsInstalled = false;\n }\n }\n\n // Only mark the piercer as installed when the pre-registration actually\n // succeeded. This lets ensurePiercer() short-circuit (avoiding sequential\n // CDP round-trips that delay Page.create / installFrameEventBridges and\n // cause same-process iframe frame-events to be missed) while still falling\n // back to the full install path when registration failed.\n if (piercerPreRegistered) {\n this._piercerInstalled.add(sessionId);\n }\n\n try {\n const piercerReady = await this.ensurePiercer(session);\n if (!piercerReady) return;\n\n await session\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n\n // Top-level handling\n if (isTopLevelPage(info)) {\n const page = await Page.create(\n this.conn,\n session,\n info.targetId,\n this.apiClient,\n this.localBrowserLaunchOptions,\n this.env === \"BROWSERBASE\",\n );\n this.wireSessionToOwnerPage(sessionId, page);\n this.pagesByTarget.set(info.targetId, page);\n this.mainFrameToTarget.set(page.mainFrameId(), info.targetId);\n this.sessionOwnerPage.set(sessionId, page);\n this.frameOwnerPage.set(page.mainFrameId(), page);\n this.typeByTarget.set(info.targetId, \"page\");\n if (!this.createdAtByTarget.has(info.targetId)) {\n this.createdAtByTarget.set(info.targetId, Date.now());\n }\n const pendingSeedUrl = this.pendingCreatedTargetUrl.get(info.targetId);\n this.pendingCreatedTargetUrl.delete(info.targetId);\n page.seedCurrentUrl(pendingSeedUrl ?? info.url ?? \"\");\n this._pushActive(info.targetId);\n this.installFrameEventBridges(sessionId, page);\n // If we already installed scripts at the session level, only seed the\n // Page's registry to avoid double-installing DOMContentLoaded handlers.\n await this.applyInitScriptsToPage(page, {\n seedOnly: scriptsInstalled,\n });\n\n return;\n }\n\n // Child (iframe / OOPIF)\n try {\n const { frameTree } =\n await session.send<Protocol.Page.GetFrameTreeResponse>(\n \"Page.getFrameTree\",\n );\n const childMainId = frameTree.frame.id;\n\n // Try to find owner Page now (it may already have the node in its tree)\n let owner = this.frameOwnerPage.get(childMainId);\n if (!owner) {\n for (const p of this.pagesByTarget.values()) {\n const tree = p.asProtocolFrameTree(p.mainFrameId());\n const has = (function find(n: Protocol.Page.FrameTree): boolean {\n if (n.frame.id === childMainId) return true;\n for (const c of n.childFrames ?? []) if (find(c)) return true;\n return false;\n })(tree);\n if (has) {\n owner = p;\n break;\n }\n }\n }\n\n if (owner) {\n owner.adoptOopifSession(session, childMainId);\n this.sessionOwnerPage.set(sessionId, owner);\n this.installFrameEventBridges(sessionId, owner);\n // Prime the execution-context registry so later lookups succeed even if\n // the frame navigates before we issue a command.\n void executionContexts\n .waitForMainWorld(session, childMainId)\n .catch(() => {});\n } else {\n this.pendingOopifByMainFrame.set(childMainId, sessionId);\n }\n } catch {\n // page.getFrameTree failed. Most likely was an ad iframe\n // that opened & closed before we could attach. ignore\n }\n } finally {\n await resume();\n }\n }\n\n /**\n * Detach handler:\n * - Remove child session ownership and prune its subtree.\n * - If a top-level target, cleanup its `Page` and mappings.\n * - Drop any staged child for this session.\n */\n private onDetachedFromTarget(\n sessionId: SessionId,\n targetId: string | null,\n ): void {\n const owner = this.sessionOwnerPage.get(sessionId);\n if (owner) {\n owner.detachOopifSession(sessionId);\n this.sessionOwnerPage.delete(sessionId);\n }\n\n if (targetId && this.pagesByTarget.has(targetId)) {\n this.cleanupByTarget(targetId);\n }\n\n for (const [fid, sid] of Array.from(\n this.pendingOopifByMainFrame.entries(),\n )) {\n if (sid === sessionId) this.pendingOopifByMainFrame.delete(fid);\n }\n\n this._targetSessionListeners.delete(sessionId);\n this._sessionInit.delete(sessionId);\n this._piercerInstalled.delete(sessionId);\n }\n\n /**\n * Cleanup a top-level Page by target id, removing its root and staged children.\n */\n private cleanupByTarget(targetId: TargetId): void {\n const page = this.pagesByTarget.get(targetId);\n if (!page) return;\n\n const mainId = page.mainFrameId();\n this.mainFrameToTarget.delete(mainId);\n this.frameOwnerPage.delete(mainId);\n\n for (const [sid, p] of Array.from(this.sessionOwnerPage.entries())) {\n if (p === page) this.sessionOwnerPage.delete(sid);\n }\n\n for (const [fid] of Array.from(this.pendingOopifByMainFrame.entries())) {\n const owner = this.frameOwnerPage.get(fid);\n if (!owner || owner === page) this.pendingOopifByMainFrame.delete(fid);\n }\n\n this._removeFromOrder(targetId);\n this.pagesByTarget.delete(targetId);\n this.createdAtByTarget.delete(targetId);\n this.typeByTarget.delete(targetId);\n this.pendingCreatedTargetUrl.delete(targetId);\n }\n\n /**\n * Wire Page-domain frame events for a session into the owning Page & mappings.\n * We forward the *emitting session* with every event so Page can stamp ownership precisely.\n */\n private installFrameEventBridges(sessionId: SessionId, owner: Page): void {\n const session = this.conn.getSession(sessionId);\n if (!session) return;\n\n session.on<Protocol.Page.FrameAttachedEvent>(\n \"Page.frameAttached\",\n (evt) => {\n const { frameId, parentFrameId } = evt;\n\n owner.onFrameAttached(frameId, parentFrameId ?? null, session);\n\n // If we were waiting for this id (OOPIF child), adopt now.\n const pendingChildSessionId = this.pendingOopifByMainFrame.get(frameId);\n if (pendingChildSessionId) {\n const child = this.conn.getSession(pendingChildSessionId);\n if (child) {\n owner.adoptOopifSession(child, frameId);\n this.sessionOwnerPage.set(child.id, owner);\n // Wire bridges for the child so its Page events keep flowing.\n this.installFrameEventBridges(pendingChildSessionId, owner);\n }\n this.pendingOopifByMainFrame.delete(frameId);\n }\n\n // Track Page ownership for quick reverse lookups (debug helpers).\n this.frameOwnerPage.set(frameId, owner);\n\n // Root handoff: keep mainFrameToTarget aligned for the page\n if (!parentFrameId) {\n const newRoot = owner.mainFrameId();\n const topTargetId = this.findTargetIdByPage(owner);\n if (topTargetId) {\n this.mainFrameToTarget.set(newRoot, topTargetId);\n }\n this.frameOwnerPage.set(newRoot, owner);\n }\n },\n );\n\n session.on<Protocol.Page.FrameDetachedEvent>(\n \"Page.frameDetached\",\n (evt) => {\n owner.onFrameDetached(evt.frameId, evt.reason ?? \"remove\");\n if (evt.reason !== \"swap\") {\n this.frameOwnerPage.delete(evt.frameId);\n }\n },\n );\n\n session.on<Protocol.Page.FrameNavigatedEvent>(\n \"Page.frameNavigated\",\n (evt) => {\n owner.onFrameNavigated(evt.frame, session);\n },\n );\n\n session.on<Protocol.Page.NavigatedWithinDocumentEvent>(\n \"Page.navigatedWithinDocument\",\n (evt) => {\n owner.onNavigatedWithinDocument(evt.frameId, evt.url, session);\n },\n );\n\n // Observe window.open to anticipate default page changes\n session.on<Protocol.Page.WindowOpenEvent>(\"Page.windowOpen\", () => {\n this._notePopupSignal();\n });\n }\n\n /**\n * Register that a session belongs to a Page (used by event routing).\n */\n private wireSessionToOwnerPage(sessionId: SessionId, owner: Page): void {\n this.sessionOwnerPage.set(sessionId, owner);\n }\n\n /**\n * Utility: reverse-lookup the top-level target id that owns a given Page.\n */\n private findTargetIdByPage(page: Page): TargetId | undefined {\n for (const [tid, p] of this.pagesByTarget) {\n if (p === page) return tid;\n }\n return undefined;\n }\n\n private _notePopupSignal(): void {\n this._lastPopupSignalAt = Date.now();\n }\n\n /**\n * Await the current active page, waiting briefly if a popup/open was just triggered.\n * Normal path returns immediately; popup path waits up to timeoutMs for the new page.\n */\n async awaitActivePage(timeoutMs?: number): Promise<Page> {\n const defaultTimeout = this.env === \"BROWSERBASE\" ? 4000 : 2000;\n timeoutMs = timeoutMs ?? defaultTimeout;\n // If a popup was just triggered, Chrome (especially on Browserbase)\n // may briefly pause new targets at document start (\"waiting for debugger\").\n const recentWindowMs = this.env === \"BROWSERBASE\" ? 1000 : 300;\n const now = Date.now();\n const hasRecentPopup = now - this._lastPopupSignalAt <= recentWindowMs;\n\n const immediate = this.activePage();\n if (!hasRecentPopup && immediate) return immediate;\n\n const deadline = now + timeoutMs;\n while (Date.now() < deadline) {\n // Prefer most-recent by createdAt\n let newestTid: TargetId | undefined;\n let newestTs = -1;\n for (const [tid] of this.pagesByTarget) {\n const ts = this.createdAtByTarget.get(tid) ?? 0;\n if (ts > newestTs) {\n newestTs = ts;\n newestTid = tid;\n }\n }\n if (newestTid) {\n const p = this.pagesByTarget.get(newestTid);\n if (p && newestTs >= this._lastPopupSignalAt) return p;\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n if (immediate) return immediate;\n throw new PageNotFoundError(\"awaitActivePage: no page available\");\n }\n}\n"]}
|
|
@@ -318,8 +318,8 @@ export class Locator {
|
|
|
318
318
|
if (!box.model)
|
|
319
319
|
throw new ElementNotVisibleError(this.selector);
|
|
320
320
|
const { cx, cy } = this.centerFromBoxContent(box.model.content);
|
|
321
|
-
// Dispatch
|
|
322
|
-
//
|
|
321
|
+
// Dispatch input (from the same session) without waiting between events.
|
|
322
|
+
// This keeps multi-clicks within tight thresholds on remote browsers.
|
|
323
323
|
const dispatches = [];
|
|
324
324
|
dispatches.push(session.send("Input.dispatchMouseEvent", {
|
|
325
325
|
type: "mouseMoved",
|