@browserbasehq/orca 3.1.0-patch.3 → 3.2.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.
- package/dist/cjs/cli.js +2 -210
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +2 -25025
- package/dist/cjs/lib/inference.js +335 -0
- package/dist/cjs/lib/inference.js.map +1 -0
- package/dist/cjs/lib/inferenceLogUtils.js +99 -0
- package/dist/cjs/lib/inferenceLogUtils.js.map +1 -0
- package/dist/cjs/lib/logger.js +331 -0
- package/dist/cjs/lib/logger.js.map +1 -0
- package/dist/cjs/lib/modelUtils.d.ts +1 -0
- package/dist/cjs/lib/modelUtils.js +53 -0
- package/dist/cjs/lib/modelUtils.js.map +1 -0
- package/dist/cjs/lib/prompt.d.ts +3 -2
- package/dist/cjs/lib/prompt.js +245 -0
- package/dist/cjs/lib/prompt.js.map +1 -0
- package/dist/cjs/lib/utils.js +670 -0
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/cjs/lib/v3/agent/AgentClient.js +21 -0
- package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.js +81 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +844 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +803 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +777 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +622 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +3 -1
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +212 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/tools/act.js +75 -0
- package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
- package/dist/cjs/lib/v3/agent/tools/ariaTree.js +73 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/click.js +100 -0
- package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.js +72 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +101 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/tools/extract.js +110 -0
- package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +158 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +8 -2
- package/dist/cjs/lib/v3/agent/tools/fillform.js +90 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/goto.js +35 -0
- package/dist/cjs/lib/v3/agent/tools/goto.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +11 -1
- package/dist/cjs/lib/v3/agent/tools/index.js +78 -0
- package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/keys.js +64 -0
- package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/navback.js +27 -0
- package/dist/cjs/lib/v3/agent/tools/navback.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.js +47 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.js +159 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/search.js +77 -0
- package/dist/cjs/lib/v3/agent/tools/search.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/think.js +28 -0
- package/dist/cjs/lib/v3/agent/tools/think.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/type.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/tools/type.js +111 -0
- package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/wait.js +63 -0
- package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.js +103 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js +33 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.js +65 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.js +150 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +108 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.js +212 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.js +167 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.js +29 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.js +90 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/variables.d.ts +21 -0
- package/dist/cjs/lib/v3/agent/utils/variables.js +54 -0
- package/dist/cjs/lib/v3/agent/utils/variables.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.js +22 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.js.map +1 -0
- package/dist/cjs/lib/v3/api.d.ts +23 -5
- package/dist/cjs/lib/v3/api.js +589 -0
- package/dist/cjs/lib/v3/api.js.map +1 -0
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
- package/dist/cjs/lib/v3/cache/ActCache.js +280 -0
- package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -0
- package/dist/cjs/lib/v3/cache/AgentCache.d.ts +1 -0
- package/dist/cjs/lib/v3/cache/AgentCache.js +651 -0
- package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.js +105 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.js.map +1 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.js +52 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.js.map +1 -0
- package/dist/cjs/lib/v3/cache/utils.js +44 -0
- package/dist/cjs/lib/v3/cache/utils.js.map +1 -0
- package/dist/cjs/lib/v3/cli.js +15 -0
- package/dist/cjs/lib/v3/cli.js.map +1 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.js +124 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.js.map +1 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.js +23 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.js.map +1 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js +59 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js.map +1 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.js +5 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.js.map +1 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.js +11 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.js +5 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.js.map +1 -0
- package/dist/cjs/lib/v3/dom/index.js +18 -0
- package/dist/cjs/lib/v3/dom/index.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.js +278 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.js +21 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.js +474 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.js +289 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.js +286 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.js +381 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.js.map +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.js +202 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.js +5 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.js.map +1 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.js +93 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.js.map +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.js +5 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.js.map +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.js +43 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.js.map +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.js +6 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.js.map +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.js +85 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.js.map +1 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.js +107 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.js.map +1 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.js +224 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.js.map +1 -0
- package/dist/cjs/lib/v3/flowLogger.js +881 -0
- package/dist/cjs/lib/v3/flowLogger.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/actHandler.d.ts +2 -1
- package/dist/cjs/lib/v3/handlers/actHandler.js +344 -0
- package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.js +144 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +604 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.js +17 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.js +159 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +462 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +532 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -0
- package/dist/cjs/lib/v3/index.d.ts +143 -0
- package/dist/cjs/lib/v3/index.js +119 -0
- package/dist/cjs/lib/v3/index.js.map +1 -0
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
- package/dist/cjs/lib/v3/launch/browserbase.js +47 -0
- package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -0
- package/dist/cjs/lib/v3/launch/local.js +104 -0
- package/dist/cjs/lib/v3/launch/local.js.map +1 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.js +246 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.js.map +1 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.js +242 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.js.map +1 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.js +373 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.js.map +1 -0
- package/dist/cjs/lib/v3/llm/GroqClient.js +243 -0
- package/dist/cjs/lib/v3/llm/GroqClient.js.map +1 -0
- package/dist/cjs/lib/v3/llm/LLMClient.js +27 -0
- package/dist/cjs/lib/v3/llm/LLMClient.js.map +1 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.js +194 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.js +336 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.js.map +1 -0
- package/dist/cjs/lib/v3/llm/aisdk.js +355 -0
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -0
- package/dist/cjs/lib/v3/logger.js +102 -0
- package/dist/cjs/lib/v3/logger.js.map +1 -0
- package/dist/cjs/lib/v3/mcp/connection.d.ts +2 -0
- package/dist/cjs/lib/v3/mcp/connection.js +56 -0
- package/dist/cjs/lib/v3/mcp/connection.js.map +1 -0
- package/dist/cjs/lib/v3/mcp/utils.js +40 -0
- package/dist/cjs/lib/v3/mcp/utils.js.map +1 -0
- package/dist/cjs/lib/v3/runtimePaths.d.ts +6 -0
- package/dist/cjs/lib/v3/runtimePaths.js +119 -0
- package/dist/cjs/lib/v3/runtimePaths.js.map +1 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.js +36 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.js.map +1 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.js +193 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.js +95 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.js.map +1 -0
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
- package/dist/cjs/lib/v3/timeoutConfig.js +36 -0
- package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/agent.js +3 -0
- package/dist/cjs/lib/v3/types/private/agent.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/api.js +3 -0
- package/dist/cjs/lib/v3/types/private/api.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/cache.d.ts +3 -0
- package/dist/cjs/lib/v3/types/private/cache.js +3 -0
- package/dist/cjs/lib/v3/types/private/cache.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/evaluator.js +3 -0
- package/dist/cjs/lib/v3/types/private/evaluator.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/handlers.d.ts +2 -1
- package/dist/cjs/lib/v3/types/private/handlers.js +19 -0
- package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/index.js +24 -0
- package/dist/cjs/lib/v3/types/private/index.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/internal.js +3 -0
- package/dist/cjs/lib/v3/types/private/internal.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/locator.js +3 -0
- package/dist/cjs/lib/v3/types/private/locator.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/network.js +6 -0
- package/dist/cjs/lib/v3/types/private/network.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
- package/dist/cjs/lib/v3/types/private/shutdown.js +6 -0
- package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.js +28 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.js.map +1 -0
- package/dist/cjs/lib/v3/types/private/snapshot.js +3 -0
- package/dist/cjs/lib/v3/types/private/snapshot.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +60 -2
- package/dist/cjs/lib/v3/types/public/agent.js +18 -0
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +17 -0
- package/dist/cjs/lib/v3/types/public/api.js +922 -0
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.js +41 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/context.d.ts +32 -0
- package/dist/cjs/lib/v3/types/public/context.js +3 -0
- package/dist/cjs/lib/v3/types/public/context.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +1 -0
- package/dist/cjs/lib/v3/types/public/index.js +56 -0
- package/dist/cjs/lib/v3/types/public/index.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/locator.js +3 -0
- package/dist/cjs/lib/v3/types/public/locator.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/logs.js +16 -0
- package/dist/cjs/lib/v3/types/public/logs.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/methods.d.ts +33 -2
- package/dist/cjs/lib/v3/types/public/methods.js +18 -0
- package/dist/cjs/lib/v3/types/public/methods.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/metrics.js +3 -0
- package/dist/cjs/lib/v3/types/public/metrics.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/model.d.ts +4 -2
- package/dist/cjs/lib/v3/types/public/model.js +3 -0
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
- package/dist/cjs/lib/v3/types/public/options.js +7 -0
- package/dist/cjs/lib/v3/types/public/options.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/page.js +8 -0
- package/dist/cjs/lib/v3/types/public/page.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.js +3 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.js.map +1 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +13 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.js +390 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js +204 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.js +124 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js +345 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +132 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.js +285 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.js +226 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.js +12 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.js +26 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +143 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.js +110 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.js +15 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +6 -1
- package/dist/cjs/lib/v3/understudy/cdp.js +317 -0
- package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.js +70 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +34 -0
- package/dist/cjs/lib/v3/understudy/context.js +960 -0
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/cookies.d.ts +32 -0
- package/dist/cjs/lib/v3/understudy/cookies.js +142 -0
- package/dist/cjs/lib/v3/understudy/cookies.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.js +204 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.js +87 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.js +88 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/frame.js +232 -0
- package/dist/cjs/lib/v3/understudy/frame.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.js +260 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.js +302 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/initScripts.js +36 -0
- package/dist/cjs/lib/v3/understudy/initScripts.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.js +249 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/locator.js +790 -0
- package/dist/cjs/lib/v3/understudy/locator.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.js +15 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.js +228 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/networkManager.js +310 -0
- package/dist/cjs/lib/v3/understudy/networkManager.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/page.js +1998 -0
- package/dist/cjs/lib/v3/understudy/page.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/piercer.js +65 -0
- package/dist/cjs/lib/v3/understudy/piercer.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/response.js +335 -0
- package/dist/cjs/lib/v3/understudy/response.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
- package/dist/cjs/lib/v3/understudy/screenshotUtils.js +345 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.js +300 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.js.map +1 -0
- package/dist/cjs/lib/v3/v3.js +1631 -0
- package/dist/cjs/lib/v3/v3.js.map +1 -0
- package/dist/cjs/lib/v3/zodCompat.js +26 -0
- package/dist/cjs/lib/v3/zodCompat.js.map +1 -0
- package/dist/cjs/lib/v3Evaluator.js +214 -0
- package/dist/cjs/lib/v3Evaluator.js.map +1 -0
- package/dist/cjs/lib/version.d.ts +1 -1
- package/dist/cjs/lib/version.js +9 -0
- package/dist/cjs/lib/version.js.map +1 -0
- package/dist/cjs/tests/cache-variables.test.js +221 -0
- package/dist/cjs/tests/cache-variables.test.js.map +1 -0
- package/dist/cjs/tests/integration/agent-abort-signal.spec.js +123 -0
- package/dist/cjs/tests/integration/agent-abort-signal.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js +83 -0
- package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-callbacks.spec.js +385 -0
- package/dist/cjs/tests/integration/agent-callbacks.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-experimental-validation.spec.js +362 -0
- package/dist/cjs/tests/integration/agent-experimental-validation.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +262 -0
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-message-continuation.spec.js +112 -0
- package/dist/cjs/tests/integration/agent-message-continuation.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-streaming.spec.js +140 -0
- package/dist/cjs/tests/integration/agent-streaming.spec.js.map +1 -0
- package/dist/cjs/tests/integration/cdp-close-api-region.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/cdp-close-api-region.spec.js +41 -0
- package/dist/cjs/tests/integration/cdp-close-api-region.spec.js.map +1 -0
- package/dist/cjs/tests/integration/cdp-connection-close.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/cdp-connection-close.spec.js +76 -0
- package/dist/cjs/tests/integration/cdp-connection-close.spec.js.map +1 -0
- package/dist/cjs/tests/integration/cdp-session-detached.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js +45 -0
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -0
- package/dist/cjs/tests/integration/click-count.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/click-count.spec.js +163 -0
- package/dist/cjs/tests/integration/click-count.spec.js.map +1 -0
- package/dist/cjs/tests/integration/connect-to-existing-browser.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js +99 -0
- package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js.map +1 -0
- package/dist/cjs/tests/integration/context-addInitScript.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/context-addInitScript.spec.js +285 -0
- package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -0
- package/dist/cjs/tests/integration/context-extra-http-headers.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/context-extra-http-headers.spec.js +49 -0
- package/dist/cjs/tests/integration/context-extra-http-headers.spec.js.map +1 -0
- package/dist/cjs/tests/integration/cookies.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/cookies.spec.js +187 -0
- package/dist/cjs/tests/integration/cookies.spec.js.map +1 -0
- package/dist/cjs/tests/integration/default-page-tracking.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/default-page-tracking.spec.js +52 -0
- package/dist/cjs/tests/integration/default-page-tracking.spec.js.map +1 -0
- package/dist/cjs/tests/integration/downloads.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/downloads.spec.js +52 -0
- package/dist/cjs/tests/integration/downloads.spec.js.map +1 -0
- package/dist/cjs/tests/integration/frame-get-location-and-click.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js +57 -0
- package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js.map +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js +474 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js.map +1 -0
- package/dist/cjs/tests/integration/keep-alive.child.d.ts +1 -0
- package/dist/cjs/tests/integration/keep-alive.child.js +85 -0
- package/dist/cjs/tests/integration/keep-alive.child.js.map +1 -0
- package/dist/cjs/tests/integration/keep-alive.spec.d.ts +22 -0
- package/dist/cjs/tests/integration/keep-alive.spec.js +490 -0
- package/dist/cjs/tests/integration/keep-alive.spec.js.map +1 -0
- package/dist/cjs/tests/integration/keyboard.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/keyboard.spec.js +259 -0
- package/dist/cjs/tests/integration/keyboard.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-backend-node-id.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-backend-node-id.spec.js +150 -0
- package/dist/cjs/tests/integration/locator-backend-node-id.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-content-methods.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-content-methods.spec.js +180 -0
- package/dist/cjs/tests/integration/locator-content-methods.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-count-iframe.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-count-iframe.spec.js +129 -0
- package/dist/cjs/tests/integration/locator-count-iframe.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-count.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-count.spec.js +68 -0
- package/dist/cjs/tests/integration/locator-count.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-fill.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-fill.spec.js +117 -0
- package/dist/cjs/tests/integration/locator-fill.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-input-methods.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-input-methods.spec.js +127 -0
- package/dist/cjs/tests/integration/locator-input-methods.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-nth.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-nth.spec.js +175 -0
- package/dist/cjs/tests/integration/locator-nth.spec.js.map +1 -0
- package/dist/cjs/tests/integration/locator-select-option.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/locator-select-option.spec.js +216 -0
- package/dist/cjs/tests/integration/locator-select-option.spec.js.map +1 -0
- package/dist/cjs/tests/integration/logger-initialization.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/logger-initialization.spec.js +597 -0
- package/dist/cjs/tests/integration/logger-initialization.spec.js.map +1 -0
- package/dist/cjs/tests/integration/multi-instance-logger.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/multi-instance-logger.spec.js +293 -0
- package/dist/cjs/tests/integration/multi-instance-logger.spec.js.map +1 -0
- package/dist/cjs/tests/integration/nested-div.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/nested-div.spec.js +22 -0
- package/dist/cjs/tests/integration/nested-div.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-addInitScript.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-addInitScript.spec.js +94 -0
- package/dist/cjs/tests/integration/page-addInitScript.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-console.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-console.spec.js +47 -0
- package/dist/cjs/tests/integration/page-console.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-drag-and-drop.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-drag-and-drop.spec.js +437 -0
- package/dist/cjs/tests/integration/page-drag-and-drop.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-goto-response.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-goto-response.spec.js +34 -0
- package/dist/cjs/tests/integration/page-goto-response.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-hover.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-hover.spec.js +165 -0
- package/dist/cjs/tests/integration/page-hover.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-screenshot.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-screenshot.spec.js +292 -0
- package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-scroll.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-scroll.spec.js +183 -0
- package/dist/cjs/tests/integration/page-scroll.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-send-cdp.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-send-cdp.spec.js +47 -0
- package/dist/cjs/tests/integration/page-send-cdp.spec.js.map +1 -0
- package/dist/cjs/tests/integration/perform-understudy-method.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/perform-understudy-method.spec.js +63 -0
- package/dist/cjs/tests/integration/perform-understudy-method.spec.js.map +1 -0
- package/dist/cjs/tests/integration/setinputfiles.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/setinputfiles.spec.js +133 -0
- package/dist/cjs/tests/integration/setinputfiles.spec.js.map +1 -0
- package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js +161 -0
- package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js.map +1 -0
- package/dist/cjs/tests/integration/shadow-iframe-spif.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js +160 -0
- package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js.map +1 -0
- package/dist/cjs/tests/integration/testUtils.d.ts +7 -0
- package/dist/cjs/tests/integration/testUtils.js +44 -0
- package/dist/cjs/tests/integration/testUtils.js.map +1 -0
- package/dist/cjs/tests/integration/text-selector-innermost.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/text-selector-innermost.spec.js +105 -0
- package/dist/cjs/tests/integration/text-selector-innermost.spec.js.map +1 -0
- package/dist/cjs/tests/integration/timeouts.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/timeouts.spec.js +197 -0
- package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -0
- package/dist/cjs/tests/integration/user-data-dir.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/user-data-dir.spec.js +77 -0
- package/dist/cjs/tests/integration/user-data-dir.spec.js.map +1 -0
- package/dist/cjs/tests/integration/v3.config.d.ts +4 -0
- package/dist/cjs/tests/integration/v3.config.js +11 -0
- package/dist/cjs/tests/integration/v3.config.js.map +1 -0
- package/dist/cjs/tests/integration/v3.dynamic.config.d.ts +4 -0
- package/dist/cjs/tests/integration/v3.dynamic.config.js +48 -0
- package/dist/cjs/tests/integration/v3.dynamic.config.js.map +1 -0
- package/dist/cjs/tests/integration/v3.playwright.config.d.ts +2 -0
- package/dist/cjs/tests/integration/v3.playwright.config.js +48 -0
- package/dist/cjs/tests/integration/v3.playwright.config.js.map +1 -0
- package/dist/cjs/tests/integration/wait-for-selector.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/wait-for-selector.spec.js +683 -0
- package/dist/cjs/tests/integration/wait-for-selector.spec.js.map +1 -0
- package/dist/cjs/tests/integration/wait-for-timeout.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/wait-for-timeout.spec.js +118 -0
- package/dist/cjs/tests/integration/wait-for-timeout.spec.js.map +1 -0
- package/dist/cjs/tests/integration/xpath-for-location-deep.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js +87 -0
- package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js.map +1 -0
- package/dist/cjs/tests/unit/agent-execution-model.test.d.ts +1 -0
- package/dist/cjs/tests/unit/agent-execution-model.test.js +128 -0
- package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -0
- package/dist/cjs/tests/unit/api-multiregion.test.d.ts +1 -0
- package/dist/cjs/tests/unit/api-multiregion.test.js +58 -0
- package/dist/cjs/tests/unit/api-multiregion.test.js.map +1 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.d.ts +1 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +102 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -0
- package/dist/cjs/tests/unit/cache-llm-resolution.test.d.ts +1 -0
- package/dist/cjs/tests/unit/cache-llm-resolution.test.js +186 -0
- package/dist/cjs/tests/unit/cache-llm-resolution.test.js.map +1 -0
- package/dist/cjs/tests/unit/cdp-connection-close.test.d.ts +1 -0
- package/dist/cjs/tests/unit/cdp-connection-close.test.js +74 -0
- package/dist/cjs/tests/unit/cdp-connection-close.test.js.map +1 -0
- package/dist/cjs/tests/unit/context-extra-http-headers.test.d.ts +1 -0
- package/dist/cjs/tests/unit/context-extra-http-headers.test.js +58 -0
- package/dist/cjs/tests/unit/context-extra-http-headers.test.js.map +1 -0
- package/dist/cjs/tests/unit/cookies.test.d.ts +1 -0
- package/dist/cjs/tests/unit/cookies.test.js +944 -0
- package/dist/cjs/tests/unit/cookies.test.js.map +1 -0
- package/dist/cjs/tests/unit/helpers/mockCDPSession.d.ts +19 -0
- package/dist/cjs/tests/unit/helpers/mockCDPSession.js +29 -0
- package/dist/cjs/tests/unit/helpers/mockCDPSession.js.map +1 -0
- package/dist/cjs/tests/unit/llm-provider.test.d.ts +1 -0
- package/dist/cjs/tests/unit/llm-provider.test.js +64 -0
- package/dist/cjs/tests/unit/llm-provider.test.js.map +1 -0
- package/dist/cjs/tests/unit/model-deprecation.test.d.ts +1 -0
- package/dist/cjs/tests/unit/model-deprecation.test.js +142 -0
- package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -0
- package/dist/cjs/tests/unit/model-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/model-utils.test.js +42 -0
- package/dist/cjs/tests/unit/model-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
- package/dist/cjs/tests/unit/page-snapshot.test.d.ts +1 -0
- package/dist/cjs/tests/unit/page-snapshot.test.js +75 -0
- package/dist/cjs/tests/unit/page-snapshot.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/export-surface.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/export-surface.test.js +107 -0
- package/dist/cjs/tests/unit/public-api/export-surface.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +175 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/public-error-types.test.d.ts +62 -0
- package/dist/cjs/tests/unit/public-api/public-error-types.test.js +110 -0
- package/dist/cjs/tests/unit/public-api/public-error-types.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/public-types.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/public-types.test.js +99 -0
- package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/runtime-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/runtime-utils.test.js +60 -0
- package/dist/cjs/tests/unit/public-api/runtime-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/schema-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/schema-utils.test.js +95 -0
- package/dist/cjs/tests/unit/public-api/schema-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/timeout-error-types.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js +121 -0
- package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/tool-type-export.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/tool-type-export.test.js +65 -0
- package/dist/cjs/tests/unit/public-api/tool-type-export.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/v3-core.test.d.ts +1 -0
- package/dist/cjs/tests/unit/public-api/v3-core.test.js +108 -0
- package/dist/cjs/tests/unit/public-api/v3-core.test.js.map +1 -0
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.d.ts +1 -0
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +209 -0
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +1 -0
- package/dist/cjs/tests/unit/safety-confirmation.test.d.ts +1 -0
- package/dist/cjs/tests/unit/safety-confirmation.test.js +110 -0
- package/dist/cjs/tests/unit/safety-confirmation.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +330 -0
- package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +286 -0
- package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +394 -0
- package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-cbor.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-cbor.test.js +204 -0
- package/dist/cjs/tests/unit/snapshot-cbor.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js +220 -0
- package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js +107 -0
- package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js +89 -0
- package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-frame-merge.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-frame-merge.test.js +335 -0
- package/dist/cjs/tests/unit/snapshot-frame-merge.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js +84 -0
- package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/snapshot-xpath-utils.test.d.ts +1 -0
- package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js +74 -0
- package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js.map +1 -0
- package/dist/cjs/tests/unit/timeout-handlers.test.d.ts +1 -0
- package/dist/cjs/tests/unit/timeout-handlers.test.js +847 -0
- package/dist/cjs/tests/unit/timeout-handlers.test.js.map +1 -0
- package/dist/cjs/tests/unit/understudy-command-exception.test.d.ts +1 -0
- package/dist/cjs/tests/unit/understudy-command-exception.test.js +57 -0
- package/dist/cjs/tests/unit/understudy-command-exception.test.js.map +1 -0
- package/dist/cjs/tests/unit/xpath-parser.test.d.ts +1 -0
- package/dist/cjs/tests/unit/xpath-parser.test.js +311 -0
- package/dist/cjs/tests/unit/xpath-parser.test.js.map +1 -0
- package/dist/cjs/tests/unit/xpath-resolver.test.d.ts +1 -0
- package/dist/cjs/tests/unit/xpath-resolver.test.js +80 -0
- package/dist/cjs/tests/unit/xpath-resolver.test.js.map +1 -0
- package/dist/cjs/tests/unit/zod-enum-compatibility.test.d.ts +1 -0
- package/dist/cjs/tests/unit/zod-enum-compatibility.test.js +149 -0
- package/dist/cjs/tests/unit/zod-enum-compatibility.test.js.map +1 -0
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +1 -2
- package/dist/esm/lib/inference.js +5 -8
- package/dist/esm/lib/inference.js.map +1 -1
- package/dist/esm/lib/modelUtils.d.ts +1 -0
- package/dist/esm/lib/modelUtils.js.map +1 -1
- package/dist/esm/lib/prompt.d.ts +3 -2
- package/dist/esm/lib/prompt.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +17 -2
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +4 -4
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +3 -1
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +24 -1
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/act.js +66 -44
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
- package/dist/esm/lib/v3/agent/tools/ariaTree.js +60 -22
- package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/click.js +23 -31
- package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/extract.js +16 -3
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillFormVision.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js +109 -98
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +8 -2
- package/dist/esm/lib/v3/agent/tools/fillform.js +82 -52
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +11 -1
- package/dist/esm/lib/v3/agent/tools/index.js +8 -7
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
- package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/type.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/type.js +80 -79
- package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
- package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js +8 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/variables.d.ts +21 -0
- package/dist/esm/lib/v3/agent/utils/variables.js +48 -0
- package/dist/esm/lib/v3/agent/utils/variables.js.map +1 -0
- package/dist/esm/lib/v3/api.d.ts +23 -5
- package/dist/esm/lib/v3/api.js +74 -13
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
- package/dist/esm/lib/v3/cache/ActCache.js +2 -18
- package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/esm/lib/v3/cache/AgentCache.d.ts +1 -0
- package/dist/esm/lib/v3/cache/AgentCache.js +18 -11
- package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/esm/lib/v3/handlers/actHandler.d.ts +2 -1
- package/dist/esm/lib/v3/handlers/actHandler.js +4 -4
- package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
- package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +0 -27
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/esm/lib/v3/handlers/observeHandler.js +1 -2
- package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +13 -16
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +143 -0
- package/dist/esm/lib/v3/index.js +41 -0
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
- package/dist/esm/lib/v3/launch/browserbase.js +4 -9
- package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
- package/dist/esm/lib/v3/llm/LLMProvider.js +0 -5
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/OpenAIClient.js +2 -2
- package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -1
- package/dist/esm/lib/v3/mcp/connection.d.ts +2 -0
- package/dist/esm/lib/v3/mcp/connection.js +5 -2
- package/dist/esm/lib/v3/mcp/connection.js.map +1 -1
- package/dist/esm/lib/v3/runtimePaths.d.ts +6 -0
- package/dist/esm/lib/v3/runtimePaths.js +107 -0
- package/dist/esm/lib/v3/runtimePaths.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +9 -14
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
- package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
- package/dist/esm/lib/v3/timeoutConfig.js +5 -0
- package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
- package/dist/esm/lib/v3/types/private/cache.d.ts +3 -0
- package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
- package/dist/esm/lib/v3/types/private/handlers.d.ts +2 -1
- package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +60 -2
- package/dist/esm/lib/v3/types/public/agent.js +1 -1
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +17 -0
- package/dist/esm/lib/v3/types/public/api.js +3 -2
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/context.d.ts +32 -0
- package/dist/esm/lib/v3/types/public/context.js +2 -0
- package/dist/esm/lib/v3/types/public/context.js.map +1 -0
- package/dist/esm/lib/v3/types/public/index.d.ts +1 -0
- package/dist/esm/lib/v3/types/public/index.js +1 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -1
- package/dist/esm/lib/v3/types/public/methods.d.ts +33 -2
- package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +4 -2
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
- package/dist/esm/lib/v3/types/public/options.js.map +1 -1
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +13 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +22 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js +1 -1
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js.map +1 -1
- package/dist/esm/lib/v3/understudy/cdp.d.ts +6 -1
- package/dist/esm/lib/v3/understudy/cdp.js +65 -7
- package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.d.ts +34 -0
- package/dist/esm/lib/v3/understudy/context.js +327 -67
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/cookies.d.ts +32 -0
- package/dist/esm/lib/v3/understudy/cookies.js +136 -0
- package/dist/esm/lib/v3/understudy/cookies.js.map +1 -0
- package/dist/esm/lib/v3/understudy/deepLocator.js +1 -23
- package/dist/esm/lib/v3/understudy/deepLocator.js.map +1 -1
- package/dist/esm/lib/v3/understudy/frame.js +24 -7
- package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
- package/dist/esm/lib/v3/understudy/page.js +58 -5
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
- package/dist/esm/lib/v3/understudy/screenshotUtils.js +1 -19
- package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
- package/dist/esm/lib/v3/understudy/selectorResolver.js +1 -1
- package/dist/esm/lib/v3/understudy/selectorResolver.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +59 -35
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/lib/version.d.ts +1 -1
- package/dist/esm/lib/version.js +1 -1
- package/dist/esm/lib/version.js.map +1 -1
- package/dist/esm/tests/cache-variables.test.d.ts +1 -0
- package/dist/esm/tests/cache-variables.test.js +219 -0
- package/dist/esm/tests/cache-variables.test.js.map +1 -0
- package/dist/esm/tests/integration/agent-abort-signal.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-abort-signal.spec.js +121 -0
- package/dist/esm/tests/integration/agent-abort-signal.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-cache-self-heal.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-cache-self-heal.spec.js +78 -0
- package/dist/esm/tests/integration/agent-cache-self-heal.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-callbacks.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-callbacks.spec.js +383 -0
- package/dist/esm/tests/integration/agent-callbacks.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-experimental-validation.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-experimental-validation.spec.js +360 -0
- package/dist/esm/tests/integration/agent-experimental-validation.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +260 -0
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-message-continuation.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-message-continuation.spec.js +110 -0
- package/dist/esm/tests/integration/agent-message-continuation.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-streaming.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-streaming.spec.js +138 -0
- package/dist/esm/tests/integration/agent-streaming.spec.js.map +1 -0
- package/dist/esm/tests/integration/cdp-close-api-region.spec.d.ts +1 -0
- package/dist/esm/tests/integration/cdp-close-api-region.spec.js +39 -0
- package/dist/esm/tests/integration/cdp-close-api-region.spec.js.map +1 -0
- package/dist/esm/tests/integration/cdp-connection-close.spec.d.ts +1 -0
- package/dist/esm/tests/integration/cdp-connection-close.spec.js +74 -0
- package/dist/esm/tests/integration/cdp-connection-close.spec.js.map +1 -0
- package/dist/esm/tests/integration/cdp-session-detached.spec.d.ts +1 -0
- package/dist/esm/tests/integration/cdp-session-detached.spec.js +43 -0
- package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -0
- package/dist/esm/tests/integration/click-count.spec.d.ts +1 -0
- package/dist/esm/tests/integration/click-count.spec.js +161 -0
- package/dist/esm/tests/integration/click-count.spec.js.map +1 -0
- package/dist/esm/tests/integration/connect-to-existing-browser.spec.d.ts +1 -0
- package/dist/esm/tests/integration/connect-to-existing-browser.spec.js +97 -0
- package/dist/esm/tests/integration/connect-to-existing-browser.spec.js.map +1 -0
- package/dist/esm/tests/integration/context-addInitScript.spec.d.ts +1 -0
- package/dist/esm/tests/integration/context-addInitScript.spec.js +283 -0
- package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -0
- package/dist/esm/tests/integration/context-extra-http-headers.spec.d.ts +1 -0
- package/dist/esm/tests/integration/context-extra-http-headers.spec.js +47 -0
- package/dist/esm/tests/integration/context-extra-http-headers.spec.js.map +1 -0
- package/dist/esm/tests/integration/cookies.spec.d.ts +1 -0
- package/dist/esm/tests/integration/cookies.spec.js +185 -0
- package/dist/esm/tests/integration/cookies.spec.js.map +1 -0
- package/dist/esm/tests/integration/default-page-tracking.spec.d.ts +1 -0
- package/dist/esm/tests/integration/default-page-tracking.spec.js +50 -0
- package/dist/esm/tests/integration/default-page-tracking.spec.js.map +1 -0
- package/dist/esm/tests/integration/downloads.spec.d.ts +1 -0
- package/dist/esm/tests/integration/downloads.spec.js +47 -0
- package/dist/esm/tests/integration/downloads.spec.js.map +1 -0
- package/dist/esm/tests/integration/frame-get-location-and-click.spec.d.ts +1 -0
- package/dist/esm/tests/integration/frame-get-location-and-click.spec.js +55 -0
- package/dist/esm/tests/integration/frame-get-location-and-click.spec.js.map +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.d.ts +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js +472 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js.map +1 -0
- package/dist/esm/tests/integration/keep-alive.child.d.ts +1 -0
- package/dist/esm/tests/integration/keep-alive.child.js +83 -0
- package/dist/esm/tests/integration/keep-alive.child.js.map +1 -0
- package/dist/esm/tests/integration/keep-alive.spec.d.ts +22 -0
- package/dist/esm/tests/integration/keep-alive.spec.js +482 -0
- package/dist/esm/tests/integration/keep-alive.spec.js.map +1 -0
- package/dist/esm/tests/integration/keyboard.spec.d.ts +1 -0
- package/dist/esm/tests/integration/keyboard.spec.js +257 -0
- package/dist/esm/tests/integration/keyboard.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-backend-node-id.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-backend-node-id.spec.js +148 -0
- package/dist/esm/tests/integration/locator-backend-node-id.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-content-methods.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-content-methods.spec.js +178 -0
- package/dist/esm/tests/integration/locator-content-methods.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-count-iframe.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-count-iframe.spec.js +127 -0
- package/dist/esm/tests/integration/locator-count-iframe.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-count.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-count.spec.js +66 -0
- package/dist/esm/tests/integration/locator-count.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-fill.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-fill.spec.js +115 -0
- package/dist/esm/tests/integration/locator-fill.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-input-methods.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-input-methods.spec.js +125 -0
- package/dist/esm/tests/integration/locator-input-methods.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-nth.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-nth.spec.js +173 -0
- package/dist/esm/tests/integration/locator-nth.spec.js.map +1 -0
- package/dist/esm/tests/integration/locator-select-option.spec.d.ts +1 -0
- package/dist/esm/tests/integration/locator-select-option.spec.js +214 -0
- package/dist/esm/tests/integration/locator-select-option.spec.js.map +1 -0
- package/dist/esm/tests/integration/logger-initialization.spec.d.ts +1 -0
- package/dist/esm/tests/integration/logger-initialization.spec.js +595 -0
- package/dist/esm/tests/integration/logger-initialization.spec.js.map +1 -0
- package/dist/esm/tests/integration/multi-instance-logger.spec.d.ts +1 -0
- package/dist/esm/tests/integration/multi-instance-logger.spec.js +291 -0
- package/dist/esm/tests/integration/multi-instance-logger.spec.js.map +1 -0
- package/dist/esm/tests/integration/nested-div.spec.d.ts +1 -0
- package/dist/esm/tests/integration/nested-div.spec.js +20 -0
- package/dist/esm/tests/integration/nested-div.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-addInitScript.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-addInitScript.spec.js +92 -0
- package/dist/esm/tests/integration/page-addInitScript.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-console.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-console.spec.js +45 -0
- package/dist/esm/tests/integration/page-console.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-drag-and-drop.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-drag-and-drop.spec.js +435 -0
- package/dist/esm/tests/integration/page-drag-and-drop.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-goto-response.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-goto-response.spec.js +32 -0
- package/dist/esm/tests/integration/page-goto-response.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-hover.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-hover.spec.js +163 -0
- package/dist/esm/tests/integration/page-hover.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-screenshot.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-screenshot.spec.js +257 -0
- package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-scroll.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-scroll.spec.js +181 -0
- package/dist/esm/tests/integration/page-scroll.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-send-cdp.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-send-cdp.spec.js +45 -0
- package/dist/esm/tests/integration/page-send-cdp.spec.js.map +1 -0
- package/dist/esm/tests/integration/perform-understudy-method.spec.d.ts +1 -0
- package/dist/esm/tests/integration/perform-understudy-method.spec.js +61 -0
- package/dist/esm/tests/integration/perform-understudy-method.spec.js.map +1 -0
- package/dist/esm/tests/integration/setinputfiles.spec.d.ts +1 -0
- package/dist/esm/tests/integration/setinputfiles.spec.js +128 -0
- package/dist/esm/tests/integration/setinputfiles.spec.js.map +1 -0
- package/dist/esm/tests/integration/shadow-iframe-oopif.spec.d.ts +1 -0
- package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js +156 -0
- package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js.map +1 -0
- package/dist/esm/tests/integration/shadow-iframe-spif.spec.d.ts +1 -0
- package/dist/esm/tests/integration/shadow-iframe-spif.spec.js +155 -0
- package/dist/esm/tests/integration/shadow-iframe-spif.spec.js.map +1 -0
- package/dist/esm/tests/integration/testUtils.d.ts +7 -0
- package/dist/esm/tests/integration/testUtils.js +40 -0
- package/dist/esm/tests/integration/testUtils.js.map +1 -0
- package/dist/esm/tests/integration/text-selector-innermost.spec.d.ts +1 -0
- package/dist/esm/tests/integration/text-selector-innermost.spec.js +103 -0
- package/dist/esm/tests/integration/text-selector-innermost.spec.js.map +1 -0
- package/dist/esm/tests/integration/timeouts.spec.d.ts +1 -0
- package/dist/esm/tests/integration/timeouts.spec.js +195 -0
- package/dist/esm/tests/integration/timeouts.spec.js.map +1 -0
- package/dist/esm/tests/integration/user-data-dir.spec.d.ts +1 -0
- package/dist/esm/tests/integration/user-data-dir.spec.js +42 -0
- package/dist/esm/tests/integration/user-data-dir.spec.js.map +1 -0
- package/dist/esm/tests/integration/v3.config.d.ts +4 -0
- package/dist/esm/tests/integration/v3.config.js +7 -0
- package/dist/esm/tests/integration/v3.config.js.map +1 -0
- package/dist/esm/tests/integration/v3.dynamic.config.d.ts +4 -0
- package/dist/esm/tests/integration/v3.dynamic.config.js +44 -0
- package/dist/esm/tests/integration/v3.dynamic.config.js.map +1 -0
- package/dist/esm/tests/integration/v3.playwright.config.d.ts +2 -0
- package/dist/esm/tests/integration/v3.playwright.config.js +46 -0
- package/dist/esm/tests/integration/v3.playwright.config.js.map +1 -0
- package/dist/esm/tests/integration/wait-for-selector.spec.d.ts +1 -0
- package/dist/esm/tests/integration/wait-for-selector.spec.js +681 -0
- package/dist/esm/tests/integration/wait-for-selector.spec.js.map +1 -0
- package/dist/esm/tests/integration/wait-for-timeout.spec.d.ts +1 -0
- package/dist/esm/tests/integration/wait-for-timeout.spec.js +116 -0
- package/dist/esm/tests/integration/wait-for-timeout.spec.js.map +1 -0
- package/dist/esm/tests/integration/xpath-for-location-deep.spec.d.ts +1 -0
- package/dist/esm/tests/integration/xpath-for-location-deep.spec.js +85 -0
- package/dist/esm/tests/integration/xpath-for-location-deep.spec.js.map +1 -0
- package/dist/esm/tests/unit/agent-execution-model.test.d.ts +1 -0
- package/dist/esm/tests/unit/agent-execution-model.test.js +126 -0
- package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -0
- package/dist/esm/tests/unit/api-multiregion.test.d.ts +1 -0
- package/dist/esm/tests/unit/api-multiregion.test.js +56 -0
- package/dist/esm/tests/unit/api-multiregion.test.js.map +1 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.d.ts +1 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js +100 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -0
- package/dist/esm/tests/unit/cache-llm-resolution.test.d.ts +1 -0
- package/dist/esm/tests/unit/cache-llm-resolution.test.js +184 -0
- package/dist/esm/tests/unit/cache-llm-resolution.test.js.map +1 -0
- package/dist/esm/tests/unit/cdp-connection-close.test.d.ts +1 -0
- package/dist/esm/tests/unit/cdp-connection-close.test.js +72 -0
- package/dist/esm/tests/unit/cdp-connection-close.test.js.map +1 -0
- package/dist/esm/tests/unit/context-extra-http-headers.test.d.ts +1 -0
- package/dist/esm/tests/unit/context-extra-http-headers.test.js +56 -0
- package/dist/esm/tests/unit/context-extra-http-headers.test.js.map +1 -0
- package/dist/esm/tests/unit/cookies.test.d.ts +1 -0
- package/dist/esm/tests/unit/cookies.test.js +909 -0
- package/dist/esm/tests/unit/cookies.test.js.map +1 -0
- package/dist/esm/tests/unit/helpers/mockCDPSession.d.ts +19 -0
- package/dist/esm/tests/unit/helpers/mockCDPSession.js +25 -0
- package/dist/esm/tests/unit/helpers/mockCDPSession.js.map +1 -0
- package/dist/esm/tests/unit/llm-provider.test.d.ts +1 -0
- package/dist/esm/tests/unit/llm-provider.test.js +62 -0
- package/dist/esm/tests/unit/llm-provider.test.js.map +1 -0
- package/dist/esm/tests/unit/model-deprecation.test.d.ts +1 -0
- package/dist/esm/tests/unit/model-deprecation.test.js +140 -0
- package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -0
- package/dist/esm/tests/unit/model-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/model-utils.test.js +40 -0
- package/dist/esm/tests/unit/model-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
- package/dist/esm/tests/unit/page-snapshot.test.d.ts +1 -0
- package/dist/esm/tests/unit/page-snapshot.test.js +40 -0
- package/dist/esm/tests/unit/page-snapshot.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/export-surface.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/export-surface.test.js +72 -0
- package/dist/esm/tests/unit/public-api/export-surface.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +140 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/public-error-types.test.d.ts +62 -0
- package/dist/esm/tests/unit/public-api/public-error-types.test.js +74 -0
- package/dist/esm/tests/unit/public-api/public-error-types.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/public-types.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/public-types.test.js +97 -0
- package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/runtime-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/runtime-utils.test.js +25 -0
- package/dist/esm/tests/unit/public-api/runtime-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/schema-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/schema-utils.test.js +60 -0
- package/dist/esm/tests/unit/public-api/schema-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/timeout-error-types.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/timeout-error-types.test.js +86 -0
- package/dist/esm/tests/unit/public-api/timeout-error-types.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/tool-type-export.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/tool-type-export.test.js +30 -0
- package/dist/esm/tests/unit/public-api/tool-type-export.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/v3-core.test.d.ts +1 -0
- package/dist/esm/tests/unit/public-api/v3-core.test.js +73 -0
- package/dist/esm/tests/unit/public-api/v3-core.test.js.map +1 -0
- package/dist/esm/tests/unit/rerender-missing-shadows.test.d.ts +1 -0
- package/dist/esm/tests/unit/rerender-missing-shadows.test.js +207 -0
- package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +1 -0
- package/dist/esm/tests/unit/safety-confirmation.test.d.ts +1 -0
- package/dist/esm/tests/unit/safety-confirmation.test.js +108 -0
- package/dist/esm/tests/unit/safety-confirmation.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +295 -0
- package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +284 -0
- package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-capture-orchestration.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +359 -0
- package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-cbor.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-cbor.test.js +202 -0
- package/dist/esm/tests/unit/snapshot-cbor.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-dom-session-builders.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js +218 -0
- package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js +105 -0
- package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js +87 -0
- package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-frame-merge.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-frame-merge.test.js +333 -0
- package/dist/esm/tests/unit/snapshot-frame-merge.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-tree-format-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js +82 -0
- package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/snapshot-xpath-utils.test.d.ts +1 -0
- package/dist/esm/tests/unit/snapshot-xpath-utils.test.js +72 -0
- package/dist/esm/tests/unit/snapshot-xpath-utils.test.js.map +1 -0
- package/dist/esm/tests/unit/timeout-handlers.test.d.ts +1 -0
- package/dist/esm/tests/unit/timeout-handlers.test.js +812 -0
- package/dist/esm/tests/unit/timeout-handlers.test.js.map +1 -0
- package/dist/esm/tests/unit/understudy-command-exception.test.d.ts +1 -0
- package/dist/esm/tests/unit/understudy-command-exception.test.js +55 -0
- package/dist/esm/tests/unit/understudy-command-exception.test.js.map +1 -0
- package/dist/esm/tests/unit/xpath-parser.test.d.ts +1 -0
- package/dist/esm/tests/unit/xpath-parser.test.js +309 -0
- package/dist/esm/tests/unit/xpath-parser.test.js.map +1 -0
- package/dist/esm/tests/unit/xpath-resolver.test.d.ts +1 -0
- package/dist/esm/tests/unit/xpath-resolver.test.js +78 -0
- package/dist/esm/tests/unit/xpath-resolver.test.js.map +1 -0
- package/dist/esm/tests/unit/zod-enum-compatibility.test.d.ts +1 -0
- package/dist/esm/tests/unit/zod-enum-compatibility.test.js +114 -0
- package/dist/esm/tests/unit/zod-enum-compatibility.test.js.map +1 -0
- package/package.json +19 -8
- package/dist/cjs/cli.js.map +0 -7
- package/dist/cjs/index.js.map +0 -7
- package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +0 -113
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +0 -102
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +0 -374
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +0 -354
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +0 -247
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +0 -105
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +0 -126
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +0 -44
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/click-count.spec.js +0 -147
- package/dist/cjs/lib/v3/tests/click-count.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +0 -54
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +0 -176
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +0 -53
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/downloads.spec.js +0 -80
- package/dist/cjs/lib/v3/tests/downloads.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +0 -53
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +0 -493
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/keep-alive.child.js +0 -92
- package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +0 -7
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +0 -568
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +0 -7
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js +0 -15
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/keyboard.spec.js +0 -296
- package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +0 -159
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +0 -192
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +0 -108
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-count.spec.js +0 -71
- package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +0 -119
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +0 -137
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js +0 -157
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +0 -243
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +0 -547
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +0 -269
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/nested-div.spec.js +0 -23
- package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +0 -90
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-console.spec.js +0 -56
- package/dist/cjs/lib/v3/tests/page-console.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +0 -418
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +0 -35
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-hover.spec.js +0 -167
- package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +0 -295
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js +0 -182
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +0 -46
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +0 -98
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +0 -148
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +0 -156
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +0 -156
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/testUtils.js +0 -54
- package/dist/cjs/lib/v3/tests/testUtils.js.map +0 -7
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +0 -100
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/timeouts.spec.js +0 -32
- package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +0 -65
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/v3.config.js +0 -36
- package/dist/cjs/lib/v3/tests/v3.config.js.map +0 -7
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +0 -67
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +0 -7
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js +0 -61
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +0 -7
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +0 -593
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +0 -97
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +0 -7
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +0 -77
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +0 -7
- package/dist/cjs/tests/agent-execution-model.test.js +0 -139
- package/dist/cjs/tests/agent-execution-model.test.js.map +0 -7
- package/dist/cjs/tests/api-multiregion.test.js +0 -73
- package/dist/cjs/tests/api-multiregion.test.js.map +0 -7
- package/dist/cjs/tests/browserbase-session-accessors.test.js +0 -101
- package/dist/cjs/tests/browserbase-session-accessors.test.js.map +0 -7
- package/dist/cjs/tests/cache-llm-resolution.test.js +0 -187
- package/dist/cjs/tests/cache-llm-resolution.test.js.map +0 -7
- package/dist/cjs/tests/helpers/mockCDPSession.js +0 -50
- package/dist/cjs/tests/helpers/mockCDPSession.js.map +0 -7
- package/dist/cjs/tests/llm-provider.test.js +0 -57
- package/dist/cjs/tests/llm-provider.test.js.map +0 -7
- package/dist/cjs/tests/model-deprecation.test.js +0 -132
- package/dist/cjs/tests/model-deprecation.test.js.map +0 -7
- package/dist/cjs/tests/model-utils.test.js +0 -43
- package/dist/cjs/tests/model-utils.test.js.map +0 -7
- package/dist/cjs/tests/page-snapshot.test.js +0 -58
- package/dist/cjs/tests/page-snapshot.test.js.map +0 -7
- package/dist/cjs/tests/public-api/export-surface.test.js +0 -77
- package/dist/cjs/tests/public-api/export-surface.test.js.map +0 -7
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +0 -151
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +0 -7
- package/dist/cjs/tests/public-api/public-error-types.test.js +0 -106
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +0 -7
- package/dist/cjs/tests/public-api/public-types.test.js +0 -74
- package/dist/cjs/tests/public-api/public-types.test.js.map +0 -7
- package/dist/cjs/tests/public-api/runtime-utils.test.js +0 -53
- package/dist/cjs/tests/public-api/runtime-utils.test.js.map +0 -7
- package/dist/cjs/tests/public-api/schema-utils.test.js +0 -100
- package/dist/cjs/tests/public-api/schema-utils.test.js.map +0 -7
- package/dist/cjs/tests/public-api/timeout-error-types.test.js +0 -103
- package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +0 -7
- package/dist/cjs/tests/public-api/tool-type-export.test.js +0 -47
- package/dist/cjs/tests/public-api/tool-type-export.test.js.map +0 -7
- package/dist/cjs/tests/public-api/v3-core.test.js +0 -105
- package/dist/cjs/tests/public-api/v3-core.test.js.map +0 -7
- package/dist/cjs/tests/safety-confirmation.test.js +0 -134
- package/dist/cjs/tests/safety-confirmation.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +0 -370
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +0 -294
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +0 -405
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-cbor.test.js +0 -197
- package/dist/cjs/tests/snapshot-cbor.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js +0 -246
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +0 -104
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +0 -45
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-frame-merge.test.js +0 -388
- package/dist/cjs/tests/snapshot-frame-merge.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js +0 -106
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +0 -7
- package/dist/cjs/tests/snapshot-xpath-utils.test.js +0 -74
- package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +0 -7
- package/dist/cjs/tests/timeout-handlers.test.js +0 -864
- package/dist/cjs/tests/timeout-handlers.test.js.map +0 -7
- package/dist/cjs/tests/understudy-command-exception.test.js +0 -52
- package/dist/cjs/tests/understudy-command-exception.test.js.map +0 -7
- package/dist/cjs/tests/xpath-parser.test.js +0 -314
- package/dist/cjs/tests/xpath-parser.test.js.map +0 -7
- package/dist/cjs/tests/xpath-resolver.test.js +0 -70
- package/dist/cjs/tests/xpath-resolver.test.js.map +0 -7
- package/dist/cjs/tests/zod-enum-compatibility.test.js +0 -119
- package/dist/cjs/tests/zod-enum-compatibility.test.js.map +0 -7
- 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
- package/dist/esm/lib/v3/dom/genA11yScripts.js +0 -54
- package/dist/esm/lib/v3/dom/genA11yScripts.js.map +0 -1
- package/dist/esm/lib/v3/dom/genDomScripts.js +0 -38
- package/dist/esm/lib/v3/dom/genDomScripts.js.map +0 -1
- package/dist/esm/lib/v3/dom/genLocatorScripts.js +0 -51
- package/dist/esm/lib/v3/dom/genLocatorScripts.js.map +0 -1
- package/dist/esm/lib/v3/dom/genScreenshotScripts.js +0 -37
- package/dist/esm/lib/v3/dom/genScreenshotScripts.js.map +0 -1
- package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js +0 -113
- package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js +0 -80
- package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +0 -374
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js +0 -357
- package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js +0 -247
- package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js +0 -105
- package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/agent-streaming.spec.js +0 -126
- package/dist/esm/lib/v3/tests/agent-streaming.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js +0 -44
- package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/click-count.spec.js +0 -147
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js +0 -54
- package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +0 -176
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/default-page-tracking.spec.js +0 -53
- package/dist/esm/lib/v3/tests/default-page-tracking.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/downloads.spec.js +0 -58
- package/dist/esm/lib/v3/tests/downloads.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js +0 -53
- package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +0 -493
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/keep-alive.child.js +0 -92
- package/dist/esm/lib/v3/tests/keep-alive.child.js.map +0 -7
- package/dist/esm/lib/v3/tests/keep-alive.helpers.js +0 -532
- package/dist/esm/lib/v3/tests/keep-alive.helpers.js.map +0 -7
- package/dist/esm/lib/v3/tests/keep-alive.spec.js +0 -19
- package/dist/esm/lib/v3/tests/keep-alive.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/keyboard.spec.js +0 -296
- package/dist/esm/lib/v3/tests/keyboard.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js +0 -159
- package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +0 -192
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js +0 -108
- package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-count.spec.js +0 -71
- package/dist/esm/lib/v3/tests/locator-count.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-fill.spec.js +0 -119
- package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +0 -137
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-nth.spec.js +0 -157
- package/dist/esm/lib/v3/tests/locator-nth.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js +0 -243
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/logger-initialization.spec.js +0 -552
- package/dist/esm/lib/v3/tests/logger-initialization.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js +0 -269
- package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/nested-div.spec.js +0 -23
- package/dist/esm/lib/v3/tests/nested-div.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +0 -90
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-console.spec.js +0 -56
- package/dist/esm/lib/v3/tests/page-console.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js +0 -418
- package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-goto-response.spec.js +0 -35
- package/dist/esm/lib/v3/tests/page-goto-response.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-hover.spec.js +0 -167
- package/dist/esm/lib/v3/tests/page-hover.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-screenshot.spec.js +0 -273
- package/dist/esm/lib/v3/tests/page-screenshot.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-scroll.spec.js +0 -182
- package/dist/esm/lib/v3/tests/page-scroll.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/page-send-cdp.spec.js +0 -46
- package/dist/esm/lib/v3/tests/page-send-cdp.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js +0 -98
- package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/setinputfiles.spec.js +0 -126
- package/dist/esm/lib/v3/tests/setinputfiles.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js +0 -134
- package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js +0 -134
- package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/testUtils.js +0 -31
- package/dist/esm/lib/v3/tests/testUtils.js.map +0 -7
- package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js +0 -100
- package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/timeouts.spec.js +0 -32
- package/dist/esm/lib/v3/tests/timeouts.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/user-data-dir.spec.js +0 -43
- package/dist/esm/lib/v3/tests/user-data-dir.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/v3.config.js +0 -15
- package/dist/esm/lib/v3/tests/v3.config.js.map +0 -7
- package/dist/esm/lib/v3/tests/v3.dynamic.config.js +0 -43
- package/dist/esm/lib/v3/tests/v3.dynamic.config.js.map +0 -7
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +0 -41
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +0 -7
- package/dist/esm/lib/v3/tests/wait-for-selector.spec.js +0 -593
- package/dist/esm/lib/v3/tests/wait-for-selector.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js +0 -97
- package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js.map +0 -7
- package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js +0 -77
- package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js.map +0 -7
- package/dist/esm/tests/agent-execution-model.test.js +0 -139
- package/dist/esm/tests/agent-execution-model.test.js.map +0 -7
- package/dist/esm/tests/api-multiregion.test.js +0 -73
- package/dist/esm/tests/api-multiregion.test.js.map +0 -7
- package/dist/esm/tests/browserbase-session-accessors.test.js +0 -101
- package/dist/esm/tests/browserbase-session-accessors.test.js.map +0 -7
- package/dist/esm/tests/cache-llm-resolution.test.js +0 -187
- package/dist/esm/tests/cache-llm-resolution.test.js.map +0 -7
- package/dist/esm/tests/helpers/mockCDPSession.js +0 -27
- package/dist/esm/tests/helpers/mockCDPSession.js.map +0 -7
- package/dist/esm/tests/llm-provider.test.js +0 -57
- package/dist/esm/tests/llm-provider.test.js.map +0 -7
- package/dist/esm/tests/model-deprecation.test.js +0 -135
- package/dist/esm/tests/model-deprecation.test.js.map +0 -7
- package/dist/esm/tests/model-utils.test.js +0 -43
- package/dist/esm/tests/model-utils.test.js.map +0 -7
- package/dist/esm/tests/page-snapshot.test.js +0 -36
- package/dist/esm/tests/page-snapshot.test.js.map +0 -7
- package/dist/esm/tests/public-api/export-surface.test.js +0 -55
- package/dist/esm/tests/public-api/export-surface.test.js.map +0 -7
- package/dist/esm/tests/public-api/llm-and-agents.test.js +0 -129
- package/dist/esm/tests/public-api/llm-and-agents.test.js.map +0 -7
- package/dist/esm/tests/public-api/public-error-types.test.js +0 -73
- package/dist/esm/tests/public-api/public-error-types.test.js.map +0 -7
- package/dist/esm/tests/public-api/public-types.test.js +0 -74
- package/dist/esm/tests/public-api/public-types.test.js.map +0 -7
- package/dist/esm/tests/public-api/runtime-utils.test.js +0 -31
- package/dist/esm/tests/public-api/runtime-utils.test.js.map +0 -7
- package/dist/esm/tests/public-api/schema-utils.test.js +0 -78
- package/dist/esm/tests/public-api/schema-utils.test.js.map +0 -7
- package/dist/esm/tests/public-api/timeout-error-types.test.js +0 -81
- package/dist/esm/tests/public-api/timeout-error-types.test.js.map +0 -7
- package/dist/esm/tests/public-api/tool-type-export.test.js +0 -25
- package/dist/esm/tests/public-api/tool-type-export.test.js.map +0 -7
- package/dist/esm/tests/public-api/v3-core.test.js +0 -83
- package/dist/esm/tests/public-api/v3-core.test.js.map +0 -7
- package/dist/esm/tests/safety-confirmation.test.js +0 -134
- package/dist/esm/tests/safety-confirmation.test.js.map +0 -7
- package/dist/esm/tests/snapshot-a11y-resolvers.test.js +0 -348
- package/dist/esm/tests/snapshot-a11y-resolvers.test.js.map +0 -7
- package/dist/esm/tests/snapshot-a11y-tree-utils.test.js +0 -300
- package/dist/esm/tests/snapshot-a11y-tree-utils.test.js.map +0 -7
- package/dist/esm/tests/snapshot-capture-orchestration.test.js +0 -383
- package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +0 -7
- package/dist/esm/tests/snapshot-cbor.test.js +0 -197
- package/dist/esm/tests/snapshot-cbor.test.js.map +0 -7
- package/dist/esm/tests/snapshot-dom-session-builders.test.js +0 -251
- package/dist/esm/tests/snapshot-dom-session-builders.test.js.map +0 -7
- package/dist/esm/tests/snapshot-dom-tree-utils.test.js +0 -109
- package/dist/esm/tests/snapshot-dom-tree-utils.test.js.map +0 -7
- package/dist/esm/tests/snapshot-focus-selectors-utils.test.js +0 -49
- package/dist/esm/tests/snapshot-focus-selectors-utils.test.js.map +0 -7
- package/dist/esm/tests/snapshot-frame-merge.test.js +0 -391
- package/dist/esm/tests/snapshot-frame-merge.test.js.map +0 -7
- package/dist/esm/tests/snapshot-tree-format-utils.test.js +0 -113
- package/dist/esm/tests/snapshot-tree-format-utils.test.js.map +0 -7
- package/dist/esm/tests/snapshot-xpath-utils.test.js +0 -79
- package/dist/esm/tests/snapshot-xpath-utils.test.js.map +0 -7
- package/dist/esm/tests/timeout-handlers.test.js +0 -850
- package/dist/esm/tests/timeout-handlers.test.js.map +0 -7
- package/dist/esm/tests/understudy-command-exception.test.js +0 -55
- package/dist/esm/tests/understudy-command-exception.test.js.map +0 -7
- package/dist/esm/tests/xpath-parser.test.js +0 -317
- package/dist/esm/tests/xpath-parser.test.js.map +0 -7
- package/dist/esm/tests/xpath-resolver.test.js +0 -73
- package/dist/esm/tests/xpath-resolver.test.js.map +0 -7
- package/dist/esm/tests/zod-enum-compatibility.test.js +0 -97
- package/dist/esm/tests/zod-enum-compatibility.test.js.map +0 -7
- /package/dist/cjs/{lib/v3/dom/genA11yScripts.d.ts → tests/cache-variables.test.d.ts} +0 -0
- /package/dist/cjs/{lib/v3/dom/genDomScripts.d.ts → tests/integration/agent-abort-signal.spec.d.ts} +0 -0
- /package/dist/cjs/{lib/v3/dom/genLocatorScripts.d.ts → tests/integration/agent-cache-self-heal.spec.d.ts} +0 -0
- /package/dist/cjs/{lib/v3/dom/genScreenshotScripts.d.ts → tests/integration/agent-callbacks.spec.d.ts} +0 -0
- /package/dist/{esm/lib/v3/dom/genA11yScripts.d.ts → cjs/tests/integration/agent-experimental-validation.spec.d.ts} +0 -0
- /package/dist/{esm/lib/v3/dom/genDomScripts.d.ts → cjs/tests/integration/agent-hybrid-mode.spec.d.ts} +0 -0
- /package/dist/{esm/lib/v3/dom/genLocatorScripts.d.ts → cjs/tests/integration/agent-message-continuation.spec.d.ts} +0 -0
- /package/dist/{esm/lib/v3/dom/genScreenshotScripts.d.ts → cjs/tests/integration/agent-streaming.spec.d.ts} +0 -0
|
@@ -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 {\n TimeoutError,\n CookieSetError,\n PageNotFoundError,\n StagehandSetExtraHTTPHeadersError,\n} from \"../types/public/sdkErrors.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"../timeoutConfig.js\";\nimport {\n filterCookies,\n normalizeCookieParams,\n cookieMatchesFilter,\n toCdpCookieParam,\n} from \"./cookies.js\";\nimport {\n Cookie,\n ClearCookieOptions,\n CookieParam,\n} from \"../types/public/context.js\";\n\ntype TargetId = string;\ntype SessionId = string;\n\ntype TargetType = \"page\" | \"iframe\" | string;\n\n/**\n * Returns true when the target's URL points to a document with a real,\n * pierceable HTML DOM. We allowlist the small set of schemes that carry\n * web content rather than trying to blacklist every internal browser scheme\n * (chrome://, chrome-extension://, devtools://, brave://, edge://, …).\n */\nfunction hasInjectableDOM(url: string | undefined): boolean {\n if (!url || url === \"\") return true;\n if (\n url === \"about:blank\" ||\n url === \"about:srcdoc\" ||\n url.startsWith(\"about:blank#\")\n )\n return true;\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) return true;\n if (\n url.startsWith(\"data:\") ||\n url.startsWith(\"blob:\") ||\n url.startsWith(\"file://\") ||\n url.startsWith(\"filesystem:\")\n )\n return true;\n return false;\n}\n\nfunction isNonWebTarget(info: Protocol.Target.TargetInfo): boolean {\n return (\n (info.type !== \"page\" && info.type !== \"iframe\") ||\n !hasInjectableDOM(info.url)\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\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\";\nconst WAIT_FOR_FIRST_TOP_LEVEL_PAGE_OPERATION =\n \"waitForFirstTopLevelPage (no top-level Page)\";\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\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 private extraHttpHeaders: Record<string, string> | null = null;\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 cdpHeaders?: Record<string, string>;\n },\n ): Promise<V3Context> {\n const connectTask = async () => {\n const conn = await CdpConnection.connect(wsUrl, {\n headers: opts?.cdpHeaders,\n });\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.ensureFirstTopLevelPage(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 private hasTopLevelPage(): boolean {\n for (const [targetId, targetType] of this.typeByTarget) {\n if (targetType === \"page\" && this.pagesByTarget.has(targetId)) {\n return true;\n }\n }\n return false;\n }\n\n private async ensureFirstTopLevelPage(timeoutMs: number): Promise<void> {\n if (this.hasTopLevelPage()) return;\n\n try {\n await this.waitForFirstTopLevelPage(timeoutMs);\n return;\n } catch (err) {\n if (!(err instanceof TimeoutError)) {\n throw err;\n }\n v3Logger({\n category: \"ctx\",\n message:\n \"No open browser pages found after connect; creating an initial about:blank page\",\n level: 1,\n });\n }\n\n await this.newPage(\"about:blank\");\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(WAIT_FOR_FIRST_TOP_LEVEL_PAGE_OPERATION, timeoutMs);\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 public async setExtraHTTPHeaders(\n headers: Record<string, string>,\n ): Promise<void> {\n const nextHeaders = { ...headers };\n this.extraHttpHeaders = nextHeaders;\n\n const sessions: CDPSessionLike[] = [];\n for (const sessionId of this._sessionInit) {\n const session = this.conn.getSession(sessionId);\n if (session) sessions.push(session);\n }\n\n if (!sessions.length) return;\n\n const results = await Promise.allSettled(\n sessions.map(async (session) => {\n await session.send(\"Network.enable\");\n await session.send(\"Network.setExtraHTTPHeaders\", {\n headers: nextHeaders,\n });\n }),\n );\n\n const failures = results\n .map((result, index) => ({ result, session: sessions[index] }))\n .filter(\n (\n entry,\n ): entry is {\n result: PromiseRejectedResult;\n session: CDPSessionLike;\n } => entry.result.status === \"rejected\",\n )\n .map((entry) => {\n const reason = entry.result.reason as Error;\n const sid = entry.session.id ?? \"unknown\";\n const message = reason?.message ?? String(reason);\n return `session=${sid} error=${message}`;\n });\n\n if (failures.length) {\n throw new StagehandSetExtraHTTPHeadersError(failures);\n }\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 // Skip non-web targets (workers, chrome extensions, background pages, etc.).\n // They still need to be resumed so we don't leave them paused by\n // waitForDebuggerOnStart, but injecting the piercer into these targets\n // can throw or corrupt their internal state (e.g. Chrome's PDF viewer).\n if (isNonWebTarget(info)) {\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 // Attach lifecycle (per target session):\n // 1) while paused, enable domains + child auto-attach and register init scripts;\n // 2) resume target execution;\n // 3) build/adopt Page ownership and frame bridges.\n // Some CDP backends defer *.enable() responses until after resume, so we\n // cannot await those responses before resuming. Instead we:\n // - wait for transport-level dispatch of required pre-resume commands;\n // - then dispatch resume;\n // - then await responses.\n const queuePreResume = (\n method: string,\n params?: object,\n match?: (sentParams?: object) => boolean,\n ) => {\n const dispatched = this.conn\n .waitForSessionDispatch(sessionId, method, match)\n .then(() => true)\n .catch(() => false);\n const response = session\n .send(method, params)\n .then(() => true)\n .catch(() => false);\n return { dispatched, response };\n };\n const initScriptOps: Array<{\n dispatched: Promise<boolean>;\n response: Promise<boolean>;\n }> = [];\n // Pre-resume ordering matters:\n // - enable domains;\n // - enable child auto-attach with waitForDebuggerOnStart;\n // - register init scripts.\n // Commands are sent in-order on the same session before resume.\n const corePreResumeOps = [\n queuePreResume(\"Page.enable\"),\n queuePreResume(\"Runtime.enable\"),\n queuePreResume(\"Target.setAutoAttach\", {\n autoAttach: true,\n waitForDebuggerOnStart: true,\n flatten: true,\n }),\n ];\n const headerPreResumeOps: Array<{\n dispatched: Promise<boolean>;\n response: Promise<boolean>;\n }> = [];\n if (this.extraHttpHeaders) {\n const headers = { ...this.extraHttpHeaders };\n headerPreResumeOps.push(queuePreResume(\"Network.enable\"));\n headerPreResumeOps.push(\n queuePreResume(\"Network.setExtraHTTPHeaders\", { headers }),\n );\n }\n // Send init scripts only after auto-attach has been queued.\n if (this.initScripts.length) {\n for (const source of this.initScripts) {\n initScriptOps.push(\n queuePreResume(\n \"Page.addScriptToEvaluateOnNewDocument\",\n {\n source,\n runImmediately: true,\n },\n (sentParams) =>\n (sentParams as { source?: string } | undefined)?.source ===\n source,\n ),\n );\n }\n }\n const piercerPreloadOp = queuePreResume(\n \"Page.addScriptToEvaluateOnNewDocument\",\n {\n source: v3ScriptContent,\n runImmediately: true,\n },\n (sentParams) =>\n (sentParams as { source?: string } | undefined)?.source ===\n v3ScriptContent,\n );\n const preResumeDispatched = (\n await Promise.all([\n ...corePreResumeOps.map((op) => op.dispatched),\n ...headerPreResumeOps.map((op) => op.dispatched),\n ...initScriptOps.map((op) => op.dispatched),\n piercerPreloadOp.dispatched,\n ])\n ).every(Boolean);\n // Dispatch resume only after pre-resume setup has actually been sent.\n const resumeOp = queuePreResume(\"Runtime.runIfWaitingForDebugger\");\n const [resumedDispatched, resumedOk] = await Promise.all([\n resumeOp.dispatched,\n resumeOp.response,\n ]);\n const [\n coreResults,\n headerResults,\n initScriptResults,\n piercerPreRegistered,\n ] = await Promise.all([\n Promise.all(corePreResumeOps.map((op) => op.response)),\n Promise.all(headerPreResumeOps.map((op) => op.response)),\n Promise.all(initScriptOps.map((op) => op.response)),\n piercerPreloadOp.response,\n ]);\n // Header propagation is independent of init-script determinism but still\n // part of pre-resume attach setup; awaited above for ordering/lifecycle.\n void headerResults;\n if (!preResumeDispatched || !resumedDispatched || !resumedOk) {\n // Short-lived child targets can detach before resume is acknowledged.\n // Keep this noisy only for top-level pages where missing attach is fatal.\n if (isTopLevelPage(info)) {\n v3Logger({\n category: \"ctx\",\n message: \"Failed target pre-resume setup ordering\",\n level: 2,\n auxiliary: {\n targetId: { value: String(info.targetId), type: \"string\" },\n targetType: { value: String(info.type), type: \"string\" },\n preResumeDispatched: {\n value: String(preResumeDispatched),\n type: \"string\",\n },\n resumedDispatched: {\n value: String(resumedDispatched),\n type: \"string\",\n },\n resumedOk: { value: String(resumedOk), type: \"string\" },\n },\n });\n }\n return;\n }\n resumed = true;\n const scriptsInstalled =\n coreResults.every(Boolean) && initScriptResults.every(Boolean);\n\n try {\n // Best-effort lifecycle events; do not block top-level page registration\n // on this optional signal stream.\n void session\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n\n // Top-level handling\n if (isTopLevelPage(info)) {\n let page: Page | null = null;\n let createError: unknown;\n // Deterministic contract: never drop a newly attached top-level target\n // because an arbitrary local timeout fired. We wait for Page.create and\n // let it finish regardless of CDP call latency.\n try {\n page = await Page.create(\n this.conn,\n session,\n info.targetId,\n this.apiClient,\n this.localBrowserLaunchOptions,\n this.env === \"BROWSERBASE\",\n );\n } catch (error) {\n createError = error;\n }\n if (!page) {\n v3Logger({\n category: \"ctx\",\n message: \"Failed to create top-level Page\",\n level: 2,\n auxiliary: {\n targetId: { value: String(info.targetId), type: \"string\" },\n targetType: { value: String(info.type), type: \"string\" },\n targetUrl: { value: String(info.url ?? \"\"), type: \"string\" },\n error: {\n value: String(\n createError instanceof Error\n ? createError.message\n : createError,\n ),\n type: \"string\",\n },\n },\n });\n return;\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 (piercerPreRegistered) {\n this._piercerInstalled.add(sessionId);\n }\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 if (!piercerPreRegistered) {\n void this.ensurePiercer(session).catch(() => {});\n }\n\n return;\n }\n\n const piercerReady = await this.ensurePiercer(session).catch(() => false);\n if (!piercerReady) return;\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 /**\n * Get all browser cookies, optionally filtered by URL(s).\n *\n * When `urls` is omitted or empty every cookie in the browser context is\n * returned. When one or more URLs are supplied only cookies whose\n * domain/path/secure attributes match are included.\n */\n async cookies(urls?: string | string[]): Promise<Cookie[]> {\n const urlList = !urls ? [] : typeof urls === \"string\" ? [urls] : urls;\n\n const { cookies } = await this.conn.send<{\n cookies: Protocol.Network.Cookie[];\n }>(\"Storage.getCookies\");\n\n const mapped: Cookie[] = cookies.map((c) => ({\n name: c.name,\n value: c.value,\n domain: c.domain,\n path: c.path,\n expires: c.expires,\n httpOnly: c.httpOnly,\n secure: c.secure,\n sameSite: (c.sameSite as Cookie[\"sameSite\"]) ?? \"Lax\",\n }));\n\n return filterCookies(mapped, urlList);\n }\n\n /**\n * Add one or more cookies to the browser context.\n *\n * Each cookie must specify either a `url` (from which domain/path/secure are\n * derived) or an explicit `domain` + `path` pair.\n *\n * We surface CDP errors if the browser rejects a cookie.\n */\n async addCookies(cookies: CookieParam[]): Promise<void> {\n const normalized = normalizeCookieParams(cookies);\n if (!normalized.length) return;\n\n const cdpCookies = normalized.map(toCdpCookieParam);\n\n try {\n await this.conn.send(\"Storage.setCookies\", { cookies: cdpCookies });\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n const names = normalized.map((c) => `\"${c.name}\"`).join(\", \");\n throw new CookieSetError(\n `Failed to set cookies [${names}] — ` +\n `the browser rejected the batch. Check that the domain, path, and secure/sameSite values are valid.` +\n (detail ? ` (CDP error: ${detail})` : \"\"),\n );\n }\n }\n\n /**\n * Clear cookies from the browser context.\n *\n * - Called with no arguments: clears **all** cookies atomically via\n * `Storage.clearCookies`.\n * - Called with filter options: fetches all cookies, clears everything,\n * then re-adds only the cookies that do NOT match the filter via\n * `Storage.setCookies`. This is necessary on the browser endpoint because\n * the Storage domain does not support targeted deletes.\n */\n async clearCookies(options?: ClearCookieOptions): Promise<void> {\n const hasFilter =\n options?.name !== undefined ||\n options?.domain !== undefined ||\n options?.path !== undefined;\n\n if (!hasFilter) {\n // Atomic single-call wipe — no race condition, no O(N) roundtrips.\n await this.conn.send(\"Storage.clearCookies\");\n return;\n }\n\n const current = await this.cookies();\n const toKeep = current.filter((c) => !cookieMatchesFilter(c, options!));\n\n if (toKeep.length === current.length) return;\n\n // Storage domain doesn't support targeted deletes on the browser endpoint.\n // Clear everything, then re-add only the cookies we're keeping.\n await this.conn.send(\"Storage.clearCookies\");\n if (toKeep.length) {\n try {\n await this.conn.send(\"Storage.setCookies\", {\n cookies: toKeep.map(toCdpCookieParam),\n });\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n const names = toKeep.map((c) => `\"${c.name}\"`).join(\", \");\n throw new CookieSetError(\n `clearCookies: cookies were cleared but failed to re-add the ${toKeep.length} ` +\n `non-matching cookie(s) [${names}]. The browser cookie jar is now empty. ` +\n (detail ? `(CDP error: ${detail})` : \"\"),\n );\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Cookie, CookieParam, ClearCookieOptions } from "../types/public/context.js";
|
|
2
|
+
/**
|
|
3
|
+
* helpers for browser cookie management.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors Playwright's cookie API surface, adapted for direct CDP usage
|
|
6
|
+
* against a single default browser context.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Filter cookies by URL matching (domain, path, secure).
|
|
10
|
+
* If `urls` is empty every cookie passes.
|
|
11
|
+
*/
|
|
12
|
+
export declare function filterCookies(cookies: Cookie[], urls: string[]): Cookie[];
|
|
13
|
+
/**
|
|
14
|
+
* Validate and normalise `CookieParam` values before sending to CDP.
|
|
15
|
+
*
|
|
16
|
+
* - Ensures every cookie has either `url` or `domain`+`path`.
|
|
17
|
+
* - When `url` is provided, derives `domain`, `path`, and `secure` from it.
|
|
18
|
+
* - Validates that `sameSite: "None"` is paired with `secure: true`
|
|
19
|
+
* (browsers silently reject this — we throw early with a clear message).
|
|
20
|
+
*/
|
|
21
|
+
export declare function normalizeCookieParams(cookies: CookieParam[]): CookieParam[];
|
|
22
|
+
/**
|
|
23
|
+
* Map a Cookie or CookieParam to the shape CDP's Storage.setCookies expects.
|
|
24
|
+
* Session cookies (expires === -1) omit the expires field so CDP treats them
|
|
25
|
+
* as session-scoped.
|
|
26
|
+
*/
|
|
27
|
+
export declare function toCdpCookieParam(c: Cookie | CookieParam): Record<string, unknown>;
|
|
28
|
+
/**
|
|
29
|
+
* Returns true if a cookie matches all supplied filter criteria.
|
|
30
|
+
* Undefined filters are treated as "match anything".
|
|
31
|
+
*/
|
|
32
|
+
export declare function cookieMatchesFilter(cookie: Cookie, options: ClearCookieOptions): boolean;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { CookieValidationError } from "../types/public/sdkErrors.js";
|
|
2
|
+
/**
|
|
3
|
+
* helpers for browser cookie management.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors Playwright's cookie API surface, adapted for direct CDP usage
|
|
6
|
+
* against a single default browser context.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Filter cookies by URL matching (domain, path, secure).
|
|
10
|
+
* If `urls` is empty every cookie passes.
|
|
11
|
+
*/
|
|
12
|
+
export function filterCookies(cookies, urls) {
|
|
13
|
+
if (!urls.length)
|
|
14
|
+
return cookies;
|
|
15
|
+
const parsed = urls.map((u) => {
|
|
16
|
+
try {
|
|
17
|
+
return new URL(u);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new CookieValidationError(`Invalid URL passed to cookies(): "${u}"`);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return cookies.filter((c) => {
|
|
24
|
+
for (const url of parsed) {
|
|
25
|
+
let domain = c.domain;
|
|
26
|
+
if (!domain.startsWith("."))
|
|
27
|
+
domain = "." + domain;
|
|
28
|
+
if (!("." + url.hostname).endsWith(domain))
|
|
29
|
+
continue;
|
|
30
|
+
// Path must match on a "/" boundary: cookie path "/foo" should match
|
|
31
|
+
// "/foo" and "/foo/bar" but NOT "/foobar".
|
|
32
|
+
const p = url.pathname;
|
|
33
|
+
if (!p.startsWith(c.path) ||
|
|
34
|
+
(c.path.length < p.length &&
|
|
35
|
+
!c.path.endsWith("/") &&
|
|
36
|
+
p[c.path.length] !== "/"))
|
|
37
|
+
continue;
|
|
38
|
+
const isLoopback = url.hostname === "localhost" ||
|
|
39
|
+
url.hostname === "127.0.0.1" ||
|
|
40
|
+
url.hostname === "[::1]";
|
|
41
|
+
if (url.protocol !== "https:" && !isLoopback && c.secure)
|
|
42
|
+
continue;
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate and normalise `CookieParam` values before sending to CDP.
|
|
50
|
+
*
|
|
51
|
+
* - Ensures every cookie has either `url` or `domain`+`path`.
|
|
52
|
+
* - When `url` is provided, derives `domain`, `path`, and `secure` from it.
|
|
53
|
+
* - Validates that `sameSite: "None"` is paired with `secure: true`
|
|
54
|
+
* (browsers silently reject this — we throw early with a clear message).
|
|
55
|
+
*/
|
|
56
|
+
export function normalizeCookieParams(cookies) {
|
|
57
|
+
return cookies.map((c) => {
|
|
58
|
+
if (!c.url && !(c.domain && c.path)) {
|
|
59
|
+
throw new CookieValidationError(`Cookie "${c.name}" must have a url or a domain/path pair`);
|
|
60
|
+
}
|
|
61
|
+
if (c.url && c.domain) {
|
|
62
|
+
throw new CookieValidationError(`Cookie "${c.name}" should have either url or domain, not both`);
|
|
63
|
+
}
|
|
64
|
+
if (c.url && c.path) {
|
|
65
|
+
throw new CookieValidationError(`Cookie "${c.name}" should have either url or path, not both`);
|
|
66
|
+
}
|
|
67
|
+
if (c.expires !== undefined && c.expires < 0 && c.expires !== -1) {
|
|
68
|
+
throw new CookieValidationError(`Cookie "${c.name}" has an invalid expires value; use -1 for session cookies or a positive unix timestamp`);
|
|
69
|
+
}
|
|
70
|
+
const copy = { ...c };
|
|
71
|
+
if (copy.url) {
|
|
72
|
+
if (copy.url === "about:blank") {
|
|
73
|
+
throw new CookieValidationError(`Blank page cannot have cookie "${c.name}"`);
|
|
74
|
+
}
|
|
75
|
+
if (copy.url.startsWith("data:")) {
|
|
76
|
+
throw new CookieValidationError(`Data URL page cannot have cookie "${c.name}"`);
|
|
77
|
+
}
|
|
78
|
+
let url;
|
|
79
|
+
try {
|
|
80
|
+
url = new URL(copy.url);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
throw new CookieValidationError(`Cookie "${c.name}" has an invalid url: "${copy.url}"`);
|
|
84
|
+
}
|
|
85
|
+
copy.domain = url.hostname;
|
|
86
|
+
copy.path = url.pathname.substring(0, url.pathname.lastIndexOf("/") + 1);
|
|
87
|
+
copy.secure = url.protocol === "https:";
|
|
88
|
+
delete copy.url;
|
|
89
|
+
}
|
|
90
|
+
// Browsers silently reject SameSite=None cookies that aren't Secure.
|
|
91
|
+
// Catch this early with a clear error instead of a silent CDP failure.
|
|
92
|
+
// Use !copy.secure to catch both explicit false AND undefined (omitted),
|
|
93
|
+
// since CDP defaults secure to false when omitted.
|
|
94
|
+
if (copy.sameSite === "None" && !copy.secure) {
|
|
95
|
+
throw new CookieValidationError(`Cookie "${c.name}" has sameSite: "None" without secure: true. ` +
|
|
96
|
+
`Browsers require secure: true when sameSite is "None".`);
|
|
97
|
+
}
|
|
98
|
+
return copy;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Map a Cookie or CookieParam to the shape CDP's Storage.setCookies expects.
|
|
103
|
+
* Session cookies (expires === -1) omit the expires field so CDP treats them
|
|
104
|
+
* as session-scoped.
|
|
105
|
+
*/
|
|
106
|
+
export function toCdpCookieParam(c) {
|
|
107
|
+
return {
|
|
108
|
+
name: c.name,
|
|
109
|
+
value: c.value,
|
|
110
|
+
domain: c.domain,
|
|
111
|
+
path: c.path,
|
|
112
|
+
expires: c.expires === -1 ? undefined : c.expires,
|
|
113
|
+
httpOnly: c.httpOnly,
|
|
114
|
+
secure: c.secure,
|
|
115
|
+
sameSite: c.sameSite,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns true if a cookie matches all supplied filter criteria.
|
|
120
|
+
* Undefined filters are treated as "match anything".
|
|
121
|
+
*/
|
|
122
|
+
export function cookieMatchesFilter(cookie, options) {
|
|
123
|
+
const check = (prop, value) => {
|
|
124
|
+
if (value === undefined)
|
|
125
|
+
return true;
|
|
126
|
+
if (value instanceof RegExp) {
|
|
127
|
+
value.lastIndex = 0;
|
|
128
|
+
return value.test(cookie[prop]);
|
|
129
|
+
}
|
|
130
|
+
return cookie[prop] === value;
|
|
131
|
+
};
|
|
132
|
+
return (check("name", options.name) &&
|
|
133
|
+
check("domain", options.domain) &&
|
|
134
|
+
check("path", options.path));
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/cookies.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Cookie,\n CookieParam,\n ClearCookieOptions,\n} from \"../types/public/context.js\";\nimport { CookieValidationError } from \"../types/public/sdkErrors.js\";\n\n/**\n * helpers for browser cookie management.\n *\n * Mirrors Playwright's cookie API surface, adapted for direct CDP usage\n * against a single default browser context.\n */\n\n/**\n * Filter cookies by URL matching (domain, path, secure).\n * If `urls` is empty every cookie passes.\n */\nexport function filterCookies(cookies: Cookie[], urls: string[]): Cookie[] {\n if (!urls.length) return cookies;\n const parsed = urls.map((u) => {\n try {\n return new URL(u);\n } catch {\n throw new CookieValidationError(\n `Invalid URL passed to cookies(): \"${u}\"`,\n );\n }\n });\n return cookies.filter((c) => {\n for (const url of parsed) {\n let domain = c.domain;\n if (!domain.startsWith(\".\")) domain = \".\" + domain;\n if (!(\".\" + url.hostname).endsWith(domain)) continue;\n // Path must match on a \"/\" boundary: cookie path \"/foo\" should match\n // \"/foo\" and \"/foo/bar\" but NOT \"/foobar\".\n const p = url.pathname;\n if (\n !p.startsWith(c.path) ||\n (c.path.length < p.length &&\n !c.path.endsWith(\"/\") &&\n p[c.path.length] !== \"/\")\n )\n continue;\n const isLoopback =\n url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"[::1]\";\n if (url.protocol !== \"https:\" && !isLoopback && c.secure) continue;\n return true;\n }\n return false;\n });\n}\n\n/**\n * Validate and normalise `CookieParam` values before sending to CDP.\n *\n * - Ensures every cookie has either `url` or `domain`+`path`.\n * - When `url` is provided, derives `domain`, `path`, and `secure` from it.\n * - Validates that `sameSite: \"None\"` is paired with `secure: true`\n * (browsers silently reject this — we throw early with a clear message).\n */\nexport function normalizeCookieParams(cookies: CookieParam[]): CookieParam[] {\n return cookies.map((c) => {\n if (!c.url && !(c.domain && c.path)) {\n throw new CookieValidationError(\n `Cookie \"${c.name}\" must have a url or a domain/path pair`,\n );\n }\n if (c.url && c.domain) {\n throw new CookieValidationError(\n `Cookie \"${c.name}\" should have either url or domain, not both`,\n );\n }\n if (c.url && c.path) {\n throw new CookieValidationError(\n `Cookie \"${c.name}\" should have either url or path, not both`,\n );\n }\n if (c.expires !== undefined && c.expires < 0 && c.expires !== -1) {\n throw new CookieValidationError(\n `Cookie \"${c.name}\" has an invalid expires value; use -1 for session cookies or a positive unix timestamp`,\n );\n }\n\n const copy = { ...c };\n if (copy.url) {\n if (copy.url === \"about:blank\") {\n throw new CookieValidationError(\n `Blank page cannot have cookie \"${c.name}\"`,\n );\n }\n if (copy.url.startsWith(\"data:\")) {\n throw new CookieValidationError(\n `Data URL page cannot have cookie \"${c.name}\"`,\n );\n }\n let url: URL;\n try {\n url = new URL(copy.url);\n } catch {\n throw new CookieValidationError(\n `Cookie \"${c.name}\" has an invalid url: \"${copy.url}\"`,\n );\n }\n copy.domain = url.hostname;\n copy.path = url.pathname.substring(0, url.pathname.lastIndexOf(\"/\") + 1);\n copy.secure = url.protocol === \"https:\";\n delete copy.url;\n }\n\n // Browsers silently reject SameSite=None cookies that aren't Secure.\n // Catch this early with a clear error instead of a silent CDP failure.\n // Use !copy.secure to catch both explicit false AND undefined (omitted),\n // since CDP defaults secure to false when omitted.\n if (copy.sameSite === \"None\" && !copy.secure) {\n throw new CookieValidationError(\n `Cookie \"${c.name}\" has sameSite: \"None\" without secure: true. ` +\n `Browsers require secure: true when sameSite is \"None\".`,\n );\n }\n\n return copy;\n });\n}\n\n/**\n * Map a Cookie or CookieParam to the shape CDP's Storage.setCookies expects.\n * Session cookies (expires === -1) omit the expires field so CDP treats them\n * as session-scoped.\n */\nexport function toCdpCookieParam(\n c: Cookie | CookieParam,\n): Record<string, unknown> {\n return {\n name: c.name,\n value: c.value,\n domain: c.domain,\n path: c.path,\n expires: c.expires === -1 ? undefined : c.expires,\n httpOnly: c.httpOnly,\n secure: c.secure,\n sameSite: c.sameSite,\n };\n}\n\n/**\n * Returns true if a cookie matches all supplied filter criteria.\n * Undefined filters are treated as \"match anything\".\n */\nexport function cookieMatchesFilter(\n cookie: Cookie,\n options: ClearCookieOptions,\n): boolean {\n const check = (\n prop: \"name\" | \"domain\" | \"path\",\n value: string | RegExp | undefined,\n ): boolean => {\n if (value === undefined) return true;\n if (value instanceof RegExp) {\n value.lastIndex = 0;\n return value.test(cookie[prop]);\n }\n return cookie[prop] === value;\n };\n return (\n check(\"name\", options.name) &&\n check(\"domain\", options.domain) &&\n check(\"path\", options.path)\n );\n}\n"]}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { Locator } from "./locator.js";
|
|
2
|
-
import { v3Logger } from "../logger.js";
|
|
3
2
|
import { frameLocatorFromFrame } from "./frameLocator.js";
|
|
4
3
|
import { StagehandInvalidArgumentError } from "../types/public/sdkErrors.js";
|
|
5
|
-
|
|
6
|
-
* Recognize iframe steps like "iframe" or "iframe[2]" in an XPath.
|
|
7
|
-
*/
|
|
8
|
-
const IFRAME_STEP_RE = /^iframe(?:\[\d+])?$/i;
|
|
4
|
+
import { IFRAME_STEP_RE } from "./a11y/snapshot/focusSelectors.js";
|
|
9
5
|
/** Parse XPath into steps preserving '/' vs '//' and the raw token (with [n]) */
|
|
10
6
|
function parseXPath(path) {
|
|
11
7
|
const s = path.trim();
|
|
@@ -183,15 +179,6 @@ async function resolveDeepXPathTarget(page, root, xpathOrSelector) {
|
|
|
183
179
|
if (!buf.length)
|
|
184
180
|
return;
|
|
185
181
|
const selectorForIframe = "xpath=" + buildXPathFromSteps(buf);
|
|
186
|
-
v3Logger({
|
|
187
|
-
category: "deep-hop",
|
|
188
|
-
message: "resolving iframe via FrameLocator",
|
|
189
|
-
level: 2,
|
|
190
|
-
auxiliary: {
|
|
191
|
-
selectorForIframe: { value: selectorForIframe, type: "string" },
|
|
192
|
-
rootFrameId: { value: String(root.frameId), type: "string" },
|
|
193
|
-
},
|
|
194
|
-
});
|
|
195
182
|
fl = fl
|
|
196
183
|
? fl.frameLocator(selectorForIframe)
|
|
197
184
|
: frameLocatorFromFrame(page, root, selectorForIframe);
|
|
@@ -204,15 +191,6 @@ async function resolveDeepXPathTarget(page, root, xpathOrSelector) {
|
|
|
204
191
|
}
|
|
205
192
|
const finalSelector = "xpath=" + buildXPathFromSteps(buf);
|
|
206
193
|
const targetFrame = fl ? await fl.resolveFrame() : root;
|
|
207
|
-
v3Logger({
|
|
208
|
-
category: "deep-hop",
|
|
209
|
-
message: "final tail",
|
|
210
|
-
level: 2,
|
|
211
|
-
auxiliary: {
|
|
212
|
-
frameId: { value: String(targetFrame.frameId), type: "string" },
|
|
213
|
-
finalSelector: { value: finalSelector, type: "string" },
|
|
214
|
-
},
|
|
215
|
-
});
|
|
216
194
|
return { frame: targetFrame, selector: finalSelector };
|
|
217
195
|
}
|
|
218
196
|
//# sourceMappingURL=deepLocator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepLocator.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/deepLocator.ts"],"names":[],"mappings":"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","sourcesContent":["import { Locator } from \"./locator.js\";\nimport type { Frame } from \"./frame.js\";\nimport type { Page } from \"./page.js\";\nimport { v3Logger } from \"../logger.js\";\nimport { FrameLocator, frameLocatorFromFrame } from \"./frameLocator.js\";\nimport { StagehandInvalidArgumentError } from \"../types/public/sdkErrors.js\";\n\n/**\n * Recognize iframe steps like \"iframe\" or \"iframe[2]\" in an XPath.\n */\nconst IFRAME_STEP_RE = /^iframe(?:\\[\\d+])?$/i;\n\ntype Axis = \"child\" | \"desc\";\ntype Step = { axis: Axis; raw: string; name: string };\n\nexport type ResolvedLocatorTarget = {\n frame: Frame;\n selector: string;\n};\n\n/** Parse XPath into steps preserving '/' vs '//' and the raw token (with [n]) */\nfunction parseXPath(path: string): Step[] {\n const s = path.trim();\n let i = 0;\n const steps: Step[] = [];\n while (i < s.length) {\n let axis: Axis = \"child\";\n if (s.startsWith(\"//\", i)) {\n axis = \"desc\";\n i += 2;\n } else if (s[i] === \"/\") {\n axis = \"child\";\n i += 1;\n }\n\n const start = i;\n while (i < s.length && s[i] !== \"/\") i++;\n const raw = s.slice(start, i).trim();\n if (!raw) continue;\n\n const name = raw.replace(/\\[\\d+\\]\\s*$/u, \"\").toLowerCase();\n steps.push({ axis, raw, name });\n }\n return steps;\n}\n\nfunction buildXPathFromSteps(steps: ReadonlyArray<Step>): string {\n let out = \"\";\n for (const st of steps) {\n out += st.axis === \"desc\" ? \"//\" : \"/\";\n out += st.raw; // keep predicates intact\n }\n return out || \"/\";\n}\n\n/** Build a Locator scoped to the correct frame for a deep XPath crossing iframes. */\nexport async function deepLocatorThroughIframes(\n page: Page,\n root: Frame,\n xpathOrSelector: string,\n): Promise<Locator> {\n const target = await resolveDeepXPathTarget(page, root, xpathOrSelector);\n return new Locator(target.frame, target.selector);\n}\n\n/**\n * Unified resolver that supports '>>' hop notation, deep XPath across iframes,\n * and plain single-frame selectors. Keeps hop logic in one shared place.\n */\nexport async function resolveLocatorTarget(\n page: Page,\n root: Frame,\n selectorRaw: string,\n): Promise<ResolvedLocatorTarget> {\n const sel = selectorRaw.trim();\n const parts = sel\n .split(\">>\")\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (parts.length > 1) {\n // Build a FrameLocator chain for all but the last segment\n let fl = frameLocatorFromFrame(page, root, parts[0]!);\n for (let i = 1; i < parts.length - 1; i++) {\n fl = fl.frameLocator(parts[i]!);\n }\n const targetFrame = await fl.resolveFrame();\n return { frame: targetFrame, selector: parts[parts.length - 1]! };\n }\n\n // No hops — delegate to XPath-aware deep resolver when needed\n const isXPath = sel.startsWith(\"xpath=\") || sel.startsWith(\"/\");\n if (isXPath) {\n return resolveDeepXPathTarget(page, root, sel);\n }\n return { frame: root, selector: sel };\n}\n\nexport async function resolveLocatorWithHops(\n page: Page,\n root: Frame,\n selectorRaw: string,\n): Promise<Locator> {\n const target = await resolveLocatorTarget(page, root, selectorRaw);\n return new Locator(target.frame, target.selector);\n}\n\n/**\n * DeepLocatorDelegate: a lightweight wrapper that looks like a Locator and\n * resolves to the correct frame/element on each call using hop/deep-XPath logic.\n *\n * Returned by `page.deepLocator()` for ergonomic, await-free chaining:\n * page.deepLocator('iframe#ifrA >> #btn').click()\n */\nexport class DeepLocatorDelegate {\n constructor(\n private readonly page: Page,\n private readonly root: Frame,\n private readonly selector: string,\n private readonly nthIndex: number = 0,\n ) {}\n\n private async real(): Promise<Locator> {\n const base = await resolveLocatorWithHops(\n this.page,\n this.root,\n this.selector,\n );\n return base.nth(this.nthIndex);\n }\n\n // Locator API delegates\n async click(options?: {\n button?: \"left\" | \"right\" | \"middle\";\n clickCount?: number;\n }) {\n return (await this.real()).click(options);\n }\n async count() {\n return (await this.real()).count();\n }\n async hover() {\n return (await this.real()).hover();\n }\n async fill(value: string) {\n return (await this.real()).fill(value);\n }\n async type(text: string, options?: { delay?: number }) {\n return (await this.real()).type(text, options);\n }\n async selectOption(values: string | string[]) {\n return (await this.real()).selectOption(values);\n }\n async scrollTo(percent: number | string) {\n return (await this.real()).scrollTo(percent);\n }\n async isVisible() {\n return (await this.real()).isVisible();\n }\n async isChecked() {\n return (await this.real()).isChecked();\n }\n async inputValue() {\n return (await this.real()).inputValue();\n }\n async textContent() {\n return (await this.real()).textContent();\n }\n async innerHtml() {\n return (await this.real()).innerHtml();\n }\n async innerText() {\n return (await this.real()).innerText();\n }\n async centroid() {\n return (await this.real()).centroid();\n }\n async backendNodeId() {\n return (await this.real()).backendNodeId();\n }\n async highlight(options?: {\n durationMs?: number;\n borderColor?: { r: number; g: number; b: number; a?: number };\n contentColor?: { r: number; g: number; b: number; a?: number };\n }) {\n return (await this.real()).highlight(options);\n }\n async sendClickEvent(options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n detail?: number;\n }) {\n return (await this.real()).sendClickEvent(options);\n }\n async setInputFiles(\n files:\n | string\n | string[]\n | {\n name: string;\n mimeType: string;\n buffer: ArrayBuffer | Uint8Array | Buffer | string;\n }\n | Array<{\n name: string;\n mimeType: string;\n buffer: ArrayBuffer | Uint8Array | Buffer | string;\n }>,\n ) {\n return (await this.real()).setInputFiles(files);\n }\n first() {\n return this.nth(0);\n }\n nth(index: number): DeepLocatorDelegate {\n const value = Number(index);\n if (!Number.isFinite(value) || value < 0) {\n throw new StagehandInvalidArgumentError(\n \"deepLocator().nth() expects a non-negative index\",\n );\n }\n\n const nextIndex = Math.floor(value);\n if (nextIndex === this.nthIndex) return this;\n\n return new DeepLocatorDelegate(\n this.page,\n this.root,\n this.selector,\n nextIndex,\n );\n }\n}\n\n/** Factory to create a deep locator delegate from a Page + root frame. */\nexport function deepLocatorFromPage(\n page: Page,\n root: Frame,\n selector: string,\n): DeepLocatorDelegate {\n return new DeepLocatorDelegate(page, root, selector);\n}\n\nasync function resolveDeepXPathTarget(\n page: Page,\n root: Frame,\n xpathOrSelector: string,\n): Promise<ResolvedLocatorTarget> {\n let path = xpathOrSelector.trim();\n if (path.startsWith(\"xpath=\")) path = path.slice(\"xpath=\".length).trim();\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n\n const steps = parseXPath(path);\n let fl: FrameLocator | undefined;\n let buf: Step[] = [];\n\n const flushIntoFrameLocator = () => {\n if (!buf.length) return;\n const selectorForIframe = \"xpath=\" + buildXPathFromSteps(buf);\n v3Logger({\n category: \"deep-hop\",\n message: \"resolving iframe via FrameLocator\",\n level: 2,\n auxiliary: {\n selectorForIframe: { value: selectorForIframe, type: \"string\" },\n rootFrameId: { value: String(root.frameId), type: \"string\" },\n },\n });\n fl = fl\n ? fl.frameLocator(selectorForIframe)\n : frameLocatorFromFrame(page, root, selectorForIframe);\n buf = [];\n };\n\n for (const st of steps) {\n buf.push(st);\n if (IFRAME_STEP_RE.test(st.name)) flushIntoFrameLocator();\n }\n\n const finalSelector = \"xpath=\" + buildXPathFromSteps(buf);\n const targetFrame = fl ? await fl.resolveFrame() : root;\n v3Logger({\n category: \"deep-hop\",\n message: \"final tail\",\n level: 2,\n auxiliary: {\n frameId: { value: String(targetFrame.frameId), type: \"string\" },\n finalSelector: { value: finalSelector, type: \"string\" },\n },\n });\n return { frame: targetFrame, selector: finalSelector };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"deepLocator.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/deepLocator.ts"],"names":[],"mappings":"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","sourcesContent":["import { Locator } from \"./locator.js\";\nimport type { Frame } from \"./frame.js\";\nimport type { Page } from \"./page.js\";\nimport { FrameLocator, frameLocatorFromFrame } from \"./frameLocator.js\";\nimport { StagehandInvalidArgumentError } from \"../types/public/sdkErrors.js\";\nimport { IFRAME_STEP_RE } from \"./a11y/snapshot/focusSelectors.js\";\n\ntype Axis = \"child\" | \"desc\";\ntype Step = { axis: Axis; raw: string; name: string };\n\nexport type ResolvedLocatorTarget = {\n frame: Frame;\n selector: string;\n};\n\n/** Parse XPath into steps preserving '/' vs '//' and the raw token (with [n]) */\nfunction parseXPath(path: string): Step[] {\n const s = path.trim();\n let i = 0;\n const steps: Step[] = [];\n while (i < s.length) {\n let axis: Axis = \"child\";\n if (s.startsWith(\"//\", i)) {\n axis = \"desc\";\n i += 2;\n } else if (s[i] === \"/\") {\n axis = \"child\";\n i += 1;\n }\n\n const start = i;\n while (i < s.length && s[i] !== \"/\") i++;\n const raw = s.slice(start, i).trim();\n if (!raw) continue;\n\n const name = raw.replace(/\\[\\d+\\]\\s*$/u, \"\").toLowerCase();\n steps.push({ axis, raw, name });\n }\n return steps;\n}\n\nfunction buildXPathFromSteps(steps: ReadonlyArray<Step>): string {\n let out = \"\";\n for (const st of steps) {\n out += st.axis === \"desc\" ? \"//\" : \"/\";\n out += st.raw; // keep predicates intact\n }\n return out || \"/\";\n}\n\n/** Build a Locator scoped to the correct frame for a deep XPath crossing iframes. */\nexport async function deepLocatorThroughIframes(\n page: Page,\n root: Frame,\n xpathOrSelector: string,\n): Promise<Locator> {\n const target = await resolveDeepXPathTarget(page, root, xpathOrSelector);\n return new Locator(target.frame, target.selector);\n}\n\n/**\n * Unified resolver that supports '>>' hop notation, deep XPath across iframes,\n * and plain single-frame selectors. Keeps hop logic in one shared place.\n */\nexport async function resolveLocatorTarget(\n page: Page,\n root: Frame,\n selectorRaw: string,\n): Promise<ResolvedLocatorTarget> {\n const sel = selectorRaw.trim();\n const parts = sel\n .split(\">>\")\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (parts.length > 1) {\n // Build a FrameLocator chain for all but the last segment\n let fl = frameLocatorFromFrame(page, root, parts[0]!);\n for (let i = 1; i < parts.length - 1; i++) {\n fl = fl.frameLocator(parts[i]!);\n }\n const targetFrame = await fl.resolveFrame();\n return { frame: targetFrame, selector: parts[parts.length - 1]! };\n }\n\n // No hops — delegate to XPath-aware deep resolver when needed\n const isXPath = sel.startsWith(\"xpath=\") || sel.startsWith(\"/\");\n if (isXPath) {\n return resolveDeepXPathTarget(page, root, sel);\n }\n return { frame: root, selector: sel };\n}\n\nexport async function resolveLocatorWithHops(\n page: Page,\n root: Frame,\n selectorRaw: string,\n): Promise<Locator> {\n const target = await resolveLocatorTarget(page, root, selectorRaw);\n return new Locator(target.frame, target.selector);\n}\n\n/**\n * DeepLocatorDelegate: a lightweight wrapper that looks like a Locator and\n * resolves to the correct frame/element on each call using hop/deep-XPath logic.\n *\n * Returned by `page.deepLocator()` for ergonomic, await-free chaining:\n * page.deepLocator('iframe#ifrA >> #btn').click()\n */\nexport class DeepLocatorDelegate {\n constructor(\n private readonly page: Page,\n private readonly root: Frame,\n private readonly selector: string,\n private readonly nthIndex: number = 0,\n ) {}\n\n private async real(): Promise<Locator> {\n const base = await resolveLocatorWithHops(\n this.page,\n this.root,\n this.selector,\n );\n return base.nth(this.nthIndex);\n }\n\n // Locator API delegates\n async click(options?: {\n button?: \"left\" | \"right\" | \"middle\";\n clickCount?: number;\n }) {\n return (await this.real()).click(options);\n }\n async count() {\n return (await this.real()).count();\n }\n async hover() {\n return (await this.real()).hover();\n }\n async fill(value: string) {\n return (await this.real()).fill(value);\n }\n async type(text: string, options?: { delay?: number }) {\n return (await this.real()).type(text, options);\n }\n async selectOption(values: string | string[]) {\n return (await this.real()).selectOption(values);\n }\n async scrollTo(percent: number | string) {\n return (await this.real()).scrollTo(percent);\n }\n async isVisible() {\n return (await this.real()).isVisible();\n }\n async isChecked() {\n return (await this.real()).isChecked();\n }\n async inputValue() {\n return (await this.real()).inputValue();\n }\n async textContent() {\n return (await this.real()).textContent();\n }\n async innerHtml() {\n return (await this.real()).innerHtml();\n }\n async innerText() {\n return (await this.real()).innerText();\n }\n async centroid() {\n return (await this.real()).centroid();\n }\n async backendNodeId() {\n return (await this.real()).backendNodeId();\n }\n async highlight(options?: {\n durationMs?: number;\n borderColor?: { r: number; g: number; b: number; a?: number };\n contentColor?: { r: number; g: number; b: number; a?: number };\n }) {\n return (await this.real()).highlight(options);\n }\n async sendClickEvent(options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n detail?: number;\n }) {\n return (await this.real()).sendClickEvent(options);\n }\n async setInputFiles(\n files:\n | string\n | string[]\n | {\n name: string;\n mimeType: string;\n buffer: ArrayBuffer | Uint8Array | Buffer | string;\n }\n | Array<{\n name: string;\n mimeType: string;\n buffer: ArrayBuffer | Uint8Array | Buffer | string;\n }>,\n ) {\n return (await this.real()).setInputFiles(files);\n }\n first() {\n return this.nth(0);\n }\n nth(index: number): DeepLocatorDelegate {\n const value = Number(index);\n if (!Number.isFinite(value) || value < 0) {\n throw new StagehandInvalidArgumentError(\n \"deepLocator().nth() expects a non-negative index\",\n );\n }\n\n const nextIndex = Math.floor(value);\n if (nextIndex === this.nthIndex) return this;\n\n return new DeepLocatorDelegate(\n this.page,\n this.root,\n this.selector,\n nextIndex,\n );\n }\n}\n\n/** Factory to create a deep locator delegate from a Page + root frame. */\nexport function deepLocatorFromPage(\n page: Page,\n root: Frame,\n selector: string,\n): DeepLocatorDelegate {\n return new DeepLocatorDelegate(page, root, selector);\n}\n\nasync function resolveDeepXPathTarget(\n page: Page,\n root: Frame,\n xpathOrSelector: string,\n): Promise<ResolvedLocatorTarget> {\n let path = xpathOrSelector.trim();\n if (path.startsWith(\"xpath=\")) path = path.slice(\"xpath=\".length).trim();\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n\n const steps = parseXPath(path);\n let fl: FrameLocator | undefined;\n let buf: Step[] = [];\n\n const flushIntoFrameLocator = () => {\n if (!buf.length) return;\n const selectorForIframe = \"xpath=\" + buildXPathFromSteps(buf);\n fl = fl\n ? fl.frameLocator(selectorForIframe)\n : frameLocatorFromFrame(page, root, selectorForIframe);\n buf = [];\n };\n\n for (const st of steps) {\n buf.push(st);\n if (IFRAME_STEP_RE.test(st.name)) flushIntoFrameLocator();\n }\n\n const finalSelector = \"xpath=\" + buildXPathFromSteps(buf);\n const targetFrame = fl ? await fl.resolveFrame() : root;\n return { frame: targetFrame, selector: finalSelector };\n}\n"]}
|