{"_id":"@zorilla/puppeteer-extra-plugin-stealth","_rev":"7-bfa1fbed86c86ee5a302d338f53bcbdb","name":"@zorilla/puppeteer-extra-plugin-stealth","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"1.0.0","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"license":"MIT","_id":"@zorilla/puppeteer-extra-plugin-stealth@1.0.0","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","bugs":{"url":"https://github.com/zorillajs/zorilla/issues"},"dist":{"shasum":"56519d4876547a2db15b1817cb919dafa7003e34","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-1.0.0.tgz","fileCount":270,"integrity":"sha512-2ZZWhCG1Ykya85IeliNKvKxQhNJV91zy+iPBx8c87YIQmTk0JCBRleIX6hmVG5SXxH6d7vStyjTrYqeGBjUzOA==","signatures":[{"sig":"MEQCIGvlp+t2VyyNNbTnv0Ty0jJ4c+QA5wN/iteubQ4R8NrjAiBIs7zH8I8DTS+Hi+E7DGprMwWte6p/SuYPV8FxT5Rd+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8702451},"main":"./dist/index.js","type":"module","_from":"file:zorilla-puppeteer-extra-plugin-stealth-1.0.0.tgz","types":"./dist/index.d.ts","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"scripts":{"lint":"eslint --ext .js,.ts .","test":"vitest run","build":"tsc && cp -r src/evasions dist/ && find dist/evasions -name '*.js' -exec sed -i '' \"s|'puppeteer-extra-plugin'|'@zorilla/puppeteer-extra-plugin'|g\" {} \\;","test:watch":"vitest"},"_npmUser":{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"},"_resolved":"/private/var/folders/tp/hp0mvz196r7gd3hk86ccj7h00000gn/T/958afdb48fea6dba16a4d2cbc362791e/zorilla-puppeteer-extra-plugin-stealth-1.0.0.tgz","_integrity":"sha512-2ZZWhCG1Ykya85IeliNKvKxQhNJV91zy+iPBx8c87YIQmTk0JCBRleIX6hmVG5SXxH6d7vStyjTrYqeGBjUzOA==","repository":{"url":"git+https://github.com/zorillajs/zorilla.git","type":"git"},"_npmVersion":"11.7.0","description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin":"1.0.0","@zorilla/puppeteer-extra-plugin-user-preferences":"1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"loop":"^3.3.6","vitest":"^4.0.17","fpcollect":"^1.0.5","fpscanner":"^0.1.5","puppeteer":"^24.35.0","@types/node":"^25.0.6","npm-run-all":"^4.1.5","@zorilla/puppeteer-extra":"1.0.0"},"peerDependencies":{"puppeteer-extra":"*","playwright-extra":"*"},"peerDependenciesMeta":{"puppeteer-extra":{"optional":true},"playwright-extra":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-extra-plugin-stealth_1.0.0_1768280975680_0.7909695081608472","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"1.0.1","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"license":"MIT","_id":"@zorilla/puppeteer-extra-plugin-stealth@1.0.1","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","bugs":{"url":"https://github.com/zorillajs/zorilla/issues"},"dist":{"shasum":"a174ec5c56168abceb9cffafd9df280b2c4c586c","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-1.0.1.tgz","fileCount":275,"integrity":"sha512-mLlrFksWav1TW0fLMTOy0oTHWUvkInfn1xgNlLdBPKwzUc08UFcwssdRJWlmZVsTLpW1M1eSUa7ET7q6SiVvsQ==","signatures":[{"sig":"MEQCIC0X/CFkHJLlGnoCuMuENF6AE4TzbvPjrldBWApJc2J9AiAdGfVymPhTW2CscmMQ2RME5UJHqvXVYReqlkyKvpBh+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@zorilla%2fpuppeteer-extra-plugin-stealth@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8749982},"main":"./dist/index.js","type":"module","_from":"file:zorilla-puppeteer-extra-plugin-stealth-1.0.1.tgz","types":"./dist/index.d.ts","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"scripts":{"lint":"eslint --ext .js,.ts .","test":"vitest run","build":"tsc && node scripts/fix-imports.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6982b385-f5b0-4005-986a-bacfed818fa5"}},"_resolved":"/tmp/a6b59553b74a8226748b9e05342c03af/zorilla-puppeteer-extra-plugin-stealth-1.0.1.tgz","_integrity":"sha512-mLlrFksWav1TW0fLMTOy0oTHWUvkInfn1xgNlLdBPKwzUc08UFcwssdRJWlmZVsTLpW1M1eSUa7ET7q6SiVvsQ==","repository":{"url":"git+https://github.com/zorillajs/zorilla.git","type":"git"},"_npmVersion":"11.6.2","description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin":"1.0.1","@zorilla/puppeteer-extra-plugin-user-preferences":"1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"loop":"^3.3.6","vitest":"^4.0.17","fpcollect":"^1.0.5","fpscanner":"^0.1.5","puppeteer":"^24.35.0","@types/node":"^25.0.6","@zorilla/puppeteer-extra":"1.0.1"},"peerDependencies":{"puppeteer-extra":"*","playwright-extra":"*"},"peerDependenciesMeta":{"puppeteer-extra":{"optional":true},"playwright-extra":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-extra-plugin-stealth_1.0.1_1768377107200_0.103902385068948","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"1.0.2","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"license":"MIT","_id":"@zorilla/puppeteer-extra-plugin-stealth@1.0.2","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","bugs":{"url":"https://github.com/zorillajs/zorilla/issues"},"dist":{"shasum":"135f079c2996b06020867d84f9d7e1ed38007ed6","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-1.0.2.tgz","fileCount":301,"integrity":"sha512-BueGVxCUZFKpN72lDjiacnJOBnvO8D1vthbJjxf4ydSzWzUMrq2R3VBSGLEY57OYeYfbIbt5qiYOXyinlHgMOw==","signatures":[{"sig":"MEUCIQC+E0CXyEuiOM7HtkiiYFstMgelbpRfK3mbBmhpfx9/EwIgZqA+SLWy/KddUiLtPM7cHexg7SkeZydOok3He/AqW44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@zorilla%2fpuppeteer-extra-plugin-stealth@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9132612},"main":"./dist/index.js","type":"module","_from":"file:zorilla-puppeteer-extra-plugin-stealth-1.0.2.tgz","types":"./dist/index.d.ts","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"scripts":{"lint":"eslint --ext .js,.ts .","test":"vitest run","build":"tsc && node scripts/fix-imports.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6982b385-f5b0-4005-986a-bacfed818fa5"}},"_resolved":"/tmp/78feeccb3ba4819f12f6defdd00284b4/zorilla-puppeteer-extra-plugin-stealth-1.0.2.tgz","_integrity":"sha512-BueGVxCUZFKpN72lDjiacnJOBnvO8D1vthbJjxf4ydSzWzUMrq2R3VBSGLEY57OYeYfbIbt5qiYOXyinlHgMOw==","repository":{"url":"git+https://github.com/zorillajs/zorilla.git","type":"git"},"_npmVersion":"11.6.2","description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin":"1.0.1","@zorilla/puppeteer-extra-plugin-user-preferences":"1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"loop":"^3.3.6","vitest":"^4.0.17","fpcollect":"^1.0.5","fpscanner":"^0.1.5","puppeteer":"^24.35.0","@types/node":"^24.10.9","@zorilla/puppeteer-extra":"1.0.1"},"peerDependencies":{"puppeteer-extra":"*","playwright-extra":"*"},"peerDependenciesMeta":{"puppeteer-extra":{"optional":true},"playwright-extra":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-extra-plugin-stealth_1.0.2_1769458138434_0.32744897050967836","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"1.0.3","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"license":"MIT","_id":"@zorilla/puppeteer-extra-plugin-stealth@1.0.3","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","bugs":{"url":"https://github.com/zorillajs/zorilla/issues"},"dist":{"shasum":"9594e9a435378dd74d4b391cf334d3aa60086b44","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-1.0.3.tgz","fileCount":303,"integrity":"sha512-KdlIVU3WvPsMpkWcT2EkBNkPs6Mhyqp6XNLbB8xahW3wGbwyU1gab4L5k9PlQRULPsYeE7jUv1+l1CcV/SurSg==","signatures":[{"sig":"MEUCIQD0BeeKfaNBpM7t1SGQMVpSQAxoG1ngV8FXi6VQihEBlgIgbdSrKAJdyg0Xgzb+2ZfvG/CMPmet2H5xjbHvKo58ZIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@zorilla%2fpuppeteer-extra-plugin-stealth@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9142592},"main":"./dist/index.js","type":"module","_from":"file:zorilla-puppeteer-extra-plugin-stealth-1.0.3.tgz","types":"./dist/index.d.ts","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"scripts":{"lint":"eslint --ext .js,.ts .","test":"vitest run","build":"tsc && node scripts/fix-imports.js","typecheck":"tsc --project tsconfig.test.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6982b385-f5b0-4005-986a-bacfed818fa5"}},"_resolved":"/tmp/d03e0d1d88a2db4b36bf94c43de8b74a/zorilla-puppeteer-extra-plugin-stealth-1.0.3.tgz","_integrity":"sha512-KdlIVU3WvPsMpkWcT2EkBNkPs6Mhyqp6XNLbB8xahW3wGbwyU1gab4L5k9PlQRULPsYeE7jUv1+l1CcV/SurSg==","repository":{"url":"git+https://github.com/zorillajs/zorilla.git","type":"git"},"_npmVersion":"11.11.0","description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin":"1.0.2","@zorilla/puppeteer-extra-plugin-user-preferences":"1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"loop":"^3.3.6","vitest":"^4.1.2","fpcollect":"^1.0.5","fpscanner":"^1.0.2","puppeteer":"^24.40.0","@types/node":"^24.10.9","@zorilla/puppeteer-extra":"1.0.2"},"peerDependencies":{"puppeteer-extra":"*","playwright-extra":"*"},"peerDependenciesMeta":{"puppeteer-extra":{"optional":true},"playwright-extra":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-extra-plugin-stealth_1.0.3_1775923373891_0.3882329227379082","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"1.0.4","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"license":"MIT","_id":"@zorilla/puppeteer-extra-plugin-stealth@1.0.4","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","bugs":{"url":"https://github.com/zorillajs/zorilla/issues"},"dist":{"shasum":"5ad51b503ef0de77749af4c527f5ef769fb4cfce","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-1.0.4.tgz","fileCount":303,"integrity":"sha512-gvGZxC9sqSICrx3AfHhqzPhyNUk6+2P+vjl4/VTmsg/nt2sCY7ANrwZDwjrDL/MjoSVf3Ym/TwaDiJXVXNkUHg==","signatures":[{"sig":"MEYCIQDnKgC1k2UNuomlNRq8h57Un+1pufovfqqeFuX7sgSXhwIhAOa68WcY6PuyhFgyH/2cyE5c0uSDLCVp3kFLqvA6n/kU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@zorilla%2fpuppeteer-extra-plugin-stealth@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9143181},"main":"./dist/index.js","type":"module","_from":"file:zorilla-puppeteer-extra-plugin-stealth-1.0.4.tgz","types":"./dist/index.d.ts","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"scripts":{"lint":"eslint --ext .js,.ts .","test":"vitest run","build":"tsc && node scripts/fix-imports.js","typecheck":"tsc --project tsconfig.test.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6982b385-f5b0-4005-986a-bacfed818fa5"}},"_resolved":"/tmp/6b9040ac90488c11565ba48150a92026/zorilla-puppeteer-extra-plugin-stealth-1.0.4.tgz","_integrity":"sha512-gvGZxC9sqSICrx3AfHhqzPhyNUk6+2P+vjl4/VTmsg/nt2sCY7ANrwZDwjrDL/MjoSVf3Ym/TwaDiJXVXNkUHg==","repository":{"url":"git+https://github.com/zorillajs/zorilla.git","type":"git"},"_npmVersion":"11.11.0","description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin":"1.0.2","@zorilla/puppeteer-extra-plugin-user-preferences":"1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"loop":"^3.3.6","vitest":"^4.1.2","fpcollect":"^1.0.5","fpscanner":"^1.0.2","puppeteer":"^24.40.0","@types/node":"^24.10.9","@zorilla/puppeteer-extra":"1.0.2"},"peerDependencies":{"puppeteer-extra":"*","playwright-extra":"*"},"peerDependenciesMeta":{"puppeteer-extra":{"optional":true},"playwright-extra":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-extra-plugin-stealth_1.0.4_1777130978304_0.3374386146298587","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"2.0.0","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"license":"MIT","_id":"@zorilla/puppeteer-extra-plugin-stealth@2.0.0","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","dist":{"shasum":"6c9058d4e0b40be0a53a50071eb394f163ebfa39","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.0.0.tgz","fileCount":303,"integrity":"sha512-JLW4dE9AvaW3q7HhiyLaXyCYzOjCdVu8LXV/cz1/1wLIQiC0U7WdI2wme1A6vPsI+dAuL1+7GRiycWEZNBpU2A==","signatures":[{"sig":"MEUCIHnpO8uXoy47ljTbwpBF3/TIXufHZDzD+Ul8ce6PIeX8AiEA3Fmjc3ERvcUd8Qoo7tDNYPTqFmsagyGoIz8m9gcvsrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@zorilla%2fpuppeteer-extra-plugin-stealth@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9175624},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"scripts":{"lint":"eslint --ext .js,.ts .","test":"vitest run","build":"tsc && node scripts/fix-imports.js","typecheck":"tsc --project tsconfig.test.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6982b385-f5b0-4005-986a-bacfed818fa5"}},"repository":{"url":"zorillajs/zorilla","type":"git"},"description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin":"2.0.0","@zorilla/puppeteer-extra-plugin-user-preferences":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"loop":"^3.3.6","vitest":"^4.1.2","fpcollect":"^1.0.5","fpscanner":"^1.0.2","puppeteer":"^25.0.0","@types/node":"^24.10.9","@zorilla/puppeteer-extra":"2.0.1"},"peerDependencies":{"puppeteer-extra":"*","playwright-extra":"*"},"peerDependenciesMeta":{"puppeteer-extra":{"optional":true},"playwright-extra":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-extra-plugin-stealth_2.0.0_1784394582522_0.28506496703125306","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@zorilla/puppeteer-extra-plugin-stealth","version":"2.0.1","description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./evasions/*":"./dist/evasions/*/index.js"},"repository":{"type":"git","url":"zorillajs/zorilla"},"homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","authors":["berstend","Justin Beckwith <justin.beckwith@gmail.com>"],"license":"MIT","engines":{"node":">=22"},"keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"devDependencies":{"@types/node":"^24.10.9","fpcollect":"^1.0.5","fpscanner":"^1.0.2","loop":"^3.3.6","puppeteer":"^25.0.0","vitest":"^4.1.2","@zorilla/puppeteer-extra":"2.0.2"},"dependencies":{"debug":"^4.4.3","@zorilla/puppeteer-extra-plugin-user-preferences":"2.0.1","@zorilla/puppeteer-extra-plugin":"2.0.1"},"peerDependencies":{"@zorilla/playwright-extra":"^2.0.0","@zorilla/puppeteer-extra":"^2.0.2"},"peerDependenciesMeta":{"@zorilla/puppeteer-extra":{"optional":true},"@zorilla/playwright-extra":{"optional":true}},"scripts":{"build":"tsc && node scripts/fix-imports.js","typecheck":"tsc --project tsconfig.test.json --noEmit","test":"vitest run","test:watch":"vitest","lint":"eslint --ext .js,.ts ."},"_nodeVersion":"24.18.0","_id":"@zorilla/puppeteer-extra-plugin-stealth@2.0.1","dist":{"integrity":"sha512-w4yEjAuwaLm+3TNEr2Qs/P8L2MjAJHZg7DVruSnv628XGTkhQwIKhvJ2EoBrNTD8BcpiZRUl5HyGhFLYc8+gvQ==","shasum":"c38b49af95dec7016f4ecb89b3226bf6620faf6a","tarball":"https://registry.npmjs.org/@zorilla/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.0.1.tgz","fileCount":303,"unpackedSize":9176512,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@zorilla%2fpuppeteer-extra-plugin-stealth@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDG2lAq4MGvr+xwdXs+uEl3yPpplpdQoZ7S4EcEJRbTyAiBADkZhgXFVIDOz1FXKqSRC1LvWnYDls1/XN3/8lWeIpQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6982b385-f5b0-4005-986a-bacfed818fa5"}},"directories":{},"maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/puppeteer-extra-plugin-stealth_2.0.1_1784611161442_0.595718878480813"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-13T05:09:35.596Z","modified":"2026-07-21T05:19:22.096Z","1.0.0":"2026-01-13T05:09:36.067Z","1.0.1":"2026-01-14T07:51:47.580Z","1.0.2":"2026-01-26T20:08:58.832Z","1.0.3":"2026-04-11T16:02:54.312Z","1.0.4":"2026-04-25T15:29:38.745Z","2.0.0":"2026-07-18T17:09:42.803Z","2.0.1":"2026-07-21T05:19:21.780Z"},"license":"MIT","homepage":"https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-stealth#readme","keywords":["puppeteer","puppeteer-extra","puppeteer-extra-plugin","stealth","stealth-mode","detection-evasion","crawler","chrome","headless","pupeteer"],"repository":{"type":"git","url":"zorillajs/zorilla"},"description":"Stealth mode: Applies various techniques to make detection of headless puppeteer harder.","maintainers":[{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"}],"readme":"# @zorilla/puppeteer-extra-plugin-stealth [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/zorillajs/zorilla/test.yml?branch=main&event=push) [![npm](https://img.shields.io/npm/v/@zorilla/puppeteer-extra-plugin-stealth.svg)](https://www.npmjs.com/package/@zorilla/puppeteer-extra-plugin-stealth)\n\n> A plugin for [`puppeteer-extra`](https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra) and [`playwright-extra`](https://github.com/zorillajs/zorilla/tree/main/packages/playwright-extra) to prevent detection.\n\n<p align=\"center\"><img src=\"https://i.imgur.com/q2xBjqH.png\" /></p>\n\n## Install\n\n```bash\nnpm install @zorilla/puppeteer-extra-plugin-stealth\n```\n\nIf this is your first [`puppeteer-extra`](https://github.com/zorillajs/zorilla) plugin here's everything you need:\n\n```bash\nnpm install puppeteer @zorilla/puppeteer-extra @zorilla/puppeteer-extra-plugin-stealth\n```\n\n## Usage\n\n```js\n// puppeteer-extra is a drop-in replacement for puppeteer,\n// it augments the installed puppeteer with plugin functionality\nimport puppeteer from '@zorilla/puppeteer-extra'\n\n// add stealth plugin and use defaults (all evasion techniques)\nimport StealthPlugin from '@zorilla/puppeteer-extra-plugin-stealth'\npuppeteer.use(StealthPlugin())\n\n// puppeteer usage as normal\npuppeteer.launch({ headless: true }).then(async browser => {\n  console.log('Running tests..')\n  const page = await browser.newPage()\n  await page.goto('https://bot.sannysoft.com')\n  await page.waitForTimeout(5000)\n  await page.screenshot({ path: 'testresult.png', fullPage: true })\n  await browser.close()\n  console.log(`All done, check the screenshot. ✨`)\n})\n```\n\n> Please check out the [puppeteer-extra package](https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra) to learn more about `puppeteer-extra` (Firefox usage, other Plugins, etc).\n\n## Status\n\n- ✅ **`puppeteer-extra` with stealth passes all public bot tests.**\n\nPlease note: I consider this a friendly competition in a rather interesting cat and mouse game. If the other team (👋) wants to detect headless chromium there are still ways to do that (at least I noticed a few, which I'll tackle in future updates).\n\nIt's probably impossible to prevent all ways to detect headless chromium, but it should be possible to make it so difficult that it becomes cost-prohibitive or triggers too many false-positives to be feasible.\n\nIf something new comes up or you experience a problem, please do your homework and create a PR in a respectful way (this is Github, not reddit) or I might not be motivated to help. :)\n\n## Test results (red is bad)\n\n#### Vanilla puppeteer <strong>without stealth 😢</strong>\n\n<table class=\"image\">\n<tr>\n\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headless-chromium-vanilla.js.png\"><img src=\"./test/stealth/_results/_thumbs/headless-chromium-vanilla.js.png\"></a><figcaption>Chromium + headless</figcaption></figure></td>\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headful-chromium-vanilla.js.png\"><img src=\"./test/stealth/_results/_thumbs/headful-chromium-vanilla.js.png\"></a><figcaption>Chromium + headful</figcaption></figure></td>\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headless-chrome-vanilla.js.png\"><img src=\"./test/stealth/_results/_thumbs/headless-chrome-vanilla.js.png\"></a><figcaption>Chrome + headless</figcaption></figure></td>\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headful-chrome-vanilla.js.png\"><img src=\"./test/stealth/_results/_thumbs/headful-chrome-vanilla.js.png\"></a><figcaption>Chrome + headful</figcaption></figure></td>\n\n</tr>\n</table>\n\n#### Puppeteer <strong>with stealth plugin 💯</strong>\n\n<table class=\"image\">\n<tr>\n\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headless-chromium-stealth.js.png\"><img src=\"./test/stealth/_results/_thumbs/headless-chromium-stealth.js.png\"></a><figcaption>Chromium + headless</figcaption></figure></td>\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headful-chromium-stealth.js.png\"><img src=\"./test/stealth/_results/_thumbs/headful-chromium-stealth.js.png\"></a><figcaption>Chromium + headful</figcaption></figure></td>\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headless-chrome-stealth.js.png\"><img src=\"./test/stealth/_results/_thumbs/headless-chrome-stealth.js.png\"></a><figcaption>Chrome + headless</figcaption></figure></td>\n  <td><figure class=\"image\"><a href=\"./test/stealth/_results/headful-chrome-stealth.js.png\"><img src=\"./test/stealth/_results/_thumbs/headful-chrome-stealth.js.png\"></a><figcaption>Chrome + headful</figcaption></figure></td>\n\n</tr>\n</table>\n\n> Note: The `MQ_SCREEN` test is broken on their page (will fail in regular Chrome as well).\n\nTests have been done using [this test site](https://bot.sannysoft.com/) and these scripts in `test/stealth/`.\n\n#### Improved reCAPTCHA v3 scores\n\nUsing stealth also seems to help with maintaining a normal [reCAPTCHA v3 score](https://developers.google.com/recaptcha/docs/v3#score).\n\n<table class=\"image\">\n<tr>\n\n  <td><figure class=\"image\"><figcaption><code>Regular Puppeteer</code></figcaption><br/><img src=\"https://i.imgur.com/rHEH69b.png\"></figure></td>\n  <td><figure class=\"image\"><figcaption><code>Stealth Puppeteer</code></figcaption><br/><img src=\"https://i.imgur.com/2if496Z.png\"></figure></td>\n\n</tr>\n</table>\n\nNote: The [official test](https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php) is to be taken with a grain of salt, as the score is calculated individually per site and multiple other factors (past behaviour, IP address, etc). Based on anecdotal observations it still seems to work as a rough indicator.\n\n_**Tip:** Have a look at the [recaptcha plugin](https://github.com/zorillajs/zorilla/tree/main/packages/puppeteer-extra-plugin-recaptcha) if you have issues with reCAPTCHAs._\n\n## API\n\n\n#### Table of Contents\n\n- [puppeteer-extra-plugin-stealth \\[ ](#puppeteer-extra-plugin-stealth---)\n  - [Install](#install)\n  - [Usage](#usage)\n  - [Status](#status)\n  - [Changelog](#changelog)\n    - [`v2.4.7`](#v247)\n    - [`v2.4.2` / `v2.4.1`](#v242--v241)\n    - [`v2.4.0`](#v240)\n  - [Test results (red is bad)](#test-results-red-is-bad)\n    - [Vanilla puppeteer without stealth 😢](#vanilla-puppeteer-without-stealth-)\n    - [Puppeteer with stealth plugin 💯](#puppeteer-with-stealth-plugin-)\n    - [Improved reCAPTCHA v3 scores](#improved-recaptcha-v3-scores)\n  - [API](#api)\n    - [Table of Contents](#table-of-contents)\n    - [class: StealthPlugin](#class-stealthplugin)\n      - [Purpose](#purpose)\n      - [Modularity](#modularity)\n      - [Contributing](#contributing)\n      - [Kudos](#kudos)\n      - [.availableEvasions](#availableevasions)\n      - [.enabledEvasions](#enabledevasions)\n    - [defaultExport(opts?)](#defaultexportopts)\n  - [License](#license)\n\n### class: [StealthPlugin](https://github.com/zorillajs/zorilla/blob/e6133619b051febed630ada35241664eba59b9fa/packages/puppeteer-extra-plugin-stealth/index.js#L72-L162)\n\n- `opts` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** Options (optional, default `{}`)\n  - `opts.enabledEvasions` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>?** Specify which evasions to use (by default all)\n\n**Extends: PuppeteerExtraPlugin**\n\nStealth mode: Applies various techniques to make detection of headless puppeteer harder. 💯\n\n#### Purpose\n\nThere are a couple of ways the use of puppeteer can easily be detected by a target website.\nThe addition of `HeadlessChrome` to the user-agent being only the most obvious one.\n\nThe goal of this plugin is to be the definite companion to puppeteer to avoid\ndetection, applying new techniques as they surface.\n\nAs this cat & mouse game is in it's infancy and fast-paced the plugin\nis kept as flexibile as possible, to support quick testing and iterations.\n\n#### Modularity\n\nThis plugin uses `puppeteer-extra`'s dependency system to only require\ncode mods for evasions that have been enabled, to keep things modular and efficient.\n\nThe `stealth` plugin is a convenience wrapper that requires multiple [evasion techniques](./src/evasions/README.md)\nautomatically and comes with defaults. You could also bypass the main module and require\nspecific evasion plugins yourself, if you whish to do so (as they're standalone `puppeteer-extra` plugins):\n\n```js\n// bypass main module and import a specific stealth plugin directly:\nimport WebGLVendor from '@zorilla/puppeteer-extra-plugin-stealth/evasions/webgl.vendor'\npuppeteer.use(WebGLVendor())\n```\n\n#### Contributing\n\nPRs are welcome, if you want to add a new evasion technique I suggest you\nlook at the [template](./src/evasions/_template/README.md) to kickstart things.\n\n#### Kudos\n\nThanks to [Evan Sangaline](https://intoli.com/blog/not-possible-to-block-chrome-headless/) and [Paul Irish](https://github.com/paulirish/headless-cat-n-mouse) for kickstarting the discussion!\n\n---\n\nExample:\n\n```javascript\nimport puppeteer from '@zorilla/puppeteer-extra'\nimport StealthPlugin from '@zorilla/puppeteer-extra-plugin-stealth'\n\n// Enable stealth plugin with all evasions\npuppeteer.use(StealthPlugin())\n;(async () => {\n  // Launch the browser in headless mode and set up a page.\n  const browser = await puppeteer.launch({\n    args: ['--no-sandbox'],\n    headless: true\n  })\n  const page = await browser.newPage()\n\n  // Navigate to the page that will perform the tests.\n  const testUrl =\n    'https://intoli.com/blog/' +\n    'not-possible-to-block-chrome-headless/chrome-headless-test.html'\n  await page.goto(testUrl)\n\n  // Save a screenshot of the results.\n  const screenshotPath = '/tmp/headless-test-result.png'\n  await page.screenshot({ path: screenshotPath })\n  console.log('have a look at the screenshot:', screenshotPath)\n\n  await browser.close()\n})()\n```\n\n---\n\n#### .[availableEvasions](https://github.com/zorillajs/zorilla/blob/e6133619b051febed630ada35241664eba59b9fa/packages/puppeteer-extra-plugin-stealth/index.js#L128-L130)\n\nType: **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**\n\nGet all available evasions.\n\nPlease look into the [evasions directory](./src/evasions/README.md) for an up to date list.\n\nExample:\n\n```javascript\nimport StealthPlugin from '@zorilla/puppeteer-extra-plugin-stealth'\n\nconst pluginStealth = StealthPlugin()\nconsole.log(pluginStealth.availableEvasions) // => Set { 'chrome.app', 'chrome.runtime', 'navigator.webdriver', ... }\npuppeteer.use(pluginStealth)\n```\n\n---\n\n#### .[enabledEvasions](https://github.com/zorillajs/zorilla/blob/e6133619b051febed630ada35241664eba59b9fa/packages/puppeteer-extra-plugin-stealth/index.js#L145-L147)\n\nType: **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>**\n\nGet all enabled evasions.\n\nEnabled evasions can be configured either through `opts` or by modifying this property.\n\nExample:\n\n```javascript\n// Remove specific evasion from enabled ones dynamically\nimport StealthPlugin from '@zorilla/puppeteer-extra-plugin-stealth'\n\nconst pluginStealth = StealthPlugin()\npluginStealth.enabledEvasions.delete('chrome.runtime')\npuppeteer.use(pluginStealth)\n```\n\n---\n\n### [defaultExport(opts?)](https://github.com/zorillajs/zorilla/blob/e6133619b051febed630ada35241664eba59b9fa/packages/puppeteer-extra-plugin-stealth/index.js#L170-L170)\n\n- `opts` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** Options\n  - `opts.enabledEvasions` **[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>?** Specify which evasions to use (by default all)\n\nDefault export, PuppeteerExtraStealthPlugin\n\n---\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":""}