@browserbasehq/orca 3.0.9-alpha-4 → 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 +37 -24
  654. package/dist/index.d.ts +0 -4363
  655. package/dist/index.js +0 -76530
@@ -0,0 +1,296 @@
1
+ import { test, expect } from "@playwright/test";
2
+ import { V3 } from "../v3.js";
3
+ import { v3DynamicTestConfig } from "./v3.dynamic.config.js";
4
+ import { closeV3 } from "./testUtils.js";
5
+ function dataUrl(html) {
6
+ return "data:text/html;charset=utf-8," + encodeURIComponent(html);
7
+ }
8
+ test.describe("V3 keyboard shortcuts and typing", () => {
9
+ let v3;
10
+ test.beforeEach(async () => {
11
+ v3 = new V3(v3DynamicTestConfig);
12
+ await v3.init();
13
+ });
14
+ test.afterEach(async () => {
15
+ await closeV3(v3);
16
+ });
17
+ test("typing, select-all + delete clears input (Cmd maps cross-OS)", async () => {
18
+ const html = `<!doctype html>
19
+ <input id="i1" autofocus />`;
20
+ const page = await v3.context.awaitActivePage();
21
+ await page.goto(dataUrl(html), {
22
+ waitUntil: "domcontentloaded",
23
+ timeoutMs: 15e3
24
+ });
25
+ await page.locator("#i1").click();
26
+ await page.type("Hello World");
27
+ await page.keyPress("Cmd+A");
28
+ await page.keyPress("Delete");
29
+ const value = await page.evaluate(
30
+ (sel) => document.querySelector(sel).value,
31
+ "#i1"
32
+ );
33
+ expect(value).toBe("");
34
+ });
35
+ test("accelerator does not inject printable text (Cmd+B does not type 'b')", async () => {
36
+ const html = `<!doctype html>
37
+ <input id="i" />`;
38
+ const page = await v3.context.awaitActivePage();
39
+ await page.goto(dataUrl(html), {
40
+ waitUntil: "domcontentloaded",
41
+ timeoutMs: 15e3
42
+ });
43
+ await page.locator("#i").click();
44
+ await page.type("xyz");
45
+ await page.keyPress("Cmd+B");
46
+ const value = await page.evaluate(
47
+ (sel) => document.querySelector(sel).value,
48
+ "#i"
49
+ );
50
+ expect(value).toBe("xyz");
51
+ });
52
+ test("Tab and Shift+Tab move focus", async () => {
53
+ const html = `<!doctype html>
54
+ <input id="a" />
55
+ <input id="b" />`;
56
+ const page = await v3.context.awaitActivePage();
57
+ await page.goto(dataUrl(html), {
58
+ waitUntil: "domcontentloaded",
59
+ timeoutMs: 15e3
60
+ });
61
+ await page.locator("#a").click();
62
+ await page.keyPress("Tab");
63
+ const active1 = await page.evaluate(
64
+ () => document.activeElement?.id || ""
65
+ );
66
+ expect(active1).toBe("b");
67
+ await page.keyPress("Shift+Tab");
68
+ const active2 = await page.evaluate(
69
+ () => document.activeElement?.id || ""
70
+ );
71
+ expect(active2).toBe("a");
72
+ });
73
+ test("cut clears the field (Cmd+X)", async () => {
74
+ const html = `<!doctype html>
75
+ <input id="t" />`;
76
+ const page = await v3.context.awaitActivePage();
77
+ await page.goto(dataUrl(html), {
78
+ waitUntil: "domcontentloaded",
79
+ timeoutMs: 15e3
80
+ });
81
+ await page.locator("#t").click();
82
+ await page.type("cut-me");
83
+ await page.keyPress("Cmd+A");
84
+ await page.keyPress("Cmd+X");
85
+ const value = await page.evaluate(
86
+ (sel) => document.querySelector(sel).value,
87
+ "#t"
88
+ );
89
+ expect(value).toBe("");
90
+ });
91
+ test("single printable via keyPress types characters (a, Shift+A, space)", async () => {
92
+ const html = `<!doctype html>
93
+ <input id="t" autofocus />`;
94
+ const page = await v3.context.awaitActivePage();
95
+ await page.goto(dataUrl(html), {
96
+ waitUntil: "domcontentloaded",
97
+ timeoutMs: 15e3
98
+ });
99
+ await page.locator("#t").click();
100
+ await page.keyPress("a");
101
+ await page.keyPress("Shift+A");
102
+ await page.keyPress(" ");
103
+ const value = await page.evaluate(
104
+ (sel) => document.querySelector(sel).value,
105
+ "#t"
106
+ );
107
+ expect(value).toBe("aA ");
108
+ });
109
+ test("Backspace removes last char", async () => {
110
+ const html = `<!doctype html>
111
+ <input id="t" />`;
112
+ const page = await v3.context.awaitActivePage();
113
+ await page.goto(dataUrl(html), {
114
+ waitUntil: "domcontentloaded",
115
+ timeoutMs: 15e3
116
+ });
117
+ await page.locator("#t").click();
118
+ await page.type("ab");
119
+ await page.keyPress("Backspace");
120
+ const value = await page.evaluate(
121
+ (sel) => document.querySelector(sel).value,
122
+ "#t"
123
+ );
124
+ expect(value).toBe("a");
125
+ });
126
+ test("Delete removes next char at caret", async () => {
127
+ const html = `<!doctype html>
128
+ <input id="t" />`;
129
+ const page = await v3.context.awaitActivePage();
130
+ await page.goto(dataUrl(html), {
131
+ waitUntil: "domcontentloaded",
132
+ timeoutMs: 15e3
133
+ });
134
+ await page.locator("#t").click();
135
+ await page.type("abc");
136
+ await page.evaluate(() => {
137
+ const el = document.getElementById("t");
138
+ el.focus();
139
+ el.setSelectionRange(1, 1);
140
+ });
141
+ await page.keyPress("Delete");
142
+ const value = await page.evaluate(
143
+ (sel) => document.querySelector(sel).value,
144
+ "#t"
145
+ );
146
+ expect(value).toBe("ac");
147
+ });
148
+ test("ArrowLeft moves caret and typing inserts in middle", async () => {
149
+ const html = `<!doctype html>
150
+ <input id="t" />`;
151
+ const page = await v3.context.awaitActivePage();
152
+ await page.goto(dataUrl(html), {
153
+ waitUntil: "domcontentloaded",
154
+ timeoutMs: 15e3
155
+ });
156
+ await page.locator("#t").click();
157
+ await page.type("ac");
158
+ await page.keyPress("ArrowLeft");
159
+ await page.keyPress("b");
160
+ const value = await page.evaluate(
161
+ (sel) => document.querySelector(sel).value,
162
+ "#t"
163
+ );
164
+ expect(value).toBe("abc");
165
+ });
166
+ test("Enter inserts newline in textarea", async () => {
167
+ const html = `<!doctype html>
168
+ <textarea id="ta"></textarea>`;
169
+ const page = await v3.context.awaitActivePage();
170
+ await page.goto(dataUrl(html), {
171
+ waitUntil: "domcontentloaded",
172
+ timeoutMs: 15e3
173
+ });
174
+ await page.locator("#ta").click();
175
+ await page.keyPress("a");
176
+ await page.keyPress("Enter");
177
+ await page.keyPress("b");
178
+ const value = await page.evaluate(
179
+ (sel) => document.querySelector(sel).value,
180
+ "#ta"
181
+ );
182
+ expect(value).toBe("a\nb");
183
+ });
184
+ test("Insert key (no-op for value)", async () => {
185
+ const html = `<!doctype html>
186
+ <input id="t" />`;
187
+ const page = await v3.context.awaitActivePage();
188
+ await page.goto(dataUrl(html), {
189
+ waitUntil: "domcontentloaded",
190
+ timeoutMs: 15e3
191
+ });
192
+ await page.locator("#t").click();
193
+ await page.type("abc");
194
+ await page.keyPress("Insert");
195
+ const value = await page.evaluate(
196
+ (sel) => document.querySelector(sel).value,
197
+ "#t"
198
+ );
199
+ expect(value).toBe("abc");
200
+ });
201
+ test("Enter submits form from text input", async () => {
202
+ const html = `<!doctype html>
203
+ <form id="f">
204
+ <input id="name" />
205
+ <button id="submit">Go</button>
206
+ <input id="submitted" />
207
+ </form>
208
+ <script>
209
+ document.getElementById('f').addEventListener('submit', (e) => {
210
+ e.preventDefault();
211
+ document.getElementById('submitted').value = 'yes';
212
+ });
213
+ </script>`;
214
+ const page = await v3.context.awaitActivePage();
215
+ await page.goto(dataUrl(html), {
216
+ waitUntil: "domcontentloaded",
217
+ timeoutMs: 15e3
218
+ });
219
+ await page.locator("#name").click();
220
+ await page.type("foo");
221
+ await page.keyPress("Enter");
222
+ const submitted = await page.evaluate(
223
+ () => document.getElementById("submitted")?.value || ""
224
+ );
225
+ expect(submitted).toBe("yes");
226
+ });
227
+ test("Enter in textarea does not submit form (inserts newline)", async () => {
228
+ const html = `<!doctype html>
229
+ <form id="f">
230
+ <textarea id="ta"></textarea>
231
+ <button id="submit">Go</button>
232
+ <input id="submitted" />
233
+ </form>
234
+ <script>
235
+ document.getElementById('f').addEventListener('submit', (e) => {
236
+ e.preventDefault();
237
+ document.getElementById('submitted').value = 'yes';
238
+ });
239
+ </script>`;
240
+ const page = await v3.context.awaitActivePage();
241
+ await page.goto(dataUrl(html), {
242
+ waitUntil: "domcontentloaded",
243
+ timeoutMs: 15e3
244
+ });
245
+ await page.locator("#ta").click();
246
+ await page.keyPress("a");
247
+ await page.keyPress("Enter");
248
+ await page.keyPress("b");
249
+ const submitted = await page.evaluate(
250
+ () => document.getElementById("submitted")?.value || ""
251
+ );
252
+ const value = await page.evaluate(
253
+ (sel) => document.querySelector(sel).value,
254
+ "#ta"
255
+ );
256
+ expect(submitted).toBe("");
257
+ expect(value).toBe("a\nb");
258
+ });
259
+ test('pressing "+" key types plus sign', async () => {
260
+ const html = `<!doctype html>
261
+ <input id="t" />`;
262
+ const page = await v3.context.awaitActivePage();
263
+ await page.goto(dataUrl(html), {
264
+ waitUntil: "domcontentloaded",
265
+ timeoutMs: 15e3
266
+ });
267
+ await page.locator("#t").click();
268
+ await page.keyPress("+");
269
+ const value = await page.evaluate(
270
+ (sel) => document.querySelector(sel).value,
271
+ "#t"
272
+ );
273
+ expect(value).toBe("+");
274
+ });
275
+ test("modifier state clears on keyPress error", async () => {
276
+ const html = `<!doctype html>
277
+ <input id="t" />`;
278
+ const page = await v3.context.awaitActivePage();
279
+ await page.goto(dataUrl(html), {
280
+ waitUntil: "domcontentloaded",
281
+ timeoutMs: 15e3
282
+ });
283
+ await page.locator("#t").click();
284
+ try {
285
+ await page.keyPress("Cmd+InvalidKey123");
286
+ } catch {
287
+ }
288
+ await page.type("ok");
289
+ const value = await page.evaluate(
290
+ (sel) => document.querySelector(sel).value,
291
+ "#t"
292
+ );
293
+ expect(value).toBe("ok");
294
+ });
295
+ });
296
+ //# sourceMappingURL=keyboard.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/keyboard.spec.ts"],
4
+ "sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\nfunction dataUrl(html: string): string {\n return \"data:text/html;charset=utf-8,\" + encodeURIComponent(html);\n}\n\ntest.describe(\"V3 keyboard shortcuts and typing\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3DynamicTestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await closeV3(v3);\n });\n\n test(\"typing, select-all + delete clears input (Cmd maps cross-OS)\", async () => {\n const html = `<!doctype html>\n <input id=\"i1\" autofocus />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#i1\").click();\n await page.type(\"Hello World\");\n\n await page.keyPress(\"Cmd+A\");\n await page.keyPress(\"Delete\");\n\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#i1\",\n );\n expect(value).toBe(\"\");\n });\n\n test(\"accelerator does not inject printable text (Cmd+B does not type 'b')\", async () => {\n const html = `<!doctype html>\n <input id=\"i\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#i\").click();\n await page.type(\"xyz\");\n\n await page.keyPress(\"Cmd+B\");\n\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#i\",\n );\n expect(value).toBe(\"xyz\");\n });\n\n test(\"Tab and Shift+Tab move focus\", async () => {\n const html = `<!doctype html>\n <input id=\"a\" />\n <input id=\"b\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#a\").click();\n await page.keyPress(\"Tab\");\n const active1 = await page.evaluate(\n () => (document.activeElement as HTMLElement)?.id || \"\",\n );\n expect(active1).toBe(\"b\");\n\n await page.keyPress(\"Shift+Tab\");\n const active2 = await page.evaluate(\n () => (document.activeElement as HTMLElement)?.id || \"\",\n );\n expect(active2).toBe(\"a\");\n });\n\n test(\"cut clears the field (Cmd+X)\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.type(\"cut-me\");\n await page.keyPress(\"Cmd+A\");\n await page.keyPress(\"Cmd+X\");\n\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"\");\n });\n\n test(\"single printable via keyPress types characters (a, Shift+A, space)\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" autofocus />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.keyPress(\"a\");\n await page.keyPress(\"Shift+A\");\n await page.keyPress(\" \");\n\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"aA \");\n });\n\n test(\"Backspace removes last char\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.type(\"ab\");\n await page.keyPress(\"Backspace\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"a\");\n });\n\n test(\"Delete removes next char at caret\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.type(\"abc\");\n // place caret between a|bc\n await page.evaluate(() => {\n const el = document.getElementById(\"t\") as HTMLInputElement;\n el.focus();\n el.setSelectionRange(1, 1);\n });\n await page.keyPress(\"Delete\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"ac\");\n });\n\n test(\"ArrowLeft moves caret and typing inserts in middle\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.type(\"ac\");\n await page.keyPress(\"ArrowLeft\");\n await page.keyPress(\"b\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"abc\");\n });\n\n test(\"Enter inserts newline in textarea\", async () => {\n const html = `<!doctype html>\n <textarea id=\"ta\"></textarea>`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#ta\").click();\n await page.keyPress(\"a\");\n await page.keyPress(\"Enter\");\n await page.keyPress(\"b\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLTextAreaElement)!.value,\n \"#ta\",\n );\n expect(value).toBe(\"a\\nb\");\n });\n\n test(\"Insert key (no-op for value)\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.type(\"abc\");\n await page.keyPress(\"Insert\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"abc\");\n });\n\n test(\"Enter submits form from text input\", async () => {\n const html = `<!doctype html>\n <form id=\"f\">\n <input id=\"name\" />\n <button id=\"submit\">Go</button>\n <input id=\"submitted\" />\n </form>\n <script>\n document.getElementById('f').addEventListener('submit', (e) => {\n e.preventDefault();\n document.getElementById('submitted').value = 'yes';\n });\n </script>`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#name\").click();\n await page.type(\"foo\");\n await page.keyPress(\"Enter\");\n\n const submitted = await page.evaluate(\n () =>\n (document.getElementById(\"submitted\") as HTMLInputElement)?.value || \"\",\n );\n expect(submitted).toBe(\"yes\");\n });\n\n test(\"Enter in textarea does not submit form (inserts newline)\", async () => {\n const html = `<!doctype html>\n <form id=\"f\">\n <textarea id=\"ta\"></textarea>\n <button id=\"submit\">Go</button>\n <input id=\"submitted\" />\n </form>\n <script>\n document.getElementById('f').addEventListener('submit', (e) => {\n e.preventDefault();\n document.getElementById('submitted').value = 'yes';\n });\n </script>`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#ta\").click();\n await page.keyPress(\"a\");\n await page.keyPress(\"Enter\");\n await page.keyPress(\"b\");\n\n const submitted = await page.evaluate(\n () =>\n (document.getElementById(\"submitted\") as HTMLInputElement)?.value || \"\",\n );\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLTextAreaElement)!.value,\n \"#ta\",\n );\n expect(submitted).toBe(\"\");\n expect(value).toBe(\"a\\nb\");\n });\n\n test('pressing \"+\" key types plus sign', async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n await page.keyPress(\"+\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"+\");\n });\n\n test(\"modifier state clears on keyPress error\", async () => {\n const html = `<!doctype html>\n <input id=\"t\" />`;\n const page = await v3.context.awaitActivePage();\n await page.goto(dataUrl(html), {\n waitUntil: \"domcontentloaded\",\n timeoutMs: 15000,\n });\n\n await page.locator(\"#t\").click();\n // Try invalid key that might throw\n try {\n await page.keyPress(\"Cmd+InvalidKey123\");\n } catch {\n // Expected to fail\n }\n\n // Now try normal typing - should work if modifiers were cleared\n await page.type(\"ok\");\n const value = await page.evaluate(\n (sel) => (document.querySelector(sel) as HTMLInputElement)!.value,\n \"#t\",\n );\n expect(value).toBe(\"ok\");\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,159 @@
1
+ import { test, expect } from "@playwright/test";
2
+ import { V3 } from "../v3.js";
3
+ import { v3TestConfig } from "./v3.config.js";
4
+ test.describe("Locator.backendNodeId() - CDP DOM node ID", () => {
5
+ let v3;
6
+ test.beforeEach(async () => {
7
+ v3 = new V3(v3TestConfig);
8
+ await v3.init();
9
+ });
10
+ test.afterEach(async () => {
11
+ await v3?.close?.().catch(() => {
12
+ });
13
+ });
14
+ test("returns a valid backend node ID for an element", async () => {
15
+ const page = v3.context.pages()[0];
16
+ await page.goto(
17
+ "data:text/html," + encodeURIComponent(
18
+ `<!doctype html><html><body>
19
+ <button id="btn">Click me</button>
20
+ </body></html>`
21
+ )
22
+ );
23
+ const locator = page.locator("button#btn");
24
+ const nodeId = await locator.backendNodeId();
25
+ expect(typeof nodeId).toBe("number");
26
+ expect(nodeId).toBeGreaterThan(0);
27
+ });
28
+ test("returns different node IDs for different elements", async () => {
29
+ const page = v3.context.pages()[0];
30
+ await page.goto(
31
+ "data:text/html," + encodeURIComponent(
32
+ `<!doctype html><html><body>
33
+ <div id="div1">First</div>
34
+ <div id="div2">Second</div>
35
+ <p id="p1">Third</p>
36
+ </body></html>`
37
+ )
38
+ );
39
+ const nodeId1 = await page.locator("div#div1").backendNodeId();
40
+ const nodeId2 = await page.locator("div#div2").backendNodeId();
41
+ const nodeId3 = await page.locator("p#p1").backendNodeId();
42
+ expect(nodeId1).not.toBe(nodeId2);
43
+ expect(nodeId2).not.toBe(nodeId3);
44
+ expect(nodeId1).not.toBe(nodeId3);
45
+ });
46
+ test("returns consistent node ID for the same element", async () => {
47
+ const page = v3.context.pages()[0];
48
+ await page.goto(
49
+ "data:text/html," + encodeURIComponent(
50
+ `<!doctype html><html><body>
51
+ <input type="text" id="input" />
52
+ </body></html>`
53
+ )
54
+ );
55
+ const locator = page.locator("input#input");
56
+ const nodeId1 = await locator.backendNodeId();
57
+ const nodeId2 = await locator.backendNodeId();
58
+ expect(nodeId1).toBe(nodeId2);
59
+ });
60
+ test("returns node ID for nested elements", async () => {
61
+ const page = v3.context.pages()[0];
62
+ await page.goto(
63
+ "data:text/html," + encodeURIComponent(
64
+ `<!doctype html><html><body>
65
+ <div id="outer">
66
+ <div id="middle">
67
+ <span id="inner">Deep</span>
68
+ </div>
69
+ </div>
70
+ </body></html>`
71
+ )
72
+ );
73
+ const outerNodeId = await page.locator("div#outer").backendNodeId();
74
+ const middleNodeId = await page.locator("div#middle").backendNodeId();
75
+ const innerNodeId = await page.locator("span#inner").backendNodeId();
76
+ expect(outerNodeId).toBeGreaterThan(0);
77
+ expect(middleNodeId).toBeGreaterThan(0);
78
+ expect(innerNodeId).toBeGreaterThan(0);
79
+ expect((/* @__PURE__ */ new Set([outerNodeId, middleNodeId, innerNodeId])).size).toBe(3);
80
+ });
81
+ test("returns node ID for elements with various attributes", async () => {
82
+ const page = v3.context.pages()[0];
83
+ await page.goto(
84
+ "data:text/html," + encodeURIComponent(
85
+ `<!doctype html><html><body>
86
+ <button class="btn primary" data-test="submit" aria-label="Submit form">Save</button>
87
+ </body></html>`
88
+ )
89
+ );
90
+ const locator = page.locator("button");
91
+ const nodeId = await locator.backendNodeId();
92
+ expect(typeof nodeId).toBe("number");
93
+ expect(nodeId).toBeGreaterThan(0);
94
+ });
95
+ test("returns node ID for form elements", async () => {
96
+ const page = v3.context.pages()[0];
97
+ await page.goto(
98
+ "data:text/html," + encodeURIComponent(
99
+ `<!doctype html><html><body>
100
+ <form>
101
+ <input type="email" id="email" placeholder="Email" />
102
+ <textarea id="message"></textarea>
103
+ <select id="country">
104
+ <option value="us">USA</option>
105
+ <option value="ca">Canada</option>
106
+ </select>
107
+ <button type="submit">Submit</button>
108
+ </form>
109
+ </body></html>`
110
+ )
111
+ );
112
+ const emailNodeId = await page.locator("input#email").backendNodeId();
113
+ const textareaNodeId = await page.locator("textarea#message").backendNodeId();
114
+ const selectNodeId = await page.locator("select#country").backendNodeId();
115
+ const submitNodeId = await page.locator("button[type='submit']").backendNodeId();
116
+ expect(emailNodeId).toBeGreaterThan(0);
117
+ expect(textareaNodeId).toBeGreaterThan(0);
118
+ expect(selectNodeId).toBeGreaterThan(0);
119
+ expect(submitNodeId).toBeGreaterThan(0);
120
+ const nodeIds = [emailNodeId, textareaNodeId, selectNodeId, submitNodeId];
121
+ expect(new Set(nodeIds).size).toBe(4);
122
+ });
123
+ test("returns node ID for dynamically created elements", async () => {
124
+ const page = v3.context.pages()[0];
125
+ await page.goto(
126
+ "data:text/html," + encodeURIComponent(
127
+ `<!doctype html><html><body>
128
+ <div id="container"></div>
129
+ <script>
130
+ const container = document.getElementById('container');
131
+ const newBtn = document.createElement('button');
132
+ newBtn.id = 'dynamic-btn';
133
+ newBtn.textContent = 'Dynamically created';
134
+ container.appendChild(newBtn);
135
+ </script>
136
+ </body></html>`
137
+ )
138
+ );
139
+ const locator = page.locator("button#dynamic-btn");
140
+ const nodeId = await locator.backendNodeId();
141
+ expect(typeof nodeId).toBe("number");
142
+ expect(nodeId).toBeGreaterThan(0);
143
+ });
144
+ test("returns node ID for elements with text selectors", async () => {
145
+ const page = v3.context.pages()[0];
146
+ await page.goto(
147
+ "data:text/html," + encodeURIComponent(
148
+ `<!doctype html><html><body>
149
+ <button>Submit Form</button>
150
+ </body></html>`
151
+ )
152
+ );
153
+ const locator = page.locator("text=Submit Form");
154
+ const nodeId = await locator.backendNodeId();
155
+ expect(typeof nodeId).toBe("number");
156
+ expect(nodeId).toBeGreaterThan(0);
157
+ });
158
+ });
159
+ //# sourceMappingURL=locator-backend-node-id.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/locator-backend-node-id.spec.ts"],
4
+ "sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator.backendNodeId() - CDP DOM node ID\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"returns a valid backend node ID for an element\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <button id=\"btn\">Click me</button>\n </body></html>`,\n ),\n );\n\n const locator = page.locator(\"button#btn\");\n const nodeId = await locator.backendNodeId();\n\n // Backend node ID should be a valid number\n expect(typeof nodeId).toBe(\"number\");\n expect(nodeId).toBeGreaterThan(0);\n });\n\n test(\"returns different node IDs for different elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"div1\">First</div>\n <div id=\"div2\">Second</div>\n <p id=\"p1\">Third</p>\n </body></html>`,\n ),\n );\n\n const nodeId1 = await page.locator(\"div#div1\").backendNodeId();\n const nodeId2 = await page.locator(\"div#div2\").backendNodeId();\n const nodeId3 = await page.locator(\"p#p1\").backendNodeId();\n\n // All node IDs should be unique\n expect(nodeId1).not.toBe(nodeId2);\n expect(nodeId2).not.toBe(nodeId3);\n expect(nodeId1).not.toBe(nodeId3);\n });\n\n test(\"returns consistent node ID for the same element\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input type=\"text\" id=\"input\" />\n </body></html>`,\n ),\n );\n\n const locator = page.locator(\"input#input\");\n\n // Call multiple times on the same element\n const nodeId1 = await locator.backendNodeId();\n const nodeId2 = await locator.backendNodeId();\n\n // Should return the same ID (same element)\n expect(nodeId1).toBe(nodeId2);\n });\n\n test(\"returns node ID for nested elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"outer\">\n <div id=\"middle\">\n <span id=\"inner\">Deep</span>\n </div>\n </div>\n </body></html>`,\n ),\n );\n\n const outerNodeId = await page.locator(\"div#outer\").backendNodeId();\n const middleNodeId = await page.locator(\"div#middle\").backendNodeId();\n const innerNodeId = await page.locator(\"span#inner\").backendNodeId();\n\n // All should be valid and unique\n expect(outerNodeId).toBeGreaterThan(0);\n expect(middleNodeId).toBeGreaterThan(0);\n expect(innerNodeId).toBeGreaterThan(0);\n expect(new Set([outerNodeId, middleNodeId, innerNodeId]).size).toBe(3);\n });\n\n test(\"returns node ID for elements with various attributes\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <button class=\"btn primary\" data-test=\"submit\" aria-label=\"Submit form\">Save</button>\n </body></html>`,\n ),\n );\n\n const locator = page.locator(\"button\");\n const nodeId = await locator.backendNodeId();\n\n // Should work with complex elements\n expect(typeof nodeId).toBe(\"number\");\n expect(nodeId).toBeGreaterThan(0);\n });\n\n test(\"returns node ID for form elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <form>\n <input type=\"email\" id=\"email\" placeholder=\"Email\" />\n <textarea id=\"message\"></textarea>\n <select id=\"country\">\n <option value=\"us\">USA</option>\n <option value=\"ca\">Canada</option>\n </select>\n <button type=\"submit\">Submit</button>\n </form>\n </body></html>`,\n ),\n );\n\n const emailNodeId = await page.locator(\"input#email\").backendNodeId();\n const textareaNodeId = await page\n .locator(\"textarea#message\")\n .backendNodeId();\n const selectNodeId = await page.locator(\"select#country\").backendNodeId();\n const submitNodeId = await page\n .locator(\"button[type='submit']\")\n .backendNodeId();\n\n // All form elements should have valid node IDs\n expect(emailNodeId).toBeGreaterThan(0);\n expect(textareaNodeId).toBeGreaterThan(0);\n expect(selectNodeId).toBeGreaterThan(0);\n expect(submitNodeId).toBeGreaterThan(0);\n\n // All should be unique\n const nodeIds = [emailNodeId, textareaNodeId, selectNodeId, submitNodeId];\n expect(new Set(nodeIds).size).toBe(4);\n });\n\n test(\"returns node ID for dynamically created elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"container\"></div>\n <script>\n const container = document.getElementById('container');\n const newBtn = document.createElement('button');\n newBtn.id = 'dynamic-btn';\n newBtn.textContent = 'Dynamically created';\n container.appendChild(newBtn);\n </script>\n </body></html>`,\n ),\n );\n\n const locator = page.locator(\"button#dynamic-btn\");\n const nodeId = await locator.backendNodeId();\n\n // Should work with dynamically created elements\n expect(typeof nodeId).toBe(\"number\");\n expect(nodeId).toBeGreaterThan(0);\n });\n\n test(\"returns node ID for elements with text selectors\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <button>Submit Form</button>\n </body></html>`,\n ),\n );\n\n const locator = page.locator(\"text=Submit Form\");\n const nodeId = await locator.backendNodeId();\n\n // Should work with text-based selectors\n expect(typeof nodeId).toBe(\"number\");\n expect(nodeId).toBeGreaterThan(0);\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }