@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,283 @@
|
|
|
1
|
+
import { resolveXPathAtIndex } from "./xpathResolver.js";
|
|
2
|
+
const parseTargetIndex = (value) => {
|
|
3
|
+
const num = Number(value ?? 0);
|
|
4
|
+
if (!Number.isFinite(num) || num < 0)
|
|
5
|
+
return 0;
|
|
6
|
+
return Math.floor(num);
|
|
7
|
+
};
|
|
8
|
+
const collectCssMatches = (selector, limit) => {
|
|
9
|
+
if (!selector)
|
|
10
|
+
return [];
|
|
11
|
+
const seenRoots = new WeakSet();
|
|
12
|
+
const seenElements = new Set();
|
|
13
|
+
const results = [];
|
|
14
|
+
const queue = [document];
|
|
15
|
+
const visit = (root) => {
|
|
16
|
+
if (!root || seenRoots.has(root) || results.length >= limit)
|
|
17
|
+
return;
|
|
18
|
+
seenRoots.add(root);
|
|
19
|
+
try {
|
|
20
|
+
const matches = root.querySelectorAll(selector);
|
|
21
|
+
for (const element of matches) {
|
|
22
|
+
if (seenElements.has(element))
|
|
23
|
+
continue;
|
|
24
|
+
seenElements.add(element);
|
|
25
|
+
results.push(element);
|
|
26
|
+
if (results.length >= limit)
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// ignore querySelectorAll issues
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const ownerDocument = root instanceof Document
|
|
35
|
+
? root
|
|
36
|
+
: (root.host?.ownerDocument ?? document);
|
|
37
|
+
const walker = ownerDocument.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
38
|
+
let node;
|
|
39
|
+
while ((node = walker.nextNode())) {
|
|
40
|
+
if (!(node instanceof Element))
|
|
41
|
+
continue;
|
|
42
|
+
const open = node.shadowRoot;
|
|
43
|
+
if (open)
|
|
44
|
+
queue.push(open);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// ignore traversal issues
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
while (queue.length && results.length < limit) {
|
|
52
|
+
const next = queue.shift();
|
|
53
|
+
if (next)
|
|
54
|
+
visit(next);
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
};
|
|
58
|
+
export function resolveCssSelector(selectorRaw, targetIndexRaw) {
|
|
59
|
+
const selector = String(selectorRaw ?? "").trim();
|
|
60
|
+
if (!selector)
|
|
61
|
+
return null;
|
|
62
|
+
const targetIndex = parseTargetIndex(targetIndexRaw);
|
|
63
|
+
const matches = collectCssMatches(selector, targetIndex + 1);
|
|
64
|
+
return matches[targetIndex] ?? null;
|
|
65
|
+
}
|
|
66
|
+
export function resolveCssSelectorPierce(selectorRaw, targetIndexRaw) {
|
|
67
|
+
const selector = String(selectorRaw ?? "").trim();
|
|
68
|
+
if (!selector)
|
|
69
|
+
return null;
|
|
70
|
+
const targetIndex = parseTargetIndex(targetIndexRaw);
|
|
71
|
+
const backdoor = window.__stagehandV3__;
|
|
72
|
+
if (!backdoor || typeof backdoor.getClosedRoot !== "function") {
|
|
73
|
+
const matches = collectCssMatches(selector, targetIndex + 1);
|
|
74
|
+
return matches[targetIndex] ?? null;
|
|
75
|
+
}
|
|
76
|
+
const getClosedRoot = (host) => {
|
|
77
|
+
try {
|
|
78
|
+
return backdoor.getClosedRoot(host) ?? null;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const seenRoots = new WeakSet();
|
|
85
|
+
const seenElements = new Set();
|
|
86
|
+
const results = [];
|
|
87
|
+
const queue = [document];
|
|
88
|
+
const visit = (root) => {
|
|
89
|
+
if (!root || seenRoots.has(root) || results.length >= targetIndex + 1)
|
|
90
|
+
return;
|
|
91
|
+
seenRoots.add(root);
|
|
92
|
+
try {
|
|
93
|
+
const matches = root.querySelectorAll(selector);
|
|
94
|
+
for (const element of matches) {
|
|
95
|
+
if (seenElements.has(element))
|
|
96
|
+
continue;
|
|
97
|
+
seenElements.add(element);
|
|
98
|
+
results.push(element);
|
|
99
|
+
if (results.length >= targetIndex + 1)
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// ignore query errors
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const ownerDocument = root instanceof Document
|
|
108
|
+
? root
|
|
109
|
+
: (root.host?.ownerDocument ?? document);
|
|
110
|
+
const walker = ownerDocument.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
111
|
+
let node;
|
|
112
|
+
while ((node = walker.nextNode())) {
|
|
113
|
+
if (!(node instanceof Element))
|
|
114
|
+
continue;
|
|
115
|
+
const open = node.shadowRoot;
|
|
116
|
+
if (open)
|
|
117
|
+
queue.push(open);
|
|
118
|
+
const closed = getClosedRoot(node);
|
|
119
|
+
if (closed)
|
|
120
|
+
queue.push(closed);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// ignore traversal issues
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
while (queue.length && results.length < targetIndex + 1) {
|
|
128
|
+
const next = queue.shift();
|
|
129
|
+
if (next)
|
|
130
|
+
visit(next);
|
|
131
|
+
}
|
|
132
|
+
return results[targetIndex] ?? null;
|
|
133
|
+
}
|
|
134
|
+
export function resolveTextSelector(rawNeedle, targetIndexRaw) {
|
|
135
|
+
const needle = String(rawNeedle ?? "");
|
|
136
|
+
if (!needle)
|
|
137
|
+
return null;
|
|
138
|
+
const needleLc = needle.toLowerCase();
|
|
139
|
+
const targetIndex = parseTargetIndex(targetIndexRaw);
|
|
140
|
+
const skipTags = new Set([
|
|
141
|
+
"SCRIPT",
|
|
142
|
+
"STYLE",
|
|
143
|
+
"TEMPLATE",
|
|
144
|
+
"NOSCRIPT",
|
|
145
|
+
"HEAD",
|
|
146
|
+
"TITLE",
|
|
147
|
+
"LINK",
|
|
148
|
+
"META",
|
|
149
|
+
"HTML",
|
|
150
|
+
"BODY",
|
|
151
|
+
]);
|
|
152
|
+
const shouldSkip = (node) => {
|
|
153
|
+
if (!node)
|
|
154
|
+
return false;
|
|
155
|
+
const tag = node.tagName?.toUpperCase() ?? "";
|
|
156
|
+
return skipTags.has(tag);
|
|
157
|
+
};
|
|
158
|
+
const extractText = (node) => {
|
|
159
|
+
try {
|
|
160
|
+
if (shouldSkip(node))
|
|
161
|
+
return "";
|
|
162
|
+
const inner = node.innerText;
|
|
163
|
+
if (typeof inner === "string" && inner.trim())
|
|
164
|
+
return inner.trim();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// ignore
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const text = node.textContent;
|
|
171
|
+
if (typeof text === "string")
|
|
172
|
+
return text.trim();
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// ignore
|
|
176
|
+
}
|
|
177
|
+
return "";
|
|
178
|
+
};
|
|
179
|
+
const matches = (node) => {
|
|
180
|
+
const text = extractText(node);
|
|
181
|
+
return !!text && text.toLowerCase().includes(needleLc);
|
|
182
|
+
};
|
|
183
|
+
const backdoor = window.__stagehandV3__;
|
|
184
|
+
const getClosedRoot = backdoor && typeof backdoor.getClosedRoot === "function"
|
|
185
|
+
? (host) => {
|
|
186
|
+
try {
|
|
187
|
+
return backdoor.getClosedRoot(host) ?? null;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
: (host) => {
|
|
194
|
+
void host;
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
const seen = new WeakSet();
|
|
198
|
+
const queue = [];
|
|
199
|
+
const matchesList = [];
|
|
200
|
+
const enqueue = (node) => {
|
|
201
|
+
if (!node || seen.has(node))
|
|
202
|
+
return;
|
|
203
|
+
seen.add(node);
|
|
204
|
+
queue.push(node);
|
|
205
|
+
};
|
|
206
|
+
const walkerFor = (root) => {
|
|
207
|
+
try {
|
|
208
|
+
const doc = root instanceof Document
|
|
209
|
+
? root
|
|
210
|
+
: (root?.ownerDocument ?? document);
|
|
211
|
+
return doc.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
enqueue(document);
|
|
218
|
+
while (queue.length) {
|
|
219
|
+
const root = queue.shift();
|
|
220
|
+
if (!root)
|
|
221
|
+
continue;
|
|
222
|
+
if (root instanceof Element && matches(root)) {
|
|
223
|
+
matchesList.push({
|
|
224
|
+
element: root,
|
|
225
|
+
tag: root.tagName ?? "",
|
|
226
|
+
id: root.id ?? "",
|
|
227
|
+
className: root.className ?? "",
|
|
228
|
+
text: extractText(root),
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
const walker = walkerFor(root);
|
|
232
|
+
if (!walker)
|
|
233
|
+
continue;
|
|
234
|
+
let node;
|
|
235
|
+
while ((node = walker.nextNode())) {
|
|
236
|
+
if (!(node instanceof Element))
|
|
237
|
+
continue;
|
|
238
|
+
if (matches(node)) {
|
|
239
|
+
matchesList.push({
|
|
240
|
+
element: node,
|
|
241
|
+
tag: node.tagName ?? "",
|
|
242
|
+
id: node.id ?? "",
|
|
243
|
+
className: node.className ?? "",
|
|
244
|
+
text: extractText(node),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
const open = node.shadowRoot;
|
|
248
|
+
if (open)
|
|
249
|
+
enqueue(open);
|
|
250
|
+
const closed = getClosedRoot(node);
|
|
251
|
+
if (closed)
|
|
252
|
+
enqueue(closed);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const innermost = [];
|
|
256
|
+
for (const item of matchesList) {
|
|
257
|
+
const el = item.element;
|
|
258
|
+
let skip = false;
|
|
259
|
+
for (const other of matchesList) {
|
|
260
|
+
if (item === other)
|
|
261
|
+
continue;
|
|
262
|
+
try {
|
|
263
|
+
if (el.contains(other.element)) {
|
|
264
|
+
skip = true;
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// ignore containment errors
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (!skip) {
|
|
273
|
+
innermost.push(item);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
const target = innermost[targetIndex];
|
|
277
|
+
return target?.element ?? null;
|
|
278
|
+
}
|
|
279
|
+
export function resolveXPathMainWorld(rawXp, targetIndexRaw) {
|
|
280
|
+
const targetIndex = parseTargetIndex(targetIndexRaw);
|
|
281
|
+
return resolveXPathAtIndex(rawXp, targetIndex, { pierceShadow: true });
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../../../../../lib/v3/dom/locatorScripts/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveXPathAtIndex } from \"./xpathResolver.js\";\n\nconst parseTargetIndex = (value: unknown): number => {\n const num = Number(value ?? 0);\n if (!Number.isFinite(num) || num < 0) return 0;\n return Math.floor(num);\n};\n\nconst collectCssMatches = (selector: string, limit: number): Element[] => {\n if (!selector) return [];\n const seenRoots = new WeakSet<Node>();\n const seenElements = new Set<Element>();\n const results: Element[] = [];\n const queue: Array<Document | ShadowRoot> = [document];\n\n const visit = (root: Document | ShadowRoot): void => {\n if (!root || seenRoots.has(root) || results.length >= limit) return;\n seenRoots.add(root);\n\n try {\n const matches = root.querySelectorAll(selector);\n for (const element of matches) {\n if (seenElements.has(element)) continue;\n seenElements.add(element);\n results.push(element);\n if (results.length >= limit) return;\n }\n } catch {\n // ignore querySelectorAll issues\n }\n\n try {\n const ownerDocument =\n root instanceof Document\n ? root\n : (root.host?.ownerDocument ?? document);\n const walker = ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n );\n let node: Node | null;\n while ((node = walker.nextNode())) {\n if (!(node instanceof Element)) continue;\n const open = node.shadowRoot;\n if (open) queue.push(open);\n }\n } catch {\n // ignore traversal issues\n }\n };\n\n while (queue.length && results.length < limit) {\n const next = queue.shift();\n if (next) visit(next);\n }\n\n return results;\n};\n\nexport function resolveCssSelector(\n selectorRaw: string,\n targetIndexRaw?: number,\n): Element | null {\n const selector = String(selectorRaw ?? \"\").trim();\n if (!selector) return null;\n\n const targetIndex = parseTargetIndex(targetIndexRaw);\n const matches = collectCssMatches(selector, targetIndex + 1);\n return matches[targetIndex] ?? null;\n}\n\nexport function resolveCssSelectorPierce(\n selectorRaw: string,\n targetIndexRaw?: number,\n): Element | null {\n const selector = String(selectorRaw ?? \"\").trim();\n if (!selector) return null;\n\n const targetIndex = parseTargetIndex(targetIndexRaw);\n const backdoor = window.__stagehandV3__;\n if (!backdoor || typeof backdoor.getClosedRoot !== \"function\") {\n const matches = collectCssMatches(selector, targetIndex + 1);\n return matches[targetIndex] ?? null;\n }\n\n const getClosedRoot: (host: Element) => ShadowRoot | null = (\n host: Element,\n ) => {\n try {\n return backdoor.getClosedRoot(host) ?? null;\n } catch {\n return null;\n }\n };\n\n const seenRoots = new WeakSet<Node>();\n const seenElements = new Set<Element>();\n const results: Element[] = [];\n const queue: Array<Document | ShadowRoot> = [document];\n\n const visit = (root: Document | ShadowRoot): void => {\n if (!root || seenRoots.has(root) || results.length >= targetIndex + 1)\n return;\n seenRoots.add(root);\n\n try {\n const matches = root.querySelectorAll(selector);\n for (const element of matches) {\n if (seenElements.has(element)) continue;\n seenElements.add(element);\n results.push(element);\n if (results.length >= targetIndex + 1) return;\n }\n } catch {\n // ignore query errors\n }\n\n try {\n const ownerDocument =\n root instanceof Document\n ? root\n : (root.host?.ownerDocument ?? document);\n const walker = ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n );\n let node: Node | null;\n while ((node = walker.nextNode())) {\n if (!(node instanceof Element)) continue;\n const open = node.shadowRoot;\n if (open) queue.push(open);\n const closed = getClosedRoot(node);\n if (closed) queue.push(closed);\n }\n } catch {\n // ignore traversal issues\n }\n };\n\n while (queue.length && results.length < targetIndex + 1) {\n const next = queue.shift();\n if (next) visit(next);\n }\n\n return results[targetIndex] ?? null;\n}\n\nexport function resolveTextSelector(\n rawNeedle: string,\n targetIndexRaw?: number,\n): Element | null {\n const needle = String(rawNeedle ?? \"\");\n if (!needle) return null;\n const needleLc = needle.toLowerCase();\n const targetIndex = parseTargetIndex(targetIndexRaw);\n\n const skipTags = new Set([\n \"SCRIPT\",\n \"STYLE\",\n \"TEMPLATE\",\n \"NOSCRIPT\",\n \"HEAD\",\n \"TITLE\",\n \"LINK\",\n \"META\",\n \"HTML\",\n \"BODY\",\n ]);\n\n const shouldSkip = (node: Element | null | undefined): boolean => {\n if (!node) return false;\n const tag = node.tagName?.toUpperCase() ?? \"\";\n return skipTags.has(tag);\n };\n\n const extractText = (node: Element): string => {\n try {\n if (shouldSkip(node)) return \"\";\n const inner = (node as HTMLElement).innerText;\n if (typeof inner === \"string\" && inner.trim()) return inner.trim();\n } catch {\n // ignore\n }\n try {\n const text = node.textContent;\n if (typeof text === \"string\") return text.trim();\n } catch {\n // ignore\n }\n return \"\";\n };\n\n const matches = (node: Element): boolean => {\n const text = extractText(node);\n return !!text && text.toLowerCase().includes(needleLc);\n };\n\n const backdoor = window.__stagehandV3__;\n const getClosedRoot: (host: Element) => ShadowRoot | null =\n backdoor && typeof backdoor.getClosedRoot === \"function\"\n ? (host: Element): ShadowRoot | null => {\n try {\n return backdoor.getClosedRoot(host) ?? null;\n } catch {\n return null;\n }\n }\n : (host: Element): ShadowRoot | null => {\n void host;\n return null;\n };\n\n const seen = new WeakSet<Node>();\n const queue: Node[] = [];\n const matchesList: Array<{\n element: Element;\n tag: string;\n id: string;\n className: string;\n text: string;\n }> = [];\n\n const enqueue = (node: Node | null | undefined) => {\n if (!node || seen.has(node)) return;\n seen.add(node);\n queue.push(node);\n };\n\n const walkerFor = (root: Node): TreeWalker | null => {\n try {\n const doc =\n root instanceof Document\n ? root\n : ((root as Element)?.ownerDocument ?? document);\n return doc.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n } catch {\n return null;\n }\n };\n\n enqueue(document);\n\n while (queue.length) {\n const root = queue.shift();\n if (!root) continue;\n\n if (root instanceof Element && matches(root)) {\n matchesList.push({\n element: root,\n tag: root.tagName ?? \"\",\n id: root.id ?? \"\",\n className: (root as HTMLElement).className ?? \"\",\n text: extractText(root),\n });\n }\n\n const walker = walkerFor(root);\n if (!walker) continue;\n\n let node: Node | null;\n while ((node = walker.nextNode())) {\n if (!(node instanceof Element)) continue;\n\n if (matches(node)) {\n matchesList.push({\n element: node,\n tag: node.tagName ?? \"\",\n id: node.id ?? \"\",\n className: (node as HTMLElement).className ?? \"\",\n text: extractText(node),\n });\n }\n\n const open = node.shadowRoot;\n if (open) enqueue(open);\n\n const closed = getClosedRoot(node);\n if (closed) enqueue(closed);\n }\n }\n\n const innermost: typeof matchesList = [];\n for (const item of matchesList) {\n const el = item.element;\n let skip = false;\n for (const other of matchesList) {\n if (item === other) continue;\n try {\n if (el.contains(other.element)) {\n skip = true;\n break;\n }\n } catch {\n // ignore containment errors\n }\n }\n if (!skip) {\n innermost.push(item);\n }\n }\n\n const target = innermost[targetIndex];\n return target?.element ?? null;\n}\n\nexport function resolveXPathMainWorld(\n rawXp: string,\n targetIndexRaw?: number,\n): Element | null {\n const targetIndex = parseTargetIndex(targetIndexRaw);\n return resolveXPathAtIndex(rawXp, targetIndex, { pierceShadow: true });\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* waitForSelector - Waits for an element matching a selector to reach a specific state.
|
|
3
|
+
* Supports both CSS selectors and XPath expressions.
|
|
4
|
+
* Uses MutationObserver for efficiency and integrates with the V3 piercer for closed shadow roots.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This function runs inside the page context. Keep it dependency-free
|
|
7
|
+
* and resilient to exceptions.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Wait for an element matching the selector to reach the specified state.
|
|
11
|
+
* Supports both CSS selectors and XPath expressions (prefix with "xpath=" or start with "/").
|
|
12
|
+
*
|
|
13
|
+
* @param selectorRaw - CSS selector or XPath expression to wait for
|
|
14
|
+
* @param stateRaw - Element state: 'attached' | 'detached' | 'visible' | 'hidden'
|
|
15
|
+
* @param timeoutRaw - Maximum time to wait in milliseconds
|
|
16
|
+
* @param pierceShadowRaw - Whether to search inside shadow DOM
|
|
17
|
+
* @returns Promise that resolves to true when condition is met, or rejects on timeout
|
|
18
|
+
*/
|
|
19
|
+
export declare function waitForSelector(selectorRaw: string, stateRaw?: string, timeoutRaw?: number, pierceShadowRaw?: boolean): Promise<boolean>;
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* waitForSelector - Waits for an element matching a selector to reach a specific state.
|
|
3
|
+
* Supports both CSS selectors and XPath expressions.
|
|
4
|
+
* Uses MutationObserver for efficiency and integrates with the V3 piercer for closed shadow roots.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This function runs inside the page context. Keep it dependency-free
|
|
7
|
+
* and resilient to exceptions.
|
|
8
|
+
*/
|
|
9
|
+
import { resolveXPathFirst } from "./xpathResolver.js";
|
|
10
|
+
/**
|
|
11
|
+
* Check if a selector is an XPath expression.
|
|
12
|
+
*/
|
|
13
|
+
const isXPath = (selector) => {
|
|
14
|
+
return selector.startsWith("xpath=") || selector.startsWith("/");
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Get closed shadow root via the V3 piercer if available.
|
|
18
|
+
*/
|
|
19
|
+
const getClosedRoot = (element) => {
|
|
20
|
+
try {
|
|
21
|
+
const backdoor = window.__stagehandV3__;
|
|
22
|
+
if (backdoor && typeof backdoor.getClosedRoot === "function") {
|
|
23
|
+
return backdoor.getClosedRoot(element) ?? null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// ignore
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Get shadow root (open or closed via piercer).
|
|
33
|
+
*/
|
|
34
|
+
const getShadowRoot = (element) => {
|
|
35
|
+
// First try open shadow root
|
|
36
|
+
if (element.shadowRoot)
|
|
37
|
+
return element.shadowRoot;
|
|
38
|
+
// Then try closed shadow root via piercer
|
|
39
|
+
return getClosedRoot(element);
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Deep querySelector that pierces shadow DOM (both open and closed via piercer).
|
|
43
|
+
*/
|
|
44
|
+
const deepQuerySelector = (root, selector, pierceShadow) => {
|
|
45
|
+
// Try regular querySelector first
|
|
46
|
+
try {
|
|
47
|
+
const el = root.querySelector(selector);
|
|
48
|
+
if (el)
|
|
49
|
+
return el;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// ignore query errors
|
|
53
|
+
}
|
|
54
|
+
if (!pierceShadow)
|
|
55
|
+
return null;
|
|
56
|
+
// BFS queue to search all shadow roots (open and closed)
|
|
57
|
+
const seenRoots = new WeakSet();
|
|
58
|
+
const queue = [root];
|
|
59
|
+
while (queue.length > 0) {
|
|
60
|
+
const currentRoot = queue.shift();
|
|
61
|
+
if (!currentRoot || seenRoots.has(currentRoot))
|
|
62
|
+
continue;
|
|
63
|
+
seenRoots.add(currentRoot);
|
|
64
|
+
// Try querySelector on this root
|
|
65
|
+
try {
|
|
66
|
+
const found = currentRoot.querySelector(selector);
|
|
67
|
+
if (found)
|
|
68
|
+
return found;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// ignore query errors
|
|
72
|
+
}
|
|
73
|
+
// Walk all elements in this root to find shadow hosts
|
|
74
|
+
try {
|
|
75
|
+
const ownerDoc = currentRoot instanceof Document
|
|
76
|
+
? currentRoot
|
|
77
|
+
: (currentRoot.host?.ownerDocument ?? document);
|
|
78
|
+
const walker = ownerDoc.createTreeWalker(currentRoot, NodeFilter.SHOW_ELEMENT);
|
|
79
|
+
let node;
|
|
80
|
+
while ((node = walker.nextNode())) {
|
|
81
|
+
if (!(node instanceof Element))
|
|
82
|
+
continue;
|
|
83
|
+
const shadowRoot = getShadowRoot(node);
|
|
84
|
+
if (shadowRoot && !seenRoots.has(shadowRoot)) {
|
|
85
|
+
queue.push(shadowRoot);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// ignore traversal errors
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Resolve XPath with shadow DOM piercing support.
|
|
97
|
+
*/
|
|
98
|
+
const deepXPathQuery = (xpath, pierceShadow) => {
|
|
99
|
+
return resolveXPathFirst(xpath, { pierceShadow });
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Find element by selector (CSS or XPath) with optional shadow DOM piercing.
|
|
103
|
+
*/
|
|
104
|
+
const findElement = (selector, pierceShadow) => {
|
|
105
|
+
if (isXPath(selector)) {
|
|
106
|
+
return deepXPathQuery(selector, pierceShadow);
|
|
107
|
+
}
|
|
108
|
+
return deepQuerySelector(document, selector, pierceShadow);
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Check if element matches the desired state.
|
|
112
|
+
*/
|
|
113
|
+
const checkState = (el, state) => {
|
|
114
|
+
if (state === "detached")
|
|
115
|
+
return el === null;
|
|
116
|
+
if (state === "attached")
|
|
117
|
+
return el !== null;
|
|
118
|
+
if (el === null)
|
|
119
|
+
return false;
|
|
120
|
+
if (state === "hidden") {
|
|
121
|
+
try {
|
|
122
|
+
const style = window.getComputedStyle(el);
|
|
123
|
+
const rect = el.getBoundingClientRect();
|
|
124
|
+
return (style.display === "none" ||
|
|
125
|
+
style.visibility === "hidden" ||
|
|
126
|
+
style.opacity === "0" ||
|
|
127
|
+
rect.width === 0 ||
|
|
128
|
+
rect.height === 0);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// state === "visible"
|
|
135
|
+
try {
|
|
136
|
+
const style = window.getComputedStyle(el);
|
|
137
|
+
const rect = el.getBoundingClientRect();
|
|
138
|
+
return (style.display !== "none" &&
|
|
139
|
+
style.visibility !== "hidden" &&
|
|
140
|
+
style.opacity !== "0" &&
|
|
141
|
+
rect.width > 0 &&
|
|
142
|
+
rect.height > 0);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Set up MutationObservers on all shadow roots to detect changes.
|
|
150
|
+
*/
|
|
151
|
+
const setupShadowObservers = (callback, observers) => {
|
|
152
|
+
const seenRoots = new WeakSet();
|
|
153
|
+
const observeShadowRoots = (node) => {
|
|
154
|
+
const shadowRoot = getShadowRoot(node);
|
|
155
|
+
if (shadowRoot && !seenRoots.has(shadowRoot)) {
|
|
156
|
+
seenRoots.add(shadowRoot);
|
|
157
|
+
const shadowObserver = new MutationObserver(callback);
|
|
158
|
+
shadowObserver.observe(shadowRoot, {
|
|
159
|
+
childList: true,
|
|
160
|
+
subtree: true,
|
|
161
|
+
attributes: true,
|
|
162
|
+
attributeFilter: ["style", "class", "hidden", "disabled"],
|
|
163
|
+
});
|
|
164
|
+
observers.push(shadowObserver);
|
|
165
|
+
// Recurse into shadow root children
|
|
166
|
+
for (const child of Array.from(shadowRoot.children)) {
|
|
167
|
+
observeShadowRoots(child);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Recurse into regular children
|
|
171
|
+
for (const child of Array.from(node.children)) {
|
|
172
|
+
observeShadowRoots(child);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const root = document.documentElement || document.body;
|
|
176
|
+
if (root) {
|
|
177
|
+
observeShadowRoots(root);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* Wait for an element matching the selector to reach the specified state.
|
|
182
|
+
* Supports both CSS selectors and XPath expressions (prefix with "xpath=" or start with "/").
|
|
183
|
+
*
|
|
184
|
+
* @param selectorRaw - CSS selector or XPath expression to wait for
|
|
185
|
+
* @param stateRaw - Element state: 'attached' | 'detached' | 'visible' | 'hidden'
|
|
186
|
+
* @param timeoutRaw - Maximum time to wait in milliseconds
|
|
187
|
+
* @param pierceShadowRaw - Whether to search inside shadow DOM
|
|
188
|
+
* @returns Promise that resolves to true when condition is met, or rejects on timeout
|
|
189
|
+
*/
|
|
190
|
+
export function waitForSelector(selectorRaw, stateRaw, timeoutRaw, pierceShadowRaw) {
|
|
191
|
+
const selector = String(selectorRaw ?? "").trim();
|
|
192
|
+
const state = String(stateRaw ?? "visible") || "visible";
|
|
193
|
+
const timeout = typeof timeoutRaw === "number" && timeoutRaw > 0 ? timeoutRaw : 30000;
|
|
194
|
+
const pierceShadow = pierceShadowRaw !== false;
|
|
195
|
+
return new Promise((resolve, reject) => {
|
|
196
|
+
let timeoutId = null;
|
|
197
|
+
let domReadyHandler = null;
|
|
198
|
+
let settled = false;
|
|
199
|
+
const clearTimer = () => {
|
|
200
|
+
if (timeoutId !== null) {
|
|
201
|
+
clearTimeout(timeoutId);
|
|
202
|
+
timeoutId = null;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
// Check immediately
|
|
206
|
+
const el = findElement(selector, pierceShadow);
|
|
207
|
+
if (checkState(el, state)) {
|
|
208
|
+
settled = true;
|
|
209
|
+
resolve(true);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const observers = [];
|
|
213
|
+
const cleanup = () => {
|
|
214
|
+
for (const obs of observers) {
|
|
215
|
+
obs.disconnect();
|
|
216
|
+
}
|
|
217
|
+
if (domReadyHandler) {
|
|
218
|
+
document.removeEventListener("DOMContentLoaded", domReadyHandler);
|
|
219
|
+
domReadyHandler = null;
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
const check = () => {
|
|
223
|
+
if (settled)
|
|
224
|
+
return;
|
|
225
|
+
const el = findElement(selector, pierceShadow);
|
|
226
|
+
if (checkState(el, state)) {
|
|
227
|
+
settled = true;
|
|
228
|
+
clearTimer();
|
|
229
|
+
cleanup();
|
|
230
|
+
resolve(true);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
// Handle case where document.body is not ready yet
|
|
234
|
+
const observeRoot = document.body || document.documentElement;
|
|
235
|
+
if (!observeRoot) {
|
|
236
|
+
domReadyHandler = () => {
|
|
237
|
+
document.removeEventListener("DOMContentLoaded", domReadyHandler);
|
|
238
|
+
domReadyHandler = null;
|
|
239
|
+
check();
|
|
240
|
+
setupObservers();
|
|
241
|
+
};
|
|
242
|
+
document.addEventListener("DOMContentLoaded", domReadyHandler);
|
|
243
|
+
timeoutId = setTimeout(() => {
|
|
244
|
+
if (settled)
|
|
245
|
+
return;
|
|
246
|
+
settled = true;
|
|
247
|
+
clearTimer();
|
|
248
|
+
cleanup();
|
|
249
|
+
reject(new Error(`waitForSelector: Timeout ${timeout}ms exceeded waiting for "${selector}" to be ${state}`));
|
|
250
|
+
}, timeout);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const setupObservers = () => {
|
|
254
|
+
const root = document.body || document.documentElement;
|
|
255
|
+
if (!root)
|
|
256
|
+
return;
|
|
257
|
+
// Main document observer
|
|
258
|
+
const mainObserver = new MutationObserver(check);
|
|
259
|
+
mainObserver.observe(root, {
|
|
260
|
+
childList: true,
|
|
261
|
+
subtree: true,
|
|
262
|
+
attributes: true,
|
|
263
|
+
attributeFilter: ["style", "class", "hidden", "disabled"],
|
|
264
|
+
});
|
|
265
|
+
observers.push(mainObserver);
|
|
266
|
+
// Shadow DOM observers (if piercing)
|
|
267
|
+
if (pierceShadow) {
|
|
268
|
+
setupShadowObservers(check, observers);
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
setupObservers();
|
|
272
|
+
// Set up timeout
|
|
273
|
+
timeoutId = setTimeout(() => {
|
|
274
|
+
if (settled)
|
|
275
|
+
return;
|
|
276
|
+
settled = true;
|
|
277
|
+
clearTimer();
|
|
278
|
+
cleanup();
|
|
279
|
+
reject(new Error(`waitForSelector: Timeout ${timeout}ms exceeded waiting for "${selector}" to be ${state}`));
|
|
280
|
+
}, timeout);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=waitForSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitForSelector.js","sourceRoot":"","sources":["../../../../../../lib/v3/dom/locatorScripts/waitForSelector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * waitForSelector - Waits for an element matching a selector to reach a specific state.\n * Supports both CSS selectors and XPath expressions.\n * Uses MutationObserver for efficiency and integrates with the V3 piercer for closed shadow roots.\n *\n * NOTE: This function runs inside the page context. Keep it dependency-free\n * and resilient to exceptions.\n */\n\nimport { resolveXPathFirst } from \"./xpathResolver.js\";\n\ntype WaitForSelectorState = \"attached\" | \"detached\" | \"visible\" | \"hidden\";\n\n/**\n * Check if a selector is an XPath expression.\n */\nconst isXPath = (selector: string): boolean => {\n return selector.startsWith(\"xpath=\") || selector.startsWith(\"/\");\n};\n\n/**\n * Get closed shadow root via the V3 piercer if available.\n */\nconst getClosedRoot = (element: Element): ShadowRoot | null => {\n try {\n const backdoor = window.__stagehandV3__;\n if (backdoor && typeof backdoor.getClosedRoot === \"function\") {\n return backdoor.getClosedRoot(element) ?? null;\n }\n } catch {\n // ignore\n }\n return null;\n};\n\n/**\n * Get shadow root (open or closed via piercer).\n */\nconst getShadowRoot = (element: Element): ShadowRoot | null => {\n // First try open shadow root\n if (element.shadowRoot) return element.shadowRoot;\n // Then try closed shadow root via piercer\n return getClosedRoot(element);\n};\n\n/**\n * Deep querySelector that pierces shadow DOM (both open and closed via piercer).\n */\nconst deepQuerySelector = (\n root: Document | ShadowRoot,\n selector: string,\n pierceShadow: boolean,\n): Element | null => {\n // Try regular querySelector first\n try {\n const el = root.querySelector(selector);\n if (el) return el;\n } catch {\n // ignore query errors\n }\n\n if (!pierceShadow) return null;\n\n // BFS queue to search all shadow roots (open and closed)\n const seenRoots = new WeakSet<Node>();\n const queue: Array<Document | ShadowRoot> = [root];\n\n while (queue.length > 0) {\n const currentRoot = queue.shift();\n if (!currentRoot || seenRoots.has(currentRoot)) continue;\n seenRoots.add(currentRoot);\n\n // Try querySelector on this root\n try {\n const found = currentRoot.querySelector(selector);\n if (found) return found;\n } catch {\n // ignore query errors\n }\n\n // Walk all elements in this root to find shadow hosts\n try {\n const ownerDoc =\n currentRoot instanceof Document\n ? currentRoot\n : (currentRoot.host?.ownerDocument ?? document);\n const walker = ownerDoc.createTreeWalker(\n currentRoot,\n NodeFilter.SHOW_ELEMENT,\n );\n let node: Node | null;\n while ((node = walker.nextNode())) {\n if (!(node instanceof Element)) continue;\n const shadowRoot = getShadowRoot(node);\n if (shadowRoot && !seenRoots.has(shadowRoot)) {\n queue.push(shadowRoot);\n }\n }\n } catch {\n // ignore traversal errors\n }\n }\n\n return null;\n};\n\n/**\n * Resolve XPath with shadow DOM piercing support.\n */\nconst deepXPathQuery = (\n xpath: string,\n pierceShadow: boolean,\n): Element | null => {\n return resolveXPathFirst(xpath, { pierceShadow });\n};\n\n/**\n * Find element by selector (CSS or XPath) with optional shadow DOM piercing.\n */\nconst findElement = (\n selector: string,\n pierceShadow: boolean,\n): Element | null => {\n if (isXPath(selector)) {\n return deepXPathQuery(selector, pierceShadow);\n }\n return deepQuerySelector(document, selector, pierceShadow);\n};\n\n/**\n * Check if element matches the desired state.\n */\nconst checkState = (\n el: Element | null,\n state: WaitForSelectorState,\n): boolean => {\n if (state === \"detached\") return el === null;\n if (state === \"attached\") return el !== null;\n if (el === null) return false;\n\n if (state === \"hidden\") {\n try {\n const style = window.getComputedStyle(el);\n const rect = el.getBoundingClientRect();\n return (\n style.display === \"none\" ||\n style.visibility === \"hidden\" ||\n style.opacity === \"0\" ||\n rect.width === 0 ||\n rect.height === 0\n );\n } catch {\n return false;\n }\n }\n\n // state === \"visible\"\n try {\n const style = window.getComputedStyle(el);\n const rect = el.getBoundingClientRect();\n return (\n style.display !== \"none\" &&\n style.visibility !== \"hidden\" &&\n style.opacity !== \"0\" &&\n rect.width > 0 &&\n rect.height > 0\n );\n } catch {\n return false;\n }\n};\n\n/**\n * Set up MutationObservers on all shadow roots to detect changes.\n */\nconst setupShadowObservers = (\n callback: () => void,\n observers: MutationObserver[],\n): void => {\n const seenRoots = new WeakSet<Node>();\n\n const observeShadowRoots = (node: Element): void => {\n const shadowRoot = getShadowRoot(node);\n if (shadowRoot && !seenRoots.has(shadowRoot)) {\n seenRoots.add(shadowRoot);\n const shadowObserver = new MutationObserver(callback);\n shadowObserver.observe(shadowRoot, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"style\", \"class\", \"hidden\", \"disabled\"],\n });\n observers.push(shadowObserver);\n\n // Recurse into shadow root children\n for (const child of Array.from(shadowRoot.children)) {\n observeShadowRoots(child);\n }\n }\n\n // Recurse into regular children\n for (const child of Array.from(node.children)) {\n observeShadowRoots(child);\n }\n };\n\n const root = document.documentElement || document.body;\n if (root) {\n observeShadowRoots(root);\n }\n};\n\n/**\n * Wait for an element matching the selector to reach the specified state.\n * Supports both CSS selectors and XPath expressions (prefix with \"xpath=\" or start with \"/\").\n *\n * @param selectorRaw - CSS selector or XPath expression to wait for\n * @param stateRaw - Element state: 'attached' | 'detached' | 'visible' | 'hidden'\n * @param timeoutRaw - Maximum time to wait in milliseconds\n * @param pierceShadowRaw - Whether to search inside shadow DOM\n * @returns Promise that resolves to true when condition is met, or rejects on timeout\n */\nexport function waitForSelector(\n selectorRaw: string,\n stateRaw?: string,\n timeoutRaw?: number,\n pierceShadowRaw?: boolean,\n): Promise<boolean> {\n const selector = String(selectorRaw ?? \"\").trim();\n const state =\n (String(stateRaw ?? \"visible\") as WaitForSelectorState) || \"visible\";\n const timeout =\n typeof timeoutRaw === \"number\" && timeoutRaw > 0 ? timeoutRaw : 30000;\n const pierceShadow = pierceShadowRaw !== false;\n\n return new Promise<boolean>((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let domReadyHandler: (() => void) | null = null;\n let settled = false;\n const clearTimer = (): void => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n // Check immediately\n const el = findElement(selector, pierceShadow);\n if (checkState(el, state)) {\n settled = true;\n resolve(true);\n return;\n }\n\n const observers: MutationObserver[] = [];\n\n const cleanup = (): void => {\n for (const obs of observers) {\n obs.disconnect();\n }\n if (domReadyHandler) {\n document.removeEventListener(\"DOMContentLoaded\", domReadyHandler);\n domReadyHandler = null;\n }\n };\n\n const check = (): void => {\n if (settled) return;\n const el = findElement(selector, pierceShadow);\n if (checkState(el, state)) {\n settled = true;\n clearTimer();\n cleanup();\n resolve(true);\n }\n };\n\n // Handle case where document.body is not ready yet\n const observeRoot = document.body || document.documentElement;\n if (!observeRoot) {\n domReadyHandler = (): void => {\n document.removeEventListener(\"DOMContentLoaded\", domReadyHandler!);\n domReadyHandler = null;\n check();\n setupObservers();\n };\n document.addEventListener(\"DOMContentLoaded\", domReadyHandler);\n timeoutId = setTimeout(() => {\n if (settled) return;\n settled = true;\n clearTimer();\n cleanup();\n reject(\n new Error(\n `waitForSelector: Timeout ${timeout}ms exceeded waiting for \"${selector}\" to be ${state}`,\n ),\n );\n }, timeout);\n return;\n }\n\n const setupObservers = (): void => {\n const root = document.body || document.documentElement;\n if (!root) return;\n\n // Main document observer\n const mainObserver = new MutationObserver(check);\n mainObserver.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"style\", \"class\", \"hidden\", \"disabled\"],\n });\n observers.push(mainObserver);\n\n // Shadow DOM observers (if piercing)\n if (pierceShadow) {\n setupShadowObservers(check, observers);\n }\n };\n\n setupObservers();\n\n // Set up timeout\n timeoutId = setTimeout(() => {\n if (settled) return;\n settled = true;\n clearTimer();\n cleanup();\n reject(\n new Error(\n `waitForSelector: Timeout ${timeout}ms exceeded waiting for \"${selector}\" to be ${state}`,\n ),\n );\n }, timeout);\n });\n}\n"]}
|