Replace static stealthChromiumScripts and stealthFirefoxScripts slices with buildChromiumStealthScripts() and buildFirefoxStealthScripts() builder functions that accept hardware profile structs
Add pools of 6 realistic hardware profiles per engine (Chromium uses ANGLE strings, Firefox uses Mesa/native driver strings), randomly sampled per session via math/rand/v2
Replace static stealthChromiumScripts and stealthFirefoxScripts slices
with builder functions that accept hardware profile structs. Each browser
session now randomly selects from a pool of 6 realistic profiles per
engine, and Chromium connection stats receive per-session jitter (±20ms
RTT, ±2 Mbps downlink). This prevents anti-bot systems from correlating
sessions via identical WebGL, connection, mozInnerScreen, and
hardwareConcurrency fingerprints.
Closes#71
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
stealthChromiumScriptsandstealthFirefoxScriptsslices withbuildChromiumStealthScripts()andbuildFirefoxStealthScripts()builder functions that accept hardware profile structsmath/rand/v2Parent: Epic #68
Closes: #71
Test plan
go build ./...passesgo vet ./...cleango test ./...— all 14 adapted tests pass with builder functions, plus 7 new tests:TestChromiumHWProfiles_NotEmpty/TestFirefoxHWProfiles_NotEmpty— pool has ≥2 entriesTestBuildChromiumStealthScripts_ProfileValues/TestBuildFirefoxStealthScripts_ProfileValues— known profile values appear in outputTestBuildChromiumStealthScripts_ConnectionJitter— 50 calls with same profile, connection script variesTestChromiumHWProfiles_NoSingleQuotes/TestFirefoxHWProfiles_NoSingleQuotes— guard against JS string breakage🤖 Generated with Claude Code