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,129 @@
1
+ /**
2
+ * SessionClient - a session-scoped view of the single browser CDP client.
3
+ *
4
+ * In flatten-mode transport (ADR 0003) there is ONE websocket to the browser
5
+ * target; every page is a CDP *session* multiplexed over it, addressed by a
6
+ * `sessionId`. This proxy presents the familiar `CDP.Client` shape to `CdpPage`
7
+ * and its sub-modules while injecting the page's `sessionId` into every command
8
+ * and event subscription. That keeps the ~10 `this.client.Domain.method()` call
9
+ * sites in `page.ts` (and the input transport / injector / inject-hook) exactly
10
+ * as written - the proxy is the single seam where sessionId enters.
11
+ *
12
+ * How `chrome-remote-interface` (0.33.2) exposes things, which this mirrors:
13
+ * - a command is `Domain.method(params, sessionId, callback)` (decorated
14
+ * `.category === 'command'`); we bind arg 2 to the current sessionId.
15
+ * - an event is `Domain.event(sessionId, handler)` (`.category === 'event'`);
16
+ * we bind arg 1 to the current sessionId. It returns an unsubscribe fn.
17
+ * - the connection also emits every session event under `${Domain.event}.${sessionId}`
18
+ * (chrome.js), so raw `client.on('Domain.event', h)` must be rewritten to the
19
+ * session-scoped name or it would fire for *every* page's events.
20
+ *
21
+ * `browser()` and `sessionId()` are read at call time, so a browser-socket
22
+ * reconnect (new underlying client) or a session re-attach (new sessionId) is
23
+ * picked up transparently - the proxy object itself is stable and never needs
24
+ * to be recreated.
25
+ */
26
+ /** Matches a CDP event name `Domain.event` so we only session-scope real events. */
27
+ const CDP_EVENT_NAME = /^[A-Z]\w*\.\w+$/;
28
+ /**
29
+ * A CDP domain object is an upper-cased property (Page, Network, Runtime, DOM,
30
+ * Input, Target, …). Everything else on the client (send, _ws, on, protocol,
31
+ * webSocketUrl, EventEmitter internals) is transport plumbing, not a domain.
32
+ */
33
+ const isDomainName = (prop) => /^[A-Z]/.test(prop);
34
+ /**
35
+ * Browser-GLOBAL domains are answered by the browser process itself, not by a
36
+ * page target, so their commands must be sent WITHOUT a sessionId - tagging e.g.
37
+ * `Browser.getVersion` with a page's sessionId makes Chrome reject it
38
+ * (`'Browser.getVersion' wasn't found`). These are returned raw (no injection);
39
+ * only page-scoped domains (Page, Network, Runtime, DOM, Input, …) get scoped.
40
+ * `Target` is here because the only page-side use is `close()` detaching by
41
+ * sessionId, which the proxy handles explicitly against the raw client.
42
+ */
43
+ const BROWSER_GLOBAL_DOMAINS = new Set(['Browser', 'Target', 'SystemInfo', 'Tracing', 'Tethering']);
44
+ export function createSessionClient(deps) {
45
+ const { browser, sessionId } = deps;
46
+ const sessionEventName = (name) => (CDP_EVENT_NAME.test(name) ? `${name}.${sessionId()}` : name);
47
+ const domainProxies = new Map();
48
+ /** Read a raw property off the current browser client, binding functions to it. */
49
+ const rawPassthrough = (prop) => {
50
+ const rawBrowser = browser();
51
+ const value = rawBrowser[prop];
52
+ return typeof value === 'function' ? value.bind(rawBrowser) : value;
53
+ };
54
+ const makeDomainProxy = (domainName) => new Proxy(Object.create(null), {
55
+ get(_target, member) {
56
+ const domain = browser()[domainName];
57
+ // Symbol keys (e.g. util.inspect.custom) never carry CDP semantics -
58
+ // pass them straight through to the raw domain object.
59
+ if (typeof member === 'symbol')
60
+ return domain?.[member];
61
+ // Domain-level shorthand `Domain.on(event, handler)` → session-scoped subscribe.
62
+ if (member === 'on') {
63
+ return (eventName, listener) => domain[eventName](sessionId(), listener);
64
+ }
65
+ const apiFn = domain?.[member];
66
+ if (typeof apiFn !== 'function')
67
+ return apiFn;
68
+ if (apiFn.category === 'event') {
69
+ // Event subscription: sessionId is the FIRST positional arg.
70
+ return (listener) => apiFn(sessionId(), listener);
71
+ }
72
+ // Command (or any other fn): sessionId is the SECOND positional arg.
73
+ return (params, callback) => apiFn(params, sessionId(), callback);
74
+ },
75
+ });
76
+ const handler = {
77
+ get(_target, prop) {
78
+ // Symbol keys (util.inspect.custom, Symbol.iterator, …) carry no CDP
79
+ // semantics; RegExp/Set lookups would throw on them. Pass through raw.
80
+ if (typeof prop === 'symbol')
81
+ return rawPassthrough(prop);
82
+ switch (prop) {
83
+ case 'send':
84
+ // Raw send: default the sessionId if the caller didn't pass one.
85
+ return (method, params, sessionIdArg, callback) => browser().send(method, params, sessionIdArg ?? sessionId(), callback);
86
+ case 'on':
87
+ case 'once':
88
+ case 'addListener':
89
+ return (name, listener) => browser()[prop](sessionEventName(name), listener);
90
+ case 'off':
91
+ case 'removeListener':
92
+ return (name, listener) => browser()[prop](sessionEventName(name), listener);
93
+ case '_ws':
94
+ // The websocket is SHARED across all sessions; expose it read-only
95
+ // for the keep-alive heartbeat. A page must never close it.
96
+ return browser()._ws;
97
+ case 'close':
98
+ // Closing a *page's* client detaches its session only - never the
99
+ // shared socket (that would kill every other page). The tab/target
100
+ // itself is closed via `Page.close()` on the page-close path.
101
+ return async () => {
102
+ try {
103
+ await browser().Target.detachFromTarget({ sessionId: sessionId() });
104
+ }
105
+ catch {
106
+ // tolerate already-detached session or an already-closed browser
107
+ }
108
+ };
109
+ case 'sessionId':
110
+ return sessionId();
111
+ default:
112
+ break;
113
+ }
114
+ if (isDomainName(prop) && !BROWSER_GLOBAL_DOMAINS.has(prop)) {
115
+ let domainProxy = domainProxies.get(prop);
116
+ if (!domainProxy) {
117
+ domainProxy = makeDomainProxy(prop);
118
+ domainProxies.set(prop, domainProxy);
119
+ }
120
+ return domainProxy;
121
+ }
122
+ // Browser-global domains and everything else pass through to the raw
123
+ // browser client with NO sessionId injection.
124
+ return rawPassthrough(prop);
125
+ },
126
+ };
127
+ return new Proxy(Object.create(null), handler);
128
+ }
129
+ //# sourceMappingURL=session-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-client.js","sourceRoot":"","sources":["../../src/connection/session-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAWH,oFAAoF;AACpF,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAEpG,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACvD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEpC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC9C,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEjD,mFAAmF;IACnF,MAAM,cAAc,GAAG,CAAC,IAAqB,EAAW,EAAE;QACtD,MAAM,UAAU,GAAG,OAAO,EAAS,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAW,EAAE,CACpD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC3B,GAAG,CAAC,OAAO,EAAE,MAAuB;YAChC,MAAM,MAAM,GAAI,OAAO,EAAU,CAAC,UAAU,CAAC,CAAC;YAE9C,qEAAqE;YACrE,uDAAuD;YACvD,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YAExD,iFAAiF;YACjF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,CAAC,SAAiB,EAAE,QAAkC,EAAE,EAAE,CAC7D,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YAE9C,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC7B,6DAA6D;gBAC7D,OAAO,CAAC,QAAkC,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChF,CAAC;YACD,qEAAqE;YACrE,OAAO,CAAC,MAAgB,EAAE,QAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1F,CAAC;KACJ,CAAC,CAAC;IAEP,MAAM,OAAO,GAAsB;QAC/B,GAAG,CAAC,OAAO,EAAE,IAAqB;YAC9B,qEAAqE;YACrE,uEAAuE;YACvE,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;YAE1D,QAAQ,IAAI,EAAE,CAAC;gBACX,KAAK,MAAM;oBACP,iEAAiE;oBACjE,OAAO,CAAC,MAAc,EAAE,MAAgB,EAAE,YAAqB,EAAE,QAAkB,EAAE,EAAE,CAClF,OAAO,EAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,IAAI,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACvF,KAAK,IAAI,CAAC;gBACV,KAAK,MAAM,CAAC;gBACZ,KAAK,aAAa;oBACd,OAAO,CAAC,IAAY,EAAE,QAAkC,EAAE,EAAE,CACvD,OAAO,EAAU,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACnE,KAAK,KAAK,CAAC;gBACX,KAAK,gBAAgB;oBACjB,OAAO,CAAC,IAAY,EAAE,QAAkC,EAAE,EAAE,CACvD,OAAO,EAAU,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACnE,KAAK,KAAK;oBACN,mEAAmE;oBACnE,4DAA4D;oBAC5D,OAAQ,OAAO,EAAU,CAAC,GAAG,CAAC;gBAClC,KAAK,OAAO;oBACR,kEAAkE;oBAClE,mEAAmE;oBACnE,8DAA8D;oBAC9D,OAAO,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC;4BACD,MAAO,OAAO,EAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;wBACjF,CAAC;wBAAC,MAAM,CAAC;4BACL,iEAAiE;wBACrE,CAAC;oBACL,CAAC,CAAC;gBACN,KAAK,WAAW;oBACZ,OAAO,SAAS,EAAE,CAAC;gBACvB;oBACI,MAAM;YACd,CAAC;YAED,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,IAAI,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,WAAW,CAAC;YACvB,CAAC;YAED,qEAAqE;YACrE,8CAA8C;YAC9C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;KACJ,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAA0B,CAAC;AAC5E,CAAC"}
package/dist/crawler.d.ts CHANGED
@@ -2,102 +2,24 @@ import type { Dictionary } from '@crawlee/types';
2
2
  import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook, BrowserRequestHandler, LaunchContext, LoadedContext, RouterRoutes, RouterHandler } from 'crawlee';
3
3
  import { BrowserCrawler, Configuration } from 'crawlee';
4
4
  import type CDPBrowserController from './browser-controller.js';
5
- import CDPBrowserPlugin from './browser-plugin.js';
6
- import { CdpLauncher, type LaunchReturn } from './launcher-wrap.js';
5
+ import CDPBrowserPlugin, { CdpLauncher, type LaunchReturn } from './browser-plugin.js';
6
+ import type { BaseLaunchBrowserOptions, FingerprintGeneratorOptions } from './browser-process/launch-options.js';
7
7
  import type CdpPage from './page.js';
8
8
  import type { GotoOptions } from './page.js';
9
9
  import type CDPCrawler from './index.js';
10
10
  /**
11
- * Humanization options for simulating realistic user behavior
12
- * All options are disabled by default for performance
11
+ * Option types are declared once in `browser-process/launch-options.ts` and
12
+ * imported here - see issue #80. `LaunchOptions` is `BaseLaunchBrowserOptions`
13
+ * (the shared launch surface, incl. the `fingerprintOptions` spoof bag) plus
14
+ * the crawler-facing fields. The internal `fingerprintConfig` / `resolvedLocale`
15
+ * fields are populated by the plugin/process layers at launch, not by callers,
16
+ * so they are omitted from the public crawler surface.
13
17
  */
14
- interface HumanizationOptions {
15
- /** Enable mouse movement humanization. Default: false */
16
- mouse?: boolean;
17
- /** Enable keyboard humanization. Default: false */
18
- keyboard?: boolean;
19
- /** Enable scroll humanization. Default: false */
20
- scroll?: boolean;
21
- }
22
- interface FingerprintGeneratorOptions {
23
- /** Operating systems to generate fingerprints for (e.g., ["windows"], ["macos"], ["linux"]) */
24
- operatingSystems?: string[];
25
- /** Devices to generate fingerprints for (e.g., ["desktop"], ["mobile"]) */
26
- devices?: string[];
27
- /** Browsers to generate fingerprints for (e.g., ["chrome"], ["firefox"]) */
28
- browsers?: string[];
29
- /** Locales to generate fingerprints for (e.g., ["en-US"], ["it-IT"]) */
30
- locales?: string[];
31
- }
32
- interface LaunchOptions {
33
- headless?: boolean;
34
- useExperimentalFingerprints?: boolean;
35
- windowWidth?: number;
36
- windowHeight?: number;
37
- ignoreHttpsErrors?: boolean;
38
- executablePath?: string;
39
- /**
40
- * Launch the anti-detect Cromite binary (postinstall-downloaded into
41
- * `.browser/<platform>/` by default, or set via ANTI_DETECT_CHROME_PATH).
42
- * When true and the binary is resolvable, JS-based fingerprint injection
43
- * is skipped because the C++ patches already cover those overrides. If
44
- * the binary cannot be found, this flag is transparently downgraded and
45
- * the standard Chrome + JS injection path is used instead.
46
- */
47
- useNativeStealth?: boolean;
18
+ export interface LaunchOptions extends Omit<BaseLaunchBrowserOptions, 'fingerprintConfig' | 'resolvedLocale'> {
48
19
  browserType?: string;
49
20
  useIncognitoPages?: boolean;
50
- userDataDir?: string;
51
- keepUserDataDir?: boolean;
52
- dnsOverHttpsServer?: string;
53
- secureDnsMode?: 'off' | 'automatic' | 'secure';
54
- webrtcIpHandlingPolicy?: 'default' | 'default_public_interface_only' | 'default_public_and_private_interfaces' | 'disable_non_proxied_udp';
55
- /** Whether to start the browser maximized and fullscreen. Default: true */
56
- maximizeWindow?: boolean;
57
21
  /** Options for fingerprint generation - passed from browserPoolOptions */
58
22
  fingerprintGeneratorOptions?: FingerprintGeneratorOptions;
59
- fingerprintOptions?: {
60
- enableAdvancedStealth?: boolean;
61
- bypassRuntimeEnable?: boolean;
62
- spoofWebGL?: boolean;
63
- spoofAudioContext?: boolean;
64
- spoofClientRects?: boolean;
65
- maskAutomationFlags?: boolean;
66
- useFingerprintDefaults?: boolean;
67
- platform?: 'Win32' | 'MacIntel' | 'Linux x86_64';
68
- spoofFonts?: boolean;
69
- spoofPerformance?: boolean;
70
- spoofLocale?: boolean;
71
- detectTimezone?: boolean;
72
- /**
73
- * BCP-47 locale tag (e.g. 'ko-KR', 'de-DE'). One flag that coherently drives
74
- * navigator.language(s), Accept-Language header, Intl defaults, currency
75
- * symbol, date/number formatting, and timezone (derived from region).
76
- * When unset, falls back to proxy-country lookup → fingerprint language → 'en-US'.
77
- */
78
- locale?: string;
79
- /** Explicit IANA timezone (e.g. 'Asia/Seoul'). Overrides locale-derived timezone. */
80
- timezone?: string;
81
- /** Explicit Accept-Language header (e.g. 'ko-KR,ko;q=0.9'). Overrides locale-derived list. */
82
- languages?: string;
83
- bypassCDPDetection?: boolean;
84
- spoofStorage?: boolean;
85
- spoofTiming?: boolean;
86
- enableDataDomeBypass?: boolean;
87
- webRtcPolicy?: 'spoof' | 'disable';
88
- /** Humanization options (all disabled by default) */
89
- humanization?: HumanizationOptions;
90
- /** Enable debug logging in browser console. Default: true for debugging */
91
- debug?: boolean;
92
- /** Use real Chrome device profiles instead of Apify fingerprint-generator. Default: false */
93
- useNonApifyFingerprints?: boolean;
94
- /**
95
- * Mirror of `launchOptions.useNativeStealth`. Historical call sites
96
- * place it under `fingerprintOptions`; the runtime checks both
97
- * (`opts.useNativeStealth || opts.fingerprintOptions?.useNativeStealth`).
98
- */
99
- useNativeStealth?: boolean;
100
- };
101
23
  }
102
24
  export interface CDPPluginOptions {
103
25
  browserPlugins: [CDPBrowserPlugin];
@@ -125,5 +47,4 @@ export default class Crawler extends BrowserCrawler<CDPPluginOptions, LaunchOpti
125
47
  }
126
48
  export type CDPRouter<Context extends CDPCrawlingContext = CDPCrawlingContext> = RouterHandler<Context>;
127
49
  export declare function createCDPRouter<Context extends CDPCrawlingContext = CDPCrawlingContext>(routes?: RouterRoutes<Context, Dictionary>): CDPRouter<Context>;
128
- export {};
129
50
  //# sourceMappingURL=crawler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5K,OAAO,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,SAAS,CAAC;AAErE,OAAO,KAAK,oBAAoB,MAAM,yBAAyB,CAAC;AAChE,OAAO,gBAAgB,EAAE,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAsB,MAAM,qCAAqC,CAAC;AAErI,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IACzG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0EAA0E;IAC1E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAAG,cAAc,EAAE,CAAC,gBAAgB,CAAC,CAAA;CAAE;AACxE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAG5D,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACxE,SAAQ,sBAAsB,CAC1B,OAAO,UAAU,EACjB,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,QAAQ,CACX;CAAG;AACR,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;IAC1I,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,OAAQ,SAAQ,WAAW,CAAC,kBAAkB,EAAE,cAAc,CAAC;CAAG;AACnF,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC/F,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACnD;AACD,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAClG,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,cAAc,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAGD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,cAAc,CAC/C,gBAAgB,EAChB,aAAa,EACb,kBAAkB,CACrB;IAGO,OAAO,CAAC,QAAQ,CAAC,cAAc;aACb,MAAM;gBADP,cAAc,GAAE,iBAAsB,EACrC,MAAM,gBAAkC;cA8NrC,kBAAkB,CAAC,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;CAK3H;AAED,MAAM,MAAM,SAAS,CACjB,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,IACvD,aAAa,CAAC,OAAO,CAAC,CAAC;AAE3B,wBAAgB,eAAe,CAC3B,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,EACzD,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAEhE"}
package/dist/crawler.js CHANGED
@@ -1,6 +1,6 @@
1
- import { BrowserCrawler, Configuration, Router } from 'crawlee';
2
- import CDPBrowserPlugin from './browser-plugin.js';
3
- import { CdpLauncher } from './launcher-wrap.js';
1
+ import { BrowserCrawler, Configuration, log, Router } from 'crawlee';
2
+ import CDPBrowserPlugin, { CdpLauncher } from './browser-plugin.js';
3
+ import { describeOsConflict } from './fingerprinting/os-consistency.js';
4
4
  // Implement the Crawler class with proper typing
5
5
  export default class Crawler extends BrowserCrawler {
6
6
  constructor(
@@ -24,12 +24,161 @@ export default class Crawler extends BrowserCrawler {
24
24
  launchContext.launchOptions ?? (launchContext.launchOptions = {});
25
25
  launchContext.launchOptions.headless = headless;
26
26
  }
27
+ // ── Option-surface guidance (issue #80) ──────────────────────────────
28
+ // The `launchOptions.fingerprintOptions` (spoof-enforcement) bag and
29
+ // Crawlee's `browserPoolOptions.fingerprintOptions` (identity-generation)
30
+ // bag are separate concepts that share a name. Two silent foot-guns are
31
+ // surfaced here as one-time warnings; the canonical unification (single
32
+ // OS home + a renamed, non-colliding enforcement bag) lands in 1.0.0.
33
+ const fpOpts = launchContext.launchOptions?.fingerprintOptions;
34
+ const stealthEngine = launchContext.launchOptions?.stealth?.engine;
35
+ // The canonical `stealth` union is configured. Per issue #80, `stealth`
36
+ // wins when both it and a deprecated alias are set, so we suppress the
37
+ // deprecation notices below to avoid nagging callers already on canonical.
38
+ const stealthConfigured = stealthEngine === 'js' || stealthEngine === 'native';
39
+ const nativeStealthIntent = stealthEngine === 'native'
40
+ || (stealthEngine !== 'js' && Boolean(launchContext.launchOptions?.useNativeStealth
41
+ || fpOpts?.useNativeStealth
42
+ || launchContext?.useNativeStealth));
43
+ if (fpOpts) {
44
+ // 1. The JS spoof toggles are deprecated in favor of the canonical
45
+ // `stealth = { engine: 'js', overrides }` union (issue #80).
46
+ const JS_ONLY_KNOBS = [
47
+ 'spoofWebGL', 'spoofAudioContext', 'spoofClientRects',
48
+ 'spoofFonts', 'spoofPerformance', 'bypassCDPDetection',
49
+ 'maskAutomationFlags',
50
+ ];
51
+ const setJsKnobs = JS_ONLY_KNOBS.filter(k => fpOpts[k] !== undefined);
52
+ if (setJsKnobs.length) {
53
+ if (nativeStealthIntent) {
54
+ // Under native stealth the JS override pipeline is skipped
55
+ // entirely (the C++ anti-detect binary owns these surfaces),
56
+ // so these toggles have no effect - a common source of confusion.
57
+ log.warning(`[CDPCrawler] native stealth is enabled, so these launchOptions.fingerprintOptions `
58
+ + `toggles are ignored - the anti-detect binary owns those surfaces via its C++ `
59
+ + `source-tree edits: ${setJsKnobs.join(', ')}. See issue #80.`);
60
+ }
61
+ else if (!stealthConfigured) {
62
+ log.deprecated(`[CDPCrawler] launchOptions.fingerprintOptions.{${setJsKnobs.join(', ')}} `
63
+ + 'is deprecated and will be removed in 1.0.0 in favor of '
64
+ + "launchOptions.stealth = { engine: 'js', overrides: { ... } } (issue #80).");
65
+ }
66
+ }
67
+ // 2. `fingerprintOptions.platform` is a second OS home that duplicates
68
+ // (and can contradict) fingerprintGeneratorOptions.operatingSystems.
69
+ // It still works today; the single OS source lands in 1.0.0.
70
+ if (fpOpts.platform !== undefined) {
71
+ log.deprecated('[CDPCrawler] launchOptions.fingerprintOptions.platform is deprecated and will be removed in '
72
+ + '1.0.0 in favor of a single OS source, browserPoolOptions.fingerprintOptions.'
73
+ + 'fingerprintGeneratorOptions.operatingSystems (issue #80).');
74
+ }
75
+ }
76
+ // 3. The `useNativeStealth` boolean (at either launchOptions,
77
+ // fingerprintOptions, or launchContext level) is deprecated in favor
78
+ // of the canonical `stealth` union (issue #80). Suppressed when the
79
+ // caller is already on canonical `stealth` (which wins when both set).
80
+ const useNativeStealthSet = launchContext.launchOptions?.useNativeStealth !== undefined
81
+ || fpOpts?.useNativeStealth !== undefined
82
+ || launchContext?.useNativeStealth !== undefined;
83
+ if (useNativeStealthSet && !stealthConfigured) {
84
+ log.deprecated('[CDPCrawler] useNativeStealth is deprecated and will be removed in 1.0.0 in favor of '
85
+ + "launchOptions.stealth = { engine: 'native' } (issue #80).");
86
+ }
27
87
  // Pass fingerprintGeneratorOptions from browserPoolOptions to launchContext
28
- // This ensures the browser controller can regenerate fingerprints with correct OS/locale settings
29
- const fingerprintGeneratorOptions = poolOptions?.fingerprintOptions?.fingerprintGeneratorOptions;
30
- if (fingerprintGeneratorOptions) {
31
- launchContext.launchOptions ?? (launchContext.launchOptions = {});
32
- launchContext.launchOptions.fingerprintGeneratorOptions = fingerprintGeneratorOptions;
88
+ // This ensures the browser controller can regenerate fingerprints with correct OS/locale settings.
89
+ //
90
+ // Default-OS policy: when the caller hasn't pinned operatingSystems, lock the
91
+ // fingerprint sampler to the host OS we're actually running on. Without this,
92
+ // Crawlee's internal FingerprintGenerator draws from the union of macos/linux/
93
+ // windows samples and (e.g.) a Mac dev box ends up shipping Windows profiles
94
+ // ~33% of the time - every Worker probe then reports D3D11/AMD GPU against a
95
+ // host that actually has Metal/Apple Silicon, which is an instant
96
+ // cross-process consistency tell. Pinning to the host OS keeps the entire
97
+ // observable stack coherent (UA, UA-CH platform, WEBGL renderer, Worker GPU,
98
+ // CPU class) without forcing the caller to remember to pass it. Callers can
99
+ // still override by passing browserPoolOptions.fingerprintOptions.
100
+ // fingerprintGeneratorOptions.operatingSystems explicitly.
101
+ //
102
+ // Kill-switch: when the caller sets `useFingerprints: false` on
103
+ // browserPoolOptions, Crawlee's internal fingerprint pipeline is
104
+ // disabled - and so is cdp-crawler's consumption of
105
+ // `browserPoolOptions.fingerprintOptions.fingerprintGeneratorOptions`.
106
+ // In that mode `operatingSystems` (the single source of truth, issue
107
+ // #80) has nothing to drive, so a warning below tells the caller to keep
108
+ // fingerprints enabled if they need OS pinning. The deprecated
109
+ // `fingerprintOptions.platform` knob is still honoured downstream as a
110
+ // fallback until it is removed in 1.0.0.
111
+ const fingerprintsEnabled = browserPoolOptions.useFingerprints !== false;
112
+ if (fingerprintsEnabled) {
113
+ const HOST_OS_MAP = {
114
+ darwin: 'macos',
115
+ linux: 'linux',
116
+ win32: 'windows',
117
+ };
118
+ const hostOs = HOST_OS_MAP[process.platform];
119
+ const callerFingerprintGenOpts = poolOptions?.fingerprintOptions?.fingerprintGeneratorOptions;
120
+ // Single source of truth (issue #80): `operatingSystems` wins. If the
121
+ // caller ALSO set the deprecated `fingerprintOptions.platform` and the
122
+ // two disagree, warn (do not throw) - the resolved OS is derived from
123
+ // the fingerprint the generator produces for `operatingSystems`.
124
+ // Only the caller-supplied value triggers this; the host-OS auto-fill
125
+ // a few lines below is internal policy, not user intent.
126
+ const osConflict = describeOsConflict(callerFingerprintGenOpts?.operatingSystems?.[0], launchContext.launchOptions?.fingerprintOptions?.platform);
127
+ if (osConflict)
128
+ log.warning(osConflict);
129
+ const resolvedFingerprintGenOpts = {
130
+ ...(callerFingerprintGenOpts ?? {}),
131
+ };
132
+ if (!resolvedFingerprintGenOpts.operatingSystems?.length) {
133
+ // Derive auto-fill OS from the explicit `platform` pin first; fall
134
+ // back to the host OS only when no platform was set. This keeps the
135
+ // auto-fill from contradicting an explicit user platform pin (e.g.
136
+ // a Mac dev with `platform: 'Linux x86_64'` for testing should not
137
+ // get operatingSystems auto-filled to ['macos']).
138
+ const PLATFORM_TO_OS = {
139
+ 'MacIntel': 'macos',
140
+ 'Win32': 'windows',
141
+ 'Linux x86_64': 'linux',
142
+ };
143
+ const platformPin = launchContext.launchOptions?.fingerprintOptions?.platform;
144
+ const derivedOs = PLATFORM_TO_OS[platformPin] ?? hostOs;
145
+ if (derivedOs) {
146
+ resolvedFingerprintGenOpts.operatingSystems = [derivedOs];
147
+ }
148
+ }
149
+ if (resolvedFingerprintGenOpts.operatingSystems?.length) {
150
+ launchContext.launchOptions ?? (launchContext.launchOptions = {});
151
+ launchContext.launchOptions.fingerprintGeneratorOptions = resolvedFingerprintGenOpts;
152
+ // Assign the resolved OS onto our OWN `browserPoolOptions` copy only -
153
+ // this is the single bag Crawlee's internal FingerprintGenerator reads
154
+ // (browserPoolOptions.fingerprintOptions.fingerprintGeneratorOptions).
155
+ // We deliberately do NOT mutate the caller's `poolOptions` object:
156
+ // options resolve into config we own, never in-place edits of caller
157
+ // input (issue #80). `browserPoolOptions` was shallow-spread from
158
+ // `poolOptions`, so replacing its `fingerprintOptions` reference here
159
+ // leaves the caller's object untouched.
160
+ browserPoolOptions.fingerprintOptions = {
161
+ ...(poolOptions.fingerprintOptions ?? {}),
162
+ fingerprintGeneratorOptions: {
163
+ ...(poolOptions.fingerprintOptions?.fingerprintGeneratorOptions ?? {}),
164
+ operatingSystems: resolvedFingerprintGenOpts.operatingSystems,
165
+ },
166
+ };
167
+ }
168
+ }
169
+ else {
170
+ // useFingerprints: false → cdp-crawler ignores
171
+ // browserPoolOptions.fingerprintOptions entirely. Surface a loud
172
+ // warning if the caller still has non-trivial settings there, so
173
+ // they don't spend hours wondering why their `operatingSystems`
174
+ // hint isn't taking effect.
175
+ const stale = poolOptions?.fingerprintOptions?.fingerprintGeneratorOptions;
176
+ if (stale && (stale.operatingSystems?.length || stale.locales?.length || stale.devices?.length || stale.browsers?.length)) {
177
+ log.warning('[CDPCrawler] `browserPoolOptions.fingerprintOptions.fingerprintGeneratorOptions` is set but `useFingerprints: false` - '
178
+ + "Crawlee's fingerprint pipeline is disabled, so this setting is ignored. "
179
+ + 'To pin the session OS, keep `useFingerprints` enabled and set '
180
+ + '`fingerprintGeneratorOptions.operatingSystems`, the single source of truth for OS (issue #80).');
181
+ }
33
182
  }
34
183
  // Pass only launchOptions (not the whole launchContext) so CDPBrowserPlugin stores
35
184
  // executablePath, useNativeStealth, etc. at the right level.
@@ -1 +1 @@
1
- {"version":3,"file":"crawler.js","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC;AA+HpE,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,cAIpC;IACG;IACI,6BAA6B;IACZ,iBAAoC,EAAE,EACrC,SAAS,aAAa,CAAC,eAAe,EAAE;QAE1D,MAAM,EACF,aAAa,GAAG,EAAsB,EACtC,QAAQ,GAAG,KAAK,EAChB,kBAAkB,EAAE,WAAW,GAAG,EAAE,EACpC,GAAG,qBAAqB,EAC3B,GAAG,cAAc,CAAC;QAEnB,MAAM,kBAAkB,GAAG;YACvB,GAAG,WAAW;YACd,wDAAwD;YACxD,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,IAAI,CAAC;YAC/D,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,IAAI,GAAG;SAChE,CAAC;QAEF,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAClI,CAAC;QAED,yDAAyD;QACzD,IAAI,kBAAkB,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnB,aAAa,CAAC,aAAa,KAA3B,aAAa,CAAC,aAAa,GAAK,EAAE,EAAC;YACnC,aAAa,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAmB,CAAC;QAC/D,CAAC;QAED,4EAA4E;QAC5E,kGAAkG;QAClG,MAAM,2BAA2B,GAAI,WAAmB,EAAE,kBAAkB,EAAE,2BAA2B,CAAC;QAC1G,IAAI,2BAA2B,EAAE,CAAC;YAC9B,aAAa,CAAC,aAAa,KAA3B,aAAa,CAAC,aAAa,GAAK,EAAE,EAAC;YAClC,aAAa,CAAC,aAAqB,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QACnG,CAAC;QAED,mFAAmF;QACnF,6DAA6D;QAC7D,gFAAgF;QAChF,+EAA+E;QAC/E,kBAAkB,CAAC,cAAc,GAAG;YAChC,IAAI,gBAAgB,CAAC,IAAI,WAAW,EAAE,EAAE,aAAa,CAAC,aAAoB,CAAC;SAC9E,CAAC;QAEF,kEAAkE;QAClE,kDAAkD;QAClD,IAAI;QAEJ,8DAA8D;QAC9D,SAAS;QACT,KAAK,CAAC,EAAE,GAAG,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;QArD/E;;;;mBAAiB,cAAc;WAAwB;QACvD;;;;mBAAkB,MAAM;WAAkC;IAqD9D,CAAC;IAED,wEAAwE;IACrD,KAAK,CAAC,kBAAkB,CAAC,eAAmC,EAAE,WAAwB;QACrG,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;QAEjC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB;IACzF,CAAC;CACJ;AAMD,MAAM,UAAU,eAAe,CAE7B,MAA0C;IACxC,OAAO,MAAM,CAAC,MAAM,CAAU,MAAM,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"crawler.js","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"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"}
@@ -62,107 +62,10 @@
62
62
  */
63
63
  import type { BrowserFingerprintWithHeaders } from 'fingerprint-generator';
64
64
  import type CdpPage from "../page.js";
65
- import type { ResolvedLocale } from './locale-resolver.js';
66
- interface Viewport {
67
- width: number;
68
- height: number;
69
- deviceScaleFactor: number;
70
- mobile: boolean;
71
- }
72
- /**
73
- * Humanization options for simulating realistic user behavior
74
- * All options are disabled by default for performance
75
- */
76
- interface HumanizationOptions {
77
- /** Enable mouse movement humanization (Bezier curves, natural movement). Default: false */
78
- mouse?: boolean;
79
- /** Enable keyboard humanization (realistic typing delays). Default: false */
80
- keyboard?: boolean;
81
- /** Enable scroll humanization (natural physics, momentum). Default: false */
82
- scroll?: boolean;
83
- }
84
- interface AttachOptions {
85
- debug?: boolean;
86
- timezone?: string;
87
- proxyUrl?: string;
88
- detectTimezone?: boolean;
89
- viewport?: Viewport;
90
- enableAdvancedStealth?: boolean;
91
- bypassRuntimeEnable?: boolean;
92
- /** @deprecated Use humanization.mouse instead */
93
- humanizeInteractions?: boolean;
94
- spoofWebGL?: boolean;
95
- spoofAudioContext?: boolean;
96
- spoofClientRects?: boolean;
97
- maskAutomationFlags?: boolean;
98
- platform?: 'Win32' | 'MacIntel' | 'Linux x86_64';
99
- spoofFonts?: boolean;
100
- spoofPerformance?: boolean;
101
- spoofLocale?: boolean;
102
- useExperimentalFingerprints?: boolean;
103
- useFingerprintDefaults?: boolean;
104
- /** Enable CDP detection bypass (iframe, eval, sourceURL hiding) */
105
- bypassCDPDetection?: boolean;
106
- /** Enable storage API consistency (quota, IndexedDB, CacheStorage) */
107
- spoofStorage?: boolean;
108
- /** Enable timing consistency (Date.now, performance.now alignment) */
109
- spoofTiming?: boolean;
110
- /** Enable DataDome-specific bypass (JS challenges, proof-of-work) */
111
- enableDataDomeBypass?: boolean;
112
- /** WebRTC handling strategy. Default: 'spoof'. */
113
- webRtcPolicy?: 'spoof' | 'disable';
114
- /**
115
- * Alias for enableDataDomeBypass - enables all DataDome-specific protections
116
- * When true, injects enhanced bypass early in the script chain
117
- */
118
- bypassDatadome?: boolean;
119
- /**
120
- * Humanization options for simulating realistic user behavior.
121
- * All options are disabled by default for performance.
122
- * Enable specific options to simulate human-like interactions.
123
- */
124
- humanization?: HumanizationOptions;
125
- /**
126
- * When true, fingerprint was generated by the non-Apify real-device generator.
127
- * Currently informational only — the injector behaves identically since the output
128
- * matches the BrowserFingerprintWithHeaders shape.
129
- */
130
- useNonApifyFingerprints?: boolean;
131
- /**
132
- * Pre-resolved locale triple. When provided, drives CDP Emulation.setLocaleOverride,
133
- * Emulation.setTimezoneOverride, Accept-Language header, and the locale-spoofing
134
- * script's baked-in values. Supersedes any legacy `timezone`/`detectTimezone` logic:
135
- * if resolvedLocale.timezone is set, we skip the ipinfo.io round-trip.
136
- */
137
- resolvedLocale?: ResolvedLocale;
138
- /**
139
- * Completely disable all JS fingerprint overrides when the C++ anti-detect browser
140
- * is in use. Set this to true when launching with the custom Cromite-based anti-detect
141
- * browser (useNativeStealth in LaunchBrowserOptions).
142
- *
143
- * When true, the ENTIRE JS override pipeline is skipped — no fingerprint scripts are
144
- * injected via addScriptToEvaluateOnNewDocument. The C++ patches handle everything:
145
- * - canvas noise (patch 0009 + cromite-override 0002)
146
- * - audio fingerprinting (patch 0010)
147
- * - getBoundingClientRect noise (patch 0011)
148
- * - WebGL vendor/renderer (patch 0004)
149
- * - WebGPU adapter info (patch 0012)
150
- * - screen dimensions (patch 0006)
151
- * - navigator.platform (patch 0002)
152
- * - UA-CH structured data + HTTP headers (patch 0003)
153
- * - navigator.webdriver = false (patch 0001)
154
- * - CDP automation artifacts (patch 0005)
155
- * - Runtime.enable console side effects (patch 0015)
156
- * - automation sourceURL in Error stacks (patch 0015)
157
- *
158
- * Exception: humanization scripts (mouse/keyboard/scroll movement) are behavioral
159
- * rather than fingerprinting — they are still injected if explicitly enabled via
160
- * the `humanization` option.
161
- *
162
- * Default: false
163
- */
164
- useNativeStealth?: boolean;
165
- }
65
+ import { type AttachOptions } from './injection-planner.js';
66
+ export type { AttachOptions, HumanizationOptions, Viewport } from './injection-planner.js';
67
+ /** Test-only: drop the process-level runtime caches so runs start fresh. */
68
+ export declare function resetInjectorRuntimeCachesForTesting(): void;
166
69
  export declare class CdpFingerprintInjector {
167
70
  private page;
168
71
  constructor(page: CdpPage);
@@ -191,31 +94,38 @@ export declare class CdpFingerprintInjector {
191
94
  */
192
95
  private setUserAgentWithMetadata;
193
96
  private getTimezoneFromIp;
97
+ private fetchTimezoneFromIp;
194
98
  private setTimezoneOverride;
195
99
  /**
196
100
  * Override ICU's default locale for the page via CDP. This makes Intl.DateTimeFormat,
197
101
  * Intl.NumberFormat, and Date.toLocaleString default to the supplied locale regardless
198
- * of the browser binary's --lang setting — our reliable knob for the stock-Chrome path
102
+ * of the browser binary's --lang setting - our reliable knob for the stock-Chrome path
199
103
  * where we don't control the startup args.
200
104
  */
201
105
  private setLocaleOverride;
202
106
  /**
203
- * Create a debug script that logs fingerprint override status to the console
204
- */
205
- private createDebugScript;
206
- /**
207
- * Extract relevant data from fingerprint for overrides
107
+ * Identify the browser process behind this page's CDP connection. The
108
+ * remote-debugging host:port is unique per Chrome process, so it keys the
109
+ * per-browser-process version cache without bleeding across processes.
208
110
  */
209
- private extractFingerprintData;
111
+ private browserEndpointKey;
210
112
  private getActualChromeVersion;
211
- private alignUserAgentWithBrowserVersion;
113
+ private probeActualChromeVersion;
212
114
  /**
213
- * Align UA-CH brand versions with the actual running Chrome binary version.
214
- * Updates "Chromium" and "Google Chrome" brand major/full versions while
215
- * preserving the "Not_A Brand" GREASE token from the profile as-is.
115
+ * Mutate the shared fingerprint's navigator UA surfaces (userAgent, appVersion,
116
+ * userAgentData brands, and the headers UA) to the real binary version, in
117
+ * place. This is the SAME object Crawlee/BrowserPool's built-in
118
+ * FingerprintInjector reads in its postPageCreate hook, so aligning it here
119
+ * keeps navigator.userAgent, the Sec-CH-UA brands, and the wire User-Agent
120
+ * header all on the real binary version instead of the generator's (#104).
121
+ * No-op when the version couldn't be probed or the profile has no UA.
216
122
  */
217
- private alignUAClientHintsVersion;
123
+ private alignFingerprintUserAgent;
218
124
  attachToPage(browserFingerprintWithHeaders: BrowserFingerprintWithHeaders, options?: AttachOptions): Promise<void>;
125
+ /**
126
+ * Apply an InjectionPlan to the page. All CDP traffic for fingerprint
127
+ * injection happens here; every decision was made in the planner.
128
+ */
129
+ private applyPlan;
219
130
  }
220
- export {};
221
131
  //# sourceMappingURL=fingerprint-injector.d.ts.map