{"_id":"@12-apps/entitlements","_rev":"50-de6304a650a25714224f4c7bab5e10d2","name":"@12-apps/entitlements","dist-tags":{"latest":"3.10.1"},"versions":{"1.0.0":{"name":"@12-apps/entitlements","version":"1.0.0","license":"MIT","_id":"@12-apps/entitlements@1.0.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"026028864961847a5d6f15f4801580b04eee361e","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.0.0.tgz","fileCount":24,"integrity":"sha512-3bCjMxJIoVHYWsaGD1594tadZWstnNGGbcS79qSbI28rjoaRurasK2DMSfAP1t53veOTVlE0+XDwWXinVD+Tcg==","signatures":[{"sig":"MEQCIB5ekiJU5o36JrfkDomREC0ALMvy0Lg/mGy5+A0AjT6WAiBQpyEcFDYBRpk0v8tVJqMoN5/70mnPZxZ6t4R1FH+fqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124950},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"e1d0b7c4524e3a0cee4c80ebbf0bb7c11ee536f2","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"tigredonorte","email":"tigredonorte3@gmail.com"},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.1.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.1.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.0.0_1785896226037_0.08764545743578211","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@12-apps/entitlements","version":"1.2.0","license":"MIT","_id":"@12-apps/entitlements@1.2.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"3905fe19cd9a103cf1bc7bc756e38528399f6e62","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.2.0.tgz","fileCount":24,"integrity":"sha512-abqg85O9yehPJmSlOjzO/2NihT8IgYOHoKuYzFysEMJQaRPHzWSwT6Um19jOGmfjm83HTziklXvHLMt56ADoeQ==","signatures":[{"sig":"MEUCIQDRVKto9/ZBe8yeyKGmlaWZ6xCrrYIXxfa/tQ2LDAW8GAIgZ0gBOmCVTAak8+2KhDQCpn1CqVfVJN73ZCqyiZZXcCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":124950},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"d05da896cc8a43f54fec717c51429eefed6682d3","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.3.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.3.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.2.0_1785946146691_0.03529502026345055","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@12-apps/entitlements","version":"1.2.1","license":"MIT","_id":"@12-apps/entitlements@1.2.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"16a256088ad8bad5dd2d2b490497e5321ffbf874","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.2.1.tgz","fileCount":24,"integrity":"sha512-iIOIYye08ibl36YzioXqjb0qAUnsPyI/AD/33tCG8PkaEDRFi7+dWkWrcDGpvPygeCNYVhLQbWNuO9MEc/q2pQ==","signatures":[{"sig":"MEYCIQC66wErSZhREP6qxT6qxlTDp4iLRQU1ebUn/seIDW2gKwIhAKK2ND9DXC2gAzAuwoc2LO9cEgraBEwJky8Z30UfuAmu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":124950},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"6a59470cbaaf679bd15ec21462bb500a5843db54","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.3.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.3.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.2.1_1785949543923_0.18022885191118831","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@12-apps/entitlements","version":"1.3.0","license":"MIT","_id":"@12-apps/entitlements@1.3.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"45838640e9643b8865fdb34f148ae89ce0dcfe47","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.3.0.tgz","fileCount":24,"integrity":"sha512-Mh3FOF+s1VsC5l8xIlenoR6jgOMqNDpgJBq5vnvZsaiP3JRBK9wvM1ZAZOXKHXI21i0eJgPaSSZQYTLotZdZsA==","signatures":[{"sig":"MEQCIAmn/NSxeGJlJw4ic3nBdoUPvw1qXqooChLUXon2YueJAiBLTDdjDhXDOXvFcyb15v+KVjOXOva3xj79c+zun0RZJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":124950},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"f52a264eaaba821a536b1f2a3fcfae9a6cc4f7c7","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.4.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.4.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.3.0_1785954775387_0.627703242210651","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@12-apps/entitlements","version":"1.3.1","license":"MIT","_id":"@12-apps/entitlements@1.3.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"425f846111d719562a33f8c521e7861958b5b098","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.3.1.tgz","fileCount":24,"integrity":"sha512-v4mvLqTX6HoYwU73TtFI/nLvUBXuHzOGSVOaYI/Pe4Z65o3DePvHMycQDo3OcDTkQYveiuTEim3ej4YJQvTJqA==","signatures":[{"sig":"MEQCIE+juJz4yYrRuTWhAJP8s/2eCYNnKKQVv00j5fcmAqGkAiB5b5yB9/Y6AOhHlU3UEXKDSsZFp4qYBMJShDvoOcWOsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":124950},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"4067cf613069590fbad29cf687882ba0f49e1073","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.4.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.4.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.3.1_1785955854122_0.3991218128467524","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@12-apps/entitlements","version":"1.4.0","license":"MIT","_id":"@12-apps/entitlements@1.4.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"ee11ff7fa27f4b173fa3530622258da1332e8239","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.4.0.tgz","fileCount":24,"integrity":"sha512-k4Dfn9k8U6VuuncO6hvfAnuXfwroSrC8XElIHPCsvDYuZyp6cT8pZn6x2/B1ZLpt3rVqaMsJX5tD+97bUlQuVA==","signatures":[{"sig":"MEQCIEDNRyw35ZUVCA56J9/gFrTpg6vsDKw5JA+bQlMQjLV9AiBQJ4dZ0vsdffSX4Bxo4AM8l4MclDsxBBFsf7IGnDmXyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":124950},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"9ac31454f10150e8721e44c9a38b8bb1d545dfea","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.5.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.5.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.4.0_1785966152772_0.3946127324303501","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@12-apps/entitlements","version":"1.4.1","license":"MIT","_id":"@12-apps/entitlements@1.4.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"0d0de7ed7569c7c73ef8ae7731eafb01dfc715f0","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.4.1.tgz","fileCount":15,"integrity":"sha512-ft65OMeyygJXmZNADL7KHcSujUQc2gWv0JJVRzFSyLtjspZ0/VLytyqYVg+t8xFmShSi9KwnninmRDtnWNAz7w==","signatures":[{"sig":"MEQCIAsm4X8KTUgQm7XZpC+CTbEyC3ohwZK3xaRmxhpJ+btsAiA+Yon3DpmPgUvH0E1Ei6qVZkQe8A8CmwVt556wPvCNHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"81e7421d24f622d31b501c3562db19b0c6943936","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.5.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.5.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.4.1_1785978913198_0.35101763796558205","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@12-apps/entitlements","version":"1.4.2","license":"MIT","_id":"@12-apps/entitlements@1.4.2","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"8cf20eb065f68ce016029d31f379fba472464880","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.4.2.tgz","fileCount":15,"integrity":"sha512-4uwQRW9bj8HF2FDzIT+Bk1qNioyr5OwbQJclMZb6MHbr0b5Blv8twjE4Rf6TfjYycX9mQkb6adWbdG+raI99FQ==","signatures":[{"sig":"MEYCIQCqJH8IDaDCV9Pu5Zz8SwjutcGgrE9OA7wW608x18eejAIhAI9eH1rjjBaLMQzy8G0e2j2V6b5CHZjdeLRiENQ+WdOi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"5b3c6dcbe2388e8e91037c253168e74a6bb3a8bf","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.5.2","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.5.2","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.4.2_1785992420603_0.1521590383610587","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@12-apps/entitlements","version":"1.4.3","license":"MIT","_id":"@12-apps/entitlements@1.4.3","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"ea1535eb7bfefa856e7659c7f0bf3180fb26757e","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.4.3.tgz","fileCount":15,"integrity":"sha512-y/AjX+rXuTY/ygeMbGXMlPYeIkiCTy/2n5OB58CJrLJlI0pAc4haPzub4ydHrkjSA7ymE2IUJhiB4aJLn6j43A==","signatures":[{"sig":"MEUCIHpll1V4LjoT1ooAyAlvF9+jD/zGVDP2fgeHJEFsPe54AiEAwNlczWeDT23mIwpYXwis2ytyPHgIFiHmNtY57y85TTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"f57c50c67e9ea99974be5dcae253e526be4090d9","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.5.3","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.5.3","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.4.3_1785993047817_0.49646874608144165","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@12-apps/entitlements","version":"1.5.0","license":"MIT","_id":"@12-apps/entitlements@1.5.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"e17562b3aa8022acfd42edf69ad1fbc57e8937dd","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.5.0.tgz","fileCount":15,"integrity":"sha512-UJSn4Bb4YWwLYlfduJpis7ECKGa3fEORMp5UxcqbGHjWZuhkjiWntW86VkopNY53OleBCX29TXC81C9wV4TSnA==","signatures":[{"sig":"MEQCIBL8Ekc+qd5GX8K/XcCFWP0ASaW0FIHKyqSNXsFXG4H6AiA7bF+40loGZLd0WRQdHj9cG8ejHNUoq5z3gYjUddL22g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"8e0cd152236f2f1e72297beceba8334893f28e2a","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.6.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.6.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.5.0_1786030869728_0.1529257013307741","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@12-apps/entitlements","version":"1.5.1","license":"MIT","_id":"@12-apps/entitlements@1.5.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"fcd083d1b205a24aee844c87f078c6a0b5cf2758","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.5.1.tgz","fileCount":15,"integrity":"sha512-d40G3wCq7lEd1xeAV7JRYnZnh4l9j1vVrxFE868bdCy0O2ETlOnrWidJDftZR9Dm6ctZ1fvxQ9HokB9/i2Q1dw==","signatures":[{"sig":"MEYCIQCAzmhaV2gW73mBYcAjXq7IsIB/3RoXQVoG2QqecyKVMgIhAMjrr511kcig+tRLLDFoxFVH5E8kg7Cpkor1CecyZn1g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"15f8407ccc08a7d53484c2d3d701a8b1eb28639d","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.6.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.6.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.5.1_1786059853597_0.7470542398708027","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@12-apps/entitlements","version":"1.5.2","license":"MIT","_id":"@12-apps/entitlements@1.5.2","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"51c96b5252718a17f5962df0702ed3b12847915c","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.5.2.tgz","fileCount":15,"integrity":"sha512-B876tRBggUn3HAxxSJ3LblvYLN2LaWo+3qQoys3HUJfZnWzVDJ0as/N3/AkHg5ybjj0xZfJQuQYoHKbG9V4XcA==","signatures":[{"sig":"MEYCIQClTDdaQxhyOMkvamUlSgRngfVgrOYh/zYd19WLPQYAMgIhAOrJp8N4tggDG630VJWF38HxymUwVb6+cEUoh4BR5iYs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"5b1ad4d8fc1948a6a2494d48f84552644bd57405","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.6.2","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.6.2","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.5.2_1786061364953_0.25955928783634685","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@12-apps/entitlements","version":"1.5.3","license":"MIT","_id":"@12-apps/entitlements@1.5.3","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"6bf6323b3e7bb12acf51f3d78fece729049284dd","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.5.3.tgz","fileCount":15,"integrity":"sha512-SfkMkCkvnB70gMiAIxxYnCuToALbtN1gLhsy3SLdfuV99yPR9bs/c2tqXov6DimZVZ9JaZI6vO4vqA5IiPhGIg==","signatures":[{"sig":"MEUCIQC8tH3xOPVpZZpsequB0w51pBQtmC/Uae0X9OSBRM5U1QIgCNeimml194YsjE6EfuiUJcYiA5GDFwf4Q69MUIxmhcg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"8ba6d6ad47840a83c06c146ef654227af5104a8e","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.6.3","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.6.3","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.5.3_1786066324924_0.6179344794920334","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@12-apps/entitlements","version":"1.6.0","license":"MIT","_id":"@12-apps/entitlements@1.6.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"1dd5e2d6cdf8b98aa8e48eb736e5c75e5adb4644","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.6.0.tgz","fileCount":15,"integrity":"sha512-d4GTE5h3TUeFuynSbBEiAhUdkAOcwqaOps3Ki5Llu2H4s8WfiOwoSY/foofZ0kb7PCQ3LlKDRikAnFcIKKhuNw==","signatures":[{"sig":"MEYCIQCd3TYHXo2gqeg0W2cEO/OjP3HExL4IlH/j9aGhPOy03gIhAMgfl7biWYiB9OLfWI5MV2v7gWLisIuiZ7PfFwwKBUmm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"1dbc1469b614c0f8b0f50e0116c4be4e99f39256","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.7.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.7.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.6.0_1786069495039_0.15929711666312607","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@12-apps/entitlements","version":"1.7.0","license":"MIT","_id":"@12-apps/entitlements@1.7.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"d1e0280b7064c6b450c78478371fa7e9dc7606f9","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.7.0.tgz","fileCount":15,"integrity":"sha512-X+TKVvYZmDJZO61/gHdgdg7qf/38aKP+QZGL/LO+Od0HA/Q9YW9Ppdz+H2iAy1pJcSlwZU8gBR1/7xV7BpVIRQ==","signatures":[{"sig":"MEUCIDgQi1D0I4uaIqYIuycyjCRkisnRls7vvNdXmU7eVTkSAiEAw2ozfKyGfPnGQl7btNWe3IbFTS5elEodWkcdTUSXA/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"6d34a3a466269e83fcce802ee81df261bfb14523","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.0.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.0.2","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.7.0_1786076471133_0.8041691797498323","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@12-apps/entitlements","version":"1.7.1","license":"MIT","_id":"@12-apps/entitlements@1.7.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"1bcc18cc7d8e8528ec9680f8800434434263aa40","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.7.1.tgz","fileCount":15,"integrity":"sha512-UrerL8x9yKPfPbU894R1dzur+3IEPG+n2P8AGO72CelF+Q7DPxMPCuw5O3ZS3FB4/8GCm100Ro1n8psNkJSB5Q==","signatures":[{"sig":"MEUCIQCkslTRr782DowBRXVGgVPIwG9Cc+K3K7fxeY5jM3VwtQIgf1Fg6Q8djlsGxPe1nAy/DXQRXSP8wygpfV8LLuVWLIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"2e9d99f013ab8d5373a4e32a01a9c0221bd12190","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.8.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.8.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.7.1_1786077072634_0.08719659437166083","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@12-apps/entitlements","version":"1.8.0","license":"MIT","_id":"@12-apps/entitlements@1.8.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"22fae0422ea2054298d1715e748ed81bcb9fbe0d","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.8.0.tgz","fileCount":15,"integrity":"sha512-SsBTwcYDNEREYEFzq5J8yn13yLsbs2CEtW5Iv3citePuBUwiR/vPwPy5ydRvMWw9k4YG+v0q0sitrtEV7Isgdg==","signatures":[{"sig":"MEUCIQDBGW12IZHjXu621v4lqz4xXXELF6vI/5twjlt6pM8NEgIgDray2wAds4lZFClX5SqsMBot5hj7TSNZF5Vmelk8DPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"7bfcec03feb4cfeb6db70c9dd7b69a936a1687bd","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.9.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.9.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.8.0_1786089688266_0.5086118816908121","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@12-apps/entitlements","version":"1.8.1","license":"MIT","_id":"@12-apps/entitlements@1.8.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"056f9f50e6140826cffd3750f4c05a40a9271a11","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.8.1.tgz","fileCount":15,"integrity":"sha512-6cbW6U4ZQ9U9kyNuydjpQfQVOnEmD0AsZWfFUAju8BFfeRx1MnB6OE009ypU2F4263AN7YtwdhlAl/9+3Pr+gg==","signatures":[{"sig":"MEUCIH11by44csECX6Diy1TcDW3KI4Uqo4+NqK7IoOZxhnKJAiEApcsp8goGBQeHxe0JUojnDrk3vScesBR00IKpGSe1EWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76579},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"e7605e656458d821164b2c47ee7fe9d7d4d790bd","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.9.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.9.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.8.1_1786093347326_0.47190950456036274","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@12-apps/entitlements","version":"1.9.0","license":"MIT","_id":"@12-apps/entitlements@1.9.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"9f7314dee3607835abd880733fbefd04d16bdf89","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.9.0.tgz","fileCount":15,"integrity":"sha512-1PdkM0ixjOh4pHLRbOoHcBoVzvFpdRMP+mFhDVbUGX6vZBljiENDPsaU/wUwFwIldcNgLzOo6xqGvl5nn0t/4A==","signatures":[{"sig":"MEUCIAtrRZwrLJvGTzFXTrKhkUfRYD5hI7SSNFopTH/mv/BjAiEA+z2yCEAslaBKwZySvSNoGbdZixT50hNLovDUsa37QYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76581},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"6bfe86e2215d81dffd8f616dad4aa181f027548b","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.10.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.10.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.9.0_1786100247183_0.6154727974544645","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@12-apps/entitlements","version":"1.10.0","license":"MIT","_id":"@12-apps/entitlements@1.10.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"4bf503abbae63e3d636b2a9a24c0f7e41652e80f","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.10.0.tgz","fileCount":15,"integrity":"sha512-GAXkRxVal7wCPVsuXXC1SRpTJpw4/g8zNhgmhS9N8ZJJpejDpI2rkP81DT7kRvCqQEqINcO/C+dxvk/kaJlXog==","signatures":[{"sig":"MEYCIQCoKDzuz7r5FvF+XqtCUrPr8PL0qWN0xW8LcsxTZl3L2AIhAMm7YaSOM/Fvo5UYsRStY5Y9kCPsS8lIVYQF2W9PfEI8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"ca77c6e24bbdd7ce427c8003f0de2444c95d88cf","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.11.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.11.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.10.0_1786103525924_0.2854023140016211","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@12-apps/entitlements","version":"1.10.1","license":"MIT","_id":"@12-apps/entitlements@1.10.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"988f3e43fd7ca3e009e89c021fd065e836414281","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.10.1.tgz","fileCount":15,"integrity":"sha512-Umk39ylPb7Yq0hUSbMkheMs6c94SwCpmgI4AFy6xyxJ2na4jP4VTa7gHOIvEk9S9NoITQXtWPx/C2vBSGvvJ6A==","signatures":[{"sig":"MEYCIQDZv4l/A0qHgWYGhhLd/Oz3UxecPe+Yy4qxhtUVU5dxkQIhAMyzmtsP+0qGlPDh3vEEd7oJtNv6UknBxcs36yX1LB1k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"b1c4a9ee167c219178d1933083ccaa44ba467ca2","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.11.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.11.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.10.1_1786108028510_0.4195662344301603","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@12-apps/entitlements","version":"1.11.0","license":"MIT","_id":"@12-apps/entitlements@1.11.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"c1403b465e48d8f4269540e150ac70afe227b934","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.11.0.tgz","fileCount":15,"integrity":"sha512-wYPsvmwIPfz26s6oh8OufZ2+NlnKEB4DfQhi5/8abb/HFpi9koheSk97QNxCKusX5mRftpeX+uLhQ94WwXxLjg==","signatures":[{"sig":"MEUCIFkw7EU14mCDUTnk9C0sFwhJ25dS9AZPrTzdOxla7t/AAiEA3xX24RkxsG0VmdkqrFA0bLLsnvUPfpvB4rFRLipyQIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"ec6d74e8ae3156dc9294ef46e3fd05dcdf8b6af4","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.12.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.12.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.11.0_1786117812310_0.9135701377298682","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@12-apps/entitlements","version":"1.11.1","license":"MIT","_id":"@12-apps/entitlements@1.11.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"3787de90baff43bbf5115c5f73ba1e7b037cbd48","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.11.1.tgz","fileCount":15,"integrity":"sha512-KWAaIbTPhGlXri+uLW3ad6l4ApVlCuThX9lxtwQ83d2R+dC21WE3f7N/83DvjkxlEHT3U0EK4DFEsuU2qd3mhQ==","signatures":[{"sig":"MEUCIFG5267yj0Mexyu4N8EdKWbMmEg4vmU0b1xdyPaGN0KeAiEA7EDvADOTpfBf/NPUEwRtYPt10p2XOf5pHwlbIT9a3Ho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"e9fa4d72f92e37490fec1f39348375e9e34bf2ee","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.12.2","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.12.2","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.11.1_1786127693152_0.6734650496856478","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@12-apps/entitlements","version":"1.12.0","license":"MIT","_id":"@12-apps/entitlements@1.12.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"fbcbca61b98391cd1d1589d0fb60d1bafd62cd88","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.12.0.tgz","fileCount":15,"integrity":"sha512-2RRh3yOxbzS2JLpGG7b5T73EH8gtstS9PHb7DuKuLaAgw+Up4Z3n6IFiaRonhyMLNAYcJUXRjXSqeZQbugAXOw==","signatures":[{"sig":"MEYCIQDVXpuPeMjllJdSPGGdlTD2/mq10WdeYsvbz5W6esaKzwIhAKcclKtzwMdrmMMJ/nE4QFC4ij//ewmJu/Y9Vnwxj3r8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"903862a6809118567baa5931596f484c3ff8ff37","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.13.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.13.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.12.0_1786128497321_0.42376038293253315","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@12-apps/entitlements","version":"1.13.0","license":"MIT","_id":"@12-apps/entitlements@1.13.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"bdb4c3d961594d24efb2d63f44c28a46225d9132","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.13.0.tgz","fileCount":15,"integrity":"sha512-yO3ZmyAzIxQYn9mTEpbHQQJJhkWNQ3K6n7Pu75nzk0cfRuaC3HYNdKWJ/l2b4F4HheBCIYapfHmzu5skvYxQ/w==","signatures":[{"sig":"MEUCIQDbzx/sXF0yPjBTsBiABX0orEUaXdQICb+tLVcpESfriAIgfA3CZD3W6COdYPQWdkv7F5r3VQevmZbPIuXFb7uxS34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"e04431a199d9e9beacb90ed14ef9dd7d779b426a","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.14.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.14.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.13.0_1786132138080_0.8287218175702167","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@12-apps/entitlements","version":"1.14.0","license":"MIT","_id":"@12-apps/entitlements@1.14.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"259f039ae56234249f33d1fbd9984554dae4e681","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.14.0.tgz","fileCount":15,"integrity":"sha512-LWO0QMLHODm/k75pKTx+l25PiqtZbMIAVvJn8ABfQ3o6n7iuF1X2QuvJwq2lAgFEMjxW08EpB4DTlhHQ0CjwTw==","signatures":[{"sig":"MEQCIF4GuJPn5D2RbtzkMObh6ZhDzt1wAW8tJbOvEOVRy1q7AiBtPRQC7+Por5lHegBGg46dbCEqUuiXZzA/wT/QfkoWgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"f9c9457f43bc8c265f81d27b8d3bb5f250fce11e","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.15.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.15.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.14.0_1786132970529_0.14797910684471027","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@12-apps/entitlements","version":"1.15.0","license":"MIT","_id":"@12-apps/entitlements@1.15.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"067df4ac9cf5b8f67b334bd056ca984065d5621f","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.15.0.tgz","fileCount":15,"integrity":"sha512-nZ+zyXfpmVG5inxhrVPKHmIMkVZNJliS61QDhh8hIQZt1IZi/qwZdutYaUnPYRsbv+TYZTg/oUqnOHwtX63eEQ==","signatures":[{"sig":"MEUCIBCWtzxVZHLcHFKnDkDTXPlVbZaCQ8zmkok8XQejzUasAiEAyeD1ZuUJiLmp3J2eckIBBP1axhroKVJS5mkcdeaeR88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"ebccb7d5693b1f1340342b72139daef11fc81223","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.16.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.16.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.15.0_1786133671495_0.5757424704960559","host":"s3://npm-registry-packages-npm-production"}},"1.15.2":{"name":"@12-apps/entitlements","version":"1.15.2","license":"MIT","_id":"@12-apps/entitlements@1.15.2","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"a84b4868d02e0822800e582d70a1b117723dfee5","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.15.2.tgz","fileCount":15,"integrity":"sha512-iaM9PUdJLbL/i8kNjkLI1kcWb9oKGnYmLs7WBEfnqgsCWQidYwZ+eFZnXbhYrTHPUskJBTpQY4WutMuLpY0jGw==","signatures":[{"sig":"MEQCIH99nK3eJkkyGRSjOuXrCrkwPnk2HWU0UknRh3FyaxqmAiBdQ0Uq73IXrZX6lt5zWrdZ/pCQumGgfLLQvie8rutnyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.15.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"bfd39495ffa882cae31b10538877b522984cbebc","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.16.2","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.16.2","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.15.2_1786138749359_0.9225420302071796","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@12-apps/entitlements","version":"1.16.0","license":"MIT","_id":"@12-apps/entitlements@1.16.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"75661c6e19030ae67ed76b00b219bf9248505626","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.16.0.tgz","fileCount":15,"integrity":"sha512-zQp+cfJewlPhIQqyMvEQHYQWGE6BVpCHq1+btQSZd+5M+VHpKiasSSqVpm44z2oU0XI4yidXgPi1a2A46F5JSg==","signatures":[{"sig":"MEQCIBSL2yptIGAT5yZca7SK81GGD1Z2mUa+7mmDqwln4XJfAiBHwmjWlTvt1z0WjF+J9H980q2G7G2/b0jRELzKQ6YTmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"2d4a0e9dbf04f79e2306b779f56f0dd5d079e09a","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.17.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.17.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.16.0_1786145518600_0.991596038206251","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"@12-apps/entitlements","version":"1.16.1","license":"MIT","_id":"@12-apps/entitlements@1.16.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"10920099c639c289defe3ad84b59dd516f1ecd62","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.16.1.tgz","fileCount":15,"integrity":"sha512-VIjjI2QGRgBkmci79xhJdyygOJHrUsGCXZK7to9cAWGqs3Jr6wOTJXXtTzQ1wV8iBEJ0C4wTnE9GSd3aCbWW0A==","signatures":[{"sig":"MEUCIQDlC9DP+Cq67RLhmI1qSO2nsO0lk6c8R2SjycBKPNG2+wIgF8QT4iX8/MNeMWTP6aJiKbhdzTH2dfsNetjHAP3N1Ps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"f0356169f9682182eabba77485cf4772051235ae","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.17.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.17.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.16.1_1786146665723_0.5923237251196625","host":"s3://npm-registry-packages-npm-production"}},"1.16.2":{"name":"@12-apps/entitlements","version":"1.16.2","license":"MIT","_id":"@12-apps/entitlements@1.16.2","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"105a249fd7e5df28e4b58ee8c99282c9d7a62c69","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.16.2.tgz","fileCount":15,"integrity":"sha512-mHCzAR3JsVK5WYFdLYeJKZaUoBdk4ffo0dQRNJaT5uDTl3Wj+f/OrQPK2lqTN9K6Yf7UeWiZjx9ZWyqi4bY9Lg==","signatures":[{"sig":"MEUCIDP/lGJojrJ0GVOCD35bR1HSlGCL0d5hqJQfwAjTk1XEAiEAivZAi0+4ImRdqGQNIStYCjYEjlgIWnPUDj5gxOjuXGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.16.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"4b2466cbe6cded4941ec25ef92cf41d7fab0697e","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.17.2","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.17.2","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.16.2_1786159910592_0.4997233248278419","host":"s3://npm-registry-packages-npm-production"}},"1.16.3":{"name":"@12-apps/entitlements","version":"1.16.3","license":"MIT","_id":"@12-apps/entitlements@1.16.3","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"6561bf3f748efff9d1e6715c98750b8651cde3a6","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.16.3.tgz","fileCount":15,"integrity":"sha512-qW+FTH9qZkfJcir/5bdzEnBawPGC7cdDCsMhsbzaCOIhftRJaBdi6nJDKRDcQ8T7ZCPoHGvfZKT6XU+duwqj/w==","signatures":[{"sig":"MEYCIQCFnuxK2cKcLQQKB/CEanVMIGbu+CeX6rOb57mV4VaI8QIhAPF0qbR9t1Roe+YhD9/JLhTDmws5hf/d0quyX4Y1laYW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.16.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"ee3399530780d82beea32410802a945627ffe271","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.17.3","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.17.3","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.16.3_1786197887415_0.16465844985213995","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"@12-apps/entitlements","version":"1.17.0","license":"MIT","_id":"@12-apps/entitlements@1.17.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"70a577a9936b631b30b1a3031f6655217eecc285","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.17.0.tgz","fileCount":15,"integrity":"sha512-t6RGOmmNvON3LZO5cT9KyURGG056fumPCO4nbwIjztB4UCU6DTUndxceVZqUSFFT4kR1kSi4gOptjnMWwwnSBw==","signatures":[{"sig":"MEUCIFP+BrbPbapzNxg9/YqMna2HthbP5qYj4IkQ5mqWmThCAiEAv3Ejwn8gOjyNMzE8Ri0LPTCmStTm59iBo1mKe+kRvhk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"8af3c18e1811d042f30016a4ba43e74abc4b8c50","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.18.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.18.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.17.0_1786203863470_0.22058063910227332","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"@12-apps/entitlements","version":"1.18.0","license":"MIT","_id":"@12-apps/entitlements@1.18.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"0b360b01d69b5e7444056acbc8044f3db2a57941","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.18.0.tgz","fileCount":15,"integrity":"sha512-kBxExjwJUM3ya2Yf9CfBxldhRO0JTD96e9IjDPiwRUkzegTW792lCUWqzyEhfxJrPJksNatB5qDaP2Rm45/bcA==","signatures":[{"sig":"MEUCIQDtoGFchYv/Ono5+evaxKzcu53u2bCp/Z93wyjzen71/gIgIHrFaBRzi4xP4pA+3urwj7KGNawZ8oywJw5nsFEFTqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"3a8eb1783f8cccce3b7ec49cb10e3e6d2c5d7310","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.19.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.19.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.18.0_1786206063715_0.05461380723066256","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"@12-apps/entitlements","version":"1.19.0","license":"MIT","_id":"@12-apps/entitlements@1.19.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"fc4994498729d24c1c2890e08aad87d4f456367e","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.19.0.tgz","fileCount":15,"integrity":"sha512-us7JE65yqjNf+FhIf2C5t55r2UjFgta8h79q3ZtTcUIcwIerLTywLYe6cYGrP79q6eR1mAvA5VhTqIrzmqoWYw==","signatures":[{"sig":"MEUCIBT9wwH2/Gg/UjSrDuvFVYu6besmzP9XDtr8msuVhkeTAiEAr94Lj+iaa3HOe0WmsPWp7Q1NAcbcffFQ3NQyuhAc++g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76582},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./react":"./src/react/index.ts"},"gitHead":"21bbb5b06424cf045eaad617a5912aa00d0c654b","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements library: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core with storage adapters plus an optional React binding. Knows n","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.20.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.19.0_1786209411546_0.20278279379093989","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"@12-apps/entitlements","version":"1.20.0","license":"MIT","_id":"@12-apps/entitlements@1.20.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"b2ef5289d0c6cfed2f608bb6ebc4146dbcf504ad","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.20.0.tgz","fileCount":43,"integrity":"sha512-ArY8xMRr/gMfUzQdM0R5XNg3mjCsr4WLGXqBlCwBTZHYXyLi+A/AkVGEWPbQi6Wa5hV6L/PC4Hlg3jd5UTGCjA==","signatures":[{"sig":"MEYCIQCE4EjQ06wf0R1MDz6p0ORoFeS0bCF/vyZ32WjithKVOgIhAP3RCxt4DUIvWjG1S5aJj0kJURl3/VrGz05tFGL7V9eS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":230029},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./package.json":"./package.json"},"gitHead":"d3895ffa244f030759c5f797ff77a14e1f91a656","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@12-apps/ui":"^4.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.20.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.20.0_1786561121045_0.42007278948733995","host":"s3://npm-registry-packages-npm-production"}},"1.20.1":{"name":"@12-apps/entitlements","version":"1.20.1","license":"MIT","_id":"@12-apps/entitlements@1.20.1","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"96407747c1105acbe8b142a95821481460ca0805","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-1.20.1.tgz","fileCount":43,"integrity":"sha512-sBqfnYob0ZTn44Ybv1b1FWXDkQMVfbEmyRoiPTwu1+IccGItQmv7UoguSCcMMkuOlJACk/fqeca6eWWMIYPUjQ==","signatures":[{"sig":"MEQCIEocm0ZzxvTI41YJoAyjb531GA1xCNxteeG38ZY+BdZkAiAcwQ0VdbDpvrAyLBEIZvc5wTKBCPWKuxZqGC9dYJZJXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@1.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":230664},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./package.json":"./package.json"},"gitHead":"1af8c80853b7701a050fc7b34994ee9b9a123a00","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@12-apps/ui":"^4.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.20.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_1.20.1_1786562996315_0.765715026483053","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@12-apps/entitlements","version":"2.0.0","license":"MIT","_id":"@12-apps/entitlements@2.0.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"f5214c41b96aa1b65731b1e7b94ce43ddc39b4d3","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-2.0.0.tgz","fileCount":45,"integrity":"sha512-zrNl8pbw8KOCk3DxEMX2wqFDM+ZfLmCfjkPn/jYFPnkTeEOdk+lFxRF1vuTnJeTet6PlL9PkUTzS+5ihzyJ2Aw==","signatures":[{"sig":"MEUCIFyKySPaxH1tTOv1LzanY4bLbsiQGKcjwt3EC0PHo2gzAiEAixSiu8eYkRNQBo9VGbrxqI7UrjPkk4cHby6xDK1C/Ek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":272249},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./package.json":"./package.json"},"gitHead":"99de41e172eeb394fe0fb9b7bce6ef296beb397d","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^4.0.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.20.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_2.0.0_1786707258570_0.3900320010663232","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@12-apps/entitlements","version":"3.0.0","license":"MIT","_id":"@12-apps/entitlements@3.0.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"6b482ee67d9eb3b11ceee1204a2d90c1fb48a192","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.0.0.tgz","fileCount":45,"integrity":"sha512-Q3jcHW0chgdPACNHJoPZH7c4MxBkg76lVbec/VGGpIvxtJg5b6UIw692AqW48rxHnuwh6eTDQNGkbzfdmUGVVQ==","signatures":[{"sig":"MEQCIGJiSr0hiDcG7XAokKO3O30pPBh6kixijC/ibSIkUDebAiAlPq1NvYgCawQ1ahf0mo5xYbTABiA7FIWZLIYt7poGyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":272249},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./package.json":"./package.json"},"gitHead":"f837d4958a5b21e02d2f02a1c008ff1d1a23937a","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.20.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.0.0_1786800357191_0.5566270358850813","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@12-apps/entitlements","version":"3.1.0","license":"MIT","_id":"@12-apps/entitlements@3.1.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"cc816a6f9748f1f5c9ae96e43252a6d0806b5963","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.1.0.tgz","fileCount":45,"integrity":"sha512-yexZ+NfMMC6OmeGhIxm6GeTtD5OkMQigbI6e5Pc/bDkg7zuxnnpxpVA42dHjuqRT76oQfVNPfRWeFFVLmZ8SvQ==","signatures":[{"sig":"MEUCIQDZjjBtWq/VxaT8eYcubqlZtkO2gQ9D2JLzeXW5sFe8XgIgFcAbZ62THhXLOj+Pz6lWk15eNKjM1I3YSVeCwE+Kw88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":272249},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./package.json":"./package.json"},"gitHead":"96eb4c415df62ceb17308a914c912abed5c35f64","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.20.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.1.0_1786805453994_0.4327994658608656","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@12-apps/entitlements","version":"3.2.0","license":"MIT","_id":"@12-apps/entitlements@3.2.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"1e7594b89053efb2cff279bc8cc69688bf7f6b90","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.2.0.tgz","fileCount":49,"integrity":"sha512-TDBtIBHm3ustFgbl8FE9xcjd0TPakme6nkhgYrTOCidCTyLjEi5nVRwheWnpzQr/EDU1uuwkSK4BnQsB7rCNXA==","signatures":[{"sig":"MEYCIQDJ1zH3sYdsZQQMpQvxW/hb0hY+Y4zH6Hi7RoufgfHydQIhAJic+OkQrL6XNZ4DvsgO72y044AzmQQM+D7Q1VN7sEiF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":296526},"type":"module","engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./package.json":"./package.json"},"gitHead":"3c4711049bf8351685612372531c3cae1370bbbb","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:07855238-36ed-4309-b4f7-229e307bd2ea"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.2.0_1787327326020_0.9144702413271979","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@12-apps/entitlements","version":"3.3.0","license":"MIT","_id":"@12-apps/entitlements@3.3.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"5ead18b275920d9e0646ec6b6e10efcbcf7f33a4","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.3.0.tgz","fileCount":51,"integrity":"sha512-I+A5woDIwh/VVU2e5BDwMNtEOosoFNdAZHZn0JPhyhOqh3CBoga6s0veEobZmi4qnHzG1wzH1uuV9ISHvKfWXg==","signatures":[{"sig":"MEYCIQDkG58PXJn1ZPH4XjkhY7hdskvsGY/wETDvKS2WbsJxswIhAKjVD5BJuUoT2Rm19TvGZEAkoFtTT3vlv4dD/ikKjR8+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":299492},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"75f7035ac04cd2d62b424aa8119ce8ed91f0aa19","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/wiring":"^1.10.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.3.0_1787412003842_0.23962381526663634","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@12-apps/entitlements","version":"3.4.0","license":"MIT","_id":"@12-apps/entitlements@3.4.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"b42cbc2e1f89c7899e46c32e2ef82f5e5022b3a3","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.4.0.tgz","fileCount":55,"integrity":"sha512-5zyAmPPyDXON3cZAwVMszezaAgV19Tx7r8iAr4bS1FsCzVPCFzpC2pGNHzAokH8/ns2nGwwBG+dHfMa9b0AhSg==","signatures":[{"sig":"MEQCIHWH9nB1azt288wSLQQNrgQjTlizOgX0plwTQIspvCHqAiBVgWFnGwZYahz5nNhziNoFpcm14VcPTHOj0G9xyWnoaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":310542},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"9aa6a7b4c316ceed44033000e57b1b02c316537b","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.0.0","@12-apps/wiring":"^1.10.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.4.0_1787547311936_0.9586669336790414","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@12-apps/entitlements","version":"3.5.0","license":"MIT","_id":"@12-apps/entitlements@3.5.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"370dcc6812f07323333fd322a61406108a397da2","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.5.0.tgz","fileCount":55,"integrity":"sha512-yseBHOEpFSnJR/YellvwPUJEbhd6tTkZ9thkMiq/EVVCDLIGYwSqaUPOb0TZY+uG9/rSp+9HCYzx7fHkTvlNjQ==","signatures":[{"sig":"MEUCIQCSZnbA1CKRGFKlKQUlbljSPh2gPFKp+Y2jRZ05zeNh0wIgAPkIgbdG1uJt7uf3lTaogPzLXGbMR0GiqYAMH2bc+uA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":315235},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"03c5e167469ab2118b1d18148cf456f8653a0345","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.1.0","@12-apps/wiring":"^1.12.1","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.5.0_1787595035536_0.7989636363744197","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@12-apps/entitlements","version":"3.6.0","license":"MIT","_id":"@12-apps/entitlements@3.6.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"72079f3d4e410a014b1752b4382b1b032c5acbb5","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.6.0.tgz","fileCount":57,"integrity":"sha512-nXCt+PpcAbEQPGkAm0UINuw+9bGo6MQxZwsEFL+P+HnLSbt8uHGzxSmMy8g9dOYuq3fTOh07gSVONyz2Ubnsuw==","signatures":[{"sig":"MEYCIQDvF+382mjsmXlaIAd0Fly3C2vxrtFQssKdnrVQRQ7i2AIhAN49amDTiRlg1VhtBe5qjNaCOWvrTjQQ5oHNrDyDO/ld","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":325419},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./manifest/web":"./src/manifest/web.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"142fe64617cadbd2f852a257eafd0aaf95b73fbc","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.1.0","@12-apps/wiring":"^1.13.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true},"@12-apps/wiring":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.6.0_1787597482956_0.8210955335546797","host":"s3://npm-registry-packages-npm-production"}},"3.7.0":{"name":"@12-apps/entitlements","version":"3.7.0","license":"MIT","_id":"@12-apps/entitlements@3.7.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"0012d336ccfbab1763a3ef046a087b650b15a771","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.7.0.tgz","fileCount":61,"integrity":"sha512-bEPQaPIsFTXWeGs1/c+/okrleXVtqI9MaCXOnPIEZYrO50JpGO4UML5StWB9U8dXRaGM6v05X7T4kYIgawmAow==","signatures":[{"sig":"MEYCIQCuE4BOidsimpI24yILHzZarVa1H1nCCrrDumkggkC4FgIhAKQ/oqoFLpFTO6DelOQkX1ioxSN2WmYmTaYmqsNu35hc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":357929},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./manifest/web":"./src/manifest/web.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"718a689b5ec019480c5747a57dc1890f8ba9dd0c","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.1.0","@12-apps/wiring":"^1.13.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true},"@12-apps/wiring":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.7.0_1787610637377_0.9991819817864582","host":"s3://npm-registry-packages-npm-production"}},"3.8.0":{"name":"@12-apps/entitlements","version":"3.8.0","license":"MIT","_id":"@12-apps/entitlements@3.8.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"918b5bf7c244f6597de7b0c3b7991154c1e79711","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.8.0.tgz","fileCount":61,"integrity":"sha512-1ZLOm/5HAHenaCQ/Gbk44Yx97ruoNBeExdenHdN9VQsNBtd3gABsocKjPAtB4Z5+cOQlDGvXh8J6XtAlfb9HvA==","signatures":[{"sig":"MEYCIQD5/pvPM7Qrv9VJtZfLqtOHDrbMbCPHNzSmwPnxPctNvQIhAP74xsyM0SAbSvL0JyL1B6djwu3nIfIIQSmm/UWGKuzg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":366583},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./manifest/web":"./src/manifest/web.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"0ef1619a8568ef43058ae33d2a2b837cf9c14dd3","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.9.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.1.0","@12-apps/wiring":"^1.13.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.21.1","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.1","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true},"@12-apps/wiring":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.8.0_1787613683302_0.1662929132242692","host":"s3://npm-registry-packages-npm-production"}},"3.9.0":{"name":"@12-apps/entitlements","version":"3.9.0","license":"MIT","_id":"@12-apps/entitlements@3.9.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"147f71207082940cfba925c011458bb8ad8bc7f5","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.9.0.tgz","fileCount":61,"integrity":"sha512-cMTWpf1wOj8MeAnERu2FqZWYdc9AzC06MtsS5qVmhg+9+CxPOrCjL0zEvjeCBXCajG969V43AItRHwMXlMmWAw==","signatures":[{"sig":"MEYCIQD3UO8r7JmunhWDotRbJbsgh4T1q/R6Su+cQ5KmOfx2VwIhAIB7z29fx7/3Nsb0EzNG33tEBEk+td6uFQqaeXDhOXp6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":367530},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./manifest/web":"./src/manifest/web.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"4714bd10c901bcc51544843d5d6091cc1509e649","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.10.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.2.0","@12-apps/wiring":"^1.14.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.22.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.21.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true},"@12-apps/wiring":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.9.0_1787617912529_0.13731463966915136","host":"s3://npm-registry-packages-npm-production"}},"3.10.0":{"name":"@12-apps/entitlements","version":"3.10.0","license":"MIT","_id":"@12-apps/entitlements@3.10.0","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"homepage":"https://github.com/12-apps/shared-packages#readme","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"8839e62b2c71f066d7e7042ab651392420d15254","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.10.0.tgz","fileCount":61,"integrity":"sha512-ry9uA4WID0Wr++4FUznSExqKxj+Z+Gy51buk7NqvWmy5Iq2XEhpLrBVY0gvciHNIXqrcuDdNAaN3J5QhDnXH2w==","signatures":[{"sig":"MEUCIQD9CYayPCdkYViquIjS6HDsRsTn7ySYfCgn7ih8OAZYrAIgRNgdO0T/9dQRvC4raiuThwkHyE25pSKlTthxIj8/cx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":369273},"type":"module","wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./hono":"./src/hono/index.ts","./react":"./src/react/index.ts","./server":"./src/server/index.ts","./manifest":"./src/manifest/index.ts","./manifest/web":"./src/manifest/web.ts","./package.json":"./package.json","./manifest/server":"./src/manifest/server.ts"},"gitHead":"233c0e35eb828aa2e4228760b5dce9fc433ccdb1","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/entitlements"},"_npmVersion":"12.0.2","description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@12-apps/ui":"^6.10.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","eslint":"^9.39.1","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.2","@types/react":"19.2.2","@12-apps/i18n":"^1.2.0","@12-apps/wiring":"^1.14.0","@types/react-dom":"19.2.2","@12-apps/eslint-config":"^1.22.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.21.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0","@12-apps/wiring":">=1.3.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true},"@12-apps/wiring":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/entitlements_3.10.0_1787677868062_0.5656121999376174","host":"s3://npm-registry-packages-npm-production"}},"3.10.1":{"name":"@12-apps/entitlements","version":"3.10.1","type":"module","sideEffects":false,"description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","exports":{".":"./src/index.ts","./server":"./src/server/index.ts","./react":"./src/react/index.ts","./hono":"./src/hono/index.ts","./manifest":"./src/manifest/index.ts","./manifest/server":"./src/manifest/server.ts","./manifest/web":"./src/manifest/web.ts","./package.json":"./package.json"},"scripts":{"clean":"rm -rf node_modules coverage","test":"node ../../scripts/vitest-with-teardown.mjs run","test:watch":"vitest watch","lint":"eslint src --max-warnings 0","check-types":"tsc --noEmit","typecheck":"tsc --noEmit","prisma:sync":"node scripts/sync-entitlements-schema.mjs","prisma:sync:check":"node scripts/sync-entitlements-schema.mjs --check"},"peerDependencies":{"@12-apps/wiring":">=1.3.0","hono":">=4.0.0","react":">=19.0.0","react-dom":">=19.0.0"},"peerDependenciesMeta":{"hono":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true},"@12-apps/wiring":{"optional":true}},"devDependencies":{"@12-apps/eslint-config":"^1.22.0","@12-apps/i18n":"^1.3.0","@12-apps/typescript-config":"^1.21.0","@12-apps/wiring":"^1.16.0","@testing-library/react":"^16.1.0","@types/react":"19.2.2","@types/react-dom":"19.2.2","eslint":"^9.39.1","eslint-plugin-test-flakiness":"^1.4.0","hono":"^4.6.0","jsdom":"^25.0.1","react":"^19.2.0","react-dom":"^19.2.0","typescript":"^5.9.2","vitest":"^3.2.4"},"engines":{"node":">=22.0.0"},"license":"MIT","publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"repository":{"type":"git","url":"git+https://github.com/12-apps/shared-packages.git","directory":"packages/entitlements"},"dependencies":{"@12-apps/ui":"^6.25.0"},"wiring":{"db":{"partial":"prisma/entitlements.prisma","migrations":"prisma/migrations"}},"gitHead":"b2fa789efb39d52f12c273943c82d36eed74b1bf","_id":"@12-apps/entitlements@3.10.1","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"homepage":"https://github.com/12-apps/shared-packages#readme","_nodeVersion":"24.20.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-syn58VzcjI1c7ZB5n5SSrcMlYB01OJ8tmP6iRUL8PNH4zviquFdaINGtQTrTQQ0keb1ySO5nRtel/iBundKO9A==","shasum":"587b2e8993573f355f7904c14dbdfe30e135dfed","tarball":"https://registry.npmjs.org/@12-apps/entitlements/-/entitlements-3.10.1.tgz","fileCount":61,"unpackedSize":373124,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2fentitlements@3.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCCIOadK0FzW+0FZEtj+eOpxVxAGZhITKBvn7R1F7LXBwIgfv2Lt+CmG6j0U56pIJMVAbaVc2cr0UikhzVmSGCxdXI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48c12ddb-f83d-4690-b5ad-51084bec662f"}},"directories":{},"maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/entitlements_3.10.1_1789126588411_0.42040811729909944"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-05T02:17:05.828Z","modified":"2026-09-11T11:36:28.950Z","1.0.0":"2026-08-05T02:17:06.169Z","1.2.0":"2026-08-05T16:09:06.890Z","1.2.1":"2026-08-05T17:05:44.154Z","1.3.0":"2026-08-05T18:32:55.529Z","1.3.1":"2026-08-05T18:50:54.278Z","1.4.0":"2026-08-05T21:42:32.914Z","1.4.1":"2026-08-06T01:15:13.367Z","1.4.2":"2026-08-06T05:00:20.743Z","1.4.3":"2026-08-06T05:10:48.184Z","1.5.0":"2026-08-06T15:41:09.855Z","1.5.1":"2026-08-06T23:44:13.746Z","1.5.2":"2026-08-07T00:09:25.130Z","1.5.3":"2026-08-07T01:32:05.075Z","1.6.0":"2026-08-07T02:24:55.188Z","1.7.0":"2026-08-07T04:21:11.311Z","1.7.1":"2026-08-07T04:31:12.775Z","1.8.0":"2026-08-07T08:01:28.458Z","1.8.1":"2026-08-07T09:02:27.474Z","1.9.0":"2026-08-07T10:57:27.342Z","1.10.0":"2026-08-07T11:52:06.062Z","1.10.1":"2026-08-07T13:07:08.658Z","1.11.0":"2026-08-07T15:50:12.498Z","1.11.1":"2026-08-07T18:34:53.298Z","1.12.0":"2026-08-07T18:48:17.675Z","1.13.0":"2026-08-07T19:48:58.314Z","1.14.0":"2026-08-07T20:02:50.668Z","1.15.0":"2026-08-07T20:14:31.658Z","1.15.2":"2026-08-07T21:39:09.507Z","1.16.0":"2026-08-07T23:31:58.779Z","1.16.1":"2026-08-07T23:51:05.867Z","1.16.2":"2026-08-08T03:31:50.769Z","1.16.3":"2026-08-08T14:04:47.561Z","1.17.0":"2026-08-08T15:44:23.625Z","1.18.0":"2026-08-08T16:21:03.863Z","1.19.0":"2026-08-08T17:16:51.730Z","1.20.0":"2026-08-12T18:58:41.181Z","1.20.1":"2026-08-12T19:29:56.457Z","2.0.0":"2026-08-14T11:34:18.730Z","3.0.0":"2026-08-15T13:25:57.341Z","3.1.0":"2026-08-15T14:50:54.135Z","3.2.0":"2026-08-21T15:48:46.157Z","3.3.0":"2026-08-22T15:20:04.048Z","3.4.0":"2026-08-24T04:55:12.063Z","3.5.0":"2026-08-24T18:10:35.705Z","3.6.0":"2026-08-24T18:51:23.104Z","3.7.0":"2026-08-24T22:30:37.528Z","3.8.0":"2026-08-24T23:21:23.447Z","3.9.0":"2026-08-25T00:31:52.652Z","3.10.0":"2026-08-25T17:11:08.229Z","3.10.1":"2026-09-11T11:36:28.560Z"},"bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"license":"MIT","homepage":"https://github.com/12-apps/shared-packages#readme","repository":{"type":"git","url":"git+https://github.com/12-apps/shared-packages.git","directory":"packages/entitlements"},"description":"Generic, portable plan/feature entitlements: layered resolution (code/plan/status/tenant), numeric quotas, per-feature revoke policy and 402-vs-403 denial semantics. Framework-free core plus createApiEntitlements (./server, ./hono adapter) and createWebEn","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"readme":"# `@12-apps/entitlements`\n\nA generic, portable **plan/feature entitlements** layer. Framework-free,\nstorage-free, **billing-free**. Zero runtime dependencies.\n\nFor the step-by-step wiring guide see [`ADOPTING.md`](./ADOPTING.md); this file\nis the concepts + API reference.\n\nBeyond the framework-free core, the package ships the SURFACE as two factories\n(the plug-and-play contract): `createApiEntitlements(config)` under `./server`\n(framework-neutral route descriptors — snapshot, plan view + pricing cards,\nplan-change request — plus the guards, the usage-counter registry, the atomic\nquota guard, retention watermarks, the tenant-settings writer and the\nnotification channel policy), a `./hono` adapter that mounts them, and\n`createWebEntitlements(config)` under `./react` (the plan screen, the\n`withEntitlement` page gate and the upgrade prompt host). The prisma partial\nfor `RetentionWatermark` and the `entitlements-coverage` gate script ship with\nthe package. See ADOPTING.md §10.\n\n**The commercial policy is the HOST's, and it is required.** The tiers, what\nthey are called, what they cost, the currency they read in, the interval they\nrecur on and the permission that may ask for a change all arrive as config,\nchecked at ASSEMBLY by `assertApiEntitlementsConfig`. The one thing this\npackage contributes back is `entitlementsPermissions(labels)` — the single id\n(`plan:request`) guarding its own write, worded by the host — which the host\ncomposes into its RBAC catalog. See [`ADOPTING.md`](./ADOPTING.md) §11.\n\n---\n\n## The problem it solves\n\nMost apps end up with two axes of access control and try to make one of them do\na third job:\n\n| layer | question | owner | scope | denial |\n|---|---|---|---|---|\n| code | does the build support it? | devs | global | 404 |\n| **entitlement** | **does the tenant's plan cover it?** | **platform / billing** | **tenant** | **402** |\n| tenant setting | did the tenant switch it off? | tenant admin | tenant | hidden |\n| RBAC permission | may *this user* do it? | tenant admin | user | 403 |\n\nEncoding plans into **RBAC** fails on cardinality: permissions are per-user,\nplans are per-tenant, so a plan change has to rewrite every role of every\nmember — including any roles the tenant authored themselves, which then have to\nbe un-rewritten on upgrade or destroyed. As a separate layer, a downgrade is one\nwrite and roles are untouched, so re-upgrading restores everything instantly.\n\nEncoding plans into the tenant's own **feature flags** fails on trust: those are\ntenant-writable operational switches. Entitlements are platform-written and\nadversarial. Same shape, opposite direction.\n\nSo: a third layer. This package.\n\n## Two rules that make it work\n\n**1. It knows nothing about money.** No price, no currency, no interval, no\nprovider ids. It accepts an already-resolved entitlement map plus a coarse\nlifecycle status (`active` / `restricted` / `suspended`). A billing system maps\nits own states into those three and becomes *one possible writer* of the plan\nlayer — never a dependency. That is what lets a host with hand-assigned tiers,\nan internal beta programme, or no billing at all use this unchanged.\n\n**2. Check entitlement and permission sequentially, never intersecting.**\n\n```ts\n// ✗ intersecting — loses the reason\nconst effective = permissions ∩ entitlements;   // everything is just a 403\n\n// ✓ sequential — keeps it\nawait requireEntitlement('exports.bulk', { tenantId }); // 402 → upsell\nawait requirePermission('exports:read', { scope });     // 403 → \"Ask your admin\"\n```\n\nIntersect and you can no longer tell *\"your plan doesn't include this\"* from\n*\"your role doesn't include this\"*. The upsell surface — the commercial point of\nhaving entitlements at all — dies with the distinction.\n\n## Resolution order\n\nA feature is usable only when every layer agrees:\n\n```\n1. code    registry declares it                      → 'not-supported'\n2. plan    plan ∪ overrides grants it                → 'not-entitled'      (upsell)\n3. status  account not restricted/suspended          → 'restricted' | 'suspended'\n4. tenant  tenant hasn't switched it off             → 'disabled-by-tenant'\n```\n\nThe **reason** survives all the way to the caller. That is the whole design:\nonly `not-entitled` is an upsell. Offering \"upgrade to unlock\" for a feature the\ntenant already pays for and turned off themselves would be a lie, so\n`requiredPlan` is `null` for every other denial.\n\nAn entitled tenant is never forced — layer 4 always wins over layer 2.\n\n---\n\n## API\n\n### `defineFeatures(catalog)`\n\nThe typed feature registry. Mirrors `@12-apps/rbac`'s `definePermissions`: pass a\n`const` map so unknown keys fail typecheck instead of silently resolving to\n\"not entitled\".\n\n```ts\nconst FEATURES = defineFeatures({\n  'exports.bulk':      { onRevoke: 'hide' },\n  'webhooks.outbound': { onRevoke: 'disable' },\n  'seats.included':    { kind: 'quota', onRevoke: 'readonly' },\n  approvals:           { onRevoke: 'disable', defaultWhenEntitled: false },\n  'records.read':      { retainWhenRestricted: true },\n} as const);\n\ntype AppFeature = (typeof FEATURES.list)[number];\n```\n\n| field | default | meaning |\n|---|---|---|\n| `kind` | `'boolean'` | `'quota'` for numeric limits |\n| `onRevoke` | `'hide'` | what the host does to existing data — `hide` / `readonly` / `disable` |\n| `defaultWhenEntitled` | `true` | off until the tenant opts in when `false` (use for write-gating features) |\n| `retainWhenRestricted` | `false` | survives dunning — keep read paths open so restriction degrades rather than bricks |\n\nA feature key is a wire to a **code gate**. Plans can only reference keys that\nalready exist; they can never mint new ones.\n\n### `definePlans(registry, plans)`\n\nTiers, authored with `extends` and **flattened at compile time** so runtime\nresolution never walks a chain and a bad catalog fails at boot.\n\n```ts\nconst PLANS = definePlans(FEATURES, {\n  solo:  { entitlements: { 'records.read': true, 'seats.included': 1 } },\n  team:  { extends: 'solo', entitlements: { 'webhooks.outbound': true, 'seats.included': 5 } },\n  scale: { extends: 'team', entitlements: { 'exports.bulk': true, 'seats.included': 'unlimited' } },\n} as const);\n```\n\nDeclaration order is assumed cheapest → richest and drives `cheapestWith()`,\ni.e. the `requiredPlan` on every 402. A richer tier may *lower* an inherited\nvalue (set a quota to `0`) as well as raise it. Cycles and undeclared feature\nkeys throw.\n\n### `createEntitlements(config)`\n\n```ts\nexport const entitlements = createEntitlements({\n  features: FEATURES,\n  plans: PLANS,          // optional — omit for hand-assigned entitlements\n  source,                // port: load(tenantId)\n  usage,                 // port: count(tenantId, feature) — quotas only\n  cache,                 // port: optional read-through cache\n});\n```\n\n| method | returns |\n|---|---|\n| `check(tenantId, feature)` | `EntitlementDecision` — never throws for a denial |\n| `checkQuota(tenantId, feature)` | decision + `used` / `remaining` / `exceeded` |\n| `checkAll(tenantId)` | every feature in one pass |\n| `require(tenantId, feature)` | throws `EntitlementRequiredError` → **402** |\n| `requireQuota(tenantId, feature, need?)` | throws `QuotaExceededError` → **402** |\n| `toSnapshot(tenantId)` | JSON-serializable projection for the browser |\n| `invalidate(tenantId)` | drop cached state |\n\n### Ports — the entire host seam\n\n```ts\ninterface EntitlementSource<F> {\n  load(tenantId: string): Promise<{\n    plan: EntitlementMap<F>;\n    planKey?: string | null;\n    overrides?: EntitlementMap<F>;   // comped / beta / enterprise, layered OVER the plan\n    settings?: SettingsMap<F>;       // the tenant's own off-switches\n    status?: LifecycleStatus;\n  }>;\n}\n\ninterface UsageCounter<F> {\n  count(tenantId: string, feature: F): Promise<number>;\n}\n\ninterface EntitlementCache {\n  get(key): Promise<string | null>;\n  set(key, value, ttlSeconds?): Promise<void>;\n  del(key): Promise<void>;\n}\n```\n\nAn **override** layers over the plan in both directions: it can grant a comped\nfeature *and* revoke one, without touching the plan catalog. Because an override\n*replaces* the plan value rather than merging with it, a denial that came from\none carries `requiredPlan: null` — no plan the tenant could buy would lift a\nplatform revocation, and their current plan may well be the one that grants it.\n\n### Quotas\n\n`EntitlementValue = boolean | number | 'unlimited'`.\n\n`0` is a real value meaning \"entitled to none\", so a tier can explicitly zero\nout an inherited quota. `'unlimited'` stays a sentinel rather than `Infinity` so\na map survives `JSON.stringify`.\n\n```ts\nawait entitlements.requireQuota(tenantId, 'seats.included');    // +1\nawait entitlements.requireQuota(tenantId, 'seats.included', 5); // bulk create\n```\n\n> ⚠️ **Check-then-act is not atomic.** Two concurrent creates can both read\n> `used = 9` against a limit of 10 and both pass. The engine returns a\n> *decision*; enforce atomically by counting inside the insert's transaction or\n> with a DB constraint wherever an overage actually matters (always for seats,\n> usually not for metered calls).\n\n### Downgrade\n\n**Downgrade must never delete data.** Every decision carries the feature's\n`policy` even while denied, so the host knows what to do with rows that already\nexist:\n\n| policy | host behaviour |\n|---|---|\n| `hide` | surface disappears, rows untouched |\n| `readonly` | rows stay visible and usable, `create`/`update` refuse |\n| `disable` | rows deactivated but retained; reactivate on re-entitlement |\n\nOver-quota is the same shape: existing rows survive, `create` returns 402.\n\n### Dunning comes free\n\n`restricted` is just another resolution layer, so a delinquent tenant needs **no\nseparate lock mechanism** — one `status` write closes every gate through the\nguard you already wrote, while features flagged `retainWhenRestricted` stay open\nso the account degrades instead of bricking. `suspended` admits no exceptions.\n\nNeither offers an upsell: the tenant already paid for those features, so the fix\nis settling up, and that message belongs to the host.\n\n---\n\n## React\n\n```tsx\nimport { EntitlementsProvider, Entitled, Locked, useQuota } from '@12-apps/entitlements/react';\n\n<EntitlementsProvider snapshot={snapshot} onUpsell={openPricingModal}>\n  <Entitled feature=\"exports.bulk\" fallback={<ExportsTeaser />}>\n    <ExportsPage />\n  </Entitled>\n\n  <Locked feature=\"webhooks.outbound\">\n    {({ requiredPlan, upsell }) => (\n      <button onClick={upsell}>🔒 Disponível no plano {requiredPlan}</button>\n    )}\n  </Locked>\n</EntitlementsProvider>\n```\n\nThe client **never re-resolves** — it receives a server-built snapshot and\nrenders, exactly like `@12-apps/rbac`'s `RbacProvider` takes an already-resolved\npermission set.\n\n`<Locked>` is headless and renders nothing for `disabled-by-tenant` or\n`not-supported`, so an upsell only ever appears where a sale is actually\npossible. `onUpsell` is the escape hatch: **the package does not own the upgrade\nmodal** — pricing copy and CTA are app branding, and owning them is what would\nstop this being reusable.\n\n`useQuota(feature, used)` takes usage from the caller because live counts are\nnot in the snapshot; the component rendering the list already knows.\n\n> **Boundary:** `/react` may import types and pure helpers only — never a port,\n> adapter or the engine. Enforced by `src/react/__tests__/boundary.test.ts`.\n\n---\n\n## Testing\n\n```bash\npnpm --filter @12-apps/entitlements test\n```\n\nThree of the suites are the portability gate, and they answer different\nquestions:\n\n| suite | what it proves |\n|---|---|\n| [`portability.test.ts`](./src/__tests__/portability.test.ts) | the ENGINE is portable — a toy note-taking SaaS with its own catalog, its own plans and the two ports |\n| [`portability-surface.test.tsx`](./src/__tests__/portability-surface.test.tsx) | the SURFACES are — it MOUNTS the Hono router and the React factory for a concert hall and refuses a word from any other host's vocabulary |\n| [`packed-artifact.test.ts`](./src/__tests__/packed-artifact.test.ts) | the TARBALL is — it asks `npm pack` what would upload and sweeps every published file |\n\nThe middle one exists because the first was not enough: every default that\nactually leaked (a BRL price formatter, a `/mês` interval, a hardcoded top\ntier, copy naming a host's own noun) sat on a surface no engine call reaches.\nThe last one exists because `files` publishes `src`, `prisma`, `scripts` and\nevery `*.md` — more than any rendered screen can show.\n\n`memory.ts` provides in-memory source/usage/cache adapters for tests and local\ndevelopment.\n","readmeFilename":"README.md"}