@browserbasehq/orca 3.1.0-patch.0 → 3.1.0-patch.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.js +183 -0
- package/dist/cjs/cli.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +24956 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/lib/inference.d.ts +65 -0
- package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/cjs/lib/logger.d.ts +69 -0
- package/dist/cjs/lib/modelUtils.d.ts +11 -0
- package/dist/cjs/lib/prompt.d.ts +14 -0
- package/dist/cjs/lib/utils.d.ts +68 -0
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/cjs/lib/v3/api.d.ts +86 -0
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
- package/dist/cjs/lib/v3/cli.d.ts +2 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
- package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/cjs/lib/v3/index.d.ts +18 -0
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/cjs/lib/v3/logger.d.ts +9 -0
- package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
- package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
- package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
- package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
- package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
- package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
- package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
- package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
- package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/cjs/lib/v3/v3.d.ts +191 -0
- package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
- package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
- package/dist/cjs/lib/version.d.ts +5 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/cjs/tests/llm-provider.test.js +57 -0
- package/dist/cjs/tests/llm-provider.test.js.map +7 -0
- package/dist/cjs/tests/model-deprecation.test.js +132 -0
- package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
- package/dist/cjs/tests/page-snapshot.test.js +58 -0
- package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
- package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
- package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-types.test.js +74 -0
- package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
- package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/cjs/tests/safety-confirmation.test.js +134 -0
- package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
- package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/cjs/tests/timeout-handlers.test.js +864 -0
- package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
- package/dist/cjs/tests/xpath-parser.test.js +314 -0
- package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
- package/dist/cjs/tests/xpath-resolver.test.js +70 -0
- package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/lib/v3/api.d.ts +16 -1
- package/dist/esm/lib/v3/api.js +41 -5
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +22 -20
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +5 -2
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +8 -0
- package/dist/esm/lib/v3/types/public/api.js +5 -3
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/index.d.ts +1 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -1
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +3 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +12 -6
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/esm/tests/api-multiregion.test.js +73 -0
- package/dist/esm/tests/api-multiregion.test.js.map +7 -0
- package/dist/esm/tests/public-api/public-error-types.test.js +2 -1
- package/dist/esm/tests/public-api/public-error-types.test.js.map +2 -2
- package/dist/esm/tests/understudy-command-exception.test.js +55 -0
- package/dist/esm/tests/understudy-command-exception.test.js.map +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { InferStagehandSchema, StagehandZodSchema } from "./zodCompat.js";
|
|
4
|
+
import { LLMClient } from "./llm/LLMClient.js";
|
|
5
|
+
import { AgentReplayStep } from "./types/private/index.js";
|
|
6
|
+
import { AgentConfig, AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, LogLine, StagehandMetrics, Action, ActOptions, ActResult, defaultExtractSchema, ExtractOptions, HistoryEntry, ObserveOptions, pageTextSchema, V3FunctionName, V3Options, AgentStreamResult } from "./types/public/index.js";
|
|
7
|
+
import { V3Context } from "./understudy/context.js";
|
|
8
|
+
/**
|
|
9
|
+
* V3
|
|
10
|
+
*
|
|
11
|
+
* Purpose:
|
|
12
|
+
* A high-level orchestrator for Stagehand V3. Abstracts away whether the browser
|
|
13
|
+
* runs **locally via Chrome** or remotely on **Browserbase**, and exposes simple
|
|
14
|
+
* entrypoints (`act`, `extract`, `observe`) that delegate to the corresponding
|
|
15
|
+
* handler classes.
|
|
16
|
+
*
|
|
17
|
+
* Responsibilities:
|
|
18
|
+
* - Bootstraps Chrome or Browserbase, ensures a working CDP WebSocket, and builds a `V3Context`.
|
|
19
|
+
* - Manages lifecycle: init, context access, cleanup.
|
|
20
|
+
* - Bridges external page objects (Playwright/Puppeteer) into internal frameIds for handlers.
|
|
21
|
+
* - Provides a stable API surface for downstream code regardless of runtime environment.
|
|
22
|
+
*/
|
|
23
|
+
export declare class V3 {
|
|
24
|
+
private readonly opts;
|
|
25
|
+
private state;
|
|
26
|
+
private actHandler;
|
|
27
|
+
private extractHandler;
|
|
28
|
+
private observeHandler;
|
|
29
|
+
private ctx;
|
|
30
|
+
llmClient: LLMClient;
|
|
31
|
+
/**
|
|
32
|
+
* Event bus for internal communication.
|
|
33
|
+
* Emits events like 'screenshot' when screenshots are captured during agent execution.
|
|
34
|
+
*/
|
|
35
|
+
readonly bus: EventEmitter;
|
|
36
|
+
private modelName;
|
|
37
|
+
private modelClientOptions;
|
|
38
|
+
private llmProvider;
|
|
39
|
+
private overrideLlmClients;
|
|
40
|
+
private readonly domSettleTimeoutMs?;
|
|
41
|
+
private _isClosing;
|
|
42
|
+
browserbaseSessionId?: string;
|
|
43
|
+
private browserbaseSessionUrl?;
|
|
44
|
+
private browserbaseDebugUrl?;
|
|
45
|
+
get browserbaseSessionID(): string | undefined;
|
|
46
|
+
get browserbaseSessionURL(): string | undefined;
|
|
47
|
+
get browserbaseDebugURL(): string | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Returns true if the browser is running on Browserbase.
|
|
50
|
+
*/
|
|
51
|
+
get isBrowserbase(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Returns true if advancedStealth is enabled in Browserbase settings.
|
|
54
|
+
*/
|
|
55
|
+
get isAdvancedStealth(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the configured viewport dimensions from launch options.
|
|
58
|
+
* Falls back to default 1288x711 if not configured.
|
|
59
|
+
*/
|
|
60
|
+
get configuredViewport(): {
|
|
61
|
+
width: number;
|
|
62
|
+
height: number;
|
|
63
|
+
};
|
|
64
|
+
private _onCdpClosed;
|
|
65
|
+
readonly experimental: boolean;
|
|
66
|
+
readonly logInferenceToFile: boolean;
|
|
67
|
+
readonly disableAPI: boolean;
|
|
68
|
+
private externalLogger?;
|
|
69
|
+
verbose: 0 | 1 | 2;
|
|
70
|
+
private stagehandLogger;
|
|
71
|
+
private _history;
|
|
72
|
+
private readonly instanceId;
|
|
73
|
+
private static _processGuardsInstalled;
|
|
74
|
+
private static _instances;
|
|
75
|
+
private cacheStorage;
|
|
76
|
+
private actCache;
|
|
77
|
+
private agentCache;
|
|
78
|
+
private apiClient;
|
|
79
|
+
private keepAlive?;
|
|
80
|
+
private shutdownSupervisor;
|
|
81
|
+
stagehandMetrics: StagehandMetrics;
|
|
82
|
+
constructor(opts: V3Options);
|
|
83
|
+
/**
|
|
84
|
+
* Async property for metrics so callers can `await v3.metrics`.
|
|
85
|
+
* When using API mode, fetches metrics from the API. Otherwise returns local metrics.
|
|
86
|
+
*/
|
|
87
|
+
get metrics(): Promise<StagehandMetrics>;
|
|
88
|
+
private resolveLlmClient;
|
|
89
|
+
private beginAgentReplayRecording;
|
|
90
|
+
private endAgentReplayRecording;
|
|
91
|
+
private discardAgentReplayRecording;
|
|
92
|
+
private isAgentReplayRecording;
|
|
93
|
+
isAgentReplayActive(): boolean;
|
|
94
|
+
recordAgentReplayStep(step: AgentReplayStep): void;
|
|
95
|
+
/**
|
|
96
|
+
* Async property for history so callers can `await v3.history`.
|
|
97
|
+
* Returns a frozen copy to avoid external mutation.
|
|
98
|
+
*/
|
|
99
|
+
get history(): Promise<ReadonlyArray<HistoryEntry>>;
|
|
100
|
+
addToHistory(method: HistoryEntry["method"], parameters: unknown, result?: unknown): void;
|
|
101
|
+
updateMetrics(functionName: V3FunctionName, promptTokens: number, completionTokens: number, reasoningTokens: number, cachedInputTokens: number, inferenceTimeMs: number): void;
|
|
102
|
+
private updateTotalMetrics;
|
|
103
|
+
private _immediateShutdown;
|
|
104
|
+
/** Spawn a crash-only supervisor that cleans up when this process dies. */
|
|
105
|
+
private startShutdownSupervisor;
|
|
106
|
+
/** Stop the supervisor during a normal shutdown. */
|
|
107
|
+
private stopShutdownSupervisor;
|
|
108
|
+
/**
|
|
109
|
+
* Entrypoint: initializes handlers, launches Chrome or Browserbase,
|
|
110
|
+
* and sets up a CDP context.
|
|
111
|
+
*/
|
|
112
|
+
init(): Promise<void>;
|
|
113
|
+
/** Apply post-connect local browser options that require CDP. */
|
|
114
|
+
private _applyPostConnectLocalOptions;
|
|
115
|
+
private _ensureBrowserbaseDownloadsEnabled;
|
|
116
|
+
private resetBrowserbaseSessionMetadata;
|
|
117
|
+
/**
|
|
118
|
+
* Run an "act" instruction through the ActHandler.
|
|
119
|
+
*
|
|
120
|
+
* New API:
|
|
121
|
+
* - act(instruction: string, options?: ActOptions)
|
|
122
|
+
* - act(action: Action, options?: ActOptions)
|
|
123
|
+
*/
|
|
124
|
+
act(instruction: string, options?: ActOptions): Promise<ActResult>;
|
|
125
|
+
act(action: Action, options?: ActOptions): Promise<ActResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Run an "extract" instruction through the ExtractHandler.
|
|
128
|
+
*
|
|
129
|
+
* Accepted forms:
|
|
130
|
+
* - extract() → pageText
|
|
131
|
+
* - extract(options) → pageText
|
|
132
|
+
* - extract(instruction) → defaultExtractSchema
|
|
133
|
+
* - extract(instruction, schema) → schema-inferred
|
|
134
|
+
* - extract(instruction, schema, options)
|
|
135
|
+
*/
|
|
136
|
+
extract(): Promise<z.infer<typeof pageTextSchema>>;
|
|
137
|
+
extract(options: ExtractOptions): Promise<z.infer<typeof pageTextSchema>>;
|
|
138
|
+
extract(instruction: string, options?: ExtractOptions): Promise<z.infer<typeof defaultExtractSchema>>;
|
|
139
|
+
extract<T extends StagehandZodSchema>(instruction: string, schema: T, options?: ExtractOptions): Promise<InferStagehandSchema<T>>;
|
|
140
|
+
/**
|
|
141
|
+
* Run an "observe" instruction through the ObserveHandler.
|
|
142
|
+
*/
|
|
143
|
+
observe(): Promise<Action[]>;
|
|
144
|
+
observe(options: ObserveOptions): Promise<Action[]>;
|
|
145
|
+
observe(instruction: string, options?: ObserveOptions): Promise<Action[]>;
|
|
146
|
+
/** Return the browser-level CDP WebSocket endpoint. */
|
|
147
|
+
connectURL(): string;
|
|
148
|
+
/** Expose the current CDP-backed context. */
|
|
149
|
+
get context(): V3Context;
|
|
150
|
+
/** Best-effort cleanup of context and launched resources. */
|
|
151
|
+
close(opts?: {
|
|
152
|
+
force?: boolean;
|
|
153
|
+
}): Promise<void>;
|
|
154
|
+
/** Guard: ensure Browserbase credentials exist in options. */
|
|
155
|
+
private requireBrowserbaseCreds;
|
|
156
|
+
get logger(): (logLine: LogLine) => void;
|
|
157
|
+
/**
|
|
158
|
+
* Normalize a Playwright/Puppeteer page object into its top frame id,
|
|
159
|
+
* so handlers can resolve it to a `Page` within our V3Context.
|
|
160
|
+
*/
|
|
161
|
+
private resolveTopFrameId;
|
|
162
|
+
private isPlaywrightPage;
|
|
163
|
+
private isPatchrightPage;
|
|
164
|
+
private isPuppeteerPage;
|
|
165
|
+
/** Resolve an external page reference or fall back to the active V3 page. */
|
|
166
|
+
private resolvePage;
|
|
167
|
+
private normalizeToV3Page;
|
|
168
|
+
private _logBrowserbaseSessionStatus;
|
|
169
|
+
/**
|
|
170
|
+
* Prepares shared context for agent execution (both execute and stream).
|
|
171
|
+
* Extracts duplicated setup logic into a single helper.
|
|
172
|
+
*/
|
|
173
|
+
private prepareAgentExecution;
|
|
174
|
+
/**
|
|
175
|
+
* Create a v3 agent instance (AISDK tool-based) with execute().
|
|
176
|
+
* Mirrors the v2 Stagehand.agent() tool mode (no CUA provider here).
|
|
177
|
+
*
|
|
178
|
+
* @overload When stream: true, returns a streaming agent where execute() returns AgentStreamResult
|
|
179
|
+
* @overload When stream is false/undefined, returns a non-streaming agent where execute() returns AgentResult
|
|
180
|
+
*/
|
|
181
|
+
agent(options: AgentConfig & {
|
|
182
|
+
stream: true;
|
|
183
|
+
}): {
|
|
184
|
+
execute: (instructionOrOptions: string | AgentStreamExecuteOptions) => Promise<AgentStreamResult>;
|
|
185
|
+
};
|
|
186
|
+
agent(options?: AgentConfig & {
|
|
187
|
+
stream?: false;
|
|
188
|
+
}): {
|
|
189
|
+
execute: (instructionOrOptions: string | AgentExecuteOptions) => Promise<AgentResult>;
|
|
190
|
+
};
|
|
191
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { ZodObject as Zod4Object, ZodRawShape as Zod4RawShape, ZodTypeAny as Zod4TypeAny } from "zod";
|
|
3
|
+
import type * as z3 from "zod/v3";
|
|
4
|
+
export type StagehandZodSchema = Zod4TypeAny | z3.ZodTypeAny;
|
|
5
|
+
export type StagehandZodObject = Zod4Object<Zod4RawShape> | z3.ZodObject<z3.ZodRawShape>;
|
|
6
|
+
export type InferStagehandSchema<T extends StagehandZodSchema> = T extends z3.ZodTypeAny ? z3.infer<T> : T extends Zod4TypeAny ? z.infer<T> : never;
|
|
7
|
+
export declare const isZod4Schema: (schema: StagehandZodSchema) => schema is Zod4TypeAny & {
|
|
8
|
+
_zod: unknown;
|
|
9
|
+
};
|
|
10
|
+
export declare const isZod3Schema: (schema: StagehandZodSchema) => schema is z3.ZodTypeAny;
|
|
11
|
+
export type JsonSchemaDocument = Record<string, unknown>;
|
|
12
|
+
export declare function toJsonSchema(schema: StagehandZodSchema): JsonSchemaDocument;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3Evaluator mirrors Evaluator but operates on a V3 instance instead of Stagehand.
|
|
3
|
+
* It uses the V3 page/screenshot APIs and constructs an LLM client to run
|
|
4
|
+
* structured evaluations (YES/NO with reasoning) on screenshots and/or text.
|
|
5
|
+
*/
|
|
6
|
+
import type { AvailableModel, ClientOptions } from "./v3/types/public/model.js";
|
|
7
|
+
import type { EvaluateOptions, BatchAskOptions, EvaluationResult } from "./v3/types/private/evaluator.js";
|
|
8
|
+
import { V3 } from "./v3/v3.js";
|
|
9
|
+
export declare class V3Evaluator {
|
|
10
|
+
private v3;
|
|
11
|
+
private modelName;
|
|
12
|
+
private modelClientOptions;
|
|
13
|
+
private silentLogger;
|
|
14
|
+
constructor(v3: V3, modelName?: AvailableModel, modelClientOptions?: ClientOptions);
|
|
15
|
+
private getClient;
|
|
16
|
+
ask(options: EvaluateOptions): Promise<EvaluationResult>;
|
|
17
|
+
batchAsk(options: BatchAskOptions): Promise<EvaluationResult[]>;
|
|
18
|
+
private _evaluateWithMultipleScreenshots;
|
|
19
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
var import_vitest = require("vitest");
|
|
2
|
+
var import_v3 = require("../lib/v3/v3.js");
|
|
3
|
+
const MOCK_SESSION_ID = "session-123";
|
|
4
|
+
const MOCK_SESSION_URL = `https://www.browserbase.com/sessions/${MOCK_SESSION_ID}`;
|
|
5
|
+
const MOCK_DEBUG_URL = `https://debug.browserbase.com/${MOCK_SESSION_ID}`;
|
|
6
|
+
import_vitest.vi.mock("../lib/v3/understudy/context", () => {
|
|
7
|
+
class MockConnection {
|
|
8
|
+
onTransportClosed = import_vitest.vi.fn();
|
|
9
|
+
offTransportClosed = import_vitest.vi.fn();
|
|
10
|
+
send = import_vitest.vi.fn(async () => {
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
class MockV3Context {
|
|
14
|
+
static async create() {
|
|
15
|
+
return new MockV3Context();
|
|
16
|
+
}
|
|
17
|
+
conn = new MockConnection();
|
|
18
|
+
pages() {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
async close() {
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { V3Context: MockV3Context };
|
|
25
|
+
});
|
|
26
|
+
import_vitest.vi.mock("../lib/v3/launch/browserbase", () => ({
|
|
27
|
+
createBrowserbaseSession: import_vitest.vi.fn(async () => ({
|
|
28
|
+
ws: "wss://mock-browserbase",
|
|
29
|
+
sessionId: MOCK_SESSION_ID,
|
|
30
|
+
bb: {
|
|
31
|
+
sessions: {
|
|
32
|
+
debug: import_vitest.vi.fn(async () => ({ debuggerUrl: MOCK_DEBUG_URL }))
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}))
|
|
36
|
+
}));
|
|
37
|
+
import_vitest.vi.mock("../lib/v3/launch/local", () => ({
|
|
38
|
+
launchLocalChrome: import_vitest.vi.fn(async () => ({
|
|
39
|
+
ws: "ws://local-cdp",
|
|
40
|
+
chrome: { kill: import_vitest.vi.fn(async () => {
|
|
41
|
+
}) }
|
|
42
|
+
}))
|
|
43
|
+
}));
|
|
44
|
+
(0, import_vitest.describe)("browserbase accessors", () => {
|
|
45
|
+
(0, import_vitest.beforeEach)(() => {
|
|
46
|
+
process.env.BROWSERBASE_API_KEY = "fake-key";
|
|
47
|
+
process.env.BROWSERBASE_PROJECT_ID = "fake-project";
|
|
48
|
+
});
|
|
49
|
+
(0, import_vitest.afterEach)(() => {
|
|
50
|
+
delete process.env.BROWSERBASE_API_KEY;
|
|
51
|
+
delete process.env.BROWSERBASE_PROJECT_ID;
|
|
52
|
+
import_vitest.vi.clearAllMocks();
|
|
53
|
+
});
|
|
54
|
+
(0, import_vitest.it)("exposes Browserbase session and debug URLs after init", async () => {
|
|
55
|
+
const v3 = new import_v3.V3({
|
|
56
|
+
env: "BROWSERBASE",
|
|
57
|
+
disableAPI: true,
|
|
58
|
+
verbose: 0
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
await v3.init();
|
|
62
|
+
(0, import_vitest.expect)(v3.browserbaseSessionURL).toBe(MOCK_SESSION_URL);
|
|
63
|
+
(0, import_vitest.expect)(v3.browserbaseDebugURL).toBe(MOCK_DEBUG_URL);
|
|
64
|
+
} finally {
|
|
65
|
+
await v3.close().catch(() => {
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
(0, import_vitest.it)("clears stored URLs after close", async () => {
|
|
70
|
+
const v3 = new import_v3.V3({
|
|
71
|
+
env: "BROWSERBASE",
|
|
72
|
+
disableAPI: true,
|
|
73
|
+
verbose: 0
|
|
74
|
+
});
|
|
75
|
+
await v3.init();
|
|
76
|
+
await v3.close();
|
|
77
|
+
(0, import_vitest.expect)(v3.browserbaseSessionURL).toBeUndefined();
|
|
78
|
+
(0, import_vitest.expect)(v3.browserbaseDebugURL).toBeUndefined();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
(0, import_vitest.describe)("local accessors", () => {
|
|
82
|
+
(0, import_vitest.it)("stay empty for LOCAL environments", async () => {
|
|
83
|
+
const v3 = new import_v3.V3({
|
|
84
|
+
env: "LOCAL",
|
|
85
|
+
disableAPI: true,
|
|
86
|
+
verbose: 0,
|
|
87
|
+
localBrowserLaunchOptions: {
|
|
88
|
+
cdpUrl: "ws://local-existing-session"
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
try {
|
|
92
|
+
await v3.init();
|
|
93
|
+
(0, import_vitest.expect)(v3.browserbaseSessionURL).toBeUndefined();
|
|
94
|
+
(0, import_vitest.expect)(v3.browserbaseDebugURL).toBeUndefined();
|
|
95
|
+
} finally {
|
|
96
|
+
await v3.close().catch(() => {
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=browserbase-session-accessors.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/browserbase-session-accessors.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, expect, it, vi, beforeEach, afterEach } from \"vitest\";\nimport { V3 } from \"../lib/v3/v3.js\";\n\nconst MOCK_SESSION_ID = \"session-123\";\nconst MOCK_SESSION_URL = `https://www.browserbase.com/sessions/${MOCK_SESSION_ID}`;\nconst MOCK_DEBUG_URL = `https://debug.browserbase.com/${MOCK_SESSION_ID}`;\n\nvi.mock(\"../lib/v3/understudy/context\", () => {\n class MockConnection {\n onTransportClosed = vi.fn();\n offTransportClosed = vi.fn();\n send = vi.fn(async () => {});\n }\n\n class MockV3Context {\n static async create(): Promise<MockV3Context> {\n return new MockV3Context();\n }\n\n conn = new MockConnection();\n\n pages(): never[] {\n return [];\n }\n\n async close(): Promise<void> {\n // noop\n }\n }\n\n return { V3Context: MockV3Context };\n});\n\nvi.mock(\"../lib/v3/launch/browserbase\", () => ({\n createBrowserbaseSession: vi.fn(async () => ({\n ws: \"wss://mock-browserbase\",\n sessionId: MOCK_SESSION_ID,\n bb: {\n sessions: {\n debug: vi.fn(async () => ({ debuggerUrl: MOCK_DEBUG_URL })),\n },\n },\n })),\n}));\n\nvi.mock(\"../lib/v3/launch/local\", () => ({\n launchLocalChrome: vi.fn(async () => ({\n ws: \"ws://local-cdp\",\n chrome: { kill: vi.fn(async () => {}) },\n })),\n}));\n\ndescribe(\"browserbase accessors\", () => {\n beforeEach(() => {\n process.env.BROWSERBASE_API_KEY = \"fake-key\";\n process.env.BROWSERBASE_PROJECT_ID = \"fake-project\";\n });\n\n afterEach(() => {\n delete process.env.BROWSERBASE_API_KEY;\n delete process.env.BROWSERBASE_PROJECT_ID;\n vi.clearAllMocks();\n });\n\n it(\"exposes Browserbase session and debug URLs after init\", async () => {\n const v3 = new V3({\n env: \"BROWSERBASE\",\n disableAPI: true,\n verbose: 0,\n });\n\n try {\n await v3.init();\n\n expect(v3.browserbaseSessionURL).toBe(MOCK_SESSION_URL);\n expect(v3.browserbaseDebugURL).toBe(MOCK_DEBUG_URL);\n } finally {\n await v3.close().catch(() => {});\n }\n });\n\n it(\"clears stored URLs after close\", async () => {\n const v3 = new V3({\n env: \"BROWSERBASE\",\n disableAPI: true,\n verbose: 0,\n });\n\n await v3.init();\n await v3.close();\n\n expect(v3.browserbaseSessionURL).toBeUndefined();\n expect(v3.browserbaseDebugURL).toBeUndefined();\n });\n});\n\ndescribe(\"local accessors\", () => {\n it(\"stay empty for LOCAL environments\", async () => {\n const v3 = new V3({\n env: \"LOCAL\",\n disableAPI: true,\n verbose: 0,\n localBrowserLaunchOptions: {\n cdpUrl: \"ws://local-existing-session\",\n },\n });\n\n try {\n await v3.init();\n expect(v3.browserbaseSessionURL).toBeUndefined();\n expect(v3.browserbaseDebugURL).toBeUndefined();\n } finally {\n await v3.close().catch(() => {});\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
var import_vitest = require("vitest");
|
|
2
|
+
var import_ActCache = require("../lib/v3/cache/ActCache.js");
|
|
3
|
+
var import_AgentCache = require("../lib/v3/cache/AgentCache.js");
|
|
4
|
+
function createFakeStorage(entry) {
|
|
5
|
+
return {
|
|
6
|
+
enabled: true,
|
|
7
|
+
readJson: import_vitest.vi.fn().mockResolvedValue({ value: entry }),
|
|
8
|
+
writeJson: import_vitest.vi.fn().mockResolvedValue({}),
|
|
9
|
+
directory: "/tmp/cache"
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
(0, import_vitest.describe)("Cache LLM client selection", () => {
|
|
13
|
+
(0, import_vitest.it)("ActCache uses provided override client during replay", async () => {
|
|
14
|
+
const action = {
|
|
15
|
+
selector: "xpath=/html/body/button",
|
|
16
|
+
description: "click button",
|
|
17
|
+
method: "click",
|
|
18
|
+
arguments: []
|
|
19
|
+
};
|
|
20
|
+
const entry = {
|
|
21
|
+
version: 1,
|
|
22
|
+
instruction: "click button",
|
|
23
|
+
url: "https://example.com",
|
|
24
|
+
variableKeys: [],
|
|
25
|
+
actions: [action],
|
|
26
|
+
actionDescription: "click button",
|
|
27
|
+
message: "done"
|
|
28
|
+
};
|
|
29
|
+
const storage = createFakeStorage(entry);
|
|
30
|
+
const handler = {
|
|
31
|
+
takeDeterministicAction: import_vitest.vi.fn().mockResolvedValue({
|
|
32
|
+
success: true,
|
|
33
|
+
message: "ok",
|
|
34
|
+
actionDescription: "click button",
|
|
35
|
+
actions: [action]
|
|
36
|
+
})
|
|
37
|
+
};
|
|
38
|
+
const defaultClient = { id: "default" };
|
|
39
|
+
const overrideClient = { id: "override" };
|
|
40
|
+
const cache = new import_ActCache.ActCache({
|
|
41
|
+
storage,
|
|
42
|
+
logger: import_vitest.vi.fn(),
|
|
43
|
+
getActHandler: () => handler,
|
|
44
|
+
getDefaultLlmClient: () => defaultClient,
|
|
45
|
+
domSettleTimeoutMs: void 0
|
|
46
|
+
});
|
|
47
|
+
const context = {
|
|
48
|
+
instruction: "click button",
|
|
49
|
+
cacheKey: "abc",
|
|
50
|
+
pageUrl: "https://example.com",
|
|
51
|
+
variableKeys: [],
|
|
52
|
+
variables: void 0
|
|
53
|
+
};
|
|
54
|
+
const result = await cache.tryReplay(
|
|
55
|
+
context,
|
|
56
|
+
{},
|
|
57
|
+
void 0,
|
|
58
|
+
overrideClient
|
|
59
|
+
);
|
|
60
|
+
(0, import_vitest.expect)(result?.success).toBe(true);
|
|
61
|
+
(0, import_vitest.expect)(handler.takeDeterministicAction).toHaveBeenCalledTimes(1);
|
|
62
|
+
const call = import_vitest.vi.mocked(handler.takeDeterministicAction).mock.calls[0];
|
|
63
|
+
(0, import_vitest.expect)(call?.[3]).toBe(overrideClient);
|
|
64
|
+
});
|
|
65
|
+
(0, import_vitest.it)("AgentCache uses provided override client during replay", async () => {
|
|
66
|
+
const action = {
|
|
67
|
+
selector: "xpath=/html/body/input",
|
|
68
|
+
description: "type email",
|
|
69
|
+
method: "type",
|
|
70
|
+
arguments: ["test@example.com"]
|
|
71
|
+
};
|
|
72
|
+
const agentStep = {
|
|
73
|
+
type: "act",
|
|
74
|
+
instruction: "type email",
|
|
75
|
+
actions: [action]
|
|
76
|
+
};
|
|
77
|
+
const entry = {
|
|
78
|
+
version: 1,
|
|
79
|
+
instruction: "fill form",
|
|
80
|
+
startUrl: "https://example.com",
|
|
81
|
+
options: {},
|
|
82
|
+
configSignature: "sig",
|
|
83
|
+
steps: [agentStep],
|
|
84
|
+
result: { success: true, actions: [] },
|
|
85
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
86
|
+
};
|
|
87
|
+
const storage = {
|
|
88
|
+
enabled: true,
|
|
89
|
+
readJson: import_vitest.vi.fn().mockImplementation(async () => ({ value: entry })),
|
|
90
|
+
writeJson: import_vitest.vi.fn().mockResolvedValue({}),
|
|
91
|
+
directory: "/tmp/cache"
|
|
92
|
+
};
|
|
93
|
+
const handler = {
|
|
94
|
+
takeDeterministicAction: import_vitest.vi.fn().mockResolvedValue({
|
|
95
|
+
success: true,
|
|
96
|
+
message: "ok",
|
|
97
|
+
actionDescription: "type email",
|
|
98
|
+
actions: [action]
|
|
99
|
+
})
|
|
100
|
+
};
|
|
101
|
+
const fakePage = {};
|
|
102
|
+
const ctx = {
|
|
103
|
+
awaitActivePage: import_vitest.vi.fn().mockResolvedValue(fakePage)
|
|
104
|
+
};
|
|
105
|
+
const defaultClient = { id: "default-agent" };
|
|
106
|
+
const overrideClient = { id: "override-agent" };
|
|
107
|
+
const cache = new import_AgentCache.AgentCache({
|
|
108
|
+
storage,
|
|
109
|
+
logger: import_vitest.vi.fn(),
|
|
110
|
+
getActHandler: () => handler,
|
|
111
|
+
getContext: () => ctx,
|
|
112
|
+
getDefaultLlmClient: () => defaultClient,
|
|
113
|
+
getBaseModelName: () => "openai/gpt-4.1-mini",
|
|
114
|
+
getSystemPrompt: () => void 0,
|
|
115
|
+
domSettleTimeoutMs: void 0,
|
|
116
|
+
act: import_vitest.vi.fn()
|
|
117
|
+
});
|
|
118
|
+
const context = {
|
|
119
|
+
instruction: "fill form",
|
|
120
|
+
startUrl: "https://example.com",
|
|
121
|
+
options: {},
|
|
122
|
+
configSignature: "sig",
|
|
123
|
+
cacheKey: "agent-key"
|
|
124
|
+
};
|
|
125
|
+
const result = await cache.tryReplay(context, overrideClient);
|
|
126
|
+
(0, import_vitest.expect)(result?.success).toBe(true);
|
|
127
|
+
(0, import_vitest.expect)(handler.takeDeterministicAction).toHaveBeenCalledTimes(1);
|
|
128
|
+
const call = import_vitest.vi.mocked(handler.takeDeterministicAction).mock.calls[0];
|
|
129
|
+
(0, import_vitest.expect)(call?.[3]).toBe(overrideClient);
|
|
130
|
+
});
|
|
131
|
+
(0, import_vitest.it)("AgentCache replays non-act steps without requiring an override client", async () => {
|
|
132
|
+
const gotoEntry = {
|
|
133
|
+
version: 1,
|
|
134
|
+
instruction: "navigate home",
|
|
135
|
+
startUrl: "https://example.com/source",
|
|
136
|
+
options: {},
|
|
137
|
+
configSignature: "sig",
|
|
138
|
+
steps: [
|
|
139
|
+
{
|
|
140
|
+
type: "goto",
|
|
141
|
+
url: "https://example.com/target",
|
|
142
|
+
waitUntil: "load"
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
result: { success: true, actions: [] },
|
|
146
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
147
|
+
};
|
|
148
|
+
const storage = {
|
|
149
|
+
enabled: true,
|
|
150
|
+
readJson: import_vitest.vi.fn().mockResolvedValue({ value: gotoEntry }),
|
|
151
|
+
writeJson: import_vitest.vi.fn().mockResolvedValue({}),
|
|
152
|
+
directory: "/tmp/cache"
|
|
153
|
+
};
|
|
154
|
+
const handler = {
|
|
155
|
+
takeDeterministicAction: import_vitest.vi.fn()
|
|
156
|
+
};
|
|
157
|
+
const fakePage = { goto: import_vitest.vi.fn() };
|
|
158
|
+
const ctx = {
|
|
159
|
+
awaitActivePage: import_vitest.vi.fn().mockResolvedValue(fakePage)
|
|
160
|
+
};
|
|
161
|
+
const cache = new import_AgentCache.AgentCache({
|
|
162
|
+
storage,
|
|
163
|
+
logger: import_vitest.vi.fn(),
|
|
164
|
+
getActHandler: () => handler,
|
|
165
|
+
getContext: () => ctx,
|
|
166
|
+
getDefaultLlmClient: () => ({ id: "default" }),
|
|
167
|
+
getBaseModelName: () => "openai/gpt-4.1-mini",
|
|
168
|
+
getSystemPrompt: () => void 0,
|
|
169
|
+
domSettleTimeoutMs: void 0,
|
|
170
|
+
act: import_vitest.vi.fn()
|
|
171
|
+
});
|
|
172
|
+
const context = {
|
|
173
|
+
instruction: "navigate home",
|
|
174
|
+
startUrl: "https://example.com/source",
|
|
175
|
+
options: {},
|
|
176
|
+
configSignature: "sig",
|
|
177
|
+
cacheKey: "agent-goto"
|
|
178
|
+
};
|
|
179
|
+
const result = await cache.tryReplay(context);
|
|
180
|
+
(0, import_vitest.expect)(result?.success).toBe(true);
|
|
181
|
+
(0, import_vitest.expect)(handler.takeDeterministicAction).not.toHaveBeenCalled();
|
|
182
|
+
(0, import_vitest.expect)(fakePage.goto).toHaveBeenCalledWith("https://example.com/target", {
|
|
183
|
+
waitUntil: "load"
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=cache-llm-resolution.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/cache-llm-resolution.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, expect, it, vi } from \"vitest\";\nimport { ActCache } from \"../lib/v3/cache/ActCache.js\";\nimport { AgentCache } from \"../lib/v3/cache/AgentCache.js\";\nimport type { CacheStorage } from \"../lib/v3/cache/CacheStorage.js\";\nimport type { ActHandler } from \"../lib/v3/handlers/actHandler.js\";\nimport type { LLMClient } from \"../lib/v3/llm/LLMClient.js\";\nimport type { Page } from \"../lib/v3/understudy/page.js\";\nimport type { V3Context } from \"../lib/v3/understudy/context.js\";\nimport type {\n ActCacheContext,\n CachedActEntry,\n CachedAgentEntry,\n AgentCacheContext,\n AgentReplayActStep,\n} from \"../lib/v3/types/private/index.js\";\nimport type {\n Action,\n AgentResult,\n AvailableModel,\n} from \"../lib/v3/types/public/index.js\";\n\nfunction createFakeStorage<T>(entry: T): CacheStorage {\n return {\n enabled: true,\n readJson: vi.fn().mockResolvedValue({ value: entry }),\n writeJson: vi.fn().mockResolvedValue({}),\n directory: \"/tmp/cache\",\n } as unknown as CacheStorage;\n}\n\ndescribe(\"Cache LLM client selection\", () => {\n it(\"ActCache uses provided override client during replay\", async () => {\n const action: Action = {\n selector: \"xpath=/html/body/button\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n };\n\n const entry: CachedActEntry = {\n version: 1,\n instruction: \"click button\",\n url: \"https://example.com\",\n variableKeys: [],\n actions: [action],\n actionDescription: \"click button\",\n message: \"done\",\n };\n\n const storage = createFakeStorage(entry);\n const handler = {\n takeDeterministicAction: vi.fn().mockResolvedValue({\n success: true,\n message: \"ok\",\n actionDescription: \"click button\",\n actions: [action],\n }),\n } as unknown as ActHandler;\n const defaultClient = { id: \"default\" } as unknown as LLMClient;\n const overrideClient = { id: \"override\" } as unknown as LLMClient;\n\n const cache = new ActCache({\n storage,\n logger: vi.fn(),\n getActHandler: () => handler,\n getDefaultLlmClient: () => defaultClient,\n domSettleTimeoutMs: undefined,\n });\n\n const context: ActCacheContext = {\n instruction: \"click button\",\n cacheKey: \"abc\",\n pageUrl: \"https://example.com\",\n variableKeys: [],\n variables: undefined,\n };\n\n const result = await cache.tryReplay(\n context,\n {} as Page,\n undefined,\n overrideClient,\n );\n\n expect(result?.success).toBe(true);\n expect(handler.takeDeterministicAction).toHaveBeenCalledTimes(1);\n const call = vi.mocked(handler.takeDeterministicAction).mock.calls[0];\n expect(call?.[3]).toBe(overrideClient);\n });\n\n it(\"AgentCache uses provided override client during replay\", async () => {\n const action: Action = {\n selector: \"xpath=/html/body/input\",\n description: \"type email\",\n method: \"type\",\n arguments: [\"test@example.com\"],\n };\n\n const agentStep: AgentReplayActStep = {\n type: \"act\",\n instruction: \"type email\",\n actions: [action],\n };\n\n const entry: CachedAgentEntry = {\n version: 1,\n instruction: \"fill form\",\n startUrl: \"https://example.com\",\n options: {},\n configSignature: \"sig\",\n steps: [agentStep],\n result: { success: true, actions: [] } as AgentResult,\n timestamp: new Date().toISOString(),\n };\n\n const storage = {\n enabled: true,\n readJson: vi.fn().mockImplementation(async () => ({ value: entry })),\n writeJson: vi.fn().mockResolvedValue({}),\n directory: \"/tmp/cache\",\n } as unknown as CacheStorage;\n\n const handler = {\n takeDeterministicAction: vi.fn().mockResolvedValue({\n success: true,\n message: \"ok\",\n actionDescription: \"type email\",\n actions: [action],\n }),\n } as unknown as ActHandler;\n\n const fakePage = {} as Page;\n const ctx = {\n awaitActivePage: vi.fn().mockResolvedValue(fakePage),\n } as unknown as V3Context;\n\n const defaultClient = { id: \"default-agent\" } as unknown as LLMClient;\n const overrideClient = { id: \"override-agent\" } as unknown as LLMClient;\n\n const cache = new AgentCache({\n storage,\n logger: vi.fn(),\n getActHandler: () => handler,\n getContext: () => ctx,\n getDefaultLlmClient: () => defaultClient,\n getBaseModelName: () => \"openai/gpt-4.1-mini\" as AvailableModel,\n getSystemPrompt: () => undefined,\n domSettleTimeoutMs: undefined,\n act: vi.fn(),\n });\n\n const context: AgentCacheContext = {\n instruction: \"fill form\",\n startUrl: \"https://example.com\",\n options: {},\n configSignature: \"sig\",\n cacheKey: \"agent-key\",\n };\n\n const result = await cache.tryReplay(context, overrideClient);\n\n expect(result?.success).toBe(true);\n expect(handler.takeDeterministicAction).toHaveBeenCalledTimes(1);\n const call = vi.mocked(handler.takeDeterministicAction).mock.calls[0];\n expect(call?.[3]).toBe(overrideClient);\n });\n\n it(\"AgentCache replays non-act steps without requiring an override client\", async () => {\n const gotoEntry: CachedAgentEntry = {\n version: 1,\n instruction: \"navigate home\",\n startUrl: \"https://example.com/source\",\n options: {},\n configSignature: \"sig\",\n steps: [\n {\n type: \"goto\",\n url: \"https://example.com/target\",\n waitUntil: \"load\",\n },\n ],\n result: { success: true, actions: [] } as AgentResult,\n timestamp: new Date().toISOString(),\n };\n\n const storage = {\n enabled: true,\n readJson: vi.fn().mockResolvedValue({ value: gotoEntry }),\n writeJson: vi.fn().mockResolvedValue({}),\n directory: \"/tmp/cache\",\n } as unknown as CacheStorage;\n\n const handler = {\n takeDeterministicAction: vi.fn(),\n } as unknown as ActHandler;\n\n const fakePage = { goto: vi.fn() } as unknown as Page;\n const ctx = {\n awaitActivePage: vi.fn().mockResolvedValue(fakePage),\n } as unknown as V3Context;\n\n const cache = new AgentCache({\n storage,\n logger: vi.fn(),\n getActHandler: () => handler,\n getContext: () => ctx,\n getDefaultLlmClient: () => ({ id: \"default\" }) as unknown as LLMClient,\n getBaseModelName: () => \"openai/gpt-4.1-mini\" as AvailableModel,\n getSystemPrompt: () => undefined,\n domSettleTimeoutMs: undefined,\n act: vi.fn(),\n });\n\n const context: AgentCacheContext = {\n instruction: \"navigate home\",\n startUrl: \"https://example.com/source\",\n options: {},\n configSignature: \"sig\",\n cacheKey: \"agent-goto\",\n };\n\n const result = await cache.tryReplay(context);\n\n expect(result?.success).toBe(true);\n expect(handler.takeDeterministicAction).not.toHaveBeenCalled();\n expect(fakePage.goto).toHaveBeenCalledWith(\"https://example.com/target\", {\n waitUntil: \"load\",\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var mockCDPSession_exports = {};
|
|
19
|
+
__export(mockCDPSession_exports, {
|
|
20
|
+
MockCDPSession: () => MockCDPSession
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(mockCDPSession_exports);
|
|
23
|
+
class MockCDPSession {
|
|
24
|
+
constructor(handlers = {}, sessionId = "mock-session") {
|
|
25
|
+
this.handlers = handlers;
|
|
26
|
+
this.id = sessionId;
|
|
27
|
+
}
|
|
28
|
+
id;
|
|
29
|
+
calls = [];
|
|
30
|
+
async send(method, params = {}) {
|
|
31
|
+
this.calls.push({ method, params });
|
|
32
|
+
const handler = this.handlers[method];
|
|
33
|
+
if (!handler) return {};
|
|
34
|
+
return await handler(params);
|
|
35
|
+
}
|
|
36
|
+
on() {
|
|
37
|
+
}
|
|
38
|
+
off() {
|
|
39
|
+
}
|
|
40
|
+
async close() {
|
|
41
|
+
}
|
|
42
|
+
callsFor(method) {
|
|
43
|
+
return this.calls.filter((call) => call.method === method).map(({ params }) => ({ params }));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
MockCDPSession
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=mockCDPSession.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../tests/helpers/mockCDPSession.ts"],
|
|
4
|
+
"sourcesContent": ["import type { CDPSessionLike } from \"../../lib/v3/understudy/cdp.js\";\n\ntype Handler = (params?: Record<string, unknown>) => Promise<unknown> | unknown;\n\nexport class MockCDPSession implements CDPSessionLike {\n public readonly id: string;\n public readonly calls: Array<{\n method: string;\n params?: Record<string, unknown>;\n }> = [];\n\n constructor(\n private readonly handlers: Record<string, Handler> = {},\n sessionId = \"mock-session\",\n ) {\n this.id = sessionId;\n }\n\n async send<R = unknown>(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<R> {\n this.calls.push({ method, params });\n const handler = this.handlers[method];\n if (!handler) return {} as R;\n return (await handler(params)) as R;\n }\n\n on(): void {}\n off(): void {}\n async close(): Promise<void> {}\n\n callsFor(method: string): Array<{ params?: Record<string, unknown> }> {\n return this.calls\n .filter((call) => call.method === method)\n .map(({ params }) => ({ params }));\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,MAAM,eAAyC;AAAA,EAOpD,YACmB,WAAoC,CAAC,GACtD,YAAY,gBACZ;AAFiB;AAGjB,SAAK,KAAK;AAAA,EACZ;AAAA,EAXgB;AAAA,EACA,QAGX,CAAC;AAAA,EASN,MAAM,KACJ,QACA,SAAkC,CAAC,GACvB;AACZ,SAAK,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC;AAClC,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,WAAQ,MAAM,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,KAAW;AAAA,EAAC;AAAA,EACZ,MAAY;AAAA,EAAC;AAAA,EACb,MAAM,QAAuB;AAAA,EAAC;AAAA,EAE9B,SAAS,QAA6D;AACpE,WAAO,KAAK,MACT,OAAO,CAAC,SAAS,KAAK,WAAW,MAAM,EACvC,IAAI,CAAC,EAAE,OAAO,OAAO,EAAE,OAAO,EAAE;AAAA,EACrC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|