{"_id":"@anpdgovbr/rbac-next","_rev":"10-623845c41399df54b038f1e5ee302bed","name":"@anpdgovbr/rbac-next","dist-tags":{"beta":"0.1.1-beta.4","latest":"0.2.0"},"versions":{"0.1.0-beta.0":{"name":"@anpdgovbr/rbac-next","version":"0.1.0-beta.0","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.0-beta.0","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"e3e805773802cfbeba18575b83a3f3a133017c0d","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.0-beta.0.tgz","fileCount":6,"integrity":"sha512-s9PgqODGHAO5cIJv+5FhrbKGEMtgjv/l2iK4Grri14ws9RpvExqfsrO5brlVcm1scglIQSlstJeRMsd7mrWi+g==","signatures":[{"sig":"MEQCICALjYm2c2CzgVekerPPZU/r+vxvwiqHjJg8A3fQDIkSAiAx8Dwv0HN/HkjGKzMGE5lzzVgMIEtsULs0AWmbzMW/zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4831},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.0","@anpdgovbr/rbac-provider":"^0.1.0-beta.0"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.0-beta.0_1756742667893_0.9431552688129281","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.1":{"name":"@anpdgovbr/rbac-next","version":"0.1.0-beta.1","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.0-beta.1","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"621c4637f91b6db9c0fe93e26fc0c6bfdd5fced0","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.0-beta.1.tgz","fileCount":6,"integrity":"sha512-qpO4Y5HiffPK8KfyVU1IIbr4i432LCiXu4LmGaeh1V4hXvXoSHXNuyfxjh54ILMcMxmveO0oiibhqdy+o7gnrQ==","signatures":[{"sig":"MEUCIQDl/qtrCXwAoKrVERI1RJHnwGelVikfd8oJEg684gJ2/gIgQy0hnb6oHpNtXcGWJuFnCUQG4izl6rbkeFfVvqSZGNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4839},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.1","@anpdgovbr/rbac-provider":"^0.1.0-beta.1"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.0-beta.1_1756743525271_0.4775813669179547","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@anpdgovbr/rbac-next","version":"0.1.0-beta.2","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.0-beta.2","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"8a68b43ce5169b0311622c764c7d76a183322c17","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.0-beta.2.tgz","fileCount":6,"integrity":"sha512-1Uk4LB0T288lkzp3N4/7lgRI+pBAUTrL8Mpy+Srmf0lmmwRwbp2WYyfUjYLtKmhpwEcxyIlv0PfTX9WpHeNeUQ==","signatures":[{"sig":"MEQCIG28xamFj4WCNN4/c8lNaG+c7drXmsRxkUqbXOJeaotjAiBb0xo122rhjsQ6K2M1ZnC8SsRAcgP0fJPYswS6IUJoLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4962},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.2","@anpdgovbr/rbac-provider":"^0.1.0-beta.2"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.0-beta.2_1756747600964_0.9429864142079054","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.3":{"name":"@anpdgovbr/rbac-next","version":"0.1.0-beta.3","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.0-beta.3","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"63f13a22ab9e6b3488b506e5e3e129a18351117e","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.0-beta.3.tgz","fileCount":6,"integrity":"sha512-kkuaHkvDvB8b+FGIF29RzM7gD7LIYOoPXjnHX4/wqFxYj83owx79gZSBO6w+s8RtUz4ZFA6sjfQMMyfBaMfiXw==","signatures":[{"sig":"MEUCIQCqi/htBRwAYyak/HJYbIV+QevJJKWO2JGbWP/AdZ7zigIgOSt2TxksedGeOqDbmjHAQHOn8tX18adOSrDbi8pVS9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26626},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.3","@anpdgovbr/rbac-provider":"^0.1.0-beta.3"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.0-beta.3_1756757709837_0.2513758090982354","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-beta.3":{"name":"@anpdgovbr/rbac-next","version":"0.1.1-beta.3","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.1-beta.3","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"ab7d9396e4c6016295f49f6d5c98183c34197f2f","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.1-beta.3.tgz","fileCount":6,"integrity":"sha512-3RZB8udFw9LngfsD5FkWoXdqv/HpZpNNyducMVNQmNSqRSxyI8V+/Sz7BqIVA95YRR6YGH8E9tJwPHApOAoG+Q==","signatures":[{"sig":"MEYCIQCvMikZEgnEWti1r8JFJ0MsHvH+2RGvi5c50W82j46aJQIhAIVAdIIFetIm90Oz6H8kHf72dGU4zNLXt2GbmmbTh4tj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26704},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"ncu":"ncu","test":"node --test dist/test","build":"tsc -p tsconfig.json","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.3","@anpdgovbr/rbac-provider":"^0.1.0-beta.3"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.1-beta.3_1756760618782_0.7035202851014464","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-beta.4":{"name":"@anpdgovbr/rbac-next","version":"0.1.1-beta.4","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.1-beta.4","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"9ac17194042575c8262b23d6d0c92e4bd550961c","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.1-beta.4.tgz","fileCount":10,"integrity":"sha512-gcijM9E/ynWuQIz4o+nyp9Y/GsawTmNid3NUbKN7Kf3PXedDWiNKfzMPKELSq4qZcHW7GeGYGekhUk+z+FMqKg==","signatures":[{"sig":"MEUCIA1ywOPJQKdJyn5AleKGPVXUQVX6NJnPpi1bGpX7HJhNAiEAiD6uIjv0TxH6oSEYTlzPnHkn/4eygFlLkm21UBiTsZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38412},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"ncu":"ncu","test":"node --test 'dist/**/*.test.js'","build":"tsc -p tsconfig.json","pretest":"npm run build","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"22.17.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.1-beta.4","@anpdgovbr/rbac-provider":"^0.1.1-beta.4"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.1-beta.4_1756784290290_0.16050060068929106","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@anpdgovbr/rbac-next","version":"0.1.2","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.2","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"b182733cd0803baba928b0e2a9337ed122447375","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.2.tgz","fileCount":10,"integrity":"sha512-N51pBa3bpgnNYP+AOb6AEkgr5prcaAfnx88QeLAKJ4umDJBCnBt2z+svgVhGaUX4xgQkWThKETQ56wDe5Onxwg==","signatures":[{"sig":"MEUCIGPliHyTRZC0GaQBrpfwBkcG4ZSQRjFAH3QLJm64ndtcAiEAkDgMN6ey6GmerK/4AQp3B4OJ0omEXsgVZYZZTj9/Sts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38355},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"825d30b22d80fef90a94b9c66cf4994fc41c9111","private":false,"scripts":{"ncu":"ncu","test":"node --test dist/test/*.test.js dist/src/test/*.test.js","build":"tsc -p tsconfig.json","pretest":"npm run build","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.2","@anpdgovbr/rbac-provider":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.2_1756842704617_0.4158733778089332","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@anpdgovbr/rbac-next","version":"0.1.3","license":"MIT","_id":"@anpdgovbr/rbac-next@0.1.3","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"e803feba9b76a5c0d6868deb94775ad2ee71f2aa","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.1.3.tgz","fileCount":10,"integrity":"sha512-3RKGZuDWdeMTFJskCDpIxkmGs1QxlTfWvoPn/JZ1c4OwoRiTt5kdk5NG8GLUtq/wORUueUqHHROFXncjQpAnrg==","signatures":[{"sig":"MEQCIH3MkWkwAwSbLevQW+MyJLnaJFnfsgc4Xwc3ILCJSJNxAiAijV8PQTIbc0j2NwEYiSg/29tVZfL3wEiqFHT1O8J6sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38353},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"03af2a5a0454322fe025bc309c97d5e411eb248c","private":false,"scripts":{"ncu":"ncu","test":"node --test dist/test/*.test.js dist/src/test/*.test.js","build":"tsc -p tsconfig.json","pretest":"npm run build","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.6.2","description":"Adapter Next.js para RBAC (withApi/withApiForId).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.4","@anpdgovbr/rbac-provider":"^0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/rbac-next_0.1.3_1759974756523_0.9304465494922476","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anpdgovbr/rbac-next","version":"0.2.0","private":false,"type":"module","main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"sideEffects":false,"description":"Adapter Next.js para RBAC (withApi/withApiForId).","license":"MIT","repository":{"type":"git","url":"git+https://github.com/anpdgovbr/rbac.git"},"publishConfig":{"access":"public"},"dependencies":{"@anpdgovbr/rbac-core":"^0.1.4","@anpdgovbr/rbac-provider":"^0.1.3"},"peerDependencies":{"react":">=19"},"devDependencies":{"@types/node":"^20.19.24","@types/react":"^18.3.26","react":"^19.2.0","typescript":"^5.9.3"},"scripts":{"build":"tsc --build","typecheck":"tsc --build --noEmit","pretest":"pnpm run build","test":"node --test dist/test/*.test.js dist/src/test/*.test.js","ncu":"ncu","ncu:check":"ncu","ncu:update":"ncu -u"},"_id":"@anpdgovbr/rbac-next@0.2.0","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"homepage":"https://github.com/anpdgovbr/rbac#readme","_integrity":"sha512-JJSC8/vt91PQ3Q8d2GUSobaS98oHSxkZcVXd1f7/+LkBpQgyKQklQjiBAOa+eo7oa/GCgNC1V5L8yByWZQN5eA==","_resolved":"/tmp/deea63d721cb833229be64f0069ad3b8/anpdgovbr-rbac-next-0.2.0.tgz","_from":"file:anpdgovbr-rbac-next-0.2.0.tgz","_nodeVersion":"24.7.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-JJSC8/vt91PQ3Q8d2GUSobaS98oHSxkZcVXd1f7/+LkBpQgyKQklQjiBAOa+eo7oa/GCgNC1V5L8yByWZQN5eA==","shasum":"0bb80d9833544ef6a59c734796548db43dbc2c8f","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-next/-/rbac-next-0.2.0.tgz","fileCount":12,"unpackedSize":75767,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD0ks/Um6oAWenYoDVluCcSQJLa1115rPgtD4GKUrEEBgIhAOmEmjmlvQcEw35uo34N56jDHYG0q40QWp24f2tFToiO"}]},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"directories":{},"maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rbac-next_0.2.0_1762022399958_0.9568670702913344"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-01T16:04:27.800Z","modified":"2025-11-01T18:40:00.391Z","0.1.0-beta.0":"2025-09-01T16:04:28.081Z","0.1.0-beta.1":"2025-09-01T16:18:45.491Z","0.1.0-beta.2":"2025-09-01T17:26:41.577Z","0.1.0-beta.3":"2025-09-01T20:15:10.057Z","0.1.1-beta.3":"2025-09-01T21:03:38.986Z","0.1.1-beta.4":"2025-09-02T03:38:10.487Z","0.1.2":"2025-09-02T19:51:44.800Z","0.1.3":"2025-10-09T01:52:36.712Z","0.2.0":"2025-11-01T18:40:00.158Z"},"bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"license":"MIT","homepage":"https://github.com/anpdgovbr/rbac#readme","repository":{"type":"git","url":"git+https://github.com/anpdgovbr/rbac.git"},"description":"Adapter Next.js para RBAC (withApi/withApiForId).","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"readme":"# @anpdgovbr/rbac-next\n\n[![npm version](https://img.shields.io/npm/v/@anpdgovbr/rbac-next.svg)](https://www.npmjs.com/package/@anpdgovbr/rbac-next)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.4+-blue.svg)](https://www.typescriptlang.org/)\n[![Next.js](https://img.shields.io/badge/Next.js-15+-000000.svg)](https://nextjs.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Adapter Next.js para RBAC** — Middleware e wrappers para App Router com autorização e auditoria integradas.\n\n## ✨ Características\n\n- 🛡️ **Proteção de APIs** — Middleware declarativo para routes\n- 🎯 **App Router** — Suporte nativo ao Next.js 15+ App Router\n- 📝 **Auditoria Integrada** — Logs automáticos de ações e acessos\n- 🔌 **Pluggable** — Funciona com qualquer provider de permissões\n- ⚡ **Performance** — Execução eficiente com minimal overhead\n\n## 📦 Instalação\n\n```bash\nnpm install @anpdgovbr/rbac-next@beta\n```\n\n**Peer Dependencies:**\n\n```bash\nnpm install @anpdgovbr/rbac-core @anpdgovbr/rbac-provider\n```\n\n## 🎯 Uso Básico\n\n### 1. API Route Simples\n\n```typescript\n// app/api/relatorios/route.ts\nimport { withApi } from \"@anpdgovbr/rbac-next\"\n\nexport const GET = withApi(\n  async ({ email, userId }) => {\n    // Sua lógica aqui - usuário já foi autorizado\n    const relatorios = await getRelatoriosPorUsuario(userId)\n    return Response.json(relatorios)\n  },\n  {\n    provider: permissionsProvider,\n    getIdentity: identityResolver,\n    permissao: { acao: \"Exibir\", recurso: \"Relatorios\" },\n  }\n)\n```\n\n### 2. API Route com Parâmetros\n\n```typescript\n// app/api/relatorios/[id]/route.ts\nimport { withApiForId } from \"@anpdgovbr/rbac-next\"\n\nexport const GET = withApiForId(\n  async ({ params, email, userId }) => {\n    const relatorio = await getRelatorio(params.id)\n    return Response.json(relatorio)\n  },\n  {\n    provider: permissionsProvider,\n    getIdentity: identityResolver,\n    permissao: { acao: \"Exibir\", recurso: \"Relatorios\" },\n  }\n)\n\nexport const DELETE = withApiForId(\n  async ({ params, userId }) => {\n    const relatorio = await getRelatorio(params.id)\n    await deleteRelatorio(params.id)\n\n    return {\n      response: Response.json({ success: true }),\n      audit: {\n        antes: relatorio,\n        depois: null,\n      },\n    }\n  },\n  {\n    provider: permissionsProvider,\n    getIdentity: identityResolver,\n    permissao: { acao: \"Excluir\", recurso: \"Relatorios\" },\n    tabela: \"relatorios\",\n    acao: \"DELETE\",\n    audit: auditLogger,\n  }\n)\n```\n\n### 3. Configuração de Providers\n\n```typescript\n// lib/rbac-config.ts\nimport { createPrismaPermissionsProvider } from \"@anpdgovbr/rbac-prisma\"\nimport { withTTLCache } from \"@anpdgovbr/rbac-provider\"\nimport { getServerSession } from \"next-auth\"\n\n// Provider de permissões\nexport const permissionsProvider = withTTLCache(\n  createPrismaPermissionsProvider({ prisma }),\n  5 * 60 * 1000 // 5 minutos\n)\n\n// Resolver de identidade\nexport const identityResolver = {\n  async resolve(req: Request) {\n    const session = await getServerSession()\n\n    if (!session?.user?.email) {\n      throw new Error(\"Usuário não autenticado\")\n    }\n\n    return {\n      id: session.user.id,\n      email: session.user.email,\n    }\n  },\n}\n\n// Logger de auditoria\nexport const auditLogger = async (args: AuditArgs) => {\n  await prisma.auditLog.create({\n    data: {\n      tabela: args.tabela,\n      acao: args.acao,\n      userId: args.userId,\n      email: args.email,\n      antes: args.antes,\n      depois: args.depois,\n      contexto: args.contexto,\n      timestamp: new Date(),\n    },\n  })\n}\n```\n\n## 🔧 API Completa\n\n### `withApi(handler, options)`\n\nWrapper para routes sem parâmetros dinâmicos.\n\n```typescript\ninterface WithApiOptions<TParams = {}> {\n  // Permissão requerida (opcional)\n  permissao?: { acao: Action; recurso: Resource }\n\n  // Providers obrigatórios\n  getIdentity: IdentityResolver<Request>\n  provider: PermissionsProvider\n\n  // Auditoria (opcional)\n  tabela?: string | ((params: TParams) => string)\n  acao?: string\n  audit?: AuditFunction\n}\n\ntype Handler<TParams = {}> = (\n  ctx: HandlerContext<TParams>\n) => Promise<Response | HandlerResult>\n\ninterface HandlerContext<TParams = {}> {\n  req: Request\n  email: string\n  userId?: string\n  params: TParams\n}\n```\n\n**Exemplo:**\n\n```typescript\nexport const POST = withApi(\n  async ({ req, email, userId }) => {\n    const body = await req.json()\n    const created = await createResource(body, userId)\n    return Response.json(created, { status: 201 })\n  },\n  {\n    provider,\n    getIdentity,\n    permissao: { acao: \"Criar\", recurso: \"Recursos\" },\n    audit: auditLogger,\n    tabela: \"recursos\",\n    acao: \"CREATE\",\n  }\n)\n```\n\n### `withApiForId(handler, options)`\n\nWrapper para routes com parâmetros dinâmicos (`[id]`, `[slug]`, etc.).\n\n```typescript\nexport const PUT = withApiForId(\n  async ({ params, req, userId }) => {\n    const body = await req.json()\n    const antes = await getResource(params.id)\n    const depois = await updateResource(params.id, body)\n\n    return {\n      response: Response.json(depois),\n      audit: { antes, depois },\n    }\n  },\n  {\n    provider,\n    getIdentity,\n    permissao: { acao: \"Editar\", recurso: \"Recursos\" },\n    tabela: (params) => `recursos_${params.category}`,\n    audit: auditLogger,\n  }\n)\n```\n\n### Interface de Auditoria\n\n```typescript\ninterface AuditArgs {\n  tabela?: string\n  acao?: string\n  userId?: string\n  email?: string\n  antes?: object\n  depois?: object\n  contexto?: string\n  req: Request\n}\n\ntype AuditFunction = (args: AuditArgs) => Promise<void> | void\n```\n\n## 🧪 Exemplos Avançados\n\n### Autorização Condicional\n\n```typescript\nexport const GET = withApi(\n  async ({ req, email, userId }) => {\n    const url = new URL(req.url)\n    const includePrivate = url.searchParams.get(\"private\") === \"true\"\n\n    if (includePrivate) {\n      // Verificação adicional dentro do handler\n      const canViewPrivate = await permissionsProvider\n        .getPermissionsByIdentity(email)\n        .then((perms) => pode(perms, \"ExibirPrivado\", \"Relatorios\"))\n\n      if (!canViewPrivate) {\n        return Response.json(\n          { error: \"Sem permissão para dados privados\" },\n          { status: 403 }\n        )\n      }\n    }\n\n    return Response.json(await getRelatorios({ includePrivate }))\n  },\n  {\n    provider,\n    getIdentity,\n    permissao: { acao: \"Exibir\", recurso: \"Relatorios\" },\n  }\n)\n```\n\n### Auditoria Detalhada\n\n```typescript\nconst auditLogger = async (args: AuditArgs) => {\n  const userAgent = args.req.headers.get(\"user-agent\")\n  const ip = args.req.headers.get(\"x-forwarded-for\") || \"unknown\"\n\n  await prisma.auditLog.create({\n    data: {\n      ...args,\n      metadata: {\n        userAgent,\n        ip,\n        timestamp: new Date().toISOString(),\n        method: args.req.method,\n        url: args.req.url,\n      },\n    },\n  })\n\n  // Log crítico para operações de exclusão\n  if (args.acao === \"DELETE\") {\n    await prisma.criticalAuditLog.create({\n      data: {\n        userId: args.userId,\n        action: `${args.acao} em ${args.tabela}`,\n        details: args.antes,\n        timestamp: new Date(),\n      },\n    })\n  }\n}\n```\n\n### Rate Limiting Integrado\n\n```typescript\nconst rateLimitedApi = withApi(\n  async ({ email, req }) => {\n    // Rate limiting por usuário\n    const key = `api:${email}:${req.url}`\n    const current = await redis.incr(key)\n\n    if (current === 1) {\n      await redis.expire(key, 60) // 1 minuto\n    }\n\n    if (current > 100) {\n      // 100 requests/min\n      return Response.json({ error: \"Rate limit excedido\" }, { status: 429 })\n    }\n\n    return Response.json({ data: \"success\" })\n  },\n  {\n    provider,\n    getIdentity,\n    permissao: { acao: \"Usar\", recurso: \"API\" },\n  }\n)\n```\n\n### Middleware de Validação\n\n```typescript\nimport { z } from \"zod\"\n\nconst createResourceSchema = z.object({\n  name: z.string().min(1),\n  description: z.string().optional(),\n  category: z.enum([\"public\", \"private\"]),\n})\n\nexport const POST = withApi(\n  async ({ req, userId }) => {\n    const body = await req.json()\n\n    // Validação de schema\n    const validatedData = createResourceSchema.parse(body)\n\n    const resource = await createResource(validatedData, userId)\n    return Response.json(resource, { status: 201 })\n  },\n  {\n    provider,\n    getIdentity,\n    permissao: { acao: \"Criar\", recurso: \"Recursos\" },\n    audit: auditLogger,\n  }\n)\n```\n\n## 🔧 Desenvolvimento\n\n```bash\n# Build\nnpm run build\n\n# Type checking\nnpm run typecheck\n\n# Testes\nnpm test\n```\n\n## 📚 Documentação Relacionada\n\n- 📖 [Consolidação de Features e Roadmap](../../docs/README.md)\n- 🔌 [Provider Contracts](../rbac-provider/)\n- 💻 [Exemplos Next.js](../../examples/next-api/)\n- 🚀 [Guia de Início Rápido](../../README.md)\n\n## 📄 Licença\n\nMIT © 2024 ANPD (Agência Nacional de Proteção de Dados)\n","readmeFilename":"README.md"}