@vforsh/argus-watcher 0.1.2 → 0.1.4

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 (355) hide show
  1. package/README.md +67 -14
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/artifacts.d.ts +13 -0
  4. package/dist/artifacts.d.ts.map +1 -0
  5. package/dist/artifacts.js +27 -0
  6. package/dist/artifacts.js.map +1 -0
  7. package/dist/buffer/LogBuffer.d.ts +8 -3
  8. package/dist/buffer/LogBuffer.d.ts.map +1 -1
  9. package/dist/buffer/LogBuffer.js +9 -1
  10. package/dist/buffer/LogBuffer.js.map +1 -1
  11. package/dist/buffer/NetBuffer.d.ts +29 -0
  12. package/dist/buffer/NetBuffer.d.ts.map +1 -0
  13. package/dist/buffer/NetBuffer.js +85 -0
  14. package/dist/buffer/NetBuffer.js.map +1 -0
  15. package/dist/cdp/accessibility.d.ts +18 -0
  16. package/dist/cdp/accessibility.d.ts.map +1 -0
  17. package/dist/cdp/accessibility.js +300 -0
  18. package/dist/cdp/accessibility.js.map +1 -0
  19. package/dist/cdp/connection.d.ts +39 -0
  20. package/dist/cdp/connection.d.ts.map +1 -0
  21. package/dist/cdp/connection.js +131 -0
  22. package/dist/cdp/connection.js.map +1 -0
  23. package/dist/cdp/dom/fill.d.ts +22 -0
  24. package/dist/cdp/dom/fill.d.ts.map +1 -0
  25. package/dist/cdp/dom/fill.js +59 -0
  26. package/dist/cdp/dom/fill.js.map +1 -0
  27. package/dist/cdp/dom/info.d.ts +14 -0
  28. package/dist/cdp/dom/info.d.ts.map +1 -0
  29. package/dist/cdp/dom/info.js +52 -0
  30. package/dist/cdp/dom/info.js.map +1 -0
  31. package/dist/cdp/dom/insert.d.ts +19 -0
  32. package/dist/cdp/dom/insert.d.ts.map +1 -0
  33. package/dist/cdp/dom/insert.js +30 -0
  34. package/dist/cdp/dom/insert.js.map +1 -0
  35. package/dist/cdp/dom/modify.d.ts +50 -0
  36. package/dist/cdp/dom/modify.d.ts.map +1 -0
  37. package/dist/cdp/dom/modify.js +100 -0
  38. package/dist/cdp/dom/modify.js.map +1 -0
  39. package/dist/cdp/dom/remove.d.ts +17 -0
  40. package/dist/cdp/dom/remove.d.ts.map +1 -0
  41. package/dist/cdp/dom/remove.js +27 -0
  42. package/dist/cdp/dom/remove.js.map +1 -0
  43. package/dist/cdp/dom/selector.d.ts +19 -0
  44. package/dist/cdp/dom/selector.d.ts.map +1 -0
  45. package/dist/cdp/dom/selector.js +86 -0
  46. package/dist/cdp/dom/selector.js.map +1 -0
  47. package/dist/cdp/dom/setFile.d.ts +21 -0
  48. package/dist/cdp/dom/setFile.d.ts.map +1 -0
  49. package/dist/cdp/dom/setFile.js +25 -0
  50. package/dist/cdp/dom/setFile.js.map +1 -0
  51. package/dist/cdp/dom/submit.d.ts +15 -0
  52. package/dist/cdp/dom/submit.d.ts.map +1 -0
  53. package/dist/cdp/dom/submit.js +130 -0
  54. package/dist/cdp/dom/submit.js.map +1 -0
  55. package/dist/cdp/dom/tree.d.ts +16 -0
  56. package/dist/cdp/dom/tree.d.ts.map +1 -0
  57. package/dist/cdp/dom/tree.js +100 -0
  58. package/dist/cdp/dom/tree.js.map +1 -0
  59. package/dist/cdp/dom/types.d.ts +15 -0
  60. package/dist/cdp/dom/types.d.ts.map +1 -0
  61. package/dist/cdp/dom/types.js +2 -0
  62. package/dist/cdp/dom/types.js.map +1 -0
  63. package/dist/cdp/dom.d.ts +15 -0
  64. package/dist/cdp/dom.d.ts.map +1 -0
  65. package/dist/cdp/dom.js +9 -0
  66. package/dist/cdp/dom.js.map +1 -0
  67. package/dist/cdp/editor.d.ts +23 -0
  68. package/dist/cdp/editor.d.ts.map +1 -0
  69. package/dist/cdp/editor.js +266 -0
  70. package/dist/cdp/editor.js.map +1 -0
  71. package/dist/cdp/emulation.d.ts +16 -0
  72. package/dist/cdp/emulation.d.ts.map +1 -0
  73. package/dist/cdp/emulation.js +40 -0
  74. package/dist/cdp/emulation.js.map +1 -0
  75. package/dist/cdp/eval.d.ts +11 -0
  76. package/dist/cdp/eval.d.ts.map +1 -0
  77. package/dist/cdp/eval.js +79 -0
  78. package/dist/cdp/eval.js.map +1 -0
  79. package/dist/cdp/keyboard.d.ts +38 -0
  80. package/dist/cdp/keyboard.d.ts.map +1 -0
  81. package/dist/cdp/keyboard.js +148 -0
  82. package/dist/cdp/keyboard.js.map +1 -0
  83. package/dist/cdp/mouse.d.ts +49 -0
  84. package/dist/cdp/mouse.d.ts.map +1 -0
  85. package/dist/cdp/mouse.js +203 -0
  86. package/dist/cdp/mouse.js.map +1 -0
  87. package/dist/cdp/networkCapture.d.ts +11 -0
  88. package/dist/cdp/networkCapture.d.ts.map +1 -0
  89. package/dist/cdp/networkCapture.js +99 -0
  90. package/dist/cdp/networkCapture.js.map +1 -0
  91. package/dist/cdp/pageIndicator.d.ts +41 -0
  92. package/dist/cdp/pageIndicator.d.ts.map +1 -0
  93. package/dist/cdp/pageIndicator.js +395 -0
  94. package/dist/cdp/pageIndicator.js.map +1 -0
  95. package/dist/cdp/redaction.d.ts +3 -0
  96. package/dist/cdp/redaction.d.ts.map +1 -0
  97. package/dist/cdp/redaction.js +35 -0
  98. package/dist/cdp/redaction.js.map +1 -0
  99. package/dist/cdp/remoteObject.d.ts +6 -0
  100. package/dist/cdp/remoteObject.d.ts.map +1 -0
  101. package/dist/cdp/remoteObject.js +94 -0
  102. package/dist/cdp/remoteObject.js.map +1 -0
  103. package/dist/cdp/screenshot.d.ts +10 -0
  104. package/dist/cdp/screenshot.d.ts.map +1 -0
  105. package/dist/cdp/screenshot.js +83 -0
  106. package/dist/cdp/screenshot.js.map +1 -0
  107. package/dist/cdp/storageLocal.d.ts +8 -0
  108. package/dist/cdp/storageLocal.d.ts.map +1 -0
  109. package/dist/cdp/storageLocal.js +70 -0
  110. package/dist/cdp/storageLocal.js.map +1 -0
  111. package/dist/cdp/text-filter.d.ts +6 -0
  112. package/dist/cdp/text-filter.d.ts.map +1 -0
  113. package/dist/cdp/text-filter.js +36 -0
  114. package/dist/cdp/text-filter.js.map +1 -0
  115. package/dist/cdp/throttle.d.ts +6 -0
  116. package/dist/cdp/throttle.d.ts.map +1 -0
  117. package/dist/cdp/throttle.js +9 -0
  118. package/dist/cdp/throttle.js.map +1 -0
  119. package/dist/cdp/tracing.d.ts +15 -0
  120. package/dist/cdp/tracing.d.ts.map +1 -0
  121. package/dist/cdp/tracing.js +159 -0
  122. package/dist/cdp/tracing.js.map +1 -0
  123. package/dist/cdp/watcher.d.ts +17 -2
  124. package/dist/cdp/watcher.d.ts.map +1 -1
  125. package/dist/cdp/watcher.js +124 -175
  126. package/dist/cdp/watcher.js.map +1 -1
  127. package/dist/emulation/EmulationController.d.ts +12 -0
  128. package/dist/emulation/EmulationController.d.ts.map +1 -0
  129. package/dist/emulation/EmulationController.js +83 -0
  130. package/dist/emulation/EmulationController.js.map +1 -0
  131. package/dist/events.d.ts +86 -0
  132. package/dist/events.d.ts.map +1 -0
  133. package/dist/events.js +2 -0
  134. package/dist/events.js.map +1 -0
  135. package/dist/fileLogs/WatcherFileLogger.d.ts +5 -2
  136. package/dist/fileLogs/WatcherFileLogger.d.ts.map +1 -1
  137. package/dist/fileLogs/WatcherFileLogger.js +30 -12
  138. package/dist/fileLogs/WatcherFileLogger.js.map +1 -1
  139. package/dist/http/httpUtils.d.ts +25 -0
  140. package/dist/http/httpUtils.d.ts.map +1 -0
  141. package/dist/http/httpUtils.js +170 -0
  142. package/dist/http/httpUtils.js.map +1 -0
  143. package/dist/http/router.d.ts +5 -0
  144. package/dist/http/router.d.ts.map +1 -0
  145. package/dist/http/router.js +85 -0
  146. package/dist/http/router.js.map +1 -0
  147. package/dist/http/routes/getEmulation.d.ts +3 -0
  148. package/dist/http/routes/getEmulation.d.ts.map +1 -0
  149. package/dist/http/routes/getEmulation.js +8 -0
  150. package/dist/http/routes/getEmulation.js.map +1 -0
  151. package/dist/http/routes/getLogs.d.ts +3 -0
  152. package/dist/http/routes/getLogs.d.ts.map +1 -0
  153. package/dist/http/routes/getLogs.js +28 -0
  154. package/dist/http/routes/getLogs.js.map +1 -0
  155. package/dist/http/routes/getNet.d.ts +3 -0
  156. package/dist/http/routes/getNet.d.ts.map +1 -0
  157. package/dist/http/routes/getNet.js +17 -0
  158. package/dist/http/routes/getNet.js.map +1 -0
  159. package/dist/http/routes/getNetTail.d.ts +3 -0
  160. package/dist/http/routes/getNetTail.d.ts.map +1 -0
  161. package/dist/http/routes/getNetTail.js +18 -0
  162. package/dist/http/routes/getNetTail.js.map +1 -0
  163. package/dist/http/routes/getStatus.d.ts +3 -0
  164. package/dist/http/routes/getStatus.d.ts.map +1 -0
  165. package/dist/http/routes/getStatus.js +21 -0
  166. package/dist/http/routes/getStatus.js.map +1 -0
  167. package/dist/http/routes/getTail.d.ts +3 -0
  168. package/dist/http/routes/getTail.d.ts.map +1 -0
  169. package/dist/http/routes/getTail.js +28 -0
  170. package/dist/http/routes/getTail.js.map +1 -0
  171. package/dist/http/routes/getTargets.d.ts +3 -0
  172. package/dist/http/routes/getTargets.d.ts.map +1 -0
  173. package/dist/http/routes/getTargets.js +16 -0
  174. package/dist/http/routes/getTargets.js.map +1 -0
  175. package/dist/http/routes/getThrottle.d.ts +3 -0
  176. package/dist/http/routes/getThrottle.d.ts.map +1 -0
  177. package/dist/http/routes/getThrottle.js +8 -0
  178. package/dist/http/routes/getThrottle.js.map +1 -0
  179. package/dist/http/routes/postAttach.d.ts +3 -0
  180. package/dist/http/routes/postAttach.d.ts.map +1 -0
  181. package/dist/http/routes/postAttach.js +24 -0
  182. package/dist/http/routes/postAttach.js.map +1 -0
  183. package/dist/http/routes/postCodeEdit.d.ts +3 -0
  184. package/dist/http/routes/postCodeEdit.d.ts.map +1 -0
  185. package/dist/http/routes/postCodeEdit.js +32 -0
  186. package/dist/http/routes/postCodeEdit.js.map +1 -0
  187. package/dist/http/routes/postCodeGrep.d.ts +3 -0
  188. package/dist/http/routes/postCodeGrep.d.ts.map +1 -0
  189. package/dist/http/routes/postCodeGrep.js +26 -0
  190. package/dist/http/routes/postCodeGrep.js.map +1 -0
  191. package/dist/http/routes/postCodeList.d.ts +3 -0
  192. package/dist/http/routes/postCodeList.d.ts.map +1 -0
  193. package/dist/http/routes/postCodeList.js +20 -0
  194. package/dist/http/routes/postCodeList.js.map +1 -0
  195. package/dist/http/routes/postCodeRead.d.ts +3 -0
  196. package/dist/http/routes/postCodeRead.d.ts.map +1 -0
  197. package/dist/http/routes/postCodeRead.js +30 -0
  198. package/dist/http/routes/postCodeRead.js.map +1 -0
  199. package/dist/http/routes/postDetach.d.ts +3 -0
  200. package/dist/http/routes/postDetach.d.ts.map +1 -0
  201. package/dist/http/routes/postDetach.js +24 -0
  202. package/dist/http/routes/postDetach.js.map +1 -0
  203. package/dist/http/routes/postDomAdd.d.ts +7 -0
  204. package/dist/http/routes/postDomAdd.d.ts.map +1 -0
  205. package/dist/http/routes/postDomAdd.js +97 -0
  206. package/dist/http/routes/postDomAdd.js.map +1 -0
  207. package/dist/http/routes/postDomClick.d.ts +3 -0
  208. package/dist/http/routes/postDomClick.d.ts.map +1 -0
  209. package/dist/http/routes/postDomClick.js +85 -0
  210. package/dist/http/routes/postDomClick.js.map +1 -0
  211. package/dist/http/routes/postDomFill.d.ts +3 -0
  212. package/dist/http/routes/postDomFill.d.ts.map +1 -0
  213. package/dist/http/routes/postDomFill.js +58 -0
  214. package/dist/http/routes/postDomFill.js.map +1 -0
  215. package/dist/http/routes/postDomFocus.d.ts +3 -0
  216. package/dist/http/routes/postDomFocus.d.ts.map +1 -0
  217. package/dist/http/routes/postDomFocus.js +40 -0
  218. package/dist/http/routes/postDomFocus.js.map +1 -0
  219. package/dist/http/routes/postDomHover.d.ts +3 -0
  220. package/dist/http/routes/postDomHover.d.ts.map +1 -0
  221. package/dist/http/routes/postDomHover.js +40 -0
  222. package/dist/http/routes/postDomHover.js.map +1 -0
  223. package/dist/http/routes/postDomInfo.d.ts +3 -0
  224. package/dist/http/routes/postDomInfo.d.ts.map +1 -0
  225. package/dist/http/routes/postDomInfo.js +40 -0
  226. package/dist/http/routes/postDomInfo.js.map +1 -0
  227. package/dist/http/routes/postDomKeydown.d.ts +3 -0
  228. package/dist/http/routes/postDomKeydown.d.ts.map +1 -0
  229. package/dist/http/routes/postDomKeydown.js +36 -0
  230. package/dist/http/routes/postDomKeydown.js.map +1 -0
  231. package/dist/http/routes/postDomModify.d.ts +3 -0
  232. package/dist/http/routes/postDomModify.d.ts.map +1 -0
  233. package/dist/http/routes/postDomModify.js +45 -0
  234. package/dist/http/routes/postDomModify.js.map +1 -0
  235. package/dist/http/routes/postDomRemove.d.ts +3 -0
  236. package/dist/http/routes/postDomRemove.d.ts.map +1 -0
  237. package/dist/http/routes/postDomRemove.js +39 -0
  238. package/dist/http/routes/postDomRemove.js.map +1 -0
  239. package/dist/http/routes/postDomScroll.d.ts +3 -0
  240. package/dist/http/routes/postDomScroll.d.ts.map +1 -0
  241. package/dist/http/routes/postDomScroll.js +75 -0
  242. package/dist/http/routes/postDomScroll.js.map +1 -0
  243. package/dist/http/routes/postDomScrollTo.d.ts +3 -0
  244. package/dist/http/routes/postDomScrollTo.d.ts.map +1 -0
  245. package/dist/http/routes/postDomScrollTo.js +69 -0
  246. package/dist/http/routes/postDomScrollTo.js.map +1 -0
  247. package/dist/http/routes/postDomSetFile.d.ts +3 -0
  248. package/dist/http/routes/postDomSetFile.d.ts.map +1 -0
  249. package/dist/http/routes/postDomSetFile.js +58 -0
  250. package/dist/http/routes/postDomSetFile.js.map +1 -0
  251. package/dist/http/routes/postDomSubmit.d.ts +3 -0
  252. package/dist/http/routes/postDomSubmit.d.ts.map +1 -0
  253. package/dist/http/routes/postDomSubmit.js +49 -0
  254. package/dist/http/routes/postDomSubmit.js.map +1 -0
  255. package/dist/http/routes/postDomTree.d.ts +3 -0
  256. package/dist/http/routes/postDomTree.d.ts.map +1 -0
  257. package/dist/http/routes/postDomTree.js +41 -0
  258. package/dist/http/routes/postDomTree.js.map +1 -0
  259. package/dist/http/routes/postEmulation.d.ts +3 -0
  260. package/dist/http/routes/postEmulation.d.ts.map +1 -0
  261. package/dist/http/routes/postEmulation.js +70 -0
  262. package/dist/http/routes/postEmulation.js.map +1 -0
  263. package/dist/http/routes/postEval.d.ts +3 -0
  264. package/dist/http/routes/postEval.d.ts.map +1 -0
  265. package/dist/http/routes/postEval.js +27 -0
  266. package/dist/http/routes/postEval.js.map +1 -0
  267. package/dist/http/routes/postReload.d.ts +3 -0
  268. package/dist/http/routes/postReload.d.ts.map +1 -0
  269. package/dist/http/routes/postReload.js +20 -0
  270. package/dist/http/routes/postReload.js.map +1 -0
  271. package/dist/http/routes/postScreenshot.d.ts +3 -0
  272. package/dist/http/routes/postScreenshot.d.ts.map +1 -0
  273. package/dist/http/routes/postScreenshot.js +17 -0
  274. package/dist/http/routes/postScreenshot.js.map +1 -0
  275. package/dist/http/routes/postShutdown.d.ts +3 -0
  276. package/dist/http/routes/postShutdown.d.ts.map +1 -0
  277. package/dist/http/routes/postShutdown.js +13 -0
  278. package/dist/http/routes/postShutdown.js.map +1 -0
  279. package/dist/http/routes/postSnapshot.d.ts +3 -0
  280. package/dist/http/routes/postSnapshot.d.ts.map +1 -0
  281. package/dist/http/routes/postSnapshot.js +28 -0
  282. package/dist/http/routes/postSnapshot.js.map +1 -0
  283. package/dist/http/routes/postStorageLocal.d.ts +3 -0
  284. package/dist/http/routes/postStorageLocal.d.ts.map +1 -0
  285. package/dist/http/routes/postStorageLocal.js +31 -0
  286. package/dist/http/routes/postStorageLocal.js.map +1 -0
  287. package/dist/http/routes/postThrottle.d.ts +3 -0
  288. package/dist/http/routes/postThrottle.d.ts.map +1 -0
  289. package/dist/http/routes/postThrottle.js +38 -0
  290. package/dist/http/routes/postThrottle.js.map +1 -0
  291. package/dist/http/routes/postTraceStart.d.ts +3 -0
  292. package/dist/http/routes/postTraceStart.d.ts.map +1 -0
  293. package/dist/http/routes/postTraceStart.js +17 -0
  294. package/dist/http/routes/postTraceStart.js.map +1 -0
  295. package/dist/http/routes/postTraceStop.d.ts +3 -0
  296. package/dist/http/routes/postTraceStop.d.ts.map +1 -0
  297. package/dist/http/routes/postTraceStop.js +17 -0
  298. package/dist/http/routes/postTraceStop.js.map +1 -0
  299. package/dist/http/routes/types.d.ts +9 -0
  300. package/dist/http/routes/types.d.ts.map +1 -0
  301. package/dist/http/routes/types.js +10 -0
  302. package/dist/http/routes/types.js.map +1 -0
  303. package/dist/http/server.d.ts +42 -1
  304. package/dist/http/server.d.ts.map +1 -1
  305. package/dist/http/server.js +3 -82
  306. package/dist/http/server.js.map +1 -1
  307. package/dist/index.d.ts +117 -14
  308. package/dist/index.d.ts.map +1 -1
  309. package/dist/index.js +349 -44
  310. package/dist/index.js.map +1 -1
  311. package/dist/native-messaging/messaging.d.ts +18 -0
  312. package/dist/native-messaging/messaging.d.ts.map +1 -0
  313. package/dist/native-messaging/messaging.js +94 -0
  314. package/dist/native-messaging/messaging.js.map +1 -0
  315. package/dist/native-messaging/session-manager.d.ts +108 -0
  316. package/dist/native-messaging/session-manager.d.ts.map +1 -0
  317. package/dist/native-messaging/session-manager.js +267 -0
  318. package/dist/native-messaging/session-manager.js.map +1 -0
  319. package/dist/native-messaging/types.d.ts +112 -0
  320. package/dist/native-messaging/types.d.ts.map +1 -0
  321. package/dist/native-messaging/types.js +6 -0
  322. package/dist/native-messaging/types.js.map +1 -0
  323. package/dist/registry/registry.d.ts +9 -2
  324. package/dist/registry/registry.d.ts.map +1 -1
  325. package/dist/registry/registry.js +53 -9
  326. package/dist/registry/registry.js.map +1 -1
  327. package/dist/scripts/install-host.d.ts +10 -0
  328. package/dist/scripts/install-host.d.ts.map +1 -0
  329. package/dist/scripts/install-host.js +189 -0
  330. package/dist/scripts/install-host.js.map +1 -0
  331. package/dist/sources/cdp-source.d.ts +24 -0
  332. package/dist/sources/cdp-source.d.ts.map +1 -0
  333. package/dist/sources/cdp-source.js +49 -0
  334. package/dist/sources/cdp-source.js.map +1 -0
  335. package/dist/sources/extension-frame-state.d.ts +64 -0
  336. package/dist/sources/extension-frame-state.d.ts.map +1 -0
  337. package/dist/sources/extension-frame-state.js +117 -0
  338. package/dist/sources/extension-frame-state.js.map +1 -0
  339. package/dist/sources/extension-log-events.d.ts +15 -0
  340. package/dist/sources/extension-log-events.d.ts.map +1 -0
  341. package/dist/sources/extension-log-events.js +101 -0
  342. package/dist/sources/extension-log-events.js.map +1 -0
  343. package/dist/sources/extension-source.d.ts +15 -0
  344. package/dist/sources/extension-source.d.ts.map +1 -0
  345. package/dist/sources/extension-source.js +487 -0
  346. package/dist/sources/extension-source.js.map +1 -0
  347. package/dist/sources/types.d.ts +109 -0
  348. package/dist/sources/types.d.ts.map +1 -0
  349. package/dist/sources/types.js +7 -0
  350. package/dist/sources/types.js.map +1 -0
  351. package/dist/throttle/ThrottleController.d.ts +12 -0
  352. package/dist/throttle/ThrottleController.d.ts.map +1 -0
  353. package/dist/throttle/ThrottleController.js +67 -0
  354. package/dist/throttle/ThrottleController.js.map +1 -0
  355. package/package.json +3 -2
@@ -0,0 +1,16 @@
1
+ import type { EmulationState } from '@vforsh/argus-core';
2
+ import type { CdpSessionHandle } from './connection.js';
3
+ type Baseline = {
4
+ userAgent: string | null;
5
+ };
6
+ /**
7
+ * Apply the desired emulation state to a CDP session.
8
+ * Each aspect (viewport, touch, UA) is applied independently so partial failures don't block the rest.
9
+ */
10
+ export declare const applyEmulation: (session: CdpSessionHandle, state: EmulationState, baseline: Baseline) => Promise<void>;
11
+ /**
12
+ * Clear all emulation overrides, restoring the page to its default state.
13
+ */
14
+ export declare const clearEmulation: (session: CdpSessionHandle, baseline: Baseline) => Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=emulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emulation.d.ts","sourceRoot":"","sources":["../../src/cdp/emulation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,KAAK,QAAQ,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,OAAO,cAAc,EAAE,UAAU,QAAQ,KAAG,OAAO,CAAC,IAAI,CAwBvH,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,UAAU,QAAQ,KAAG,OAAO,CAAC,IAAI,CAOhG,CAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Apply the desired emulation state to a CDP session.
3
+ * Each aspect (viewport, touch, UA) is applied independently so partial failures don't block the rest.
4
+ */
5
+ export const applyEmulation = async (session, state, baseline) => {
6
+ // Viewport / device metrics
7
+ if (state.viewport) {
8
+ await session.sendAndWait('Emulation.setDeviceMetricsOverride', {
9
+ width: state.viewport.width,
10
+ height: state.viewport.height,
11
+ deviceScaleFactor: state.viewport.deviceScaleFactor,
12
+ mobile: state.viewport.mobile,
13
+ });
14
+ }
15
+ else {
16
+ await session.sendAndWait('Emulation.clearDeviceMetricsOverride');
17
+ }
18
+ // Touch emulation
19
+ const touchEnabled = state.touch?.enabled ?? false;
20
+ await session.sendAndWait('Emulation.setTouchEmulationEnabled', { enabled: touchEnabled });
21
+ // User-agent override
22
+ if (state.userAgent?.value != null) {
23
+ await session.sendAndWait('Emulation.setUserAgentOverride', { userAgent: state.userAgent.value });
24
+ }
25
+ else if (baseline.userAgent) {
26
+ // Restore baseline UA (no "clear UA override" primitive exists)
27
+ await session.sendAndWait('Emulation.setUserAgentOverride', { userAgent: baseline.userAgent });
28
+ }
29
+ };
30
+ /**
31
+ * Clear all emulation overrides, restoring the page to its default state.
32
+ */
33
+ export const clearEmulation = async (session, baseline) => {
34
+ await session.sendAndWait('Emulation.clearDeviceMetricsOverride');
35
+ await session.sendAndWait('Emulation.setTouchEmulationEnabled', { enabled: false });
36
+ if (baseline.userAgent) {
37
+ await session.sendAndWait('Emulation.setUserAgentOverride', { userAgent: baseline.userAgent });
38
+ }
39
+ };
40
+ //# sourceMappingURL=emulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emulation.js","sourceRoot":"","sources":["../../src/cdp/emulation.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAyB,EAAE,KAAqB,EAAE,QAAkB,EAAiB,EAAE;IAC3H,4BAA4B;IAC5B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,OAAO,CAAC,WAAW,CAAC,oCAAoC,EAAE;YAC/D,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK;YAC3B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;YAC7B,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,iBAAiB;YACnD,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;SAC7B,CAAC,CAAA;IACH,CAAC;SAAM,CAAC;QACP,MAAM,OAAO,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAA;IAClE,CAAC;IAED,kBAAkB;IAClB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAA;IAClD,MAAM,OAAO,CAAC,WAAW,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;IAE1F,sBAAsB;IACtB,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,OAAO,CAAC,WAAW,CAAC,gCAAgC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;IAClG,CAAC;SAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC/B,gEAAgE;QAChE,MAAM,OAAO,CAAC,WAAW,CAAC,gCAAgC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;IAC/F,CAAC;AACF,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAyB,EAAE,QAAkB,EAAiB,EAAE;IACpG,MAAM,OAAO,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAA;IACjE,MAAM,OAAO,CAAC,WAAW,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAEnF,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACxB,MAAM,OAAO,CAAC,WAAW,CAAC,gCAAgC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;IAC/F,CAAC;AACF,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { EvalResponse } from '@vforsh/argus-core';
2
+ import type { CdpSessionHandle } from './connection.js';
3
+ export type EvalRequestOptions = {
4
+ expression: string;
5
+ awaitPromise?: boolean;
6
+ replMode?: boolean;
7
+ returnByValue?: boolean;
8
+ timeoutMs?: number;
9
+ };
10
+ export declare const evaluateExpression: (session: CdpSessionHandle, options: EvalRequestOptions) => Promise<EvalResponse>;
11
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/cdp/eval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGvD,MAAM,MAAM,kBAAkB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAeD,eAAO,MAAM,kBAAkB,GAAU,SAAS,gBAAgB,EAAE,SAAS,kBAAkB,KAAG,OAAO,CAAC,YAAY,CAuCrH,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { serializeRemoteObject } from './remoteObject.js';
2
+ export const evaluateExpression = async (session, options) => {
3
+ const payload = await evaluateRawExpression(session, options);
4
+ if (payload.exceptionDetails) {
5
+ return {
6
+ ok: true,
7
+ result: null,
8
+ type: payload.result?.type ?? null,
9
+ exception: {
10
+ text: payload.exceptionDetails.text ?? 'Exception',
11
+ details: payload.exceptionDetails.exception ?? null,
12
+ },
13
+ };
14
+ }
15
+ let record = payload.result;
16
+ if ((options.awaitPromise ?? true) && record?.subtype === 'promise' && record.objectId) {
17
+ const awaitedPayload = await awaitPromiseResult(session, record.objectId, options.timeoutMs);
18
+ if (awaitedPayload.exceptionDetails) {
19
+ return {
20
+ ok: true,
21
+ result: null,
22
+ type: awaitedPayload.result?.type ?? null,
23
+ exception: {
24
+ text: awaitedPayload.exceptionDetails.text ?? 'Exception',
25
+ details: awaitedPayload.exceptionDetails.exception ?? null,
26
+ },
27
+ };
28
+ }
29
+ record = awaitedPayload.result;
30
+ }
31
+ const value = await materializeRemoteObject(session, record, options);
32
+ return {
33
+ ok: true,
34
+ result: value ?? null,
35
+ type: record?.type ?? null,
36
+ exception: null,
37
+ };
38
+ };
39
+ const evaluateRawExpression = async (session, options) => (await session.sendAndWait('Runtime.evaluate', {
40
+ expression: options.expression,
41
+ // REPL mode gives CLI eval console-like behavior, including native top-level await.
42
+ replMode: options.replMode ?? true,
43
+ // Promise unwrapping is handled explicitly below. Chrome drops fulfilled object values
44
+ // when `awaitPromise` and `returnByValue` are used together on `Runtime.evaluate`.
45
+ awaitPromise: false,
46
+ returnByValue: false,
47
+ }, { timeoutMs: options.timeoutMs }));
48
+ const awaitPromiseResult = async (session, promiseObjectId, timeoutMs) => (await session.sendAndWait('Runtime.awaitPromise', {
49
+ promiseObjectId,
50
+ returnByValue: false,
51
+ }, { timeoutMs }));
52
+ const materializeRemoteObject = async (session, record, options) => {
53
+ if (!record) {
54
+ return null;
55
+ }
56
+ const runtimeClient = {
57
+ sendAndWait: (method, params) => session.sendAndWait(method, params),
58
+ };
59
+ if ((options.returnByValue ?? true) && shouldMaterializeByValue(record)) {
60
+ try {
61
+ const byValuePayload = (await session.sendAndWait('Runtime.callFunctionOn', {
62
+ objectId: record.objectId,
63
+ functionDeclaration: 'function () { return this; }',
64
+ returnByValue: true,
65
+ }, { timeoutMs: options.timeoutMs }));
66
+ if (byValuePayload.result) {
67
+ return await serializeRemoteObject(byValuePayload.result, runtimeClient);
68
+ }
69
+ }
70
+ catch {
71
+ // Fall back to shallow preview serialization when CDP cannot materialize by value.
72
+ }
73
+ }
74
+ return await serializeRemoteObject(record, runtimeClient);
75
+ };
76
+ const shouldMaterializeByValue = (record) => {
77
+ return Boolean(record.objectId) && record.type === 'object' && (record.subtype == null || record.subtype === 'array');
78
+ };
79
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/cdp/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { CdpSessionHandle } from './connection.js';
2
+ type KeyDefinition = {
3
+ key: string;
4
+ code: string;
5
+ keyCode: number;
6
+ text?: string;
7
+ };
8
+ /**
9
+ * Resolve a key name to its CDP key definition.
10
+ * Lookup is case-insensitive.
11
+ */
12
+ export declare const resolveKeyDefinition: (key: string) => KeyDefinition | undefined;
13
+ /**
14
+ * Parse a comma-separated modifier string into a CDP bitmask.
15
+ * Accepts aliases: ctrl/control, meta/cmd/command.
16
+ * Returns 0 for undefined/empty input.
17
+ */
18
+ export declare const parseModifiers: (input?: string) => number;
19
+ export type DispatchKeydownOptions = {
20
+ key: string;
21
+ selector?: string;
22
+ modifiers?: number;
23
+ };
24
+ export type DispatchKeydownResult = {
25
+ key: string;
26
+ modifiers: number;
27
+ focused: boolean;
28
+ };
29
+ /**
30
+ * Dispatch a keyboard event sequence via CDP Input.dispatchKeyEvent.
31
+ *
32
+ * 1. If `selector` provided: resolve → error if 0 or >1 match → focus
33
+ * 2. Resolve key definition
34
+ * 3. Dispatch: printable → keyDown+char+keyUp; non-printable → rawKeyDown+keyUp
35
+ */
36
+ export declare const dispatchKeydown: (session: CdpSessionHandle, options: DispatchKeydownOptions) => Promise<DispatchKeydownResult>;
37
+ export {};
38
+ //# sourceMappingURL=keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAOvD,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AA2DD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,aAAa,GAAG,SAElE,CAAA;AAiBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MAoB/C,CAAA;AAMD,MAAM,MAAM,sBAAsB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,gBAAgB,EAAE,SAAS,sBAAsB,KAAG,OAAO,CAAC,qBAAqB,CAyD/H,CAAA"}
@@ -0,0 +1,148 @@
1
+ import { resolveDomSelectorMatches } from './mouse.js';
2
+ const buildKeyMap = () => {
3
+ const map = new Map();
4
+ const put = (lookup, def) => {
5
+ map.set(lookup.toLowerCase(), def);
6
+ };
7
+ // Letters a-z
8
+ for (let i = 0; i < 26; i++) {
9
+ const lower = String.fromCharCode(97 + i);
10
+ const upper = String.fromCharCode(65 + i);
11
+ const code = `Key${upper}`;
12
+ const keyCode = 65 + i;
13
+ put(lower, { key: lower, code, keyCode, text: lower });
14
+ }
15
+ // Digits 0-9
16
+ for (let i = 0; i < 10; i++) {
17
+ const digit = String(i);
18
+ const code = `Digit${digit}`;
19
+ const keyCode = 48 + i;
20
+ put(digit, { key: digit, code, keyCode, text: digit });
21
+ }
22
+ // Special keys
23
+ put('Enter', { key: 'Enter', code: 'Enter', keyCode: 13, text: '\r' });
24
+ put('Tab', { key: 'Tab', code: 'Tab', keyCode: 9 });
25
+ put('Escape', { key: 'Escape', code: 'Escape', keyCode: 27 });
26
+ put('Backspace', { key: 'Backspace', code: 'Backspace', keyCode: 8 });
27
+ put('Delete', { key: 'Delete', code: 'Delete', keyCode: 46 });
28
+ put('Space', { key: ' ', code: 'Space', keyCode: 32, text: ' ' });
29
+ put(' ', { key: ' ', code: 'Space', keyCode: 32, text: ' ' });
30
+ // Arrows
31
+ put('ArrowUp', { key: 'ArrowUp', code: 'ArrowUp', keyCode: 38 });
32
+ put('ArrowDown', { key: 'ArrowDown', code: 'ArrowDown', keyCode: 40 });
33
+ put('ArrowLeft', { key: 'ArrowLeft', code: 'ArrowLeft', keyCode: 37 });
34
+ put('ArrowRight', { key: 'ArrowRight', code: 'ArrowRight', keyCode: 39 });
35
+ // Navigation
36
+ put('Home', { key: 'Home', code: 'Home', keyCode: 36 });
37
+ put('End', { key: 'End', code: 'End', keyCode: 35 });
38
+ put('PageUp', { key: 'PageUp', code: 'PageUp', keyCode: 33 });
39
+ put('PageDown', { key: 'PageDown', code: 'PageDown', keyCode: 34 });
40
+ put('Insert', { key: 'Insert', code: 'Insert', keyCode: 45 });
41
+ // F-keys
42
+ for (let i = 1; i <= 12; i++) {
43
+ const name = `F${i}`;
44
+ put(name, { key: name, code: name, keyCode: 111 + i });
45
+ }
46
+ return map;
47
+ };
48
+ const KEY_MAP = buildKeyMap();
49
+ /**
50
+ * Resolve a key name to its CDP key definition.
51
+ * Lookup is case-insensitive.
52
+ */
53
+ export const resolveKeyDefinition = (key) => {
54
+ return KEY_MAP.get(key.toLowerCase());
55
+ };
56
+ // ─────────────────────────────────────────────────────────────────────────────
57
+ // Modifier parser
58
+ // ─────────────────────────────────────────────────────────────────────────────
59
+ /** CDP modifier bitmask values. */
60
+ const MODIFIER_BITS = {
61
+ alt: 1,
62
+ ctrl: 2,
63
+ control: 2,
64
+ meta: 4,
65
+ cmd: 4,
66
+ command: 4,
67
+ shift: 8,
68
+ };
69
+ /**
70
+ * Parse a comma-separated modifier string into a CDP bitmask.
71
+ * Accepts aliases: ctrl/control, meta/cmd/command.
72
+ * Returns 0 for undefined/empty input.
73
+ */
74
+ export const parseModifiers = (input) => {
75
+ if (!input || input.trim() === '') {
76
+ return 0;
77
+ }
78
+ let mask = 0;
79
+ const parts = input.split(',');
80
+ for (const part of parts) {
81
+ const name = part.trim().toLowerCase();
82
+ if (name === '') {
83
+ continue;
84
+ }
85
+ const bit = MODIFIER_BITS[name];
86
+ if (bit == null) {
87
+ throw new Error(`Unknown modifier: "${part.trim()}"`);
88
+ }
89
+ mask |= bit;
90
+ }
91
+ return mask;
92
+ };
93
+ /**
94
+ * Dispatch a keyboard event sequence via CDP Input.dispatchKeyEvent.
95
+ *
96
+ * 1. If `selector` provided: resolve → error if 0 or >1 match → focus
97
+ * 2. Resolve key definition
98
+ * 3. Dispatch: printable → keyDown+char+keyUp; non-printable → rawKeyDown+keyUp
99
+ */
100
+ export const dispatchKeydown = async (session, options) => {
101
+ const { key, selector, modifiers = 0 } = options;
102
+ let focused = false;
103
+ // 1. Focus selector if provided
104
+ if (selector) {
105
+ const { allNodeIds, nodeIds } = await resolveDomSelectorMatches(session, selector, false);
106
+ if (allNodeIds.length === 0) {
107
+ throw new Error(`No element found for selector: ${selector}`);
108
+ }
109
+ if (allNodeIds.length > 1) {
110
+ const error = new Error(`Selector matched ${allNodeIds.length} elements; keydown requires exactly one target`);
111
+ error.code = 'multiple_matches';
112
+ throw error;
113
+ }
114
+ const nodeId = nodeIds[0];
115
+ await session.sendAndWait('DOM.focus', { nodeId });
116
+ focused = true;
117
+ }
118
+ // 2. Resolve key definition
119
+ const def = resolveKeyDefinition(key);
120
+ if (!def) {
121
+ throw new Error(`Unknown key: "${key}"`);
122
+ }
123
+ // Apply shift to text for single-character printable keys
124
+ let text = def.text;
125
+ if (text && text.length === 1 && (modifiers & 8) !== 0) {
126
+ text = text.toUpperCase();
127
+ }
128
+ const isPrintable = text != null && text !== '\r';
129
+ // 3. Dispatch key events
130
+ const baseParams = {
131
+ code: def.code,
132
+ key: def.key,
133
+ windowsVirtualKeyCode: def.keyCode,
134
+ nativeVirtualKeyCode: def.keyCode,
135
+ modifiers,
136
+ };
137
+ if (isPrintable) {
138
+ await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyDown', text });
139
+ await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'char', text });
140
+ await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
141
+ }
142
+ else {
143
+ await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'rawKeyDown', text: def.text });
144
+ await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
145
+ }
146
+ return { key: def.key, modifiers, focused };
147
+ };
148
+ //# sourceMappingURL=keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { CdpSessionHandle } from './connection.js';
2
+ type SelectorMatchResult = {
3
+ allNodeIds: number[];
4
+ nodeIds: number[];
5
+ };
6
+ type Point = {
7
+ x: number;
8
+ y: number;
9
+ };
10
+ export declare const resolveDomSelectorMatches: (session: CdpSessionHandle, selector: string, all: boolean, text?: string) => Promise<SelectorMatchResult>;
11
+ export declare const hoverDomNodes: (session: CdpSessionHandle, nodeIds: number[]) => Promise<void>;
12
+ export declare const clickAtPoint: (session: CdpSessionHandle, x: number, y: number, button?: "left" | "middle" | "right") => Promise<void>;
13
+ export declare const resolveNodeTopLeft: (session: CdpSessionHandle, nodeId: number) => Promise<Point>;
14
+ export declare const clickDomNodes: (session: CdpSessionHandle, nodeIds: number[], button?: "left" | "middle" | "right") => Promise<void>;
15
+ export declare const focusDomNodes: (session: CdpSessionHandle, nodeIds: number[]) => Promise<void>;
16
+ export declare const scrollIntoView: (session: CdpSessionHandle, nodeId: number) => Promise<void>;
17
+ type ScrollPosition = {
18
+ scrollX: number;
19
+ scrollY: number;
20
+ };
21
+ type ScrollMode = {
22
+ to?: {
23
+ x: number;
24
+ y: number;
25
+ };
26
+ by?: {
27
+ x: number;
28
+ y: number;
29
+ };
30
+ };
31
+ /**
32
+ * Scroll matched DOM elements. If mode has to/by, scrolls within the element container.
33
+ * Otherwise scrolls each element into view.
34
+ */
35
+ export declare const scrollDomNodes: (session: CdpSessionHandle, nodeIds: number[], mode: ScrollMode) => Promise<ScrollPosition>;
36
+ /** Scroll the page viewport to an absolute or relative position. */
37
+ export declare const scrollViewport: (session: CdpSessionHandle, mode: ScrollMode) => Promise<ScrollPosition>;
38
+ /** Dispatch a mouseWheel event at the given viewport coordinates. */
39
+ export declare const emulateScroll: (session: CdpSessionHandle, x: number, y: number, delta: {
40
+ x: number;
41
+ y: number;
42
+ }) => Promise<void>;
43
+ /** Emulate touch scroll gestures on resolved DOM nodes (scrolls at each element's center). */
44
+ export declare const emulateScrollOnNodes: (session: CdpSessionHandle, nodeIds: number[], delta: {
45
+ x: number;
46
+ y: number;
47
+ }) => Promise<void>;
48
+ export {};
49
+ //# sourceMappingURL=mouse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse.d.ts","sourceRoot":"","sources":["../../src/cdp/mouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAIvD,KAAK,mBAAmB,GAAG;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,KAAK,KAAK,GAAG;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACT,CAAA;AAED,eAAO,MAAM,yBAAyB,GACrC,SAAS,gBAAgB,EACzB,UAAU,MAAM,EAChB,KAAK,OAAO,EACZ,OAAO,MAAM,KACX,OAAO,CAAC,mBAAmB,CAc7B,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAU9F,CAAA;AAKD,eAAO,MAAM,YAAY,GAAU,SAAS,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,SAAQ,MAAM,GAAG,QAAQ,GAAG,OAAgB,KAAG,OAAO,CAAC,IAAI,CAK9I,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,SAAS,gBAAgB,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAMjG,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,SAAQ,MAAM,GAAG,QAAQ,GAAG,OAAgB,KAAG,OAAO,CAAC,IAAI,CAa5I,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAS9F,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAoB5F,CAAA;AAED,KAAK,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1D,KAAK,UAAU,GAAG;IAAE,EAAE,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,EAAE,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAElF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,cAAc,CAc3H,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,MAAM,UAAU,KAAG,OAAO,CAAC,cAAc,CAUxG,CAAA;AAyED,qEAAqE;AACrE,eAAO,MAAM,aAAa,GAAU,SAAS,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAQlI,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAUtI,CAAA"}
@@ -0,0 +1,203 @@
1
+ import { filterNodesByText } from './text-filter.js';
2
+ import { getDomRootId } from './dom/selector.js';
3
+ export const resolveDomSelectorMatches = async (session, selector, all, text) => {
4
+ await session.sendAndWait('DOM.enable');
5
+ const rootId = await getDomRootId(session);
6
+ const result = (await session.sendAndWait('DOM.querySelectorAll', { nodeId: rootId, selector }));
7
+ let allNodeIds = result.nodeIds ?? [];
8
+ if (text != null) {
9
+ allNodeIds = await filterNodesByText(session, allNodeIds, text);
10
+ }
11
+ const nodeIds = all ? allNodeIds : allNodeIds.slice(0, 1);
12
+ return { allNodeIds, nodeIds };
13
+ };
14
+ export const hoverDomNodes = async (session, nodeIds) => {
15
+ if (nodeIds.length === 0) {
16
+ return;
17
+ }
18
+ for (const nodeId of nodeIds) {
19
+ await scrollIntoView(session, nodeId);
20
+ const point = await resolveNodeCenter(session, nodeId);
21
+ await dispatchMouseEvent(session, { type: 'mouseMoved', x: point.x, y: point.y });
22
+ }
23
+ };
24
+ /** CDP buttons bitmask per button name. */
25
+ const BUTTON_MASK = { left: 1, middle: 4, right: 2 };
26
+ export const clickAtPoint = async (session, x, y, button = 'left') => {
27
+ const mask = BUTTON_MASK[button] ?? 1;
28
+ await dispatchMouseEvent(session, { type: 'mouseMoved', x, y });
29
+ await dispatchMouseEvent(session, { type: 'mousePressed', x, y, button, buttons: mask, clickCount: 1 });
30
+ await dispatchMouseEvent(session, { type: 'mouseReleased', x, y, button, buttons: 0, clickCount: 1 });
31
+ };
32
+ export const resolveNodeTopLeft = async (session, nodeId) => {
33
+ const { x, y, w, h } = await resolveNodeRect(session, nodeId);
34
+ if (w <= 0 || h <= 0) {
35
+ throw createNotInteractableError('Element has zero area');
36
+ }
37
+ return { x, y };
38
+ };
39
+ export const clickDomNodes = async (session, nodeIds, button = 'left') => {
40
+ if (nodeIds.length === 0) {
41
+ return;
42
+ }
43
+ const mask = BUTTON_MASK[button] ?? 1;
44
+ for (const nodeId of nodeIds) {
45
+ await scrollIntoView(session, nodeId);
46
+ const point = await resolveNodeCenter(session, nodeId);
47
+ await dispatchMouseEvent(session, { type: 'mouseMoved', x: point.x, y: point.y });
48
+ await dispatchMouseEvent(session, { type: 'mousePressed', x: point.x, y: point.y, button, buttons: mask, clickCount: 1 });
49
+ await dispatchMouseEvent(session, { type: 'mouseReleased', x: point.x, y: point.y, button, buttons: 0, clickCount: 1 });
50
+ }
51
+ };
52
+ export const focusDomNodes = async (session, nodeIds) => {
53
+ if (nodeIds.length === 0) {
54
+ return;
55
+ }
56
+ for (const nodeId of nodeIds) {
57
+ await scrollIntoView(session, nodeId);
58
+ await session.sendAndWait('DOM.focus', { nodeId });
59
+ }
60
+ };
61
+ export const scrollIntoView = async (session, nodeId) => {
62
+ try {
63
+ await session.sendAndWait('DOM.scrollIntoViewIfNeeded', { nodeId });
64
+ return;
65
+ }
66
+ catch {
67
+ // Fallback to runtime evaluation if CDP cannot scroll directly.
68
+ }
69
+ const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
70
+ const objectId = resolved.object?.objectId;
71
+ if (!objectId) {
72
+ throw createNotInteractableError('Unable to resolve node for scrolling');
73
+ }
74
+ await session.sendAndWait('Runtime.callFunctionOn', {
75
+ objectId,
76
+ functionDeclaration: 'function() { this.scrollIntoView({ block: "center", inline: "center" }); }',
77
+ awaitPromise: false,
78
+ returnByValue: true,
79
+ });
80
+ };
81
+ /**
82
+ * Scroll matched DOM elements. If mode has to/by, scrolls within the element container.
83
+ * Otherwise scrolls each element into view.
84
+ */
85
+ export const scrollDomNodes = async (session, nodeIds, mode) => {
86
+ if (nodeIds.length === 0) {
87
+ return getViewportScroll(session);
88
+ }
89
+ for (const nodeId of nodeIds) {
90
+ if (mode.to || mode.by) {
91
+ await scrollElementContainer(session, nodeId, mode);
92
+ }
93
+ else {
94
+ await scrollIntoView(session, nodeId);
95
+ }
96
+ }
97
+ return getViewportScroll(session);
98
+ };
99
+ /** Scroll the page viewport to an absolute or relative position. */
100
+ export const scrollViewport = async (session, mode) => {
101
+ const fn = mode.to ? `window.scrollTo(${mode.to.x}, ${mode.to.y})` : `window.scrollBy(${mode.by.x}, ${mode.by.y})`;
102
+ await session.sendAndWait('Runtime.evaluate', {
103
+ expression: fn,
104
+ awaitPromise: false,
105
+ returnByValue: true,
106
+ });
107
+ return getViewportScroll(session);
108
+ };
109
+ const scrollElementContainer = async (session, nodeId, mode) => {
110
+ const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
111
+ const objectId = resolved.object?.objectId;
112
+ if (!objectId) {
113
+ throw createNotInteractableError('Unable to resolve node for scrolling');
114
+ }
115
+ const fn = mode.to ? `function() { this.scrollTo(${mode.to.x}, ${mode.to.y}); }` : `function() { this.scrollBy(${mode.by.x}, ${mode.by.y}); }`;
116
+ await session.sendAndWait('Runtime.callFunctionOn', {
117
+ objectId,
118
+ functionDeclaration: fn,
119
+ awaitPromise: false,
120
+ returnByValue: true,
121
+ });
122
+ };
123
+ const getViewportScroll = async (session) => {
124
+ const result = (await session.sendAndWait('Runtime.evaluate', {
125
+ expression: 'JSON.stringify({scrollX:window.scrollX,scrollY:window.scrollY})',
126
+ returnByValue: true,
127
+ }));
128
+ const parsed = result.result?.value ? JSON.parse(result.result.value) : { scrollX: 0, scrollY: 0 };
129
+ return { scrollX: parsed.scrollX, scrollY: parsed.scrollY };
130
+ };
131
+ const resolveNodeCenter = async (session, nodeId) => {
132
+ const { x, y, w, h } = await resolveNodeRect(session, nodeId);
133
+ if (w <= 0 || h <= 0) {
134
+ throw createNotInteractableError('Element has zero area');
135
+ }
136
+ return { x: x + w / 2, y: y + h / 2 };
137
+ };
138
+ /** Uses getBoundingClientRect() to get viewport-relative coordinates (no scroll-offset ambiguity). */
139
+ const resolveNodeRect = async (session, nodeId) => {
140
+ const boxModel = (await session.sendAndWait('DOM.getBoxModel', { nodeId }).catch(() => null));
141
+ const quad = boxModel?.model?.border ?? boxModel?.model?.content;
142
+ if (quad && quad.length >= 8) {
143
+ const xs = [quad[0], quad[2], quad[4], quad[6]];
144
+ const ys = [quad[1], quad[3], quad[5], quad[7]];
145
+ const minX = Math.min(...xs);
146
+ const maxX = Math.max(...xs);
147
+ const minY = Math.min(...ys);
148
+ const maxY = Math.max(...ys);
149
+ return { x: minX, y: minY, w: maxX - minX, h: maxY - minY };
150
+ }
151
+ const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
152
+ const objectId = resolved.object?.objectId;
153
+ if (!objectId) {
154
+ throw createNotInteractableError('Unable to resolve node');
155
+ }
156
+ const result = (await session.sendAndWait('Runtime.callFunctionOn', {
157
+ objectId,
158
+ functionDeclaration: 'function(){var r=this.getBoundingClientRect();return{x:r.x,y:r.y,w:r.width,h:r.height}}',
159
+ returnByValue: true,
160
+ }));
161
+ const rect = result.result?.value;
162
+ if (!rect || !Number.isFinite(rect.x) || !Number.isFinite(rect.y)) {
163
+ throw createNotInteractableError('Unable to compute element rect');
164
+ }
165
+ return rect;
166
+ };
167
+ /** Dispatch a mouseWheel event at the given viewport coordinates. */
168
+ export const emulateScroll = async (session, x, y, delta) => {
169
+ await session.sendAndWait('Input.dispatchMouseEvent', {
170
+ type: 'mouseWheel',
171
+ x,
172
+ y,
173
+ deltaX: delta.x,
174
+ deltaY: delta.y,
175
+ });
176
+ };
177
+ /** Emulate touch scroll gestures on resolved DOM nodes (scrolls at each element's center). */
178
+ export const emulateScrollOnNodes = async (session, nodeIds, delta) => {
179
+ if (nodeIds.length === 0) {
180
+ return;
181
+ }
182
+ for (const nodeId of nodeIds) {
183
+ await scrollIntoView(session, nodeId);
184
+ const point = await resolveNodeCenter(session, nodeId);
185
+ await emulateScroll(session, point.x, point.y, delta);
186
+ }
187
+ };
188
+ const dispatchMouseEvent = async (session, options) => {
189
+ await session.sendAndWait('Input.dispatchMouseEvent', {
190
+ type: options.type,
191
+ x: options.x,
192
+ y: options.y,
193
+ button: options.button,
194
+ buttons: options.buttons,
195
+ clickCount: options.clickCount,
196
+ });
197
+ };
198
+ const createNotInteractableError = (message) => {
199
+ const error = new Error(message);
200
+ error.code = 'not_interactable';
201
+ return error;
202
+ };
203
+ //# sourceMappingURL=mouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/cdp/mouse.ts"],"names":[],"mappings":"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"}