jumpy-lion 0.1.6-beta.9 → 1.0.0-beta.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 (450) hide show
  1. package/README.md +1 -607
  2. package/browser/fonts/macos-bundle/41-macos-remaining.conf +157 -0
  3. package/browser/fonts/macos-bundle/README.md +24 -0
  4. package/browser/fonts/macos-bundle/build-metric-fonts.py +1010 -0
  5. package/browser/fonts/macos-bundle/generated/AmericanTypewriter-Bold.ttf +0 -0
  6. package/browser/fonts/macos-bundle/generated/AmericanTypewriter-Regular.ttf +0 -0
  7. package/browser/fonts/macos-bundle/generated/AndaleMono-Bold.ttf +0 -0
  8. package/browser/fonts/macos-bundle/generated/AndaleMono-BoldItalic.ttf +0 -0
  9. package/browser/fonts/macos-bundle/generated/AndaleMono-Italic.ttf +0 -0
  10. package/browser/fonts/macos-bundle/generated/AndaleMono-Regular.ttf +0 -0
  11. package/browser/fonts/macos-bundle/generated/AppleChancery-Bold.ttf +0 -0
  12. package/browser/fonts/macos-bundle/generated/AppleChancery-BoldItalic.ttf +0 -0
  13. package/browser/fonts/macos-bundle/generated/AppleChancery-Italic.ttf +0 -0
  14. package/browser/fonts/macos-bundle/generated/AppleChancery-Regular.ttf +0 -0
  15. package/browser/fonts/macos-bundle/generated/Arial-Bold.ttf +0 -0
  16. package/browser/fonts/macos-bundle/generated/Arial-BoldItalic.ttf +0 -0
  17. package/browser/fonts/macos-bundle/generated/Arial-Italic.ttf +0 -0
  18. package/browser/fonts/macos-bundle/generated/Arial-Regular.ttf +0 -0
  19. package/browser/fonts/macos-bundle/generated/ArialBlack-Bold.ttf +0 -0
  20. package/browser/fonts/macos-bundle/generated/ArialBlack-BoldItalic.ttf +0 -0
  21. package/browser/fonts/macos-bundle/generated/ArialBlack-Italic.ttf +0 -0
  22. package/browser/fonts/macos-bundle/generated/ArialBlack-Regular.ttf +0 -0
  23. package/browser/fonts/macos-bundle/generated/ArialNarrow-Bold.ttf +0 -0
  24. package/browser/fonts/macos-bundle/generated/ArialNarrow-BoldItalic.ttf +0 -0
  25. package/browser/fonts/macos-bundle/generated/ArialNarrow-Italic.ttf +0 -0
  26. package/browser/fonts/macos-bundle/generated/ArialNarrow-Regular.ttf +0 -0
  27. package/browser/fonts/macos-bundle/generated/Avenir-Bold.ttf +0 -0
  28. package/browser/fonts/macos-bundle/generated/Avenir-BoldItalic.ttf +0 -0
  29. package/browser/fonts/macos-bundle/generated/Avenir-Italic.ttf +0 -0
  30. package/browser/fonts/macos-bundle/generated/Avenir-Regular.ttf +0 -0
  31. package/browser/fonts/macos-bundle/generated/AvenirNext-Bold.ttf +0 -0
  32. package/browser/fonts/macos-bundle/generated/AvenirNext-BoldItalic.ttf +0 -0
  33. package/browser/fonts/macos-bundle/generated/AvenirNext-Italic.ttf +0 -0
  34. package/browser/fonts/macos-bundle/generated/AvenirNext-Regular.ttf +0 -0
  35. package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-Bold.ttf +0 -0
  36. package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-BoldItalic.ttf +0 -0
  37. package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-Italic.ttf +0 -0
  38. package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-Regular.ttf +0 -0
  39. package/browser/fonts/macos-bundle/generated/Baskerville-Bold.ttf +0 -0
  40. package/browser/fonts/macos-bundle/generated/Baskerville-BoldItalic.ttf +0 -0
  41. package/browser/fonts/macos-bundle/generated/Baskerville-Italic.ttf +0 -0
  42. package/browser/fonts/macos-bundle/generated/Baskerville-Regular.ttf +0 -0
  43. package/browser/fonts/macos-bundle/generated/BigCaslon-Bold.ttf +0 -0
  44. package/browser/fonts/macos-bundle/generated/BigCaslon-BoldItalic.ttf +0 -0
  45. package/browser/fonts/macos-bundle/generated/BigCaslon-Italic.ttf +0 -0
  46. package/browser/fonts/macos-bundle/generated/BigCaslon-Regular.ttf +0 -0
  47. package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-Bold.ttf +0 -0
  48. package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-BoldItalic.ttf +0 -0
  49. package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-Italic.ttf +0 -0
  50. package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-Regular.ttf +0 -0
  51. package/browser/fonts/macos-bundle/generated/Bodoni72-Bold.ttf +0 -0
  52. package/browser/fonts/macos-bundle/generated/Bodoni72-BoldItalic.ttf +0 -0
  53. package/browser/fonts/macos-bundle/generated/Bodoni72-Italic.ttf +0 -0
  54. package/browser/fonts/macos-bundle/generated/Bodoni72-Regular.ttf +0 -0
  55. package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-Bold.ttf +0 -0
  56. package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-BoldItalic.ttf +0 -0
  57. package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-Italic.ttf +0 -0
  58. package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-Regular.ttf +0 -0
  59. package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-Bold.ttf +0 -0
  60. package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-BoldItalic.ttf +0 -0
  61. package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-Italic.ttf +0 -0
  62. package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-Regular.ttf +0 -0
  63. package/browser/fonts/macos-bundle/generated/BradleyHand-Regular.ttf +0 -0
  64. package/browser/fonts/macos-bundle/generated/BrushScriptMT-Regular.ttf +0 -0
  65. package/browser/fonts/macos-bundle/generated/Chalkboard-Bold.ttf +0 -0
  66. package/browser/fonts/macos-bundle/generated/Chalkboard-BoldItalic.ttf +0 -0
  67. package/browser/fonts/macos-bundle/generated/Chalkboard-Italic.ttf +0 -0
  68. package/browser/fonts/macos-bundle/generated/Chalkboard-Regular.ttf +0 -0
  69. package/browser/fonts/macos-bundle/generated/ChalkboardSE-Bold.ttf +0 -0
  70. package/browser/fonts/macos-bundle/generated/ChalkboardSE-BoldItalic.ttf +0 -0
  71. package/browser/fonts/macos-bundle/generated/ChalkboardSE-Italic.ttf +0 -0
  72. package/browser/fonts/macos-bundle/generated/ChalkboardSE-Regular.ttf +0 -0
  73. package/browser/fonts/macos-bundle/generated/Chalkduster-Bold.ttf +0 -0
  74. package/browser/fonts/macos-bundle/generated/Chalkduster-BoldItalic.ttf +0 -0
  75. package/browser/fonts/macos-bundle/generated/Chalkduster-Italic.ttf +0 -0
  76. package/browser/fonts/macos-bundle/generated/Chalkduster-Regular.ttf +0 -0
  77. package/browser/fonts/macos-bundle/generated/Charter-Bold.ttf +0 -0
  78. package/browser/fonts/macos-bundle/generated/Charter-BoldItalic.ttf +0 -0
  79. package/browser/fonts/macos-bundle/generated/Charter-Italic.ttf +0 -0
  80. package/browser/fonts/macos-bundle/generated/Charter-Regular.ttf +0 -0
  81. package/browser/fonts/macos-bundle/generated/Cochin-Bold.ttf +0 -0
  82. package/browser/fonts/macos-bundle/generated/Cochin-BoldItalic.ttf +0 -0
  83. package/browser/fonts/macos-bundle/generated/Cochin-Italic.ttf +0 -0
  84. package/browser/fonts/macos-bundle/generated/Cochin-Regular.ttf +0 -0
  85. package/browser/fonts/macos-bundle/generated/ComicSansMS-Bold.ttf +0 -0
  86. package/browser/fonts/macos-bundle/generated/ComicSansMS-BoldItalic.ttf +0 -0
  87. package/browser/fonts/macos-bundle/generated/ComicSansMS-Italic.ttf +0 -0
  88. package/browser/fonts/macos-bundle/generated/ComicSansMS-Regular.ttf +0 -0
  89. package/browser/fonts/macos-bundle/generated/Copperplate-Bold.ttf +0 -0
  90. package/browser/fonts/macos-bundle/generated/Copperplate-Regular.ttf +0 -0
  91. package/browser/fonts/macos-bundle/generated/Courier-Bold.ttf +0 -0
  92. package/browser/fonts/macos-bundle/generated/Courier-BoldItalic.ttf +0 -0
  93. package/browser/fonts/macos-bundle/generated/Courier-Italic.ttf +0 -0
  94. package/browser/fonts/macos-bundle/generated/Courier-Regular.ttf +0 -0
  95. package/browser/fonts/macos-bundle/generated/CourierNew-Regular.ttf +0 -0
  96. package/browser/fonts/macos-bundle/generated/Didot-Bold.ttf +0 -0
  97. package/browser/fonts/macos-bundle/generated/Didot-BoldItalic.ttf +0 -0
  98. package/browser/fonts/macos-bundle/generated/Didot-Italic.ttf +0 -0
  99. package/browser/fonts/macos-bundle/generated/Didot-Regular.ttf +0 -0
  100. package/browser/fonts/macos-bundle/generated/Futura-Bold.ttf +0 -0
  101. package/browser/fonts/macos-bundle/generated/Futura-BoldItalic.ttf +0 -0
  102. package/browser/fonts/macos-bundle/generated/Futura-Italic.ttf +0 -0
  103. package/browser/fonts/macos-bundle/generated/Futura-Regular.ttf +0 -0
  104. package/browser/fonts/macos-bundle/generated/Geneva-Regular.ttf +0 -0
  105. package/browser/fonts/macos-bundle/generated/Georgia-Bold.ttf +0 -0
  106. package/browser/fonts/macos-bundle/generated/Georgia-BoldItalic.ttf +0 -0
  107. package/browser/fonts/macos-bundle/generated/Georgia-Italic.ttf +0 -0
  108. package/browser/fonts/macos-bundle/generated/Georgia-Regular.ttf +0 -0
  109. package/browser/fonts/macos-bundle/generated/GillSans-Bold.ttf +0 -0
  110. package/browser/fonts/macos-bundle/generated/GillSans-BoldItalic.ttf +0 -0
  111. package/browser/fonts/macos-bundle/generated/GillSans-Italic.ttf +0 -0
  112. package/browser/fonts/macos-bundle/generated/GillSans-Regular.ttf +0 -0
  113. package/browser/fonts/macos-bundle/generated/Helvetica-Bold.ttf +0 -0
  114. package/browser/fonts/macos-bundle/generated/Helvetica-BoldItalic.ttf +0 -0
  115. package/browser/fonts/macos-bundle/generated/Helvetica-Italic.ttf +0 -0
  116. package/browser/fonts/macos-bundle/generated/Helvetica-Regular.ttf +0 -0
  117. package/browser/fonts/macos-bundle/generated/HelveticaNeue-Bold.ttf +0 -0
  118. package/browser/fonts/macos-bundle/generated/HelveticaNeue-BoldItalic.ttf +0 -0
  119. package/browser/fonts/macos-bundle/generated/HelveticaNeue-Italic.ttf +0 -0
  120. package/browser/fonts/macos-bundle/generated/HelveticaNeue-Regular.ttf +0 -0
  121. package/browser/fonts/macos-bundle/generated/Herculanum-Bold.ttf +0 -0
  122. package/browser/fonts/macos-bundle/generated/Herculanum-BoldItalic.ttf +0 -0
  123. package/browser/fonts/macos-bundle/generated/Herculanum-Italic.ttf +0 -0
  124. package/browser/fonts/macos-bundle/generated/Herculanum-Regular.ttf +0 -0
  125. package/browser/fonts/macos-bundle/generated/HoeflerText-Bold.ttf +0 -0
  126. package/browser/fonts/macos-bundle/generated/HoeflerText-BoldItalic.ttf +0 -0
  127. package/browser/fonts/macos-bundle/generated/HoeflerText-Italic.ttf +0 -0
  128. package/browser/fonts/macos-bundle/generated/HoeflerText-Regular.ttf +0 -0
  129. package/browser/fonts/macos-bundle/generated/Impact-Bold.ttf +0 -0
  130. package/browser/fonts/macos-bundle/generated/Impact-BoldItalic.ttf +0 -0
  131. package/browser/fonts/macos-bundle/generated/Impact-Italic.ttf +0 -0
  132. package/browser/fonts/macos-bundle/generated/Impact-Regular.ttf +0 -0
  133. package/browser/fonts/macos-bundle/generated/LucidaGrande-Bold.ttf +0 -0
  134. package/browser/fonts/macos-bundle/generated/LucidaGrande-Regular.ttf +0 -0
  135. package/browser/fonts/macos-bundle/generated/MarkerFelt-Bold.ttf +0 -0
  136. package/browser/fonts/macos-bundle/generated/MarkerFelt-BoldItalic.ttf +0 -0
  137. package/browser/fonts/macos-bundle/generated/MarkerFelt-Italic.ttf +0 -0
  138. package/browser/fonts/macos-bundle/generated/MarkerFelt-Regular.ttf +0 -0
  139. package/browser/fonts/macos-bundle/generated/Menlo-Regular.ttf +0 -0
  140. package/browser/fonts/macos-bundle/generated/Monaco-Bold.ttf +0 -0
  141. package/browser/fonts/macos-bundle/generated/Monaco-BoldItalic.ttf +0 -0
  142. package/browser/fonts/macos-bundle/generated/Monaco-Italic.ttf +0 -0
  143. package/browser/fonts/macos-bundle/generated/Monaco-Regular.ttf +0 -0
  144. package/browser/fonts/macos-bundle/generated/Noteworthy-Bold.ttf +0 -0
  145. package/browser/fonts/macos-bundle/generated/Noteworthy-Regular.ttf +0 -0
  146. package/browser/fonts/macos-bundle/generated/Optima-Bold.ttf +0 -0
  147. package/browser/fonts/macos-bundle/generated/Optima-BoldItalic.ttf +0 -0
  148. package/browser/fonts/macos-bundle/generated/Optima-Italic.ttf +0 -0
  149. package/browser/fonts/macos-bundle/generated/Optima-Regular.ttf +0 -0
  150. package/browser/fonts/macos-bundle/generated/Palatino-Bold.ttf +0 -0
  151. package/browser/fonts/macos-bundle/generated/Palatino-BoldItalic.ttf +0 -0
  152. package/browser/fonts/macos-bundle/generated/Palatino-Italic.ttf +0 -0
  153. package/browser/fonts/macos-bundle/generated/Palatino-Regular.ttf +0 -0
  154. package/browser/fonts/macos-bundle/generated/Papyrus-Bold.ttf +0 -0
  155. package/browser/fonts/macos-bundle/generated/Papyrus-BoldItalic.ttf +0 -0
  156. package/browser/fonts/macos-bundle/generated/Papyrus-Italic.ttf +0 -0
  157. package/browser/fonts/macos-bundle/generated/Papyrus-Regular.ttf +0 -0
  158. package/browser/fonts/macos-bundle/generated/PartyLET-Bold.ttf +0 -0
  159. package/browser/fonts/macos-bundle/generated/PartyLET-BoldItalic.ttf +0 -0
  160. package/browser/fonts/macos-bundle/generated/PartyLET-Italic.ttf +0 -0
  161. package/browser/fonts/macos-bundle/generated/PartyLET-Regular.ttf +0 -0
  162. package/browser/fonts/macos-bundle/generated/Phosphate-Regular.ttf +0 -0
  163. package/browser/fonts/macos-bundle/generated/README.md +132 -0
  164. package/browser/fonts/macos-bundle/generated/Rockwell-Bold.ttf +0 -0
  165. package/browser/fonts/macos-bundle/generated/Rockwell-BoldItalic.ttf +0 -0
  166. package/browser/fonts/macos-bundle/generated/Rockwell-Italic.ttf +0 -0
  167. package/browser/fonts/macos-bundle/generated/Rockwell-Regular.ttf +0 -0
  168. package/browser/fonts/macos-bundle/generated/SavoyeLET-Bold.ttf +0 -0
  169. package/browser/fonts/macos-bundle/generated/SavoyeLET-BoldItalic.ttf +0 -0
  170. package/browser/fonts/macos-bundle/generated/SavoyeLET-Italic.ttf +0 -0
  171. package/browser/fonts/macos-bundle/generated/SavoyeLET-Regular.ttf +0 -0
  172. package/browser/fonts/macos-bundle/generated/Seravek-Bold.ttf +0 -0
  173. package/browser/fonts/macos-bundle/generated/Seravek-BoldItalic.ttf +0 -0
  174. package/browser/fonts/macos-bundle/generated/Seravek-Italic.ttf +0 -0
  175. package/browser/fonts/macos-bundle/generated/Seravek-Regular.ttf +0 -0
  176. package/browser/fonts/macos-bundle/generated/SignPainter-Bold.ttf +0 -0
  177. package/browser/fonts/macos-bundle/generated/SignPainter-Regular.ttf +0 -0
  178. package/browser/fonts/macos-bundle/generated/Skia-Bold.ttf +0 -0
  179. package/browser/fonts/macos-bundle/generated/Skia-BoldItalic.ttf +0 -0
  180. package/browser/fonts/macos-bundle/generated/Skia-Italic.ttf +0 -0
  181. package/browser/fonts/macos-bundle/generated/Skia-Regular.ttf +0 -0
  182. package/browser/fonts/macos-bundle/generated/SnellRoundhand-Bold.ttf +0 -0
  183. package/browser/fonts/macos-bundle/generated/SnellRoundhand-Regular.ttf +0 -0
  184. package/browser/fonts/macos-bundle/generated/Tahoma-Bold.ttf +0 -0
  185. package/browser/fonts/macos-bundle/generated/Tahoma-Regular.ttf +0 -0
  186. package/browser/fonts/macos-bundle/generated/Times-Bold.ttf +0 -0
  187. package/browser/fonts/macos-bundle/generated/Times-BoldItalic.ttf +0 -0
  188. package/browser/fonts/macos-bundle/generated/Times-Italic.ttf +0 -0
  189. package/browser/fonts/macos-bundle/generated/Times-Regular.ttf +0 -0
  190. package/browser/fonts/macos-bundle/generated/TimesNewRoman-Bold.ttf +0 -0
  191. package/browser/fonts/macos-bundle/generated/TimesNewRoman-BoldItalic.ttf +0 -0
  192. package/browser/fonts/macos-bundle/generated/TimesNewRoman-Italic.ttf +0 -0
  193. package/browser/fonts/macos-bundle/generated/TimesNewRoman-Regular.ttf +0 -0
  194. package/browser/fonts/macos-bundle/generated/Trattatello-Regular.ttf +0 -0
  195. package/browser/fonts/macos-bundle/generated/TrebuchetMS-Bold.ttf +0 -0
  196. package/browser/fonts/macos-bundle/generated/TrebuchetMS-BoldItalic.ttf +0 -0
  197. package/browser/fonts/macos-bundle/generated/TrebuchetMS-Italic.ttf +0 -0
  198. package/browser/fonts/macos-bundle/generated/TrebuchetMS-Regular.ttf +0 -0
  199. package/browser/fonts/macos-bundle/generated/Verdana-Bold.ttf +0 -0
  200. package/browser/fonts/macos-bundle/generated/Verdana-BoldItalic.ttf +0 -0
  201. package/browser/fonts/macos-bundle/generated/Verdana-Italic.ttf +0 -0
  202. package/browser/fonts/macos-bundle/generated/Verdana-Regular.ttf +0 -0
  203. package/browser/fonts/macos-bundle/generated/Webdings-Bold.ttf +0 -0
  204. package/browser/fonts/macos-bundle/generated/Webdings-BoldItalic.ttf +0 -0
  205. package/browser/fonts/macos-bundle/generated/Webdings-Italic.ttf +0 -0
  206. package/browser/fonts/macos-bundle/generated/Webdings-Regular.ttf +0 -0
  207. package/browser/fonts/macos-bundle/generated/Zapfino-Bold.ttf +0 -0
  208. package/browser/fonts/macos-bundle/generated/Zapfino-BoldItalic.ttf +0 -0
  209. package/browser/fonts/macos-bundle/generated/Zapfino-Italic.ttf +0 -0
  210. package/browser/fonts/macos-bundle/generated/Zapfino-Regular.ttf +0 -0
  211. package/browser/fonts/macos-bundle/generated/manifest.json +2928 -0
  212. package/browser/fonts/macos-bundle/generated/systemui-Bold.ttf +0 -0
  213. package/browser/fonts/macos-bundle/generated/systemui-BoldItalic.ttf +0 -0
  214. package/browser/fonts/macos-bundle/generated/systemui-Italic.ttf +0 -0
  215. package/browser/fonts/macos-bundle/generated/systemui-Regular.ttf +0 -0
  216. package/browser/fonts/macos-bundle/install.sh +136 -0
  217. package/browser/fonts/macos-bundle/vendor/README.md +30 -0
  218. package/browser/fonts/macos-bundle/vendor/anton/Anton-Regular.ttf +0 -0
  219. package/browser/fonts/macos-bundle/vendor/anton/OFL.txt +93 -0
  220. package/browser/fonts/macos-bundle/vendor/gelasio/Gelasio-Italic-VariableFont_wght.ttf +0 -0
  221. package/browser/fonts/macos-bundle/vendor/gelasio/Gelasio-VariableFont_wght.ttf +0 -0
  222. package/browser/fonts/macos-bundle/vendor/gelasio/OFL.txt +93 -0
  223. package/browser/fonts/macos-bundle/verify-metric-fonts.py +171 -0
  224. package/dist/browser-controller.d.ts +47 -4
  225. package/dist/browser-controller.d.ts.map +1 -1
  226. package/dist/browser-controller.js +219 -278
  227. package/dist/browser-controller.js.map +1 -1
  228. package/dist/browser-plugin.d.ts +82 -110
  229. package/dist/browser-plugin.d.ts.map +1 -1
  230. package/dist/browser-plugin.js +405 -379
  231. package/dist/browser-plugin.js.map +1 -1
  232. package/dist/browser-process/align-fingerprint-config.d.ts +36 -0
  233. package/dist/browser-process/align-fingerprint-config.d.ts.map +1 -0
  234. package/dist/browser-process/align-fingerprint-config.js +74 -0
  235. package/dist/browser-process/align-fingerprint-config.js.map +1 -0
  236. package/dist/browser-process/anti-detect-browser.d.ts +2 -2
  237. package/dist/browser-process/anti-detect-browser.js +7 -7
  238. package/dist/browser-process/anti-detect-config.d.ts +146 -2
  239. package/dist/browser-process/anti-detect-config.d.ts.map +1 -1
  240. package/dist/browser-process/anti-detect-config.js +432 -127
  241. package/dist/browser-process/anti-detect-config.js.map +1 -1
  242. package/dist/browser-process/browser.d.ts +25 -92
  243. package/dist/browser-process/browser.d.ts.map +1 -1
  244. package/dist/browser-process/browser.js +467 -79
  245. package/dist/browser-process/browser.js.map +1 -1
  246. package/dist/browser-process/fingerprint-config.d.ts +146 -0
  247. package/dist/browser-process/fingerprint-config.d.ts.map +1 -0
  248. package/dist/browser-process/fingerprint-config.js +351 -0
  249. package/dist/browser-process/fingerprint-config.js.map +1 -0
  250. package/dist/browser-process/get-chrome-executable.d.ts +6 -0
  251. package/dist/browser-process/get-chrome-executable.d.ts.map +1 -1
  252. package/dist/browser-process/get-chrome-executable.js +79 -4
  253. package/dist/browser-process/get-chrome-executable.js.map +1 -1
  254. package/dist/browser-process/gpu-family-profiles.d.ts +58 -0
  255. package/dist/browser-process/gpu-family-profiles.d.ts.map +1 -0
  256. package/dist/browser-process/gpu-family-profiles.js +480 -0
  257. package/dist/browser-process/gpu-family-profiles.js.map +1 -0
  258. package/dist/browser-process/launch-options.d.ts +301 -0
  259. package/dist/browser-process/launch-options.d.ts.map +1 -0
  260. package/dist/browser-process/launch-options.js +2 -0
  261. package/dist/browser-process/launch-options.js.map +1 -0
  262. package/dist/browser-process/port-allocator.d.ts +64 -0
  263. package/dist/browser-process/port-allocator.d.ts.map +1 -0
  264. package/dist/browser-process/port-allocator.js +198 -0
  265. package/dist/browser-process/port-allocator.js.map +1 -0
  266. package/dist/browser-process/process.d.ts +85 -0
  267. package/dist/browser-process/process.d.ts.map +1 -1
  268. package/dist/browser-process/process.js +235 -19
  269. package/dist/browser-process/process.js.map +1 -1
  270. package/dist/browser-process/signal-cleanup.d.ts +40 -0
  271. package/dist/browser-process/signal-cleanup.d.ts.map +1 -0
  272. package/dist/browser-process/signal-cleanup.js +105 -0
  273. package/dist/browser-process/signal-cleanup.js.map +1 -0
  274. package/dist/browser-process/widevine-cdm.d.ts +144 -0
  275. package/dist/browser-process/widevine-cdm.d.ts.map +1 -0
  276. package/dist/browser-process/widevine-cdm.js +298 -0
  277. package/dist/browser-process/widevine-cdm.js.map +1 -0
  278. package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -1
  279. package/dist/browser-profiles/chrome/populate-profile.js +21 -22
  280. package/dist/browser-profiles/chrome/populate-profile.js.map +1 -1
  281. package/dist/connection/cdp-reconnection.d.ts +50 -0
  282. package/dist/connection/cdp-reconnection.d.ts.map +1 -0
  283. package/dist/connection/cdp-reconnection.js +75 -0
  284. package/dist/connection/cdp-reconnection.js.map +1 -0
  285. package/dist/connection/page-session.d.ts +114 -0
  286. package/dist/connection/page-session.d.ts.map +1 -0
  287. package/dist/connection/page-session.js +237 -0
  288. package/dist/connection/page-session.js.map +1 -0
  289. package/dist/connection/session-client.d.ts +34 -0
  290. package/dist/connection/session-client.d.ts.map +1 -0
  291. package/dist/connection/session-client.js +129 -0
  292. package/dist/connection/session-client.js.map +1 -0
  293. package/dist/crawler.d.ts +9 -88
  294. package/dist/crawler.d.ts.map +1 -1
  295. package/dist/crawler.js +157 -8
  296. package/dist/crawler.js.map +1 -1
  297. package/dist/fingerprinting/fingerprint-injector.d.ts +24 -114
  298. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  299. package/dist/fingerprinting/fingerprint-injector.js +305 -611
  300. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  301. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +1 -1
  302. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
  303. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +16 -14
  304. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
  305. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +6 -2
  306. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  307. package/dist/fingerprinting/fingerprint-overrides/index.js +6 -2
  308. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  309. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +1 -1
  310. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +4 -4
  311. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -1
  312. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +4 -4
  313. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts +18 -0
  314. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts.map +1 -0
  315. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js +136 -0
  316. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js.map +1 -0
  317. package/dist/fingerprinting/fingerprint-overrides/override.d.ts +151 -0
  318. package/dist/fingerprinting/fingerprint-overrides/override.d.ts.map +1 -0
  319. package/dist/fingerprinting/fingerprint-overrides/override.js +14 -0
  320. package/dist/fingerprinting/fingerprint-overrides/override.js.map +1 -0
  321. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
  322. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +46 -15
  323. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
  324. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts +43 -0
  325. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts.map +1 -0
  326. package/dist/fingerprinting/fingerprint-overrides/registry.js +342 -0
  327. package/dist/fingerprinting/fingerprint-overrides/registry.js.map +1 -0
  328. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts +16 -0
  329. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts.map +1 -0
  330. package/dist/fingerprinting/fingerprint-overrides/screen-override.js +175 -0
  331. package/dist/fingerprinting/fingerprint-overrides/screen-override.js.map +1 -0
  332. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +1 -1
  333. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +4 -4
  334. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -1
  335. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  336. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +75 -9
  337. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  338. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +1 -1
  339. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
  340. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +34 -20
  341. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
  342. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  343. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +28 -9
  344. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  345. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +1 -1
  346. package/dist/fingerprinting/hardware-realism.d.ts +74 -0
  347. package/dist/fingerprinting/hardware-realism.d.ts.map +1 -0
  348. package/dist/fingerprinting/hardware-realism.js +155 -0
  349. package/dist/fingerprinting/hardware-realism.js.map +1 -0
  350. package/dist/fingerprinting/injection-planner.d.ts +133 -0
  351. package/dist/fingerprinting/injection-planner.d.ts.map +1 -0
  352. package/dist/fingerprinting/injection-planner.js +497 -0
  353. package/dist/fingerprinting/injection-planner.js.map +1 -0
  354. package/dist/fingerprinting/locale-resolver.d.ts +8 -1
  355. package/dist/fingerprinting/locale-resolver.d.ts.map +1 -1
  356. package/dist/fingerprinting/locale-resolver.js +26 -3
  357. package/dist/fingerprinting/locale-resolver.js.map +1 -1
  358. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts +4 -4
  359. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts.map +1 -1
  360. package/dist/fingerprinting/non-apify-fingerprint-generator.js +35 -69
  361. package/dist/fingerprinting/non-apify-fingerprint-generator.js.map +1 -1
  362. package/dist/fingerprinting/non-apify-profiles.json +10515 -8494
  363. package/dist/fingerprinting/os-consistency.d.ts +28 -0
  364. package/dist/fingerprinting/os-consistency.d.ts.map +1 -0
  365. package/dist/fingerprinting/os-consistency.js +45 -0
  366. package/dist/fingerprinting/os-consistency.js.map +1 -0
  367. package/dist/fingerprinting/profile-quality.d.ts +25 -0
  368. package/dist/fingerprinting/profile-quality.d.ts.map +1 -0
  369. package/dist/fingerprinting/profile-quality.js +310 -0
  370. package/dist/fingerprinting/profile-quality.js.map +1 -0
  371. package/dist/fingerprinting/profile-selector.d.ts +102 -0
  372. package/dist/fingerprinting/profile-selector.d.ts.map +1 -0
  373. package/dist/fingerprinting/profile-selector.js +168 -0
  374. package/dist/fingerprinting/profile-selector.js.map +1 -0
  375. package/dist/fingerprinting/ua-alignment.d.ts +83 -0
  376. package/dist/fingerprinting/ua-alignment.d.ts.map +1 -0
  377. package/dist/fingerprinting/ua-alignment.js +197 -0
  378. package/dist/fingerprinting/ua-alignment.js.map +1 -0
  379. package/dist/fingerprinting/ua-ch-brands.d.ts +88 -0
  380. package/dist/fingerprinting/ua-ch-brands.d.ts.map +1 -0
  381. package/dist/fingerprinting/ua-ch-brands.js +174 -0
  382. package/dist/fingerprinting/ua-ch-brands.js.map +1 -0
  383. package/dist/index.d.ts +5 -0
  384. package/dist/index.d.ts.map +1 -1
  385. package/dist/index.js +6 -0
  386. package/dist/index.js.map +1 -1
  387. package/dist/input/dropdown-selector.d.ts +90 -0
  388. package/dist/input/dropdown-selector.d.ts.map +1 -0
  389. package/dist/input/dropdown-selector.js +394 -0
  390. package/dist/input/dropdown-selector.js.map +1 -0
  391. package/dist/input/element-target.d.ts +152 -0
  392. package/dist/input/element-target.d.ts.map +1 -0
  393. package/dist/input/element-target.js +461 -0
  394. package/dist/input/element-target.js.map +1 -0
  395. package/dist/input/input-emulator.d.ts +85 -0
  396. package/dist/input/input-emulator.d.ts.map +1 -0
  397. package/dist/input/input-emulator.js +325 -0
  398. package/dist/input/input-emulator.js.map +1 -0
  399. package/dist/input/input-transport.d.ts +60 -0
  400. package/dist/input/input-transport.d.ts.map +1 -0
  401. package/dist/input/input-transport.js +28 -0
  402. package/dist/input/input-transport.js.map +1 -0
  403. package/dist/input/recording-transport.d.ts +32 -0
  404. package/dist/input/recording-transport.d.ts.map +1 -0
  405. package/dist/input/recording-transport.js +43 -0
  406. package/dist/input/recording-transport.js.map +1 -0
  407. package/dist/keyboard-layout.d.ts +2 -2
  408. package/dist/keyboard-layout.js +2 -2
  409. package/dist/navigation/page-navigation.d.ts +67 -0
  410. package/dist/navigation/page-navigation.d.ts.map +1 -0
  411. package/dist/navigation/page-navigation.js +122 -0
  412. package/dist/navigation/page-navigation.js.map +1 -0
  413. package/dist/network/network-watch.d.ts +110 -0
  414. package/dist/network/network-watch.d.ts.map +1 -0
  415. package/dist/network/network-watch.js +223 -0
  416. package/dist/network/network-watch.js.map +1 -0
  417. package/dist/page.d.ts +123 -104
  418. package/dist/page.d.ts.map +1 -1
  419. package/dist/page.js +348 -1129
  420. package/dist/page.js.map +1 -1
  421. package/dist/session/inject-hook.d.ts +24 -0
  422. package/dist/session/inject-hook.d.ts.map +1 -0
  423. package/dist/session/inject-hook.js +80 -0
  424. package/dist/session/inject-hook.js.map +1 -0
  425. package/dist/session/save.d.ts +21 -0
  426. package/dist/session/save.d.ts.map +1 -0
  427. package/dist/session/save.js +163 -0
  428. package/dist/session/save.js.map +1 -0
  429. package/dist/session/tar-data-dir.d.ts +18 -0
  430. package/dist/session/tar-data-dir.d.ts.map +1 -0
  431. package/dist/session/tar-data-dir.js +105 -0
  432. package/dist/session/tar-data-dir.js.map +1 -0
  433. package/dist/session/types.d.ts +80 -0
  434. package/dist/session/types.d.ts.map +1 -0
  435. package/dist/session/types.js +29 -0
  436. package/dist/session/types.js.map +1 -0
  437. package/dist/session-profile.d.ts +102 -0
  438. package/dist/session-profile.d.ts.map +1 -0
  439. package/dist/session-profile.js +163 -0
  440. package/dist/session-profile.js.map +1 -0
  441. package/dist/tsconfig.build.tsbuildinfo +1 -1
  442. package/package.json +15 -6
  443. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +0 -87
  444. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +0 -1
  445. package/dist/fingerprinting/custom-fingerprint-injector.js +0 -342
  446. package/dist/fingerprinting/custom-fingerprint-injector.js.map +0 -1
  447. package/dist/launcher-wrap.d.ts +0 -10
  448. package/dist/launcher-wrap.d.ts.map +0 -1
  449. package/dist/launcher-wrap.js +0 -11
  450. package/dist/launcher-wrap.js.map +0 -1
@@ -0,0 +1,461 @@
1
+ /**
2
+ * ElementTarget - the deep module that turns a CSS selector into a stable,
3
+ * in-viewport coordinate target (or a typed failure: not found, invisible,
4
+ * unclickable, no box model, out of viewport).
5
+ *
6
+ * Sits beside InputEmulator: ElementTarget decides WHERE and WHEN to dispatch
7
+ * (geometry, visibility, scroll, position stabilization); InputEmulator
8
+ * decides HOW (paths, cadence, transport events). It talks to the page only
9
+ * through the narrow ElementTargetPort, so the whole acquire-protocol is
10
+ * unit-testable with a scripted port - same pattern as InputTransport's
11
+ * recording adapter.
12
+ */
13
+ export const HUMAN_DELAY_MS = 200; // ms delay for human-like interactions
14
+ export const POSITION_STABILITY_TIMEOUT_MS = 2000; // Timeout for position stabilization
15
+ export const POSITION_CHECK_INTERVAL_MS = 100; // Interval for position checks
16
+ export const POSITION_STABILITY_THRESHOLD = 3; // Number of consecutive stable checks required
17
+ export const POSITION_TOLERANCE_PX = 1; // Maximum pixel difference to consider "stable"
18
+ export const VIEWPORT_TOLERANCE_PX = 50; // Tolerance for viewport positioning
19
+ /**
20
+ * Pick a click target inside an element's content box. Real users do NOT
21
+ * click the exact mathematical center - eye-tracking studies cluster
22
+ * clicks in the 30-70% range of each axis. Behavioral ML on click landing
23
+ * distributions (Cloudflare Turnstile 2025+, HUMAN Bot Defender) flags
24
+ * sessions whose clicks all hit pixel-perfect centers.
25
+ *
26
+ * Takes the axis-aligned {@link ContentBox} directly. The previous 8-element
27
+ * positional quad [x0,y0,...x3,y3] was synthesized from `getBoundingClientRect`
28
+ * (already axis-aligned) only to be reduced back via min/max over corners - a
29
+ * no-op for an axis-aligned box, so the box is passed straight through now.
30
+ */
31
+ export function humanizedClickTarget(box) {
32
+ const xFrac = 0.30 + Math.random() * 0.40; // [0.30, 0.70]
33
+ const yFrac = 0.30 + Math.random() * 0.40;
34
+ return {
35
+ x: box.x + box.width * xFrac,
36
+ y: box.y + box.height * yFrac,
37
+ };
38
+ }
39
+ /**
40
+ * The single in-page source of truth for existence + visibility + clickability.
41
+ * Resolves the selector ONCE and returns all three plus the (pre-scroll) box in
42
+ * one evaluate round-trip.
43
+ *
44
+ * Hoisted to module scope with NO external references so `acquire`, `isVisible`,
45
+ * and `isClickable` share ONE implementation instead of maintaining three
46
+ * byte-equivalent copies. It is shipped to the page via Function.toString()
47
+ * (see CdpPage.evaluate), so it must stay self-contained - it may reference only
48
+ * page globals (document/window), never module-scope helpers.
49
+ */
50
+ function probeElement(sel) {
51
+ // ACQUIRE_COMBINED_PROBE - unique marker for scripted-port dispatch.
52
+ const element = document.querySelector(sel);
53
+ if (!element) {
54
+ return {
55
+ found: false,
56
+ isVisible: false,
57
+ isClickable: false,
58
+ boundingBox: { x: 0, y: 0, width: 0, height: 0 },
59
+ };
60
+ }
61
+ const rect = element.getBoundingClientRect();
62
+ const style = window.getComputedStyle(element);
63
+ // --- Visibility ---
64
+ let isVisible;
65
+ if (style.display === 'none' || style.visibility === 'hidden') {
66
+ isVisible = false;
67
+ }
68
+ else if (rect.width === 0 || rect.height === 0) {
69
+ isVisible = false;
70
+ }
71
+ else if (parseFloat(style.opacity) === 0) {
72
+ isVisible = false;
73
+ }
74
+ else {
75
+ isVisible = true;
76
+ // Walk up the ancestor chain - clipping by a grandparent+ (cards,
77
+ // modals, scroll containers) is just as real as clipping by the
78
+ // immediate parent.
79
+ let ancestor = element.parentElement;
80
+ while (ancestor && ancestor !== document.body) {
81
+ const ancestorStyle = window.getComputedStyle(ancestor);
82
+ const clips = ancestorStyle.overflow === 'hidden' ||
83
+ ancestorStyle.overflowX === 'hidden' ||
84
+ ancestorStyle.overflowY === 'hidden';
85
+ if (clips) {
86
+ const ancestorRect = ancestor.getBoundingClientRect();
87
+ if (rect.left >= ancestorRect.right ||
88
+ rect.right <= ancestorRect.left ||
89
+ rect.top >= ancestorRect.bottom ||
90
+ rect.bottom <= ancestorRect.top) {
91
+ isVisible = false;
92
+ break;
93
+ }
94
+ }
95
+ ancestor = ancestor.parentElement;
96
+ }
97
+ }
98
+ // --- Clickability ---
99
+ // readonly is intentionally NOT a blocker - only `disabled` blocks
100
+ // interaction; readonly inputs/textareas are still clickable.
101
+ let isClickable;
102
+ if (element.hasAttribute('disabled') || element.classList.contains('disabled')) {
103
+ isClickable = false;
104
+ }
105
+ else if (style.pointerEvents === 'none') {
106
+ isClickable = false;
107
+ }
108
+ else if (rect.width === 0 || rect.height === 0) {
109
+ isClickable = false;
110
+ }
111
+ else if (parseFloat(style.opacity) === 0) {
112
+ isClickable = false;
113
+ }
114
+ else {
115
+ isClickable = true;
116
+ }
117
+ return {
118
+ found: true,
119
+ isVisible,
120
+ isClickable,
121
+ boundingBox: {
122
+ x: rect.left,
123
+ y: rect.top,
124
+ width: rect.width,
125
+ height: rect.height,
126
+ },
127
+ };
128
+ }
129
+ export class ElementTarget {
130
+ constructor(port) {
131
+ Object.defineProperty(this, "port", {
132
+ enumerable: true,
133
+ configurable: true,
134
+ writable: true,
135
+ value: port
136
+ });
137
+ }
138
+ /**
139
+ * Gets detailed information about an element, or null when it is absent.
140
+ *
141
+ * Delegates to the shared {@link probeElement} like `isVisible`/`isClickable`
142
+ * do. It used to inline its own copy of the checks, which had already
143
+ * drifted: that copy ignored `opacity: 0` and ancestor-overflow clipping, so
144
+ * it reported `isVisible: true` for elements `acquire()` rejects as hidden.
145
+ * One implementation means the three can never disagree again.
146
+ */
147
+ async getElementInfo(selector) {
148
+ const probe = await this.port.evaluate(probeElement, selector);
149
+ if (!probe?.found)
150
+ return null;
151
+ return {
152
+ nodeId: 0, // Will be set by CDP
153
+ boundingBox: probe.boundingBox,
154
+ isVisible: probe.isVisible,
155
+ isClickable: probe.isClickable,
156
+ };
157
+ }
158
+ /**
159
+ * Enhanced visibility check (display/visibility/opacity + ancestor-overflow
160
+ * clipping). Delegates to the shared {@link probeElement} so it can never
161
+ * drift from the check `acquire` enforces. Returns false for a missing element.
162
+ */
163
+ async isVisible(selector) {
164
+ const probe = await this.port.evaluate(probeElement, selector);
165
+ return probe.isVisible;
166
+ }
167
+ /**
168
+ * Enhanced clickable check (disabled/pointer-events/dimensions/opacity;
169
+ * readonly is intentionally NOT a blocker). Delegates to the shared
170
+ * {@link probeElement}. Returns false for a missing element.
171
+ */
172
+ async isClickable(selector) {
173
+ const probe = await this.port.evaluate(probeElement, selector);
174
+ return probe.isClickable;
175
+ }
176
+ /**
177
+ * Whether a form element is editable: present, not disabled, not readonly.
178
+ * Exposed separately from {@link isClickable} because readonly elements are
179
+ * clickable/focusable but not editable.
180
+ */
181
+ async isEditable(selector) {
182
+ return await this.port.evaluate((sel) => {
183
+ const element = document.querySelector(sel);
184
+ if (!element)
185
+ return false;
186
+ return !element.hasAttribute('disabled') &&
187
+ !element.classList.contains('disabled') &&
188
+ !element.hasAttribute('readonly');
189
+ }, selector);
190
+ }
191
+ /**
192
+ * Enhanced scroll into view with better positioning
193
+ */
194
+ async scrollIntoView(selector) {
195
+ if (this.port.humanization().scroll) {
196
+ try {
197
+ await this.port.humanScrollToElement(selector);
198
+ await this.port.evaluate((sel) => {
199
+ const element = document.querySelector(sel);
200
+ element?.scrollIntoView({ behavior: 'auto', block: 'center', inline: 'center' });
201
+ }, selector);
202
+ return;
203
+ }
204
+ catch {
205
+ // Some hidden/offscreen nodes do not expose a box model.
206
+ // Fall back to native DOM scrolling for robustness.
207
+ }
208
+ }
209
+ await this.port.evaluate((sel, tolerance) => {
210
+ const element = document.querySelector(sel);
211
+ if (!element)
212
+ return;
213
+ const rect = element.getBoundingClientRect();
214
+ const viewportHeight = window.innerHeight;
215
+ const viewportWidth = window.innerWidth;
216
+ // Check if element is already in viewport (with tolerance)
217
+ const isInViewport = rect.top >= -tolerance &&
218
+ rect.left >= -tolerance &&
219
+ rect.bottom <= viewportHeight + tolerance &&
220
+ rect.right <= viewportWidth + tolerance;
221
+ if (!isInViewport) {
222
+ // Scroll element into view with better positioning
223
+ element.scrollIntoView({
224
+ behavior: 'smooth',
225
+ block: 'center',
226
+ inline: 'center',
227
+ });
228
+ }
229
+ }, selector, VIEWPORT_TOLERANCE_PX);
230
+ }
231
+ /**
232
+ * Waits for an element's position to stabilize before interacting with it.
233
+ * Useful for letting scroll animations or dynamic layout changes settle.
234
+ * Times out silently - some elements never stabilize; callers proceed at their own risk.
235
+ *
236
+ * The observation runs entirely in-page in a SINGLE evaluate round-trip:
237
+ * a `requestAnimationFrame` loop samples the element's position, but only
238
+ * once every `checkInterval` ms of wall-clock, so the settle window matches
239
+ * the historical driver-side poll (N stable samples spaced `checkInterval`
240
+ * apart). The behaviour observable to the site is identical - it still waits
241
+ * the same duration for layout to settle before the click; only the internal
242
+ * transport changes (one round-trip instead of one evaluate per tick). A
243
+ * setTimeout hard-cap guarantees termination even if rAF is paused (a
244
+ * backgrounded tab), matching the old loop which always ended at `timeout`.
245
+ */
246
+ async waitForPositionToStabilize(selector, timeout = POSITION_STABILITY_TIMEOUT_MS, checkInterval = POSITION_CHECK_INTERVAL_MS, stabilityThreshold = POSITION_STABILITY_THRESHOLD, tolerance = POSITION_TOLERANCE_PX) {
247
+ await this.port.evaluate(async (sel, threshold, tol, timeoutMs, intervalMs) => {
248
+ return new Promise((resolve) => {
249
+ const startTime = Date.now();
250
+ let stableCount = 0;
251
+ let lastPosition = null;
252
+ let lastSampleTime = 0;
253
+ let done = false;
254
+ const finish = () => {
255
+ if (done)
256
+ return;
257
+ done = true;
258
+ clearTimeout(timer);
259
+ // Resolve silently, matching the historical poll loop (never rejects).
260
+ resolve();
261
+ };
262
+ // Hard cap that fires even if requestAnimationFrame is fully paused
263
+ // (backgrounded tab), so the wait can never hang - the old poll loop
264
+ // always terminated at `timeout` via its own setTimeout.
265
+ const timer = setTimeout(finish, timeoutMs);
266
+ const measure = () => {
267
+ if (done)
268
+ return;
269
+ const now = Date.now();
270
+ if (now - startTime >= timeoutMs) {
271
+ finish();
272
+ return;
273
+ }
274
+ // Pace samples to `intervalMs` of wall-clock (not every frame) so
275
+ // the stability window matches the historical poll: the element
276
+ // must hold position across `threshold` samples spaced `intervalMs`
277
+ // apart before it is treated as settled. Sampling every rAF tick
278
+ // would declare "stable" ~250ms sooner and fire the click early.
279
+ if (now - lastSampleTime >= intervalMs) {
280
+ lastSampleTime = now;
281
+ try {
282
+ const element = document.querySelector(sel);
283
+ if (!element) {
284
+ stableCount = 0;
285
+ lastPosition = null;
286
+ }
287
+ else {
288
+ const rect = element.getBoundingClientRect();
289
+ const currentPosition = {
290
+ x: Math.round(rect.left),
291
+ y: Math.round(rect.top),
292
+ width: Math.round(rect.width),
293
+ height: Math.round(rect.height),
294
+ };
295
+ if (!lastPosition) {
296
+ lastPosition = currentPosition;
297
+ stableCount = 1;
298
+ }
299
+ else {
300
+ const isStable = Math.abs(currentPosition.x - lastPosition.x) <= tol &&
301
+ Math.abs(currentPosition.y - lastPosition.y) <= tol &&
302
+ Math.abs(currentPosition.width - lastPosition.width) <= tol &&
303
+ Math.abs(currentPosition.height - lastPosition.height) <= tol;
304
+ if (isStable) {
305
+ stableCount++;
306
+ if (stableCount >= threshold) {
307
+ finish();
308
+ return;
309
+ }
310
+ }
311
+ else {
312
+ stableCount = 1;
313
+ }
314
+ lastPosition = currentPosition;
315
+ }
316
+ }
317
+ }
318
+ catch {
319
+ stableCount = 0;
320
+ lastPosition = null;
321
+ }
322
+ }
323
+ requestAnimationFrame(measure);
324
+ };
325
+ requestAnimationFrame(measure);
326
+ });
327
+ }, selector, stabilityThreshold, tolerance, timeout, checkInterval);
328
+ }
329
+ /**
330
+ * Check if element is within the viewport (with some tolerance)
331
+ */
332
+ async isInViewport(selector) {
333
+ return await this.port.evaluate((sel, tolerance) => {
334
+ const element = document.querySelector(sel);
335
+ if (!element)
336
+ return false;
337
+ const rect = element.getBoundingClientRect();
338
+ const viewportHeight = window.innerHeight;
339
+ const viewportWidth = window.innerWidth;
340
+ // Add some tolerance for scroll positioning
341
+ return rect.top >= -tolerance &&
342
+ rect.left >= -tolerance &&
343
+ rect.bottom <= viewportHeight + tolerance &&
344
+ rect.right <= viewportWidth + tolerance;
345
+ }, selector, VIEWPORT_TOLERANCE_PX);
346
+ }
347
+ /**
348
+ * The full pre-click targeting protocol: existence + visibility +
349
+ * clickability checks, scroll into view, position stabilization, box-model
350
+ * geometry, humanized (or exact-center) point selection, and a final
351
+ * in-viewport check. Returns the coordinates to click; throws a typed
352
+ * failure otherwise.
353
+ *
354
+ * With `force: true` every check is bypassed and a hidden element falls
355
+ * back to its bounding-box center.
356
+ */
357
+ async acquire(selector, options) {
358
+ const force = options?.force ?? false;
359
+ // Single combined probe: resolve the selector ONCE and return existence,
360
+ // visibility, clickability, and boundingBox in one evaluate round-trip
361
+ // instead of three (getElementInfo + isVisible + isClickable). Shares
362
+ // the module-level probeElement with isVisible()/isClickable() so the
363
+ // three can never drift apart.
364
+ const probe = await this.port.evaluate(probeElement, selector);
365
+ if (!probe || !probe.found) {
366
+ throw new Error(`Element not found: ${selector}`);
367
+ }
368
+ if (!force) {
369
+ if (!probe.isVisible) {
370
+ throw new Error(`Element is not visible: ${selector}. Use force: true to bypass the visibility check and attempt interaction anyway. Warning: Interacting with non-visible elements may lead to unexpected behavior or errors.`);
371
+ }
372
+ if (!probe.isClickable) {
373
+ throw new Error(`Element is not clickable: ${selector}. Use force: true to bypass this check.`);
374
+ }
375
+ }
376
+ // Scroll element into view if needed
377
+ await this.scrollIntoView(selector);
378
+ // Wait for the element's position to stabilize after scrolling.
379
+ // Scroll animations or layout changes may shift the element for a short
380
+ // period; clicking before the position is stable can send the click to
381
+ // the wrong location.
382
+ await this.waitForPositionToStabilize(selector, POSITION_STABILITY_TIMEOUT_MS, POSITION_CHECK_INTERVAL_MS);
383
+ // Read fresh viewport-relative geometry AFTER scroll+stabilize. This is
384
+ // the same CSS-pixel coordinate space Input.dispatchMouseEvent consumes,
385
+ // so no CDP round-trips (DOM.getDocument + querySelector + getBoxModel)
386
+ // are needed - one evaluate replaces all three. The probe's boundingBox
387
+ // was captured pre-scroll and would be stale here, so we re-read.
388
+ //
389
+ // We reproduce CDP DOM.getBoxModel's `content` quad, NOT the raw
390
+ // getBoundingClientRect box: getBoundingClientRect returns the BORDER
391
+ // box (includes padding + border) while the historical click path used
392
+ // the CONTENT box, and humanizedClickTarget picks a point inside it.
393
+ // Subtracting computed padding+border makes the derived box byte-equivalent
394
+ // to the old content quad - a pure transport change, no behavior shift.
395
+ // We also return the border box as a degeneracy fallback (an element that
396
+ // is all padding has a zero-area content box but is still clickable).
397
+ const rect = await this.port.evaluate((sel) => {
398
+ const element = document.querySelector(sel);
399
+ if (!element)
400
+ return null;
401
+ const r = element.getBoundingClientRect();
402
+ const cs = window.getComputedStyle(element);
403
+ const insetL = parseFloat(cs.borderLeftWidth) + parseFloat(cs.paddingLeft);
404
+ const insetR = parseFloat(cs.borderRightWidth) + parseFloat(cs.paddingRight);
405
+ const insetT = parseFloat(cs.borderTopWidth) + parseFloat(cs.paddingTop);
406
+ const insetB = parseFloat(cs.borderBottomWidth) + parseFloat(cs.paddingBottom);
407
+ return {
408
+ content: {
409
+ x: r.left + insetL,
410
+ y: r.top + insetT,
411
+ width: Math.max(0, r.width - insetL - insetR),
412
+ height: Math.max(0, r.height - insetT - insetB),
413
+ },
414
+ border: { x: r.left, y: r.top, width: r.width, height: r.height },
415
+ };
416
+ }, selector);
417
+ // getBoundingClientRect never throws (unlike DOM.getBoxModel): a missing
418
+ // element yields null. Prefer the content box; fall back to the border
419
+ // box when the content box is degenerate (padding-only element). Non-force
420
+ // elements were already proven visible+clickable (non-zero border box) by
421
+ // the probe. Force bypasses every check, so degrade a missing element to
422
+ // the pre-scroll probe box, then to the rect origin - never throwing.
423
+ let source;
424
+ if (rect && rect.content.width > 0 && rect.content.height > 0) {
425
+ source = rect.content;
426
+ }
427
+ else if (rect && rect.border.width > 0 && rect.border.height > 0) {
428
+ source = rect.border;
429
+ }
430
+ else if (force) {
431
+ source = (probe.boundingBox.width > 0 && probe.boundingBox.height > 0)
432
+ ? probe.boundingBox
433
+ : { x: 0, y: 0, width: 0, height: 0 };
434
+ }
435
+ else {
436
+ throw new Error(`Could not resolve click geometry for ${selector}: element missing or zero-area after scroll.`);
437
+ }
438
+ // Randomized in-box point under mouse humanization; exact center
439
+ // otherwise so deterministic tests are unaffected.
440
+ const point = this.port.humanization().mouse
441
+ ? humanizedClickTarget(source)
442
+ : {
443
+ x: source.x + source.width / 2,
444
+ y: source.y + source.height / 2,
445
+ };
446
+ // Verify element is still in viewport after scrolling (with some tolerance)
447
+ if (!force) {
448
+ const isInViewport = await this.isInViewport(selector);
449
+ if (!isInViewport) {
450
+ // Give a bit more time for scroll animations to complete
451
+ await new Promise(resolve => setTimeout(resolve, HUMAN_DELAY_MS));
452
+ const isInViewportAfterDelay = await this.isInViewport(selector);
453
+ if (!isInViewportAfterDelay) {
454
+ throw new Error(`Element is not in viewport after scrolling: ${selector}`);
455
+ }
456
+ }
457
+ }
458
+ return point;
459
+ }
460
+ }
461
+ //# sourceMappingURL=element-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-target.js","sourceRoot":"","sources":["../../src/input/element-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,uCAAuC;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC,CAAC,qCAAqC;AACxF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,+BAA+B;AAC9E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,CAAC,+CAA+C;AAC9F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,CAAC,gDAAgD;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC,CAAC,qCAAqC;AAU9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAChD,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,eAAe;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,OAAO;QACH,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;QAC5B,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK;KAChC,CAAC;AACN,CAAC;AAiBD;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,GAAW;IAC7B,qEAAqE;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAgB,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACnD,CAAC;IACN,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE/C,qBAAqB;IACrB,IAAI,SAAkB,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5D,SAAS,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,SAAS,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,SAAS,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,CAAC;QACJ,SAAS,GAAG,IAAI,CAAC;QACjB,kEAAkE;QAClE,gEAAgE;QAChE,oBAAoB;QACpB,IAAI,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;QACrC,OAAO,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,KAAK,QAAQ;gBACnC,aAAa,CAAC,SAAS,KAAK,QAAQ;gBACpC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;gBACtD,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK;oBAC/B,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI;oBAC/B,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM;oBAC/B,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;oBAClC,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM;gBACV,CAAC;YACL,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,mEAAmE;IACnE,8DAA8D;IAC9D,IAAI,WAAoB,CAAC;IACzB,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7E,WAAW,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACxC,WAAW,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,WAAW,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,WAAW,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,CAAC;QACJ,WAAW,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,OAAO;QACH,KAAK,EAAE,IAAI;QACX,SAAS;QACT,WAAW;QACX,WAAW,EAAE;YACT,CAAC,EAAE,IAAI,CAAC,IAAI;YACZ,CAAC,EAAE,IAAI,CAAC,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB;KACJ,CAAC;AACN,CAAC;AAgBD,MAAM,OAAO,aAAa;IACtB,YAA6B,IAAuB;QAAxC;;;;mBAAiB,IAAI;WAAmB;IAAG,CAAC;IAExD;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAe,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO;YACH,MAAM,EAAE,CAAC,EAAE,qBAAqB;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAe,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC,SAAS,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAe,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC,WAAW,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC7B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAU,CAAC,GAAW,EAAE,EAAE;YACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAgB,CAAC;YAC3D,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC3B,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;gBACjC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACvC,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAW,EAAE,EAAE;oBACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAgB,CAAC;oBAC3D,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrF,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACb,OAAO;YACX,CAAC;YAAC,MAAM,CAAC;gBACL,yDAAyD;gBACzD,oDAAoD;YACxD,CAAC;QACL,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAgB,CAAC;YAC3D,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;YAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;YAExC,2DAA2D;YAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS;gBACxB,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;gBACvB,IAAI,CAAC,MAAM,IAAI,cAAc,GAAG,SAAS;gBACzC,IAAI,CAAC,KAAK,IAAI,aAAa,GAAG,SAAS,CAAC;YAE3D,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,mDAAmD;gBACnD,OAAO,CAAC,cAAc,CAAC;oBACnB,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACP,CAAC;QACL,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,0BAA0B,CAC5B,QAAgB,EAChB,UAAkB,6BAA6B,EAC/C,gBAAwB,0BAA0B,EAClD,qBAA6B,4BAA4B,EACzD,YAAoB,qBAAqB;QAEzC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAO,KAAK,EAAE,GAAW,EAAE,SAAiB,EAAE,GAAW,EAAE,SAAiB,EAAE,UAAkB,EAAE,EAAE;YACxH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,YAAY,GAAmE,IAAI,CAAC;gBACxF,IAAI,cAAc,GAAG,CAAC,CAAC;gBACvB,IAAI,IAAI,GAAG,KAAK,CAAC;gBAEjB,MAAM,MAAM,GAAG,GAAG,EAAE;oBAChB,IAAI,IAAI;wBAAE,OAAO;oBACjB,IAAI,GAAG,IAAI,CAAC;oBACZ,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,uEAAuE;oBACvE,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC;gBAEF,oEAAoE;gBACpE,qEAAqE;gBACrE,yDAAyD;gBACzD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAE5C,MAAM,OAAO,GAAG,GAAG,EAAE;oBACjB,IAAI,IAAI;wBAAE,OAAO;oBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,IAAI,GAAG,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC/B,MAAM,EAAE,CAAC;wBACT,OAAO;oBACX,CAAC;oBAED,kEAAkE;oBAClE,gEAAgE;oBAChE,oEAAoE;oBACpE,iEAAiE;oBACjE,iEAAiE;oBACjE,IAAI,GAAG,GAAG,cAAc,IAAI,UAAU,EAAE,CAAC;wBACrC,cAAc,GAAG,GAAG,CAAC;wBACrB,IAAI,CAAC;4BACD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAuB,CAAC;4BAClE,IAAI,CAAC,OAAO,EAAE,CAAC;gCACX,WAAW,GAAG,CAAC,CAAC;gCAChB,YAAY,GAAG,IAAI,CAAC;4BACxB,CAAC;iCAAM,CAAC;gCACJ,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;gCAC7C,MAAM,eAAe,GAAG;oCACpB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oCACxB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;oCACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;oCAC7B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;iCAClC,CAAC;gCAEF,IAAI,CAAC,YAAY,EAAE,CAAC;oCAChB,YAAY,GAAG,eAAe,CAAC;oCAC/B,WAAW,GAAG,CAAC,CAAC;gCACpB,CAAC;qCAAM,CAAC;oCACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG;wCACrD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG;wCACnD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG;wCAC3D,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;oCAE7E,IAAI,QAAQ,EAAE,CAAC;wCACX,WAAW,EAAE,CAAC;wCACd,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;4CAC3B,MAAM,EAAE,CAAC;4CACT,OAAO;wCACX,CAAC;oCACL,CAAC;yCAAM,CAAC;wCACJ,WAAW,GAAG,CAAC,CAAC;oCACpB,CAAC;oCAED,YAAY,GAAG,eAAe,CAAC;gCACnC,CAAC;4BACL,CAAC;wBACL,CAAC;wBAAC,MAAM,CAAC;4BACL,WAAW,GAAG,CAAC,CAAC;4BAChB,YAAY,GAAG,IAAI,CAAC;wBACxB,CAAC;oBACL,CAAC;oBAED,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACnC,CAAC,CAAC;gBAEF,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB;QAC/B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAU,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;YACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAgB,CAAC;YAC3D,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;YAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;YAExC,4CAA4C;YAC5C,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS;gBACtB,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;gBACvB,IAAI,CAAC,MAAM,IAAI,cAAc,GAAG,SAAS;gBACzC,IAAI,CAAC,KAAK,IAAI,aAAa,GAAG,SAAS,CAAC;QACnD,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,OAA6B;QACzD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QAEtC,yEAAyE;QACzE,uEAAuE;QACvE,sEAAsE;QACtE,sEAAsE;QACtE,+BAA+B;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAe,YAAY,EAAE,QAAQ,CAAC,CAAC;QAE7E,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,4KAA4K,CAAC,CAAC;YACrO,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,yCAAyC,CAAC,CAAC;YACpG,CAAC;QACL,CAAC;QAED,qCAAqC;QACrC,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEpC,gEAAgE;QAChE,wEAAwE;QACxE,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,6BAA6B,EAAE,0BAA0B,CAAC,CAAC;QAE3G,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,kEAAkE;QAClE,EAAE;QACF,iEAAiE;QACjE,sEAAsE;QACtE,uEAAuE;QACvE,qEAAqE;QACrE,4EAA4E;QAC5E,wEAAwE;QACxE,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAG3B,CAAC,GAAW,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAuB,CAAC;YAClE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;YAC/E,OAAO;gBACH,OAAO,EAAE;oBACL,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM;oBAClB,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,MAAM;oBACjB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;oBAC7C,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;iBAClD;gBACD,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;aACpE,CAAC;QACN,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEb,yEAAyE;QACzE,uEAAuE;QACvE,2EAA2E;QAC3E,0EAA0E;QAC1E,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,MAAkB,CAAC;QACvB,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClE,CAAC,CAAC,KAAK,CAAC,WAAW;gBACnB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC9C,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,8CAA8C,CAAC,CAAC;QACpH,CAAC;QAED,iEAAiE;QACjE,mDAAmD;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK;YACxC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAC9B,CAAC,CAAC;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;gBAC9B,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;aAClC,CAAC;QAEN,4EAA4E;QAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,yDAAyD;gBACzD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;gBAClE,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACjE,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -0,0 +1,85 @@
1
+ import type { InputTransport } from './input-transport.js';
2
+ export type MouseButton = 'left' | 'right' | 'middle';
3
+ export interface HumanizationOptions {
4
+ mouse: boolean;
5
+ keyboard: boolean;
6
+ scroll: boolean;
7
+ }
8
+ export interface ClickOptions {
9
+ button?: MouseButton;
10
+ clickCount?: number;
11
+ /** Explicit press→release delay (ms). Overrides humanized timing when > 0. */
12
+ delay?: number;
13
+ }
14
+ export interface TypeOptions {
15
+ /** Explicit inter-character delay (ms). Overrides humanized cadence when > 0. */
16
+ delay?: number;
17
+ }
18
+ interface Point {
19
+ x: number;
20
+ y: number;
21
+ }
22
+ /**
23
+ * Cubic Bézier mouse path from (fromX, fromY) to (toX, toY) in pure TypeScript -
24
+ * NO `Runtime.evaluate` round-trip per move (which is itself a 2026 CDP-detection
25
+ * signal). Two perpendicular-offset control points (±30% distance bias) bow each
26
+ * move unpredictably; eased-in-out timing matches arm motion; sub-pixel wobble
27
+ * (peaking mid-curve, under ±1.5 px) mimics pointer tremor. Returns rounded
28
+ * integer points; the caller dispatches one mouse event per point.
29
+ */
30
+ export declare function bezierMousePath(fromX: number, fromY: number, toX: number, toY: number): Point[];
31
+ /**
32
+ * True for code points entered through an IME (Korean Hangul, Japanese
33
+ * Hiragana/Katakana, Chinese Han, Fullwidth/Halfwidth forms). These can't go
34
+ * through the rawKeyDown → char → keyUp path; Naver / Japanese IME-aware forms
35
+ * validate the composition event lifecycle, which plain `insertText` skips.
36
+ */
37
+ export declare function isCjkChar(char: string): boolean;
38
+ /**
39
+ * Deep module over {@link InputTransport}: turns high-level intents
40
+ * (move, click, type) into humanized sequences of transport events. Owns
41
+ * cursor position, the held-button bitmask, and the CJK composition lifecycle.
42
+ * Coordinate/text level - selector resolution is the caller's job.
43
+ */
44
+ export declare class InputEmulator {
45
+ private readonly transport;
46
+ private lastMousePosition;
47
+ private readonly heldMouseButtons;
48
+ private humanization;
49
+ constructor(transport: InputTransport, humanization?: Partial<HumanizationOptions>);
50
+ setHumanization(options?: Partial<HumanizationOptions>): void;
51
+ /** Current cursor position (copy). */
52
+ get position(): {
53
+ x: number;
54
+ y: number;
55
+ };
56
+ private buttonsBitmask;
57
+ /**
58
+ * Move the cursor to (x, y). With mouse humanization on, follows a Bézier
59
+ * path with eased timing; otherwise a single `mouseMoved`.
60
+ */
61
+ moveTo(x: number, y: number): Promise<void>;
62
+ /**
63
+ * Move to (x, y) and perform a human-like click. The held-button set is
64
+ * updated before each dispatch so `event.buttons` is spec-correct on
65
+ * mousedown (button present) and mouseup (button cleared).
66
+ */
67
+ clickAt(x: number, y: number, options?: ClickOptions): Promise<void>;
68
+ /**
69
+ * Type text at the current focus. ANSI keys go through rawKeyDown → char →
70
+ * keyUp; CJK characters go through the IME composition path; other Unicode
71
+ * falls back to insertText. Keyboard humanization adds a bimodal cadence
72
+ * (mostly fast, occasional "thinking" pauses).
73
+ */
74
+ typeText(text: string, options?: TypeOptions): Promise<void>;
75
+ private typeChar;
76
+ /**
77
+ * Type one CJK character through the IME composition path so the page sees a
78
+ * real `compositionstart → compositionupdate → compositionend` sequence
79
+ * (`imeSetComposition` starts it; `text`/insertText commits). Falls back to
80
+ * plain text if composition is unavailable.
81
+ */
82
+ private typeCjkChar;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=input-emulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-emulator.d.ts","sourceRoot":"","sources":["../../src/input/input-emulator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IACxB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,UAAU,KAAK;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AA0CxC;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACZ,KAAK,EAAE,CAsCT;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY/C;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IAMlB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;IAC3D,OAAO,CAAC,YAAY,CAAsB;gBAGrB,SAAS,EAAE,cAAc,EAC1C,YAAY,GAAE,OAAO,CAAC,mBAAmB,CAAM;IASnD,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAQ7D,sCAAsC;IACtC,IAAI,QAAQ,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAEvC;IAED,OAAO,CAAC,cAAc;IAMtB;;;OAGG;IACG,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD;;;;OAIG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC1E;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YA6BpD,QAAQ;IA2CtB;;;;;OAKG;YACW,WAAW;CAY5B"}