@browserbasehq/orca 3.0.9-alpha-3 → 3.1.0-patch.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. package/dist/esm/index.d.ts +3 -0
  2. package/dist/esm/index.js +3 -0
  3. package/dist/esm/lib/inference.d.ts +65 -0
  4. package/dist/esm/lib/inference.js +333 -0
  5. package/dist/esm/lib/inference.js.map +1 -0
  6. package/dist/esm/lib/inferenceLogUtils.d.ts +12 -0
  7. package/dist/esm/lib/inferenceLogUtils.js +92 -0
  8. package/dist/esm/lib/inferenceLogUtils.js.map +1 -0
  9. package/dist/esm/lib/logger.d.ts +69 -0
  10. package/dist/esm/lib/logger.js +323 -0
  11. package/dist/esm/lib/logger.js.map +1 -0
  12. package/dist/esm/lib/modelUtils.d.ts +14 -0
  13. package/dist/esm/lib/modelUtils.js +48 -0
  14. package/dist/esm/lib/modelUtils.js.map +1 -0
  15. package/dist/esm/lib/prompt.d.ts +14 -0
  16. package/dist/esm/lib/prompt.js +230 -0
  17. package/dist/esm/lib/prompt.js.map +1 -0
  18. package/dist/esm/lib/utils.d.ts +68 -0
  19. package/dist/esm/lib/utils.js +654 -0
  20. package/dist/esm/lib/utils.js.map +1 -0
  21. package/dist/esm/lib/v3/agent/AgentClient.d.ts +19 -0
  22. package/dist/esm/lib/v3/agent/AgentClient.js +17 -0
  23. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -0
  24. package/dist/esm/lib/v3/agent/AgentProvider.d.ts +20 -0
  25. package/dist/esm/lib/v3/agent/AgentProvider.js +77 -0
  26. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -0
  27. package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
  28. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +822 -0
  29. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -0
  30. package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
  31. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +799 -0
  32. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -0
  33. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
  34. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +770 -0
  35. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -0
  36. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
  37. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +615 -0
  38. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -0
  39. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
  40. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +186 -0
  41. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -0
  42. package/dist/esm/lib/v3/agent/tools/act.d.ts +13 -0
  43. package/dist/esm/lib/v3/agent/tools/act.js +49 -0
  44. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -0
  45. package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +5 -0
  46. package/dist/esm/lib/v3/agent/tools/ariaTree.js +31 -0
  47. package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -0
  48. package/dist/esm/lib/v3/agent/tools/click.d.ts +6 -0
  49. package/dist/esm/lib/v3/agent/tools/click.js +104 -0
  50. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -0
  51. package/dist/esm/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
  52. package/dist/esm/lib/v3/agent/tools/clickAndHold.js +68 -0
  53. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -0
  54. package/dist/esm/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
  55. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +105 -0
  56. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -0
  57. package/dist/esm/lib/v3/agent/tools/extract.d.ts +21 -0
  58. package/dist/esm/lib/v3/agent/tools/extract.js +93 -0
  59. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -0
  60. package/dist/esm/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
  61. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +143 -0
  62. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -0
  63. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +13 -0
  64. package/dist/esm/lib/v3/agent/tools/fillform.js +56 -0
  65. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -0
  66. package/dist/esm/lib/v3/agent/tools/goto.d.ts +12 -0
  67. package/dist/esm/lib/v3/agent/tools/goto.js +31 -0
  68. package/dist/esm/lib/v3/agent/tools/goto.js.map +1 -0
  69. package/dist/esm/lib/v3/agent/tools/index.d.ts +92 -0
  70. package/dist/esm/lib/v3/agent/tools/index.js +74 -0
  71. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -0
  72. package/dist/esm/lib/v3/agent/tools/keys.d.ts +24 -0
  73. package/dist/esm/lib/v3/agent/tools/keys.js +60 -0
  74. package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -0
  75. package/dist/esm/lib/v3/agent/tools/navback.d.ts +6 -0
  76. package/dist/esm/lib/v3/agent/tools/navback.js +23 -0
  77. package/dist/esm/lib/v3/agent/tools/navback.js.map +1 -0
  78. package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +6 -0
  79. package/dist/esm/lib/v3/agent/tools/screenshot.js +26 -0
  80. package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -0
  81. package/dist/esm/lib/v3/agent/tools/scroll.d.ts +19 -0
  82. package/dist/esm/lib/v3/agent/tools/scroll.js +142 -0
  83. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -0
  84. package/dist/esm/lib/v3/agent/tools/search.d.ts +15 -0
  85. package/dist/esm/lib/v3/agent/tools/search.js +73 -0
  86. package/dist/esm/lib/v3/agent/tools/search.js.map +1 -0
  87. package/dist/esm/lib/v3/agent/tools/think.d.ts +6 -0
  88. package/dist/esm/lib/v3/agent/tools/think.js +24 -0
  89. package/dist/esm/lib/v3/agent/tools/think.js.map +1 -0
  90. package/dist/esm/lib/v3/agent/tools/type.d.ts +7 -0
  91. package/dist/esm/lib/v3/agent/tools/type.js +106 -0
  92. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -0
  93. package/dist/esm/lib/v3/agent/tools/wait.d.ts +5 -0
  94. package/dist/esm/lib/v3/agent/tools/wait.js +53 -0
  95. package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -0
  96. package/dist/esm/lib/v3/agent/utils/actionMapping.d.ts +3 -0
  97. package/dist/esm/lib/v3/agent/utils/actionMapping.js +100 -0
  98. package/dist/esm/lib/v3/agent/utils/actionMapping.js.map +1 -0
  99. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
  100. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +28 -0
  101. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -0
  102. package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
  103. package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js +62 -0
  104. package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js.map +1 -0
  105. package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
  106. package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js +145 -0
  107. package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js.map +1 -0
  108. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
  109. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +101 -0
  110. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -0
  111. package/dist/esm/lib/v3/agent/utils/imageCompression.d.ts +53 -0
  112. package/dist/esm/lib/v3/agent/utils/imageCompression.js +204 -0
  113. package/dist/esm/lib/v3/agent/utils/imageCompression.js.map +1 -0
  114. package/dist/esm/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
  115. package/dist/esm/lib/v3/agent/utils/messageProcessing.js +164 -0
  116. package/dist/esm/lib/v3/agent/utils/messageProcessing.js.map +1 -0
  117. package/dist/esm/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
  118. package/dist/esm/lib/v3/agent/utils/screenshotHandler.js +26 -0
  119. package/dist/esm/lib/v3/agent/utils/screenshotHandler.js.map +1 -0
  120. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
  121. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js +79 -0
  122. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -0
  123. package/dist/esm/lib/v3/agent/utils/xpath.d.ts +11 -0
  124. package/dist/esm/lib/v3/agent/utils/xpath.js +19 -0
  125. package/dist/esm/lib/v3/agent/utils/xpath.js.map +1 -0
  126. package/dist/esm/lib/v3/api.d.ts +86 -0
  127. package/dist/esm/lib/v3/api.js +484 -0
  128. package/dist/esm/lib/v3/api.js.map +1 -0
  129. package/dist/esm/lib/v3/cache/ActCache.d.ts +23 -0
  130. package/dist/esm/lib/v3/cache/ActCache.js +292 -0
  131. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -0
  132. package/dist/esm/lib/v3/cache/AgentCache.d.ts +109 -0
  133. package/dist/esm/lib/v3/cache/AgentCache.js +640 -0
  134. package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -0
  135. package/dist/esm/lib/v3/cache/CacheStorage.d.ts +17 -0
  136. package/dist/esm/lib/v3/cache/CacheStorage.js +98 -0
  137. package/dist/esm/lib/v3/cache/CacheStorage.js.map +1 -0
  138. package/dist/esm/lib/v3/cache/serverAgentCache.d.ts +7 -0
  139. package/dist/esm/lib/v3/cache/serverAgentCache.js +49 -0
  140. package/dist/esm/lib/v3/cache/serverAgentCache.js.map +1 -0
  141. package/dist/esm/lib/v3/cache/utils.d.ts +15 -0
  142. package/dist/esm/lib/v3/cache/utils.js +39 -0
  143. package/dist/esm/lib/v3/cache/utils.js.map +1 -0
  144. package/dist/esm/lib/v3/dom/a11yScripts/index.d.ts +11 -0
  145. package/dist/esm/lib/v3/dom/a11yScripts/index.js +117 -0
  146. package/dist/esm/lib/v3/dom/a11yScripts/index.js.map +1 -0
  147. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
  148. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js +20 -0
  149. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js.map +1 -0
  150. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
  151. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +56 -0
  152. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -0
  153. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
  154. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js +2 -0
  155. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js.map +1 -0
  156. package/dist/esm/lib/v3/dom/build/rerender-index.js +1 -0
  157. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
  158. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js +8 -0
  159. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -0
  160. package/dist/esm/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
  161. package/dist/esm/lib/v3/dom/build/scriptV3Content.js +2 -0
  162. package/dist/esm/lib/v3/dom/build/scriptV3Content.js.map +1 -0
  163. package/dist/esm/lib/v3/dom/build/v3-index.js +1 -0
  164. package/dist/esm/lib/v3/dom/genA11yScripts.d.ts +1 -0
  165. package/dist/esm/lib/v3/dom/genA11yScripts.js +54 -0
  166. package/dist/esm/lib/v3/dom/genA11yScripts.js.map +1 -0
  167. package/dist/esm/lib/v3/dom/genDomScripts.d.ts +1 -0
  168. package/dist/esm/lib/v3/dom/genDomScripts.js +38 -0
  169. package/dist/esm/lib/v3/dom/genDomScripts.js.map +1 -0
  170. package/dist/esm/lib/v3/dom/genLocatorScripts.d.ts +1 -0
  171. package/dist/esm/lib/v3/dom/genLocatorScripts.js +51 -0
  172. package/dist/esm/lib/v3/dom/genLocatorScripts.js.map +1 -0
  173. package/dist/esm/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
  174. package/dist/esm/lib/v3/dom/genScreenshotScripts.js +37 -0
  175. package/dist/esm/lib/v3/dom/genScreenshotScripts.js.map +1 -0
  176. package/dist/esm/lib/v3/dom/index.d.ts +1 -0
  177. package/dist/esm/lib/v3/dom/index.js +2 -0
  178. package/dist/esm/lib/v3/dom/index.js.map +1 -0
  179. package/dist/esm/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
  180. package/dist/esm/lib/v3/dom/locatorScripts/counts.js +272 -0
  181. package/dist/esm/lib/v3/dom/locatorScripts/counts.js.map +1 -0
  182. package/dist/esm/lib/v3/dom/locatorScripts/index.d.ts +4 -0
  183. package/dist/esm/lib/v3/dom/locatorScripts/index.js +5 -0
  184. package/dist/esm/lib/v3/dom/locatorScripts/index.js.map +1 -0
  185. package/dist/esm/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
  186. package/dist/esm/lib/v3/dom/locatorScripts/scripts.js +458 -0
  187. package/dist/esm/lib/v3/dom/locatorScripts/scripts.js.map +1 -0
  188. package/dist/esm/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
  189. package/dist/esm/lib/v3/dom/locatorScripts/selectors.js +283 -0
  190. package/dist/esm/lib/v3/dom/locatorScripts/selectors.js.map +1 -0
  191. package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
  192. package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js +283 -0
  193. package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js.map +1 -0
  194. package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
  195. package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js +376 -0
  196. package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js.map +1 -0
  197. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
  198. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js +196 -0
  199. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -0
  200. package/dist/esm/lib/v3/dom/piercer.entry.d.ts +1 -0
  201. package/dist/esm/lib/v3/dom/piercer.entry.js +3 -0
  202. package/dist/esm/lib/v3/dom/piercer.entry.js.map +1 -0
  203. package/dist/esm/lib/v3/dom/piercer.runtime.d.ts +23 -0
  204. package/dist/esm/lib/v3/dom/piercer.runtime.js +90 -0
  205. package/dist/esm/lib/v3/dom/piercer.runtime.js.map +1 -0
  206. package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
  207. package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js +3 -0
  208. package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js.map +1 -0
  209. package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
  210. package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js +40 -0
  211. package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js.map +1 -0
  212. package/dist/esm/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
  213. package/dist/esm/lib/v3/dom/screenshotScripts/index.js +2 -0
  214. package/dist/esm/lib/v3/dom/screenshotScripts/index.js.map +1 -0
  215. package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
  216. package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js +82 -0
  217. package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js.map +1 -0
  218. package/dist/esm/lib/v3/external_clients/aisdk.d.ts +11 -0
  219. package/dist/esm/lib/v3/external_clients/aisdk.js +103 -0
  220. package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -0
  221. package/dist/esm/lib/v3/external_clients/customOpenAI.d.ts +18 -0
  222. package/dist/esm/lib/v3/external_clients/customOpenAI.js +220 -0
  223. package/dist/esm/lib/v3/external_clients/customOpenAI.js.map +1 -0
  224. package/dist/esm/lib/v3/flowLogger.d.ts +139 -0
  225. package/dist/esm/lib/v3/flowLogger.js +868 -0
  226. package/dist/esm/lib/v3/flowLogger.js.map +1 -0
  227. package/dist/esm/lib/v3/handlers/actHandler.d.ts +21 -0
  228. package/dist/esm/lib/v3/handlers/actHandler.js +340 -0
  229. package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -0
  230. package/dist/esm/lib/v3/handlers/extractHandler.d.ts +31 -0
  231. package/dist/esm/lib/v3/handlers/extractHandler.js +139 -0
  232. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -0
  233. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
  234. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +623 -0
  235. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -0
  236. package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
  237. package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js +14 -0
  238. package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js.map +1 -0
  239. package/dist/esm/lib/v3/handlers/observeHandler.d.ts +17 -0
  240. package/dist/esm/lib/v3/handlers/observeHandler.js +156 -0
  241. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -0
  242. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
  243. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +461 -0
  244. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -0
  245. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
  246. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +528 -0
  247. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -0
  248. package/dist/esm/lib/v3/index.d.ts +17 -0
  249. package/dist/esm/lib/v3/index.js +13 -0
  250. package/dist/esm/lib/v3/index.js.map +1 -0
  251. package/dist/esm/lib/v3/launch/browserbase.d.ts +7 -0
  252. package/dist/esm/lib/v3/launch/browserbase.js +46 -0
  253. package/dist/esm/lib/v3/launch/browserbase.js.map +1 -0
  254. package/dist/esm/lib/v3/launch/local.d.ts +15 -0
  255. package/dist/esm/lib/v3/launch/local.js +98 -0
  256. package/dist/esm/lib/v3/launch/local.js.map +1 -0
  257. package/dist/esm/lib/v3/llm/AnthropicClient.d.ts +16 -0
  258. package/dist/esm/lib/v3/llm/AnthropicClient.js +239 -0
  259. package/dist/esm/lib/v3/llm/AnthropicClient.js.map +1 -0
  260. package/dist/esm/lib/v3/llm/CerebrasClient.d.ts +17 -0
  261. package/dist/esm/lib/v3/llm/CerebrasClient.js +235 -0
  262. package/dist/esm/lib/v3/llm/CerebrasClient.js.map +1 -0
  263. package/dist/esm/lib/v3/llm/GoogleClient.d.ts +19 -0
  264. package/dist/esm/lib/v3/llm/GoogleClient.js +369 -0
  265. package/dist/esm/lib/v3/llm/GoogleClient.js.map +1 -0
  266. package/dist/esm/lib/v3/llm/GroqClient.d.ts +17 -0
  267. package/dist/esm/lib/v3/llm/GroqClient.js +236 -0
  268. package/dist/esm/lib/v3/llm/GroqClient.js.map +1 -0
  269. package/dist/esm/lib/v3/llm/LLMClient.d.ts +121 -0
  270. package/dist/esm/lib/v3/llm/LLMClient.js +23 -0
  271. package/dist/esm/lib/v3/llm/LLMClient.js.map +1 -0
  272. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +13 -0
  273. package/dist/esm/lib/v3/llm/LLMProvider.js +194 -0
  274. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -0
  275. package/dist/esm/lib/v3/llm/OpenAIClient.d.ts +15 -0
  276. package/dist/esm/lib/v3/llm/OpenAIClient.js +329 -0
  277. package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -0
  278. package/dist/esm/lib/v3/llm/aisdk.d.ts +15 -0
  279. package/dist/esm/lib/v3/llm/aisdk.js +348 -0
  280. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -0
  281. package/dist/esm/lib/v3/logger.d.ts +9 -0
  282. package/dist/esm/lib/v3/logger.js +96 -0
  283. package/dist/esm/lib/v3/logger.js.map +1 -0
  284. package/dist/esm/lib/v3/mcp/connection.d.ts +11 -0
  285. package/dist/esm/lib/v3/mcp/connection.js +49 -0
  286. package/dist/esm/lib/v3/mcp/connection.js.map +1 -0
  287. package/dist/esm/lib/v3/mcp/utils.d.ts +3 -0
  288. package/dist/esm/lib/v3/mcp/utils.js +36 -0
  289. package/dist/esm/lib/v3/mcp/utils.js.map +1 -0
  290. package/dist/esm/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
  291. package/dist/esm/lib/v3/shutdown/cleanupLocal.js +30 -0
  292. package/dist/esm/lib/v3/shutdown/cleanupLocal.js.map +1 -0
  293. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +9 -0
  294. package/dist/esm/lib/v3/shutdown/supervisor.js +156 -0
  295. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -0
  296. package/dist/esm/lib/v3/shutdown/supervisorClient.d.ts +15 -0
  297. package/dist/esm/lib/v3/shutdown/supervisorClient.js +97 -0
  298. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -0
  299. package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js +113 -0
  300. package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
  301. package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js +80 -0
  302. package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
  303. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +374 -0
  304. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
  305. package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js +357 -0
  306. package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
  307. package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
  308. package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
  309. package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js +105 -0
  310. package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
  311. package/dist/esm/lib/v3/tests/agent-streaming.spec.js +126 -0
  312. package/dist/esm/lib/v3/tests/agent-streaming.spec.js.map +7 -0
  313. package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js +44 -0
  314. package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
  315. package/dist/esm/lib/v3/tests/click-count.spec.js +112 -0
  316. package/dist/esm/lib/v3/tests/click-count.spec.js.map +7 -0
  317. package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
  318. package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
  319. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +176 -0
  320. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
  321. package/dist/esm/lib/v3/tests/default-page-tracking.spec.js +53 -0
  322. package/dist/esm/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
  323. package/dist/esm/lib/v3/tests/downloads.spec.js +58 -0
  324. package/dist/esm/lib/v3/tests/downloads.spec.js.map +7 -0
  325. package/dist/esm/lib/v3/tests/envReporter.js +57 -0
  326. package/dist/esm/lib/v3/tests/envReporter.js.map +7 -0
  327. package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
  328. package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
  329. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +447 -0
  330. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
  331. package/dist/esm/lib/v3/tests/keep-alive.child.js +92 -0
  332. package/dist/esm/lib/v3/tests/keep-alive.child.js.map +7 -0
  333. package/dist/esm/lib/v3/tests/keep-alive.helpers.js +532 -0
  334. package/dist/esm/lib/v3/tests/keep-alive.helpers.js.map +7 -0
  335. package/dist/esm/lib/v3/tests/keep-alive.spec.js +19 -0
  336. package/dist/esm/lib/v3/tests/keep-alive.spec.js.map +7 -0
  337. package/dist/esm/lib/v3/tests/keyboard.spec.js +296 -0
  338. package/dist/esm/lib/v3/tests/keyboard.spec.js.map +7 -0
  339. package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
  340. package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
  341. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +191 -0
  342. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
  343. package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js +108 -0
  344. package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
  345. package/dist/esm/lib/v3/tests/locator-count.spec.js +71 -0
  346. package/dist/esm/lib/v3/tests/locator-count.spec.js.map +7 -0
  347. package/dist/esm/lib/v3/tests/locator-fill.spec.js +118 -0
  348. package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +7 -0
  349. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +136 -0
  350. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
  351. package/dist/esm/lib/v3/tests/locator-nth.spec.js +157 -0
  352. package/dist/esm/lib/v3/tests/locator-nth.spec.js.map +7 -0
  353. package/dist/esm/lib/v3/tests/locator-select-option.spec.js +242 -0
  354. package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +7 -0
  355. package/dist/esm/lib/v3/tests/logger-initialization.spec.js +552 -0
  356. package/dist/esm/lib/v3/tests/logger-initialization.spec.js.map +7 -0
  357. package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js +269 -0
  358. package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
  359. package/dist/esm/lib/v3/tests/nested-div.spec.js +23 -0
  360. package/dist/esm/lib/v3/tests/nested-div.spec.js.map +7 -0
  361. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +90 -0
  362. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
  363. package/dist/esm/lib/v3/tests/page-console.spec.js +56 -0
  364. package/dist/esm/lib/v3/tests/page-console.spec.js.map +7 -0
  365. package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
  366. package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
  367. package/dist/esm/lib/v3/tests/page-goto-response.spec.js +35 -0
  368. package/dist/esm/lib/v3/tests/page-goto-response.spec.js.map +7 -0
  369. package/dist/esm/lib/v3/tests/page-hover.spec.js +167 -0
  370. package/dist/esm/lib/v3/tests/page-hover.spec.js.map +7 -0
  371. package/dist/esm/lib/v3/tests/page-screenshot.spec.js +273 -0
  372. package/dist/esm/lib/v3/tests/page-screenshot.spec.js.map +7 -0
  373. package/dist/esm/lib/v3/tests/page-scroll.spec.js +182 -0
  374. package/dist/esm/lib/v3/tests/page-scroll.spec.js.map +7 -0
  375. package/dist/esm/lib/v3/tests/page-send-cdp.spec.js +46 -0
  376. package/dist/esm/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
  377. package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js +98 -0
  378. package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
  379. package/dist/esm/lib/v3/tests/setinputfiles.spec.js +126 -0
  380. package/dist/esm/lib/v3/tests/setinputfiles.spec.js.map +7 -0
  381. package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js +134 -0
  382. package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
  383. package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js +134 -0
  384. package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
  385. package/dist/esm/lib/v3/tests/testUtils.js +31 -0
  386. package/dist/esm/lib/v3/tests/testUtils.js.map +7 -0
  387. package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js +100 -0
  388. package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
  389. package/dist/esm/lib/v3/tests/timeouts.spec.js +32 -0
  390. package/dist/esm/lib/v3/tests/timeouts.spec.js.map +7 -0
  391. package/dist/esm/lib/v3/tests/user-data-dir.spec.js +43 -0
  392. package/dist/esm/lib/v3/tests/user-data-dir.spec.js.map +7 -0
  393. package/dist/esm/lib/v3/tests/v3.config.js +15 -0
  394. package/dist/esm/lib/v3/tests/v3.config.js.map +7 -0
  395. package/dist/esm/lib/v3/tests/v3.dynamic.config.js +43 -0
  396. package/dist/esm/lib/v3/tests/v3.dynamic.config.js.map +7 -0
  397. package/dist/esm/lib/v3/tests/v3.playwright.config.js +98 -0
  398. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +7 -0
  399. package/dist/esm/lib/v3/tests/wait-for-selector.spec.js +593 -0
  400. package/dist/esm/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
  401. package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js +97 -0
  402. package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
  403. package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
  404. package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
  405. package/dist/esm/lib/v3/timeoutConfig.d.ts +2 -0
  406. package/dist/esm/lib/v3/timeoutConfig.js +27 -0
  407. package/dist/esm/lib/v3/timeoutConfig.js.map +1 -0
  408. package/dist/esm/lib/v3/types/private/agent.d.ts +6 -0
  409. package/dist/esm/lib/v3/types/private/agent.js +2 -0
  410. package/dist/esm/lib/v3/types/private/agent.js.map +1 -0
  411. package/dist/esm/lib/v3/types/private/api.d.ts +11 -0
  412. package/dist/esm/lib/v3/types/private/api.js +2 -0
  413. package/dist/esm/lib/v3/types/private/api.js.map +1 -0
  414. package/dist/esm/lib/v3/types/private/cache.d.ts +128 -0
  415. package/dist/esm/lib/v3/types/private/cache.js +2 -0
  416. package/dist/esm/lib/v3/types/private/cache.js.map +1 -0
  417. package/dist/esm/lib/v3/types/private/evaluator.d.ts +40 -0
  418. package/dist/esm/lib/v3/types/private/evaluator.js +2 -0
  419. package/dist/esm/lib/v3/types/private/evaluator.js.map +1 -0
  420. package/dist/esm/lib/v3/types/private/handlers.d.ts +38 -0
  421. package/dist/esm/lib/v3/types/private/handlers.js +16 -0
  422. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -0
  423. package/dist/esm/lib/v3/types/private/index.d.ts +7 -0
  424. package/dist/esm/lib/v3/types/private/index.js +8 -0
  425. package/dist/esm/lib/v3/types/private/index.js.map +1 -0
  426. package/dist/esm/lib/v3/types/private/internal.d.ts +39 -0
  427. package/dist/esm/lib/v3/types/private/internal.js +2 -0
  428. package/dist/esm/lib/v3/types/private/internal.js.map +1 -0
  429. package/dist/esm/lib/v3/types/private/locator.d.ts +9 -0
  430. package/dist/esm/lib/v3/types/private/locator.js +2 -0
  431. package/dist/esm/lib/v3/types/private/locator.js.map +1 -0
  432. package/dist/esm/lib/v3/types/private/network.d.ts +34 -0
  433. package/dist/esm/lib/v3/types/private/network.js +3 -0
  434. package/dist/esm/lib/v3/types/private/network.js.map +1 -0
  435. package/dist/esm/lib/v3/types/private/shutdown.d.ts +31 -0
  436. package/dist/esm/lib/v3/types/private/shutdown.js +5 -0
  437. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -0
  438. package/dist/esm/lib/v3/types/private/shutdownErrors.d.ts +12 -0
  439. package/dist/esm/lib/v3/types/private/shutdownErrors.js +22 -0
  440. package/dist/esm/lib/v3/types/private/shutdownErrors.js.map +1 -0
  441. package/dist/esm/lib/v3/types/private/snapshot.d.ts +117 -0
  442. package/dist/esm/lib/v3/types/private/snapshot.js +2 -0
  443. package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -0
  444. package/dist/esm/lib/v3/types/public/agent.d.ts +595 -0
  445. package/dist/esm/lib/v3/types/public/agent.js +15 -0
  446. package/dist/esm/lib/v3/types/public/agent.js.map +1 -0
  447. package/dist/esm/lib/v3/types/public/api.d.ts +1211 -0
  448. package/dist/esm/lib/v3/types/public/api.js +915 -0
  449. package/dist/esm/lib/v3/types/public/api.js.map +1 -0
  450. package/dist/esm/lib/v3/types/public/apiErrors.d.ts +18 -0
  451. package/dist/esm/lib/v3/types/public/apiErrors.js +32 -0
  452. package/dist/esm/lib/v3/types/public/apiErrors.js.map +1 -0
  453. package/dist/esm/lib/v3/types/public/index.d.ts +12 -0
  454. package/dist/esm/lib/v3/types/public/index.js +14 -0
  455. package/dist/esm/lib/v3/types/public/index.js.map +1 -0
  456. package/dist/esm/lib/v3/types/public/locator.d.ts +9 -0
  457. package/dist/esm/lib/v3/types/public/locator.js +2 -0
  458. package/dist/esm/lib/v3/types/public/locator.js.map +1 -0
  459. package/dist/esm/lib/v3/types/public/logs.d.ts +23 -0
  460. package/dist/esm/lib/v3/types/public/logs.js +13 -0
  461. package/dist/esm/lib/v3/types/public/logs.js.map +1 -0
  462. package/dist/esm/lib/v3/types/public/methods.d.ts +56 -0
  463. package/dist/esm/lib/v3/types/public/methods.js +15 -0
  464. package/dist/esm/lib/v3/types/public/methods.js.map +1 -0
  465. package/dist/esm/lib/v3/types/public/metrics.d.ts +27 -0
  466. package/dist/esm/lib/v3/types/public/metrics.js +2 -0
  467. package/dist/esm/lib/v3/types/public/metrics.js.map +1 -0
  468. package/dist/esm/lib/v3/types/public/model.d.ts +65 -0
  469. package/dist/esm/lib/v3/types/public/model.js +2 -0
  470. package/dist/esm/lib/v3/types/public/model.js.map +1 -0
  471. package/dist/esm/lib/v3/types/public/options.d.ts +70 -0
  472. package/dist/esm/lib/v3/types/public/options.js +4 -0
  473. package/dist/esm/lib/v3/types/public/options.js.map +1 -0
  474. package/dist/esm/lib/v3/types/public/page.d.ts +18 -0
  475. package/dist/esm/lib/v3/types/public/page.js +3 -0
  476. package/dist/esm/lib/v3/types/public/page.js.map +1 -0
  477. package/dist/esm/lib/v3/types/public/screenshotTypes.d.ts +25 -0
  478. package/dist/esm/lib/v3/types/public/screenshotTypes.js +2 -0
  479. package/dist/esm/lib/v3/types/public/screenshotTypes.js.map +1 -0
  480. package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +152 -0
  481. package/dist/esm/lib/v3/types/public/sdkErrors.js +305 -0
  482. package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -0
  483. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
  484. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +196 -0
  485. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -0
  486. package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
  487. package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js +121 -0
  488. package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js.map +1 -0
  489. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
  490. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +336 -0
  491. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -0
  492. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
  493. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +129 -0
  494. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -0
  495. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
  496. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js +274 -0
  497. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -0
  498. package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
  499. package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js +216 -0
  500. package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js.map +1 -0
  501. package/dist/esm/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
  502. package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js +5 -0
  503. package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js.map +1 -0
  504. package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
  505. package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js +22 -0
  506. package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js.map +1 -0
  507. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
  508. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +135 -0
  509. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -0
  510. package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
  511. package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js +102 -0
  512. package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js.map +1 -0
  513. package/dist/esm/lib/v3/understudy/a11yInvocation.d.ts +8 -0
  514. package/dist/esm/lib/v3/understudy/a11yInvocation.js +12 -0
  515. package/dist/esm/lib/v3/understudy/a11yInvocation.js.map +1 -0
  516. package/dist/esm/lib/v3/understudy/cdp.d.ts +69 -0
  517. package/dist/esm/lib/v3/understudy/cdp.js +251 -0
  518. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -0
  519. package/dist/esm/lib/v3/understudy/consoleMessage.d.ts +22 -0
  520. package/dist/esm/lib/v3/understudy/consoleMessage.js +66 -0
  521. package/dist/esm/lib/v3/understudy/consoleMessage.js.map +1 -0
  522. package/dist/esm/lib/v3/understudy/context.d.ts +132 -0
  523. package/dist/esm/lib/v3/understudy/context.js +687 -0
  524. package/dist/esm/lib/v3/understudy/context.js.map +1 -0
  525. package/dist/esm/lib/v3/understudy/deepLocator.d.ts +87 -0
  526. package/dist/esm/lib/v3/understudy/deepLocator.js +218 -0
  527. package/dist/esm/lib/v3/understudy/deepLocator.js.map +1 -0
  528. package/dist/esm/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
  529. package/dist/esm/lib/v3/understudy/executionContextRegistry.js +83 -0
  530. package/dist/esm/lib/v3/understudy/executionContextRegistry.js.map +1 -0
  531. package/dist/esm/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
  532. package/dist/esm/lib/v3/understudy/fileUploadUtils.js +81 -0
  533. package/dist/esm/lib/v3/understudy/fileUploadUtils.js.map +1 -0
  534. package/dist/esm/lib/v3/understudy/frame.d.ts +69 -0
  535. package/dist/esm/lib/v3/understudy/frame.js +211 -0
  536. package/dist/esm/lib/v3/understudy/frame.js.map +1 -0
  537. package/dist/esm/lib/v3/understudy/frameLocator.d.ts +50 -0
  538. package/dist/esm/lib/v3/understudy/frameLocator.js +255 -0
  539. package/dist/esm/lib/v3/understudy/frameLocator.js.map +1 -0
  540. package/dist/esm/lib/v3/understudy/frameRegistry.d.ts +101 -0
  541. package/dist/esm/lib/v3/understudy/frameRegistry.js +298 -0
  542. package/dist/esm/lib/v3/understudy/frameRegistry.js.map +1 -0
  543. package/dist/esm/lib/v3/understudy/initScripts.d.ts +2 -0
  544. package/dist/esm/lib/v3/understudy/initScripts.js +33 -0
  545. package/dist/esm/lib/v3/understudy/initScripts.js.map +1 -0
  546. package/dist/esm/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
  547. package/dist/esm/lib/v3/understudy/lifecycleWatcher.js +245 -0
  548. package/dist/esm/lib/v3/understudy/lifecycleWatcher.js.map +1 -0
  549. package/dist/esm/lib/v3/understudy/locator.d.ts +194 -0
  550. package/dist/esm/lib/v3/understudy/locator.js +753 -0
  551. package/dist/esm/lib/v3/understudy/locator.js.map +1 -0
  552. package/dist/esm/lib/v3/understudy/locatorInvocation.d.ts +8 -0
  553. package/dist/esm/lib/v3/understudy/locatorInvocation.js +12 -0
  554. package/dist/esm/lib/v3/understudy/locatorInvocation.js.map +1 -0
  555. package/dist/esm/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
  556. package/dist/esm/lib/v3/understudy/navigationResponseTracker.js +224 -0
  557. package/dist/esm/lib/v3/understudy/navigationResponseTracker.js.map +1 -0
  558. package/dist/esm/lib/v3/understudy/networkManager.d.ts +53 -0
  559. package/dist/esm/lib/v3/understudy/networkManager.js +306 -0
  560. package/dist/esm/lib/v3/understudy/networkManager.js.map +1 -0
  561. package/dist/esm/lib/v3/understudy/page.d.ts +354 -0
  562. package/dist/esm/lib/v3/understudy/page.js +1941 -0
  563. package/dist/esm/lib/v3/understudy/page.js.map +1 -0
  564. package/dist/esm/lib/v3/understudy/piercer.d.ts +4 -0
  565. package/dist/esm/lib/v3/understudy/piercer.js +61 -0
  566. package/dist/esm/lib/v3/understudy/piercer.js.map +1 -0
  567. package/dist/esm/lib/v3/understudy/response.d.ts +137 -0
  568. package/dist/esm/lib/v3/understudy/response.js +330 -0
  569. package/dist/esm/lib/v3/understudy/response.js.map +1 -0
  570. package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +16 -0
  571. package/dist/esm/lib/v3/understudy/screenshotUtils.js +352 -0
  572. package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -0
  573. package/dist/esm/lib/v3/understudy/selectorResolver.d.ts +38 -0
  574. package/dist/esm/lib/v3/understudy/selectorResolver.js +296 -0
  575. package/dist/esm/lib/v3/understudy/selectorResolver.js.map +1 -0
  576. package/dist/esm/lib/v3/v3.d.ts +191 -0
  577. package/dist/esm/lib/v3/v3.js +1572 -0
  578. package/dist/esm/lib/v3/v3.js.map +1 -0
  579. package/dist/esm/lib/v3/zodCompat.d.ts +12 -0
  580. package/dist/esm/lib/v3/zodCompat.js +17 -0
  581. package/dist/esm/lib/v3/zodCompat.js.map +1 -0
  582. package/dist/esm/lib/v3Evaluator.d.ts +19 -0
  583. package/dist/esm/lib/v3Evaluator.js +210 -0
  584. package/dist/esm/lib/v3Evaluator.js.map +1 -0
  585. package/dist/esm/lib/version.d.ts +5 -0
  586. package/dist/esm/lib/version.js +6 -0
  587. package/dist/esm/lib/version.js.map +1 -0
  588. package/dist/esm/package.json +3 -0
  589. package/dist/esm/tests/agent-execution-model.test.js +139 -0
  590. package/dist/esm/tests/agent-execution-model.test.js.map +7 -0
  591. package/dist/esm/tests/browserbase-session-accessors.test.js +101 -0
  592. package/dist/esm/tests/browserbase-session-accessors.test.js.map +7 -0
  593. package/dist/esm/tests/cache-llm-resolution.test.js +187 -0
  594. package/dist/esm/tests/cache-llm-resolution.test.js.map +7 -0
  595. package/dist/esm/tests/helpers/mockCDPSession.js +27 -0
  596. package/dist/esm/tests/helpers/mockCDPSession.js.map +7 -0
  597. package/dist/esm/tests/llm-provider.test.js +57 -0
  598. package/dist/esm/tests/llm-provider.test.js.map +7 -0
  599. package/dist/esm/tests/model-deprecation.test.js +135 -0
  600. package/dist/esm/tests/model-deprecation.test.js.map +7 -0
  601. package/dist/esm/tests/model-utils.test.js +43 -0
  602. package/dist/esm/tests/model-utils.test.js.map +7 -0
  603. package/dist/esm/tests/page-snapshot.test.js +36 -0
  604. package/dist/esm/tests/page-snapshot.test.js.map +7 -0
  605. package/dist/esm/tests/public-api/export-surface.test.js +53 -0
  606. package/dist/esm/tests/public-api/export-surface.test.js.map +7 -0
  607. package/dist/esm/tests/public-api/llm-and-agents.test.js +128 -0
  608. package/dist/esm/tests/public-api/llm-and-agents.test.js.map +7 -0
  609. package/dist/esm/tests/public-api/public-error-types.test.js +71 -0
  610. package/dist/esm/tests/public-api/public-error-types.test.js.map +7 -0
  611. package/dist/esm/tests/public-api/public-types.test.js +74 -0
  612. package/dist/esm/tests/public-api/public-types.test.js.map +7 -0
  613. package/dist/esm/tests/public-api/runtime-utils.test.js +31 -0
  614. package/dist/esm/tests/public-api/runtime-utils.test.js.map +7 -0
  615. package/dist/esm/tests/public-api/schema-utils.test.js +78 -0
  616. package/dist/esm/tests/public-api/schema-utils.test.js.map +7 -0
  617. package/dist/esm/tests/public-api/timeout-error-types.test.js +81 -0
  618. package/dist/esm/tests/public-api/timeout-error-types.test.js.map +7 -0
  619. package/dist/esm/tests/public-api/tool-type-export.test.js +25 -0
  620. package/dist/esm/tests/public-api/tool-type-export.test.js.map +7 -0
  621. package/dist/esm/tests/public-api/v3-core.test.js +82 -0
  622. package/dist/esm/tests/public-api/v3-core.test.js.map +7 -0
  623. package/dist/esm/tests/safety-confirmation.test.js +134 -0
  624. package/dist/esm/tests/safety-confirmation.test.js.map +7 -0
  625. package/dist/esm/tests/snapshot-a11y-resolvers.test.js +348 -0
  626. package/dist/esm/tests/snapshot-a11y-resolvers.test.js.map +7 -0
  627. package/dist/esm/tests/snapshot-a11y-tree-utils.test.js +300 -0
  628. package/dist/esm/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
  629. package/dist/esm/tests/snapshot-capture-orchestration.test.js +381 -0
  630. package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +7 -0
  631. package/dist/esm/tests/snapshot-cbor.test.js +197 -0
  632. package/dist/esm/tests/snapshot-cbor.test.js.map +7 -0
  633. package/dist/esm/tests/snapshot-dom-session-builders.test.js +251 -0
  634. package/dist/esm/tests/snapshot-dom-session-builders.test.js.map +7 -0
  635. package/dist/esm/tests/snapshot-dom-tree-utils.test.js +109 -0
  636. package/dist/esm/tests/snapshot-dom-tree-utils.test.js.map +7 -0
  637. package/dist/esm/tests/snapshot-focus-selectors-utils.test.js +49 -0
  638. package/dist/esm/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
  639. package/dist/esm/tests/snapshot-frame-merge.test.js +391 -0
  640. package/dist/esm/tests/snapshot-frame-merge.test.js.map +7 -0
  641. package/dist/esm/tests/snapshot-tree-format-utils.test.js +113 -0
  642. package/dist/esm/tests/snapshot-tree-format-utils.test.js.map +7 -0
  643. package/dist/esm/tests/snapshot-xpath-utils.test.js +79 -0
  644. package/dist/esm/tests/snapshot-xpath-utils.test.js.map +7 -0
  645. package/dist/esm/tests/timeout-handlers.test.js +850 -0
  646. package/dist/esm/tests/timeout-handlers.test.js.map +7 -0
  647. package/dist/esm/tests/xpath-parser.test.js +317 -0
  648. package/dist/esm/tests/xpath-parser.test.js.map +7 -0
  649. package/dist/esm/tests/xpath-resolver.test.js +73 -0
  650. package/dist/esm/tests/xpath-resolver.test.js.map +7 -0
  651. package/dist/esm/tests/zod-enum-compatibility.test.js +97 -0
  652. package/dist/esm/tests/zod-enum-compatibility.test.js.map +7 -0
  653. package/package.json +42 -27
  654. package/dist/index.d.ts +0 -4321
  655. package/dist/index.js +0 -69585
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/locator.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/understudy/locator.ts\nimport { Protocol } from \"devtools-protocol\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport {\n locatorScriptBootstrap,\n locatorScriptGlobalRefs,\n locatorScriptSources,\n} from \"../dom/build/locatorScripts.generated.js\";\nimport type { Frame } from \"./frame.js\";\nimport {\n FrameSelectorResolver,\n type SelectorQuery,\n} from \"./selectorResolver.js\";\nimport {\n StagehandElementNotFoundError,\n StagehandInvalidArgumentError,\n StagehandLocatorError,\n ElementNotVisibleError,\n} from \"../types/public/sdkErrors.js\";\nimport { normalizeInputFiles } from \"./fileUploadUtils.js\";\nimport { SetInputFilesArgument, MouseButton } from \"../types/public/locator.js\";\nimport { NormalizedFilePayload } from \"../types/private/locator.js\";\n\nconst MAX_REMOTE_UPLOAD_BYTES = 50 * 1024 * 1024; // 50MB guard copied from Playwright\n\n/**\n * Locator\n *\n * Purpose:\n * A small, CDP-based element interaction helper scoped to a specific `Frame`.\n * It resolves a CSS/XPath selector inside the frame’s **isolated world**, and then\n * performs low-level actions (click, type, select) using DOM/Runtime/Input\n * protocol domains with minimal abstraction.\n *\n * Key change:\n * - Prefer **objectId**-based CDP calls (scroll, geometry) to avoid brittle\n * frontend nodeId mappings. nodeId is resolved on a best-effort basis and\n * returned for compatibility, but actions do not depend on it.\n *\n * Notes:\n * - Resolution is lazy: every action resolves the selector again.\n * - Uses `Page.createIsolatedWorld` so evaluation is isolated from page scripts.\n * - Releases remote objects (`Runtime.releaseObject`) where appropriate.\n */\nexport class Locator {\n private readonly selectorResolver: FrameSelectorResolver;\n\n private readonly selectorQuery: SelectorQuery;\n\n // -1 means \"no explicit nth()\"; default locator resolves to first match for actions.\n private readonly nthIndex: number;\n\n constructor(\n private readonly frame: Frame,\n private readonly selector: string,\n private readonly options?: { deep?: boolean; depth?: number },\n nthIndex: number = -1,\n ) {\n this.selectorResolver = new FrameSelectorResolver(this.frame);\n this.selectorQuery = FrameSelectorResolver.parseSelector(selector);\n const normalized = Number.isFinite(nthIndex) ? Math.floor(nthIndex) : -1;\n this.nthIndex = normalized < 0 ? -1 : normalized;\n }\n\n /** Return the owning Frame for this locator (typed accessor, no private access). */\n public getFrame(): Frame {\n return this.frame;\n }\n\n /**\n * Set files on an <input type=\"file\"> element.\n *\n * Mirrors Playwright's Locator.setInputFiles basics:\n * - Accepts file path(s) or payload object(s) { name, mimeType, buffer }.\n * - Uses CDP DOM.setFileInputFiles under the hood.\n * - Best‑effort dispatches change/input via CDP (Chrome does by default).\n * - Passing an empty array clears the selection.\n */\n public async setInputFiles(files: SetInputFilesArgument): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n\n const tempFiles: string[] = [];\n\n try {\n // Validate element is an <input type=\"file\">\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.ensureFileInputElement,\n returnByValue: true,\n },\n );\n const ok = Boolean(res.result.value);\n if (!ok)\n throw new StagehandInvalidArgumentError(\n 'Target is not an <input type=\"file\"> element',\n );\n } catch (e) {\n throw new StagehandInvalidArgumentError(\n e instanceof Error\n ? e.message\n : \"Unable to verify file input element\",\n );\n }\n\n const normalized = await normalizeInputFiles(files);\n\n if (!normalized.length) {\n await session.send<never>(\"DOM.setFileInputFiles\", {\n objectId,\n files: [],\n });\n return;\n }\n\n if (this.frame.isBrowserRemote()) {\n await this.assignFilesViaPayloadInjection(objectId, normalized);\n return;\n }\n\n const filePaths: string[] = [];\n for (const payload of normalized) {\n if (payload.absolutePath) {\n filePaths.push(payload.absolutePath);\n continue;\n }\n const ext = path.extname(payload.name);\n const tmp = path.join(\n os.tmpdir(),\n `stagehand-upload-${Date.now()}-${Math.random().toString(36).slice(2)}${ext}`,\n );\n await fs.promises.writeFile(tmp, payload.buffer);\n tempFiles.push(tmp);\n filePaths.push(tmp);\n }\n\n await session.send<never>(\"DOM.setFileInputFiles\", {\n objectId,\n files: filePaths,\n });\n } finally {\n // Cleanup: release element and remove any temporary files we created\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n for (const p of tempFiles) {\n try {\n await fs.promises.unlink(p);\n } catch {\n // ignore\n }\n }\n }\n }\n\n /**\n * Remote browser fallback: build File objects inside the page and attach them via JS.\n *\n * When Stagehand is driving a browser that cannot see the local filesystem (Browserbase,\n * remote CDP, etc.), CDP's DOM.setFileInputFiles would fail because Chrome can't reach\n * our temp files. Instead we base64-encode the payloads, send them into the page, and\n * let a DOM helper create File objects + dispatch change/input events.\n */\n private async assignFilesViaPayloadInjection(\n objectId: Protocol.Runtime.RemoteObjectId,\n files: NormalizedFilePayload[],\n ): Promise<void> {\n const session = this.frame.session;\n\n for (const payload of files) {\n if (payload.buffer.length > MAX_REMOTE_UPLOAD_BYTES) {\n throw new StagehandInvalidArgumentError(\n `setInputFiles(): file \"${payload.name}\" is larger than the 50MB limit for remote uploads`,\n );\n }\n }\n\n const serialized = files.map((payload) => ({\n name: payload.name,\n mimeType: payload.mimeType,\n lastModified: payload.lastModified,\n base64: payload.buffer.toString(\"base64\"),\n }));\n\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration:\n locatorScriptSources.assignFilePayloadsToInputElement,\n arguments: [\n {\n value: serialized,\n },\n ],\n returnByValue: true,\n },\n );\n\n const ok = Boolean(res.result?.value);\n if (!ok) {\n throw new StagehandInvalidArgumentError(\n \"Unable to assign file payloads to remote input element\",\n );\n }\n }\n\n /**\n * Return the DOM backendNodeId for this locator's target element.\n * Useful for identity comparisons without needing element handles.\n */\n async backendNodeId(): Promise<Protocol.DOM.BackendNodeId> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n await session.send(\"DOM.enable\").catch(() => {});\n const { node } = await session.send<{ node: Protocol.DOM.Node }>(\n \"DOM.describeNode\",\n { objectId },\n );\n return node.backendNodeId as Protocol.DOM.BackendNodeId;\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n /** Return how many nodes the current selector resolves to. */\n public async count(): Promise<number> {\n const session = this.frame.session;\n await session.send(\"Runtime.enable\");\n await session.send(\"DOM.enable\");\n return this.selectorResolver.count(this.selectorQuery);\n }\n\n /**\n * Return the center of the element's bounding box in the owning frame's viewport\n * (CSS pixels), rounded to integers. Scrolls into view best-effort.\n */\n public async centroid(): Promise<{ x: number; y: number }> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n await session\n .send(\"DOM.scrollIntoViewIfNeeded\", { objectId })\n .catch(() => {});\n const box = await session.send<Protocol.DOM.GetBoxModelResponse>(\n \"DOM.getBoxModel\",\n { objectId },\n );\n if (!box.model) throw new ElementNotVisibleError(this.selector);\n const { cx, cy } = this.centerFromBoxContent(box.model.content);\n return { x: Math.round(cx), y: Math.round(cy) };\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n /**\n * Highlight the element's bounding box using the CDP Overlay domain.\n * - Scrolls element into view best-effort.\n * - Shows a semi-transparent overlay briefly, then hides it.\n */\n public async highlight(options?: {\n durationMs?: number;\n borderColor?: { r: number; g: number; b: number; a?: number };\n contentColor?: { r: number; g: number; b: number; a?: number };\n }): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n const duration = Math.max(0, options?.durationMs ?? 800);\n\n const borderColor = options?.borderColor ?? { r: 255, g: 0, b: 0, a: 0.9 };\n const contentColor =\n options?.contentColor ?? ({ r: 255, g: 200, b: 0, a: 0.2 } as const);\n\n try {\n await session.send(\"Overlay.enable\").catch(() => {});\n await session\n .send(\"DOM.scrollIntoViewIfNeeded\", { objectId })\n .catch(() => {});\n\n // Prefer backendNodeId to keep highlight stable even if objectId is released.\n await session.send(\"DOM.enable\").catch(() => {});\n let backendNodeId: Protocol.DOM.BackendNodeId | undefined;\n try {\n const { node } = await session.send<{ node: Protocol.DOM.Node }>(\n \"DOM.describeNode\",\n { objectId },\n );\n backendNodeId = node.backendNodeId as Protocol.DOM.BackendNodeId;\n } catch {\n backendNodeId = undefined;\n }\n\n const highlightConfig: Protocol.Overlay.HighlightConfig = {\n showInfo: false,\n showStyles: false,\n showRulers: false,\n showExtensionLines: false,\n borderColor,\n contentColor,\n } as Protocol.Overlay.HighlightConfig;\n\n const highlightOnce = async () => {\n await session.send<never>(\"Overlay.highlightNode\", {\n ...(backendNodeId ? { backendNodeId } : { objectId }),\n highlightConfig,\n });\n };\n\n // Initial draw\n await highlightOnce();\n\n // Keep alive until duration elapses to resist overlay clears on mouse move/repaints\n if (duration > 0) {\n const start = Date.now();\n const tick = Math.min(300, Math.max(100, Math.floor(duration / 50)));\n while (Date.now() - start < duration) {\n await new Promise((r) => setTimeout(r, tick));\n try {\n await highlightOnce();\n } catch {\n // ignore transient errors\n }\n }\n await session.send<never>(\"Overlay.hideHighlight\").catch(() => {});\n }\n } finally {\n // Releasing objectId should not affect highlight when using backendNodeId.\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n /**\n * Move the mouse cursor to the element's visual center without clicking.\n * - Scrolls into view best-effort, resolves geometry, then dispatches a mouse move.\n */\n async hover(): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n await session\n .send(\"DOM.scrollIntoViewIfNeeded\", { objectId })\n .catch(() => {});\n\n const box = await session.send<Protocol.DOM.GetBoxModelResponse>(\n \"DOM.getBoxModel\",\n { objectId },\n );\n if (!box.model) throw new ElementNotVisibleError(this.selector);\n const { cx, cy } = this.centerFromBoxContent(box.model.content);\n\n await session.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x: cx,\n y: cy,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n /**\n * Click the element at its visual center.\n * Steps:\n * 1) Resolve selector to { objectId } in the frame world.\n * 2) Scroll into view via `DOM.scrollIntoViewIfNeeded({ objectId })`.\n * 3) Read geometry via `DOM.getBoxModel({ objectId })` → compute a center point.\n * 4) Synthesize mouse press + release via `Input.dispatchMouseEvent`.\n */\n async click(options?: {\n button?: MouseButton;\n clickCount?: number;\n }): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n\n const button = options?.button ?? \"left\";\n const clickCount = options?.clickCount ?? 1;\n\n try {\n // Scroll into view using objectId (avoids frontend nodeId dependence)\n await session.send(\"DOM.scrollIntoViewIfNeeded\", { objectId });\n\n // Get geometry using objectId\n const box = await session.send<Protocol.DOM.GetBoxModelResponse>(\n \"DOM.getBoxModel\",\n { objectId },\n );\n if (!box.model) throw new ElementNotVisibleError(this.selector);\n const { cx, cy } = this.centerFromBoxContent(box.model.content);\n\n // Dispatch input (from the same session) without waiting between events.\n // This keeps multi-clicks within tight thresholds on remote browsers.\n const dispatches: Array<Promise<unknown>> = [];\n dispatches.push(\n session.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x: cx,\n y: cy,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n\n for (let i = 1; i <= clickCount; i++) {\n dispatches.push(\n session.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mousePressed\",\n x: cx,\n y: cy,\n button,\n clickCount: i,\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n\n dispatches.push(\n session.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseReleased\",\n x: cx,\n y: cy,\n button,\n clickCount: i,\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n }\n\n await Promise.all(dispatches);\n } finally {\n // release the element handle\n try {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n } catch {\n // If the context navigated or was destroyed (e.g., link opens new tab),\n // releaseObject may fail with -32000. Ignore as best-effort cleanup.\n }\n }\n }\n\n /**\n * Dispatch a DOM 'click' MouseEvent on the element itself.\n * - Does not synthesize real pointer input; directly dispatches an event.\n * - Useful for elements that rely on click handlers without needing hit-testing.\n */\n async sendClickEvent(options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n detail?: number;\n }): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n const bubbles = options?.bubbles ?? true;\n const cancelable = options?.cancelable ?? true;\n const composed = options?.composed ?? true;\n const detail = options?.detail ?? 1;\n try {\n await session\n .send(\"DOM.scrollIntoViewIfNeeded\", { objectId })\n .catch(() => {});\n await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.dispatchDomClick,\n arguments: [\n {\n value: { bubbles, cancelable, composed, detail },\n },\n ],\n returnByValue: true,\n },\n );\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n /**\n * Scroll the element vertically to a given percentage (0–100).\n * - If the element is <html> or <body>, scrolls the window/document.\n * - Otherwise, scrolls the element itself via element.scrollTo.\n */\n async scrollTo(percent: number | string): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.scrollElementToPercent,\n arguments: [{ value: percent as unknown as number }],\n returnByValue: true,\n },\n );\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n /**\n * Fill an input/textarea/contenteditable element.\n * Mirrors Playwright semantics: the DOM helper either applies the native\n * value setter (for special input types) or asks us to type text via the CDP\n * Input domain after focusing/selecting.\n */\n async fill(value: string): Promise<void> {\n const session = this.frame.session;\n // Use the bundled locator globals; the raw fill snippet depends on helper symbols.\n const fillDeclaration = `function(value) { ${locatorScriptBootstrap}; return ${locatorScriptGlobalRefs.fillElementValue}.call(this, value); }`;\n const { objectId } = await this.resolveNode();\n\n let releaseNeeded = true;\n\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: fillDeclaration,\n arguments: [{ value }],\n returnByValue: true,\n },\n );\n if (res.exceptionDetails) {\n // prefer exception.description over text (eg \"Uncaught\")\n const message =\n res.exceptionDetails.exception?.description ??\n res.exceptionDetails.text ??\n \"Unknown exception during locator().fill()\";\n throw new StagehandLocatorError(\"Filling\", this.selector, message);\n }\n\n const result = res.result.value as\n | { status?: string; reason?: string; value?: string }\n | null\n | undefined;\n const status =\n typeof result === \"object\" && result ? result.status : undefined;\n\n if (status === \"done\") {\n return;\n }\n\n if (status === \"needsinput\") {\n // Release the current handle before synthesizing keyboard input to avoid leaking it.\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n releaseNeeded = false;\n\n const valueToType =\n typeof result?.value === \"string\" ? result.value : value;\n\n let prepared = false;\n try {\n const { objectId: prepObjectId } = await this.resolveNode();\n try {\n const prepRes =\n await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId: prepObjectId,\n functionDeclaration:\n locatorScriptSources.prepareElementForTyping,\n returnByValue: true,\n },\n );\n prepared = Boolean(prepRes.result.value);\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId: prepObjectId })\n .catch(() => {});\n }\n } catch {\n // Ignore preparation failures; we'll fall back to typing best-effort.\n }\n\n if (!prepared && valueToType.length > 0) {\n await this.type(valueToType);\n return;\n }\n\n if (valueToType.length === 0) {\n // Simulate deleting the currently selected text to clear the field.\n await session.send<never>(\"Input.dispatchKeyEvent\", {\n type: \"keyDown\",\n key: \"Backspace\",\n code: \"Backspace\",\n windowsVirtualKeyCode: 8,\n nativeVirtualKeyCode: 8,\n } as Protocol.Input.DispatchKeyEventRequest);\n await session.send<never>(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: \"Backspace\",\n code: \"Backspace\",\n windowsVirtualKeyCode: 8,\n nativeVirtualKeyCode: 8,\n } as Protocol.Input.DispatchKeyEventRequest);\n } else {\n await session.send<never>(\"Input.insertText\", { text: valueToType });\n }\n\n return;\n }\n\n if (status === \"error\") {\n const reason =\n typeof result?.reason === \"string\" && result.reason.length > 0\n ? result.reason\n : \"Failed to fill element\";\n throw new StagehandInvalidArgumentError(\n `Failed to fill element (${reason})`,\n );\n }\n\n // Backward compatibility: if no status is returned (older bundle), fall back to setter logic.\n if (!status) {\n await this.type(value);\n }\n } finally {\n if (releaseNeeded) {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n }\n\n /**\n * Type text into the element (focuses first).\n * - Focus via element.focus() in page JS (no DOM.focus(nodeId)).\n * - If no delay, uses `Input.insertText` for efficiency.\n * - With delay, synthesizes `keyDown`/`keyUp` per character.\n */\n async type(text: string, options?: { delay?: number }): Promise<void> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n\n try {\n // Focus using JS (avoids DOM.focus(nodeId))\n await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.focusElement,\n returnByValue: true,\n },\n );\n\n if (!options?.delay) {\n await session.send<never>(\"Input.insertText\", { text });\n return;\n }\n\n for (const ch of text) {\n await session.send<never>(\"Input.dispatchKeyEvent\", {\n type: \"keyDown\",\n text: ch,\n key: ch,\n } as Protocol.Input.DispatchKeyEventRequest);\n\n await session.send<never>(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n text: ch,\n key: ch,\n } as Protocol.Input.DispatchKeyEventRequest);\n\n await new Promise((r) => setTimeout(r, options.delay));\n }\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Select one or more options on a `<select>` element.\n * Returns the values actually selected after the operation.\n */\n async selectOption(values: string | string[]): Promise<string[]> {\n const session = this.frame.session;\n const desired = Array.isArray(values) ? values : [values];\n const { objectId } = await this.resolveNode();\n\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.selectElementOptions,\n arguments: [{ value: desired }],\n returnByValue: true,\n },\n );\n\n return (res.result.value as string[]) ?? [];\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return true if the element is attached and visible (rough heuristic).\n */\n async isVisible(): Promise<boolean> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.isElementVisible,\n returnByValue: true,\n },\n );\n return Boolean(res.result.value);\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return true if the element is an input[type=checkbox|radio] and is checked.\n * Also considers aria-checked for ARIA widgets.\n */\n async isChecked(): Promise<boolean> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.isElementChecked,\n returnByValue: true,\n },\n );\n return Boolean(res.result.value);\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return the element's input value (for input/textarea/select/contenteditable).\n */\n async inputValue(): Promise<string> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.readElementInputValue,\n returnByValue: true,\n },\n );\n return String(res.result.value ?? \"\");\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return the element's textContent (raw, not innerText).\n */\n async textContent(): Promise<string> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.readElementTextContent,\n returnByValue: true,\n },\n );\n return String(res.result.value ?? \"\");\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return the element's innerHTML string.\n */\n async innerHtml(): Promise<string> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.readElementInnerHTML,\n returnByValue: true,\n },\n );\n return String(res.result.value ?? \"\");\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return the element's innerText (layout-aware, visible text).\n */\n async innerText(): Promise<string> {\n const session = this.frame.session;\n const { objectId } = await this.resolveNode();\n try {\n const res = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: locatorScriptSources.readElementInnerText,\n returnByValue: true,\n },\n );\n return String(res.result.value ?? \"\");\n } finally {\n await session.send<never>(\"Runtime.releaseObject\", { objectId });\n }\n }\n\n /**\n * Return a locator narrowed to the first match.\n */\n first(): Locator {\n return this.nth(0);\n }\n\n /** Return a locator narrowed to the element at the given zero-based index. */\n nth(index: number): Locator {\n const value = Number(index);\n if (!Number.isFinite(value) || value < 0) {\n throw new StagehandInvalidArgumentError(\n \"locator().nth() expects a non-negative index\",\n );\n }\n\n const nextIndex = Math.floor(value);\n if (nextIndex === this.nthIndex) {\n return this;\n }\n\n return new Locator(this.frame, this.selector, this.options, nextIndex);\n }\n\n // ---------- helpers ----------\n\n /**\n * Resolve `this.selector` within the frame to `{ objectId, nodeId? }`:\n * Delegates to a shared selector resolver so all selector logic stays in sync.\n */\n public async resolveNode(): Promise<{\n nodeId: Protocol.DOM.NodeId | null;\n objectId: Protocol.Runtime.RemoteObjectId;\n }> {\n const session = this.frame.session;\n\n await session.send(\"Runtime.enable\");\n await session.send(\"DOM.enable\");\n\n const index = this.nthIndex < 0 ? 0 : this.nthIndex;\n const resolved = await this.selectorResolver.resolveAtIndex(\n this.selectorQuery,\n index,\n );\n if (!resolved) {\n throw new StagehandElementNotFoundError([this.selector]);\n }\n\n return resolved;\n }\n\n /**\n * Resolve all matching nodes for this locator.\n * If the locator is narrowed via nth(), only that index is returned.\n */\n public async resolveNodesForMask(): Promise<\n Array<{\n nodeId: Protocol.DOM.NodeId | null;\n objectId: Protocol.Runtime.RemoteObjectId;\n }>\n > {\n const session = this.frame.session;\n\n await session.send(\"Runtime.enable\");\n await session.send(\"DOM.enable\");\n\n if (this.nthIndex >= 0) {\n const resolved = await this.selectorResolver.resolveAtIndex(\n this.selectorQuery,\n this.nthIndex,\n );\n if (!resolved) {\n throw new StagehandElementNotFoundError([this.selector]);\n }\n return [resolved];\n }\n\n const resolved = await this.selectorResolver.resolveAll(this.selectorQuery);\n if (!resolved.length) {\n throw new StagehandElementNotFoundError([this.selector]);\n }\n return resolved;\n }\n\n /** Compute a center point from a BoxModel content quad */\n private centerFromBoxContent(content: number[]): { cx: number; cy: number } {\n // content is [x1,y1, x2,y2, x3,y3, x4,y4]\n if (!content || content.length < 8) {\n throw new StagehandInvalidArgumentError(\"Invalid box model content quad\");\n }\n const xs = [content[0], content[2], content[4], content[6]];\n const ys = [content[1], content[3], content[5], content[7]];\n const cx = (xs[0] + xs[1] + xs[2] + xs[3]) / 4;\n const cy = (ys[0] + ys[1] + ys[2] + ys[3]) / 4;\n return { cx, cy };\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { type LocatorScriptName } from "../dom/build/locatorScripts.generated.js";
2
+ /**
3
+ * Build an expression that injects the locator bundle (if needed) and invokes a
4
+ * specific helper via its stable global reference. This keeps Runtime.evaluate
5
+ * payloads tiny while guaranteeing our selector utilities are present in any
6
+ * execution context.
7
+ */
8
+ export declare function buildLocatorInvocation(name: LocatorScriptName, args: string[]): string;
@@ -0,0 +1,12 @@
1
+ import { locatorScriptBootstrap, locatorScriptGlobalRefs, } from "../dom/build/locatorScripts.generated.js";
2
+ /**
3
+ * Build an expression that injects the locator bundle (if needed) and invokes a
4
+ * specific helper via its stable global reference. This keeps Runtime.evaluate
5
+ * payloads tiny while guaranteeing our selector utilities are present in any
6
+ * execution context.
7
+ */
8
+ export function buildLocatorInvocation(name, args) {
9
+ const invocation = `${locatorScriptGlobalRefs[name]}(${args.join(", ")})`;
10
+ return `(() => { ${locatorScriptBootstrap}; return ${invocation}; })()`;
11
+ }
12
+ //# sourceMappingURL=locatorInvocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locatorInvocation.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/locatorInvocation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,0CAA0C,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAuB,EACvB,IAAc;IAEd,MAAM,UAAU,GAAG,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1E,OAAO,YAAY,sBAAsB,YAAY,UAAU,QAAQ,CAAC;AAC1E,CAAC","sourcesContent":["import {\n locatorScriptBootstrap,\n locatorScriptGlobalRefs,\n type LocatorScriptName,\n} from \"../dom/build/locatorScripts.generated.js\";\n\n/**\n * Build an expression that injects the locator bundle (if needed) and invokes a\n * specific helper via its stable global reference. This keeps Runtime.evaluate\n * payloads tiny while guaranteeing our selector utilities are present in any\n * execution context.\n */\nexport function buildLocatorInvocation(\n name: LocatorScriptName,\n args: string[],\n): string {\n const invocation = `${locatorScriptGlobalRefs[name]}(${args.join(\", \")})`;\n return `(() => { ${locatorScriptBootstrap}; return ${invocation}; })()`;\n}\n"]}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * NavigationResponseTracker
3
+ * -------------------------
4
+ *
5
+ * Tracks DevTools Protocol network events for a single navigation command so
6
+ * Stagehand can surface a Playwright-like response object from `Page.goto` and
7
+ * related APIs. The tracker listens for `Network.responseReceived` events that
8
+ * correspond to the targeted document navigation, handles loader-id churn that
9
+ * arises from redirects or preloading, and enriches the resulting
10
+ * `Response` with extra header information. It also observes
11
+ * `Network.loadingFinished` / `Network.loadingFailed` to fulfil the
12
+ * `response.finished()` contract exposed to consumers.
13
+ */
14
+ import type { CDPSessionLike } from "./cdp.js";
15
+ import type { Page } from "./page.js";
16
+ import { Response } from "./response.js";
17
+ /**
18
+ * Watches CDP events on a given session and resolves with the navigation's
19
+ * primary document response once identified.
20
+ */
21
+ export declare class NavigationResponseTracker {
22
+ private readonly page;
23
+ private readonly session;
24
+ private readonly navigationCommandId;
25
+ private expectedLoaderId;
26
+ private selectedRequestId;
27
+ private selectedResponse;
28
+ private acceptNextWithoutLoader;
29
+ private responseResolved;
30
+ private resolveResponse;
31
+ private responsePromise;
32
+ private readonly pendingResponsesByLoader;
33
+ private readonly pendingExtraInfo;
34
+ private readonly listeners;
35
+ /**
36
+ * Create a tracker bound to a specific navigation command. The tracker begins
37
+ * listening for network events immediately so it should be constructed before
38
+ * the navigation request is dispatched.
39
+ */
40
+ constructor(params: {
41
+ page: Page;
42
+ session: CDPSessionLike;
43
+ navigationCommandId: number;
44
+ });
45
+ /** Stop listening for CDP events and release any pending bookkeeping. */
46
+ dispose(): void;
47
+ /**
48
+ * Hint the tracker with the loader id returned by `Page.navigate`. Chrome only
49
+ * emits this once the browser begins navigating, so we store early responses
50
+ * and match them once the loader id is known.
51
+ */
52
+ setExpectedLoaderId(loaderId: string | undefined): void;
53
+ /**
54
+ * Some navigation APIs (reload/history traversal) do not provide a loader id
55
+ * up front. This flag instructs the tracker to accept the next qualifying
56
+ * document response even if no loader id has been announced yet.
57
+ */
58
+ expectNavigationWithoutKnownLoader(): void;
59
+ /**
60
+ * Returns a promise that resolves with the matched response (or `null` when
61
+ * no document response was observed).
62
+ */
63
+ navigationCompleted(): Promise<Response | null>;
64
+ /** Expose the raw response promise (mainly for tests). */
65
+ response(): Promise<Response | null>;
66
+ /** Register all CDP listeners relevant to navigation tracking. */
67
+ private installListeners;
68
+ /** Attach a CDP listener and track it for later disposal. */
69
+ private addListener;
70
+ /** Handle the initial response payload for document navigations. */
71
+ private onResponseReceived;
72
+ /** Merge auxiliary header information once Chrome exposes it. */
73
+ private onResponseReceivedExtraInfo;
74
+ /** Resolve the response's finished promise when the request completes. */
75
+ private onLoadingFinished;
76
+ /** Resolve the response's finished promise with an error on failure. */
77
+ private onLoadingFailed;
78
+ /**
79
+ * Create the `Response` wrapper for the chosen document response and
80
+ * resolve awaiting consumers. Subsequent events flesh out the header/body
81
+ * helpers and mark the request as finished.
82
+ */
83
+ private selectResponse;
84
+ }
@@ -0,0 +1,224 @@
1
+ /**
2
+ * NavigationResponseTracker
3
+ * -------------------------
4
+ *
5
+ * Tracks DevTools Protocol network events for a single navigation command so
6
+ * Stagehand can surface a Playwright-like response object from `Page.goto` and
7
+ * related APIs. The tracker listens for `Network.responseReceived` events that
8
+ * correspond to the targeted document navigation, handles loader-id churn that
9
+ * arises from redirects or preloading, and enriches the resulting
10
+ * `Response` with extra header information. It also observes
11
+ * `Network.loadingFinished` / `Network.loadingFailed` to fulfil the
12
+ * `response.finished()` contract exposed to consumers.
13
+ */
14
+ import { Response } from "./response.js";
15
+ /**
16
+ * Watches CDP events on a given session and resolves with the navigation's
17
+ * primary document response once identified.
18
+ */
19
+ export class NavigationResponseTracker {
20
+ page;
21
+ session;
22
+ navigationCommandId;
23
+ expectedLoaderId;
24
+ selectedRequestId = null;
25
+ selectedResponse = null;
26
+ acceptNextWithoutLoader = false;
27
+ responseResolved = false;
28
+ resolveResponse;
29
+ responsePromise;
30
+ pendingResponsesByLoader = new Map();
31
+ pendingExtraInfo = new Map();
32
+ listeners = [];
33
+ /**
34
+ * Create a tracker bound to a specific navigation command. The tracker begins
35
+ * listening for network events immediately so it should be constructed before
36
+ * the navigation request is dispatched.
37
+ */
38
+ constructor(params) {
39
+ this.page = params.page;
40
+ this.session = params.session;
41
+ this.navigationCommandId = params.navigationCommandId;
42
+ this.responsePromise = new Promise((resolve) => {
43
+ this.resolveResponse = (value) => {
44
+ if (this.responseResolved)
45
+ return;
46
+ this.responseResolved = true;
47
+ resolve(value);
48
+ };
49
+ });
50
+ this.installListeners();
51
+ }
52
+ /** Stop listening for CDP events and release any pending bookkeeping. */
53
+ dispose() {
54
+ for (const { event, handler } of this.listeners) {
55
+ this.session.off(event, handler);
56
+ }
57
+ this.listeners.length = 0;
58
+ this.pendingResponsesByLoader.clear();
59
+ this.pendingExtraInfo.clear();
60
+ }
61
+ /**
62
+ * Hint the tracker with the loader id returned by `Page.navigate`. Chrome only
63
+ * emits this once the browser begins navigating, so we store early responses
64
+ * and match them once the loader id is known.
65
+ */
66
+ setExpectedLoaderId(loaderId) {
67
+ if (!loaderId)
68
+ return;
69
+ this.expectedLoaderId = loaderId;
70
+ const pending = this.pendingResponsesByLoader.get(loaderId);
71
+ if (pending) {
72
+ this.pendingResponsesByLoader.delete(loaderId);
73
+ this.selectResponse(pending);
74
+ }
75
+ }
76
+ /**
77
+ * Some navigation APIs (reload/history traversal) do not provide a loader id
78
+ * up front. This flag instructs the tracker to accept the next qualifying
79
+ * document response even if no loader id has been announced yet.
80
+ */
81
+ expectNavigationWithoutKnownLoader() {
82
+ this.acceptNextWithoutLoader = true;
83
+ }
84
+ /**
85
+ * Returns a promise that resolves with the matched response (or `null` when
86
+ * no document response was observed).
87
+ */
88
+ async navigationCompleted() {
89
+ if (!this.responseResolved) {
90
+ queueMicrotask(() => {
91
+ if (!this.responseResolved)
92
+ this.resolveResponse(null);
93
+ });
94
+ }
95
+ return this.responsePromise;
96
+ }
97
+ /** Expose the raw response promise (mainly for tests). */
98
+ async response() {
99
+ return this.responsePromise;
100
+ }
101
+ /** Register all CDP listeners relevant to navigation tracking. */
102
+ installListeners() {
103
+ this.addListener("Network.responseReceived", (event) => {
104
+ this.onResponseReceived(event);
105
+ });
106
+ this.addListener("Network.responseReceivedExtraInfo", (event) => {
107
+ this.onResponseReceivedExtraInfo(event);
108
+ });
109
+ this.addListener("Network.loadingFinished", (event) => {
110
+ this.onLoadingFinished(event);
111
+ });
112
+ this.addListener("Network.loadingFailed", (event) => {
113
+ this.onLoadingFailed(event);
114
+ });
115
+ }
116
+ /** Attach a CDP listener and track it for later disposal. */
117
+ addListener(event, handler) {
118
+ this.session.on(event, handler);
119
+ this.listeners.push({ event, handler });
120
+ }
121
+ /** Handle the initial response payload for document navigations. */
122
+ onResponseReceived(event) {
123
+ if (!this.page.isCurrentNavigationCommand(this.navigationCommandId))
124
+ return;
125
+ if (!event || !event.response)
126
+ return;
127
+ if (event.type !== "Document")
128
+ return;
129
+ if (event.frameId !== this.page.mainFrameId())
130
+ return;
131
+ const loaderId = event.loaderId ?? "";
132
+ if (this.acceptNextWithoutLoader) {
133
+ this.acceptNextWithoutLoader = false;
134
+ this.selectResponse(event);
135
+ return;
136
+ }
137
+ if (this.expectedLoaderId) {
138
+ if (loaderId && loaderId !== this.expectedLoaderId) {
139
+ this.pendingResponsesByLoader.set(loaderId, event);
140
+ return;
141
+ }
142
+ this.selectResponse(event);
143
+ return;
144
+ }
145
+ if (loaderId) {
146
+ this.pendingResponsesByLoader.set(loaderId, event);
147
+ return;
148
+ }
149
+ this.selectResponse(event);
150
+ }
151
+ /** Merge auxiliary header information once Chrome exposes it. */
152
+ onResponseReceivedExtraInfo(event) {
153
+ if (!event || !event.requestId)
154
+ return;
155
+ if (this.selectedRequestId && event.requestId === this.selectedRequestId) {
156
+ this.selectedResponse?.applyExtraInfo(event);
157
+ return;
158
+ }
159
+ this.pendingExtraInfo.set(event.requestId, event);
160
+ }
161
+ /** Resolve the response's finished promise when the request completes. */
162
+ onLoadingFinished(event) {
163
+ if (!event || !event.requestId)
164
+ return;
165
+ if (event.requestId !== this.selectedRequestId)
166
+ return;
167
+ this.selectedResponse?.markFinished(null);
168
+ }
169
+ /** Resolve the response's finished promise with an error on failure. */
170
+ onLoadingFailed(event) {
171
+ // Ignore malformed events or ones without a request id
172
+ if (!event || !event.requestId)
173
+ return;
174
+ // Only the tracked document request should toggle the response state
175
+ if (event.requestId !== this.selectedRequestId)
176
+ return;
177
+ // Surface Chrome's failure text through response.finished()
178
+ const errorText = event.errorText || "Navigation request failed";
179
+ this.selectedResponse?.markFinished(new Error(errorText));
180
+ }
181
+ /**
182
+ * Create the `Response` wrapper for the chosen document response and
183
+ * resolve awaiting consumers. Subsequent events flesh out the header/body
184
+ * helpers and mark the request as finished.
185
+ */
186
+ selectResponse(event) {
187
+ if (event.loaderId) {
188
+ this.pendingResponsesByLoader.delete(event.loaderId);
189
+ }
190
+ if (this.responseResolved)
191
+ return;
192
+ if (this.selectedResponse)
193
+ return;
194
+ const protocol = event.response?.protocol?.toLowerCase() ?? "";
195
+ const url = event.response?.url ?? "";
196
+ const isDataUrl = protocol === "data" || url.startsWith("data:");
197
+ const isAboutUrl = protocol === "about" || url.startsWith("about:");
198
+ if (isDataUrl || isAboutUrl) {
199
+ this.pendingExtraInfo.delete(event.requestId);
200
+ this.selectedRequestId = null;
201
+ this.selectedResponse = null;
202
+ this.resolveResponse(null);
203
+ return;
204
+ }
205
+ const response = new Response({
206
+ page: this.page,
207
+ session: this.session,
208
+ requestId: event.requestId,
209
+ frameId: event.frameId,
210
+ loaderId: event.loaderId,
211
+ response: event.response,
212
+ fromServiceWorker: Boolean(event.response?.fromServiceWorker),
213
+ });
214
+ this.selectedRequestId = event.requestId;
215
+ this.selectedResponse = response;
216
+ const extraInfo = this.pendingExtraInfo.get(event.requestId);
217
+ if (extraInfo) {
218
+ response.applyExtraInfo(extraInfo);
219
+ this.pendingExtraInfo.delete(event.requestId);
220
+ }
221
+ this.resolveResponse(response);
222
+ }
223
+ }
224
+ //# sourceMappingURL=navigationResponseTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigationResponseTracker.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/navigationResponseTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * NavigationResponseTracker\n * -------------------------\n *\n * Tracks DevTools Protocol network events for a single navigation command so\n * Stagehand can surface a Playwright-like response object from `Page.goto` and\n * related APIs. The tracker listens for `Network.responseReceived` events that\n * correspond to the targeted document navigation, handles loader-id churn that\n * arises from redirects or preloading, and enriches the resulting\n * `Response` with extra header information. It also observes\n * `Network.loadingFinished` / `Network.loadingFailed` to fulfil the\n * `response.finished()` contract exposed to consumers.\n */\n\nimport type { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport type { Page } from \"./page.js\";\nimport { Response } from \"./response.js\";\n\n/**\n * Watches CDP events on a given session and resolves with the navigation's\n * primary document response once identified.\n */\nexport class NavigationResponseTracker {\n private readonly page: Page;\n private readonly session: CDPSessionLike;\n private readonly navigationCommandId: number;\n\n private expectedLoaderId: string | undefined;\n private selectedRequestId: string | null = null;\n private selectedResponse: Response | null = null;\n private acceptNextWithoutLoader = false;\n\n private responseResolved = false;\n private resolveResponse!: (value: Response | null) => void;\n private responsePromise: Promise<Response | null>;\n\n private readonly pendingResponsesByLoader = new Map<\n string,\n Protocol.Network.ResponseReceivedEvent\n >();\n private readonly pendingExtraInfo = new Map<\n string,\n Protocol.Network.ResponseReceivedExtraInfoEvent\n >();\n\n private readonly listeners: Array<{\n event: string;\n handler: (event: unknown) => void;\n }> = [];\n\n /**\n * Create a tracker bound to a specific navigation command. The tracker begins\n * listening for network events immediately so it should be constructed before\n * the navigation request is dispatched.\n */\n constructor(params: {\n page: Page;\n session: CDPSessionLike;\n navigationCommandId: number;\n }) {\n this.page = params.page;\n this.session = params.session;\n this.navigationCommandId = params.navigationCommandId;\n\n this.responsePromise = new Promise<Response | null>((resolve) => {\n this.resolveResponse = (value) => {\n if (this.responseResolved) return;\n this.responseResolved = true;\n resolve(value);\n };\n });\n\n this.installListeners();\n }\n\n /** Stop listening for CDP events and release any pending bookkeeping. */\n public dispose(): void {\n for (const { event, handler } of this.listeners) {\n this.session.off(event, handler as never);\n }\n this.listeners.length = 0;\n this.pendingResponsesByLoader.clear();\n this.pendingExtraInfo.clear();\n }\n\n /**\n * Hint the tracker with the loader id returned by `Page.navigate`. Chrome only\n * emits this once the browser begins navigating, so we store early responses\n * and match them once the loader id is known.\n */\n public setExpectedLoaderId(loaderId: string | undefined): void {\n if (!loaderId) return;\n this.expectedLoaderId = loaderId;\n const pending = this.pendingResponsesByLoader.get(loaderId);\n if (pending) {\n this.pendingResponsesByLoader.delete(loaderId);\n this.selectResponse(pending);\n }\n }\n\n /**\n * Some navigation APIs (reload/history traversal) do not provide a loader id\n * up front. This flag instructs the tracker to accept the next qualifying\n * document response even if no loader id has been announced yet.\n */\n public expectNavigationWithoutKnownLoader(): void {\n this.acceptNextWithoutLoader = true;\n }\n\n /**\n * Returns a promise that resolves with the matched response (or `null` when\n * no document response was observed).\n */\n public async navigationCompleted(): Promise<Response | null> {\n if (!this.responseResolved) {\n queueMicrotask(() => {\n if (!this.responseResolved) this.resolveResponse(null);\n });\n }\n return this.responsePromise;\n }\n\n /** Expose the raw response promise (mainly for tests). */\n public async response(): Promise<Response | null> {\n return this.responsePromise;\n }\n\n /** Register all CDP listeners relevant to navigation tracking. */\n private installListeners(): void {\n this.addListener(\"Network.responseReceived\", (event) => {\n this.onResponseReceived(event as Protocol.Network.ResponseReceivedEvent);\n });\n this.addListener(\"Network.responseReceivedExtraInfo\", (event) => {\n this.onResponseReceivedExtraInfo(\n event as Protocol.Network.ResponseReceivedExtraInfoEvent,\n );\n });\n this.addListener(\"Network.loadingFinished\", (event) => {\n this.onLoadingFinished(event as Protocol.Network.LoadingFinishedEvent);\n });\n this.addListener(\"Network.loadingFailed\", (event) => {\n this.onLoadingFailed(event as Protocol.Network.LoadingFailedEvent);\n });\n }\n\n /** Attach a CDP listener and track it for later disposal. */\n private addListener(event: string, handler: (event: unknown) => void): void {\n this.session.on(event, handler as never);\n this.listeners.push({ event, handler });\n }\n\n /** Handle the initial response payload for document navigations. */\n private onResponseReceived(\n event: Protocol.Network.ResponseReceivedEvent,\n ): void {\n if (!this.page.isCurrentNavigationCommand(this.navigationCommandId)) return;\n if (!event || !event.response) return;\n if (event.type !== \"Document\") return;\n if (event.frameId !== this.page.mainFrameId()) return;\n\n const loaderId = event.loaderId ?? \"\";\n if (this.acceptNextWithoutLoader) {\n this.acceptNextWithoutLoader = false;\n this.selectResponse(event);\n return;\n }\n\n if (this.expectedLoaderId) {\n if (loaderId && loaderId !== this.expectedLoaderId) {\n this.pendingResponsesByLoader.set(loaderId, event);\n return;\n }\n this.selectResponse(event);\n return;\n }\n\n if (loaderId) {\n this.pendingResponsesByLoader.set(loaderId, event);\n return;\n }\n\n this.selectResponse(event);\n }\n\n /** Merge auxiliary header information once Chrome exposes it. */\n private onResponseReceivedExtraInfo(\n event: Protocol.Network.ResponseReceivedExtraInfoEvent,\n ): void {\n if (!event || !event.requestId) return;\n if (this.selectedRequestId && event.requestId === this.selectedRequestId) {\n this.selectedResponse?.applyExtraInfo(event);\n return;\n }\n this.pendingExtraInfo.set(event.requestId, event);\n }\n\n /** Resolve the response's finished promise when the request completes. */\n private onLoadingFinished(\n event: Protocol.Network.LoadingFinishedEvent,\n ): void {\n if (!event || !event.requestId) return;\n if (event.requestId !== this.selectedRequestId) return;\n this.selectedResponse?.markFinished(null);\n }\n\n /** Resolve the response's finished promise with an error on failure. */\n private onLoadingFailed(event: Protocol.Network.LoadingFailedEvent): void {\n // Ignore malformed events or ones without a request id\n if (!event || !event.requestId) return;\n // Only the tracked document request should toggle the response state\n if (event.requestId !== this.selectedRequestId) return;\n // Surface Chrome's failure text through response.finished()\n const errorText = event.errorText || \"Navigation request failed\";\n this.selectedResponse?.markFinished(new Error(errorText));\n }\n\n /**\n * Create the `Response` wrapper for the chosen document response and\n * resolve awaiting consumers. Subsequent events flesh out the header/body\n * helpers and mark the request as finished.\n */\n private selectResponse(event: Protocol.Network.ResponseReceivedEvent): void {\n if (event.loaderId) {\n this.pendingResponsesByLoader.delete(event.loaderId);\n }\n\n if (this.responseResolved) return;\n if (this.selectedResponse) return;\n\n const protocol = event.response?.protocol?.toLowerCase() ?? \"\";\n const url = event.response?.url ?? \"\";\n const isDataUrl = protocol === \"data\" || url.startsWith(\"data:\");\n const isAboutUrl = protocol === \"about\" || url.startsWith(\"about:\");\n\n if (isDataUrl || isAboutUrl) {\n this.pendingExtraInfo.delete(event.requestId);\n this.selectedRequestId = null;\n this.selectedResponse = null;\n this.resolveResponse(null);\n return;\n }\n\n const response = new Response({\n page: this.page,\n session: this.session,\n requestId: event.requestId,\n frameId: event.frameId,\n loaderId: event.loaderId,\n response: event.response,\n fromServiceWorker: Boolean(event.response?.fromServiceWorker),\n });\n\n this.selectedRequestId = event.requestId;\n this.selectedResponse = response;\n\n const extraInfo = this.pendingExtraInfo.get(event.requestId);\n if (extraInfo) {\n response.applyExtraInfo(extraInfo);\n this.pendingExtraInfo.delete(event.requestId);\n }\n\n this.resolveResponse(response);\n }\n}\n"]}
@@ -0,0 +1,53 @@
1
+ import type { CDPSessionLike } from "./cdp.js";
2
+ import { NetworkObserver, WaitForIdleHandle, WaitForIdleOptions } from "../types/private/network.js";
3
+ /**
4
+ * Cross-session network tracker.
5
+ *
6
+ * Centralises network bookkeeping for a Page: every CDP session (top-level and OOPIF)
7
+ * funnels `Network.*` events through here so higher-level waiters can reason about
8
+ * in-flight requests across the entire frame tree. The manager exposes a simple
9
+ * observer interface plus a "wait until idle" helper that resolves once no filtered
10
+ * requests remain for a quiet window.
11
+ */
12
+ /**
13
+ * Aggregates network information for all CDP sessions owned by a Page.
14
+ */
15
+ export declare class NetworkManager {
16
+ private readonly sessions;
17
+ private readonly observers;
18
+ private readonly requests;
19
+ private readonly documentRequestsByFrame;
20
+ /**
21
+ * Begin tracking network traffic for a CDP session (top-level or OOPIF).
22
+ * Safe to call multiple times; duplicate registrations are ignored.
23
+ */
24
+ trackSession(session: CDPSessionLike): void;
25
+ /**
26
+ * Stop tracking a session and discard any inflight bookkeeping owned by it.
27
+ */
28
+ untrackSession(rawSessionId: string | undefined): void;
29
+ /**
30
+ * Register a passive observer for request lifecycle notifications.
31
+ * Returns a disposer that removes the observer.
32
+ */
33
+ addObserver(observer: NetworkObserver): () => void;
34
+ /**
35
+ * Resolve once no (filtered) requests are in flight for the given quiet window.
36
+ * The waiter automatically unregisters itself on completion or timeout.
37
+ */
38
+ waitForIdle(options: WaitForIdleOptions): WaitForIdleHandle;
39
+ /**
40
+ * Tear down all session listeners and clear observers/bookkeeping.
41
+ */
42
+ dispose(): void;
43
+ /** Fan-out helper when a tracked request starts. */
44
+ private emitStart;
45
+ /** Fan-out helper when a tracked request completes successfully. */
46
+ private emitFinish;
47
+ /** Fan-out helper when a tracked request fails mid-flight. */
48
+ private emitFailure;
49
+ /** Compute a stable key for a session (falls back to synthetic root id). */
50
+ private sessionKey;
51
+ /** Compose the unique key for tracking a request under a session. */
52
+ private requestKey;
53
+ }