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.
- package/README.md +1 -607
- package/browser/fonts/macos-bundle/41-macos-remaining.conf +157 -0
- package/browser/fonts/macos-bundle/README.md +24 -0
- package/browser/fonts/macos-bundle/build-metric-fonts.py +1010 -0
- package/browser/fonts/macos-bundle/generated/AmericanTypewriter-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AmericanTypewriter-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AndaleMono-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AndaleMono-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AndaleMono-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AndaleMono-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AppleChancery-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AppleChancery-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AppleChancery-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AppleChancery-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Arial-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Arial-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Arial-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Arial-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialBlack-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialBlack-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialBlack-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialBlack-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialNarrow-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialNarrow-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialNarrow-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ArialNarrow-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Avenir-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Avenir-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Avenir-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Avenir-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNext-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNext-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNext-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNext-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/AvenirNextCondensed-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Baskerville-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Baskerville-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Baskerville-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Baskerville-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BigCaslon-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BigCaslon-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BigCaslon-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BigCaslon-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BlinkMacSystemFont-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Oldstyle-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Bodoni72Smallcaps-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BradleyHand-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/BrushScriptMT-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkboard-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkboard-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkboard-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkboard-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ChalkboardSE-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ChalkboardSE-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ChalkboardSE-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ChalkboardSE-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkduster-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkduster-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkduster-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Chalkduster-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Charter-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Charter-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Charter-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Charter-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Cochin-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Cochin-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Cochin-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Cochin-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ComicSansMS-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ComicSansMS-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ComicSansMS-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/ComicSansMS-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Copperplate-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Copperplate-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Courier-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Courier-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Courier-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Courier-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/CourierNew-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Didot-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Didot-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Didot-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Didot-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Futura-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Futura-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Futura-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Futura-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Geneva-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Georgia-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Georgia-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Georgia-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Georgia-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/GillSans-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/GillSans-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/GillSans-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/GillSans-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Helvetica-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Helvetica-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Helvetica-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Helvetica-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HelveticaNeue-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HelveticaNeue-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HelveticaNeue-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HelveticaNeue-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Herculanum-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Herculanum-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Herculanum-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Herculanum-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HoeflerText-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HoeflerText-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HoeflerText-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/HoeflerText-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Impact-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Impact-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Impact-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Impact-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/LucidaGrande-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/LucidaGrande-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/MarkerFelt-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/MarkerFelt-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/MarkerFelt-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/MarkerFelt-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Menlo-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Monaco-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Monaco-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Monaco-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Monaco-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Noteworthy-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Noteworthy-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Optima-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Optima-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Optima-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Optima-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Palatino-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Palatino-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Palatino-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Palatino-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Papyrus-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Papyrus-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Papyrus-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Papyrus-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/PartyLET-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/PartyLET-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/PartyLET-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/PartyLET-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Phosphate-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/README.md +132 -0
- package/browser/fonts/macos-bundle/generated/Rockwell-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Rockwell-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Rockwell-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Rockwell-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SavoyeLET-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SavoyeLET-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SavoyeLET-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SavoyeLET-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Seravek-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Seravek-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Seravek-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Seravek-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SignPainter-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SignPainter-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Skia-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Skia-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Skia-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Skia-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SnellRoundhand-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/SnellRoundhand-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Tahoma-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Tahoma-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Times-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Times-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Times-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Times-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TimesNewRoman-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TimesNewRoman-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TimesNewRoman-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TimesNewRoman-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Trattatello-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TrebuchetMS-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TrebuchetMS-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TrebuchetMS-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/TrebuchetMS-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Verdana-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Verdana-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Verdana-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Verdana-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Webdings-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Webdings-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Webdings-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Webdings-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Zapfino-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Zapfino-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Zapfino-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/Zapfino-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/manifest.json +2928 -0
- package/browser/fonts/macos-bundle/generated/systemui-Bold.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/systemui-BoldItalic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/systemui-Italic.ttf +0 -0
- package/browser/fonts/macos-bundle/generated/systemui-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/install.sh +136 -0
- package/browser/fonts/macos-bundle/vendor/README.md +30 -0
- package/browser/fonts/macos-bundle/vendor/anton/Anton-Regular.ttf +0 -0
- package/browser/fonts/macos-bundle/vendor/anton/OFL.txt +93 -0
- package/browser/fonts/macos-bundle/vendor/gelasio/Gelasio-Italic-VariableFont_wght.ttf +0 -0
- package/browser/fonts/macos-bundle/vendor/gelasio/Gelasio-VariableFont_wght.ttf +0 -0
- package/browser/fonts/macos-bundle/vendor/gelasio/OFL.txt +93 -0
- package/browser/fonts/macos-bundle/verify-metric-fonts.py +171 -0
- package/dist/browser-controller.d.ts +47 -4
- package/dist/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +219 -278
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +82 -110
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +405 -379
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/align-fingerprint-config.d.ts +36 -0
- package/dist/browser-process/align-fingerprint-config.d.ts.map +1 -0
- package/dist/browser-process/align-fingerprint-config.js +74 -0
- package/dist/browser-process/align-fingerprint-config.js.map +1 -0
- package/dist/browser-process/anti-detect-browser.d.ts +2 -2
- package/dist/browser-process/anti-detect-browser.js +7 -7
- package/dist/browser-process/anti-detect-config.d.ts +146 -2
- package/dist/browser-process/anti-detect-config.d.ts.map +1 -1
- package/dist/browser-process/anti-detect-config.js +432 -127
- package/dist/browser-process/anti-detect-config.js.map +1 -1
- package/dist/browser-process/browser.d.ts +25 -92
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +467 -79
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/browser-process/fingerprint-config.d.ts +146 -0
- package/dist/browser-process/fingerprint-config.d.ts.map +1 -0
- package/dist/browser-process/fingerprint-config.js +351 -0
- package/dist/browser-process/fingerprint-config.js.map +1 -0
- package/dist/browser-process/get-chrome-executable.d.ts +6 -0
- package/dist/browser-process/get-chrome-executable.d.ts.map +1 -1
- package/dist/browser-process/get-chrome-executable.js +79 -4
- package/dist/browser-process/get-chrome-executable.js.map +1 -1
- package/dist/browser-process/gpu-family-profiles.d.ts +58 -0
- package/dist/browser-process/gpu-family-profiles.d.ts.map +1 -0
- package/dist/browser-process/gpu-family-profiles.js +480 -0
- package/dist/browser-process/gpu-family-profiles.js.map +1 -0
- package/dist/browser-process/launch-options.d.ts +301 -0
- package/dist/browser-process/launch-options.d.ts.map +1 -0
- package/dist/browser-process/launch-options.js +2 -0
- package/dist/browser-process/launch-options.js.map +1 -0
- package/dist/browser-process/port-allocator.d.ts +64 -0
- package/dist/browser-process/port-allocator.d.ts.map +1 -0
- package/dist/browser-process/port-allocator.js +198 -0
- package/dist/browser-process/port-allocator.js.map +1 -0
- package/dist/browser-process/process.d.ts +85 -0
- package/dist/browser-process/process.d.ts.map +1 -1
- package/dist/browser-process/process.js +235 -19
- package/dist/browser-process/process.js.map +1 -1
- package/dist/browser-process/signal-cleanup.d.ts +40 -0
- package/dist/browser-process/signal-cleanup.d.ts.map +1 -0
- package/dist/browser-process/signal-cleanup.js +105 -0
- package/dist/browser-process/signal-cleanup.js.map +1 -0
- package/dist/browser-process/widevine-cdm.d.ts +144 -0
- package/dist/browser-process/widevine-cdm.d.ts.map +1 -0
- package/dist/browser-process/widevine-cdm.js +298 -0
- package/dist/browser-process/widevine-cdm.js.map +1 -0
- package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -1
- package/dist/browser-profiles/chrome/populate-profile.js +21 -22
- package/dist/browser-profiles/chrome/populate-profile.js.map +1 -1
- package/dist/connection/cdp-reconnection.d.ts +50 -0
- package/dist/connection/cdp-reconnection.d.ts.map +1 -0
- package/dist/connection/cdp-reconnection.js +75 -0
- package/dist/connection/cdp-reconnection.js.map +1 -0
- package/dist/connection/page-session.d.ts +114 -0
- package/dist/connection/page-session.d.ts.map +1 -0
- package/dist/connection/page-session.js +237 -0
- package/dist/connection/page-session.js.map +1 -0
- package/dist/connection/session-client.d.ts +34 -0
- package/dist/connection/session-client.d.ts.map +1 -0
- package/dist/connection/session-client.js +129 -0
- package/dist/connection/session-client.js.map +1 -0
- package/dist/crawler.d.ts +9 -88
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +157 -8
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.d.ts +24 -114
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.js +305 -611
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +16 -14
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +6 -2
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js +6 -2
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +1 -1
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +4 -4
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +4 -4
- package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts +18 -0
- package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/navigator-override.js +136 -0
- package/dist/fingerprinting/fingerprint-overrides/navigator-override.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/override.d.ts +151 -0
- package/dist/fingerprinting/fingerprint-overrides/override.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/override.js +14 -0
- package/dist/fingerprinting/fingerprint-overrides/override.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +46 -15
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/registry.d.ts +43 -0
- package/dist/fingerprinting/fingerprint-overrides/registry.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/registry.js +342 -0
- package/dist/fingerprinting/fingerprint-overrides/registry.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts +16 -0
- package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/screen-override.js +175 -0
- package/dist/fingerprinting/fingerprint-overrides/screen-override.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +1 -1
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +4 -4
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +75 -9
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +34 -20
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +28 -9
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +1 -1
- package/dist/fingerprinting/hardware-realism.d.ts +74 -0
- package/dist/fingerprinting/hardware-realism.d.ts.map +1 -0
- package/dist/fingerprinting/hardware-realism.js +155 -0
- package/dist/fingerprinting/hardware-realism.js.map +1 -0
- package/dist/fingerprinting/injection-planner.d.ts +133 -0
- package/dist/fingerprinting/injection-planner.d.ts.map +1 -0
- package/dist/fingerprinting/injection-planner.js +497 -0
- package/dist/fingerprinting/injection-planner.js.map +1 -0
- package/dist/fingerprinting/locale-resolver.d.ts +8 -1
- package/dist/fingerprinting/locale-resolver.d.ts.map +1 -1
- package/dist/fingerprinting/locale-resolver.js +26 -3
- package/dist/fingerprinting/locale-resolver.js.map +1 -1
- package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts +4 -4
- package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts.map +1 -1
- package/dist/fingerprinting/non-apify-fingerprint-generator.js +35 -69
- package/dist/fingerprinting/non-apify-fingerprint-generator.js.map +1 -1
- package/dist/fingerprinting/non-apify-profiles.json +10515 -8494
- package/dist/fingerprinting/os-consistency.d.ts +28 -0
- package/dist/fingerprinting/os-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/os-consistency.js +45 -0
- package/dist/fingerprinting/os-consistency.js.map +1 -0
- package/dist/fingerprinting/profile-quality.d.ts +25 -0
- package/dist/fingerprinting/profile-quality.d.ts.map +1 -0
- package/dist/fingerprinting/profile-quality.js +310 -0
- package/dist/fingerprinting/profile-quality.js.map +1 -0
- package/dist/fingerprinting/profile-selector.d.ts +102 -0
- package/dist/fingerprinting/profile-selector.d.ts.map +1 -0
- package/dist/fingerprinting/profile-selector.js +168 -0
- package/dist/fingerprinting/profile-selector.js.map +1 -0
- package/dist/fingerprinting/ua-alignment.d.ts +83 -0
- package/dist/fingerprinting/ua-alignment.d.ts.map +1 -0
- package/dist/fingerprinting/ua-alignment.js +197 -0
- package/dist/fingerprinting/ua-alignment.js.map +1 -0
- package/dist/fingerprinting/ua-ch-brands.d.ts +88 -0
- package/dist/fingerprinting/ua-ch-brands.d.ts.map +1 -0
- package/dist/fingerprinting/ua-ch-brands.js +174 -0
- package/dist/fingerprinting/ua-ch-brands.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/input/dropdown-selector.d.ts +90 -0
- package/dist/input/dropdown-selector.d.ts.map +1 -0
- package/dist/input/dropdown-selector.js +394 -0
- package/dist/input/dropdown-selector.js.map +1 -0
- package/dist/input/element-target.d.ts +152 -0
- package/dist/input/element-target.d.ts.map +1 -0
- package/dist/input/element-target.js +461 -0
- package/dist/input/element-target.js.map +1 -0
- package/dist/input/input-emulator.d.ts +85 -0
- package/dist/input/input-emulator.d.ts.map +1 -0
- package/dist/input/input-emulator.js +325 -0
- package/dist/input/input-emulator.js.map +1 -0
- package/dist/input/input-transport.d.ts +60 -0
- package/dist/input/input-transport.d.ts.map +1 -0
- package/dist/input/input-transport.js +28 -0
- package/dist/input/input-transport.js.map +1 -0
- package/dist/input/recording-transport.d.ts +32 -0
- package/dist/input/recording-transport.d.ts.map +1 -0
- package/dist/input/recording-transport.js +43 -0
- package/dist/input/recording-transport.js.map +1 -0
- package/dist/keyboard-layout.d.ts +2 -2
- package/dist/keyboard-layout.js +2 -2
- package/dist/navigation/page-navigation.d.ts +67 -0
- package/dist/navigation/page-navigation.d.ts.map +1 -0
- package/dist/navigation/page-navigation.js +122 -0
- package/dist/navigation/page-navigation.js.map +1 -0
- package/dist/network/network-watch.d.ts +110 -0
- package/dist/network/network-watch.d.ts.map +1 -0
- package/dist/network/network-watch.js +223 -0
- package/dist/network/network-watch.js.map +1 -0
- package/dist/page.d.ts +123 -104
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +348 -1129
- package/dist/page.js.map +1 -1
- package/dist/session/inject-hook.d.ts +24 -0
- package/dist/session/inject-hook.d.ts.map +1 -0
- package/dist/session/inject-hook.js +80 -0
- package/dist/session/inject-hook.js.map +1 -0
- package/dist/session/save.d.ts +21 -0
- package/dist/session/save.d.ts.map +1 -0
- package/dist/session/save.js +163 -0
- package/dist/session/save.js.map +1 -0
- package/dist/session/tar-data-dir.d.ts +18 -0
- package/dist/session/tar-data-dir.d.ts.map +1 -0
- package/dist/session/tar-data-dir.js +105 -0
- package/dist/session/tar-data-dir.js.map +1 -0
- package/dist/session/types.d.ts +80 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +29 -0
- package/dist/session/types.js.map +1 -0
- package/dist/session-profile.d.ts +102 -0
- package/dist/session-profile.d.ts.map +1 -0
- package/dist/session-profile.js +163 -0
- package/dist/session-profile.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +15 -6
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts +0 -87
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +0 -1
- package/dist/fingerprinting/custom-fingerprint-injector.js +0 -342
- package/dist/fingerprinting/custom-fingerprint-injector.js.map +0 -1
- package/dist/launcher-wrap.d.ts +0 -10
- package/dist/launcher-wrap.d.ts.map +0 -1
- package/dist/launcher-wrap.js +0 -11
- 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":"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"}
|
|
@@ -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"}
|