@browserbasehq/orca 3.0.9-alpha-3 → 3.1.0-patch.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/lib/inference.d.ts +65 -0
- package/dist/esm/lib/inference.js +333 -0
- package/dist/esm/lib/inference.js.map +1 -0
- package/dist/esm/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/esm/lib/inferenceLogUtils.js +92 -0
- package/dist/esm/lib/inferenceLogUtils.js.map +1 -0
- package/dist/esm/lib/logger.d.ts +69 -0
- package/dist/esm/lib/logger.js +323 -0
- package/dist/esm/lib/logger.js.map +1 -0
- package/dist/esm/lib/modelUtils.d.ts +14 -0
- package/dist/esm/lib/modelUtils.js +48 -0
- package/dist/esm/lib/modelUtils.js.map +1 -0
- package/dist/esm/lib/prompt.d.ts +14 -0
- package/dist/esm/lib/prompt.js +230 -0
- package/dist/esm/lib/prompt.js.map +1 -0
- package/dist/esm/lib/utils.d.ts +68 -0
- package/dist/esm/lib/utils.js +654 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/esm/lib/v3/agent/AgentClient.js +17 -0
- package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js +77 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -0
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +822 -0
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +799 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +770 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +615 -0
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +186 -0
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/act.d.ts +13 -0
- package/dist/esm/lib/v3/agent/tools/act.js +49 -0
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/esm/lib/v3/agent/tools/ariaTree.js +31 -0
- package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/click.js +104 -0
- package/dist/esm/lib/v3/agent/tools/click.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/esm/lib/v3/agent/tools/clickAndHold.js +68 -0
- package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +105 -0
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +21 -0
- package/dist/esm/lib/v3/agent/tools/extract.js +93 -0
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js +143 -0
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +13 -0
- package/dist/esm/lib/v3/agent/tools/fillform.js +56 -0
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/esm/lib/v3/agent/tools/goto.js +31 -0
- package/dist/esm/lib/v3/agent/tools/goto.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/esm/lib/v3/agent/tools/index.js +74 -0
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/esm/lib/v3/agent/tools/keys.js +60 -0
- package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/navback.js +23 -0
- package/dist/esm/lib/v3/agent/tools/navback.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js +26 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js +142 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/esm/lib/v3/agent/tools/search.js +73 -0
- package/dist/esm/lib/v3/agent/tools/search.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/think.js +24 -0
- package/dist/esm/lib/v3/agent/tools/think.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/esm/lib/v3/agent/tools/type.js +106 -0
- package/dist/esm/lib/v3/agent/tools/type.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/esm/lib/v3/agent/tools/wait.js +53 -0
- package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/esm/lib/v3/agent/utils/actionMapping.js +100 -0
- package/dist/esm/lib/v3/agent/utils/actionMapping.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +28 -0
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js +62 -0
- package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js +145 -0
- package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +101 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/esm/lib/v3/agent/utils/imageCompression.js +204 -0
- package/dist/esm/lib/v3/agent/utils/imageCompression.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/esm/lib/v3/agent/utils/messageProcessing.js +164 -0
- package/dist/esm/lib/v3/agent/utils/messageProcessing.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/esm/lib/v3/agent/utils/screenshotHandler.js +26 -0
- package/dist/esm/lib/v3/agent/utils/screenshotHandler.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js +79 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/esm/lib/v3/agent/utils/xpath.js +19 -0
- package/dist/esm/lib/v3/agent/utils/xpath.js.map +1 -0
- package/dist/esm/lib/v3/api.d.ts +86 -0
- package/dist/esm/lib/v3/api.js +484 -0
- package/dist/esm/lib/v3/api.js.map +1 -0
- package/dist/esm/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/esm/lib/v3/cache/ActCache.js +292 -0
- package/dist/esm/lib/v3/cache/ActCache.js.map +1 -0
- package/dist/esm/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/esm/lib/v3/cache/AgentCache.js +640 -0
- package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -0
- package/dist/esm/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/esm/lib/v3/cache/CacheStorage.js +98 -0
- package/dist/esm/lib/v3/cache/CacheStorage.js.map +1 -0
- package/dist/esm/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/esm/lib/v3/cache/serverAgentCache.js +49 -0
- package/dist/esm/lib/v3/cache/serverAgentCache.js.map +1 -0
- package/dist/esm/lib/v3/cache/utils.d.ts +15 -0
- package/dist/esm/lib/v3/cache/utils.js +39 -0
- package/dist/esm/lib/v3/cache/utils.js.map +1 -0
- package/dist/esm/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/esm/lib/v3/dom/a11yScripts/index.js +117 -0
- package/dist/esm/lib/v3/dom/a11yScripts/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js +20 -0
- package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +56 -0
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js +2 -0
- package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js +8 -0
- package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/esm/lib/v3/dom/build/scriptV3Content.js +2 -0
- package/dist/esm/lib/v3/dom/build/scriptV3Content.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/esm/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genA11yScripts.js +54 -0
- package/dist/esm/lib/v3/dom/genA11yScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genDomScripts.js +38 -0
- package/dist/esm/lib/v3/dom/genDomScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genLocatorScripts.js +51 -0
- package/dist/esm/lib/v3/dom/genLocatorScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genScreenshotScripts.js +37 -0
- package/dist/esm/lib/v3/dom/genScreenshotScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/index.d.ts +1 -0
- package/dist/esm/lib/v3/dom/index.js +2 -0
- package/dist/esm/lib/v3/dom/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/esm/lib/v3/dom/locatorScripts/counts.js +272 -0
- package/dist/esm/lib/v3/dom/locatorScripts/counts.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/esm/lib/v3/dom/locatorScripts/index.js +5 -0
- package/dist/esm/lib/v3/dom/locatorScripts/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/esm/lib/v3/dom/locatorScripts/scripts.js +458 -0
- package/dist/esm/lib/v3/dom/locatorScripts/scripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/esm/lib/v3/dom/locatorScripts/selectors.js +283 -0
- package/dist/esm/lib/v3/dom/locatorScripts/selectors.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js +283 -0
- package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js +376 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js +196 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -0
- package/dist/esm/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/esm/lib/v3/dom/piercer.entry.js +3 -0
- package/dist/esm/lib/v3/dom/piercer.entry.js.map +1 -0
- package/dist/esm/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/esm/lib/v3/dom/piercer.runtime.js +90 -0
- package/dist/esm/lib/v3/dom/piercer.runtime.js.map +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js +3 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js.map +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js +40 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js.map +1 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/index.js +2 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js +82 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js.map +1 -0
- package/dist/esm/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/esm/lib/v3/external_clients/aisdk.js +103 -0
- package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -0
- package/dist/esm/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/esm/lib/v3/external_clients/customOpenAI.js +220 -0
- package/dist/esm/lib/v3/external_clients/customOpenAI.js.map +1 -0
- package/dist/esm/lib/v3/flowLogger.d.ts +139 -0
- package/dist/esm/lib/v3/flowLogger.js +868 -0
- package/dist/esm/lib/v3/flowLogger.js.map +1 -0
- package/dist/esm/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/esm/lib/v3/handlers/actHandler.js +340 -0
- package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/esm/lib/v3/handlers/extractHandler.js +139 -0
- package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +623 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js +14 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js.map +1 -0
- package/dist/esm/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/esm/lib/v3/handlers/observeHandler.js +156 -0
- package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +461 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +528 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -0
- package/dist/esm/lib/v3/index.d.ts +17 -0
- package/dist/esm/lib/v3/index.js +13 -0
- package/dist/esm/lib/v3/index.js.map +1 -0
- package/dist/esm/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/esm/lib/v3/launch/browserbase.js +46 -0
- package/dist/esm/lib/v3/launch/browserbase.js.map +1 -0
- package/dist/esm/lib/v3/launch/local.d.ts +15 -0
- package/dist/esm/lib/v3/launch/local.js +98 -0
- package/dist/esm/lib/v3/launch/local.js.map +1 -0
- package/dist/esm/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/esm/lib/v3/llm/AnthropicClient.js +239 -0
- package/dist/esm/lib/v3/llm/AnthropicClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/esm/lib/v3/llm/CerebrasClient.js +235 -0
- package/dist/esm/lib/v3/llm/CerebrasClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/esm/lib/v3/llm/GoogleClient.js +369 -0
- package/dist/esm/lib/v3/llm/GoogleClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/esm/lib/v3/llm/GroqClient.js +236 -0
- package/dist/esm/lib/v3/llm/GroqClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/esm/lib/v3/llm/LLMClient.js +23 -0
- package/dist/esm/lib/v3/llm/LLMClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/esm/lib/v3/llm/LLMProvider.js +194 -0
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.js +329 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/esm/lib/v3/llm/aisdk.js +348 -0
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -0
- package/dist/esm/lib/v3/logger.d.ts +9 -0
- package/dist/esm/lib/v3/logger.js +96 -0
- package/dist/esm/lib/v3/logger.js.map +1 -0
- package/dist/esm/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/esm/lib/v3/mcp/connection.js +49 -0
- package/dist/esm/lib/v3/mcp/connection.js.map +1 -0
- package/dist/esm/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/esm/lib/v3/mcp/utils.js +36 -0
- package/dist/esm/lib/v3/mcp/utils.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/esm/lib/v3/shutdown/cleanupLocal.js +30 -0
- package/dist/esm/lib/v3/shutdown/cleanupLocal.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +9 -0
- package/dist/esm/lib/v3/shutdown/supervisor.js +156 -0
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +97 -0
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -0
- package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js +80 -0
- package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js +357 -0
- package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/esm/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/click-count.spec.js +112 -0
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/esm/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/downloads.spec.js +58 -0
- package/dist/esm/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/envReporter.js +57 -0
- package/dist/esm/lib/v3/tests/envReporter.js.map +7 -0
- package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +447 -0
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/esm/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/esm/lib/v3/tests/keep-alive.helpers.js +532 -0
- package/dist/esm/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/esm/lib/v3/tests/keep-alive.spec.js +19 -0
- package/dist/esm/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/esm/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/esm/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/esm/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/logger-initialization.spec.js +552 -0
- package/dist/esm/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/esm/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/esm/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/esm/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/esm/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-screenshot.spec.js +273 -0
- package/dist/esm/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/esm/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/esm/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/setinputfiles.spec.js +126 -0
- package/dist/esm/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js +134 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js +134 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/testUtils.js +31 -0
- package/dist/esm/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/esm/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/user-data-dir.spec.js +43 -0
- package/dist/esm/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/v3.config.js +15 -0
- package/dist/esm/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/esm/lib/v3/tests/v3.dynamic.config.js +43 -0
- package/dist/esm/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +98 -0
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/esm/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/esm/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/esm/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/esm/lib/v3/timeoutConfig.js +27 -0
- package/dist/esm/lib/v3/timeoutConfig.js.map +1 -0
- package/dist/esm/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/esm/lib/v3/types/private/agent.js +2 -0
- package/dist/esm/lib/v3/types/private/agent.js.map +1 -0
- package/dist/esm/lib/v3/types/private/api.d.ts +11 -0
- package/dist/esm/lib/v3/types/private/api.js +2 -0
- package/dist/esm/lib/v3/types/private/api.js.map +1 -0
- package/dist/esm/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/esm/lib/v3/types/private/cache.js +2 -0
- package/dist/esm/lib/v3/types/private/cache.js.map +1 -0
- package/dist/esm/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/esm/lib/v3/types/private/evaluator.js +2 -0
- package/dist/esm/lib/v3/types/private/evaluator.js.map +1 -0
- package/dist/esm/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/esm/lib/v3/types/private/handlers.js +16 -0
- package/dist/esm/lib/v3/types/private/handlers.js.map +1 -0
- package/dist/esm/lib/v3/types/private/index.d.ts +7 -0
- package/dist/esm/lib/v3/types/private/index.js +8 -0
- package/dist/esm/lib/v3/types/private/index.js.map +1 -0
- package/dist/esm/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/esm/lib/v3/types/private/internal.js +2 -0
- package/dist/esm/lib/v3/types/private/internal.js.map +1 -0
- package/dist/esm/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/esm/lib/v3/types/private/locator.js +2 -0
- package/dist/esm/lib/v3/types/private/locator.js.map +1 -0
- package/dist/esm/lib/v3/types/private/network.d.ts +34 -0
- package/dist/esm/lib/v3/types/private/network.js +3 -0
- package/dist/esm/lib/v3/types/private/network.js.map +1 -0
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +31 -0
- package/dist/esm/lib/v3/types/private/shutdown.js +5 -0
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -0
- package/dist/esm/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/esm/lib/v3/types/private/shutdownErrors.js +22 -0
- package/dist/esm/lib/v3/types/private/shutdownErrors.js.map +1 -0
- package/dist/esm/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/esm/lib/v3/types/private/snapshot.js +2 -0
- package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -0
- package/dist/esm/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/esm/lib/v3/types/public/agent.js +15 -0
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -0
- package/dist/esm/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/esm/lib/v3/types/public/api.js +915 -0
- package/dist/esm/lib/v3/types/public/api.js.map +1 -0
- package/dist/esm/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/esm/lib/v3/types/public/apiErrors.js +32 -0
- package/dist/esm/lib/v3/types/public/apiErrors.js.map +1 -0
- package/dist/esm/lib/v3/types/public/index.d.ts +12 -0
- package/dist/esm/lib/v3/types/public/index.js +14 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -0
- package/dist/esm/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/esm/lib/v3/types/public/locator.js +2 -0
- package/dist/esm/lib/v3/types/public/locator.js.map +1 -0
- package/dist/esm/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/esm/lib/v3/types/public/logs.js +13 -0
- package/dist/esm/lib/v3/types/public/logs.js.map +1 -0
- package/dist/esm/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/esm/lib/v3/types/public/methods.js +15 -0
- package/dist/esm/lib/v3/types/public/methods.js.map +1 -0
- package/dist/esm/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/esm/lib/v3/types/public/metrics.js +2 -0
- package/dist/esm/lib/v3/types/public/metrics.js.map +1 -0
- package/dist/esm/lib/v3/types/public/model.d.ts +65 -0
- package/dist/esm/lib/v3/types/public/model.js +2 -0
- package/dist/esm/lib/v3/types/public/model.js.map +1 -0
- package/dist/esm/lib/v3/types/public/options.d.ts +70 -0
- package/dist/esm/lib/v3/types/public/options.js +4 -0
- package/dist/esm/lib/v3/types/public/options.js.map +1 -0
- package/dist/esm/lib/v3/types/public/page.d.ts +18 -0
- package/dist/esm/lib/v3/types/public/page.js +3 -0
- package/dist/esm/lib/v3/types/public/page.js.map +1 -0
- package/dist/esm/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/esm/lib/v3/types/public/screenshotTypes.js +2 -0
- package/dist/esm/lib/v3/types/public/screenshotTypes.js.map +1 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +305 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +196 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js +121 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +336 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +129 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js +274 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js +216 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js +5 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js +22 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +135 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js +102 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/esm/lib/v3/understudy/a11yInvocation.js +12 -0
- package/dist/esm/lib/v3/understudy/a11yInvocation.js.map +1 -0
- package/dist/esm/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/esm/lib/v3/understudy/cdp.js +251 -0
- package/dist/esm/lib/v3/understudy/cdp.js.map +1 -0
- package/dist/esm/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/esm/lib/v3/understudy/consoleMessage.js +66 -0
- package/dist/esm/lib/v3/understudy/consoleMessage.js.map +1 -0
- package/dist/esm/lib/v3/understudy/context.d.ts +132 -0
- package/dist/esm/lib/v3/understudy/context.js +687 -0
- package/dist/esm/lib/v3/understudy/context.js.map +1 -0
- package/dist/esm/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/esm/lib/v3/understudy/deepLocator.js +218 -0
- package/dist/esm/lib/v3/understudy/deepLocator.js.map +1 -0
- package/dist/esm/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/esm/lib/v3/understudy/executionContextRegistry.js +83 -0
- package/dist/esm/lib/v3/understudy/executionContextRegistry.js.map +1 -0
- package/dist/esm/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/esm/lib/v3/understudy/fileUploadUtils.js +81 -0
- package/dist/esm/lib/v3/understudy/fileUploadUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/esm/lib/v3/understudy/frame.js +211 -0
- package/dist/esm/lib/v3/understudy/frame.js.map +1 -0
- package/dist/esm/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/esm/lib/v3/understudy/frameLocator.js +255 -0
- package/dist/esm/lib/v3/understudy/frameLocator.js.map +1 -0
- package/dist/esm/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/esm/lib/v3/understudy/frameRegistry.js +298 -0
- package/dist/esm/lib/v3/understudy/frameRegistry.js.map +1 -0
- package/dist/esm/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/esm/lib/v3/understudy/initScripts.js +33 -0
- package/dist/esm/lib/v3/understudy/initScripts.js.map +1 -0
- package/dist/esm/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/esm/lib/v3/understudy/lifecycleWatcher.js +245 -0
- package/dist/esm/lib/v3/understudy/lifecycleWatcher.js.map +1 -0
- package/dist/esm/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/esm/lib/v3/understudy/locator.js +753 -0
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -0
- package/dist/esm/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/esm/lib/v3/understudy/locatorInvocation.js +12 -0
- package/dist/esm/lib/v3/understudy/locatorInvocation.js.map +1 -0
- package/dist/esm/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/esm/lib/v3/understudy/navigationResponseTracker.js +224 -0
- package/dist/esm/lib/v3/understudy/navigationResponseTracker.js.map +1 -0
- package/dist/esm/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/esm/lib/v3/understudy/networkManager.js +306 -0
- package/dist/esm/lib/v3/understudy/networkManager.js.map +1 -0
- package/dist/esm/lib/v3/understudy/page.d.ts +354 -0
- package/dist/esm/lib/v3/understudy/page.js +1941 -0
- package/dist/esm/lib/v3/understudy/page.js.map +1 -0
- package/dist/esm/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/esm/lib/v3/understudy/piercer.js +61 -0
- package/dist/esm/lib/v3/understudy/piercer.js.map +1 -0
- package/dist/esm/lib/v3/understudy/response.d.ts +137 -0
- package/dist/esm/lib/v3/understudy/response.js +330 -0
- package/dist/esm/lib/v3/understudy/response.js.map +1 -0
- package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/esm/lib/v3/understudy/screenshotUtils.js +352 -0
- package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/esm/lib/v3/understudy/selectorResolver.js +296 -0
- package/dist/esm/lib/v3/understudy/selectorResolver.js.map +1 -0
- package/dist/esm/lib/v3/v3.d.ts +191 -0
- package/dist/esm/lib/v3/v3.js +1572 -0
- package/dist/esm/lib/v3/v3.js.map +1 -0
- package/dist/esm/lib/v3/zodCompat.d.ts +12 -0
- package/dist/esm/lib/v3/zodCompat.js +17 -0
- package/dist/esm/lib/v3/zodCompat.js.map +1 -0
- package/dist/esm/lib/v3Evaluator.d.ts +19 -0
- package/dist/esm/lib/v3Evaluator.js +210 -0
- package/dist/esm/lib/v3Evaluator.js.map +1 -0
- package/dist/esm/lib/version.d.ts +5 -0
- package/dist/esm/lib/version.js +6 -0
- package/dist/esm/lib/version.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/tests/agent-execution-model.test.js +139 -0
- package/dist/esm/tests/agent-execution-model.test.js.map +7 -0
- package/dist/esm/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/esm/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/esm/tests/cache-llm-resolution.test.js +187 -0
- package/dist/esm/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/esm/tests/helpers/mockCDPSession.js +27 -0
- package/dist/esm/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/esm/tests/llm-provider.test.js +57 -0
- package/dist/esm/tests/llm-provider.test.js.map +7 -0
- package/dist/esm/tests/model-deprecation.test.js +135 -0
- package/dist/esm/tests/model-deprecation.test.js.map +7 -0
- package/dist/esm/tests/model-utils.test.js +43 -0
- package/dist/esm/tests/model-utils.test.js.map +7 -0
- package/dist/esm/tests/page-snapshot.test.js +36 -0
- package/dist/esm/tests/page-snapshot.test.js.map +7 -0
- package/dist/esm/tests/public-api/export-surface.test.js +53 -0
- package/dist/esm/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/esm/tests/public-api/llm-and-agents.test.js +128 -0
- package/dist/esm/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/esm/tests/public-api/public-error-types.test.js +71 -0
- package/dist/esm/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/esm/tests/public-api/public-types.test.js +74 -0
- package/dist/esm/tests/public-api/public-types.test.js.map +7 -0
- package/dist/esm/tests/public-api/runtime-utils.test.js +31 -0
- package/dist/esm/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/esm/tests/public-api/schema-utils.test.js +78 -0
- package/dist/esm/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/esm/tests/public-api/timeout-error-types.test.js +81 -0
- package/dist/esm/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/esm/tests/public-api/tool-type-export.test.js +25 -0
- package/dist/esm/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/esm/tests/public-api/v3-core.test.js +82 -0
- package/dist/esm/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/esm/tests/safety-confirmation.test.js +134 -0
- package/dist/esm/tests/safety-confirmation.test.js.map +7 -0
- package/dist/esm/tests/snapshot-a11y-resolvers.test.js +348 -0
- package/dist/esm/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/esm/tests/snapshot-a11y-tree-utils.test.js +300 -0
- package/dist/esm/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-capture-orchestration.test.js +381 -0
- package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/esm/tests/snapshot-cbor.test.js +197 -0
- package/dist/esm/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/esm/tests/snapshot-dom-session-builders.test.js +251 -0
- package/dist/esm/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/esm/tests/snapshot-dom-tree-utils.test.js +109 -0
- package/dist/esm/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-focus-selectors-utils.test.js +49 -0
- package/dist/esm/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-frame-merge.test.js +391 -0
- package/dist/esm/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/esm/tests/snapshot-tree-format-utils.test.js +113 -0
- package/dist/esm/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-xpath-utils.test.js +79 -0
- package/dist/esm/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/esm/tests/timeout-handlers.test.js +850 -0
- package/dist/esm/tests/timeout-handlers.test.js.map +7 -0
- package/dist/esm/tests/xpath-parser.test.js +317 -0
- package/dist/esm/tests/xpath-parser.test.js.map +7 -0
- package/dist/esm/tests/xpath-resolver.test.js +73 -0
- package/dist/esm/tests/xpath-resolver.test.js.map +7 -0
- package/dist/esm/tests/zod-enum-compatibility.test.js +97 -0
- package/dist/esm/tests/zod-enum-compatibility.test.js.map +7 -0
- package/package.json +42 -27
- package/dist/index.d.ts +0 -4321
- package/dist/index.js +0 -69585
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
import { v3Logger } from "../logger.js";
|
|
2
|
+
import { CdpConnection } from "./cdp.js";
|
|
3
|
+
import { Page } from "./page.js";
|
|
4
|
+
import { installV3PiercerIntoSession } from "./piercer.js";
|
|
5
|
+
import { v3ScriptContent } from "../dom/build/scriptV3Content.js";
|
|
6
|
+
import { executionContexts } from "./executionContextRegistry.js";
|
|
7
|
+
import { normalizeInitScriptSource } from "./initScripts.js";
|
|
8
|
+
import { TimeoutError, PageNotFoundError } from "../types/public/sdkErrors.js";
|
|
9
|
+
import { getEnvTimeoutMs, withTimeout } from "../timeoutConfig.js";
|
|
10
|
+
function isTopLevelPage(info) {
|
|
11
|
+
const ti = info;
|
|
12
|
+
return info.type === "page" && ti.subtype !== "iframe";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* V3Context
|
|
16
|
+
*
|
|
17
|
+
* Owns the root CDP connection and wires Target/Page events into Page.
|
|
18
|
+
* Maintains one Page per top-level target, adopts OOPIF child sessions into the owner Page,
|
|
19
|
+
* and tracks target→page and (root) frame→target mappings for lookups.
|
|
20
|
+
*
|
|
21
|
+
* IMPORTANT: FrameId → session ownership is managed inside Page (via its FrameRegistry).
|
|
22
|
+
* Context never “guesses” owners; it simply forwards events (with the emitting session)
|
|
23
|
+
* so Page can record the correct owner at event time.
|
|
24
|
+
*/
|
|
25
|
+
export class V3Context {
|
|
26
|
+
conn;
|
|
27
|
+
env;
|
|
28
|
+
apiClient;
|
|
29
|
+
localBrowserLaunchOptions;
|
|
30
|
+
constructor(conn, env = "LOCAL", apiClient = null, localBrowserLaunchOptions = null) {
|
|
31
|
+
this.conn = conn;
|
|
32
|
+
this.env = env;
|
|
33
|
+
this.apiClient = apiClient;
|
|
34
|
+
this.localBrowserLaunchOptions = localBrowserLaunchOptions;
|
|
35
|
+
}
|
|
36
|
+
_piercerInstalled = new Set();
|
|
37
|
+
// Timestamp for most recent popup/open signal
|
|
38
|
+
_lastPopupSignalAt = 0;
|
|
39
|
+
_targetSessionListeners = new Set();
|
|
40
|
+
_sessionInit = new Set();
|
|
41
|
+
pagesByTarget = new Map();
|
|
42
|
+
mainFrameToTarget = new Map();
|
|
43
|
+
sessionOwnerPage = new Map();
|
|
44
|
+
frameOwnerPage = new Map();
|
|
45
|
+
pendingOopifByMainFrame = new Map();
|
|
46
|
+
createdAtByTarget = new Map();
|
|
47
|
+
typeByTarget = new Map();
|
|
48
|
+
_pageOrder = [];
|
|
49
|
+
pendingCreatedTargetUrl = new Map();
|
|
50
|
+
initScripts = [];
|
|
51
|
+
installTargetSessionListeners(session) {
|
|
52
|
+
const sessionId = session.id;
|
|
53
|
+
if (!sessionId)
|
|
54
|
+
return;
|
|
55
|
+
if (this._targetSessionListeners.has(sessionId))
|
|
56
|
+
return;
|
|
57
|
+
this._targetSessionListeners.add(sessionId);
|
|
58
|
+
session.on("Target.attachedToTarget", (evt) => {
|
|
59
|
+
void this.onAttachedToTarget(evt.targetInfo, evt.sessionId);
|
|
60
|
+
});
|
|
61
|
+
session.on("Target.detachedFromTarget", (evt) => {
|
|
62
|
+
this.onDetachedFromTarget(evt.sessionId, evt.targetId ?? null);
|
|
63
|
+
});
|
|
64
|
+
session.on("Target.targetDestroyed", (evt) => {
|
|
65
|
+
this.cleanupByTarget(evt.targetId);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a Context for a given CDP websocket URL and bootstrap target wiring.
|
|
70
|
+
*/
|
|
71
|
+
static async create(wsUrl, opts) {
|
|
72
|
+
const connectTask = async () => {
|
|
73
|
+
const conn = await CdpConnection.connect(wsUrl);
|
|
74
|
+
const ctx = new V3Context(conn, opts?.env ?? "LOCAL", opts?.apiClient ?? null, opts?.localBrowserLaunchOptions ?? null);
|
|
75
|
+
await ctx.bootstrap();
|
|
76
|
+
await ctx.waitForFirstTopLevelPage(5000);
|
|
77
|
+
return ctx;
|
|
78
|
+
};
|
|
79
|
+
const cdpTimeoutMs = opts?.env === "BROWSERBASE"
|
|
80
|
+
? getEnvTimeoutMs("BROWSERBASE_CDP_CONNECT_MAX_MS")
|
|
81
|
+
: undefined;
|
|
82
|
+
if (cdpTimeoutMs) {
|
|
83
|
+
let timedOut = false;
|
|
84
|
+
const connectPromise = connectTask();
|
|
85
|
+
const guarded = withTimeout(connectPromise, cdpTimeoutMs, "Browserbase CDP connect").catch((err) => {
|
|
86
|
+
timedOut = true;
|
|
87
|
+
throw err;
|
|
88
|
+
});
|
|
89
|
+
connectPromise
|
|
90
|
+
.then((ctx) => {
|
|
91
|
+
if (timedOut)
|
|
92
|
+
void ctx.close();
|
|
93
|
+
})
|
|
94
|
+
.catch(() => { });
|
|
95
|
+
return await guarded;
|
|
96
|
+
}
|
|
97
|
+
return await connectTask();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Wait until at least one top-level Page has been created and registered.
|
|
101
|
+
* We poll internal maps that bootstrap/onAttachedToTarget populate.
|
|
102
|
+
*/
|
|
103
|
+
async waitForFirstTopLevelPage(timeoutMs) {
|
|
104
|
+
const deadline = Date.now() + timeoutMs;
|
|
105
|
+
while (Date.now() < deadline) {
|
|
106
|
+
// A top-level Page is present if typeByTarget has an entry "page"
|
|
107
|
+
// and pagesByTarget has the corresponding Page object.
|
|
108
|
+
for (const [tid, ttype] of this.typeByTarget) {
|
|
109
|
+
if (ttype === "page") {
|
|
110
|
+
const p = this.pagesByTarget.get(tid);
|
|
111
|
+
if (p)
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
116
|
+
}
|
|
117
|
+
throw new TimeoutError("waitForFirstTopLevelPage (no top-level Page)", timeoutMs);
|
|
118
|
+
}
|
|
119
|
+
async waitForInitialTopLevelTargets(targetIds, timeoutMs = 3000) {
|
|
120
|
+
if (!targetIds.length)
|
|
121
|
+
return;
|
|
122
|
+
const pending = new Set(targetIds);
|
|
123
|
+
const deadline = Date.now() + timeoutMs;
|
|
124
|
+
while (pending.size && Date.now() < deadline) {
|
|
125
|
+
for (const tid of Array.from(pending)) {
|
|
126
|
+
if (this.pagesByTarget.has(tid)) {
|
|
127
|
+
pending.delete(tid);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (!pending.size)
|
|
131
|
+
return;
|
|
132
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
133
|
+
}
|
|
134
|
+
if (pending.size) {
|
|
135
|
+
v3Logger({
|
|
136
|
+
category: "ctx",
|
|
137
|
+
message: "Timed out waiting for existing top-level targets to attach",
|
|
138
|
+
level: 2,
|
|
139
|
+
auxiliary: {
|
|
140
|
+
remainingTargets: {
|
|
141
|
+
value: JSON.stringify(Array.from(pending)),
|
|
142
|
+
type: "object",
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async ensurePiercer(session) {
|
|
149
|
+
const id = session.id ?? "";
|
|
150
|
+
if (this._piercerInstalled.has(id))
|
|
151
|
+
return true;
|
|
152
|
+
const installed = await installV3PiercerIntoSession(session);
|
|
153
|
+
if (installed) {
|
|
154
|
+
this._piercerInstalled.add(id);
|
|
155
|
+
}
|
|
156
|
+
return installed;
|
|
157
|
+
}
|
|
158
|
+
/** Mark a page target as the most-recent one (active). */
|
|
159
|
+
_pushActive(tid) {
|
|
160
|
+
// remove prior entry if any
|
|
161
|
+
const i = this._pageOrder.indexOf(tid);
|
|
162
|
+
if (i !== -1)
|
|
163
|
+
this._pageOrder.splice(i, 1);
|
|
164
|
+
this._pageOrder.push(tid);
|
|
165
|
+
}
|
|
166
|
+
/** Remove a page target from the recency list (used on close). */
|
|
167
|
+
_removeFromOrder(tid) {
|
|
168
|
+
const i = this._pageOrder.indexOf(tid);
|
|
169
|
+
if (i !== -1)
|
|
170
|
+
this._pageOrder.splice(i, 1);
|
|
171
|
+
}
|
|
172
|
+
/** Return the current active Page (most-recent page that still exists). */
|
|
173
|
+
activePage() {
|
|
174
|
+
// prune any stale ids from the tail
|
|
175
|
+
for (let i = this._pageOrder.length - 1; i >= 0; i--) {
|
|
176
|
+
const tid = this._pageOrder[i];
|
|
177
|
+
const p = this.pagesByTarget.get(tid);
|
|
178
|
+
if (p)
|
|
179
|
+
return p;
|
|
180
|
+
// stale — remove and continue
|
|
181
|
+
this._pageOrder.splice(i, 1);
|
|
182
|
+
}
|
|
183
|
+
// fallback: pick the newest by createdAt if order is empty
|
|
184
|
+
let newestTid;
|
|
185
|
+
let newestTs = -1;
|
|
186
|
+
for (const [tid] of this.pagesByTarget) {
|
|
187
|
+
const ts = this.createdAtByTarget.get(tid) ?? 0;
|
|
188
|
+
if (ts > newestTs) {
|
|
189
|
+
newestTs = ts;
|
|
190
|
+
newestTid = tid;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return newestTid ? this.pagesByTarget.get(newestTid) : undefined;
|
|
194
|
+
}
|
|
195
|
+
/** Explicitly mark a known Page as the most-recent active page (and focus it). */
|
|
196
|
+
setActivePage(page) {
|
|
197
|
+
let targetId = page.targetId();
|
|
198
|
+
if (this.pagesByTarget.get(targetId) !== page) {
|
|
199
|
+
const lookup = this.findTargetIdByPage(page);
|
|
200
|
+
if (!lookup) {
|
|
201
|
+
v3Logger({
|
|
202
|
+
category: "ctx",
|
|
203
|
+
message: "setActivePage called with unknown Page",
|
|
204
|
+
level: 2,
|
|
205
|
+
auxiliary: {
|
|
206
|
+
targetId: { value: String(targetId), type: "string" },
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
targetId = lookup;
|
|
212
|
+
}
|
|
213
|
+
this._pushActive(targetId);
|
|
214
|
+
// Bring the tab to the foreground in headful Chrome (best effort).
|
|
215
|
+
void this.conn.send("Target.activateTarget", { targetId }).catch(() => { });
|
|
216
|
+
}
|
|
217
|
+
async addInitScript(script, arg) {
|
|
218
|
+
const source = await normalizeInitScriptSource(script, arg);
|
|
219
|
+
if (this.initScripts.includes(source))
|
|
220
|
+
return;
|
|
221
|
+
this.initScripts.push(source);
|
|
222
|
+
const pages = this.pages();
|
|
223
|
+
await Promise.all(pages.map((page) => page.registerInitScript(source)));
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Return top-level `Page`s (oldest → newest). OOPIF targets are not included.
|
|
227
|
+
*/
|
|
228
|
+
pages() {
|
|
229
|
+
const rows = [];
|
|
230
|
+
for (const [tid, page] of this.pagesByTarget) {
|
|
231
|
+
if (this.typeByTarget.get(tid) === "page") {
|
|
232
|
+
rows.push({ tid, page, created: this.createdAtByTarget.get(tid) ?? 0 });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
rows.sort((a, b) => a.created - b.created);
|
|
236
|
+
return rows.map((r) => r.page);
|
|
237
|
+
}
|
|
238
|
+
async applyInitScriptsToPage(page, opts) {
|
|
239
|
+
if (opts?.seedOnly) {
|
|
240
|
+
for (const source of this.initScripts) {
|
|
241
|
+
page.seedInitScript(source);
|
|
242
|
+
}
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
for (const source of this.initScripts) {
|
|
246
|
+
await page.registerInitScript(source);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Resolve an owning `Page` by the **top-level main frame id**.
|
|
251
|
+
* Note: child (OOPIF) roots are intentionally not present in this mapping.
|
|
252
|
+
*/
|
|
253
|
+
resolvePageByMainFrameId(frameId) {
|
|
254
|
+
const targetId = this.mainFrameToTarget.get(frameId);
|
|
255
|
+
return targetId ? this.pagesByTarget.get(targetId) : undefined;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Serialize the full frame tree for a given top-level main frame id.
|
|
259
|
+
*/
|
|
260
|
+
async getFullFrameTreeByMainFrameId(rootMainFrameId) {
|
|
261
|
+
const owner = this.resolvePageByMainFrameId(rootMainFrameId);
|
|
262
|
+
if (!owner)
|
|
263
|
+
throw new PageNotFoundError(`mainFrameId=${rootMainFrameId}`);
|
|
264
|
+
return owner.asProtocolFrameTree(rootMainFrameId);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create a new top-level page (tab) with the given URL and return its Page object.
|
|
268
|
+
* Waits until the target is attached and registered.
|
|
269
|
+
*/
|
|
270
|
+
async newPage(url = "about:blank") {
|
|
271
|
+
const targetUrl = String(url ?? "about:blank");
|
|
272
|
+
const { targetId } = await this.conn.send("Target.createTarget",
|
|
273
|
+
// Create at about:blank so init scripts can install before first real navigation.
|
|
274
|
+
{ url: "about:blank" });
|
|
275
|
+
this.pendingCreatedTargetUrl.set(targetId, "about:blank");
|
|
276
|
+
// Best-effort bring-to-front
|
|
277
|
+
await this.conn.send("Target.activateTarget", { targetId }).catch(() => { });
|
|
278
|
+
const deadline = Date.now() + 5000;
|
|
279
|
+
while (Date.now() < deadline) {
|
|
280
|
+
const page = this.pagesByTarget.get(targetId);
|
|
281
|
+
if (page) {
|
|
282
|
+
// we created at about:blank; navigate only after attach so init scripts run
|
|
283
|
+
// on the first real document. Fire-and-forget so newPage() resolves on attach.
|
|
284
|
+
if (targetUrl !== "about:blank") {
|
|
285
|
+
// Seed requested URL into the page cache before navigation events arrive.
|
|
286
|
+
page.seedCurrentUrl(targetUrl);
|
|
287
|
+
void page
|
|
288
|
+
.sendCDP("Page.navigate", { url: targetUrl })
|
|
289
|
+
.catch(() => { });
|
|
290
|
+
}
|
|
291
|
+
return page;
|
|
292
|
+
}
|
|
293
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
294
|
+
}
|
|
295
|
+
throw new TimeoutError(`newPage: target not attached (${targetId})`, 5000);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Close CDP and clear all mappings. Best-effort cleanup.
|
|
299
|
+
*/
|
|
300
|
+
async close() {
|
|
301
|
+
await this.conn.close();
|
|
302
|
+
this.pagesByTarget.clear();
|
|
303
|
+
this.mainFrameToTarget.clear();
|
|
304
|
+
this.sessionOwnerPage.clear();
|
|
305
|
+
this.frameOwnerPage.clear();
|
|
306
|
+
this.pendingOopifByMainFrame.clear();
|
|
307
|
+
this.createdAtByTarget.clear();
|
|
308
|
+
this.typeByTarget.clear();
|
|
309
|
+
this.pendingCreatedTargetUrl.clear();
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Bootstrap target lifecycle:
|
|
313
|
+
* - Attach to existing targets.
|
|
314
|
+
* - Handle auto-attach events.
|
|
315
|
+
* - Clean up on detach/destroy.
|
|
316
|
+
*/
|
|
317
|
+
async bootstrap() {
|
|
318
|
+
// Live attach via auto-attach (normal path)
|
|
319
|
+
this.conn.on("Target.attachedToTarget", async (evt) => {
|
|
320
|
+
await this.onAttachedToTarget(evt.targetInfo, evt.sessionId);
|
|
321
|
+
});
|
|
322
|
+
// Live detach (clean up session from owner page & frame graph)
|
|
323
|
+
this.conn.on("Target.detachedFromTarget", (evt) => {
|
|
324
|
+
this.onDetachedFromTarget(evt.sessionId, evt.targetId ?? null);
|
|
325
|
+
});
|
|
326
|
+
// Destroyed targets (fallback cleanup by targetId)
|
|
327
|
+
this.conn.on("Target.targetDestroyed", (evt) => {
|
|
328
|
+
this.cleanupByTarget(evt.targetId);
|
|
329
|
+
});
|
|
330
|
+
this.conn.on("Target.targetCreated", async (evt) => {
|
|
331
|
+
const info = evt.targetInfo;
|
|
332
|
+
// Note popups to help activePage settle
|
|
333
|
+
const ti = info;
|
|
334
|
+
if (info.type === "page" && (ti?.openerId || ti?.openerFrameId)) {
|
|
335
|
+
this._notePopupSignal();
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
// Only enable auto-attach after listeners are ready so replayed targets are captured.
|
|
339
|
+
await this.conn.enableAutoAttach();
|
|
340
|
+
const targets = await this.conn.getTargets();
|
|
341
|
+
for (const t of targets) {
|
|
342
|
+
if (t.attached)
|
|
343
|
+
continue; // auto-attach already handled this target
|
|
344
|
+
try {
|
|
345
|
+
await this.conn.attachToTarget(t.targetId);
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
// ignore attach race
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
const topLevelTargetIds = targets
|
|
352
|
+
.filter((t) => isTopLevelPage(t))
|
|
353
|
+
.map((t) => t.targetId);
|
|
354
|
+
await this.waitForInitialTopLevelTargets(topLevelTargetIds);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Handle a newly attached target (top-level or potential OOPIF):
|
|
358
|
+
* - Enable Page domain and lifecycle events.
|
|
359
|
+
* - If top-level → create Page, wire listeners, resume.
|
|
360
|
+
* - Else → probe child root frame id via `Page.getFrameTree` and adopt immediately
|
|
361
|
+
* if the parent is known; otherwise stage until parent `frameAttached`.
|
|
362
|
+
* - Resume the target only after listeners are wired.
|
|
363
|
+
*/
|
|
364
|
+
async onAttachedToTarget(info, sessionId) {
|
|
365
|
+
// Workers are ignored by Stagehand, but with waitForDebuggerOnStart enabled
|
|
366
|
+
// they still need to be resumed so we don't leave them paused.
|
|
367
|
+
if (info.type === "worker" ||
|
|
368
|
+
info.type === "service_worker" ||
|
|
369
|
+
info.type === "shared_worker") {
|
|
370
|
+
const session = this.conn.getSession(sessionId);
|
|
371
|
+
if (session) {
|
|
372
|
+
await session.send("Runtime.runIfWaitingForDebugger").catch(() => { });
|
|
373
|
+
}
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
const session = this.conn.getSession(sessionId);
|
|
377
|
+
if (!session)
|
|
378
|
+
return;
|
|
379
|
+
// Init guard
|
|
380
|
+
if (this._sessionInit.has(sessionId))
|
|
381
|
+
return;
|
|
382
|
+
this._sessionInit.add(sessionId);
|
|
383
|
+
this.installTargetSessionListeners(session);
|
|
384
|
+
// Register for Runtime events before enabling it so we don't miss initial contexts.
|
|
385
|
+
executionContexts.attachSession(session);
|
|
386
|
+
// Ensure we only resume once even if multiple code paths hit finally.
|
|
387
|
+
let resumed = false;
|
|
388
|
+
const resume = async () => {
|
|
389
|
+
if (resumed)
|
|
390
|
+
return;
|
|
391
|
+
resumed = true;
|
|
392
|
+
// waitForDebuggerOnStart pauses new targets; resume once we've done
|
|
393
|
+
// any "must happen before first document" work.
|
|
394
|
+
await session.send("Runtime.runIfWaitingForDebugger").catch(() => { });
|
|
395
|
+
};
|
|
396
|
+
// Install any context-level init scripts as early as possible on this session.
|
|
397
|
+
// If this throws, we still resume the target but avoid re-installing later.
|
|
398
|
+
let scriptsInstalled = true;
|
|
399
|
+
let piercerPreRegistered = false;
|
|
400
|
+
const installPromises = [];
|
|
401
|
+
try {
|
|
402
|
+
const send = (method, params) => session.send(method, params).catch(() => { });
|
|
403
|
+
// make sure init scripts land before any subframe work.
|
|
404
|
+
installPromises.push(send("Page.enable"));
|
|
405
|
+
installPromises.push(send("Runtime.enable"));
|
|
406
|
+
installPromises.push(session
|
|
407
|
+
.send("Target.setAutoAttach", {
|
|
408
|
+
autoAttach: true,
|
|
409
|
+
waitForDebuggerOnStart: true,
|
|
410
|
+
flatten: true,
|
|
411
|
+
})
|
|
412
|
+
.catch(() => { }));
|
|
413
|
+
// Send init scripts only after auto-attach has been issued.
|
|
414
|
+
if (this.initScripts.length) {
|
|
415
|
+
for (const source of this.initScripts) {
|
|
416
|
+
installPromises.push(session.send("Page.addScriptToEvaluateOnNewDocument", {
|
|
417
|
+
source,
|
|
418
|
+
runImmediately: true,
|
|
419
|
+
}));
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// register piercer (shadow-DOM hook) before resume so it runs
|
|
423
|
+
// before page scripts
|
|
424
|
+
installPromises.push(session
|
|
425
|
+
.send("Page.addScriptToEvaluateOnNewDocument", {
|
|
426
|
+
source: v3ScriptContent,
|
|
427
|
+
runImmediately: true,
|
|
428
|
+
})
|
|
429
|
+
.then(() => {
|
|
430
|
+
piercerPreRegistered = true;
|
|
431
|
+
})
|
|
432
|
+
.catch(() => { }));
|
|
433
|
+
installPromises.push(resume());
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
scriptsInstalled = false;
|
|
437
|
+
}
|
|
438
|
+
if (installPromises.length) {
|
|
439
|
+
const results = await Promise.allSettled(installPromises);
|
|
440
|
+
if (results.some((r) => r.status === "rejected")) {
|
|
441
|
+
scriptsInstalled = false;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Only mark the piercer as installed when the pre-registration actually
|
|
445
|
+
// succeeded. This lets ensurePiercer() short-circuit (avoiding sequential
|
|
446
|
+
// CDP round-trips that delay Page.create / installFrameEventBridges and
|
|
447
|
+
// cause same-process iframe frame-events to be missed) while still falling
|
|
448
|
+
// back to the full install path when registration failed.
|
|
449
|
+
if (piercerPreRegistered) {
|
|
450
|
+
this._piercerInstalled.add(sessionId);
|
|
451
|
+
}
|
|
452
|
+
try {
|
|
453
|
+
const piercerReady = await this.ensurePiercer(session);
|
|
454
|
+
if (!piercerReady)
|
|
455
|
+
return;
|
|
456
|
+
await session
|
|
457
|
+
.send("Page.setLifecycleEventsEnabled", { enabled: true })
|
|
458
|
+
.catch(() => { });
|
|
459
|
+
// Top-level handling
|
|
460
|
+
if (isTopLevelPage(info)) {
|
|
461
|
+
const page = await Page.create(this.conn, session, info.targetId, this.apiClient, this.localBrowserLaunchOptions, this.env === "BROWSERBASE");
|
|
462
|
+
this.wireSessionToOwnerPage(sessionId, page);
|
|
463
|
+
this.pagesByTarget.set(info.targetId, page);
|
|
464
|
+
this.mainFrameToTarget.set(page.mainFrameId(), info.targetId);
|
|
465
|
+
this.sessionOwnerPage.set(sessionId, page);
|
|
466
|
+
this.frameOwnerPage.set(page.mainFrameId(), page);
|
|
467
|
+
this.typeByTarget.set(info.targetId, "page");
|
|
468
|
+
if (!this.createdAtByTarget.has(info.targetId)) {
|
|
469
|
+
this.createdAtByTarget.set(info.targetId, Date.now());
|
|
470
|
+
}
|
|
471
|
+
const pendingSeedUrl = this.pendingCreatedTargetUrl.get(info.targetId);
|
|
472
|
+
this.pendingCreatedTargetUrl.delete(info.targetId);
|
|
473
|
+
page.seedCurrentUrl(pendingSeedUrl ?? info.url ?? "");
|
|
474
|
+
this._pushActive(info.targetId);
|
|
475
|
+
this.installFrameEventBridges(sessionId, page);
|
|
476
|
+
// If we already installed scripts at the session level, only seed the
|
|
477
|
+
// Page's registry to avoid double-installing DOMContentLoaded handlers.
|
|
478
|
+
await this.applyInitScriptsToPage(page, {
|
|
479
|
+
seedOnly: scriptsInstalled,
|
|
480
|
+
});
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
// Child (iframe / OOPIF)
|
|
484
|
+
try {
|
|
485
|
+
const { frameTree } = await session.send("Page.getFrameTree");
|
|
486
|
+
const childMainId = frameTree.frame.id;
|
|
487
|
+
// Try to find owner Page now (it may already have the node in its tree)
|
|
488
|
+
let owner = this.frameOwnerPage.get(childMainId);
|
|
489
|
+
if (!owner) {
|
|
490
|
+
for (const p of this.pagesByTarget.values()) {
|
|
491
|
+
const tree = p.asProtocolFrameTree(p.mainFrameId());
|
|
492
|
+
const has = (function find(n) {
|
|
493
|
+
if (n.frame.id === childMainId)
|
|
494
|
+
return true;
|
|
495
|
+
for (const c of n.childFrames ?? [])
|
|
496
|
+
if (find(c))
|
|
497
|
+
return true;
|
|
498
|
+
return false;
|
|
499
|
+
})(tree);
|
|
500
|
+
if (has) {
|
|
501
|
+
owner = p;
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
if (owner) {
|
|
507
|
+
owner.adoptOopifSession(session, childMainId);
|
|
508
|
+
this.sessionOwnerPage.set(sessionId, owner);
|
|
509
|
+
this.installFrameEventBridges(sessionId, owner);
|
|
510
|
+
// Prime the execution-context registry so later lookups succeed even if
|
|
511
|
+
// the frame navigates before we issue a command.
|
|
512
|
+
void executionContexts
|
|
513
|
+
.waitForMainWorld(session, childMainId)
|
|
514
|
+
.catch(() => { });
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
this.pendingOopifByMainFrame.set(childMainId, sessionId);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
catch {
|
|
521
|
+
// page.getFrameTree failed. Most likely was an ad iframe
|
|
522
|
+
// that opened & closed before we could attach. ignore
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
finally {
|
|
526
|
+
await resume();
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Detach handler:
|
|
531
|
+
* - Remove child session ownership and prune its subtree.
|
|
532
|
+
* - If a top-level target, cleanup its `Page` and mappings.
|
|
533
|
+
* - Drop any staged child for this session.
|
|
534
|
+
*/
|
|
535
|
+
onDetachedFromTarget(sessionId, targetId) {
|
|
536
|
+
const owner = this.sessionOwnerPage.get(sessionId);
|
|
537
|
+
if (owner) {
|
|
538
|
+
owner.detachOopifSession(sessionId);
|
|
539
|
+
this.sessionOwnerPage.delete(sessionId);
|
|
540
|
+
}
|
|
541
|
+
if (targetId && this.pagesByTarget.has(targetId)) {
|
|
542
|
+
this.cleanupByTarget(targetId);
|
|
543
|
+
}
|
|
544
|
+
for (const [fid, sid] of Array.from(this.pendingOopifByMainFrame.entries())) {
|
|
545
|
+
if (sid === sessionId)
|
|
546
|
+
this.pendingOopifByMainFrame.delete(fid);
|
|
547
|
+
}
|
|
548
|
+
this._targetSessionListeners.delete(sessionId);
|
|
549
|
+
this._sessionInit.delete(sessionId);
|
|
550
|
+
this._piercerInstalled.delete(sessionId);
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Cleanup a top-level Page by target id, removing its root and staged children.
|
|
554
|
+
*/
|
|
555
|
+
cleanupByTarget(targetId) {
|
|
556
|
+
const page = this.pagesByTarget.get(targetId);
|
|
557
|
+
if (!page)
|
|
558
|
+
return;
|
|
559
|
+
const mainId = page.mainFrameId();
|
|
560
|
+
this.mainFrameToTarget.delete(mainId);
|
|
561
|
+
this.frameOwnerPage.delete(mainId);
|
|
562
|
+
for (const [sid, p] of Array.from(this.sessionOwnerPage.entries())) {
|
|
563
|
+
if (p === page)
|
|
564
|
+
this.sessionOwnerPage.delete(sid);
|
|
565
|
+
}
|
|
566
|
+
for (const [fid] of Array.from(this.pendingOopifByMainFrame.entries())) {
|
|
567
|
+
const owner = this.frameOwnerPage.get(fid);
|
|
568
|
+
if (!owner || owner === page)
|
|
569
|
+
this.pendingOopifByMainFrame.delete(fid);
|
|
570
|
+
}
|
|
571
|
+
this._removeFromOrder(targetId);
|
|
572
|
+
this.pagesByTarget.delete(targetId);
|
|
573
|
+
this.createdAtByTarget.delete(targetId);
|
|
574
|
+
this.typeByTarget.delete(targetId);
|
|
575
|
+
this.pendingCreatedTargetUrl.delete(targetId);
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Wire Page-domain frame events for a session into the owning Page & mappings.
|
|
579
|
+
* We forward the *emitting session* with every event so Page can stamp ownership precisely.
|
|
580
|
+
*/
|
|
581
|
+
installFrameEventBridges(sessionId, owner) {
|
|
582
|
+
const session = this.conn.getSession(sessionId);
|
|
583
|
+
if (!session)
|
|
584
|
+
return;
|
|
585
|
+
session.on("Page.frameAttached", (evt) => {
|
|
586
|
+
const { frameId, parentFrameId } = evt;
|
|
587
|
+
owner.onFrameAttached(frameId, parentFrameId ?? null, session);
|
|
588
|
+
// If we were waiting for this id (OOPIF child), adopt now.
|
|
589
|
+
const pendingChildSessionId = this.pendingOopifByMainFrame.get(frameId);
|
|
590
|
+
if (pendingChildSessionId) {
|
|
591
|
+
const child = this.conn.getSession(pendingChildSessionId);
|
|
592
|
+
if (child) {
|
|
593
|
+
owner.adoptOopifSession(child, frameId);
|
|
594
|
+
this.sessionOwnerPage.set(child.id, owner);
|
|
595
|
+
// Wire bridges for the child so its Page events keep flowing.
|
|
596
|
+
this.installFrameEventBridges(pendingChildSessionId, owner);
|
|
597
|
+
}
|
|
598
|
+
this.pendingOopifByMainFrame.delete(frameId);
|
|
599
|
+
}
|
|
600
|
+
// Track Page ownership for quick reverse lookups (debug helpers).
|
|
601
|
+
this.frameOwnerPage.set(frameId, owner);
|
|
602
|
+
// Root handoff: keep mainFrameToTarget aligned for the page
|
|
603
|
+
if (!parentFrameId) {
|
|
604
|
+
const newRoot = owner.mainFrameId();
|
|
605
|
+
const topTargetId = this.findTargetIdByPage(owner);
|
|
606
|
+
if (topTargetId) {
|
|
607
|
+
this.mainFrameToTarget.set(newRoot, topTargetId);
|
|
608
|
+
}
|
|
609
|
+
this.frameOwnerPage.set(newRoot, owner);
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
session.on("Page.frameDetached", (evt) => {
|
|
613
|
+
owner.onFrameDetached(evt.frameId, evt.reason ?? "remove");
|
|
614
|
+
if (evt.reason !== "swap") {
|
|
615
|
+
this.frameOwnerPage.delete(evt.frameId);
|
|
616
|
+
}
|
|
617
|
+
});
|
|
618
|
+
session.on("Page.frameNavigated", (evt) => {
|
|
619
|
+
owner.onFrameNavigated(evt.frame, session);
|
|
620
|
+
});
|
|
621
|
+
session.on("Page.navigatedWithinDocument", (evt) => {
|
|
622
|
+
owner.onNavigatedWithinDocument(evt.frameId, evt.url, session);
|
|
623
|
+
});
|
|
624
|
+
// Observe window.open to anticipate default page changes
|
|
625
|
+
session.on("Page.windowOpen", () => {
|
|
626
|
+
this._notePopupSignal();
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Register that a session belongs to a Page (used by event routing).
|
|
631
|
+
*/
|
|
632
|
+
wireSessionToOwnerPage(sessionId, owner) {
|
|
633
|
+
this.sessionOwnerPage.set(sessionId, owner);
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Utility: reverse-lookup the top-level target id that owns a given Page.
|
|
637
|
+
*/
|
|
638
|
+
findTargetIdByPage(page) {
|
|
639
|
+
for (const [tid, p] of this.pagesByTarget) {
|
|
640
|
+
if (p === page)
|
|
641
|
+
return tid;
|
|
642
|
+
}
|
|
643
|
+
return undefined;
|
|
644
|
+
}
|
|
645
|
+
_notePopupSignal() {
|
|
646
|
+
this._lastPopupSignalAt = Date.now();
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Await the current active page, waiting briefly if a popup/open was just triggered.
|
|
650
|
+
* Normal path returns immediately; popup path waits up to timeoutMs for the new page.
|
|
651
|
+
*/
|
|
652
|
+
async awaitActivePage(timeoutMs) {
|
|
653
|
+
const defaultTimeout = this.env === "BROWSERBASE" ? 4000 : 2000;
|
|
654
|
+
timeoutMs = timeoutMs ?? defaultTimeout;
|
|
655
|
+
// If a popup was just triggered, Chrome (especially on Browserbase)
|
|
656
|
+
// may briefly pause new targets at document start ("waiting for debugger").
|
|
657
|
+
const recentWindowMs = this.env === "BROWSERBASE" ? 1000 : 300;
|
|
658
|
+
const now = Date.now();
|
|
659
|
+
const hasRecentPopup = now - this._lastPopupSignalAt <= recentWindowMs;
|
|
660
|
+
const immediate = this.activePage();
|
|
661
|
+
if (!hasRecentPopup && immediate)
|
|
662
|
+
return immediate;
|
|
663
|
+
const deadline = now + timeoutMs;
|
|
664
|
+
while (Date.now() < deadline) {
|
|
665
|
+
// Prefer most-recent by createdAt
|
|
666
|
+
let newestTid;
|
|
667
|
+
let newestTs = -1;
|
|
668
|
+
for (const [tid] of this.pagesByTarget) {
|
|
669
|
+
const ts = this.createdAtByTarget.get(tid) ?? 0;
|
|
670
|
+
if (ts > newestTs) {
|
|
671
|
+
newestTs = ts;
|
|
672
|
+
newestTid = tid;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
if (newestTid) {
|
|
676
|
+
const p = this.pagesByTarget.get(newestTid);
|
|
677
|
+
if (p && newestTs >= this._lastPopupSignalAt)
|
|
678
|
+
return p;
|
|
679
|
+
}
|
|
680
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
681
|
+
}
|
|
682
|
+
if (immediate)
|
|
683
|
+
return immediate;
|
|
684
|
+
throw new PageNotFoundError("awaitActivePage: no page available");
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
//# sourceMappingURL=context.js.map
|