{"_id":"@csrf-armor/nextjs","_rev":"16-2aef3a9740a476ea72be92f3441f1387","name":"@csrf-armor/nextjs","dist-tags":{"latest":"1.4.5"},"versions":{"0.0.1":{"name":"@csrf-armor/nextjs","version":"0.0.1","_id":"@csrf-armor/nextjs@0.0.1","maintainers":[{"name":"muneeb_samuels","email":"muneeb@codebus.io"}],"dist":{"shasum":"c1e754e831567eb39fa3a0045ab5542b7963023b","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-0.0.1.tgz","fileCount":1,"integrity":"sha512-mDOceFjaCsG/Gij/YAe244Z9Zon/7/0esviptBs2gbAPUr2PUS/eZG9/+iOzqKuqwk+FGhccN1u11xHTkTkFGA==","signatures":[{"sig":"MEQCIBdOc9KbFnIFYIeEVKlfIjXbePq8VD4TGp6zUPo7Ha8qAiA/Al1H9JaxOaSU3OOxyjqbaUEPbr1s7rKgvd68TIK/Ew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91},"gitHead":"1d60628c144712936d6f0963559f2a22706ee0b3","_npmUser":{"name":"muneeb_samuels","email":"muneeb@codebus.io"},"_npmVersion":"10.8.1","description":"Package setup","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nextjs_0.0.1_1748898232868_0.5269821984392544","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@csrf-armor/nextjs","version":"0.0.2","_id":"@csrf-armor/nextjs@0.0.2","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"dist":{"shasum":"4a82b8eb16a16ae10d861cdb7ed882e4de220588","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-0.0.2.tgz","fileCount":1,"integrity":"sha512-asnhNiUFmLLtXFfdG4TaDrmI5ng5MJFLazUYTstxhUE+QJwBNBnbLBUrXDTgt1G9QWHB7afc1WKisN/gQ/oFqg==","signatures":[{"sig":"MEQCIHwhkRtoqcJe5jZlWATTUebN9r5vbiLG/WUe8qyOhpGxAiAUkTUg7SE1hm5uYUej7DiUkHGmjSCSOiuPBygGi+ejYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91},"gitHead":"4638b106aaf48fdb5518e487f92d50b3ec6caf9b","_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_npmVersion":"10.8.1","description":"Package setup","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/nextjs_0.0.2_1748901797317_0.18890325962057708","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@csrf-armor/nextjs","version":"1.0.0","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.0.0","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"a4f0821b690e26350d8d903690e399ceaed36316","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.0.0.tgz","fileCount":19,"integrity":"sha512-HW0eE+1USnlTuhXQwQHKt7vh/2Lcn1CGEqma7LvF3aMUpjjivU1eQ51ICaangRq57q48lGwI+SaiNNCu7Gi5HQ==","signatures":[{"sig":"MEQCIHpeMpWLXpk0xTpmaxmALh07ZPfNFT9yqSa5/13s8eEnAiBu/Sx/eU/ORvU9IHFJ9k7q6+9BGSj13ST2mN5OWWaP+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47784},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/793a2a0ea5da488bff2e054fd2e20ec6/csrf-armor-nextjs-1.0.0.tgz","_integrity":"sha512-HW0eE+1USnlTuhXQwQHKt7vh/2Lcn1CGEqma7LvF3aMUpjjivU1eQ51ICaangRq57q48lGwI+SaiNNCu7Gi5HQ==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.0.0_1748951067447_0.7183598064011638","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@csrf-armor/nextjs","version":"1.0.1","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.0.1","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"0bd19caeab0f48ea4cd2035d0fce299f112da08d","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.0.1.tgz","fileCount":19,"integrity":"sha512-TezjuDMWy6mIY56u/ubyopGukVLu30w1g1ojaSwetH0oEvP14be31CJWzKnq+Reo+gYwlfF2t8jzE0LkZZniuw==","signatures":[{"sig":"MEYCIQDwKxk0jt2FG5Pmba6HQDSZ6qTt1/ut/tB0W/z1SJki/AIhALAh19fL+xO+OtXWIkrI8xC3TjkIZOsMc27YmCQlzq4t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43143},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/a539d5d9b88b72bdfa3153782c1a0698/csrf-armor-nextjs-1.0.1.tgz","_integrity":"sha512-TezjuDMWy6mIY56u/ubyopGukVLu30w1g1ojaSwetH0oEvP14be31CJWzKnq+Reo+gYwlfF2t8jzE0LkZZniuw==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.0.1_1748954300697_0.7650392227916716","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@csrf-armor/nextjs","version":"1.1.0","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.1.0","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"8ea5e8f7b117383da3f2b5e3245bdccef287f567","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.1.0.tgz","fileCount":20,"integrity":"sha512-6KvU3wXU1+KQ5pwbsgHTuL/fQaIDLAsMaLY8AK1QAzB7LGUEyQ3PSzQ+Xg9Kj2JBmwpobX/PTCzKS3EvMxxBWg==","signatures":[{"sig":"MEQCIEFywORp7f4FxHGkJuWr8iFkeIW23S8ZGS7VuzJCrY1ZAiBozf0m5R0R2pgokZum+Zga9AES8NM4M2qJnJjW1/HU4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43424},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/873449c7776c4722e9c2ac6e094fba6b/csrf-armor-nextjs-1.1.0.tgz","_integrity":"sha512-6KvU3wXU1+KQ5pwbsgHTuL/fQaIDLAsMaLY8AK1QAzB7LGUEyQ3PSzQ+Xg9Kj2JBmwpobX/PTCzKS3EvMxxBWg==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.1.0_1748955831988_0.5938577986239206","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@csrf-armor/nextjs","version":"1.1.1","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.1.1","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"bba458d89c50f274e653ba0f91bbe68fc3a5fe71","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.1.1.tgz","fileCount":21,"integrity":"sha512-MhJw7ADQNlb9XleoLpbZm+cIOCKpNazHV4STv24xRB1T3PwJGSPjlwSc4O1jTRSAG9BgaOhEZTqCH6eE3NUtcw==","signatures":[{"sig":"MEUCIQDUM1efe3t/QsrhafMNeS53vYvk/lYNmRZxBN5CP6W/7AIgafETcA9mglzcAs+dHGYD7GwR2KaB9igBqarhFxQBJOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43311},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client/index":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/e0d558416831b402b56e24d0c7771cd8/csrf-armor-nextjs-1.1.1.tgz","_integrity":"sha512-MhJw7ADQNlb9XleoLpbZm+cIOCKpNazHV4STv24xRB1T3PwJGSPjlwSc4O1jTRSAG9BgaOhEZTqCH6eE3NUtcw==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.1.1_1748956334085_0.13654484550307466","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@csrf-armor/nextjs","version":"1.2.0","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.2.0","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"b2e0c58c2c1615faa5cc78c65b339bf7c05a04af","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.2.0.tgz","fileCount":21,"integrity":"sha512-RpOW6JthG1t15GNiEA7Z0HS0zYsYaoIiSTKHSifcEZRpy9enlYu6hcUzg9mHTHJDQVVrP9sssIVCJ4jgN4cKXQ==","signatures":[{"sig":"MEQCIAQnpIbY+buk7eOhwcknCncnwRkRrB7iV0bwXmLpgWBcAiBJpq5HVwlezqJCRGmqtVbDVsHMmUQ6ogBY9Li46W5Gww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44183},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/d32410d9a433930a4ce054a41316d871/csrf-armor-nextjs-1.2.0.tgz","_integrity":"sha512-RpOW6JthG1t15GNiEA7Z0HS0zYsYaoIiSTKHSifcEZRpy9enlYu6hcUzg9mHTHJDQVVrP9sssIVCJ4jgN4cKXQ==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.2.0_1748994287469_0.0751521240941917","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@csrf-armor/nextjs","version":"1.2.1","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.2.1","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"e7e2a7b3a409c191afe5a190a1a63865f8005bce","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.2.1.tgz","fileCount":21,"integrity":"sha512-t97ikDH0lLmCsE1uLP2SE8c7SpYmdbFgKTzB5MAVgDMn+D7kI2rrmk/+OAKFHT8i5dY/QK0yp8w3EpJUKqhhqQ==","signatures":[{"sig":"MEQCIHra++xkjvV5JqPgFOG9MM9TBZfzMjbCaoRxmkTVwUX0AiB+ox3+koZUdzx4fLWaFGOfIYdJjU9T+C6VG0QbsUhHeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44192},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.2.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/75e086aedbe302e466a5a4f22886c066/csrf-armor-nextjs-1.2.1.tgz","_integrity":"sha512-t97ikDH0lLmCsE1uLP2SE8c7SpYmdbFgKTzB5MAVgDMn+D7kI2rrmk/+OAKFHT8i5dY/QK0yp8w3EpJUKqhhqQ==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.2.1_1749132193622_0.9712241888761328","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@csrf-armor/nextjs","version":"1.2.2","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.2.2","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"137d5d6aac90f425f4941944f51f651088f5f901","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.2.2.tgz","fileCount":21,"integrity":"sha512-owTiAGCleccIoGkwbzQqSzdY1v2BVoWKl0PPOQ3QLdNBBWkyRJrsjVOP5dTh0ZybgDiM46h7QQ9Pbyl40hSNzg==","signatures":[{"sig":"MEUCIQCSFfInBoQonaD6Sbi84h5IPklMrJ4Z8pU+pzeMcxrEIgIgaD6/ruKqvWIy2jCVFnrjZmrGrGi/l1evUVYxDz1ZeOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44070},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.2.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/3c2ba83080b10ec67eb615fe705c75d7/csrf-armor-nextjs-1.2.2.tgz","_integrity":"sha512-owTiAGCleccIoGkwbzQqSzdY1v2BVoWKl0PPOQ3QLdNBBWkyRJrsjVOP5dTh0ZybgDiM46h7QQ9Pbyl40hSNzg==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.1","dependencies":{"@csrf-armor/core":"1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.2.2_1749207887644_0.8295121700917356","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@csrf-armor/nextjs","version":"1.3.0","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.3.0","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"fa6ea5427f2fb1b667c35f1738c5176562690b32","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.3.0.tgz","fileCount":21,"integrity":"sha512-qZmI2fFyIfy2NA1eYlnSOZ4kW15G1Ilx/r6EUmRb2vABbyT03oWDX3JH3pLDAqNrBk3w1Qr5fGOpkioTlB7MkA==","signatures":[{"sig":"MEQCIGia+1rfq3aq1iEGx0rGi14Nrw65xWLdaMw/c8xL5Ze7AiAM2ojTi7LPKtlYl79gRIUCccmsXdrseyl0TA71sDZm4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51675},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/4b7cf6bffd3afc847652a52e12986cc5/csrf-armor-nextjs-1.3.0.tgz","_integrity":"sha512-qZmI2fFyIfy2NA1eYlnSOZ4kW15G1Ilx/r6EUmRb2vABbyT03oWDX3JH3pLDAqNrBk3w1Qr5fGOpkioTlB7MkA==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.2","dependencies":{"@csrf-armor/core":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.3.0_1749821872638_0.8486185526526453","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@csrf-armor/nextjs","version":"1.4.0","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.4.0","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"7cdda3e3690bb103928cbe7ac17cb35d3d2ec042","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.4.0.tgz","fileCount":21,"integrity":"sha512-zVVaKQ22HFNbTRAvXBAwnXO2fT4o0Sxt+xbWwKmenyZhiYfCiPOIls79orMzt4GVANPgW0Ao1PffKAYG//n9/Q==","signatures":[{"sig":"MEYCIQCq3T2R1nJU9UVyf+Td3ZX2QjR8cQHCNdvyH/5Gj24JbQIhANSKja7aDp9MNeUIxLmngefyG/bKX6UDtgUPU1S9Gtxn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90445},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/23fac6eca5565856a0a5b054c2959e9f/csrf-armor-nextjs-1.4.0.tgz","_integrity":"sha512-zVVaKQ22HFNbTRAvXBAwnXO2fT4o0Sxt+xbWwKmenyZhiYfCiPOIls79orMzt4GVANPgW0Ao1PffKAYG//n9/Q==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.19.2","dependencies":{"@csrf-armor/core":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","tsdown":"^0.12.6","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.4.0_1750026217794_0.4439840308164533","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@csrf-armor/nextjs","version":"1.4.1","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.4.1","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"a87350fbfd4d7d322ab75ea505206e6b48275af1","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.4.1.tgz","fileCount":21,"integrity":"sha512-o/AJLY8y/L9fEhiPrDujOxgBlBx9+XBx4hsjcyK5oC8R2o7Q5vXLqFzkEJXXW3H+tr8fJOKyVysaHC95Lv6ung==","signatures":[{"sig":"MEYCIQCZKEHwpZulhiQupCBHLkjOCRLHcXhqujihbD2xuSPp1gIhAP+h8npoBgwUosTBOB745Fk2xU+2liBZ4Zs/PtCI0bjq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89689},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.4.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/33e3e5828971a529e143179b61e62c73/csrf-armor-nextjs-1.4.1.tgz","_integrity":"sha512-o/AJLY8y/L9fEhiPrDujOxgBlBx9+XBx4hsjcyK5oC8R2o7Q5vXLqFzkEJXXW3H+tr8fJOKyVysaHC95Lv6ung==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@csrf-armor/core":"1.2.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.1.6","tsdown":"^0.20.1","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.4.1_1769911360231_0.6977209310632837","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@csrf-armor/nextjs","version":"1.4.2","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.4.2","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"contributors":[{"url":"https://github.com/raulcrisan","name":"Raul"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"cd0024096b06eac6ccdc8818f51d665ec91a7cec","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.4.2.tgz","fileCount":21,"integrity":"sha512-7JVCdAnEISg68r+SVSRmiPwTyi1NFt34ktj+TRp61bma5bDMJRbq2ojx7C6IyDlpEDyFlx5AQZfqlnvXAVsmvA==","signatures":[{"sig":"MEUCIQDzmQPXYfW7z12xyeM7ViK7IfoBiPEq9GHaqVP/f85OkwIgRmiZxl3UabqjC9UL2reQV6Ts9jx8HIvYAE9nntPzAwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89953},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.4.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/a140502f66658d37634bc3a75dd4becd/csrf-armor-nextjs-1.4.2.tgz","_integrity":"sha512-7JVCdAnEISg68r+SVSRmiPwTyi1NFt34ktj+TRp61bma5bDMJRbq2ojx7C6IyDlpEDyFlx5AQZfqlnvXAVsmvA==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@csrf-armor/core":"1.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.1.7","tsdown":"^0.20.1","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.4.2_1775393606608_0.4153668593869375","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@csrf-armor/nextjs","version":"1.4.3","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.4.3","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"contributors":[{"url":"https://github.com/raulcrisan","name":"Raul"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"95f0109afe9e10119a633f4802e3ded4e55a5cfc","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.4.3.tgz","fileCount":21,"integrity":"sha512-AUJZDTW86vYVTEQxfiAbQ0ibLU/mh0AMbet0Vk3pczMYo1FkAQOsyCl52UQ+sZxsfGxP0G30r8gO9j+GJt2PeA==","signatures":[{"sig":"MEQCIAWxNk8e8G+KoI12yWyZ/fYRcKR2EGt7lUFokKtGt1yJAiApVis33fSImWNvYltCn7IHTQCMDFfALRQg7KndGGFM0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90221},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.4.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/ecef9353b3425ccfb3f688eabbb3e821/csrf-armor-nextjs-1.4.3.tgz","_integrity":"sha512-AUJZDTW86vYVTEQxfiAbQ0ibLU/mh0AMbet0Vk3pczMYo1FkAQOsyCl52UQ+sZxsfGxP0G30r8gO9j+GJt2PeA==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@csrf-armor/core":"1.2.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.3","tsdown":"^0.20.1","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.4.3_1776813816604_0.3084128790969025","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@csrf-armor/nextjs","version":"1.4.4","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"license":"MIT","_id":"@csrf-armor/nextjs@1.4.4","maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"contributors":[{"url":"https://github.com/raulcrisan","name":"Raul"}],"homepage":"https://github.com/muneebs/csrf-armor#readme","bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"dist":{"shasum":"d5f712184bef93be2cc5ebe6d987eb5bc534ec4b","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.4.4.tgz","fileCount":21,"integrity":"sha512-ySJOeoMvlN7wcPDWio/F5I2CLSgsq3va7AnvXHL6xZt1ZHDB9dZfbJ99593qJGM1L/N+S2OWkv9yxGp0GdwuPw==","signatures":[{"sig":"MEUCIQCilUSGJ8BJkkS5GJ2Gwn4rTUUrvqz8yHL3WRFd2hPFOQIgV3qRJRusp8DtjgzViGuOgTvaFU9n0Eu09tf7iR5mWR0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90130},"main":"./dist/index.js","type":"module","_from":"file:csrf-armor-nextjs-1.4.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"scripts":{"test":"vitest --run","build":"tsdown","clean":"rm -rf dist tsconfig.tsbuildinfo","pretest":"cd ../core && pnpm run build","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","pretest:coverage":"cd ../core && pnpm run build"},"_npmUser":{"name":"muneeb_samuels","email":"muneeb@nebz.dev"},"_resolved":"/tmp/da1297f82555a27cbe7bbb9193c76b3f/csrf-armor-nextjs-1.4.4.tgz","_integrity":"sha512-ySJOeoMvlN7wcPDWio/F5I2CLSgsq3va7AnvXHL6xZt1ZHDB9dZfbJ99593qJGM1L/N+S2OWkv9yxGp0GdwuPw==","repository":{"url":"git+https://github.com/muneebs/csrf-armor.git","type":"git","directory":"packages/nextjs"},"_npmVersion":"10.8.2","description":"CSRF protection middleware for Next.js applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@csrf-armor/core":"1.2.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.3","tsdown":"^0.20.1","typescript":"^5","@types/react":"^19.1.6","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0","react":"^18.2.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nextjs_1.4.4_1776866868340_0.017124108413795636","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"@csrf-armor/nextjs","version":"1.4.5","description":"CSRF protection middleware for Next.js applications","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":"./dist/index.js","./client":"./dist/client/index.js","./package.json":"./package.json"},"keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"author":{"name":"Muneeb Samuels"},"contributors":[{"name":"Raul","url":"https://github.com/raulcrisan"}],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/muneebs/csrf-armor.git","directory":"packages/nextjs"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"homepage":"https://github.com/muneebs/csrf-armor#readme","engines":{"node":">=18.0.0"},"dependencies":{"@csrf-armor/core":"1.2.4"},"peerDependencies":{"next":"^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0","react":"^18.2.0 || ^19.0.0"},"devDependencies":{"@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@types/react":"^19.2.17","next":"^16.2.12","tsdown":"^0.22.14","typescript":"^7"},"module":"./dist/index.js","scripts":{"build":"tsdown","pretest":"cd ../core && pnpm run build","test":"vitest --run","pretest:coverage":"cd ../core && pnpm run build","test:coverage":"vitest run --coverage","test:watch":"vitest","type-check":"tsc --noEmit","clean":"rm -rf dist tsconfig.tsbuildinfo"},"_id":"@csrf-armor/nextjs@1.4.5","_integrity":"sha512-AI3J+PNF0OgW7jp/LJtUXKZfMWQqGBqS495yOJztkDlhJlIAPtzKdNT2bKVFu2UOiCrbzmZhVXCabVTCeDOAAA==","_resolved":"/tmp/06384dd3beee13806b6e5f8471580dd0/csrf-armor-nextjs-1.4.5.tgz","_from":"file:csrf-armor-nextjs-1.4.5.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-AI3J+PNF0OgW7jp/LJtUXKZfMWQqGBqS495yOJztkDlhJlIAPtzKdNT2bKVFu2UOiCrbzmZhVXCabVTCeDOAAA==","shasum":"8392013a537f48d67a80677b155ed8919bec31a3","tarball":"https://registry.npmjs.org/@csrf-armor/nextjs/-/nextjs-1.4.5.tgz","fileCount":21,"unpackedSize":90413,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@csrf-armor%2fnextjs@1.4.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGrE4OE7BNJgROuLveirxWmbl4J5lRMU/rt9r/H9ZbsfAiBPkfvg79KowZiHIpqiFt41cwccqr7wEvYOpQEirYtrvg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:37983162-bc45-49e6-a542-de8f4d73c0f8"}},"directories":{},"maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nextjs_1.4.5_1786094130409_0.564098589788238"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-02T21:03:52.793Z","modified":"2026-08-07T09:15:30.987Z","0.0.1":"2025-06-02T21:03:53.047Z","0.0.2":"2025-06-02T22:03:17.499Z","1.0.0":"2025-06-03T11:44:27.607Z","1.0.1":"2025-06-03T12:38:20.901Z","1.1.0":"2025-06-03T13:03:52.171Z","1.1.1":"2025-06-03T13:12:14.318Z","1.2.0":"2025-06-03T23:44:47.632Z","1.2.1":"2025-06-05T14:03:13.806Z","1.2.2":"2025-06-06T11:04:47.825Z","1.3.0":"2025-06-13T13:37:52.803Z","1.4.0":"2025-06-15T22:23:37.983Z","1.4.1":"2026-02-01T02:02:40.393Z","1.4.2":"2026-04-05T12:53:26.761Z","1.4.3":"2026-04-21T23:23:36.756Z","1.4.4":"2026-04-22T14:07:48.487Z","1.4.5":"2026-08-07T09:15:30.565Z"},"bugs":{"url":"https://github.com/muneebs/csrf-armor/issues"},"author":{"name":"Muneeb Samuels"},"license":"MIT","homepage":"https://github.com/muneebs/csrf-armor#readme","keywords":["nextjs","csrf","security","middleware","protection","app-router","react"],"repository":{"type":"git","url":"git+https://github.com/muneebs/csrf-armor.git","directory":"packages/nextjs"},"description":"CSRF protection middleware for Next.js applications","contributors":[{"name":"Raul","url":"https://github.com/raulcrisan"}],"maintainers":[{"name":"muneeb_samuels","email":"muneeb@nebz.dev"}],"readme":"# @csrf-armor/nextjs\n\n<img src=\"https://cdn.nebz.dev/csrf-armor/logo.jpeg\" alt=\"CSRF Armor\" />\n\n[![CI](https://github.com/muneebs/csrf-armor/workflows/CI/badge.svg)](https://github.com/muneebs/csrf-armor/actions/workflows/ci.yml)\n[![npm version](https://badge.fury.io/js/@csrf-armor%2Fnextjs.svg)](https://badge.fury.io/js/@csrf-armor%2Fnextjs)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![Next.js](https://img.shields.io/badge/Next.js-13%2B-black.svg)](https://nextjs.org/)\n\n**Complete CSRF protection for Next.js applications with App Router and Pages Router support, middleware integration, and React hooks.**\n\nBuilt for Next.js 12+ with support for both App Router and Pages Router, Edge Runtime compatibility, and modern React patterns.\n\n## Contents\n\n- [Features](#-features)\n- [Quick Start](#-quick-start)\n- [Routing System Setup](#-routing-system-setup)\n- [Context Provider Setup (App Router)](#4-context-provider-setup-app-router)\n- [Context Provider Setup (Pages Router)](#4b-context-provider-setup-pages-router)\n- [Usage in Components](#5-usage-in-components)\n- [API Route Example](#6-api-route-example)\n- [Security Best Practices](#-security-best-practices)\n\n## ✨ Features\n\n- 🛡️ **Multiple Security Strategies** - Choose from 5 different CSRF protection methods\n- 🔄 **App Router & Pages Router** - Full support for both Next.js routing systems\n- 🪝 **React Hooks** - `useCsrf` hook for seamless client-side integration\n- ⚡ **Edge Runtime Compatible** - Works in Vercel Edge Runtime and serverless environments\n- 🎯 **TypeScript First** - Fully typed with comprehensive TypeScript support\n- 📱 **SSR & Client-Side** - Full support for server-side and client-side rendering\n---\n\n## 🚀 Quick Start\n\nThe middleware setup works for both App Router and Pages Router. **Provider setup differs:**\n- App Router: Use `app/layout.tsx` with `CsrfProvider`.\n- Pages Router: Use `_app.tsx` with `CsrfProvider`.\n\n### 1. Installation\n\n```bash\nnpm install @csrf-armor/nextjs\n# or\nyarn add @csrf-armor/nextjs\n# or\npnpm add @csrf-armor/nextjs\n```\n\n### 2. Environment Setup\n\nAdd to your `.env.local`:\n\n```bash\n# Generate with: openssl rand -base64 32\nCSRF_SECRET=your-super-secret-csrf-key-min-32-chars-long\n```\n\n> **⚠️ Security Warning**: Never use a default or weak secret in production!\n\n### 3. Create Middleware\n\nCreate `middleware.ts` in your project root:\n\n```typescript\nimport {NextResponse} from 'next/server';\nimport type {NextRequest} from 'next/server';\nimport {createCsrfMiddleware} from '@csrf-armor/nextjs';\n\n// Validate secret in production\nif (process.env.NODE_ENV === 'production' && !process.env.CSRF_SECRET) {\n    throw new Error('CSRF_SECRET environment variable is required in production');\n}\n\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'signed-double-submit',\n    secret: process.env.CSRF_SECRET!,\n    cookie: {\n        secure: process.env.NODE_ENV === 'production',\n        sameSite: 'lax' // Use 'strict' for higher security if cross-origin not needed\n    }\n});\n\nexport async function middleware(request: NextRequest) {\n    const response = NextResponse.next();\n    const result = await csrfProtect(request, response);\n\n    if (!result.success) {\n        // Security logging\n        console.warn('CSRF validation failed:', {\n            url: request.url,\n            method: request.method,\n            reason: result.reason,\n            ip: request.ip || 'unknown',\n            userAgent: request.headers.get('user-agent') || 'unknown',\n        });\n\n        return NextResponse.json(\n            {error: 'CSRF validation failed'},\n            {status: 403}\n        );\n    }\n\n    return result.response;\n}\n```\n\n### 4. Context Provider Setup (App Router)\n\nWrap your app with the CSRF provider in `app/layout.tsx` (Next.js 13+ App Router):\n\n```typescript jsx\n// app/layout.tsx\nimport {CsrfProvider} from '@csrf-armor/nextjs/client';\nimport type {Metadata} from 'next';\n\nexport const metadata: Metadata = {\n    title: 'Your App',\n    description: 'Your app description',\n};\n\nexport default function RootLayout({children}: {\n    children: React.ReactNode;\n}) {\n    return (\n        <html lang=\"en\">\n        <body>\n        <CsrfProvider>{children}</CsrfProvider>\n        </body>\n        </html>\n    );\n}\n```\n\n### 4b. Context Provider Setup (Pages Router)\n\nWrap your app in `_app.tsx` (Next.js 12+ Pages Router):\n\n```typescript jsx\n// pages/_app.tsx\nimport {CsrfProvider} from '@csrf-armor/nextjs/client';\n\nexport default function MyApp({Component, pageProps}) {\n    return (\n        <CsrfProvider>\n            <Component {...pageProps} />\n        </CsrfProvider>\n    );\n}\n```\n\n### 5. Usage in Components\n\n```typescript jsx\n'use client';\nimport {useCsrf} from '@csrf-armor/nextjs/client';\nimport {useState} from 'react';\n\nexport function ContactForm() {\n    const {csrfToken, csrfFetch} = useCsrf();\n    const [message, setMessage] = useState('');\n\n    const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n        const formData = new FormData(e.currentTarget);\n        const response = await csrfFetch('/api/contact', {\n            method: 'POST',\n            headers: {'Content-Type': 'application/json'},\n            body: JSON.stringify({\n                name: formData.get('name'),\n                email: formData.get('email'),\n                message: formData.get('message'),\n            }),\n        });\n    };\n\n    return (\n        <form onSubmit={handleSubmit} className=\"space-y-4\">\n            <div>\n                <textarea\n                    name=\"message\"\n                    placeholder=\"Your Message\"\n                    required\n                    rows={4}\n                    className=\"w-full p-2 border rounded\"\n                />\n            </div>\n            <button\n                type=\"submit\"\n                disabled={!csrfToken}\n                className=\"bg-blue-500 text-white px-4 py-2 rounded disabled:opacity-50\">\n                {isSubmitting ? 'Sending...' : 'Send Message'}\n            </button>\n        </form>\n    );\n}\n```\n\n### 6. API Route Example\n\n```typescript\n// app/api/your-route\nimport {NextRequest, NextResponse} from 'next/server';\n\nexport async function POST(request: NextRequest) {\n    // CSRF validation happens automatically in middleware\n}\n```\n\n---\n\n## 🔄 Routing System Setup\n\nCSRF Armor supports both Next.js routing systems using the same root `middleware.ts` file. See [Quick Start](#-quick-start).\n\n### Universal Middleware (Both App Router & Pages Router)\n\n```typescript\n// middleware.ts (project root) - works for both routing systems\nimport {NextResponse} from 'next/server';\nimport type {NextRequest} from 'next/server';\nimport {createCsrfMiddleware} from '@csrf-armor/nextjs';\n\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'signed-double-submit',\n    secret: process.env.CSRF_SECRET!,\n});\n\nexport async function middleware(request: NextRequest) {\n    const response = NextResponse.next();\n    const result = await csrfProtect(request, response);\n\n    if (!result.success) {\n        return NextResponse.json(\n            {error: 'CSRF validation failed'},\n            {status: 403}\n        );\n    }\n\n    return result.response;\n}\n\nexport const config = {\n    matcher: [\n        // Protect all routes except static files\n        '/((?!_next/static|_next/image|favicon.ico).*)',\n    ],\n};\n```\n\n### App Router Provider Setup\n\n```typescript jsx\n// app/layout.tsx\nimport {CsrfProvider} from '@csrf-armor/nextjs/client';\n\nexport default function RootLayout({children}: {\n    children: React.ReactNode;\n}) {\n    return (\n        <html lang=\"en\">\n        <body>\n        <CsrfProvider>{children}</CsrfProvider>\n        </body>\n        </html>\n    );\n}\n```\n\n### Pages Router Provider Setup\n\n```typescript jsx\n// pages/_app.tsx\nimport type {AppProps} from 'next/app';\nimport {CsrfProvider} from '@csrf-armor/nextjs/client';\n\nexport default function App({Component, pageProps}: AppProps) {\n    return (\n        <CsrfProvider>\n            <Component {...pageProps} />\n        </CsrfProvider>\n    );\n}\n```\n\n### Using Hooks in Both Routing Systems\n\nThe React hooks work identically in both App Router and Pages Router:\n\n```typescript jsx\n'use client'; // Only needed in App Router\n\nimport {useCsrf} from '@csrf-armor/nextjs/client';\n\nexport function ContactForm() {\n    const {csrfToken, csrfFetch} = useCsrf();\n\n    const handleSubmit = async (e: React.FormEvent) => {\n        //...\n        try {\n            const response = await csrfFetch('/api/contact', {\n                method: 'POST',\n                headers: {'Content-Type': 'application/json'},\n                body: JSON.stringify({message: 'Hello'}),\n            });\n\n            if (response.ok) {\n                console.log('Success!');\n            }\n        } catch (error) {\n            console.error('Error:', error);\n        }\n    };\n\n    return (\n        <form onSubmit={handleSubmit}>\n            <input name=\"message\" placeholder=\"Your message\" />\n            <button type=\"submit\">Send</button>\n        </form>\n    );\n}\n```\n\n---\n\n## 🛡️ Security Strategies\n\nChoose the strategy that best fits your security and performance requirements:\n\n| Strategy                   | Security | Performance | Best For         | Setup Complexity |\n|----------------------------|----------|-------------|------------------|------------------|\n| **Signed Double Submit** ⭐ | ⭐⭐⭐⭐⭐    | ⭐⭐⭐⭐        | Most web apps    | Medium           |\n| **Double Submit**          | ⭐      | ⭐⭐⭐⭐⭐       | Local development      | Easy             |\n| **Signed Token**           | ⭐⭐⭐⭐     | ⭐⭐⭐⭐        | APIs, SPAs       | Medium           |\n| **Origin Check**           | ⭐⭐⭐      | ⭐⭐⭐⭐⭐       | Known origins    | Easy             |\n| **Hybrid**                 | ⭐⭐⭐⭐⭐    | ⭐⭐⭐         | Maximum security | Hard             |\n\n### Signed Double Submit (Recommended)\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'signed-double-submit',\n    secret: process.env.CSRF_SECRET!,\n});\n```\n\n**How it works:**\n\n- Client receives unsigned token in response header and accessible cookie\n- Server stores signed token in httpOnly cookie\n- Client submits unsigned token, server verifies against signed cookie\n- Combines cryptographic protection with double-submit pattern\n\n**Best for:** E-commerce, financial services, general web applications\n\n### Double Submit Cookie\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'double-submit',\n});\n```\n\n**How it works:**\n\n- Same token stored in cookie and sent in header/form\n- Relies on Same-Origin Policy for protection\n\n**Best for:** Local development (Not recommended for production)\n\n### Signed Token\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'signed-token',\n    secret: process.env.CSRF_SECRET!,\n    token: {expiry: 3600}, // 1 hour\n});\n```\n\n**How it works:**\n\n- HMAC-signed tokens with expiration timestamps\n- Stateless validation using cryptographic signatures\n\n**Best for:** APIs, SPAs, microservices\n\n### Origin Check\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'origin-check',\n    allowedOrigins: [\n        'https://yourdomain.com',\n        'https://www.yourdomain.com',\n    ],\n});\n```\n\n**How it works:**\n\n- Validates Origin/Referer headers against whitelist\n- Lightweight validation with minimal overhead\n\n**Best for:** Mobile app backends, known client origins\n\n### Hybrid Protection\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'hybrid',\n    secret: process.env.CSRF_SECRET!,\n    allowedOrigins: ['https://yourdomain.com'],\n});\n```\n\n**How it works:**\n\n- Combines signed token validation with origin checking\n- Multiple layers of protection for maximum security\n\n**Best for:** Banking, healthcare, enterprise applications\n\n---\n\n## ⚙️ Configuration\n\n### Complete Configuration Reference\n\n```typescript\ninterface CsrfConfig {\n    strategy?: 'double-submit' | 'signed-double-submit' | 'signed-token' | 'origin-check' | 'hybrid';\n    secret?: string;                    // Required for signed strategies\n\n    token?: {\n        expiry?: number;                  // Token expiry in seconds (default: 3600)\n        headerName?: string;              // Header name (default: 'x-csrf-token')\n        fieldName?: string;               // Form field name (default: 'csrf_token')\n    };\n\n    cookie?: {\n        name?: string;                    // Cookie name (default: 'csrf-token')\n        secure?: boolean;                 // Secure flag (default: true in production)\n        httpOnly?: boolean;               // HttpOnly flag (default: false)\n        sameSite?: 'strict' | 'lax' | 'none'; // SameSite (default: 'lax')\n        path?: string;                    // Path (default: '/')\n        domain?: string;                  // Domain (optional)\n        maxAge?: number;                  // Max age in seconds (optional)\n    };\n\n    allowedOrigins?: string[];          // Allowed origins for origin-check\n    excludePaths?: string[];            // Paths to exclude from protection\n    skipContentTypes?: string[];        // Content types to skip\n}\n```\n\n### Environment-Specific Configuration\n\n```typescript\n// Development configuration\nconst developmentConfig = {\n    strategy: 'double-submit' as const,\n    cookie: {\n        secure: false,      // Allow HTTP in development\n        sameSite: 'lax' as const\n    }\n};\n\n// Production configuration\nconst productionConfig = {\n    strategy: 'signed-double-submit' as const,\n    secret: process.env.CSRF_SECRET!,\n    cookie: {\n        secure: true,       // HTTPS only\n        sameSite: 'strict' as const,\n        domain: '.yourdomain.com'\n    }\n};\n\nconst csrfProtect = createCsrfMiddleware(\n    process.env.NODE_ENV === 'production'\n        ? productionConfig\n        : developmentConfig\n);\n```\n\n### Path Exclusions\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'signed-double-submit',\n    secret: process.env.CSRF_SECRET!,\n    excludePaths: [\n        '/api/webhooks',     // External webhooks\n        '/api/public',       // Public API endpoints\n        '/health',           // Health checks\n        '/api/auth/callback' // Auth callbacks\n    ],\n});\n```\n\n---\n\n## 🪝 React Hooks API\n\n### CsrfProvider\n\nThe context provider that manages CSRF state across your application.\n\n```typescript\ninterface CsrfProviderProps {\n    children: React.ReactNode;\n    config?: CsrfClientConfig;\n}\n\ninterface CsrfClientConfig {\n    cookieName?: string;    // Cookie name to read token from (default: 'csrf-token')\n    headerName?: string;    // Header name to send token in (default: 'x-csrf-token')\n    autoRefresh?: boolean;  // Auto-refresh on focus/visibility (default: true)\n}\n```\n\n**Features:**\n\n- ✅ Event-driven updates (no polling)\n- ✅ Automatic token refresh from response headers\n- ✅ Shared state across components\n- ✅ Performance optimized with React.memo\n\n**Usage:**\n\n```typescript jsx\n<CsrfProvider config={{\n    cookieName: 'my-csrf',\n    headerName: 'X-My-CSRF',\n    autoRefresh: true\n}}>\n    <App/>\n</CsrfProvider>\n```\n\n### useCsrf Hook\n\nMain hook for accessing CSRF functionality.\n\n```typescript\nconst {csrfToken, csrfFetch, updateToken} = useCsrf();\n```\n\n**Returns:**\n\n- `csrfToken: string | null` - Current CSRF token\n- `csrfFetch: (input, init?) => Promise<Response>` - Fetch with automatic CSRF headers\n- `updateToken: () => void` - Manually refresh token\n\n---\n\n## 🔒 Security Best Practices\n\n### 1. Strong Secret Management\n\n```bash\n# Generate a strong secret\nopenssl rand -base64 32\n\n# Or using Node.js\nnode -e \"console.log(require('crypto').randomBytes(32).toString('base64'))\"\n```\n\n```typescript\n// Validate secret at startup\nif (process.env.NODE_ENV === 'production') {\n    const secret = process.env.CSRF_SECRET;\n    if (!secret || secret.length < 32) {\n        throw new Error('CSRF_SECRET must be at least 32 characters in production');\n    }\n}\n```\n\n### 2. Cookie Security Configuration\n\n```typescript\nconst csrfProtect = createCsrfMiddleware({\n    strategy: 'signed-double-submit',\n    secret: process.env.CSRF_SECRET!,\n    cookie: {\n        secure: process.env.NODE_ENV === 'production', // HTTPS only in production\n        sameSite: 'strict',    // Strictest protection\n        httpOnly: false,       // Required for client access\n        path: '/',\n        maxAge: 60 * 60 * 24,  // 24 hours\n        // For subdomains:\n        // domain: '.yourdomain.com'\n    },\n});\n```\n\n### 3. Security Headers\n\n```typescript\n// middleware.ts\nexport async function middleware(request: NextRequest) {\n    const response = NextResponse.next();\n    const result = await csrfProtect(request, response);\n\n    if (result.success) {\n        // Add security headers\n        result.response.headers.set('X-Content-Type-Options', 'nosniff');\n        result.response.headers.set('X-Frame-Options', 'DENY');\n        result.response.headers.set('X-XSS-Protection', '1; mode=block');\n        result.response.headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');\n    }\n\n    return result.response;\n}\n```\n\n---\n\n## 🔧 Advanced Usage\n\n### Multiple CSRF Strategies\n\n```typescript\n// middleware.ts\nimport {createCsrfMiddleware} from '@csrf-armor/nextjs';\n\nconst apiCsrf = createCsrfMiddleware({\n    strategy: 'signed-token',\n    secret: process.env.CSRF_SECRET!,\n    token: {expiry: 3600}\n});\n\nconst webCsrf = createCsrfMiddleware({\n    strategy: 'signed-double-submit',\n    secret: process.env.CSRF_SECRET!,\n});\n\nexport async function middleware(request: NextRequest) {\n    const response = NextResponse.next();\n    const {pathname} = request.nextUrl;\n\n    let result;\n    if (pathname.startsWith('/api/')) {\n        result = await apiCsrf(request, response);\n    } else {\n        result = await webCsrf(request, response);\n    }\n\n    return result.success ? result.response :\n        NextResponse.json({error: 'Forbidden'}, {status: 403});\n}\n```\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! Areas where help is needed:\n\n- **Additional framework integrations**\n- **Performance optimizations**\n- **Security enhancements**\n- **Documentation improvements**\n- **Test coverage expansion**\n\n---\n\n## 📄 License\n\nMIT © [Muneeb Samuels](https://github.com/muneebs)\n\n## 📦 Related Packages\n\n- **[@csrf-armor/core](../core)** - Framework-agnostic CSRF protection\n\n---\n\n**Questions?** [Open an issue](https://github.com/muneebs/csrf-armor/issues)\nor [start a discussion](https://github.com/muneebs/csrf-armor/discussions)!\n","readmeFilename":"README.md"}