{"_id":"@gentleduck/iam","_rev":"32-a7fe4513c6adfb6ca8a91dc256e763d9","name":"@gentleduck/iam","dist-tags":{"latest":"5.11.0"},"versions":{"1.1.1":{"name":"@gentleduck/iam","version":"1.1.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.1.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"0683d53a88daf91a6ef0190f99e80f196e03a409","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.1.1.tgz","fileCount":171,"integrity":"sha512-0La1GrewraDEBiD5t8IzLp+Rz4Ro8ZCqmyNgav6veNZhkBTefRgYxbTDe1Kk8i8BmDEcVqQr5KhYe51DPpaXwg==","signatures":[{"sig":"MEYCIQDdxuGaIRlyi/JoYNLnbi7bhlpngxQ7W7DLfgxPkPv5FwIhAM7Y3BrMRY8v6d6OF5i+CVwh0ECIpX/b0g4qHyxRHv0b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1052291},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"7c1bf71cdb3d372636e5f4485b0e051b7ec41450","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.18.3","vitest":"^4.0.16","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.1.1_1773283746337_0.030721914146382145","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@gentleduck/iam","version":"1.1.2","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.1.2","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"dd4b97085f97fcc6992690b296d815de0a8c2c0c","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.1.2.tgz","fileCount":171,"integrity":"sha512-ohu83XBXa0tSegcab5PPnEEh4gkPgKCUlb5owA9pIGFmXo+mHf/djp2jdD8JpmCSnUu1Ns5FBmY9sRzPxgVnGA==","signatures":[{"sig":"MEUCIQD8YXATXCoDGAqdG5URuYa0981u5g7zmhLZ2HFJK44PeAIgXgstYHvXpJamSNR76qzNkh3lwa8CQFY+5GUqZpgQfas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1053473},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"6913fe04532610aae0c0733744bd94064899143d","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.18.3","vitest":"^4.0.16","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.1.2_1773284322113_0.8621453548561193","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@gentleduck/iam","version":"1.2.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.2.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"491a29e2593ee5cd19a84498296a5249905349bd","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.2.0.tgz","fileCount":184,"integrity":"sha512-1zzpt7uhT68r0bcWecmlkqHrFSKjXEucn72cqoy30K4sXNw8tiSBPwFcGqrUvSwtneZ1tqIsIepawXqA197PTA==","signatures":[{"sig":"MEUCIAaNXK+4iXrLjf09+UC9QH/pQvcnEGT4fskUF7Z9X5eqAiEAgnEUqUp9Fz/hOyO4hjPCUMYwChhmwJ3d7UVYzFdtLa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1474071},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"f43e4ae2a0671f6b0fdbb5089a282e1fbe3919e8","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.18.3","vitest":"^4.0.18","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.2.0_1773325084100_0.4548888860125744","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@gentleduck/iam","version":"1.3.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.3.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"c8e541bdfcdcaa7e7cfe501ee726eab8ecd33d37","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.3.0.tgz","fileCount":199,"integrity":"sha512-bn9nIxNWHnT6P1C+Hj5uw//gu0BRE2cR9gFydHQlSF4NYid9y0DiLJi2NK680ad3C5fmB/b8xvSWHwFqRNkK3g==","signatures":[{"sig":"MEUCICqKD4/hslQ9Sxv8tunmcdyK3/4yA91VnfGY7xoVzmq2AiEAqjGXgP+iN4Qr4rbTI2+lq35j6PWqQ/gqGDPeQM/hvFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1539409},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"a10bc4ecbb40e7e16ae0dd83cd6c03683973a944","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.18.3","vitest":"^4.0.18","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.3.0_1773330594947_0.8153522321760502","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@gentleduck/iam","version":"1.3.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.3.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"fd955201082207256eb99d6bc44fa9eb2e9d76b1","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.3.1.tgz","fileCount":199,"integrity":"sha512-asBdcBmdz+sRA9hTs/2mmk4syPDByK3IQcHGKNiIX1oTAfJHDLKAQQASjCNwvKFBE033CKE5AhvuRbz9gfxDXQ==","signatures":[{"sig":"MEYCIQDSFUqXM9Qk1Bonox5oEYFPFg+iqac5JAVDIFBYo7BeLAIhAOFIa6pQkRh/UEOBJukmUiFHMvV8soVWWAbAzhBD78Xo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1548699},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"97ace6c2cba61d8052c81eb3129e1039b732a9b2","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.18.3","vitest":"^4.0.18","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.3.1_1773406405874_0.5146793551654387","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@gentleduck/iam","version":"1.3.2","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.3.2","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"629c402790b4556e5c0db9ee91bc62100af92d33","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.3.2.tgz","fileCount":199,"integrity":"sha512-iPwSFrUmDJKwdzBi32HXCv6Lwtc0Upn7KcWE0iebgVk3d4PZACKpz3Bu7jfbyn3/bdMuSCl64HGsk6+kNM7IMA==","signatures":[{"sig":"MEUCIFvxYW1Fs6e2OaFZa/LF0A16CEdCSjSZIj/hvmL3oduDAiEAvwz9OeF2OPyvr3y7Y5JLvaAl1Z0gtTXvZ9ThBzSrObI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1554915},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"9e8612cd19904144eb9297f84bf64d5dbc62a628","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.18.3","vitest":"^4.0.18","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.3.2_1773419748420_0.19976841053881267","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@gentleduck/iam","version":"1.4.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.4.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"d761dd7d0d21a5dc0ed37c4ab9c23de110fbbc4e","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.4.0.tgz","fileCount":199,"integrity":"sha512-sK11JIKE5MzNwS7kyl85JRp8ezcj/XoEDG0BK6csdtnNhkFRoy4LqZ+QaAJEjBdh9jwiCeLd/GpdNr6H+wFTPw==","signatures":[{"sig":"MEUCIQDa6R/4fOmUlmpAa6h654C1J+UV84doc4Fno3fujhfqrQIgGrQ5En/3EvXg270SH00kODa3F4JdYSRw/dvck+azVPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1518594},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"e5997aee9742781d8020cdec3183dd2446755541","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.21.2","vitest":"^4.0.18","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.4.0_1773548992383_0.36951268381650104","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@gentleduck/iam","version":"1.5.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.5.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"20e2091d443e152f2dbf1da0bbf2ab431dc06e45","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.5.0.tgz","fileCount":202,"integrity":"sha512-T77hCPij3uf+D8faoEFmDabCHMGC3jH/5aTv7szFhvNTCL3FWJgqf1cSxob77hc4rNMmbVLzKl2Q08iDrPcpNw==","signatures":[{"sig":"MEUCIBadmWtNNJZdiWkuaZmLlAu55Ub7l1SSUyl4ZzgJdgXpAiEAs/GoJ+TqiLBT5XMbUOiIzFOYoMeq8lLlVP3e11kkK8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1520158},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"c235fdee058c7fff8d68684b90bb964a586be1da","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"0.21.2","vitest":"^4.0.18","typescript":"5.9.3","@types/react":"^19.2.14","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.5.0_1773846320664_0.49874085214768393","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@gentleduck/iam","version":"1.6.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.6.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"7066121f2bac678cbcb6861701e6cd986733f9d4","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.6.0.tgz","fileCount":202,"integrity":"sha512-j70MZSBIpYg1Iywnw4aP6Xgh4jNZ8vGhtXkfR6QBP5Nv3CMOlXVPhQu4WjwDNYRlNnNtcPqLihhVISkGtfke7A==","signatures":[{"sig":"MEUCIQCeWUIVxSua8yT+fSMVEpFKBT4y8dQ6ee9/cSYYNlGtSwIgS7L0WLdKhcCoSxFEEmNYPKaCtiWfG4agJc1uyk95DNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1616688},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"3cf6025c39d28798f947502d5a0bbc1afa3f6786","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.4","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"casbin":"^5.36.0","tsdown":"0.21.2","vitest":"^4.0.18","role-acl":"^4.5.4","easy-rbac":"^3.2.0","@rbac/rbac":"^2.1.3","typescript":"5.9.3","@types/react":"^19.2.14","@casl/ability":"^6.7.2","accesscontrol":"^2.2.1","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.6.0_1775060225808_0.4446533028204682","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@gentleduck/iam","version":"1.6.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.6.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"d6dc25677f421df6c3531b77bfccab0fc51d605a","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.6.1.tgz","fileCount":203,"integrity":"sha512-GX1dkq73ouMU+d14NQIBwowq+1blRM6g/dgBqXyINdGWIOlTC/aA9p89FQDYMHCTEswwnJjDj8dwz9scFOXnfg==","signatures":[{"sig":"MEQCIDZnxURODeMws5R8aYQxTfBlVqpzB74uCf8kNC4pHPWmAiBvAqIIOB+MXz7P8HuGGnadAxt/liB7+lH2D/0n5z4Qgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1621504},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"981dcbd90e53d4fd977a9881afd7689d21e01885","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.7","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"casbin":"^5.36.0","tsdown":"0.21.2","vitest":"^4.0.18","role-acl":"^4.5.4","easy-rbac":"^3.2.0","@rbac/rbac":"^2.1.3","typescript":"5.9.3","@types/react":"^19.2.14","@casl/ability":"^6.7.2","accesscontrol":"^2.2.1","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.6.1_1775115266364_0.8402816597143139","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@gentleduck/iam","version":"1.6.2","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.6.2","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"62fea8ed2e68dde2ce6d8d93851e5833edf97500","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.6.2.tgz","fileCount":203,"integrity":"sha512-hRfuf/hJ5LuyuIrO7eS8cHd3LgivIazm45G6sHqslO3EfhruwyhsHVzrl+kveRqh96VY7Sw39vHzVdaiyZBlDg==","signatures":[{"sig":"MEUCIHLRElyBuowTVDTCf8WGSCcleVAuPfdtz+J9J1NFa0GMAiEA3LbN+3I7YQYuyGgxpzHMO7s3QCPBYTZpI/bCig8oeeM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1621509},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}}},"gitHead":"3eb125239bff97d16a450c246f6a739baa28d073","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.7","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"casbin":"^5.36.0","tsdown":"catalog:","vitest":"catalog:","role-acl":"^4.5.4","easy-rbac":"^3.2.0","@rbac/rbac":"^2.1.3","typescript":"catalog:","@types/react":"19.2.14","@casl/ability":"^6.7.2","accesscontrol":"^2.2.1","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.6.2_1778068673383_0.9572879967351282","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@gentleduck/iam","version":"1.7.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@1.7.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://github.com/gentleeduck/duck-iam#readme","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"615883d457fd1e97921539d311741c497ced2eab","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-1.7.0.tgz","fileCount":249,"integrity":"sha512-nuj9AfqgXQyuEFObY95sNe8zWZ9Lgd850JOIHjlYQLBxSsB+n1rsJJwRJq5C3xvJ0IqAdqevr/HVf6ApXIoNlA==","signatures":[{"sig":"MEQCICcvc8XHyh7DcAFUYMQkX4jvsFnQQKK/6PgufI4Pu8GPAiAYbjuNOcfNJS9PaUxze7OGrPd3lo9ZWfDFEL9Fg4TEbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1913036},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"a91c669b1fd0d3628c2e067fb6c45c6063a8bf4c","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.7","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"casbin":"^5.36.0","tsdown":"catalog:","vitest":"catalog:","role-acl":"^4.5.4","easy-rbac":"^3.2.0","@rbac/rbac":"^2.1.3","typescript":"catalog:","drizzle-orm":"^0.45.2","@types/react":"19.2.14","@casl/ability":"^6.7.2","accesscontrol":"^2.2.1","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"vue":">=3.3.0","react":">=18.0.0","redis":">=4.0.0","ioredis":">=5.0.0","drizzle-orm":">=0.30.0","@prisma/client":">=5.0.0"},"peerDependenciesMeta":{"vue":{"optional":true},"react":{"optional":true},"redis":{"optional":true},"ioredis":{"optional":true},"drizzle-orm":{"optional":true},"@prisma/client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_1.7.0_1778585670956_0.2852874825487448","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@gentleduck/iam","version":"2.0.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@2.0.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"dbab3c9b114e17cc453e586e51b515e64e41c287","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-2.0.1.tgz","fileCount":317,"integrity":"sha512-sokh7K5LhDoPwJi5q3rImfnL7i2ZOaSylVLpizQyEDAGZFWRA1UP3tK+KxFpfFO6Yrv2wupaxlACf2nCiEO39w==","signatures":[{"sig":"MEUCIGSwRQVRVMF2PHIsTlv/E9Dav45truwPdaMCWVXbrpKrAiEA5vcfmDuPSXlco1sczNNUPZ8Br06geNyLzCvP2zDomyY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3691489},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"530c6ef6b65b7a1629e46f5a316cd10b155b7b68","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.7","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"unrun":"^0.3.0","casbin":"^5.36.0","motion":"^12.39.0","tsdown":"catalog:","vitest":"catalog:","role-acl":"^4.5.4","easy-rbac":"^3.2.0","@rbac/rbac":"^2.1.3","typescript":"catalog:","drizzle-orm":"^0.45.2","@types/react":"^19.2.14","@casl/ability":"^6.7.2","accesscontrol":"^2.2.1","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@gentleduck/registry-ui":"^0.4.3","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*"},"peerDependencies":{"react":"^18 || ^19","drizzle-orm":">=0.30.0","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_2.0.1_1779208254206_0.5900886166265307","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@gentleduck/iam","version":"3.0.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@3.0.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"bdf078863ca2e35e973a45d564e119bff10999e6","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-3.0.1.tgz","fileCount":390,"integrity":"sha512-REv3j5Nsv5WHUih4hfsmv3Pm7HKr2RpIm1HrZjq0mbVBYYhfld/WpHlsoV29QRQWi9Ns1/+I9Fg2EGp+htFEDg==","signatures":[{"sig":"MEQCICVUWp9itXx39egix1jAV6j8dxL+g7VRmSPC4xaCXY5gAiAzOCuLP+YY/+UykseUyxg6FIA8UxG+QNhV7EYlIDyMaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4547287},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"32a90fa975862200bf10e462e53c44f4e6fd1b02","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"unrun":"^0.3.0","casbin":"^5.36.0","motion":"^12.39.0","tsdown":"catalog:","vitest":"catalog:","role-acl":"^4.5.4","easy-rbac":"^3.2.0","@rbac/rbac":"^2.1.3","typescript":"catalog:","drizzle-orm":"^0.45.2","@types/react":"^19.2.14","@casl/ability":"^6.7.2","accesscontrol":"^2.2.1","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.4.4","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^18 || ^19","drizzle-orm":">=0.30.0","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_3.0.1_1780033637459_0.7923548338108481","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@gentleduck/iam","version":"3.2.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@3.2.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"74ca1ee074c916cb733b38872a9bc3b9852c041f","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-3.2.0.tgz","fileCount":400,"integrity":"sha512-iAWhhSp3SB/WqkQGKgSJSqGg5m+xggVdWPFB7XqcEaCqouwSKivx3Vmbf9UKk6unU8kDlGbHw8LgxhuWF/j3cQ==","signatures":[{"sig":"MEYCIQDd/gdEombq0TRM7phphMjBbZi6BC9exSwS3XFt+YFQVAIhAO6garu0Wgz85UJ5YufLzpfFJApmY3Kkn/KmsFZ6znsX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4614480},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"573fd126c9f8b656efe3a9f7d184498de237d265","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"catalog:","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.4.4","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_3.2.0_1781899787330_0.5803906645674919","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@gentleduck/iam","version":"4.0.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@4.0.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"1623564964bb6ceb31b4be61cc29e7870fa018a9","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-4.0.0.tgz","fileCount":400,"integrity":"sha512-DRWDA6v5ukHa8XioiTX4jaaZwXBVZ+5iqrP0z5A/B9KTkbPwIj0OFtrLu/DBIO8wZyEgTmNIVxsfGB1l28LFqw==","signatures":[{"sig":"MEQCICCtzKrdhMg4Ez9IBcCkeiM1ba6boDNF2dKOo6QN1s4wAiBm4S5tUIYA3WtiMZY523O22LLcTqK3ejRSVmaQ28AeDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4616009},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"13342045c692420cbe6ea62158d414ec02ce07fd","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"catalog:","@types/node":"catalog:","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.4.4","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_4.0.0_1781933201449_0.8642363575842638","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@gentleduck/iam","version":"5.0.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.0.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"aa939b6e3d21e9a9a4589280b75a88a03717be23","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.0.0.tgz","fileCount":400,"integrity":"sha512-iJOENVaDLSw1HW63RgerZ/7Eg+OsZJHAeNcFBW3ohFlUsiSUwYBhI6Ti2OO0prlj6VDcmStmU1e4R5xfkOpENA==","signatures":[{"sig":"MEQCIBBNDzHQOxLOd0IeC9mGaUhB4s0SORwbAuxItyvyQLhbAiA2wel+IVu4ACr7hQpW0CTRYK/ICgst9d34L3WJ+dI38g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4653166},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"03b5953cc7b2314c009f0f07352ff772adc4025a","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.0.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.4.4","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^0.2.1","@gentleduck/variants":"^0.1.23","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.0.0_1782144969981_0.41252692469729113","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"@gentleduck/iam","version":"5.0.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.0.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"31f7dd513a3afe66c58728dea8cddc4fdb594e5b","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.0.1.tgz","fileCount":400,"integrity":"sha512-3b6Ch5uwOavlPWZuDEcxmsFU5oxSWXKXHjVKRXJrO2Iun7ldMMXrS278n6f6ZYjIaQJu0IVYElumOvjqYWiSqg==","signatures":[{"sig":"MEUCIQC4ZFwhHJIKFWyMs1roj1HwreB6+9NHr9HJULHcbH1I3wIgbOCd1tdog/ZEQ/djonicQpu3O3WGL2a/JsGtjjKhOow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4633009},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"d38561e810437fd4bb615c084c6709424b788130","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.0.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.0.1_1782147796614_0.7511096161085355","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@gentleduck/iam","version":"5.1.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.1.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"9eb01cf5d9598e0e63a3c31d3e911f238ba2f8be","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.1.0.tgz","fileCount":400,"integrity":"sha512-rHoDtq12vQJ5TyuKznxpV/DWP1yMCVjCwdaRymYQsk69zDgyEBcXYWm12mmLzlHE555wfZ9S1QmC17M8Srh3Ow==","signatures":[{"sig":"MEQCID7R4K8BpXiaxqQq6FcW25RliKfZbjy5Ng9RPMYm+hVgAiBM73qAvpTHTe9ZO/F8quxLJGV6rCmUkjTcDIkK+imivA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4640538},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"37f51bbbb2eebadbe814dd7a7054ccfede209801","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.22.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.0.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.1.0_1782165202155_0.48672678489399424","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"@gentleduck/iam","version":"5.2.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.2.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"341efdd5f4d6b1b66427bae64d3ce5e4e5fe90b6","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.2.0.tgz","fileCount":407,"integrity":"sha512-lbpoQfjRPKpDNW8QiRnYhgEkYK4X6uXPpoV1PHvoWsabfNMBVNUFXnP+8KPtbEotEebOQna6JPlC6WWmFDiXiA==","signatures":[{"sig":"MEUCIQD/qCcGQYjZ+0gOnpCYhh+LyXp3S/oMIydE5CV0bUmJ3AIgdH1YtfPBoHRCXEi23lFe8DX5wwfxuDZ4HbZg6lqFHis=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4666669},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"da7e82ef41f042f9593d4f6d4e09f5d8cae482a9","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"12.0.2","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.2.0_1786969553741_0.42317833416667927","host":"s3://npm-registry-packages-npm-production"}},"5.3.0":{"name":"@gentleduck/iam","version":"5.3.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.3.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"809c48af181ae8ad1788d011b46b3d1896e6b6bb","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.3.0.tgz","fileCount":408,"integrity":"sha512-18eGkJznyUKxPTmGCsmztDewhHcFX4+g4Gi5pXWfdjwTFDZYmfZZK+/z5wV4PA0Pcfd5bdanLD52Ba2Bg/gziA==","signatures":[{"sig":"MEYCIQDdVqWat2y8rb0Vzswg0haP8CglP2UgAOYPbFn464VE3AIhAPrWgc71N6MlFV2/8k8wCBTIetUZZ8fCBlMYLZu6CeaP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4677551},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"9909271d3901b76a94eef1aac7c218c32a518cb7","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"12.0.2","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","role-acl":"^4.5.4","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.3.0_1787170141394_0.6760046858802762","host":"s3://npm-registry-packages-npm-production"}},"5.4.0":{"name":"@gentleduck/iam","version":"5.4.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.4.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"f4d8679fcd2673317e90409ffe9fd24acbf535a0","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.4.0.tgz","fileCount":412,"integrity":"sha512-oVW00D4vAZmFLaEX8md03WAZrvELwfMliRyoKfyT/S0IM1yklpzRpguygFcgbbj3zbYNZ9+r8hZ9qVeAvuxgwQ==","signatures":[{"sig":"MEQCIQCbEA4BWmS+WE61X1GGCGXRssac6SItnqDzvFmxfAwc3gIfAY9YkF+3cadyGryWtlnQ+VS4XMGYlfnKjxCdrzpI4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4719171},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/schema/pg":{"import":{"types":"./dist/adapters/drizzle/schema/pg.d.ts","default":"./dist/adapters/drizzle/schema/pg.js"},"require":{"types":"./dist/adapters/drizzle/schema/pg.d.cts","default":"./dist/adapters/drizzle/schema/pg.cjs"}},"./adapters/drizzle/schema/mysql":{"import":{"types":"./dist/adapters/drizzle/schema/mysql.d.ts","default":"./dist/adapters/drizzle/schema/mysql.js"},"require":{"types":"./dist/adapters/drizzle/schema/mysql.d.cts","default":"./dist/adapters/drizzle/schema/mysql.cjs"}},"./adapters/drizzle/schema/sqlite":{"import":{"types":"./dist/adapters/drizzle/schema/sqlite.d.ts","default":"./dist/adapters/drizzle/schema/sqlite.js"},"require":{"types":"./dist/adapters/drizzle/schema/sqlite.d.cts","default":"./dist/adapters/drizzle/schema/sqlite.cjs"}}},"gitHead":"3ca9c9b954f50468e9a1c27bb04031816c4eed10","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"12.0.2","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.4.0_1787412155061_0.10326838983636022","host":"s3://npm-registry-packages-npm-production"}},"5.4.1":{"name":"@gentleduck/iam","version":"5.4.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.4.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"e1d4c0c6f19ac9a5edf7ff1252cf78d33dee5b4a","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.4.1.tgz","fileCount":423,"integrity":"sha512-fH0kCHx/kSUwYGoFpIjYEY4oQW06IYcEdNlE2bfu2r8AIRBoPddDFbDCppBUUiIf2a/HCFB6sVPbMiHTgJHSwA==","signatures":[{"sig":"MEYCIQD9nMZFpR43K6WXAMDoQrCXRCdVKDJXs+o3vMX7OpirCwIhAJWhCVC4JnGZ8JcTWy1zsJ5OeOLZOS91fc7uoBd4EJ0v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4705390},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"40bfda38827020d0753d8ee81da2720610ad3067","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"12.0.2","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.4.1_1787733391076_0.8739504012557877","host":"s3://npm-registry-packages-npm-production"}},"5.4.2":{"name":"@gentleduck/iam","version":"5.4.2","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.4.2","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"9fd8ab50e4e289dd62efdb5d1129367f825d5d66","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.4.2.tgz","fileCount":423,"integrity":"sha512-o6JTT5xnWVtbBWA7UGcxt/weurtkvO4S1K5xwjPoiolGXj1NhQ3/k+40qiclnG1YLTi/QtnEdf58DeW/yeiuXg==","signatures":[{"sig":"MEUCIQDQTcplae8zCKNm+wLLay3/RVL5IlzsSyKbLcqsz3Ki9wIgLBouhTewVz4CtiJoyyQbBSb1WWNq2aCcbdpndR7RYSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4705390},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"341d16e4cf3826574e944d5b2f9792b815e0f023","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"12.0.2","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.4.2_1787745191671_0.8490010739819844","host":"s3://npm-registry-packages-npm-production"}},"5.5.1":{"name":"@gentleduck/iam","version":"5.5.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.5.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"ccb44689e767a22517093036366faa9ebd185ba4","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.5.1.tgz","fileCount":424,"integrity":"sha512-BQJ1hFLqWrJ911P0AWlFpAQqHjCaXyI1KSZAMZ6P4RNg8JZlhD+BsHeCeUJfbumhq/C5I5WJFS9rNh4sOT4yhg==","signatures":[{"sig":"MEUCIQCigdYR2QnLQluws5EDUnLSxaAC1d3+ECQNmmAAOTQmqwIgDtf4XhOdQojfa/8LuedHxuSvKrIapALRURkbhxbOd0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4774498},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"9058ea518858b81749d7bf7e9931ab89612d69db","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"12.0.2","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.5.1_1787754494607_0.7010756162258489","host":"s3://npm-registry-packages-npm-production"}},"5.6.0":{"name":"@gentleduck/iam","version":"5.6.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.6.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"3b0d374f3e59c2c205ff32e830dc85dcf3857631","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.6.0.tgz","fileCount":425,"integrity":"sha512-tkcbE1yncPLhAFd86dIwiO/HapxI16I/lNYWPA4s/oNtgq15/1qAySgzSZE41KICJSEtOo2cDKjAJyVLKOM2gA==","signatures":[{"sig":"MEQCIG9bD+DG3j87F2fsivEZK36N1L1m9en81feTQwbVtLGaAiB9oESVoUa8h3tzVKuA+vpiiVkMyXToa7UchX1A+Ww5fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4825227},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"b3cfbf2d13ee4f04a122724f0d0c758b9973184b","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"11.11.0","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"uuid":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^6.0.3","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^2.2.1","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.6.0_1787866221942_0.7302655378473393","host":"s3://npm-registry-packages-npm-production"}},"5.7.0":{"name":"@gentleduck/iam","version":"5.7.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.7.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"3b2e73dcea0cb32e73dfc31bf74678eae5abcb65","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.7.0.tgz","fileCount":443,"integrity":"sha512-x8bXIP+p+AMS/8EV05L5wOsKAWRIJ+mnEluhSlqzHqfUFt2wbP9uv2mGOLeZu988+LfTVzYolvW6TfYQsfe/mQ==","signatures":[{"sig":"MEUCIHw6R88TkxO3xDcdQXGvE55bN5S4DbQpSLaRaKgYIBxoAiEAiFXK4BfxT+NgWDfkuq6sdinvnmI+f0WDLZQc8CoL86Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5125058},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"282d6f67aa6bfe0f59c4590a5c47ccbe18c69911","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","debug":"bun run scripts/debug.ts","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"11.11.0","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"uuid":"^14.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","unrun":"^0.3.1","casbin":"^5.50.0","motion":"^12.40.0","tsdown":"^0.22.3","vitest":"^4.1.9","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^7.0.2","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^3.1.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/variants":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.7.0_1788177883154_0.41429529473325166","host":"s3://npm-registry-packages-npm-production"}},"5.8.0":{"name":"@gentleduck/iam","version":"5.8.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.8.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"154276040a105425c6233c886cc6418acc24025f","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.8.0.tgz","fileCount":509,"integrity":"sha512-T+kyNGCclasX8PBsJLNk13OggUO/8zYrYK650cLhDSAL2lULIc+x64TvQK4vp+b2JLJOCK/xceK2rvVQzEwV9g==","signatures":[{"sig":"MEQCIFPd2IxhAPqtGfW9uyv3LFSHfMujfA6bQIw+qqkLdVLnAiAPUv9ZlGugM1+VWe+wbGiVUQpQBaIQrAVIFr+bNfJi4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5673235},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"7a1ce886a482a963ca16db5430d1d827b862733c","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","debug":"bun run scripts/debug.ts","format":"biome format --write ./","mutation":"stryker run","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"11.11.0","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"uuid":"^14.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","casbin":"^5.50.0","tsdown":"^0.22.3","vitest":"^4.1.9","@types/pg":"^8.21.0","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^7.0.2","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^3.1.0","@gentleduck/libs":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.8.0_1788373328169_0.4063464419900762","host":"s3://npm-registry-packages-npm-production"}},"5.8.1":{"name":"@gentleduck/iam","version":"5.8.1","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.8.1","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"048b6cfe0e0b8cd7469afbfa1c40b9498877b088","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.8.1.tgz","fileCount":674,"integrity":"sha512-VHKa20/WXLioSTekO699hvkMbKohQlv7p5RqWxqx03fB7KNQEQA/u2zplaqCCrwAFC+eT690sYLGDhyWTBJV0A==","signatures":[{"sig":"MEYCIQCH3MXSDuDyoyBfXcaCNzVInZvGmkEyOKXKjs91y/xCiwIhAKUnOF8AGFsdvHro3O/z4PFbQ3kF04DeBFqfRKYu+XYD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8279120},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"9353a686f59ef0f4f1e4a64a81dcf36ffaafba4b","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run --exclude \"**/*.e2e.test.ts\"","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","debug":"bun run scripts/debug.ts","format":"biome format --write ./","mutation":"stryker run","test:all":"bun run test && bun run test:e2e","test:e2e":"vitest run --fileParallelism=false e2e.test.ts","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck","gen:test-inventory":"bun run scripts/gen-test-inventory.ts"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"11.11.0","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"uuid":"^14.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","casbin":"^5.50.0","tsdown":"^0.22.3","vitest":"^4.1.9","@types/pg":"^8.21.0","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^7.0.2","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","@casl/ability":"^7.0.0","accesscontrol":"^3.1.0","@gentleduck/libs":"^1.0.0","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","@gentleduck/libs":"^1.0.0","@gentleduck/registry-ui":"^0.4.3"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/variants":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.8.1_1788475956890_0.8269330837242619","host":"s3://npm-registry-packages-npm-production"}},"5.9.0":{"name":"@gentleduck/iam","version":"5.9.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.9.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"ef0eb87f6c554cc330970b017af26a407c3b65d2","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.9.0.tgz","fileCount":737,"integrity":"sha512-CaySALrosOFzvwysoUwcX7aN3a4STqN76dGvA3twrH/gD6z1AFlX6Tmecg1hS8C+SXa4HtKhy9QxeVLnbpXlYg==","signatures":[{"sig":"MEYCIQCykeGW0oWno25qp9gQGAOSTI3dHfjuDt8F1Il7wd6lZQIhAOsH2LimZ7cm3S09ztq8W3uGLlz7E3mNw5xPTBAGYvMU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9764771},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./dt/v2":{"import":{"types":"./dist/dt/v2/index.d.ts","default":"./dist/dt/v2/index.js"},"require":{"types":"./dist/dt/v2/index.d.cts","default":"./dist/dt/v2/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"d4d1f73fda285f78d9f31d5f95e60e25573a6d7b","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run --exclude \"**/*.e2e.test.ts\"","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","debug":"bun run scripts/debug.ts","format":"biome format --write ./","mutation":"stryker run","test:all":"bun run test && bun run test:e2e","test:e2e":"vitest run --fileParallelism=false e2e.test.ts","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck","gen:test-inventory":"bun run scripts/gen-test-inventory.ts"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"11.11.0","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"uuid":"^14.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","casbin":"^5.50.0","tsdown":"^0.22.3","vitest":"^4.1.9","@types/pg":"^8.21.0","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^7.0.2","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","lucide-react":"catalog:","@casl/ability":"^7.0.0","accesscontrol":"^3.1.0","@gentleduck/libs":"catalog:","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","lucide-react":">=0.400.0","@gentleduck/libs":">=0.2.0","@gentleduck/registry-ui":">=0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"lucide-react":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.9.0_1788701511243_0.6789566608610047","host":"s3://npm-registry-packages-npm-production"}},"5.10.0":{"name":"@gentleduck/iam","version":"5.10.0","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","_id":"@gentleduck/iam@5.10.0","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"homepage":"https://gentleduck.org/duck-iam","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"ca4991657ee165504cfe25f7c8ef14d12030646f","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.10.0.tgz","fileCount":787,"integrity":"sha512-FSoZYhI2RdzoNquLUAdtoBwCTioYCf1axb7BVahwSte55dWWTF4MJL4Ggb1lu0V2traXHC0SNiClYUM5LaFrUg==","signatures":[{"sig":"MEUCIBSGCUTYGqvb0M7aK/QJ2MH+Zou0+M/Vle4TWd/PFX9hAiEAwb0/nQ5oHzp/Kk10zS2hgj9DLmFfJGYMwL69yoO2+Jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDD3PkfXZHaAIdxkbIqFwloyfEr6v14NGzY0yR4zHomLwIhAPIVYWvxZFJyvLC3wfgJlPSUfKX/+ATUugFBXolIEOLF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9294075},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./dt/v2":{"import":{"types":"./dist/dt/v2/index.d.ts","default":"./dist/dt/v2/index.js"},"require":{"types":"./dist/dt/v2/index.d.cts","default":"./dist/dt/v2/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"5b701e657b1df1afb8e59e69a00c4d58b8799691","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run --exclude \"**/*.e2e.test.ts\"","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","debug":"bun run scripts/debug.ts","format":"biome format --write ./","mutation":"stryker run","test:all":"bun run test && bun run test:e2e","test:e2e":"vitest run --fileParallelism=false e2e.test.ts","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck","gen:test-inventory":"bun run scripts/gen-test-inventory.ts"},"_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"11.11.0","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"uuid":"^14.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","casbin":"^5.50.0","tsdown":"^0.22.3","vitest":"^4.1.9","@types/pg":"^8.21.0","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^7.0.2","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","lucide-react":"catalog:","@casl/ability":"^7.0.0","accesscontrol":"^3.1.0","@gentleduck/libs":"catalog:","@stryker-mutator/core":"^9.6.1","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^9.6.1"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","lucide-react":">=0.400.0","@gentleduck/libs":">=0.2.0","@gentleduck/registry-ui":">=0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"lucide-react":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam_5.10.0_1789657718889_0.7598129805866343","host":"s3://npm-registry-packages-npm-production"}},"5.11.0":{"_id":"@gentleduck/iam@5.11.0","bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"dist":{"shasum":"b9515e3da249e5e8d02450f9e288194b657daa84","tarball":"https://registry.npmjs.org/@gentleduck/iam/-/iam-5.11.0.tgz","fileCount":880,"integrity":"sha512-SVNkSyOS0p8kWU2nZengOCn47CFXETXOksFzhaZ4HqqXrZNMovSl/0yxgyF+rHMNlGvIxnIE9kb7LDt3Y7aoJw==","signatures":[{"sig":"MEQCIHO6EYFyzrqKRPkDeWBlOL+uSw1vFRB3PUIX4qI8QSxhAiB+U5i7CSAzdUS6y0gpLdcH1cSpoWz9l3aICdon8dMQnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCSOF9ID4Di35iAKrMLJDfteyOQomiMhII40pq12z8HuwIhAMBXdLR3gwC6Nm1KSsvmH/dkUBQdHgI3VNYq631yIk8T"}],"unpackedSize":10470609},"main":"dist/index.js","name":"@gentleduck/iam","type":"module","types":"dist/index.d.ts","author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"module":"dist/index.js","$schema":"https://json.schemastore.org/package.json","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./dt":{"import":{"types":"./dist/dt/index.d.ts","default":"./dist/dt/index.js"},"require":{"types":"./dist/dt/index.d.cts","default":"./dist/dt/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./dt/v2":{"import":{"types":"./dist/dt/v2/index.d.ts","default":"./dist/dt/v2/index.js"},"require":{"types":"./dist/dt/v2/index.d.cts","default":"./dist/dt/v2/index.cjs"}},"./client/vue":{"import":{"types":"./dist/client/vue/index.d.ts","default":"./dist/client/vue/index.js"},"require":{"types":"./dist/client/vue/index.d.cts","default":"./dist/client/vue/index.cjs"}},"./core/schema":{"import":{"types":"./dist/core/schema/index.d.ts","default":"./dist/core/schema/index.js"},"require":{"types":"./dist/core/schema/index.d.cts","default":"./dist/core/schema/index.cjs"}},"./server/hono":{"import":{"types":"./dist/server/hono/index.d.ts","default":"./dist/server/hono/index.js"},"require":{"types":"./dist/server/hono/index.d.cts","default":"./dist/server/hono/index.cjs"}},"./server/nest":{"import":{"types":"./dist/server/nest/index.d.ts","default":"./dist/server/nest/index.js"},"require":{"types":"./dist/server/nest/index.d.cts","default":"./dist/server/nest/index.cjs"}},"./server/next":{"import":{"types":"./dist/server/next/index.d.ts","default":"./dist/server/next/index.js"},"require":{"types":"./dist/server/next/index.d.cts","default":"./dist/server/next/index.cjs"}},"./client/react":{"import":{"types":"./dist/client/react/index.d.ts","default":"./dist/client/react/index.js"},"require":{"types":"./dist/client/react/index.d.cts","default":"./dist/client/react/index.cjs"}},"./core/builder":{"import":{"types":"./dist/core/builder/index.d.ts","default":"./dist/core/builder/index.js"},"require":{"types":"./dist/core/builder/index.d.cts","default":"./dist/core/builder/index.cjs"}},"./core/explain":{"import":{"types":"./dist/core/explain/index.d.ts","default":"./dist/core/explain/index.js"},"require":{"types":"./dist/core/explain/index.d.cts","default":"./dist/core/explain/index.cjs"}},"./adapters/file":{"import":{"types":"./dist/adapters/file/index.d.ts","default":"./dist/adapters/file/index.js"},"require":{"types":"./dist/adapters/file/index.d.cts","default":"./dist/adapters/file/index.cjs"}},"./adapters/http":{"import":{"types":"./dist/adapters/http/index.d.ts","default":"./dist/adapters/http/index.js"},"require":{"types":"./dist/adapters/http/index.d.cts","default":"./dist/adapters/http/index.cjs"}},"./core/validate":{"import":{"types":"./dist/core/validate/index.d.ts","default":"./dist/core/validate/index.js"},"require":{"types":"./dist/core/validate/index.d.cts","default":"./dist/core/validate/index.cjs"}},"./adapters/redis":{"import":{"types":"./dist/adapters/redis/index.d.ts","default":"./dist/adapters/redis/index.js"},"require":{"types":"./dist/adapters/redis/index.d.cts","default":"./dist/adapters/redis/index.cjs"}},"./client/vanilla":{"import":{"types":"./dist/client/vanilla/index.d.ts","default":"./dist/client/vanilla/index.js"},"require":{"types":"./dist/client/vanilla/index.d.cts","default":"./dist/client/vanilla/index.cjs"}},"./server/express":{"import":{"types":"./dist/server/express/index.d.ts","default":"./dist/server/express/index.js"},"require":{"types":"./dist/server/express/index.d.cts","default":"./dist/server/express/index.cjs"}},"./server/generic":{"import":{"types":"./dist/server/generic/index.d.ts","default":"./dist/server/generic/index.js"},"require":{"types":"./dist/server/generic/index.d.cts","default":"./dist/server/generic/index.cjs"}},"./adapters/memory":{"import":{"types":"./dist/adapters/memory/index.d.ts","default":"./dist/adapters/memory/index.js"},"require":{"types":"./dist/adapters/memory/index.d.cts","default":"./dist/adapters/memory/index.cjs"}},"./adapters/prisma":{"import":{"types":"./dist/adapters/prisma/index.d.ts","default":"./dist/adapters/prisma/index.js"},"require":{"types":"./dist/adapters/prisma/index.d.cts","default":"./dist/adapters/prisma/index.cjs"}},"./adapters/drizzle":{"import":{"types":"./dist/adapters/drizzle/index.d.ts","default":"./dist/adapters/drizzle/index.js"},"require":{"types":"./dist/adapters/drizzle/index.d.cts","default":"./dist/adapters/drizzle/index.cjs"}},"./invalidators/redis":{"import":{"types":"./dist/invalidators/redis/index.d.ts","default":"./dist/invalidators/redis/index.js"},"require":{"types":"./dist/invalidators/redis/index.d.cts","default":"./dist/invalidators/redis/index.cjs"}},"./adapters/drizzle/pg":{"import":{"types":"./dist/adapters/drizzle/pg/index.d.ts","default":"./dist/adapters/drizzle/pg/index.js"},"require":{"types":"./dist/adapters/drizzle/pg/index.d.cts","default":"./dist/adapters/drizzle/pg/index.cjs"}},"./observability/metrics":{"import":{"types":"./dist/observability/metrics/index.d.ts","default":"./dist/observability/metrics/index.js"},"require":{"types":"./dist/observability/metrics/index.d.cts","default":"./dist/observability/metrics/index.cjs"}},"./adapters/drizzle/mysql":{"import":{"types":"./dist/adapters/drizzle/mysql/index.d.ts","default":"./dist/adapters/drizzle/mysql/index.js"},"require":{"types":"./dist/adapters/drizzle/mysql/index.d.cts","default":"./dist/adapters/drizzle/mysql/index.cjs"}},"./adapters/drizzle/sqlite":{"import":{"types":"./dist/adapters/drizzle/sqlite/index.d.ts","default":"./dist/adapters/drizzle/sqlite/index.js"},"require":{"types":"./dist/adapters/drizzle/sqlite/index.d.cts","default":"./dist/adapters/drizzle/sqlite/index.cjs"}}},"gitHead":"f0c1f842e6f524d2fa2471531cfd33660bd20f98","license":"MIT","scripts":{"dev":"tsdown --watch","lint":"biome lint --write ./","test":"vitest run --exclude \"**/*.e2e.test.ts\"","bench":"vitest bench","build":"tsdown","clean":"rimraf dist .cache .turbo node_modules","debug":"bun run scripts/debug.ts","format":"biome format --write ./","mutation":"stryker run","test:all":"bun run test && bun run test:e2e","test:e2e":"vitest run --fileParallelism=false e2e.test.ts","benchmark":"bun run scripts/benchmark.ts","check-types":"tsc -p tsconfig.json --noEmit --pretty false --skipLibCheck","gen:test-inventory":"bun run scripts/gen-test-inventory.ts"},"version":"5.11.0","_npmUser":{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"},"homepage":"https://gentleduck.org/duck-iam","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"_npmVersion":"10.9.8","description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","directories":{},"maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"uuid":"^14.0.2","@gentleduck/error":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.23.0","react":"^19.2.7","casbin":"^5.50.0","tsdown":"^0.22.3","vitest":"^5.0.1","@types/pg":"^8.21.0","easy-rbac":"^4.0.0","react-dom":"^19.2.7","@rbac/rbac":"^2.1.3","typescript":"^7.0.2","@types/node":"^26.1.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.17","lucide-react":"catalog:","@casl/ability":"^7.0.0","accesscontrol":"^3.1.0","@gentleduck/libs":"catalog:","@stryker-mutator/core":"^10.0.0","@gentleduck/registry-ui":"^0.5.0","@gentleduck/tsdown-config":"workspace:*","@gentleduck/vitest-config":"workspace:*","@gentleduck/typescript-config":"workspace:*","@stryker-mutator/vitest-runner":"^10.0.0"},"peerDependencies":{"react":"^19.2.6","drizzle-orm":">=0.30.0","lucide-react":">=0.400.0","@gentleduck/libs":">=0.2.0","@gentleduck/registry-ui":">=0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"drizzle-orm":{"optional":true},"lucide-react":{"optional":true},"@gentleduck/libs":{"optional":true},"@gentleduck/registry-ui":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/iam_5.11.0_1790618240710_0.4103127977166021"}}},"time":{"created":"2026-03-12T02:49:06.240Z","modified":"2026-09-28T17:57:21.080Z","1.1.1":"2026-03-12T02:49:06.520Z","1.1.2":"2026-03-12T02:58:42.312Z","1.2.0":"2026-03-12T14:18:04.337Z","1.3.0":"2026-03-12T15:49:55.187Z","1.3.1":"2026-03-13T12:53:26.079Z","1.3.2":"2026-03-13T16:35:48.683Z","1.4.0":"2026-03-15T04:29:52.553Z","1.5.0":"2026-03-18T15:05:20.863Z","1.6.0":"2026-04-01T16:17:06.085Z","1.6.1":"2026-04-02T07:34:26.594Z","1.6.2":"2026-05-06T11:57:53.571Z","1.7.0":"2026-05-12T11:34:31.161Z","2.0.1":"2026-05-19T16:30:54.383Z","3.0.1":"2026-05-29T05:47:17.693Z","3.2.0":"2026-06-19T20:09:47.545Z","4.0.0":"2026-06-20T05:26:41.608Z","5.0.0":"2026-06-22T16:16:10.148Z","5.0.1":"2026-06-22T17:03:16.825Z","5.1.0":"2026-06-22T21:53:22.431Z","5.2.0":"2026-08-17T12:25:53.916Z","5.3.0":"2026-08-19T20:09:01.605Z","5.4.0":"2026-08-22T15:22:35.303Z","5.4.1":"2026-08-26T08:36:31.314Z","5.4.2":"2026-08-26T11:53:11.866Z","5.5.1":"2026-08-26T14:28:14.802Z","5.6.0":"2026-08-27T21:30:22.173Z","5.7.0":"2026-08-31T12:04:43.315Z","5.8.0":"2026-09-02T18:22:08.387Z","5.8.1":"2026-09-03T22:52:37.062Z","5.9.0":"2026-09-06T13:31:51.459Z","5.10.0":"2026-09-17T15:08:39.077Z","5.11.0":"2026-09-28T17:57:20.885Z"},"bugs":{"url":"https://github.com/gentleeduck/duck-iam/issues"},"author":{"url":"https://www.gentleduck.org","name":"GentleDuck"},"license":"MIT","homepage":"https://gentleduck.org/duck-iam","keywords":["rbac","abac","access-control","authorization","permissions","policy-engine","middleware","express","nestjs","hono","nextjs","react","vue","drizzle","prisma","redis"],"repository":{"url":"git+https://github.com/gentleeduck/duck-iam.git","type":"git"},"description":"Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.","maintainers":[{"name":"wildduck","email":"ahmedayobbusiness@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"./public/logo-dark.svg\" alt=\"@gentleduck/iam\" width=\"120\"/>\n</p>\n\n<h1 align=\"center\">@gentleduck/iam</h1>\n\n<p align=\"center\">\n  Modern ABAC/RBAC access control engine. Framework-agnostic core with integrations for Express, NestJS, Hono, Next.js, React, and Vue.\n</p>\n\n<p align=\"center\">\n  <a href=\"./LICENSE\">MIT</a> -\n  <a href=\"./CHANGELOG.md\">Changelog</a> -\n  <a href=\"./SECURITY.md\">Security</a> -\n  <a href=\"https://gentleduck.org/duck-iam\">Docs</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@gentleduck/iam\"><img src=\"https://img.shields.io/npm/v/@gentleduck/iam.svg\" alt=\"npm\"/></a>\n  <a href=\"https://www.npmjs.com/package/@gentleduck/iam\"><img src=\"https://img.shields.io/npm/dm/@gentleduck/iam.svg\" alt=\"downloads\"/></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@gentleduck/iam.svg\" alt=\"MIT\"/></a>\n</p>\n\n---\n\nType-safe authorization engine for TypeScript. RBAC + ABAC with a policy engine, condition evaluation, scoped roles, and integrations for Express, NestJS, Hono, Next.js, React, Vue, and vanilla JS.\n\nOne runtime dependency (`uuid`, pulled in only by the Drizzle schema helpers). Tree-shakeable - see [Module sizes](#module-sizes-gzipped) below for real per-module numbers.\n\n## Install\n\n```bash\nnpm install @gentleduck/iam\n# or\nbun add @gentleduck/iam\n```\n\n## Quick start\n\n```typescript\nimport { createIam } from '@gentleduck/iam/core'\nimport { IamMemoryAdapter } from '@gentleduck/iam/adapters/memory'\n\nconst access = createIam({\n  actions: ['create', 'read', 'update', 'delete'] as const,\n  resources: ['post', 'comment', 'user'] as const,\n  roles: ['viewer', 'editor', 'admin'] as const,\n})\n\nconst viewer = access.defineRole('viewer').grant('read', 'post').grant('read', 'comment').build()\nconst editor = access.defineRole('editor').inherits('viewer').grant('update', 'post').build()\nconst admin = access.defineRole('admin').inherits('editor').grantCRUD('post').grantCRUD('comment').build()\n\nconst policy = access\n  .definePolicy('blog')\n  .rule('owner-edit', (r) => r.allow().on('update').of('post').when((w) => w.isOwner()))\n  .build()\n\nconst adapter = new IamMemoryAdapter({\n  policies: [policy],\n  roles: [viewer, editor, admin],\n  assignments: { 'user-1': ['editor'] },\n})\n\nconst engine = access.createEngine({ adapter })\nconst allowed = await engine.can('user-1', 'read', { type: 'post', attributes: {} })\n// true\n```\n\n## Performance\n\nBenchmarked against 5 other JS authorization libraries using vitest bench\n(`bun run bench`). Every number in this section was measured at **5.6.0** on one\nmachine in a single run and has not been re-measured since; read them as ratios\nfrom that run, not as a current reading of your hardware. Re-run `bun run bench`\nbefore quoting any of them. Two different things get measured - keep them\nseparate.\n\n**Rule-matching only** (no adapter, no engine wrapper), ops/sec:\n\n| Library | ops/sec | vs CASL |\n|---------|---------|---------|\n| @casl/ability | ~17.0M | baseline |\n| easy-rbac | ~5.0M | 3.4x slower |\n| @rbac/rbac | ~3.3M | 5.2x slower |\n| **@gentleduck/iam** `iamEvaluateFast()` | ~7.6M | 2.2x slower |\n| accesscontrol | ~1.3M | 12.8x slower |\n| casbin | ~208K | 82x slower |\n\n**`engine.can()`** - the real entry point, full stack (adapter + hooks +\nsubject resolution + the compiled table):\n\n| Mode | ops/sec | vs CASL |\n|------|---------|---------|\n| `mode: 'production'` (compiled table) | ~1.15M | ~14x slower |\n| @casl/ability (ability pre-built, `.can()`) | ~17.0M | baseline |\n\n`mode: 'development'` runs the same compiled table for the verdict and *also*\nruns the interpreter, to recover the `reason`/`policy`/`rule` provenance the\ntable erases at compile time and to assert the two agree. That costs roughly\n2.4x production on the same machine. That is the intent: development is where a\ntable/interpreter disagreement should surface, and production is where the\nsecond evaluator would be pure overhead.\n\nCASL is a narrower tool: one flat rule set, fully sync, no persistence\nlayer. `engine.can()` also runs a policy engine (4 combining algorithms\nacross N named policies), RBAC role inheritance, an adapter/cache/\ninvalidation layer, and lifecycle hooks - and it's `async`. That gap is\nthe cost of that surface, not inefficiency to chase down.\n\nIn practice it isn't the bottleneck: ~1.15M ops/sec is ~0.87µs per check\non one core - network, DB, and serialization around it cost more than\nthe check itself in any real request. Throughput doesn't degrade with\ncatalog size either; the compiled table is an O(1) index lookup\nregardless of how many roles or policies exist. What actually\nconstrains scale is catalog *shape* - role count, very wide\naction x resource grids, and deeply nested hierarchical resource types -\nnot raw request throughput. Past 32 roles the 32-bit grant mask can no\nlonger address them all, so the engine warns once and falls back to the\ninterpreter: still correct, no longer O(1).\n\nFor the smallest bundle, import only what you use via subpaths:\n\n```typescript\n// Engine-only (skip adapters, server middleware, client wrappers)\nimport { IamEngine, iamEvaluatePolicyFast } from '@gentleduck/iam/core'\n\n// Each adapter, server adapter, and client wrapper is a separate entry\nimport { IamMemoryAdapter } from '@gentleduck/iam/adapters/memory'\nimport { iamAdminRouter } from '@gentleduck/iam/server/express'\nimport { createIamAccessControl } from '@gentleduck/iam/client/react'\n\n// Validator (12 KB) - lazy-loaded by engine.admin.savePolicy on first\n// call, or imported directly for standalone validation tooling\nimport { validatePolicy } from '@gentleduck/iam/core/validate'\n\n// Fluent builder (9 KB) - config-time only, separate subpath\nimport { definePolicy, defineRole } from '@gentleduck/iam/core/builder'\n```\n\n`import * from '@gentleduck/iam'` pulls the everything-barrel (~41 KB\ngzipped). Real deployments using subpath imports + tree-shaking come in\nat 15-25 KB.\n\n## Features\n\n- **RBAC + ABAC** combined in one engine\n- **Policy engine** with 4 intra-policy algorithms (deny-overrides, allow-overrides, first-match, highest-priority) and 3 cross-policy combine modes (and / allow-overrides / first-applicable)\n- **19 condition operators** (eq, neq, gt, lt, in, contains, starts_with, matches, exists, subset_of, before, after, and more)\n- **Scoped roles** for multi-tenant systems\n- **Dev/prod mode**: `check()` returns an `IDecision` in development and a bare boolean in production; `can()` returns a boolean in both\n- **Explain API**: full evaluation trace showing exactly why a permission was granted or denied\n- **Lifecycle hooks**: `beforeEvaluate`, `afterEvaluate`, `onDeny`, `onError`, `onPolicyError`, `onMetrics`\n- **Type-safe config**: actions, resources, roles, and scopes are validated at compile time\n\n### SRE primitives\n\n- **`engine.preload()`** - warm cache at boot; `{ validator: true }` also validates every stored row\n- **`engine.healthCheck()`** - `/healthz`-ready probe with adapter latency + cache hit rate\n- **`engine.stats.get()` / `engine.stats.reset()`** - cache hit / miss counters per cache\n- **`engine.cache.invalidate()` / `invalidatePolicies()` / `invalidateRoles(id?)` / `invalidateSubject(id)`** - targeted cache flushes\n- **`engine.admin.export()` / `import(snapshot, { mode })`** - schema-versioned policy + role snapshots for env promotion\n- **`engine.dispose()`** - release the cross-instance invalidator subscription on shutdown\n- **`IConfig.adapterTimeoutMs`** - `AbortController`-driven timeout on every adapter call, decision path and `engine.admin` alike (default 5 s)\n- **`IConfig.hookTimeoutMs`** - bound on a promise a hook returns (default 5 s; `0` waits indefinitely)\n- **`IConfig.maxPolicies` / `maxRoles`** - load-time caps that fail closed\n- **`IConfig.allowFailOpen`** - explicit opt-in required whenever `defaultEffect` is `'allow'`, in every mode\n- **`IConfig.invalidator`** - cross-instance cache-invalidation broadcaster\n- **`createIamRedisInvalidator`** at `@gentleduck/iam/invalidators/redis` - pub/sub helper with self-echo filter\n- **`iamCreateMetricsAggregator`** at `@gentleduck/iam/observability/metrics` - p50 / p95 / p99 over `onMetrics` events\n- **HttpAdapter retry + per-request timeout + circuit breaker** (retries, backoff, threshold, cooldown)\n- **Required `authorize` callback** on every admin router (Express, Hono, Next, Nest)\n\n## Integrations\n\n### Server middleware\n\n```typescript\n// Express\nimport { iamGuard, iamAdminRouter } from '@gentleduck/iam/server/express'\napp.delete('/posts/:id', iamGuard(engine, 'delete', 'post'), handler)\napp.use('/admin', iamAdminRouter(engine, { authorize: (req) => isAdmin(req) })(() => express.Router()))\n\n// Hono\nimport { iamGuard, iamBindAdminRouter } from '@gentleduck/iam/server/hono'\napp.delete('/posts/:id', iamGuard(engine, 'delete', 'post'), handler)\niamBindAdminRouter(adminApp, engine, { authorize: (c) => isAdmin(c) })\n\n// NestJS\nimport { iamNestAccessGuard, IamAuthorize, createIamAdminOperations } from '@gentleduck/iam/server/nest'\n@IamAuthorize({ action: 'delete', resource: 'post' })\n\n// Next.js\nimport { withIamAccess, createIamAdminHandlers } from '@gentleduck/iam/server/next'\nexport const DELETE = withIamAccess(engine, 'delete', 'post', handler, {\n  getUserId: async () => (await auth()).userId, // required - headers are spoofable\n})\n```\n\n### Client libraries\n\n```typescript\n// React\nimport { createIamAccessControl } from '@gentleduck/iam/client/react'\nconst { AccessProvider, useAccess, Can, Cannot } = createIamAccessControl(React)\n\n// Vue\nimport { createIamVueAccess } from '@gentleduck/iam/client/vue'\nconst { useAccess, Can, Cannot } = createIamVueAccess(vue)\n\n// Vanilla JS\nimport { IamAccessClient } from '@gentleduck/iam/client/vanilla'\nconst client = await IamAccessClient.fromServer('/api/permissions')\nclient.can('read', 'post') // boolean\n```\n\n### Database adapters\n\n```typescript\nimport { IamMemoryAdapter } from '@gentleduck/iam/adapters/memory'\nimport { IamFileAdapter } from '@gentleduck/iam/adapters/file'\nimport { IamPrismaAdapter } from '@gentleduck/iam/adapters/prisma'\nimport { IamDrizzleAdapter } from '@gentleduck/iam/adapters/drizzle'\nimport { IamRedisAdapter } from '@gentleduck/iam/adapters/redis'\nimport { IamHttpAdapter } from '@gentleduck/iam/adapters/http'\n```\n\n### Transactions\n\nWrites and reads can run on a transaction you own. `withTransaction(tx)` returns a view of\nthe engine bound to your transaction handle; the handle is opaque to duck-iam and is handed\nstraight back to your adapter.\n\n```typescript\nlet pending\nawait db.transaction(async (tx) => {\n  const perms = engine.withTransaction(tx)\n  await perms.admin.assignRole(userId, 'admin', orgId)\n  await tx.insert(members).values({ userId, orgId })\n  pending = perms.pending\n})\nawait pending.flush()   // invalidate and broadcast only after the commit\n```\n\nWrites go through `.admin`, the same interface as `engine.admin`, so there is one write\nsurface rather than two.\n\nReads on the bound view run against transaction-local caches, so they see the transaction's\nown uncommitted grants; the shared engine keeps answering from its warm caches, which the\ntransaction never pollutes. An empty local cache always misses through to the bound adapter,\nwhich is what makes a read-after-write inside the transaction correct.\n\n**Cache invalidations do not fire inside a transaction** - including the `config.invalidator`\nfleet broadcast. They buffer in `pending`, de-duplicated, and fire on `flush()`. A\nrolled-back grant therefore never evicts another node's cache for a write that did not\nhappen. `pending.discard()` drops the buffer for an explicit rollback path.\n\n`withTransaction` needs an adapter that implements `withClient`. The drizzle and prisma\nadapters do; memory, file, redis and http do not - they have no transaction to join - and\n`withTransaction` throws rather than silently leaving writes outside yours.\n\n### Batch writes\n\n`assignRoles`, `revokeRoles` and `moveRoleScopes` take a list and report per-row outcomes.\n(`invalidateSubjects` also takes a list, but it is a cache drop rather than a write and\nreturns `void`.)\n\n```typescript\nconst result = await engine.admin.assignRoles([\n  { subjectId: 'u1', roleId: 'admin' },\n  { subjectId: 'u2', roleId: 'editor', scope: 'org-1' },\n])\nresult.applied   // 2\nresult.outcomes  // one entry per input row, in input order\n```\n\nEvery row is validated before any is written, so a malformed row aborts the batch instead\nof half-applying it. Each affected subject is invalidated once, however many rows named it.\nThe drizzle adapter collapses the writes into one `INSERT` and one `DELETE` - the `DELETE`\nneeds `or` in the adapter's `ops`, and revokes row by row without it. Adapters with no\nset-based form loop, so every adapter supports every batch form.\n\nEach outcome carries the row it answers, so nothing has to parse an id back into a triple,\nand two structurally identical rows stay separate entries:\n\n```typescript\nconst result = await engine.admin.assignRoles(rows)\nresult.outcomes.map((o) => o.row) // the rows you passed in, same objects, same order\n```\n\nBoth role writes are idempotent, so every row is `ok`: granting a role a subject already\nholds is success, not a miss, exactly as the single-row `assignRole` treats it. `changed`\ncarries the finer answer:\n\n```typescript\nconst again = await engine.admin.assignRoles([{ subjectId: 'u1', roleId: 'admin' }])\nagain.applied // 1 - the grant is in place\n\n// `ok` is always `true`: a malformed row aborts the whole batch before any write, so\n// there is no failed-row arm to narrow on. Read `value` directly.\nconst [outcome] = again.outcomes\noutcome?.value.changed // false - this call is not what put it there\n```\n\n| `changed` | Meaning |\n|---|---|\n| `true` | this row accounts for a write the statement made |\n| `false` | the row was already in the requested state, or an earlier row of the batch already accounts for that write |\n| absent | the adapter could not say, and did not guess |\n\nIt is absent on MySQL, which has no `RETURNING`, and on every adapter that loops the\nsingle-row methods, which return `void`. Neither pays for an extra read to find out.\n\nEvery write is credited to exactly one row - the first that accounts for it. Listing the\nsame triple twice reports `true` then `false` rather than both rows claiming a write the\ndatabase made once, and revoking `{u1, admin}` alongside `{u1, admin, scope: 'org-1'}` credits\nthe wildcard row, which already covers the narrower one. Neither is rejected; both are\nanswered honestly.\n\n### Operability\n\n```typescript\nimport { createIamRedisInvalidator } from '@gentleduck/iam/invalidators/redis'\nimport { iamCreateMetricsAggregator } from '@gentleduck/iam/observability/metrics'\n\nconst metrics = iamCreateMetricsAggregator()\nconst engine = new IamEngine({\n  adapter,\n  invalidator: createIamRedisInvalidator({ client: redis }),\n  hooks: { onMetrics: metrics.record },\n})\n\nawait engine.preload()\napp.get('/healthz', async (_, res) => res.json(await engine.healthCheck()))\napp.get('/metrics', (_, res) => res.json(metrics.snapshot()))\n```\n\nThe invalidator's `client` needs two Redis connections, not one - a subscribed\nconnection cannot issue other commands - and takes a `secret` for HMAC-SHA256\nenvelope signing, which should be set in production.\n\nSee the [production deployment guide](https://gentleduck.org/duck-iam/duck-iam/guides/production) for cache TTL trade-offs, multi-node invalidation patterns, fail-closed defaults, and SLO targets.\n\n## Module sizes (gzipped)\n\nMeasured at 5.6.0, same run as the performance figures above.\n\n| Module | Size |\n|--------|------|\n| Core engine (typical import) | ~15 KB |\n| `core/validate` (admin only, lazy-loaded) | 12 KB |\n| `core/builder` (config-time only) | 9 KB |\n| `core/explain` (dev-mode trace) | separate chunk |\n| Each adapter | 1.7 - 6 KB |\n| Each server middleware | 2.4 - 3.7 KB |\n| Each client library | 1.2 - 2.0 KB |\n\nThe \"full\" bundle headline in benchmarks (~41 KB) is the worst-case\n\"import everything\" number - what `import * from '@gentleduck/iam'`\nwould pull. Realistic deployments end up at 15-25 KB because adapters,\nserver middleware, and clients live behind subpath imports and the\nvalidator is lazy-loaded only when admin write paths run. See the\n[benchmarks page](https://gentleduck.org/duck-iam/duck-iam/benchmarks)\nfor per-profile measurements.\n\n## Docs\n\n- **Reference (start here): [`docs/reference/`](./docs/reference/README.md)** - eleven pages\n  covering the package subsystem by subsystem, written against the source. The engine and its\n  config, the operator table, roles and scope, validation, the builder and traces, every\n  adapter, the four server integrations, the clients, the devtools, and operations.\n- Site: [gentleduck.org/duck-iam](https://gentleduck.org/duck-iam)\n- Compiled engine internals (wildcard buckets, role bitmasks, the compiled table, with diagrams): [`docs/compiled-engine-explained.md`](./docs/compiled-engine-explained.md)\n- Engine rewrite design history + known limits: [`docs/engine-rewrite.md`](./docs/engine-rewrite.md)\n- Devtools: import `@gentleduck/iam/dt` to inspect policy evaluation inside your app\n- Sibling repos: [`@gentleduck/auth`](https://www.npmjs.com/package/@gentleduck/auth), [`@gentleduck/ui`](https://github.com/gentleeduck/duck-ui), [`@gentleduck/upload`](https://github.com/gentleeduck/duck-upload), [`@gentleduck/md`](https://github.com/gentleeduck/duck-md)\n\n## Contributing\n\nPR checklist + style notes in the repo's [`CONTRIBUTING.md`](https://github.com/gentleeduck/duck-iam/blob/main/CONTRIBUTING.md).\nSecurity disclosures: [`SECURITY.md`](./SECURITY.md).\n\n## License\n\nMIT. See [`LICENSE`](./LICENSE).\n","readmeFilename":"README.md"}