@browserbasehq/orca 3.1.0-patch.4 → 3.2.0-middleware.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/lib/inference.js +1 -4
- package/dist/cjs/lib/inference.js.map +1 -1
- package/dist/cjs/lib/utils.d.ts +1 -0
- package/dist/cjs/lib/utils.js +4 -0
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +8 -0
- package/dist/cjs/lib/v3/agent/AgentClient.js +13 -0
- package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js +0 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +6 -7
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +6 -7
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +1 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +67 -8
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +1 -1
- package/dist/cjs/lib/v3/agent/tools/act.js +11 -4
- package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
- package/dist/cjs/lib/v3/agent/tools/ariaTree.js +49 -22
- package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
- package/dist/cjs/lib/v3/agent/tools/braveSearch.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js +70 -0
- package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/click.js +23 -31
- package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +22 -30
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/tools/extract.js +7 -3
- package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +30 -30
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +7 -2
- package/dist/cjs/lib/v3/agent/tools/fillform.js +56 -45
- package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +19 -3
- package/dist/cjs/lib/v3/agent/tools/index.js +63 -11
- package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +1 -1
- package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.js +32 -15
- package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/scroll.js +12 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/type.js +23 -31
- package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/wait.js +6 -0
- package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
- package/dist/cjs/lib/v3/agent/utils/captchaSolver.js +175 -0
- package/dist/cjs/lib/v3/agent/utils/captchaSolver.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/cjs/lib/v3/api.d.ts +2 -2
- package/dist/cjs/lib/v3/api.js +1 -1
- package/dist/cjs/lib/v3/api.js.map +1 -1
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
- package/dist/cjs/lib/v3/cache/ActCache.js +2 -18
- package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/cjs/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
- package/dist/cjs/lib/v3/flowlogger/EventEmitter.js +30 -0
- package/dist/cjs/lib/v3/flowlogger/EventEmitter.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/EventSink.d.ts +44 -0
- package/dist/cjs/lib/v3/flowlogger/EventSink.js +217 -0
- package/dist/cjs/lib/v3/flowlogger/EventSink.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/EventStore.d.ts +26 -0
- package/dist/cjs/lib/v3/flowlogger/EventStore.js +135 -0
- package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
- package/dist/cjs/lib/v3/flowlogger/FlowLogger.js +591 -0
- package/dist/cjs/lib/v3/flowlogger/FlowLogger.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/prettify.d.ts +6 -0
- package/dist/cjs/lib/v3/flowlogger/prettify.js +395 -0
- package/dist/cjs/lib/v3/flowlogger/prettify.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/actHandler.js +1 -2
- package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/extractHandler.js +2 -2
- package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/observeHandler.js +1 -2
- package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +130 -91
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/index.d.ts +2 -1
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
- package/dist/cjs/lib/v3/launch/browserbase.js +4 -9
- package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -1
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/cjs/lib/v3/llm/LLMProvider.js +13 -11
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +11 -17
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/runtimePaths.js +2 -1
- package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
- package/dist/cjs/lib/v3/shutdown/supervisor.js +2 -2
- package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
- package/dist/cjs/lib/v3/timeoutConfig.js +5 -0
- package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -1
- package/dist/cjs/lib/v3/types/private/cache.d.ts +0 -1
- package/dist/cjs/lib/v3/types/private/cache.js.map +1 -1
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
- package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agent.d.ts +28 -3
- package/dist/cjs/lib/v3/types/public/agent.js +0 -1
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/api.d.ts +7 -0
- package/dist/cjs/lib/v3/types/public/api.js +9 -0
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +12 -3
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
- package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +8 -13
- package/dist/cjs/lib/v3/understudy/cdp.js +180 -20
- package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/context.d.ts +1 -0
- package/dist/cjs/lib/v3/understudy/context.js +142 -60
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/frame.js +23 -6
- package/dist/cjs/lib/v3/understudy/frame.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/page.js +84 -21
- package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
- package/dist/cjs/lib/v3/understudy/screenshotUtils.js +0 -18
- package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -1
- package/dist/cjs/lib/v3/v3.d.ts +26 -3
- package/dist/cjs/lib/v3/v3.js +242 -180
- package/dist/cjs/lib/v3/v3.js.map +1 -1
- package/dist/cjs/lib/version.d.ts +1 -1
- package/dist/cjs/lib/version.js +1 -1
- package/dist/cjs/lib/version.js.map +1 -1
- package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +56 -0
- package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +6 -6
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js +1 -1
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -1
- package/dist/cjs/tests/integration/context-addInitScript.spec.js +104 -11
- package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -1
- package/dist/cjs/tests/integration/flowLogger.spec.js +714 -0
- package/dist/cjs/tests/integration/flowLogger.spec.js.map +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-screenshot.spec.js +1 -1
- package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -1
- package/dist/cjs/tests/integration/testUtils.d.ts +33 -0
- package/dist/cjs/tests/integration/testUtils.js +144 -0
- package/dist/cjs/tests/integration/testUtils.js.map +1 -1
- package/dist/cjs/tests/integration/timeouts.spec.js +278 -0
- package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +285 -0
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
- package/dist/cjs/tests/unit/agent-execution-model.test.js +1 -1
- package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +20 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
- package/dist/cjs/tests/unit/captcha-solver.test.d.ts +1 -0
- package/dist/cjs/tests/unit/captcha-solver.test.js +154 -0
- package/dist/cjs/tests/unit/captcha-solver.test.js.map +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +95 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +43 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +250 -0
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -0
- package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
- package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
- package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
- package/dist/cjs/tests/unit/model-deprecation.test.js +5 -8
- package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -1
- package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +1 -0
- package/dist/cjs/tests/unit/openai-cua-client.test.js +71 -0
- package/dist/cjs/tests/unit/openai-cua-client.test.js.map +1 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +13 -1
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
- package/dist/esm/lib/inference.js +1 -4
- package/dist/esm/lib/inference.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +1 -0
- package/dist/esm/lib/utils.js +3 -0
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentClient.d.ts +8 -0
- package/dist/esm/lib/v3/agent/AgentClient.js +13 -0
- package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js +0 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +6 -7
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +6 -7
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +1 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +67 -8
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -1
- package/dist/esm/lib/v3/agent/tools/act.js +11 -4
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
- package/dist/esm/lib/v3/agent/tools/ariaTree.js +49 -22
- package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
- package/dist/esm/lib/v3/agent/tools/braveSearch.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
- package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js +66 -0
- package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/click.js +23 -31
- package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/extract.js +7 -3
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js +30 -30
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +7 -2
- package/dist/esm/lib/v3/agent/tools/fillform.js +56 -45
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +19 -3
- package/dist/esm/lib/v3/agent/tools/index.js +63 -11
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/keys.d.ts +1 -1
- package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
- package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/type.js +23 -31
- package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
- package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
- package/dist/esm/lib/v3/agent/utils/captchaSolver.js +171 -0
- package/dist/esm/lib/v3/agent/utils/captchaSolver.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/esm/lib/v3/api.d.ts +2 -2
- package/dist/esm/lib/v3/api.js +1 -1
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
- package/dist/esm/lib/v3/cache/ActCache.js +2 -18
- package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/esm/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
- package/dist/esm/lib/v3/flowlogger/EventEmitter.js +26 -0
- package/dist/esm/lib/v3/flowlogger/EventEmitter.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/EventSink.d.ts +44 -0
- package/dist/esm/lib/v3/flowlogger/EventSink.js +206 -0
- package/dist/esm/lib/v3/flowlogger/EventSink.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/EventStore.d.ts +26 -0
- package/dist/esm/lib/v3/flowlogger/EventStore.js +127 -0
- package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
- package/dist/esm/lib/v3/flowlogger/FlowLogger.js +583 -0
- package/dist/esm/lib/v3/flowlogger/FlowLogger.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/prettify.d.ts +6 -0
- package/dist/esm/lib/v3/flowlogger/prettify.js +389 -0
- package/dist/esm/lib/v3/flowlogger/prettify.js.map +1 -0
- package/dist/esm/lib/v3/handlers/actHandler.js +1 -2
- package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
- package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/esm/lib/v3/handlers/observeHandler.js +1 -2
- package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +131 -92
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +2 -1
- package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
- package/dist/esm/lib/v3/launch/browserbase.js +4 -9
- package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/esm/lib/v3/llm/LLMProvider.js +14 -12
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +11 -17
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/runtimePaths.js +2 -1
- package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
- package/dist/esm/lib/v3/timeoutConfig.js +5 -0
- package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
- package/dist/esm/lib/v3/types/private/cache.d.ts +0 -1
- package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +28 -3
- package/dist/esm/lib/v3/types/public/agent.js +0 -1
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +7 -0
- package/dist/esm/lib/v3/types/public/api.js +9 -0
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +12 -3
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
- package/dist/esm/lib/v3/types/public/options.js.map +1 -1
- package/dist/esm/lib/v3/understudy/cdp.d.ts +8 -13
- package/dist/esm/lib/v3/understudy/cdp.js +181 -21
- package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.d.ts +1 -0
- package/dist/esm/lib/v3/understudy/context.js +142 -60
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/frame.js +23 -6
- package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
- package/dist/esm/lib/v3/understudy/page.js +86 -23
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
- package/dist/esm/lib/v3/understudy/screenshotUtils.js +0 -17
- package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
- package/dist/esm/lib/v3/v3.d.ts +26 -3
- package/dist/esm/lib/v3/v3.js +242 -181
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/lib/version.d.ts +1 -1
- package/dist/esm/lib/version.js +1 -1
- package/dist/esm/lib/version.js.map +1 -1
- package/dist/esm/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +54 -0
- package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +6 -6
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
- package/dist/esm/tests/integration/cdp-session-detached.spec.js +1 -1
- package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -1
- package/dist/esm/tests/integration/context-addInitScript.spec.js +104 -11
- package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -1
- package/dist/esm/tests/integration/flowLogger.spec.d.ts +1 -0
- package/dist/esm/tests/integration/flowLogger.spec.js +712 -0
- package/dist/esm/tests/integration/flowLogger.spec.js.map +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-screenshot.spec.js +1 -1
- package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -1
- package/dist/esm/tests/integration/testUtils.d.ts +33 -0
- package/dist/esm/tests/integration/testUtils.js +138 -0
- package/dist/esm/tests/integration/testUtils.js.map +1 -1
- package/dist/esm/tests/integration/timeouts.spec.js +278 -0
- package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
- package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js +283 -0
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
- package/dist/esm/tests/unit/agent-execution-model.test.js +1 -1
- package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js +20 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
- package/dist/esm/tests/unit/captcha-solver.test.d.ts +1 -0
- package/dist/esm/tests/unit/captcha-solver.test.js +152 -0
- package/dist/esm/tests/unit/captcha-solver.test.js.map +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +93 -0
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +41 -0
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
- package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js +248 -0
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -0
- package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
- package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
- package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
- package/dist/esm/tests/unit/model-deprecation.test.js +5 -8
- package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -1
- package/dist/esm/tests/unit/openai-cua-client.test.d.ts +1 -0
- package/dist/esm/tests/unit/openai-cua-client.test.js +69 -0
- package/dist/esm/tests/unit/openai-cua-client.test.js.map +1 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +13 -1
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
- package/package.json +5 -3
- package/dist/cjs/lib/v3/agent/tools/search.js.map +0 -1
- package/dist/cjs/lib/v3/flowLogger.d.ts +0 -139
- package/dist/cjs/lib/v3/flowLogger.js +0 -881
- package/dist/cjs/lib/v3/flowLogger.js.map +0 -1
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +0 -209
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +0 -1
- package/dist/esm/lib/v3/agent/tools/search.js.map +0 -1
- package/dist/esm/lib/v3/flowLogger.d.ts +0 -139
- package/dist/esm/lib/v3/flowLogger.js +0 -868
- package/dist/esm/lib/v3/flowLogger.js.map +0 -1
- package/dist/esm/tests/unit/rerender-missing-shadows.test.js +0 -207
- package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +0 -1
- /package/dist/cjs/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
- /package/dist/cjs/tests/{unit/rerender-missing-shadows.test.d.ts → integration/agent-captcha-autosolve.spec.d.ts} +0 -0
- /package/dist/{esm/tests/unit/rerender-missing-shadows.test.d.ts → cjs/tests/integration/flowLogger.spec.d.ts} +0 -0
- /package/dist/esm/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/frame.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/frame.ts\nimport { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport { Locator } from \"./locator.js\";\nimport { StagehandEvalError } from \"../types/public/sdkErrors.js\";\nimport { executionContexts } from \"./executionContextRegistry.js\";\n\ninterface FrameManager {\n session: CDPSessionLike;\n frameId: string;\n pageId: string;\n}\n\n/**\n * Frame\n *\n * A thin, session-bound handle to a specific DOM frame (by frameId).\n * All CDP calls in this class go through `this.session`, which MUST be the\n * owning session for `this.frameId`. Page is responsible for constructing\n * Frames with the correct session.\n */\nexport class Frame implements FrameManager {\n /** Owning CDP session id (useful for logs); null for root connection (should not happen for targets) */\n public readonly sessionId: string | null;\n\n constructor(\n public session: CDPSessionLike,\n public frameId: string,\n public pageId: string,\n private readonly remoteBrowser: boolean,\n ) {\n this.sessionId = this.session.id ?? null;\n }\n\n /** True when the controlled browser runs on a different machine. */\n public isBrowserRemote(): boolean {\n return this.remoteBrowser;\n }\n\n /** DOM.getNodeForLocation → DOM.describeNode */\n async getNodeAtLocation(x: number, y: number): Promise<Protocol.DOM.Node> {\n await this.session.send(\"DOM.enable\");\n const { backendNodeId } = await this.session.send<{\n backendNodeId: Protocol.DOM.BackendNodeId;\n }>(\"DOM.getNodeForLocation\", {\n x,\n y,\n includeUserAgentShadowDOM: true,\n ignorePointerEventsNone: false,\n });\n\n const { node } = await this.session.send<{\n node: Protocol.DOM.Node;\n }>(\"DOM.describeNode\", { backendNodeId });\n\n return node;\n }\n\n /** CSS selector → DOM.querySelector → DOM.getBoxModel */\n async getLocationForSelector(\n selector: string,\n ): Promise<{ x: number; y: number; width: number; height: number }> {\n await this.session.send(\"DOM.enable\");\n\n const { root } = await this.session.send<{ root: Protocol.DOM.Node }>(\n \"DOM.getDocument\",\n );\n\n const { nodeId } = await this.session.send<{ nodeId: Protocol.DOM.NodeId }>(\n \"DOM.querySelector\",\n { nodeId: root.nodeId, selector },\n );\n\n const { model } = await this.session.send<{ model: Protocol.DOM.BoxModel }>(\n \"DOM.getBoxModel\",\n { nodeId },\n );\n\n const x = model.content[0];\n const y = model.content[1];\n const width = model.width;\n const height = model.height;\n return { x, y, width, height };\n }\n\n /** Accessibility.getFullAXTree (+ recurse into child frames if requested) */\n async getAccessibilityTree(\n withFrames = false,\n ): Promise<Protocol.Accessibility.AXNode[]> {\n await this.session.send(\"Accessibility.enable\");\n let nodes: Protocol.Accessibility.AXNode[];\n try {\n ({ nodes } = await this.session.send<{\n nodes: Protocol.Accessibility.AXNode[];\n }>(\"Accessibility.getFullAXTree\", { frameId: this.frameId }));\n } catch (e) {\n const msg = String((e as Error)?.message ?? e ?? \"\");\n const isFrameScopeError =\n msg.includes(\"Frame with the given\") ||\n msg.includes(\"does not belong to the target\") ||\n msg.includes(\"is not found\");\n if (!isFrameScopeError) throw e;\n // Retry unscoped: on OOPIF sessions, returns the child doc's AX tree.\n ({ nodes } = await this.session.send<{\n nodes: Protocol.Accessibility.AXNode[];\n }>(\"Accessibility.getFullAXTree\"));\n }\n\n if (!withFrames) return nodes;\n\n const children = await this.childFrames();\n for (const child of children) {\n const childNodes = await child.getAccessibilityTree(false);\n nodes.push(...childNodes);\n }\n return nodes;\n }\n\n /**\n * Evaluate a function or expression in this frame's main world.\n * - If a string is provided, treated as a JS expression.\n * - If a function is provided, it is stringified and invoked with the optional argument.\n */\n async evaluate<R = unknown, Arg = unknown>(\n pageFunctionOrExpression: string | ((arg: Arg) => R | Promise<R>),\n arg?: Arg,\n ): Promise<R> {\n await this.session.send(\"Runtime.enable\").catch(() => {});\n const contextId = await this.getMainWorldExecutionContextId();\n\n const isString = typeof pageFunctionOrExpression === \"string\";\n let expression: string;\n\n if (isString) {\n expression = String(pageFunctionOrExpression);\n } else {\n const fnSrc = pageFunctionOrExpression.toString();\n const argJson = JSON.stringify(arg);\n expression = `(() => {\n const __fn = ${fnSrc};\n const __arg = ${argJson};\n try {\n const __res = __fn(__arg);\n return Promise.resolve(__res).then(v => {\n try { return JSON.parse(JSON.stringify(v)); } catch { return v; }\n });\n } catch (e) { throw e; }\n })()`;\n }\n\n const res = await this.session.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression,\n contextId,\n awaitPromise: true,\n returnByValue: true,\n },\n );\n if (res.exceptionDetails) {\n throw new StagehandEvalError(\n res.exceptionDetails.text ?? \"Evaluation failed\",\n );\n }\n return res.result.value as R;\n }\n\n /** Page.captureScreenshot (frame-scoped session) */\n async screenshot(options?: {\n fullPage?: boolean;\n clip?: { x: number; y: number; width: number; height: number };\n type?: \"png\" | \"jpeg\";\n quality?: number;\n scale?: number;\n }): Promise<Buffer> {\n await this.session.send(\"Page.enable\");\n const format = options?.type ?? \"png\";\n const params: Protocol.Page.CaptureScreenshotRequest & { scale?: number } =\n {\n format,\n fromSurface: true,\n captureBeyondViewport: options?.fullPage,\n };\n\n const clampScale = (value: number): number =>\n Math.min(2, Math.max(0.1, value));\n\n const normalizedScale =\n typeof options?.scale === \"number\"\n ? clampScale(options.scale)\n : undefined;\n\n if (options?.clip) {\n const clip = {\n x: options.clip.x,\n y: options.clip.y,\n width: options.clip.width,\n height: options.clip.height,\n scale: normalizedScale ?? 1,\n };\n params.clip = clip;\n } else if (normalizedScale !== undefined && normalizedScale !== 1) {\n params.scale = normalizedScale;\n }\n\n if (format === \"jpeg\" && typeof options?.quality === \"number\") {\n const q = Math.round(options.quality);\n params.quality = Math.min(100, Math.max(0, q));\n }\n\n const { data } =\n await this.session.send<Protocol.Page.CaptureScreenshotResponse>(\n \"Page.captureScreenshot\",\n params,\n );\n return Buffer.from(data, \"base64\");\n }\n\n /** Child frames via Page.getFrameTree */\n async childFrames(): Promise<Frame[]> {\n const { frameTree } = await this.session.send<{\n frameTree: Protocol.Page.FrameTree;\n }>(\"Page.getFrameTree\");\n const frames: Frame[] = [];\n\n const collect = (tree: Protocol.Page.FrameTree) => {\n if (tree.frame.parentId === this.frameId) {\n frames.push(\n new Frame(\n this.session,\n tree.frame.id,\n this.pageId,\n this.remoteBrowser,\n ),\n );\n }\n tree.childFrames?.forEach(collect);\n };\n\n collect(frameTree);\n return frames;\n }\n\n /** Wait for a lifecycle state (load/domcontentloaded/networkidle) */\n async waitForLoadState(\n state: \"load\" | \"domcontentloaded\" | \"networkidle\" = \"load\",\n timeoutMs: number = 15_000,\n ): Promise<void> {\n await this.session.send(\"Page.enable\");\n const targetState = state.toLowerCase();\n const timeout = Math.max(0, timeoutMs);\n await new Promise<void>((resolve, reject) => {\n let done = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const finish = () => {\n if (done) return;\n done = true;\n this.session.off(\"Page.lifecycleEvent\", handler);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n resolve();\n };\n const handler = (evt: Protocol.Page.LifecycleEventEvent) => {\n const sameFrame = evt.frameId === this.frameId;\n // need to normalize here because CDP lifecycle names look like 'DOMContentLoaded'\n // but we accept 'domcontentloaded'\n const lifecycleName = String(evt.name ?? \"\").toLowerCase();\n if (sameFrame && lifecycleName === targetState) {\n finish();\n }\n };\n this.session.on(\"Page.lifecycleEvent\", handler);\n\n timer = setTimeout(() => {\n if (done) return;\n done = true;\n this.session.off(\"Page.lifecycleEvent\", handler);\n reject(\n new Error(\n `waitForLoadState(${state}) timed out after ${timeout}ms for frame ${this.frameId}`,\n ),\n );\n }, timeout);\n });\n }\n\n /** Simple placeholder for your own locator abstraction */\n locator(\n selector: string,\n options?: { deep?: boolean; depth?: number },\n ): Locator {\n return new Locator(this, selector, options);\n }\n\n /** Resolve the main-world execution context id for this frame. */\n private async getMainWorldExecutionContextId(): Promise<number> {\n return executionContexts.waitForMainWorld(this.session, this.frameId, 1000);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/frame.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/frame.ts\nimport { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport { Locator } from \"./locator.js\";\nimport { StagehandEvalError } from \"../types/public/sdkErrors.js\";\nimport { executionContexts } from \"./executionContextRegistry.js\";\n\ninterface FrameManager {\n session: CDPSessionLike;\n frameId: string;\n pageId: string;\n}\n\n/**\n * Frame\n *\n * A thin, session-bound handle to a specific DOM frame (by frameId).\n * All CDP calls in this class go through `this.session`, which MUST be the\n * owning session for `this.frameId`. Page is responsible for constructing\n * Frames with the correct session.\n */\nexport class Frame implements FrameManager {\n /** Owning CDP session id (useful for logs); null for root connection (should not happen for targets) */\n public readonly sessionId: string | null;\n\n constructor(\n public session: CDPSessionLike,\n public frameId: string,\n public pageId: string,\n private readonly remoteBrowser: boolean,\n ) {\n this.sessionId = this.session.id ?? null;\n }\n\n /** True when the controlled browser runs on a different machine. */\n public isBrowserRemote(): boolean {\n return this.remoteBrowser;\n }\n\n /** DOM.getNodeForLocation → DOM.describeNode */\n async getNodeAtLocation(x: number, y: number): Promise<Protocol.DOM.Node> {\n await this.session.send(\"DOM.enable\");\n const { backendNodeId } = await this.session.send<{\n backendNodeId: Protocol.DOM.BackendNodeId;\n }>(\"DOM.getNodeForLocation\", {\n x,\n y,\n includeUserAgentShadowDOM: true,\n ignorePointerEventsNone: false,\n });\n\n const { node } = await this.session.send<{\n node: Protocol.DOM.Node;\n }>(\"DOM.describeNode\", { backendNodeId });\n\n return node;\n }\n\n /** CSS selector → DOM.querySelector → DOM.getBoxModel */\n async getLocationForSelector(\n selector: string,\n ): Promise<{ x: number; y: number; width: number; height: number }> {\n await this.session.send(\"DOM.enable\");\n\n const { root } = await this.session.send<{ root: Protocol.DOM.Node }>(\n \"DOM.getDocument\",\n );\n\n const { nodeId } = await this.session.send<{ nodeId: Protocol.DOM.NodeId }>(\n \"DOM.querySelector\",\n { nodeId: root.nodeId, selector },\n );\n\n const { model } = await this.session.send<{ model: Protocol.DOM.BoxModel }>(\n \"DOM.getBoxModel\",\n { nodeId },\n );\n\n const x = model.content[0];\n const y = model.content[1];\n const width = model.width;\n const height = model.height;\n return { x, y, width, height };\n }\n\n /** Accessibility.getFullAXTree (+ recurse into child frames if requested) */\n async getAccessibilityTree(\n withFrames = false,\n ): Promise<Protocol.Accessibility.AXNode[]> {\n await this.session.send(\"Accessibility.enable\");\n let nodes: Protocol.Accessibility.AXNode[];\n try {\n ({ nodes } = await this.session.send<{\n nodes: Protocol.Accessibility.AXNode[];\n }>(\"Accessibility.getFullAXTree\", { frameId: this.frameId }));\n } catch (e) {\n const msg = String((e as Error)?.message ?? e ?? \"\");\n const isFrameScopeError =\n msg.includes(\"Frame with the given\") ||\n msg.includes(\"does not belong to the target\") ||\n msg.includes(\"is not found\");\n if (!isFrameScopeError) throw e;\n // Retry unscoped: on OOPIF sessions, returns the child doc's AX tree.\n ({ nodes } = await this.session.send<{\n nodes: Protocol.Accessibility.AXNode[];\n }>(\"Accessibility.getFullAXTree\"));\n }\n\n if (!withFrames) return nodes;\n\n const children = await this.childFrames();\n for (const child of children) {\n const childNodes = await child.getAccessibilityTree(false);\n nodes.push(...childNodes);\n }\n return nodes;\n }\n\n /**\n * Evaluate a function or expression in this frame's main world.\n * - If a string is provided, treated as a JS expression.\n * - If a function is provided, it is stringified and invoked with the optional argument.\n */\n async evaluate<R = unknown, Arg = unknown>(\n pageFunctionOrExpression: string | ((arg: Arg) => R | Promise<R>),\n arg?: Arg,\n ): Promise<R> {\n await this.session.send(\"Runtime.enable\").catch(() => {});\n const contextId = await this.getMainWorldExecutionContextId();\n\n const isString = typeof pageFunctionOrExpression === \"string\";\n let expression: string;\n\n if (isString) {\n expression = String(pageFunctionOrExpression);\n } else {\n const fnSrc = pageFunctionOrExpression.toString();\n const argJson = JSON.stringify(arg);\n expression = `(() => {\n const __fn = ${fnSrc};\n const __arg = ${argJson};\n try {\n const __res = __fn(__arg);\n return Promise.resolve(__res).then(v => {\n try { return JSON.parse(JSON.stringify(v)); } catch { return v; }\n });\n } catch (e) { throw e; }\n })()`;\n }\n\n let res: Protocol.Runtime.EvaluateResponse;\n try {\n res = await this.session.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression,\n contextId,\n awaitPromise: true,\n returnByValue: true,\n },\n );\n } catch (error) {\n // Execution contexts can be recreated between context lookup and\n // Runtime.evaluate during popup/navigate churn. Retry once with a fresh id.\n const msg = error instanceof Error ? error.message : String(error);\n if (!msg.includes(\"Cannot find context with specified id\")) throw error;\n const freshContextId = await this.getMainWorldExecutionContextId();\n res = await this.session.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression,\n contextId: freshContextId,\n awaitPromise: true,\n returnByValue: true,\n },\n );\n }\n if (res.exceptionDetails) {\n throw new StagehandEvalError(\n res.exceptionDetails.text ?? \"Evaluation failed\",\n );\n }\n return res.result.value as R;\n }\n\n /** Page.captureScreenshot (frame-scoped session) */\n async screenshot(options?: {\n fullPage?: boolean;\n clip?: { x: number; y: number; width: number; height: number };\n type?: \"png\" | \"jpeg\";\n quality?: number;\n scale?: number;\n }): Promise<Buffer> {\n await this.session.send(\"Page.enable\");\n const format = options?.type ?? \"png\";\n const params: Protocol.Page.CaptureScreenshotRequest & { scale?: number } =\n {\n format,\n fromSurface: true,\n captureBeyondViewport: options?.fullPage,\n };\n\n const clampScale = (value: number): number =>\n Math.min(2, Math.max(0.1, value));\n\n const normalizedScale =\n typeof options?.scale === \"number\"\n ? clampScale(options.scale)\n : undefined;\n\n if (options?.clip) {\n const clip = {\n x: options.clip.x,\n y: options.clip.y,\n width: options.clip.width,\n height: options.clip.height,\n scale: normalizedScale ?? 1,\n };\n params.clip = clip;\n } else if (normalizedScale !== undefined && normalizedScale !== 1) {\n params.scale = normalizedScale;\n }\n\n if (format === \"jpeg\" && typeof options?.quality === \"number\") {\n const q = Math.round(options.quality);\n params.quality = Math.min(100, Math.max(0, q));\n }\n\n const { data } =\n await this.session.send<Protocol.Page.CaptureScreenshotResponse>(\n \"Page.captureScreenshot\",\n params,\n );\n return Buffer.from(data, \"base64\");\n }\n\n /** Child frames via Page.getFrameTree */\n async childFrames(): Promise<Frame[]> {\n const { frameTree } = await this.session.send<{\n frameTree: Protocol.Page.FrameTree;\n }>(\"Page.getFrameTree\");\n const frames: Frame[] = [];\n\n const collect = (tree: Protocol.Page.FrameTree) => {\n if (tree.frame.parentId === this.frameId) {\n frames.push(\n new Frame(\n this.session,\n tree.frame.id,\n this.pageId,\n this.remoteBrowser,\n ),\n );\n }\n tree.childFrames?.forEach(collect);\n };\n\n collect(frameTree);\n return frames;\n }\n\n /** Wait for a lifecycle state (load/domcontentloaded/networkidle) */\n async waitForLoadState(\n state: \"load\" | \"domcontentloaded\" | \"networkidle\" = \"load\",\n timeoutMs: number = 15_000,\n ): Promise<void> {\n await this.session.send(\"Page.enable\");\n const targetState = state.toLowerCase();\n const timeout = Math.max(0, timeoutMs);\n await new Promise<void>((resolve, reject) => {\n let done = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const finish = () => {\n if (done) return;\n done = true;\n this.session.off(\"Page.lifecycleEvent\", handler);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n resolve();\n };\n const handler = (evt: Protocol.Page.LifecycleEventEvent) => {\n const sameFrame = evt.frameId === this.frameId;\n // need to normalize here because CDP lifecycle names look like 'DOMContentLoaded'\n // but we accept 'domcontentloaded'\n const lifecycleName = String(evt.name ?? \"\").toLowerCase();\n if (sameFrame && lifecycleName === targetState) {\n finish();\n }\n };\n this.session.on(\"Page.lifecycleEvent\", handler);\n\n timer = setTimeout(() => {\n if (done) return;\n done = true;\n this.session.off(\"Page.lifecycleEvent\", handler);\n reject(\n new Error(\n `waitForLoadState(${state}) timed out after ${timeout}ms for frame ${this.frameId}`,\n ),\n );\n }, timeout);\n });\n }\n\n /** Simple placeholder for your own locator abstraction */\n locator(\n selector: string,\n options?: { deep?: boolean; depth?: number },\n ): Locator {\n return new Locator(this, selector, options);\n }\n\n /** Resolve the main-world execution context id for this frame. */\n private async getMainWorldExecutionContextId(): Promise<number> {\n return executionContexts.waitForMainWorld(this.session, this.frameId, 1000);\n }\n}\n"]}
|
|
@@ -39,6 +39,7 @@ export declare class Page {
|
|
|
39
39
|
private readonly consoleHandlers;
|
|
40
40
|
/** Document-start scripts installed across every session this page owns. */
|
|
41
41
|
private readonly initScripts;
|
|
42
|
+
private extraHTTPHeaders;
|
|
42
43
|
private constructor();
|
|
43
44
|
private installInitScriptOnSession;
|
|
44
45
|
private applyInitScriptsToSession;
|
|
@@ -118,6 +119,7 @@ export declare class Page {
|
|
|
118
119
|
close(): Promise<void>;
|
|
119
120
|
getFullFrameTree(): Protocol.Page.FrameTree;
|
|
120
121
|
asProtocolFrameTree(rootMainFrameId: string): Protocol.Page.FrameTree;
|
|
122
|
+
private applyExtraHTTPHeadersToSession;
|
|
121
123
|
private ensureOrdinal;
|
|
122
124
|
/** Public getter for snapshot code / handlers. */
|
|
123
125
|
getOrdinal(frameId: string): number;
|
|
@@ -202,6 +204,17 @@ export declare class Page {
|
|
|
202
204
|
* @param options.type Image format (`"png"` by default).
|
|
203
205
|
*/
|
|
204
206
|
screenshot(options?: ScreenshotOptions): Promise<Buffer>;
|
|
207
|
+
/**
|
|
208
|
+
* specifies additional HTTP headers to be included in every request sent by
|
|
209
|
+
* the root CDP session of the page, and all of its child CDP sessions.
|
|
210
|
+
*
|
|
211
|
+
* @param headers - the headers to be set.
|
|
212
|
+
* @throws {StagehandSetExtraHTTPHeadersError}
|
|
213
|
+
* Thrown when one or more CDP sessions fail to enable the Network domain or fail
|
|
214
|
+
* to apply the headers (i.e. `Network.enable` and/or `Network.setExtraHTTPHeaders` rejects).
|
|
215
|
+
* @return void
|
|
216
|
+
*/
|
|
217
|
+
setExtraHTTPHeaders(headers: Record<string, string>): Promise<void>;
|
|
205
218
|
/**
|
|
206
219
|
* Create a locator bound to the current main frame.
|
|
207
220
|
*/
|
|
@@ -37,7 +37,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
37
37
|
exports.Page = void 0;
|
|
38
38
|
const fs_1 = require("fs");
|
|
39
39
|
const logger_js_1 = require("../logger.js");
|
|
40
|
-
const
|
|
40
|
+
const FlowLogger_js_1 = require("../flowlogger/FlowLogger.js");
|
|
41
41
|
const frame_js_1 = require("./frame.js");
|
|
42
42
|
const frameLocator_js_1 = require("./frameLocator.js");
|
|
43
43
|
const deepLocator_js_1 = require("./deepLocator.js");
|
|
@@ -54,6 +54,7 @@ const sdkErrors_js_1 = require("../types/public/sdkErrors.js");
|
|
|
54
54
|
const initScripts_js_1 = require("./initScripts.js");
|
|
55
55
|
const locatorInvocation_js_1 = require("./locatorInvocation.js");
|
|
56
56
|
const screenshotUtils_js_1 = require("./screenshotUtils.js");
|
|
57
|
+
const timeoutConfig_js_1 = require("../timeoutConfig.js");
|
|
57
58
|
/**
|
|
58
59
|
* Page
|
|
59
60
|
*
|
|
@@ -93,22 +94,32 @@ let Page = (() => {
|
|
|
93
94
|
return class Page {
|
|
94
95
|
static {
|
|
95
96
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
96
|
-
_close_decorators = [(
|
|
97
|
-
_goto_decorators = [(
|
|
98
|
-
_reload_decorators = [(
|
|
99
|
-
_goBack_decorators = [(
|
|
100
|
-
_goForward_decorators = [
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
97
|
+
_close_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageClose" })];
|
|
98
|
+
_goto_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageGoto" })];
|
|
99
|
+
_reload_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageReload" })];
|
|
100
|
+
_goBack_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageGoBack" })];
|
|
101
|
+
_goForward_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
102
|
+
eventType: "PageGoForward",
|
|
103
|
+
})];
|
|
104
|
+
_screenshot_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
105
|
+
eventType: "PageScreenshot",
|
|
106
|
+
})];
|
|
107
|
+
_waitForLoadState_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
108
|
+
eventType: "PageWaitForLoadState",
|
|
109
|
+
})];
|
|
110
|
+
_waitForSelector_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
111
|
+
eventType: "PageWaitForSelector",
|
|
112
|
+
})];
|
|
113
|
+
_evaluate_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageEvaluate" })];
|
|
114
|
+
_click_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageClick" })];
|
|
115
|
+
_hover_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageHover" })];
|
|
116
|
+
_scroll_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageScroll" })];
|
|
117
|
+
_dragAndDrop_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
118
|
+
eventType: "PageDragAndDrop",
|
|
119
|
+
})];
|
|
120
|
+
_type_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageType" })];
|
|
121
|
+
_keyPress_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageKeyPress" })];
|
|
122
|
+
_snapshot_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({ eventType: "PageSnapshot" })];
|
|
112
123
|
__esDecorate(this, null, _close_decorators, { kind: "method", name: "close", static: false, private: false, access: { has: obj => "close" in obj, get: obj => obj.close }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
113
124
|
__esDecorate(this, null, _goto_decorators, { kind: "method", name: "goto", static: false, private: false, access: { has: obj => "goto" in obj, get: obj => obj.goto }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
114
125
|
__esDecorate(this, null, _reload_decorators, { kind: "method", name: "reload", static: false, private: false, access: { has: obj => "reload" in obj, get: obj => obj.reload }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
@@ -155,6 +166,7 @@ let Page = (() => {
|
|
|
155
166
|
consoleHandlers = new Map();
|
|
156
167
|
/** Document-start scripts installed across every session this page owns. */
|
|
157
168
|
initScripts = [];
|
|
169
|
+
extraHTTPHeaders;
|
|
158
170
|
constructor(conn, mainSession, _targetId, mainFrameId, apiClient, browserIsRemote = false) {
|
|
159
171
|
this.conn = conn;
|
|
160
172
|
this.mainSession = mainSession;
|
|
@@ -308,8 +320,12 @@ let Page = (() => {
|
|
|
308
320
|
* Assumes Page domain is already enabled on the session passed in.
|
|
309
321
|
*/
|
|
310
322
|
static async create(conn, session, targetId, apiClient, localBrowserLaunchOptions, browserIsRemote = false) {
|
|
311
|
-
|
|
312
|
-
|
|
323
|
+
// Context already issues Page.enable + lifecycle enable before resume.
|
|
324
|
+
// Re-issue here only as best-effort and do not block page registration on
|
|
325
|
+
// their acknowledgements; some remote CDP backends can delay these replies
|
|
326
|
+
// long after the target is otherwise ready.
|
|
327
|
+
void session.send("Page.enable").catch(() => { });
|
|
328
|
+
void session
|
|
313
329
|
.send("Page.setLifecycleEventsEnabled", { enabled: true })
|
|
314
330
|
.catch(() => { });
|
|
315
331
|
const { frameTree } = await session.send("Page.getFrameTree");
|
|
@@ -393,6 +409,8 @@ let Page = (() => {
|
|
|
393
409
|
if (childSession.id)
|
|
394
410
|
this.sessions.set(childSession.id, childSession);
|
|
395
411
|
this.networkManager.trackSession(childSession);
|
|
412
|
+
if (this.extraHTTPHeaders)
|
|
413
|
+
void this.applyExtraHTTPHeadersToSession(childSession, this.extraHTTPHeaders).catch(() => { });
|
|
396
414
|
void this.applyInitScriptsToSession(childSession).catch(() => { });
|
|
397
415
|
if (this.consoleListeners.size > 0) {
|
|
398
416
|
this.installConsoleTap(childSession);
|
|
@@ -579,6 +597,12 @@ let Page = (() => {
|
|
|
579
597
|
asProtocolFrameTree(rootMainFrameId) {
|
|
580
598
|
return this.registry.asProtocolFrameTree(rootMainFrameId);
|
|
581
599
|
}
|
|
600
|
+
async applyExtraHTTPHeadersToSession(session, headers) {
|
|
601
|
+
await session.send("Network.enable");
|
|
602
|
+
await session.send("Network.setExtraHTTPHeaders", {
|
|
603
|
+
headers: headers,
|
|
604
|
+
});
|
|
605
|
+
}
|
|
582
606
|
ensureOrdinal(frameId) {
|
|
583
607
|
const hit = this.frameOrdinals.get(frameId);
|
|
584
608
|
if (hit !== undefined)
|
|
@@ -955,7 +979,46 @@ let Page = (() => {
|
|
|
955
979
|
await (0, screenshotUtils_js_1.runScreenshotCleanups)(cleanupTasks);
|
|
956
980
|
}
|
|
957
981
|
};
|
|
958
|
-
return (0,
|
|
982
|
+
return await (0, timeoutConfig_js_1.withTimeout)(exec(), opts.timeout, "screenshot");
|
|
983
|
+
}
|
|
984
|
+
/**
|
|
985
|
+
* specifies additional HTTP headers to be included in every request sent by
|
|
986
|
+
* the root CDP session of the page, and all of its child CDP sessions.
|
|
987
|
+
*
|
|
988
|
+
* @param headers - the headers to be set.
|
|
989
|
+
* @throws {StagehandSetExtraHTTPHeadersError}
|
|
990
|
+
* Thrown when one or more CDP sessions fail to enable the Network domain or fail
|
|
991
|
+
* to apply the headers (i.e. `Network.enable` and/or `Network.setExtraHTTPHeaders` rejects).
|
|
992
|
+
* @return void
|
|
993
|
+
*/
|
|
994
|
+
async setExtraHTTPHeaders(headers) {
|
|
995
|
+
const headersToSet = { ...headers };
|
|
996
|
+
this.extraHTTPHeaders = headersToSet;
|
|
997
|
+
// get the session(s) for this page:
|
|
998
|
+
const sessions = [this.mainSession];
|
|
999
|
+
for (const session of this.sessions.values()) {
|
|
1000
|
+
if (session === this.mainSession)
|
|
1001
|
+
continue;
|
|
1002
|
+
sessions.push(session);
|
|
1003
|
+
}
|
|
1004
|
+
const results = await Promise.allSettled(sessions.map(async (session) => {
|
|
1005
|
+
await this.applyExtraHTTPHeadersToSession(session, headersToSet);
|
|
1006
|
+
}));
|
|
1007
|
+
// get list of objects containing results & corresponding session IDs
|
|
1008
|
+
const pairs = results.map((result, index) => ({
|
|
1009
|
+
result,
|
|
1010
|
+
id: sessions[index].id,
|
|
1011
|
+
}));
|
|
1012
|
+
const filtered = pairs.filter((pair) => pair.result.status === "rejected");
|
|
1013
|
+
const errors = filtered.map((pair) => {
|
|
1014
|
+
const reason = pair.result.reason;
|
|
1015
|
+
const sessId = pair.id ?? "root";
|
|
1016
|
+
const message = reason?.message ?? String(reason);
|
|
1017
|
+
return `session=${sessId} error=${message}`;
|
|
1018
|
+
});
|
|
1019
|
+
if (errors.length > 0) {
|
|
1020
|
+
throw new index_js_2.StagehandSetExtraHTTPHeadersError(errors);
|
|
1021
|
+
}
|
|
959
1022
|
}
|
|
960
1023
|
/**
|
|
961
1024
|
* Create a locator bound to the current main frame.
|
|
@@ -1082,7 +1145,7 @@ let Page = (() => {
|
|
|
1082
1145
|
* Force the page viewport to an exact CSS size and device scale factor.
|
|
1083
1146
|
* Ensures screenshots match width x height pixels when deviceScaleFactor = 1.
|
|
1084
1147
|
*/
|
|
1085
|
-
// @
|
|
1148
|
+
// @FlowLogger.wrapWithLogging({ eventType: "PageSetViewportSize" }) // disabled because it's pretty noisy, can always re-enable if needed for debugging
|
|
1086
1149
|
async setViewportSize(width, height, options) {
|
|
1087
1150
|
const dsf = Math.max(0.01, options?.deviceScaleFactor ?? 1);
|
|
1088
1151
|
await this.mainSession
|