{"_id":"@anpdgovbr/rbac-provider","_rev":"10-d8b881e85766e086f3e5379b0a72df4c","name":"@anpdgovbr/rbac-provider","dist-tags":{"beta":"0.1.1-beta.4","latest":"0.2.0"},"versions":{"0.1.0-beta.0":{"name":"@anpdgovbr/rbac-provider","version":"0.1.0-beta.0","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"7c0dd1d8196980fcf3d7199a79cd082be07f796d","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.0-beta.0.tgz","fileCount":6,"integrity":"sha512-1jUNqCbAbiwx8I5/VEkGNh+s9NLrOoyezWR45Rd+ozf9551y+wLCr+rcYtMwZ75xxwY/BR5vQgmDzYASX8bb8w==","signatures":[{"sig":"MEUCIGdg8dB3/ysQXsA3V0iauxrHSMMDqJPGkA05mtBFQ0YVAiEAv7bBpMlHMieCf+vIuDX7dd/o0uK96SkMILv/fKRHKGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3752},"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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.0"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.0-beta.0_1756742631487_0.06471944388582052","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.1":{"name":"@anpdgovbr/rbac-provider","version":"0.1.0-beta.1","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"62862d84516490f57a5ad7cf17891550e6115af1","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.0-beta.1.tgz","fileCount":6,"integrity":"sha512-PyuobN5mHtZLR28b9zhxXjmR4ZtM+WcS5HE+KwX+0NS7wfk7xFQ5apxRBRzRomPF/Ils0gdAoGgac9/6RP4wfw==","signatures":[{"sig":"MEUCIF5zzIkbT7ZLX5XNvjJE9vceBEZPJlUDIJ2EkhzEi12gAiEArywfHAekTus/R+cp3rNBA9dU6P1wW/bB7qVE9493RNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3760},"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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.1"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.0-beta.1_1756743563648_0.9866903411419319","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@anpdgovbr/rbac-provider","version":"0.1.0-beta.2","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"f01337e810f1090fc28fc5e85e0c4bc296de5501","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.0-beta.2.tgz","fileCount":6,"integrity":"sha512-OnJAamhb1QCULNPxV+GYaEAceOUsVrDF3w36brhIDZOKAbFYiQvI54whCZunCnH5z+JDP37J2BUAeAIjrkbzcQ==","signatures":[{"sig":"MEQCIBjK/BruMRiMegtkg7F3ZHP/Fdhh78RkJi4CUTSFWugzAiBlN5qgzdmhpCQvm7ym5v0qOGkKhCSxdD0TCJXxph27CA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3883},"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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.2"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.0-beta.2_1756747589945_0.6959300455806356","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.3":{"name":"@anpdgovbr/rbac-provider","version":"0.1.0-beta.3","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"9569cfe3e5f15ebd3ac15c6cb5c78a77570e2167","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.0-beta.3.tgz","fileCount":6,"integrity":"sha512-f8L9VYqc/yR/2ibs7h+c4rGAYcTviggyKVaC4rEhG00bLwllSNUkBTF3byvO08Q5wIQ8MA7XYYzEODRE9Rg90g==","signatures":[{"sig":"MEQCIEoo6+dwU0KEoIf1+VWDeRx7JsGXKjd1kQ10n7c7DlU4AiBCKF+yLmCbMeW/1oBPe3/0IebU931evFhMAkYRSBM4wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17588},"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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.3"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.0-beta.3_1756757696595_0.7388508286043809","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-beta.3":{"name":"@anpdgovbr/rbac-provider","version":"0.1.1-beta.3","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"0215ba6aa1a841440ddc5817d0f8232072b98e0c","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.1-beta.3.tgz","fileCount":6,"integrity":"sha512-jpH/gq++4djsVlQxbz0i8xaI6RfkYOhWyFiiYfkusJeC+/+gq+EZ/c+oNDbOOGnvkKryQjPg97Ez6nlzSSmajQ==","signatures":[{"sig":"MEUCIC73LZ7C9a5uJsNtkbqv32cKNWP95nO0BD0PyEyWhT9UAiEAkFjesXfjTyE3FvmSFz/c1/A+AIjYWnnpsxQKpqvlask=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17666},"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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.3"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.1-beta.3_1756760607770_0.06911062196810724","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-beta.4":{"name":"@anpdgovbr/rbac-provider","version":"0.1.1-beta.4","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"bd57b2c4df8364bd4019df08c068debc893ab160","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.1-beta.4.tgz","fileCount":6,"integrity":"sha512-2A6QOER2g5YP3ycXudLmnjkHrG04fFVMtMg7bxzgFiIOY9mRv8QmnzDvyuks7iTLCcge7GP0F8lpDzbrt09KBQ==","signatures":[{"sig":"MEQCIHBKaD69WexnzLUv6JQhQBqVWsk8kUHOA+X5gex5dLwqAiAqa5ZiusHg2IViiupMwL9fCm3vvXJE5VLoCEL14uiaBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17677},"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","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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"22.17.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.1-beta.4"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.1-beta.4_1756784284058_0.5872971091284087","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@anpdgovbr/rbac-provider","version":"0.1.2","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"2e7db46976b49ad1350beaf233ae372efb0ba83c","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.2.tgz","fileCount":6,"integrity":"sha512-TP1WbwnO/ZZGQAVVzGTxNStQu9fLxFRq+jfAtS4CqRaS1SKYOfzromiHtUyXNNbrZJ7r0BbdMgqg3PP8Z0DhiA==","signatures":[{"sig":"MEUCIQCrYO8suKnIlgDSbXi1RmIWhj9n6ZOeMzETRQDCdYXhaQIgA5wAQKpLO7SSm3tK9ygaUBpLAFiJIElQ0Y/hvtFgjz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17603},"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","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":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.2_1756842694128_0.9899546537588615","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@anpdgovbr/rbac-provider","version":"0.1.3","license":"MIT","_id":"@anpdgovbr/rbac-provider@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":"99cb3bff783831d2f341ba75534782bcdfb33808","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.1.3.tgz","fileCount":6,"integrity":"sha512-UOv32dEcN2OZiQ3eJ1ZZrmn/hCYYkMIMT4lIuB2BIQp69Bj0AwpSxuU5BTPzWOwTx7hyxY0JKJ2i7py+PHIBoQ==","signatures":[{"sig":"MEQCIHvFUtfDLPOQ4LaC8xiy1nSIjFyREEn+zY1IjOhTZyujAiAalbZuEZYskpbuaeEw5prOBNlyeDd1uG0FmV45gF0mmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17601},"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","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.6.2","description":"Contratos de provider/identidade e cache TTL para RBAC.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/rbac-provider_0.1.3_1759974734589_0.07789834627549963","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anpdgovbr/rbac-provider","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":"Contratos de provider/identidade e cache TTL para RBAC.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/anpdgovbr/rbac.git"},"publishConfig":{"access":"public"},"dependencies":{"@anpdgovbr/rbac-core":"^0.1.4"},"devDependencies":{"@types/node":"^20.19.24","typescript":"^5.9.3"},"scripts":{"build":"tsc --build","typecheck":"tsc --build --noEmit","test":"node --test dist/test/*.test.js","ncu":"ncu","ncu:check":"ncu","ncu:update":"ncu -u"},"_id":"@anpdgovbr/rbac-provider@0.2.0","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"homepage":"https://github.com/anpdgovbr/rbac#readme","_integrity":"sha512-E4RFWPlRHtGLU33Mj6N7VWbFRETA+iwu6jJ7aQgalgeAQ1RXexOyDyZ7Y8p+JiYDRVhFZ5l5dGCez+OweoNTEg==","_resolved":"/tmp/55faf6b66deb04c5215f589e908e0760/anpdgovbr-rbac-provider-0.2.0.tgz","_from":"file:anpdgovbr-rbac-provider-0.2.0.tgz","_nodeVersion":"24.7.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-E4RFWPlRHtGLU33Mj6N7VWbFRETA+iwu6jJ7aQgalgeAQ1RXexOyDyZ7Y8p+JiYDRVhFZ5l5dGCez+OweoNTEg==","shasum":"ee23aaecda314dc9ae83969320db31ce3afcf6a6","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-provider/-/rbac-provider-0.2.0.tgz","fileCount":8,"unpackedSize":53396,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDjsLv5tVopI4quFVFskT4SFoINvwzOQ23NnVTpzMDlSAiEAxYlpdvlIpvyb/m2CpSSUmBZVxs4vp7jlT1b3TQxmcNQ="}]},"_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-provider_0.2.0_1762022404414_0.2517904220519158"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-01T16:03:51.365Z","modified":"2025-11-01T18:40:04.912Z","0.1.0-beta.0":"2025-09-01T16:03:51.681Z","0.1.0-beta.1":"2025-09-01T16:19:23.835Z","0.1.0-beta.2":"2025-09-01T17:26:30.124Z","0.1.0-beta.3":"2025-09-01T20:14:56.804Z","0.1.1-beta.3":"2025-09-01T21:03:27.964Z","0.1.1-beta.4":"2025-09-02T03:38:04.250Z","0.1.2":"2025-09-02T19:51:34.348Z","0.1.3":"2025-10-09T01:52:14.800Z","0.2.0":"2025-11-01T18:40:04.597Z"},"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":"Contratos de provider/identidade e cache TTL para RBAC.","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"readme":"# @anpdgovbr/rbac-provider\n\n[![npm version](https://img.shields.io/npm/v/@anpdgovbr/rbac-provider.svg)](https://www.npmjs.com/package/@anpdgovbr/rbac-provider)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.4+-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Contratos e abstrações para providers de RBAC** — Interfaces padronizadas para resolução de identidade e permissões.\n\n## ✨ Características\n\n- 🔌 **Pluggable** — Interfaces padronizadas para diferentes fontes de dados\n- ⚡ **Cache TTL** — Sistema de cache em memória com expiração configurável\n- 🎯 **Type Safety** — Contratos rigorosos para implementações\n- 🔄 **Invalidação** — Cache seletivo por identidade ou global\n- 🚀 **Performance** — Otimizado para alta concorrência\n\n## 📦 Instalação\n\n```bash\nnpm install @anpdgovbr/rbac-provider@beta\n```\n\n## 🎯 Conceitos Principais\n\n### Provider de Permissões\n\nInterface padrão para resolução de permissões por identidade:\n\n```typescript\ninterface PermissionsProvider {\n  getPermissionsByIdentity(identity: string): Promise<PermissionsMap>\n  invalidate(identity?: string): void\n}\n```\n\n### Resolver de Identidade\n\nInterface para extrair identidade de requests:\n\n```typescript\ninterface IdentityResolver<Req = unknown> {\n  resolve(req: Req): Promise<Identity>\n}\n```\n\n## 🎯 Uso Básico\n\n### Provider Customizado\n\n```typescript\nimport { PermissionsProvider } from \"@anpdgovbr/rbac-provider\"\nimport { toPermissionsMap } from \"@anpdgovbr/rbac-core\"\n\nclass DatabasePermissionsProvider implements PermissionsProvider {\n  constructor(private db: Database) {}\n\n  async getPermissionsByIdentity(email: string): Promise<PermissionsMap> {\n    const permissions = await this.db.getUserPermissions(email)\n    return toPermissionsMap(permissions)\n  }\n\n  invalidate(email?: string): void {\n    // Limpar cache específico se necessário\n    if (email) {\n      this.db.clearUserCache(email)\n    } else {\n      this.db.clearAllCache()\n    }\n  }\n}\n```\n\n### Cache TTL Decorator\n\n```typescript\nimport { withTTLCache } from \"@anpdgovbr/rbac-provider\"\n\nconst baseProvider = new DatabasePermissionsProvider(db)\n\n// Adiciona cache de 5 minutos\nconst cachedProvider = withTTLCache(baseProvider, 5 * 60 * 1000)\n\n// Uso normal - cache transparente\nconst permissions = await cachedProvider.getPermissionsByIdentity(\"user@gov.br\")\n\n// Invalidação seletiva\ncachedProvider.invalidate(\"user@gov.br\") // apenas este usuário\ncachedProvider.invalidate() // todos os usuários\n```\n\n### Resolver de Identidade NextAuth\n\n```typescript\nimport { IdentityResolver } from \"@anpdgovbr/rbac-provider\"\nimport { getServerSession } from \"next-auth\"\n\nclass NextAuthIdentityResolver implements IdentityResolver<Request> {\n  async resolve(req: Request): Promise<Identity> {\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\n## 🔧 API Completa\n\n### `PermissionsProvider`\n\nInterface principal para providers de permissões.\n\n```typescript\ninterface PermissionsProvider {\n  /**\n   * Resolve permissões para uma identidade específica\n   * @param identity - Email ou ID do usuário\n   * @returns Mapa de permissões resolvidas\n   */\n  getPermissionsByIdentity(identity: string): Promise<PermissionsMap>\n\n  /**\n   * Invalida cache de permissões\n   * @param identity - Identidade específica (opcional)\n   */\n  invalidate(identity?: string): void\n}\n```\n\n### `IdentityResolver<Req>`\n\nInterface para resolução de identidade a partir de requests.\n\n```typescript\ninterface Identity {\n  id: string\n  email?: string\n}\n\ninterface IdentityResolver<Req = unknown> {\n  /**\n   * Extrai identidade do request\n   * @param req - Request object (Request, NextRequest, etc.)\n   * @returns Identidade resolvida\n   * @throws Error se não autenticado\n   */\n  resolve(req: Req): Promise<Identity>\n}\n```\n\n### `withTTLCache(provider, ttlMs)`\n\nDecorator que adiciona cache TTL a qualquer provider.\n\n**Parâmetros:**\n\n- `provider: PermissionsProvider` — Provider base\n- `ttlMs: number` — TTL em milissegundos\n\n**Retorna:** `PermissionsProvider` — Provider com cache\n\n```typescript\n// Cache de 10 minutos\nconst cached = withTTLCache(baseProvider, 10 * 60 * 1000)\n```\n\n**Comportamento:**\n\n- Cache por identidade individual\n- Expiração automática após TTL\n- Invalidação seletiva ou global\n- Thread-safe para concorrência\n\n## 🧪 Exemplos Avançados\n\n### Provider com Fallback\n\n```typescript\nclass FallbackPermissionsProvider implements PermissionsProvider {\n  constructor(\n    private primary: PermissionsProvider,\n    private fallback: PermissionsProvider\n  ) {}\n\n  async getPermissionsByIdentity(identity: string): Promise<PermissionsMap> {\n    try {\n      return await this.primary.getPermissionsByIdentity(identity)\n    } catch (error) {\n      console.warn(`Primary provider failed, using fallback:`, error)\n      return await this.fallback.getPermissionsByIdentity(identity)\n    }\n  }\n\n  invalidate(identity?: string): void {\n    this.primary.invalidate(identity)\n    this.fallback.invalidate(identity)\n  }\n}\n```\n\n### Provider com Métricas\n\n```typescript\nclass MetricsPermissionsProvider implements PermissionsProvider {\n  constructor(\n    private provider: PermissionsProvider,\n    private metrics: MetricsCollector\n  ) {}\n\n  async getPermissionsByIdentity(identity: string): Promise<PermissionsMap> {\n    const startTime = Date.now()\n\n    try {\n      const result = await this.provider.getPermissionsByIdentity(identity)\n\n      this.metrics.recordDuration(\"rbac.provider.success\", Date.now() - startTime)\n      this.metrics.increment(\"rbac.provider.calls.success\")\n\n      return result\n    } catch (error) {\n      this.metrics.recordDuration(\"rbac.provider.error\", Date.now() - startTime)\n      this.metrics.increment(\"rbac.provider.calls.error\")\n      throw error\n    }\n  }\n\n  invalidate(identity?: string): void {\n    this.metrics.increment(\"rbac.provider.invalidations\")\n    this.provider.invalidate(identity)\n  }\n}\n```\n\n### Composição de Providers\n\n```typescript\n// Camada completa com cache, métricas e fallback\nconst composedProvider = withTTLCache(\n  new MetricsPermissionsProvider(\n    new FallbackPermissionsProvider(\n      new PrismaPermissionsProvider(prisma),\n      new StaticPermissionsProvider(defaultPermissions)\n    ),\n    metricsCollector\n  ),\n  5 * 60 * 1000 // 5 minutos de cache\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 Prisma](../rbac-prisma/)\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"}