{"_id":"camofox-browser","_rev":"39-286330464cfbc3fb99c0ca9ae6ca096a","name":"camofox-browser","dist-tags":{"latest":"2.5.0"},"versions":{"1.0.0":{"name":"camofox-browser","version":"1.0.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.0.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"7ec7e2c752339e719b1e65e5791820731c70db46","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.0.0.tgz","fileCount":66,"integrity":"sha512-Kx5qP6a0wfIlNZ9z5TiTpwqogfj6g9X4loLac0XzJ9XVlJBfF3kuZ0hg/UBOb3dGnE8fDWhzo1Ao64t8KEgFsg==","signatures":[{"sig":"MEQCIFGIcsygRiAUjEbxXSZTnwxd0PEMJvVZmeiQT53MaKsJAiAC0eCGQJ4mUoG8zzqs+w08rjZETtWZPiOut264ao7/nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277585},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"5512eee5d4edb3d5d32750aae7f3ec753ebbc1bf","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.0.0_1771138040835_0.6159558170574446","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"camofox-browser","version":"1.0.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.0.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"2caffd84c5776d4a6b7de2da930891103249f270","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.0.1.tgz","fileCount":66,"integrity":"sha512-ZCXaxhokhst15krsqsI0jQ+3Z5Wl5Nk2aKrfniuFiqKEfTj8papSsbDMPIL5zs32mM4CYmI4GDh0IlgxzrcgBA==","signatures":[{"sig":"MEUCIHXscxilUOjHcwb4AxQwKiE+DcmwkivnhN4/6ev39u7UAiEA6EanBvmZCV8MSHUwwOqdvlBXoWSRZyyO+MzWc/LCzzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278738},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"60f1edd4849734e6f86ec661fd330d5d83ae4e98","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.0.1_1771144655953_0.4467809477395388","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"camofox-browser","version":"1.0.2","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.0.2","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"cde1c8d1dd7c41370a64337a3df9269d163e6edf","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.0.2.tgz","fileCount":66,"integrity":"sha512-lFrlqQgeZXBmkuHga3eN6vWOpZpLnvoXDiKtbwzitXu19sUeHGQKJaBCUmB8yGHxAU28gYG7jQeLdljFq0lpPw==","signatures":[{"sig":"MEUCIQC6LBB/aSUmrZ3bdmC9BR5da+AjAsZyoX0HjVejvMaZ7wIgV25RCUKeLsh3toc3s66yCQxCbH/GzRDLYN+2HdJesT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281433},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"4c9e46eb97bdbdd1eba1dcfae70a814bf7723a6d","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.0.2_1771151494884_0.6959513680199674","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"camofox-browser","version":"1.0.3","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.0.3","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"9d26bd1ce7cb7504260d1c4e133dab37f5624dea","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.0.3.tgz","fileCount":66,"integrity":"sha512-QtaeChqueAtMlk9CRiok8KIbbSnJaPTOZNEINK6FIU8QYdVF+c2samWAIY7fm+SHpH4BDTh76TztcIN82WluNg==","signatures":[{"sig":"MEUCIQCCH4NZf1ZvgsPZwuXRykIckDk7GjYnGHKWnPZccuZmYgIgQGUV/F67cHomEE2ahGqOp7Iqel0sZ0ueDluSxKNtJY4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282448},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"e7c64c7e25478f79cd4ff0e336e08f76d1140034","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.0.3_1771152644910_0.31558010352248544","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"camofox-browser","version":"1.1.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.1.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"964ac95c8850fdcf436caf5de824cb2b91225c3d","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.1.0.tgz","fileCount":66,"integrity":"sha512-U9gW5Vvtw0/YQ2wh3zalyWxAu8kSqfOzwCanpwVbTLJ1K8d0rSbrI1vSOnofailVVnTMkkmPPmRzIU0zuK47xg==","signatures":[{"sig":"MEYCIQDlQSt2vWsaoRx3+UxMD9ArW765jRpLXL1oe+ngfJ0DpgIhAK/JEgKnC1ox+rOo20freQ2/PWRkcPoKyT6pfjAP9KYw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299935},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"3c4a031d46eef9d9f4e3a3e5b40fd4f34b42e4ff","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.1.0_1771204508470_0.12810489440996276","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"camofox-browser","version":"1.1.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.1.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"cf6ce3b16953017ebaa1cd8094846ddfd7698a2d","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.1.1.tgz","fileCount":67,"integrity":"sha512-oIZ5e+UmcFuucvu4BKlsuayP9M4eYEO4Ykz3ehvHmjfPE5JMYDnqHYqt6yBB2u2IUyBlrL2v9mbRfi++0ttBTQ==","signatures":[{"sig":"MEQCICElDDSwHIj11iZufDfvaNeYnh7xyiIgAs0H1YPeAjWkAiBfvp0eBtVoAriiR/bTs/mEl1FYrf7TOsELaNaJZw29iA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301875},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"e29b822e00ba79413b7c3c5a7afe037f84d79dc6","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.1.1_1771217054632_0.7675306514784539","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"camofox-browser","version":"1.1.2","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.1.2","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"9af7e0923d13b914b878632b11163d91214c6036","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.1.2.tgz","fileCount":67,"integrity":"sha512-D9wXX3FO8aaQlqHseNsNy153F3hcFf0CHy2mIenu12pbq0Ep0FZF/msMVXx8rk2xi8z8vMVGzX2hSg6kiexxEQ==","signatures":[{"sig":"MEUCIQD9pA5EbTwS56GxHkQdpmOBXUqLDa5RmKXBIwlgkoRthgIgdLnqMj9TrITNgGuYcYAeRHnyz020i3VDcUm6kYRSHKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302058},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"f36086b6c62339126b874e36b01c422e95c30d00","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.1.2_1771220018191_0.28327618895623874","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"camofox-browser","version":"1.2.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.2.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"2c6209d970a6574d6b22714f542db4e685477622","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.2.0.tgz","fileCount":67,"integrity":"sha512-4Ht35sQ5Efp14hfooTuqOeuvcN7XA3ojhmnuvOLuP3RJtaWKxQbmOHuPV4UNrBiCd1XMjJfi34PCX/9s58ynow==","signatures":[{"sig":"MEYCIQCPO10vfTgRz80mg9hLrl2ox8qiEc6VcFxp7jyDj7hAgwIhAJt/E66ObwReyy4WT3/bxjyHvkCkf1wQVjrmOny/5l3D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302002},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"4c30d14e888b79e14460329827927a09f92cac46","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.2.0_1771379746217_0.7688583068036596","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"camofox-browser","version":"1.3.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.3.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"141010cd3ce5f6a0f376d28323f4a4497955360f","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.3.0.tgz","fileCount":71,"integrity":"sha512-8YLgZFUfs7fiw3nbKjXBWaJzYmkj/mIvJPCI318mJufUCeF/qEQyXMI6YAoMIm23nCvKjMnqAatBIdRkIKo05g==","signatures":[{"sig":"MEUCIQC2CjZr1i33DyytTzRKHgZAWn2IhKiPqVmAmSx1jK8tjgIgKcwmFIuCkxjqkf8tB67IimbNul2LjfS9wFdtbrW3iu0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322567},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"f2d1155d2c25b1a3f0141b6524f230f353e7dad3","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.3.0_1771390522905_0.19380977803052502","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"camofox-browser","version":"1.4.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.4.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"de3d77ec85a6d69b3338b4275af83625a3987882","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.4.0.tgz","fileCount":71,"integrity":"sha512-Z8isqtdjL8h5PJYZeh66ir6LFEJDdYYPuaDlNG2sxnC0Z1Azmw2o2arrhTgn/1yzgSgkiPq9aXDpo6EbLUVUMw==","signatures":[{"sig":"MEQCIFzWUZ8MPIh2KG+O1XVfKcP8Ac1smAD2utFd6TXGuQ1aAiAXB6/ze3jpWPo3c93iA44Q5R0L0ctUXt1M3hNS0BTe9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330285},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"2f5d75f065b3e745ffd749ad0b81487c37df9343","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.4.0_1771418031808_0.19827572368159996","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"camofox-browser","version":"1.5.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.5.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"9e50585755ae09a3088ed92a9085e986d23ecf31","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.5.0.tgz","fileCount":86,"integrity":"sha512-5LU5syJgceTHQoi7rtXgkTn5ukmPKeXxYDL4AES2tP9b3v5Pez3esYmMNv9nPgxw0/X14UBhZhUawgVkNpEQjQ==","signatures":[{"sig":"MEYCIQCyLo6dimy07LYcL0nWWM/Xzh1kuRDIYxW4Wz4n8OdT4QIhAKDWuzaCc3wvUUa57eDJ+Ma+CEqVjq2RU6CT5xet6c2t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456848},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"c9a76dcb69bdbacfa76ee90576b9aab4ed782e24","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.5.0_1771561705234_0.35834899831835965","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"camofox-browser","version":"1.5.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.5.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"c2e4b8b2ab3833c19071762c4d062d14dda390eb","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.5.1.tgz","fileCount":86,"integrity":"sha512-6MIKa2Q1dVfL1ZmZctH0MBWFVu9QagE7t3ezR/n69T0ylspkYvc7Hb3mnsUfXj7erkkV6h5ALZI1V6E2iI4gvQ==","signatures":[{"sig":"MEUCIQC4gd5bpwaUh4k5JZivPcUR3rcA4I8VgxSHqATVWBVMpwIgdGwxiFqAB51YOxcCV13558CA2FkWiFypeoQp+8Fq9v0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":457783},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"c98227df94f84962106bfe0e8c2db0a97ab7b798","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.5.1_1771577590961_0.18945904668188907","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"camofox-browser","version":"1.5.2","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.5.2","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"67aa429b3f5bab60ff791d734143a1763a1ac6ee","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.5.2.tgz","fileCount":86,"integrity":"sha512-i10tOlcOmHwtADgH55As4Pmvfji609HCt+NXdY4Phi2x6Bte3DLzzzJeYf0ViYSNiKl13JhsEYXzIsgcb95DHw==","signatures":[{"sig":"MEQCIHXOKNQwCErg73W+XRvlRuRzMZndb8vnBOu5to98g6g4AiAZvCBRMyI8oi00iyCb6jjBPaW9twG3XB2Js0/Eid/Rbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":476524},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"1456ecce061dec16cde38816a3c8dc3d12f02507","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.5.2_1771584360413_0.2850390786882855","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"camofox-browser","version":"1.5.3","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.5.3","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"9449ea10c27fc1c77608c717e08c79a296271041","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.5.3.tgz","fileCount":88,"integrity":"sha512-YYs46no6z0ZwqYZLOPYhdeSKhHigY+zNl6KgDBbYSQhl9kWE/aJEByLidiwh8649cXguFY94hItoV3XrYVyA2g==","signatures":[{"sig":"MEYCIQC0k1Dt1UDmtXHfPDASsHNmGJicKsTzZpavMiKYjO3/mAIhAIwHonz3fm+B4jLL5UncLa/rHAUC02PkRIAbAWxRoLcM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":498205},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"213c08b88048e436efbcce1dc95c2f7c3bb6d00d","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.5.3_1772001940565_0.5034319222605532","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"camofox-browser","version":"1.6.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.6.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"049196b3fdafa1afa33606c3bfd2296a98f4b64f","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.6.0.tgz","fileCount":100,"integrity":"sha512-F7QEt85uobpY4pcslmmBAw13nrBPBxjzeYgWakX3xoxKitcmUTH3/u/X/ikr9pHlvEj1DI9frbUMq7DaA+IxLg==","signatures":[{"sig":"MEQCIC857YpPF6M5kqO/cJNIDKYCuNpbfQ+4qyi/DvpQS7JDAiBMLN5SVSunI2bAm3SdoSRnG8F4YrmwCmrroFw0tRjfcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":576840},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"2625e7dbe9481ed01d3f9d850d5bd8d700502105","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.6.0_1772193033827_0.3878857205384474","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"camofox-browser","version":"1.6.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.6.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"605fe22891f864a719e10a5baeaaf14c29bc423b","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.6.1.tgz","fileCount":100,"integrity":"sha512-N69d//OhcNvqVIcKXXpCRDNET8VXHViJV2qBvvDcKTXpHG+msVidEE9q1PAyQxfU8p771tCwz5VpuNAF9ABG2A==","signatures":[{"sig":"MEQCIDTeIcFeGTQUx1U54pfItHhJQ/9Aq2I6/qpri9Zte4qDAiA6lw2vOtMbD8zVhptvrx4frTkUN2M91JXTgmLT1GxAhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":580841},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"2c7b324748bf73d6f7d293a97ed5eeca37a286c8","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.6.1_1772198719559_0.4487563976303488","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"camofox-browser","version":"1.6.2","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.6.2","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"b08d1d5797bbcbcecdaa527fcf578bb5370c0c48","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.6.2.tgz","fileCount":100,"integrity":"sha512-sFjmzolJ2O2rfocUVVwcWioWkwpj4GxJXd52wasMvYawL2CwSp4ksseHPTMfO2XH5ebgC0cs+/6lFE8iMHyoMQ==","signatures":[{"sig":"MEQCIFt112/ezNr6a6RsQvwRZmGKyZ9qvvdioZTo5cLBJ36lAiAPaeRcaY+S9SOyGkimavRKcWe4RhNiNHpGK+ox9T8yPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":581060},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=22"},"gitHead":"c6229873a2575d4096ab95255f34288ab51e62bc","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.6.2_1772202648032_0.6822047822622512","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"camofox-browser","version":"1.7.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.7.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"17d5fe9bb4a2dff8ec96c0d68f3a57cb1dd9497b","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.7.0.tgz","fileCount":100,"integrity":"sha512-vhbtwQkbmTcUYr/+eL2Gh5t97gSqzCCanO43laWjpS9C4ibR3KM4KUKw2pK9cb2u/nvObj/x/eko0nJMfw57Iw==","signatures":[{"sig":"MEUCIQC1WHdKGtqaodnTj+cXtE9Y8WfMj5zUF15ZImzm/TNQvgIgRty6NLvcjzf3W4bW9x66zVOu9ThX3O57DIMHPlbMYAs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":587225},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=22"},"gitHead":"480acd1ac56bcb8506414184cf4345a5ce050295","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.7.0_1772204709277_0.6040580915653126","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"camofox-browser","version":"1.7.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.7.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"84f5b9c8b427d7f4e7b7d9a0cef01242d7f83548","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.7.1.tgz","fileCount":100,"integrity":"sha512-EqNZY/8EpqrSoTO23jvrPG99IiOD+q688greQaHAIF6uGyRO4JI4MzyamJFzO96KTZPsYT/bxlX45WNYFBoS/g==","signatures":[{"sig":"MEQCIFnhLq9fuNRo2YyKyj3Hw+Wh5B7U+qSz/QKDdWmbCJYNAiBOc/CXSvNLBOgq5VUCbLsf+y85Kw1X6aPhqWQMJMIYRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":592498},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=22"},"gitHead":"2459a82815e6634c38b2f3fc0a2234ff55621373","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.7.1_1772236843241_0.5549683345775367","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"camofox-browser","version":"1.8.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.8.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"51f8cb9a97aa814c54e712bffda3c5837950b360","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.8.0.tgz","fileCount":104,"integrity":"sha512-q1TFM4Myegn5Z+juSl9ug7i/wSRQwB+YKr9l8Fo5snWOuVdF4ATLB+cgcstXJ7jU7mAYLsLjOWMk7JQH497C9Q==","signatures":[{"sig":"MEUCIGX5h3qtpz4PXcLbIkU9w5iVmeIh9t1Rhqr5LW/WLqT2AiEA411ZoBufzp8ZP5/mTSI0LyLdTKgCwuOsVKn2lDjQMdU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609064},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=22"},"gitHead":"43dcb99d205b7e72006e3bc952664ba724a4fe54","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.8.0_1772239882258_0.02389197057347392","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"camofox-browser","version":"1.8.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.8.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"42bdcb09582bda12af207475f10e82964002ac85","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.8.1.tgz","fileCount":102,"integrity":"sha512-YGnX76rBW+nLkFUgxdONmY+UwsFeCV4HG5WIpL9wuDyITNnG96JfsQiM5iXzrQYBFEN7N4CmrbE4aQEvygxOmQ==","signatures":[{"sig":"MEQCIEUPMWeFtHZbUsuSFUs8R93hhqI0t+c9iJo6VR6SCSlVAiBYmUkoWJfptZghL3ZFRbWEae9dmHwhf+c6G9OmAPLCPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":556839},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"5292c4331d0547ea47997e96e0b0c4d39cd2cddc","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.8.1_1772241820988_0.1997225092463255","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"camofox-browser","version":"1.9.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.9.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"7092b2e8bfc281084bca294187977d23b08458a5","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.9.0.tgz","fileCount":106,"integrity":"sha512-BmpvqYjgAK20bzaYQO9bZcnqHVvsyTl5cDr5WNX3Ftb55VN0khtR7BYBZN68sa7ddIMa+wlA/uZ0/3qh1gNcuQ==","signatures":[{"sig":"MEYCIQCEFCO50VauXaXygbNS6rYh2r7sZg57q3F0sQ0BdQU2FQIhALLdoXZq1yU6KU1O64zQj1348CA04QkAWcsdFGbnIDZy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":575073},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"7b818b8f24114453cdfcfce77855d76bf607213d","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.9.0_1772359409382_0.508991674041857","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"camofox-browser","version":"1.9.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@1.9.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"bf106b58809142a226679d2149cb3ef7935badde","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-1.9.1.tgz","fileCount":106,"integrity":"sha512-fsAl8yAbiNAJDlJG7WS5cHmP0+Ii/xFink5wLnaIx5lAjX+Z2UXbmZuRVc5hpiZtJt7MRHoMl0c2jO16XzgBkQ==","signatures":[{"sig":"MEUCIE33RZ5NDpH1znSlkAd0k6507nW9dT8OPjcMyStDo6VaAiEAwzclKyI4cYC+Zy3aro5mEfIaNoWV6MqcRt0sxl0pJn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":578726},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"8fa81f4871ed454c6d74fdfadba37fc4938e2f1f","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.8.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.6.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_1.9.1_1772460489038_0.4535018935768276","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"camofox-browser","version":"2.0.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.0.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"df17b3dabf2ebfa15d2e0e39547b88c7bf88a66d","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.0.0.tgz","fileCount":195,"integrity":"sha512-FYAZDUCuS6SdxyYJawr8URQKGH3uGFDwwHWhvF0eAl6a6mwUGsuS4WCw7uVLb64MT30NEl6ULubIkBQfeN3teg==","signatures":[{"sig":"MEQCIFUUME2n/0xrgyi7ge9p/9uG7dP0Cnl0iXEJEYougF44AiAe/M6ToMPn3/HY2omOehUte3GYcLZ24qytPc4Q6JzgHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":846008},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"5161e682a107300205b578594cc63bb038817c6a","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.10.1","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.7.0","dependencies":{"express":"^4.18.2","commander":"^14.0.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.0.0_1772548630374_0.3469973445180403","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"camofox-browser","version":"2.0.3","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.0.3","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"5e6c66a87581e1d44416aa28dcad72b7099e7e9f","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.0.3.tgz","fileCount":211,"integrity":"sha512-Uezf6T6cXpZeuacB8YhcSQKSh8ebciDfYlkXUNCqqhyDXgoBXBoofIBW87n+fWFO4d9101xiSQGYDeLyLX7HJQ==","signatures":[{"sig":"MEUCIG2i8atpfW9fCo96j11jdO+HYskpaJWDeSkb5G6dI1npAiEA+fte7ixkgfVl6xQIHwx65SU64rnx02xzrcnsuikGaa4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":902065},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"216db5eeb80689554fa228961625dde308989529","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.10.1","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.7.0","dependencies":{"express":"^4.18.2","commander":"^14.0.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.0.3_1772709692187_0.9551732791136327","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"camofox-browser","version":"2.0.4","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.0.4","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"dfcecb4307119d6b2d25c8a5b629627bca74a7bd","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.0.4.tgz","fileCount":211,"integrity":"sha512-3xFDgrq00670oX5XL9F26ABbwdBoF5MUKRY7Z1aLFK3PmgSvk757QCvHYdiuL3YiS02XQOn16YqebR+7gbolaw==","signatures":[{"sig":"MEUCIF190TRFKZnJ9Vx4T9n1gh1rg7JKzTqMCNEVEOvBSUU4AiEAr+jQG/FvbiVdtW/b/tDzz15FlLVh59lv2SfKphgdHMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":902065},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"5df4766c6381b49deac7c02819b087d07685baba","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.10.1","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.7.0","dependencies":{"express":"^4.18.2","commander":"^14.0.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.0.4_1772712020621_0.07554878903180562","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"camofox-browser","version":"2.0.5","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.0.5","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"ea5f2396a5727448114bf59bf5700533914bc344","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.0.5.tgz","fileCount":211,"integrity":"sha512-toQcPqJVi1V798EBD2ioG/vJJHsNDsNELVlZVCBbIvkFXF99C7fKawv2gE0+fTLDj28g7QhQTvOWU66khM+wig==","signatures":[{"sig":"MEUCICwqi6KAK+Y6osgl6NOTM4Czp7MjRS5igjvB1s3UHQc3AiEA70uNagQ5DhZAk2DH1kWCYFRRcPJn1DsXDXb3p3qjDY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":909686},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"e696846727585dc228dc422de1f01f031394898b","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.10.1","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.7.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.0.5_1772946922420_0.28026506690614394","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"camofox-browser","version":"2.1.0","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.1.0","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"fee2c102c2611d78c01a2daf6e4592bb899e370f","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.1.0.tgz","fileCount":211,"integrity":"sha512-2KWQS3HQ5ac9RQtY8619LFurqVDACTdAU4wHF8tFHB9JbahC5D+ZcqN37AGvO7FW2Uc63f+UJ5Bdl4+OivCzKA==","signatures":[{"sig":"MEUCIQCp706yXeq6qQJDbuYYlfBSykdUtx1D4Ws+7S6VsWg6eQIgdP4zO/zChG40x3tyziswWblLYDKotJ5rYbKieOTaFS0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911272},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"ea5af9d5904a06c9d1dce75373a450e9d86e63be","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.10.1","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.7.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.1.0_1772956901926_0.28044537178025264","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"camofox-browser","version":"2.1.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.1.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"455d0c71d93e80139e7c49329f63f3c98b1c3310","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.1.1.tgz","fileCount":211,"integrity":"sha512-Bv0vmBONjHv+NJMG0C/OSPEpEik2ExZf/wlT7y/lxFuQDwUhIxCuAoTMqJk6LJp/x6rV03MsxRCL7tE72Ucj1g==","signatures":[{"sig":"MEUCIHR2lwPuiW+JgQrbLEfYAZV4wG996yXeZyaM1PC28QrqAiEA5DH1EiAIZUBtpf9a82qZLg/YfYXek527iUUVSRbQGeQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911611},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=18"},"gitHead":"8b979523891b27803129cad8f22f5ed5fce94a63","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.10.1","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"25.7.0","dependencies":{"express":"^4.18.2","camoufox-js":"^0.8.5","playwright-core":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.1.1_1772957937850_0.6764058067179259","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"camofox-browser","version":"2.4.1","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.1","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"2ffc0e3f437a8885d4744ff9b92e58f270cd8f8d","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.1.tgz","fileCount":241,"integrity":"sha512-0DRVpLqlSrJ2WJGxafl7fQW6a7RX5KxJ2zBnTQykTi5Daxyh4AiJmj7fY971G58gbtd9ZGkaeXUYT1+QNsehDw==","signatures":[{"sig":"MEQCIApnCYcUBeNMJsGo9BB84OTGwjH30qRdNAtxnwKS6D6HAiBUvpk3E+W3bn44j7EoRk/zmJ8sqSQK1NcmpxX4L/PRHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1291911},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"3dd42d818bac37fa07cd0af2b17732e55eb977aa","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"bash scripts/verify-package.sh"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"deprecated":"Fresh installs can resolve an incompatible playwright-core and crash on first tab launch. Upgrade to camofox-browser@2.4.6.","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"10.8.2","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"20.19.6","dependencies":{"express":"^4.18.2","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"^1.58.0","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.1_1777965322497_0.8507940118684441","host":"s3://npm-registry-packages-npm-production"}},"2.4.3":{"name":"camofox-browser","version":"2.4.3","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.3","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"28708466a4dc888da6f78da3cdc5f8c719659c49","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.3.tgz","fileCount":241,"integrity":"sha512-43tSkZp+sfgEn3MB39e3L84HRkfiQA3CYi6tRqIbaryv4xMIsbx6ypz4gN/Ce5LYBS39Yes6i6U6CtSKoO5fpA==","signatures":[{"sig":"MEYCIQCmKaqG4YjFgy4jhTcR9dTdE2q+i97DymnyWxoLr2IoYAIhAOAB80YTvIYxVbKftS/2oDF5+50FisT9BMgF3rM2X7HV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1342629},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"7a9c96f397285e97928238cfb21e6e0abc934659","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"bash scripts/verify-package.sh"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"deprecated":"Fresh installs can resolve an incompatible playwright-core and crash on first tab launch. Upgrade to camofox-browser@2.4.6.","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"10.8.2","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"20.19.6","dependencies":{"express":"^4.18.2","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"^1.58.0","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^16.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.3_1778716968033_0.60126778601251","host":"s3://npm-registry-packages-npm-production"}},"2.4.4":{"name":"camofox-browser","version":"2.4.4","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.4","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"f4f3843b8f78bd5ac674643fe24d66eb685bb217","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.4.tgz","fileCount":241,"integrity":"sha512-g0pmDG1Pf5cm0jDJ7ui26M0GO19xn+iAN5PCWwAf2ycTNWQYeVg6/Ek7SQgyrwAtiY7YaI79QSPry8uxTDpTIQ==","signatures":[{"sig":"MEUCIHQLphmKnDbDdWcBd52d4Dfm99zeRD5+XQY4jcYCM7BFAiEA7hoevrdgs3liFAg+tGhEJg+uJKRTuoHSVMA4Q97LVTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1344637},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"96f6be8c5c0de3f6766a3c5ee4a81faa3dffb797","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"bash scripts/verify-package.sh"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"deprecated":"Fresh installs can resolve an incompatible playwright-core and crash on first tab launch. Upgrade to camofox-browser@2.4.6.","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"10.8.2","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"20.19.6","dependencies":{"express":"^4.18.2","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"^1.58.0","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.4_1779503177152_0.18168676470382739","host":"s3://npm-registry-packages-npm-production"}},"2.4.5":{"name":"camofox-browser","version":"2.4.5","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.5","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"fc3ba6b90f96694f481c125c870ebb2d57d4b17b","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.5.tgz","fileCount":241,"integrity":"sha512-pafToZKxf+EAc4sWMjhvQLe2tjX3tC7DM0d1PwFU2f5hBrt4VjbhnYvAO8aKPc6BHuBexc/jdZ7fRgFv/aPTXA==","signatures":[{"sig":"MEYCIQDkuXHVRjgyqBap8cERFmSrv70bGqGmZqRZ8kU8e1hM4gIhAIto501Y+T02jGReLTgkjyrMb2vc0cNazlzhJt/xlzT/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1349907},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"32023fd42367c58ca3eede77201f0f59761d7d65","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"bash scripts/verify-package.sh"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"deprecated":"Fresh installs can resolve an incompatible playwright-core and crash on first tab launch. Upgrade to camofox-browser@2.4.6.","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"10.8.2","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"20.19.6","dependencies":{"express":"^4.18.2","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"^1.58.0","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.5_1779685480444_0.3619074825907269","host":"s3://npm-registry-packages-npm-production"}},"2.4.6":{"name":"camofox-browser","version":"2.4.6","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.6","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"e9fff08ddb09520e55785d6c36f6e3e1d5018581","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.6.tgz","fileCount":241,"integrity":"sha512-CTTgZSAMHzth87J9jGf4BFhMjHcxrnMjOyEVOeRq1RsOkFpNUfkjongDIiguz7rz61sjmH7ibyyi93pohE60XA==","signatures":[{"sig":"MEYCIQCj5suVQAWfolgo1fZmuIHZQOnNhbTm7dCy0tXonEHlRAIhAPuxNUiw8jv9AY+5RknX/lX0Kn6t8D9Po+htSBn5Pwv0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1350249},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"gitHead":"5713539d1308e6415cc2a3acdace28ff32a2373f","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"bash scripts/verify-package.sh"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"10.8.2","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"20.19.6","dependencies":{"express":"^4.18.2","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"1.58.1","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.6_1781657268283_0.6051553522959388","host":"s3://npm-registry-packages-npm-production"}},"2.4.7":{"name":"camofox-browser","version":"2.4.7","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.7","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"2ed53751cf4f3905f4761e5c1f35e4b6ef551447","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.7.tgz","fileCount":250,"integrity":"sha512-tb4DOGf/DvwmZ+6DBZIianZLPD2XQktUcmk1qmQ+GbwGBTBzK8VaSeGW4yXB21BZ6T7gYf8vcM43GTRSncDxWw==","signatures":[{"sig":"MEUCIHSt3R3R8MWye584TVuJPSpRZAoYF6FmRO5Q2e/OGX6IAiEA76eQHA0NZCM41l7PmUD86nHsxvo5O8Q1Omz1d+Tk2c8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1457896},"main":"dist/src/server.js","type":"commonjs","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"node scripts/verify-package.mjs","build:portable:windows":"node scripts/build-portable-windows.mjs"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"overrides":{"adm-zip":"0.6.0"},"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.16.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"24.18.0","dependencies":{"express":"^4.18.2","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"1.58.1","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","supertest":"^7.2.2","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/supertest":"^7.2.1","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.7_1786611868069_0.865916634368971","host":"s3://npm-registry-packages-npm-production"}},"2.4.8":{"name":"camofox-browser","version":"2.4.8","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.8","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"9afe1773429c94be217ed55cd10126cbb1078670","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.8.tgz","fileCount":250,"integrity":"sha512-tWVs0Nj4o4anU2Mi5ZBgQznRunnuqnhkHlfAEKck37VYX926iu0aTKxBdMheMEMPTbV9TZIaR9EW+n5it0zeSw==","signatures":[{"sig":"MEUCIQCOn9PLCCxR/r5eKzXqgMJ8URneAa6NqDtcw6utoVo/iwIgLIEvKYxzaHy324MCFLwNWAp6HzGBLmRo/t+bMgb7ZKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICq0T8WdNSgnKRbo8CpzrWpyKT5s7peTCbxqZanAkg5MAiEAupAZgDW2kVH/q4PC3xeDjh1GasuWF4PcCJBmkpJtUVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1460006},"main":"dist/src/server.js","type":"commonjs","_from":"file:/Users/admin/DEV/camofox-browser/camofox-browser-2.4.8.tgz","types":"./dist/src/server.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"npx camoufox-js fetch || true","verify:package":"node scripts/verify-package.mjs","build:portable:windows":"node scripts/build-portable-windows.mjs"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"_resolved":"/Users/admin/DEV/camofox-browser/camofox-browser-2.4.8.tgz","overrides":{"adm-zip":"0.6.1"},"_integrity":"sha512-tWVs0Nj4o4anU2Mi5ZBgQznRunnuqnhkHlfAEKck37VYX926iu0aTKxBdMheMEMPTbV9TZIaR9EW+n5it0zeSw==","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.19.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"26.7.0","dependencies":{"express":"^4.22.3","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.8.5","openapi-types":"^12.1.3","playwright-core":"1.58.1","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","supertest":"^7.2.2","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/supertest":"^7.2.1","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.8_1790061586248_0.06025108055414141","host":"s3://npm-registry-packages-npm-production"}},"2.4.9":{"name":"camofox-browser","version":"2.4.9","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"author":{"name":"redf0x1"},"license":"MIT","_id":"camofox-browser@2.4.9","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"homepage":"https://github.com/redf0x1/camofox-browser#readme","bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"dist":{"shasum":"044e583c4ed785c54cac0b9d6d9440fd075ac528","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.4.9.tgz","fileCount":251,"integrity":"sha512-/LWjt7z+nn4t1ygFcOf+n+qON0Xp+I2sIz9/r06nk2sViH7pl7muElgigbjeoTEXKMn9sRcNy6XQcBLVM6OHNA==","signatures":[{"sig":"MEUCIQDL+Z9lpVpSjsoxuTcjXed1HGD67/fcJg3UwjFyJ7BjfgIgCtVNFsnC5eWxCvZKtwhb61mIDZ+D4hctltwVeRdPpCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHRPhkrZ6hh3raj0IMBiYS62X2Z3MGUZIvcurHuCHJApAiEA8XtsPRq6rB8D54W4B+uuMttSdZ90MnovWwoNQVFSIcQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1469677},"main":"dist/src/server.js","type":"commonjs","_from":"file:/Users/admin/.hermes/profiles/engineering/cache/scratch/camofox-release-20261025/artifacts/camofox-browser-2.4.9.tgz","types":"./dist/src/server.d.ts","engines":{"node":">=22"},"scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"node bin/install-browser.js","verify:package":"node scripts/verify-package.mjs","browser:install":"node bin/install-browser.js","build:portable:windows":"node scripts/build-portable-windows.mjs"},"_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"openclaw":{"extensions":["plugin.ts"]},"_resolved":"/Users/admin/.hermes/profiles/engineering/cache/scratch/camofox-release-20261025/artifacts/camofox-browser-2.4.9.tgz","overrides":{"adm-zip":"0.6.1"},"_integrity":"sha512-/LWjt7z+nn4t1ygFcOf+n+qON0Xp+I2sIz9/r06nk2sViH7pl7muElgigbjeoTEXKMn9sRcNy6XQcBLVM6OHNA==","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.19.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"_nodeVersion":"26.7.0","dependencies":{"express":"^4.22.3","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.11.4","openapi-types":"^12.1.3","playwright-core":"1.58.1","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","supertest":"^7.2.2","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/supertest":"^7.2.1","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"tmp":"tmp/camofox-browser_2.4.9_1792923184400_0.5430096797479464","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"_id":"camofox-browser@2.5.0","bin":{"camofox":"bin/camofox.js","camofox-browser":"bin/camofox-browser.js"},"bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"dist":{"shasum":"7a7840a6a4bd2b3cd15b5f93059bd8d57fbdb95d","tarball":"https://registry.npmjs.org/camofox-browser/-/camofox-browser-2.5.0.tgz","fileCount":267,"integrity":"sha512-8//PIglpzbVHEqbMMDMOL9DAOpso8cXhQ0nFkNIiFBCtBq5X14Q/RZ0aEkYXpS3T4/viVdKsQJ14GrxJ9aNCLw==","signatures":[{"sig":"MEUCIGXZHWQ/dSNSMuyur9uF6tAM4u7FyglPE9y5xdDazUhgAiEApcOc5t6cs/A0a2PaIGnWsGH3BQ4tPRj1iFcru35aAEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHfQOZP+0v9Qoz2BytEYX1Y5nxqrV6rcoDZ7LAoa5iIyAiEAxy3SYi5PYcWZuCzxMm8zfKBwjShdpHyImmbqsfMMfZg="}],"unpackedSize":1567719},"main":"dist/src/server.js","name":"camofox-browser","type":"commonjs","_from":"file:/Users/admin/.hermes/profiles/engineering/cache/scratch/camofox-pr-review/release-artifacts/camofox-browser-2.5.0.tgz","types":"./dist/src/server.d.ts","author":{"name":"redf0x1"},"engines":{"node":">=22"},"license":"MIT","scripts":{"dev":"tsx watch src/server.ts","lint":"tsc --noEmit","test":"jest --runInBand --detectOpenHandles","build":"tsc","start":"node dist/src/server.js","pretest":"npm run build","test:e2e":"jest --runInBand --detectOpenHandles tests/e2e","start:dev":"tsx src/server.ts","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --detectOpenHandles tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --detectOpenHandles","postinstall":"node bin/install-browser.js","verify:package":"node scripts/verify-package.mjs","browser:install":"node bin/install-browser.js","build:portable:windows":"node scripts/build-portable-windows.mjs"},"version":"2.5.0","_npmUser":{"name":"redf0x1","email":"tl667564@gmail.com"},"homepage":"https://github.com/redf0x1/camofox-browser#readme","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"openclaw":{"extensions":["plugin.ts"]},"_resolved":"/Users/admin/.hermes/profiles/engineering/cache/scratch/camofox-pr-review/release-artifacts/camofox-browser-2.5.0.tgz","overrides":{"qs":"^6.17.1","adm-zip":"0.6.1","camoufox-js":{"glob":"^14.0.3"}},"_integrity":"sha512-8//PIglpzbVHEqbMMDMOL9DAOpso8cXhQ0nFkNIiFBCtBq5X14Q/RZ0aEkYXpS3T4/viVdKsQJ14GrxJ9aNCLw==","repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"_npmVersion":"11.19.0","description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","directories":{},"maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"_nodeVersion":"26.7.0","dependencies":{"express":"^4.22.3","css-tree":"^3.2.1","commander":"^14.0.0","camoufox-js":"^0.11.4","openapi-types":"^12.1.3","playwright-core":"1.58.1","swagger-ui-express":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^29.7.0","supertest":"^7.2.2","jest-junit":"^17.0.0","typescript":"^5.9.3","@types/node":"^25.2.3","@types/express":"^5.0.6","@types/supertest":"^7.2.1","@types/swagger-ui-express":"^4.1.8"},"optionalDependencies":{"argon2":"^0.41.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/camofox-browser_2.5.0_1793935367599_0.3071657023383395"}}},"time":{"created":"2026-02-15T06:47:20.834Z","modified":"2026-11-06T03:22:48.201Z","1.0.0":"2026-02-15T06:47:20.990Z","1.0.1":"2026-02-15T08:37:36.113Z","1.0.2":"2026-02-15T10:31:35.035Z","1.0.3":"2026-02-15T10:50:45.068Z","1.1.0":"2026-02-16T01:15:08.627Z","1.1.1":"2026-02-16T04:44:14.765Z","1.1.2":"2026-02-16T05:33:38.362Z","1.2.0":"2026-02-18T01:55:46.388Z","1.3.0":"2026-02-18T04:55:23.106Z","1.4.0":"2026-02-18T12:33:51.963Z","1.5.0":"2026-02-20T04:28:25.436Z","1.5.1":"2026-02-20T08:53:11.116Z","1.5.2":"2026-02-20T10:46:00.573Z","1.5.3":"2026-02-25T06:45:40.728Z","1.6.0":"2026-02-27T11:50:33.972Z","1.6.1":"2026-02-27T13:25:19.714Z","1.6.2":"2026-02-27T14:30:48.185Z","1.7.0":"2026-02-27T15:05:09.551Z","1.7.1":"2026-02-28T00:00:43.410Z","1.8.0":"2026-02-28T00:51:22.418Z","1.8.1":"2026-02-28T01:23:41.147Z","1.9.0":"2026-03-01T10:03:29.536Z","1.9.1":"2026-03-02T14:08:09.191Z","2.0.0":"2026-03-03T14:37:10.606Z","2.0.3":"2026-03-05T11:21:32.400Z","2.0.4":"2026-03-05T12:00:20.782Z","2.0.5":"2026-03-08T05:15:22.633Z","2.1.0":"2026-03-08T08:01:42.123Z","2.1.1":"2026-03-08T08:18:58.030Z","2.4.1":"2026-05-05T07:15:22.667Z","2.4.3":"2026-05-14T00:02:48.255Z","2.4.4":"2026-05-23T02:26:17.317Z","2.4.5":"2026-05-25T05:04:40.721Z","2.4.6":"2026-06-17T00:47:48.501Z","2.4.7":"2026-08-13T09:04:28.226Z","2.4.8":"2026-09-22T07:19:46.378Z","2.4.9":"2026-10-25T10:13:04.520Z","2.5.0":"2026-11-06T03:22:48.039Z"},"bugs":{"url":"https://github.com/redf0x1/camofox-browser/issues"},"author":{"name":"redf0x1"},"license":"MIT","homepage":"https://github.com/redf0x1/camofox-browser#readme","keywords":["camofox","camoufox","anti-detection","browser-automation","ai-agent","stealth-browser","web-scraping","rest-api","typescript","express","playwright","fingerprint-spoofing","mcp","openclaw","headless-browser"],"repository":{"url":"git+https://github.com/redf0x1/camofox-browser.git","type":"git"},"description":"Anti-detection browser server for AI agents — REST API wrapping Camoufox engine with OpenClaw plugin support","maintainers":[{"name":"redf0x1","email":"tl667564@gmail.com"}],"readme":"# CamoFox Browser Server\n\n> Anti-detection browser server for AI agents — TypeScript REST API wrapping the [Camoufox](https://github.com/daijro/camoufox) stealth browser engine\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue)](tsconfig.json)\n[![Node](https://img.shields.io/badge/Node-22%2B-green)](package.json)\n[![npm](https://img.shields.io/npm/v/camofox-browser)](https://www.npmjs.com/package/camofox-browser)\n\n## Table of Contents\n\n- [Why CamoFox?](#why-camofox)\n- [Features](#features)\n- [Preview Status](#preview-status)\n- [Quick Start](#quick-start)\n- [Windows x64 Portable](#windows-x64-portable)\n- [CLI](#cli)\n- [Console Capture](#console-capture)\n- [Playwright Tracing](#playwright-tracing)\n- [Security](#security)\n- [Usage with AI Agents](#usage-with-ai-agents)\n- [Architecture](#architecture)\n- [API Reference](#api-reference)\n- [Network capture](#network-capture)\n- [Structured Extract](#structured-extract)\n- [Search Macros](#search-macros)\n- [Geo Presets](#geo-presets)\n- [Environment Variables](#environment-variables)\n- [Deployment](#deployment)\n- [Used With](#used-with)\n- [Project Structure](#project-structure)\n- [Contributing](#contributing)\n- [Credits](#credits)\n- [License](#license)\n\n## Why CamoFox?\n\n**The Problem**: Standard browser automation (Puppeteer, Playwright, Selenium) is easily detected by modern anti-bot systems. JavaScript-level patches are fragile and get bypassed quickly.\n\n**The Solution**: CamoFox Browser Server wraps [Camoufox](https://github.com/daijro/camoufox), a Firefox fork with **C++ engine-level fingerprint spoofing**. No JavaScript injection — anti-detection happens at the browser engine level.\n\n| Feature | Puppeteer/Playwright | CamoFox Browser Server |\n|---------|---------------------|------------------------|\n| Anti-detection | JavaScript patches (fragile) | C++ engine-level (robust) |\n| Fingerprint spoofing | Limited | Full (engine-level) |\n| Token efficiency | Raw HTML / screenshots | Accessibility snapshots (smaller + structured) |\n| Integration | Direct SDK | REST API for any language / AI agent |\n| AI agent support | Varies | MCP + OpenClaw compatible |\n\n## Features\n\n- **C++ Anti-Detection** — fingerprint spoofing at the Camoufox engine level (not JS injection)\n- **REST API** — language-agnostic HTTP endpoints for browser automation and AI agent integration\n- **Multi-Session** — concurrent isolated browser contexts per `userId` (defaults: max 50 sessions, max 10 tabs/session)\n- **Persistent Browser Profiles** — Each user gets a dedicated Firefox profile. Cookies, localStorage, IndexedDB, and all browser storage persist across sessions automatically.\n- **Geo Presets** — 8 built-in region presets (locale/timezone/geolocation) + custom presets file\n- **Session-Level Proxy/Geo Overrides** — per-session proxy configuration via named profiles or raw credentials, with hybrid geo modes (`explicit-wins` or `proxy-locked`)\n- **14 Search Macros** — Google, YouTube, Amazon, Reddit (search + subreddit JSON), Wikipedia, Twitter, Yelp, Spotify, Netflix, LinkedIn, Instagram, TikTok, Twitch\n- **Element Refs** — accessibility snapshots annotated with stable `eN` element references for precise interaction\n- **Cookie Persistence** — import Netscape/Playwright-style cookies into a session (bearer auth required only when `CAMOFOX_API_KEY` is set)\n- **OpenClaw Plugin** — OpenClaw-compatible endpoints (`/start`, `/tabs/open`, `/act`, etc.)\n- **TypeScript** — strict mode, typed request shapes, modular Express routes\n- **YouTube Transcript Extraction** — yt-dlp + browser fallback (service-level; no public API route currently exposed)\n- **Snapshot Pagination** — offset-based windowing for large page snapshots\n- **Image Listing Route** — image-only extraction over the shared resource extractor with selector, extension, lazy-load, and blob-resolution controls\n- **Structured Extract** — deterministic schema-driven JSON extraction across core API, CLI, and OpenClaw without arbitrary JavaScript\n- **Browser Health Monitoring** — health probe with recovery/degraded state tracking\n- 🖥️ **CLI Mode** — 50+ commands for terminal-based browser automation\n- 🔐 **Auth Vault** — AES-256-GCM encrypted credential storage (LLM-safe)\n- 📜 **Pipeline Scripting** — Execute command scripts from files\n- 🔍 **Console Capture** — capture and filter browser console messages and uncaught errors\n- 📼 **Playwright Tracing** — record and export Playwright traces for debugging\n- 🗂️ **Trace Artifact Management** — list, download, and delete managed trace ZIPs per user session\n\n## Preview Status\n\nCamoFox Browser Server is in **Preview** (Phase 1). Preview releases are functional for browser automation and agent integration, but carry specific compatibility commitments and explicit non-goals.\n\n### What Preview Means\n- The REST API and CLI are usable for agent workflows today; [CamoFox MCP](https://github.com/redf0x1/camofox-mcp) is available as an external companion integration\n- New features may be added between minor versions\n- Backward-compatible aliases are maintained for renamed or moved endpoints (see [Compatibility Policy](#compatibility-policy))\n- Local state (profiles, registries, sessions) uses versioned formats with fail-closed integrity checks\n\n### What Preview Does NOT Guarantee\n- **Frozen API surface** — endpoint behavior, request shapes, or response formats may change between minor versions\n- **Automatic local-state migration** — browser profiles, download registries, and session files use versioned sidecar formats; incompatible upgrades require manual reset (see [Local State Recovery](#local-state-recovery))\n- **Downgrade safety** — rolling back to an older version may require clearing local state\n- **Fixed GA timeline** — promotion to GA requires meeting evidence-based exit criteria, not a calendar date\n\n### Compatibility Policy\nDuring Preview, CamoFox follows an **additive-only deprecation model**:\n- **Legacy aliases** (e.g., `listItemId` accepted alongside `sessionKey`, OpenClaw `/act` routing to core endpoints) continue to work alongside their replacements\n- **Deprecated fields** are accepted silently; no removal until GA or a documented migration window with advance notice in CHANGELOG\n- **No existing endpoint** is removed in a minor version — removals happen only in major versions with prior CHANGELOG notice\n\n### Local State Recovery\nBrowser profiles, download registries, and CLI session files use versioned sidecar formats. When upgrading CamoFox:\n- **Compatible versions**: State loads normally\n- **Incompatible or corrupt state**: The server refuses to load incompatible profiles and download registries; the CLI rejects incompatible saved-session files. Both log an actionable error with the specific recovery path.\n- **Recovery**: Delete the affected profile directory, session file, or download registry as indicated in the error message. Clean state is recreated on next use.\n\nSupported sidecars include limited forward-migration paths (e.g., fingerprint v0 → v1); when no migration path exists for a given version, the server refuses to load the file and logs an actionable recovery message. There is no silent repair or downgrade path — this fail-closed default prevents data corruption at the cost of manual intervention on unsupported version jumps.\n\n## Quick Start\n\n### From Source\n\nRequires Node.js 22+. Browser installation runs during `npm install` and fails if the\nrequired engine cannot be downloaded, extracted, or validated. Downloads are streamed\nto disk; extraction uses Python 3 on Linux (install `python3` first), system `tar` on\nmacOS, and built-in PowerShell/.NET ZIP support on Windows. Keep sufficient disk space for both the ZIP and extracted engine.\nDocker installs the engine once using the same installer. Optional GeoLite download\nfailures only produce a warning.\n\nSet `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1` only when deliberately deferring browser\nprovisioning (for example, a source-only CI build or an existing portable bundle).\nBefore launching, run `npm run browser:install` from the package directory with that\nvariable unset. A supported cache with a nonempty executable is reused without a\nnetwork update check. `CAMOUFOX_INSTALL_DIR` selects the cache directory. Existing\nincomplete/unsupported caches are preserved and rejected: choose a new path with\n`CAMOUFOX_INSTALL_DIR` to install afresh, and retain the old cache for diagnosis.\nMissing engine/version errors require engine installation, **not deleting profiles**.\n\n```bash\ngit clone https://github.com/redf0x1/camofox-browser.git\ncd camofox-browser\nnpm install\nnpm run build\nnpm start\n```\n\n### Using npm (CLI)\n\n```bash\nnpm install -g camofox-browser\n\n# Start the server\ncamofox-browser\n\n# Or use the CLI for browser automation\ncamofox open https://example.com\ncamofox snapshot\ncamofox click e5\n```\n\n> See [CLI](#cli) for the complete command reference.\n\n## Windows x64 Portable\n\nWindows x64 is supported as a headless-first portable distribution. Release ZIPs are named `camofox-browser-<version>-windows-x64.zip` and contain the Node.js runtime, application runtime, and the pinned Camoufox Windows x64 engine, so a global Node.js installation is not required.\n\nExtract the ZIP to a writable directory and run the bundled launchers from PowerShell or Command Prompt:\n\n```powershell\n.\\camofox.cmd --version\n.\\camofox.cmd server start --background\n.\\camofox.cmd server status\n.\\camofox.cmd server stop\n```\n\nPortable runtime state stays under `data\\home` inside the extracted directory. This includes camofox-browser's `.camofox` profiles/logs and the bundled Camoufox cache, so the portable distribution does not use the normal Windows user profile for its application state.\n\nThe portable ZIP intentionally excludes Camoufox's upstream bundled `fonts/` directory because the exact upstream source explicitly does not permit redistribution of those copyrighted Windows/macOS fonts. On Windows, CamoFox uses fonts installed on the host system instead.\n\nThe supported Windows x64 display contract is `headless=true`. `headless=false` and `headless=\"virtual\"` are rejected with a clear error before any Linux-only display process is attempted. Xvfb/VNC virtual display mode remains Linux-only, and native headed Windows mode is not part of the verified support contract.\n\nThe release workflow verifies the ZIP after extracting it into a path containing spaces, starts the CLI using bundled Node.js with global Node removed from `PATH`, checks `/health`, runs a local create → navigate → snapshot → close browser flow, and confirms server shutdown and portable-state placement.\n\n### Using Docker\n\n> Docker image: `ghcr.io/redf0x1/camofox-browser`\n\n```bash\ndocker build -t camofox-browser .\ndocker run -d \\\n  --name camofox-browser \\\n  -p 9377:9377 \\\n  -p 6080:6080 \\\n  -e CAMOFOX_HOST=0.0.0.0 \\\n  -e CAMOFOX_AUTH_MODE=auto \\\n  -e CAMOFOX_API_KEY=change-me \\\n  -v ~/.camofox:/home/node/.camofox \\\n  camofox-browser\n```\n\nTo persist browser profiles (cookies, localStorage, IndexedDB, etc.) across container restarts, keep the volume mount shown above.\n\n### Using Docker Compose\n\n```yaml\nservices:\n  camofox-browser:\n    build: .\n    ports:\n      - \"9377:9377\"\n    environment:\n      CAMOFOX_HOST: \"0.0.0.0\"\n      CAMOFOX_PORT: \"9377\"\n      # auto requires CAMOFOX_API_KEY when CAMOFOX_HOST is non-loopback\n      CAMOFOX_AUTH_MODE: \"auto\"\n      CAMOFOX_API_KEY: \"change-me\"\n      # CAMOFOX_ADMIN_KEY: \"change-me\"\n      # Optional: proxy routing (also enables Camoufox geoip mode)\n      # PROXY_HOST: \"\"\n      # PROXY_PORT: \"\"\n      # PROXY_USERNAME: \"\"\n      # PROXY_PASSWORD: \"\"\n```\n\n### Verify\n\n```bash\ncurl http://localhost:9377/health\n# {\"ok\":true,\"engine\":\"camoufox\",\"browserConnected\":true}\n```\n\n## CLI\n\nCamoFox Browser includes a powerful CLI for browser automation directly from the terminal. The CLI auto-starts the server when needed.\n\n### Installation\n\n```bash\n# Global install (recommended)\nnpm install -g camofox-browser\n\n# Or use npx (no install needed)\nnpx camofox-browser open https://example.com\n```\n\n### Quick Start\n\n```bash\ncamofox open https://example.com       # Open a page in anti-detection browser\ncamofox snapshot                       # Get accessibility tree with element refs\ncamofox click e5                       # Click element [e5]\ncamofox type e3 \"hello world\"         # Type into element [e3]\ncamofox screenshot --output page.png   # Save screenshot\ncamofox close                          # Close the tab\n```\n\n### Core Commands\n\n```bash\n# Browser lifecycle\ncamofox open <url>                     # Open URL in new tab\ncamofox close [tabId]                  # Close tab\ncamofox navigate <url>                 # Navigate current tab to URL\n\n# Inspection\ncamofox snapshot                       # Get accessibility tree with [eN] refs\ncamofox screenshot [--output file]     # Take screenshot (saves to file)\ncamofox annotate                       # Screenshot + element ref overlay\ncamofox get-url                        # Get current page URL\ncamofox get-text                       # Get page text content\ncamofox get-links                      # Get all links on page\ncamofox get-tabs                       # List open tabs\ncamofox extract-structured @schema.json # Extract deterministic JSON from a schema\n\n# Interaction\ncamofox click <ref>                    # Click element by ref\ncamofox type <ref> <text>              # Type text into element\ncamofox fill '[e1]=\"user\" [e2]=\"pw\"'  # Fill multiple fields at once\ncamofox scroll <direction>             # Scroll up/down/left/right\ncamofox select <ref> <value>           # Select dropdown option\ncamofox hover <ref>                    # Hover over element\ncamofox press <key>                    # Press keyboard key\n\n# Navigation\ncamofox go-back                        # Browser back\ncamofox go-forward                     # Browser forward\ncamofox search \"query\" --engine google # Search (8 engines supported)\ncamofox eval \"document.title\"          # Execute JavaScript\ncamofox wait <selector> [--timeout ms] # Wait for element\n```\n\n> **Text input:** CamoFox has no character limit for typed or filled text. Short text stays humanized for anti-detection, while long text automatically switches to bulk DOM insertion so large inputs do not truncate.\n\n### Session Management\n\n```bash\ncamofox session save <name>            # Save current browser state\ncamofox session load <name>            # Restore browser state\ncamofox session list                   # List saved sessions\ncamofox session delete <name>          # Delete saved session\n```\n\n### Cookie Management\n\n```bash\ncamofox cookie export <file>           # Export cookies to JSON file\ncamofox cookie import <file>           # Import cookies from JSON file\n```\n\n### Auth Vault\n\nSecurely store credentials locally with AES-256-GCM encryption. Credentials are **never** output to stdout — safe for LLM agent automation.\n\n```bash\ncamofox auth save <profile> [--url URL]  # Save credentials (prompts for master password)\ncamofox auth load <profile>              # Show profile info (username only)\ncamofox auth list                        # List saved profiles (no secrets shown)\ncamofox auth delete <profile>            # Delete a profile\ncamofox auth change-password <profile>   # Change master password\n\n# Inject credentials into a browser tab (LLM-safe)\ncamofox snapshot                         # Get element refs first\ncamofox auth load gmail --inject --username-ref e5 --password-ref e12\n```\n\n> **Security:** Master passwords use Argon2id KDF (with PBKDF2 fallback). Vault files are stored with 0600 permissions. The `--inject` flag sends credentials directly to the browser — the LLM agent never sees the password.\n\n### Pipeline Scripting\n\nExecute multiple commands from a file for automation workflows:\n\n```bash\n# Create a script\ncat > login-flow.txt << 'EOF'\n# Login automation script\nopen https://example.com/login\nsnapshot\ntype e3 \"username\"\ntype e5 \"password\"\nclick e7\nwait .dashboard --timeout 5000\nscreenshot --output result.png\nclose\nEOF\n\n# Run it\ncamofox run login-flow.txt\n\n# Continue on errors\ncamofox run login-flow.txt --continue-on-error\n\n# Read from stdin\necho \"get-url\" | camofox run -\n```\n\n### Server Management\n\n```bash\ncamofox server start                   # Start server daemon\ncamofox server start --background      # Start in background\ncamofox server stop                    # Stop server daemon\ncamofox server status                  # Check server status\n```\n\n### Diagnostics\n\n```bash\ncamofox health                         # System health report\ncamofox version                        # CLI + server version\ncamofox info                           # Configuration info\n```\n\n### Console Capture\n\n```bash\ncamofox console [tabId]                  # View console messages\ncamofox console [tabId] --type error     # Filter by type (log/warning/error/info/debug)\ncamofox console [tabId] --clear          # View then clear messages\ncamofox errors [tabId]                   # View uncaught JavaScript errors\ncamofox errors [tabId] --clear           # View then clear errors\n```\n\n### Playwright Tracing\n\n```bash\ncamofox trace start [tabId]              # Start recording trace\ncamofox trace stop [tabId] [-o file.zip] # Stop and save trace ZIP\ncamofox trace chunk-start [tabId]        # Start new trace chunk\ncamofox trace chunk-stop [tabId] [-o f]  # Stop chunk and save ZIP\ncamofox trace status [tabId]             # Check active trace status\n```\n\nView traces at [trace.playwright.dev](https://trace.playwright.dev)\n\n### Global Options\n\n| Flag | Env Var | Description | Default |\n|------|---------|-------------|---------|\n| `--user <id>` | `CAMOFOX_USER` | User/profile ID | `cli-default` |\n| `--port <port>` | `PORT` | Server port | `9377` |\n| `--format <fmt>` | — | Output: `json`, `text`, `plain` | `text` |\n| `-V, --version` | — | Show version | — |\n| `-h, --help` | — | Show help | — |\n\n### Output Formats\n\n```bash\ncamofox get-url --format json          # {\"url\":\"https://example.com\"}\ncamofox get-url --format text          # URL: https://example.com\ncamofox get-url --format plain         # https://example.com\n```\n\n> **Tip:** Use `--format json` for programmatic parsing and LLM agent integration.\n\n## Security\n\n### Anti-Detection\nCamoFox uses [Camoufox](https://github.com/daijro/camoufox), a Firefox fork with **C++ level fingerprint spoofing**. Unlike Chromium-based tools, CamoFox passes bot detection on Google, Cloudflare, and other anti-bot services.\n\n### Auth Vault\n- **AES-256-GCM** encryption with **Argon2id** key derivation (PBKDF2 fallback)\n- Credentials **never** appear in stdout (safe for LLM agent pipelines)\n- Vault files stored with `0600` permissions\n- Master password required for all vault operations\n\n### LLM Agent Safety\n- The `--inject` flag sends credentials directly to the browser — the LLM agent orchestrating the CLI never sees raw passwords\n- Output formats are designed for safe parsing without credential exposure\n- Pipeline scripts can reference auth profiles without embedding secrets\n\n## Usage with AI Agents\n\nCamoFox works seamlessly with AI coding agents and LLM-powered automation:\n\n### AI Coding Assistants (Recommended)\n\nAdd CamoFox skills to your AI coding assistant for full browser automation context:\n\n```bash\nnpx skills add redf0x1/camofox-browser\n```\n\nThis works with **Claude Code**, **Codex**, **Cursor**, **Gemini CLI**, **GitHub Copilot**, **Goose**, **OpenCode**, **Windsurf**, and [40+ other agents](https://github.com/vercel-labs/skills#supported-agents).\n\n**Available skills:**\n\n| Skill | Focus | Best For |\n|-------|-------|----------|\n| `camofox-browser` | Full coverage (CLI + API + OpenClaw) | Complete reference |\n| `camofox-cli` | CLI-only (50+ commands) | Terminal-first workflows |\n| `dogfood` | QA testing workflow | Systematic web app testing |\n| `gemini-image` | Gemini image generation | AI image automation |\n| `reddit` | Reddit automation | Reddit posting/commenting |\n\nThe installer will prompt you to choose which skills and which agents to configure.\n\n#### Claude Code\n\n```bash\nnpx skills add redf0x1/camofox-browser\n# Installs to .claude/skills/camofox-browser/SKILL.md\n```\n\n#### Cursor / GitHub Copilot / Codex\n\n```bash\nnpx skills add redf0x1/camofox-browser\n# Installs to .agents/skills/ directory\n```\n\n> **Tip:** Skills are symlinked from the repo, so they stay up to date. Do not manually copy `SKILL.md` files.\n\n### MCP Integration (Recommended)\nUse [CamoFox MCP](https://github.com/redf0x1/camofox-mcp) for direct integration with Claude, Cursor, Windsurf, and other MCP-compatible agents. See [Used With](#used-with).\n\n### CLI Integration\nAI agents can use the CLI with `--format json` for structured output:\n\n```bash\ncamofox open https://example.com       # Open page\ncamofox snapshot --format json         # Get structured element tree\ncamofox click e5                       # Interact with elements\ncamofox auth load gmail --inject --username-ref e5 --password-ref e12  # Safe credential injection\n```\n\n### Pipeline Automation\nCreate reusable automation scripts that AI agents can execute:\n\n```bash\ncamofox run automation-flow.txt        # Execute multi-step workflow\n```\n\n## Architecture\n\n```text\nAI Agent (MCP / OpenClaw / REST Client)\n    │\n    ▼ HTTP REST API (port 9377)\n┌──────────────────────────────────────────┐\n│          CamoFox Browser Server          │\n│          (Express + TypeScript)          │\n├──────────────────────────────────────────┤\n│ Routes                 Services          │\n│  ├── Core API           ├── Browser      │\n│  └── OpenClaw compat    ├── Session      │\n│                         └── Tab ops      │\n├──────────────────────────────────────────┤\n│        Camoufox Engine (anti-detect)     │\n│   Firefox fork + engine-level spoofing   │\n└──────────────────────────────────────────┘\n```\n\n### Persistent Profiles (v1.3.0)\n\n- Each `userId` runs in its own persistent Firefox process/context (backed by `launchPersistentContext(userDataDir)`)\n- Profile data is stored under `~/.camofox/profiles/` (override via `CAMOFOX_PROFILES_DIR`). Linux/macOS keep the readable default-user directory name; new Windows profiles use a deterministic hashed directory name so case-insensitive or trailing-dot/space-equivalent user IDs cannot share a Firefox profile. Existing Windows directories from the previous layout are read in place only when their exact on-disk name is unambiguous and no hashed directory also exists; conflicting layouts fail closed with both recovery paths in the error.\n- Idle user contexts are closed via LRU eviction (profile data remains on disk)\n\n## API Reference\n\nBase URL: `http://localhost:9377`\n\n> **Security defaults:** `CAMOFOX_HOST` now defaults to `127.0.0.1`, and `CAMOFOX_AUTH_MODE=auto` keeps local loopback usage open while requiring `CAMOFOX_API_KEY` when you bind beyond loopback (for example `0.0.0.0` in Docker or PaaS). Set `CAMOFOX_AUTH_MODE=required` to require API-key auth everywhere. Set `CAMOFOX_AUTH_MODE=disabled` only for trusted private agent networks whose clients cannot send bearer tokens; this disables API-key auth for protected endpoints and keeps private-network navigation blocked. On non-loopback binds, navigation targets on loopback/private/link-local/metadata hosts are blocked by default unless you explicitly set `CAMOFOX_ALLOW_PRIVATE_NETWORK=true`. If you also configure `PROXY_HOST`/`PROXY_PORT`, exposed deployments must opt into `CAMOFOX_ALLOW_PRIVATE_NETWORK=true` until proxy-side private-target validation exists.\n\n### API Documentation\n\nThe Camofox Browser API includes OpenAPI 3.1.0 docs for a representative subset of the shipped route surface:\n\n- **Interactive API Explorer**: [http://localhost:9377/api/docs](http://localhost:9377/api/docs) — Swagger UI with live request testing\n- **OpenAPI Specification**: [http://localhost:9377/openapi.json](http://localhost:9377/openapi.json) — Machine-readable OpenAPI 3.1.0 spec\n\nThe OpenAPI spec covers a representative subset of core and OpenClaw endpoints, including request schemas, response shapes, authentication requirements, and validation rules.\n\n### Core Endpoints\n\nNote: For any endpoint that targets an existing tab (`/tabs/:tabId/...`), the server resolves `tabId` **within a `userId` scope**. If you omit `userId` from the request body, the server returns `400 { \"error\": \"userId is required\" }`. If `userId` is present but the tab belongs to a different user, the server returns `404 Tab not found` — except `DELETE /tabs/:tabId`, which is idempotent and returns `200 { \"ok\": true }` when no matching tab is found under the given `userId` scope (the tab is already gone from the caller's perspective). For endpoints that accept `userId` as a query parameter (e.g. `GET /tabs/:tabId/snapshot`), omitting it may also result in a `400` or `404` depending on the route.\n\n| Method | Endpoint | Description | Required | Auth |\n|--------|----------|-------------|----------|------|\n| POST | `/sessions/:userId/cookies` | Import cookies into a user session (Playwright cookie objects) | Path: `userId`; Body: `{ \"cookies\": Cookie[] }` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/health` | Health check (also pre-launches the browser) | None | None |\n| GET | `/presets` | List available geo presets (built-in + custom) | None | None |\n| POST | `/tabs` | Create a new tab (supports `preset` + per-field overrides) | Body: `userId` + (`sessionKey` or `listItemId`) | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs?userId=...` | List all tabs for a user (OpenClaw-compatible response shape) | Query: `userId` | None |\n| POST | `/tabs/:tabId/navigate` | Navigate to a URL, or expand a search `macro` + `query` | Body: `userId` + (`url` or `macro`) | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/snapshot?userId=...` | Accessibility snapshot annotated with `eN` element refs | Query: `userId` | None |\n| POST | `/tabs/:tabId/wait` | Wait for page readiness (DOM + optional network idle) | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/click` | Click by `ref` (e.g. `e12`) or CSS `selector` | Body: `userId` + (`ref` or `selector`) | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/type` | Type into an element by `ref` or CSS `selector` | Body: `userId` + (`ref` or `selector`) + `text` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/press` | Press a key (e.g. `Enter`, `Escape`) | Body: `userId` + `key` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/scroll` | Scroll up/down/left/right by pixels | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/scroll-element` | Scroll specific element into view | Body: userId, ref/selector | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/back` | Go back | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/forward` | Go forward | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/refresh` | Refresh | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/links?userId=...&limit=50&offset=0` | Extract links (paginated) | Query: `userId` | None |\n| GET | `/tabs/:tabId/images?userId=...` | List extracted images | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/screenshot?userId=...&fullPage=true` | Screenshot (PNG bytes) | Query: `userId` | None |\n| GET | `/tabs/:tabId/stats?userId=...` | Tab stats + visited URLs | Query: `userId` | None |\n| DELETE | `/tabs/:tabId` | Close a tab (expects JSON body: `{ \"userId\": \"...\" }`) | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| DELETE | `/tabs/group/:listItemId` | Close a tab group (expects JSON body: `{ \"userId\": \"...\" }`) | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| DELETE | `/sessions/:userId` | Close all sessions for a user | Path: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/sessions/:userId/toggle-display` | Toggle display mode (headless/headed/virtual) | Path: `userId`; Body: `{ \"headless\": true\\|false\\|\"virtual\" }` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/cookies` | Export tab cookies | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/downloads` | List tab downloads | Query: `userId` | None |\n| GET | `/users/:userId/downloads` | List user downloads | Path: `userId` | None |\n| GET | `/downloads/:downloadId` | Download metadata | Query: `userId` | None |\n| GET | `/downloads/:downloadId/content` | Stream download content | Query: `userId` | None |\n| DELETE | `/downloads/:downloadId` | Delete tracked download | Body or Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/extract-resources` | Extract downloadable resources | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/batch-download` | Batch download resources | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/resolve-blobs` | Resolve blob URLs to base64 | Body: `userId` + `urls[]` | None |\n| POST | `/tabs/:tabId/trace/start` | Start trace recording | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/trace/stop` | Stop and save trace ZIP | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/trace/chunk/start` | Start trace chunk | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/trace/chunk/stop` | Stop chunk and save ZIP | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/trace/status` | Check trace status | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/sessions/:userId/traces` | List managed trace ZIPs for a user | Path: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/sessions/:userId/traces/:filename` | Download a managed trace ZIP | Path: `userId`, `filename` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| DELETE | `/sessions/:userId/traces/:filename` | Delete a managed trace ZIP | Path: `userId`, `filename` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/console` | Get console messages | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/tabs/:tabId/errors` | Get uncaught JS errors | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/console/clear` | Clear console + errors | Body or Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/tabs/:tabId/extract-structured` | Extract deterministic JSON from a structured schema | Body: `userId` + `schema` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n\n### Toggle Display Mode\n```bash\nPOST /sessions/:userId/toggle-display\n{\"headless\": \"virtual\"}\n```\n**Auth:** Conditional — requires `Authorization: Bearer $CAMOFOX_API_KEY` when `CAMOFOX_AUTH_MODE=required` or when `auto` mode has an API key configured. No auth is required in `CAMOFOX_AUTH_MODE=disabled`.\nSwitch browser between headless and headed mode. When encountering CAPTCHAs or issues requiring visual interaction, switch to headed mode to show the browser window.\n\n**Platform note:** The Windows x64 contract is headless-only. Requests with `headless: false` or `headless: \"virtual\"` return HTTP 400 on Windows. The Xvfb/VNC behavior described below is Linux-only.\n\nReturns:\n```json\n{\"ok\": true, \"headless\": \"virtual\", \"vncUrl\": \"http://localhost:6080/vnc.html?autoconnect=true&resize=scale&token=...\", \"message\": \"Browser visible via VNC\", \"userId\": \"agent1\"}\n```\n\n**Note:** This restarts the browser context. All tabs are invalidated but cookies/auth state persist via the persistent profile.\n\n### Browser Viewer (noVNC)\nOn Linux, when the display mode is set to `\"virtual\"` or a headed request requires a virtual display, the server can start a VNC viewer accessible via web browser.\n\n```bash\n# 1. Switch to virtual mode\nPOST /sessions/:userId/toggle-display\n{\"headless\": \"virtual\"}\n# Response includes vncUrl — open in browser to see Firefox\n\n# 2. Solve CAPTCHA or interact with the browser\n\n# 3. Switch back to headless\nPOST /sessions/:userId/toggle-display\n{\"headless\": true}\n# VNC automatically stops\n```\n\nThe VNC session auto-terminates after 2 minutes (configurable via `CAMOFOX_VNC_TIMEOUT_MS`).\n\n### Evaluate JavaScript\nExecute a JavaScript expression in the page context and return the JSON-serializable result.\n\nAuth: required when `CAMOFOX_AUTH_MODE=required` or when `auto` mode has an API key configured; no auth is required in `CAMOFOX_AUTH_MODE=disabled`.\n\nNote: async expressions must be wrapped in an async IIFE (for example, `(async () => { ... })()`). Top-level `await` is not supported.\n\n```bash\nPOST /tabs/:tabId/evaluate\n{\"userId\": \"agent1\", \"expression\": \"document.title\"}\n```\nReturns: `{\"ok\": true, \"result\": \"Page Title\", \"resultType\": \"string\", \"truncated\": false}`\n\n### Evaluate JavaScript (Extended)\nExecute a long-running JavaScript expression (up to 300s timeout). Conditionally API-key protected. Rate limited.\n\nAuth: required when `CAMOFOX_AUTH_MODE=required` or when `auto` mode has an API key configured; no auth is required in `CAMOFOX_AUTH_MODE=disabled`.\n\nNote: async expressions must be wrapped in an async IIFE (for example, `(async () => { ... })()`). Top-level `await` is not supported.\n\n```bash\nPOST /tabs/:tabId/evaluate-extended\n{\"userId\": \"agent1\", \"expression\": \"(async () => { const response = await fetch('/api/data'); return await response.json(); })()\", \"timeout\": 60000}\n```\nReturns: `{\"ok\": true, \"result\": {...}, \"resultType\": \"object\", \"truncated\": false}`\n\n### OpenClaw Endpoints\n\nOpenClaw-compatible aliases (used by the OpenClaw plugin).\n\n| Method | Endpoint | Description | Required | Auth |\n|--------|----------|-------------|----------|------|\n| GET | `/` | Status (alias of `/health`) | None | None |\n| POST | `/tabs/open` | Open tab (OpenClaw request/response shape) | Body: `userId` + `url` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| POST | `/start` | Start browser engine | None | None |\n| POST | `/stop` | Stop browser engine | None | `x-admin-key: $CAMOFOX_ADMIN_KEY` |\n| POST | `/navigate` | Navigate (OpenClaw request shape: `targetId` in body) | Body: `userId` + `targetId` + `url` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n| GET | `/snapshot?userId=...&targetId=...` | Snapshot (OpenClaw response shape) | Query: `userId` + `targetId` | None |\n| POST | `/act` | Combined actions (`click`, `type`, `press`, `scroll`, `scrollIntoView`, `hover`, `wait`, `close`, `extractStructured`) | Body: `userId` + `targetId` + `kind` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |\n\n### Network capture\n\nSet `networkCapture: {}` on `POST /tabs` or `POST /tabs/open` to record metadata before the tab's first navigation. The response includes a private `networkKey`. Use `networkCapture: { \"start\": false }` to reserve a key and start recording on demand. OpenClaw's `POST /tabs/open` uses the existing canonical profile.\n\nFor a capture spanning multiple tabs, set `networkCapture: { \"scope\": \"session\" }` on the first tab. On subsequent tab creation in the same logical session, send `networkCapture: { \"scope\": \"session\", \"join\": true }` and the capture key in the `X-Camofox-Network-Key` header. Tabs without explicit enrollment are excluded, even when they share the same browser context.\n\n| Method | Endpoint | Purpose |\n|---|---|---|\n| GET | `/network/capabilities` | Discover capture contract version and HAR support |\n| POST | `/network/capture/start` | Start a prepared capture |\n| POST | `/network/capture/stop` | Freeze the captured records |\n| GET | `/network/requests` | List records, using `after` and `limit` for pagination |\n| GET | `/network/requests/:id` | Inspect one request |\n| GET | `/network/har` | Download the retained records as HAR 1.2 JSON |\n\nCapture operations require `?userId=...` and the `X-Camofox-Network-Key` header. Send the server API key as a bearer token when browser authentication is configured. Keep capture keys out of URLs and shared logs. The list response includes `nextCursor` and the number of evicted entries in `dropped`.\n\nCaptures hold up to 256 requests each, with up to 32 captures server-wide. Lower the entry count or active lifetime using `CAMOFOX_NETWORK_MAX_ENTRIES` and `CAMOFOX_NETWORK_TTL_MS`. The default active lifetime is 15 minutes. A stopped capture expires after 5 minutes or when its last enrolled tab closes, whichever comes first. Export before closing the tabs.\n\nThe recorder observes HTTP and HTTPS requests emitted by enrolled pages, including their frames. It stores sanitized URLs without credentials, query strings, or fragments, plus selected response metadata. Response sizes are best-effort. URL paths may contain application data, so review exports before sharing them. The recorder stores metadata by default.\n\nTo enable opt-in response bodies, configure `CAMOFOX_NETWORK_BODY_CAPTURE=true` and `CAMOFOX_API_KEY`, then set `networkCapture.captureBodies` to `true` when creating a capture. Retrieve an available body with `includeBody=true` on the request detail endpoint. Eligible bodies are small UTF-8 JSON, HTML, plain text, or CSV responses with a verified unencoded length. Compressed, streamed, and oversized payloads are skipped. Limits are 16 KiB per body and 64 KiB per capture. Lists and HAR exports contain metadata only.\n\nTo enable request interception, configure both `CAMOFOX_API_KEY` and `CAMOFOX_NETWORK_INTERCEPTION=true`. Use `PUT /network/intercept?userId=...` with a tab capture key and a JSON body containing `rules`. Each rule matches an exact HTTP(S) URL and method for a fetch or XHR request. An `abort` rule takes `action`, `url`, and `method`. A `fulfill` rule additionally takes a static `body`, `status`, and `contentType` of `application/json` or `text/plain`. There are at most four rules per tab and each mock is capped at 16 KiB. An empty array clears rules. Stopping a capture removes its interception handler. Playwright routing can disable HTTP caching while the handler is active.\n\n## Structured Extract\n\nStructured extract returns deterministic JSON from a DOM schema without arbitrary JavaScript. Use it when you want stable data contracts instead of ad-hoc `evaluate()` calls.\n\nCore API:\n\n```bash\ncurl -X POST \"$CAMOFOX_URL/tabs/$TAB_ID/extract-structured\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"userId\": \"agent1\",\n    \"schema\": {\n      \"kind\": \"object\",\n      \"fields\": {\n        \"title\": { \"kind\": \"text\", \"selector\": \"h1\", \"required\": true, \"trim\": true },\n        \"products\": {\n          \"kind\": \"list\",\n          \"selector\": \".product\",\n          \"item\": {\n            \"kind\": \"object\",\n            \"fields\": {\n              \"name\": { \"kind\": \"text\", \"selector\": \".name\", \"required\": true, \"trim\": true },\n              \"href\": { \"kind\": \"url\", \"selector\": \"a.product-link\", \"attr\": \"href\", \"required\": true }\n            }\n          }\n        }\n      }\n    }\n  }'\n```\n\nCLI:\n\n```bash\ncamofox extract-structured @schema.json <tabId> --user <userId> --format json\n```\n\nOpenClaw:\n\n```bash\ncurl -X POST \"$CAMOFOX_URL/act\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"kind\": \"extractStructured\",\n    \"targetId\": \"tab-123\",\n    \"userId\": \"agent1\",\n    \"schema\": {\n      \"kind\": \"object\",\n      \"fields\": {\n        \"title\": { \"kind\": \"text\", \"selector\": \"h1\", \"required\": true }\n      }\n    }\n  }'\n```\n\nNotes:\n\n- invalid schemas fail with HTTP 400\n- required runtime misses fail the whole request with HTTP 422 and `fieldPath`\n- optional scalar/object/list nodes normalize to `null` / `null` / `[]`\n- selectors must be CSS; no XPath, arbitrary JavaScript, or AI extraction\n- raw resource extraction and structured extraction stay separate on purpose\n\n## Search Macros\n\nUse macros via `POST /tabs/:tabId/navigate` with `{ \"macro\": \"@google_search\", \"query\": \"...\" }`.\n\n| Macro | Engine |\n|-------|--------|\n| `@google_search` | Google |\n| `@youtube_search` | YouTube |\n| `@amazon_search` | Amazon |\n| `@reddit_search` | Reddit (JSON) |\n| `@reddit_subreddit` | Reddit subreddit (JSON) |\n| `@wikipedia_search` | Wikipedia |\n| `@twitter_search` | Twitter/X |\n| `@yelp_search` | Yelp |\n| `@spotify_search` | Spotify |\n| `@netflix_search` | Netflix |\n| `@linkedin_search` | LinkedIn |\n| `@instagram_search` | Instagram tags |\n| `@tiktok_search` | TikTok |\n| `@twitch_search` | Twitch |\n\n## Geo Presets\n\nBuilt-in presets (also exposed via `GET /presets`):\n\n| Preset | Locale | Timezone | Location |\n|--------|--------|----------|----------|\n| `us-east` | `en-US` | `America/New_York` | New York (40.7128, -74.0060) |\n| `us-west` | `en-US` | `America/Los_Angeles` | Los Angeles (34.0522, -118.2437) |\n| `japan` | `ja-JP` | `Asia/Tokyo` | Tokyo (35.6895, 139.6917) |\n| `uk` | `en-GB` | `Europe/London` | London (51.5074, -0.1278) |\n| `germany` | `de-DE` | `Europe/Berlin` | Berlin (52.5200, 13.4050) |\n| `vietnam` | `vi-VN` | `Asia/Ho_Chi_Minh` | Ho Chi Minh City (10.8231, 106.6297) |\n| `singapore` | `en-SG` | `Asia/Singapore` | Singapore (1.3521, 103.8198) |\n| `australia` | `en-AU` | `Australia/Sydney` | Sydney (-33.8688, 151.2093) |\n\nCreate a tab with a preset:\n\n```bash\ncurl -X POST http://localhost:9377/tabs \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"userId\":\"agent1\",\"sessionKey\":\"task1\",\"preset\":\"japan\",\"url\":\"https://example.com\"}'\n```\n\nCustom presets: set `CAMOFOX_PRESETS_FILE=/path/to/presets.json` (JSON object; keys become preset names).\n\n## Session-Level Proxy and Geo Overrides\n\nCamoFox supports session-level proxy and geolocation configuration with a hybrid model that combines server defaults with per-session overrides.\n\n### Proxy Configuration Model\n\n**Server-level baseline** (via environment variables):\n- `PROXY_HOST`, `PROXY_PORT`, `PROXY_USERNAME`, `PROXY_PASSWORD` — applied as the default for all sessions\n- Enables Camoufox geoip mode when configured\n\n**Session-level overrides** (via `POST /tabs` or CLI):\n- `proxyProfile` — select a named proxy profile from `CAMOFOX_PROXY_PROFILES_FILE`\n- `proxy` — provide raw proxy fields (`host`, `port`, `username`, `password`) directly\n- Session-level proxy overrides the server baseline for that specific `userId + sessionKey` combination\n\n**Session identity rules**:\n- The same `userId` may run different `sessionKey` profiles in parallel with different proxy/geo configurations\n- The same `userId + sessionKey` combination maintains a stable proxy/geo identity — requests with conflicting proxy/geo fields are rejected\n- Session reuse and cleanup scope proxy/geo identity by `userId + sessionKey`, not just `userId`\n\n### Geo Mode Behavior\n\nCamoFox offers two geo modes that control how explicit geo fields (locale, timezone, geolocation) interact with proxy-derived geo:\n\n**`geoMode=explicit-wins`** (default):\n- Explicit geo fields (locale, timezone, geolocation) remain authoritative\n- Proxy-derived geo suggestions are ignored\n- Use this mode when you want precise geo control regardless of proxy location\n\n**`geoMode=proxy-locked`**:\n- Explicit geo fields that conflict with proxy-derived geo are rejected\n- Proxy-derived geo is authoritative\n- Use this mode to ensure geo consistency with proxy exit location\n\n### CLI Examples\n\nSession-level proxy with named profile:\n```bash\ncamofox open https://example.com --proxy-profile tokyo-exit --user agent1\n```\n\nSession-level proxy with raw fields:\n```bash\ncamofox open https://example.com \\\n  --proxy-host proxy.example.com \\\n  --proxy-port 8080 \\\n  --proxy-username user \\\n  --proxy-password pass \\\n  --user agent1\n```\n\nCombine proxy with geo mode:\n```bash\ncamofox open https://example.com \\\n  --proxy-profile london-exit \\\n  --geo uk \\\n  --geo-mode proxy-locked \\\n  --user agent1\n```\n\n### API Examples\n\nUsing a named proxy profile with explicit geo:\n```bash\ncurl -X POST http://localhost:9377/tabs \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"userId\": \"agent1\",\n    \"sessionKey\": \"task1\",\n    \"url\": \"https://example.com\",\n    \"proxyProfile\": \"tokyo-exit\",\n    \"preset\": \"japan\",\n    \"geoMode\": \"explicit-wins\"\n  }'\n```\n\nUsing raw proxy fields with proxy-locked geo:\n```bash\ncurl -X POST http://localhost:9377/tabs \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"userId\": \"agent1\",\n    \"sessionKey\": \"task2\",\n    \"url\": \"https://example.com\",\n    \"proxy\": {\n      \"host\": \"proxy.example.com\",\n      \"port\": 8080,\n      \"username\": \"user\",\n      \"password\": \"pass\"\n    },\n    \"geoMode\": \"proxy-locked\"\n  }'\n```\n\n### Named Proxy Profiles\n\nDefine proxy profiles in a JSON file and point `CAMOFOX_PROXY_PROFILES_FILE` to it:\n\n```json\n{\n  \"tokyo-exit\": {\n    \"server\": \"http://tokyo.proxy.example.com:8080\",\n    \"username\": \"user\",\n    \"password\": \"pass\"\n  },\n  \"london-exit\": {\n    \"server\": \"http://london.proxy.example.com:8080\"\n  }\n}\n```\n\nThen use profiles by name in API requests or CLI commands.\n\n## Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `CAMOFOX_PORT` | `9377` | Server port |\n| `PORT` | (optional) | Alternative port env var (common in PaaS) |\n| `NODE_ENV` | `development` | Node environment |\n| `CAMOFOX_HOST` | `127.0.0.1` | Server bind host. Set `0.0.0.0` for Docker/PaaS/network exposure. Non-loopback binds require `CAMOFOX_API_KEY` unless `CAMOFOX_AUTH_MODE=disabled`. |\n| `CAMOFOX_ADMIN_KEY` | (empty) | Required for `POST /stop` (sent via `x-admin-key`) |\n| `CAMOFOX_AUTH_MODE` | `auto` | API-key policy: `auto` allows loopback without auth and requires `CAMOFOX_API_KEY` for non-loopback binds; `required` requires `CAMOFOX_API_KEY` for every bind; `disabled` disables API-key auth for protected endpoints and is only for trusted private agent networks. |\n| `CAMOFOX_API_KEY` | (empty) | Guards protected endpoints (tab creation, navigation, interaction, session management, downloads, image extraction, tracing, console) via `Authorization: Bearer` header when set. Required in `CAMOFOX_AUTH_MODE=required`, and required by `auto` whenever `CAMOFOX_HOST` exposes the server beyond loopback. Must be unset when `CAMOFOX_AUTH_MODE=disabled`. |\n| `CAMOFOX_ALLOW_PRIVATE_NETWORK` | `true` on loopback binds, `false` otherwise | Allows navigation to loopback/private/link-local/metadata targets. Leave unset for the safe default; enable only for trusted deployments that intentionally need internal-network reachability. |\n| `CAMOFOX_HEADLESS` | `true` | Display mode: `true` (headless), `false` (headed), `virtual` (Xvfb). Windows x64 supports `true` only; Xvfb/VNC is Linux-only. |\n| `CAMOFOX_VNC_RESOLUTION` | `1920x1080x24` | Virtual Xvfb display resolution (`WIDTHxHEIGHTxDEPTH`) |\n| `CAMOFOX_VNC_TIMEOUT_MS` | `120000` | Max VNC session duration in ms before auto-stop |\n| `CAMOFOX_EVAL_EXTENDED_RATE_LIMIT_MAX` | `20` | Max evaluate-extended requests per user per window |\n| `CAMOFOX_EVAL_EXTENDED_RATE_LIMIT_WINDOW_MS` | `60000` | Rate limit window duration in ms |\n| `CAMOFOX_COOKIES_DIR` | `~/.camofox/cookies` | Directory used by the OpenClaw plugin cookie tool |\n| `CAMOFOX_PROFILES_DIR` | `~/.camofox/profiles` | Profile storage directory (persistent per-user Firefox profiles) |\n| `CAMOFOX_DOWNLOADS_DIR` | `~/.camofox/downloads` | Download artifact directory |\n| `CAMOFOX_DOWNLOAD_TTL_MS` | `86400000` | Download metadata retention TTL |\n| `CAMOFOX_MAX_DOWNLOAD_SIZE_MB` | `100` | Max single download size |\n| `CAMOFOX_MAX_BATCH_CONCURRENCY` | `5` | Batch download concurrency cap |\n| `CAMOFOX_MAX_BLOB_SIZE_MB` | `5` | Max blob payload size |\n| `CAMOFOX_MAX_DOWNLOADS_PER_USER` | `500` | Per-user download record cap |\n| `CAMOFOX_CONSOLE_BUFFER_SIZE` | `1000` | Per-tab console/error message buffer size (minimum `100`) |\n| `HANDLER_TIMEOUT_MS` | `30000` | Handler timeout fallback |\n| `MAX_CONCURRENT_PER_USER` | `3` | Concurrent operations per user |\n| `CAMOFOX_VNC_BASE_PORT` | `6080` | noVNC/websockify base port |\n| `CAMOFOX_VNC_HOST` | `localhost` | noVNC host in returned URL |\n| `CAMOFOX_CLI_USER` | `cli-default` | Default CLI user id |\n| `CAMOFOX_SERVER_PID_FILE` | (unset) | Optional daemon PID file path used by the CLI server manager |\n| `CAMOFOX_IDLE_TIMEOUT_MS` | `1800000` | Stage 1 idle cleanup threshold (ms) |\n| `CAMOFOX_IDLE_EXIT_TIMEOUT_MS` | `1800000` | Stage 2 daemon exit quiet window (ms, defaults to match Stage 1) |\n| `CAMOFOX_PRESETS_FILE` | (unset) | Optional JSON file defining/overriding geo presets |\n| `CAMOFOX_PROXY_PROFILES_FILE` | (unset) | Optional JSON file defining named proxy profiles for session-level overrides |\n| `CAMOFOX_SESSION_TIMEOUT` | `1800000` | Session idle timeout in ms (min `60000`) |\n| `CAMOFOX_MAX_SESSIONS` | `50` | Maximum concurrent sessions |\n| `CAMOFOX_MAX_TABS` | `10` | Maximum tabs per session |\n| `PROXY_HOST` | (empty) | Proxy host (server-level default; enables proxy routing) |\n| `PROXY_PORT` | (empty) | Proxy port (server-level default) |\n| `PROXY_USERNAME` | (empty) | Proxy username (server-level default) |\n| `PROXY_PASSWORD` | (empty) | Proxy password (server-level default) |\n| `CAMOFOX_MAX_SNAPSHOT_CHARS` | `80000` | Max characters in snapshot before truncation |\n| `CAMOFOX_MAX_SNAPSHOT_NODES` | `2000` | Max accessibility snapshot nodes before truncation |\n| `CAMOFOX_SNAPSHOT_TAIL_CHARS` | `5000` | Characters preserved at end of truncated snapshot |\n| `CAMOFOX_BUILDREFS_TIMEOUT_MS` | `12000` | Timeout for building element refs |\n| `CAMOFOX_TAB_LOCK_TIMEOUT_MS` | `30000` | Timeout for acquiring tab lock |\n| `CAMOFOX_TRACES_DIR` | `~/.camofox/traces` | Managed Playwright trace artifact directory |\n| `CAMOFOX_TRACE_MAX_DURATION_MS` | `300000` | Maximum trace recording duration before automatic stop |\n| `CAMOFOX_HEALTH_PROBE_INTERVAL_MS` | `60000` | Health probe check interval |\n| `CAMOFOX_FAILURE_THRESHOLD` | `3` | Consecutive failures before health degradation |\n| `CAMOFOX_YT_DLP_TIMEOUT_MS` | `30000` | Timeout for yt-dlp subtitle extraction |\n| `CAMOFOX_YT_BROWSER_TIMEOUT_MS` | `25000` | Timeout for browser transcript fallback |\n| `CAMOFOX_OS` | (unset) | Optional server-wide Camoufox OS override (`windows`, `macos`, `linux`, or comma-separated list for randomization) |\n| `CAMOFOX_ALLOW_WEBGL` | (unset) | Optional server-wide WebGL override; malformed values fail startup |\n| `CAMOFOX_SCREEN_WIDTH` | (unset) | Optional screen width override; applied only with `CAMOFOX_SCREEN_HEIGHT` |\n| `CAMOFOX_SCREEN_HEIGHT` | (unset) | Optional screen height override; applied only with `CAMOFOX_SCREEN_WIDTH` |\n| `CAMOFOX_HUMANIZE` | (unset) | Optional server-wide humanization override |\n\n> `CAMOFOX_OS` and `CAMOFOX_SCREEN_*` are **generation-time** controls: they affect only newly generated fingerprints and have no effect while an existing `fingerprint.json` sidecar is in use. Reset the profile or delete `fingerprint.json` to force regeneration under the new defaults. `CAMOFOX_ALLOW_WEBGL` and `CAMOFOX_HUMANIZE` are **launch-time** overrides and apply on every browser launch regardless of whether a sidecar is reused.\n\n### Idle Lifecycle Policy\n\nCamoFox implements a two-stage idle lifecycle for graceful cleanup and daemon exit:\n\n**Stage 1 — Idle Cleanup**\n- After `CAMOFOX_IDLE_TIMEOUT_MS` of idle time (default: 30 minutes), the server runs cleanup to close idle sessions and tabs\n- Cleanup is delayed if browser contexts are launching or sessions are being created\n- New interactive activity (tab creation, navigation, interaction) cancels any pending cleanup\n\n**Stage 2 — Daemon Exit**\n- After Stage 1 cleanup completes, the server waits for `CAMOFOX_IDLE_EXIT_TIMEOUT_MS` (default: matches Stage 1 timeout)\n- If no new activity occurs during this quiet window, the daemon process exits gracefully\n- Any new request activity cancels the pending exit timer\n\n**Activity detection**:\n- Live tabs, launching browser contexts, or staged session creation count as active work and prevent cleanup\n- Empty sessions (sessions with no tabs) do not block cleanup but do disarm pending daemon exit\n- New interactive activity resets both cleanup and exit timers\n\nThis two-stage model ensures cleanup runs before daemon exit, preventing resource leaks while allowing the server to shut down cleanly when fully idle.\n\n## Deployment\n\n### Docker (Recommended)\n\n```bash\ndocker build -t camofox-browser .\ndocker run -p 9377:9377 -p 6080:6080 \\\n  -v ~/.camofox:/home/node/.camofox \\\n  -e CAMOFOX_HOST=0.0.0.0 \\\n  -e CAMOFOX_PORT=9377 \\\n  -e CAMOFOX_AUTH_MODE=auto \\\n  -e CAMOFOX_API_KEY=change-me \\\n  camofox-browser\n```\n\nFor private Docker networks used by agents such as Hermes, OpenClaw, or GoClaw that cannot send a bearer token, keep the service off published host ports and disable API-key auth explicitly:\n\n```bash\ndocker network create camofox-agents\ndocker run -d \\\n  --name camofox-browser \\\n  --network camofox-agents \\\n  -e CAMOFOX_HOST=0.0.0.0 \\\n  -e CAMOFOX_AUTH_MODE=disabled \\\n  -v ~/.camofox:/home/node/.camofox \\\n  camofox-browser\n```\n\nThen configure the agent with `CAMOFOX_URL=http://camofox-browser:9377` from another container on the same Docker network. Do not combine `CAMOFOX_AUTH_MODE=disabled` with public port publishing or `CAMOFOX_ALLOW_PRIVATE_NETWORK=true`.\n\n### Fly.io\n\nThis repo includes a starter `fly.toml` for one-command deploys.\n\n```bash\nfly launch\nfly deploy\n```\n\n### Railway\n\n- Create a new project → deploy from this GitHub repo\n- Set `CAMOFOX_HOST=0.0.0.0`\n- Set `CAMOFOX_API_KEY` to a strong secret\n- Set `CAMOFOX_PORT=9377` (Railway will also provide `PORT`, which is supported)\n- Ensure the service exposes port `9377`\n\n### Render\n\n- Create a new Web Service → deploy from this GitHub repo\n- Use Docker (recommended) and expose port `9377`\n- Set `CAMOFOX_HOST=0.0.0.0`\n- Set `CAMOFOX_API_KEY` to a strong secret\n- Set `CAMOFOX_PORT=9377` (or rely on Render `PORT`)\n\n### System Requirements\n\n- Node.js 22+\n- 2GB+ RAM (browser + contexts require significant memory)\n- Linux recommended for production; macOS is fine for development\n\n## Used With\n\n| Project | Description |\n|---------|-------------|\n| [CamoFox MCP](https://github.com/redf0x1/camofox-mcp) | MCP (Model Context Protocol) server for Claude, Cursor, VS Code |\n| [OpenClaw](https://openclaw.ai) | Open-source AI agent framework (compat endpoints included) |\n| [Camoufox](https://github.com/daijro/camoufox) | Anti-detection Firefox browser engine |\n\n## Project Structure\n\n```text\nsrc/\n├── cli/\n│   ├── commands/       # Command modules (core, navigation, interaction, etc.)\n│   │   ├── console.ts   # Console capture commands\n│   │   └── trace.ts     # Playwright tracing commands\n│   ├── vault/          # Auth vault (encryption, storage)\n│   ├── server/         # Server lifecycle management\n│   ├── transport/      # HTTP transport layer\n│   ├── output/         # Output formatting\n│   └── utils/          # Shared utilities\n├── server.ts           # Express app entry point\n├── types.ts            # Shared TypeScript interfaces\n├── routes/\n│   ├── core.ts         # Core REST API (~42 endpoints)\n│   └── openclaw.ts     # OpenClaw compatibility (~7 endpoints)\n├── services/\n│   ├── browser.ts      # Browser lifecycle + persistent context pool\n│   ├── batch-downloader.ts # Batch download orchestrator\n│   ├── context-pool.ts # Browser context pool with LRU eviction\n│   ├── download.ts     # Download tracking service\n│   ├── health.ts       # Browser health tracking\n│   ├── resource-extractor.ts # Page resource extraction\n│   ├── session.ts      # Session management + limits\n│   ├── tab.ts          # Tab operations (snapshot/click/type/etc.)\n│   ├── tracing.ts      # Playwright tracing service\n│   ├── vnc.ts          # VNC/virtual display lifecycle\n│   └── youtube.ts      # YouTube transcript extraction\n├── middleware/\n│   ├── auth.ts         # API/admin auth helpers\n│   ├── errors.ts       # Error handling\n│   ├── logging.ts      # Structured logging\n│   └── rate-limit.ts   # In-memory rate limiter\n└── utils/\n  ├── config.ts       # Environment config parsing\n  ├── cookies.ts      # Cookie utilities\n  ├── download-helpers.ts # Download helper functions\n  ├── launcher.ts     # Browser launcher utilities\n  ├── macros.ts       # Search macro expansion\n  ├── presets.ts      # Geo preset definitions/loader\n  └── snapshot.ts     # Snapshot truncation/windowing\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Credits\n\nThis project is based on [camofox-browser](https://github.com/jo-inc/camofox-browser) by [Jo Inc](https://github.com/jo-inc) (YC W24) and the [Camoufox](https://github.com/daijro/camoufox) anti-detection browser engine by [daijro](https://github.com/daijro).\n\n- [Camoufox](https://camoufox.com) - Firefox-based browser with C++ anti-detection\n- [Donate to Camoufox's original creator daijro](https://camoufox.com/about/)\n- [OpenClaw](https://openclaw.ai) - Open-source AI agent framework\n\n## License\n\n[MIT](LICENSE)\n\n## Crypto Scam Warning\n\nSketchy people are doing sketchy things with crypto tokens named \"Camofox\" now that this project is getting attention. **Camofox is not a crypto project and will never be one.** Any token, coin, or NFT using the Camofox name has nothing to do with us.\n","readmeFilename":"README.md"}