{"_id":"@12-apps/feature-flags","_rev":"11-e67a929d1bc13969021f0acaed23d9e3","name":"@12-apps/feature-flags","dist-tags":{"latest":"2.4.1"},"versions":{"1.0.0":{"name":"@12-apps/feature-flags","version":"1.0.0","license":"MIT","_id":"@12-apps/feature-flags@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":"027f47c2acb73b3682a6b0bbf7a482eb1428fed5","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-1.0.0.tgz","fileCount":17,"integrity":"sha512-0bfPHilk/jMgRrFMot/rZHR04/txzkPDScsivavYi9ukTIwKzIp2EAAlPNaomjBZEhEvQJ/bJKbjLFYiskzqkQ==","signatures":[{"sig":"MEYCIQCsA6V/OW1MulkkAth4bBI2f31neSO5tRY/WPPmQITMxQIhALQ3owpy646mjLJAC1QKPd7GLwSD/OE4H5SqTnYQv/Yn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59210},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/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":"9644e59e53fc099bfc757dca8fdfba23d8e8f49f","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"tigredonorte","email":"tigredonorte3@gmail.com"},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags (FUT-884): per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manif","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.0","@12-apps/wiring":"^1.2.0","@types/react-dom":"^19.2.0","@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":"^18.0.0 || ^19.0.0","@12-apps/wiring":">=1.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"@12-apps/wiring":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_1.0.0_1787253295089_0.218912737259086","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@12-apps/feature-flags","version":"1.1.0","license":"MIT","_id":"@12-apps/feature-flags@1.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":"797bc4bdb72b824c5f1b18da9b79f1fccf029cd0","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-1.1.0.tgz","fileCount":45,"integrity":"sha512-jlmijJU4rm90EoaEMTaXUyYIo2wjkc6rqAhWOaSgRN84vjzjEGycl9qW1iWpkgQDBDuakguO+0mIUOmp6o0YSA==","signatures":[{"sig":"MEQCIBsOdrqbS9skKFmUcNwgt7BQVqJcpvob4kl3XvLMtOENAiBwN7EriDM+Fhhx/r6mYJXISelKas7Y+EHsQ+Mz2Vnvgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCHrlv4QFXt8cOR8JfivT48b5tpJ9cURS7FlJEjH1qA1QIhAKiu2O0/rGP9bq3tDMALi48kURkpcBaWoacUKxUdwYWA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":98873},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"573893081ca6d2465d1ba53606b737fa21b71c49","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b46350a-d8cd-4eca-b607-43f153818d22"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags (FUT-884): per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manif","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/node":"^22.10.6","@types/react":"^19.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.2.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@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":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_1.1.0_1787259314499_0.17703683896556144","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@12-apps/feature-flags","version":"1.2.0","license":"MIT","_id":"@12-apps/feature-flags@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":"426ecd4b7a92082bb8994736388ce2dd25e954f6","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-1.2.0.tgz","fileCount":45,"integrity":"sha512-NlEicwaOqb/1bvAl6qAzsZJ0ZweWVhQrDJu3Bb4mhhdf53bmfWDPHqzkrLtLeTvrEIAQgvv6u87Cpr2Uhw8+oQ==","signatures":[{"sig":"MEYCIQDU4ZcojcwJOKcoAyLcWBAYwq2GT564TIOvodG3pdz/xgIhAIP1ILMMC6H5ulNvBB6DpipYrVaEwnRTa8XzPEHqoOfp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFXcR6Ldb3pb5MC0ZIFzwVYkCEb1Fr47JAZVhzH7z4FPAiEAjvSDghvZmJfBz8IVDS8v33tqedxxh6x8wyTIOTg6te8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":99135},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"550f51fc44113132343e015b1dac4dd3343eb3bc","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b46350a-d8cd-4eca-b607-43f153818d22"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags (FUT-884): per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manif","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/node":"^22.10.6","@types/react":"^19.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.3.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@12-apps/eslint-config":"^1.21.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_1.2.0_1787263803939_0.9659186289125004","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@12-apps/feature-flags","version":"2.0.0","license":"MIT","_id":"@12-apps/feature-flags@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":"18f88a9c95f8c7ea3f66ee19707b12158da80f19","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.0.0.tgz","fileCount":48,"integrity":"sha512-rNs6DWlvg4HndSyLl1tgf5HungGojt2Hzs48n+IQ59anb4g776WNjvEmgy1B9XmdSfslPGrTLBALdF1/xHCc7A==","signatures":[{"sig":"MEUCIC5flgzURxg/XWl3FgAuJwSs3TuMqjZ0ECUQn55V6m2sAiEAv6MzTTpCndw8ebqASFbAi543u/pYLhuq/5eW36Nv7jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBFgalYT5K5wCr48zZzQZhUlvPoqQQN9g7DoMBDrkKqsAiAh8umeQcs+ioyA35ecclTcKjpqGohY4c7+cbgjcdaGxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103316},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"9899de29a12e90e2ecc83203a90a1bcb24f430a8","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b46350a-d8cd-4eca-b607-43f153818d22"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags (FUT-884): per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manif","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/node":"^22.10.6","@types/react":"^19.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.3.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@12-apps/eslint-config":"^1.21.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.0.0_1787271467803_0.0887126722534084","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@12-apps/feature-flags","version":"2.0.1","license":"MIT","_id":"@12-apps/feature-flags@2.0.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":"8c523eb88c18b181ffae86df1e98a6317a448a73","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.0.1.tgz","fileCount":48,"integrity":"sha512-vsC9CPDUPyR99fGA/mnbRQWCQU9dctGCwYnirrqhWqLHLbcOfAa64DAal01F7eH5BhnOws3ZuAES9X9zceIrBA==","signatures":[{"sig":"MEQCIFvuzYEZbe6rth530fcHNjxV8E5jSXAiBJAViEsWC32pAiB3AUMGkTx3Tjs/vSSPx0bgiBm4IMO9aC3c9HB1m5fWgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCx0tmdPC6Ae/2tGkZrS5KNDGpDd6xL3QaNJH4ULDGWCAIgJFM9vNSVzlkM2ykN5bI47hU6zwewoPesilK3eSj+TMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103797},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"99e7f37f1dd26ccf10187783be6b92de7f88a4c0","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b46350a-d8cd-4eca-b607-43f153818d22"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","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/node":"^22.10.6","@types/react":"^19.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.3.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@12-apps/eslint-config":"^1.21.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.0.1_1787280744305_0.15784653768641355","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@12-apps/feature-flags","version":"2.1.0","license":"MIT","_id":"@12-apps/feature-flags@2.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":"3599b2613bf7e396c28aab93c2b7c473d3760123","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.1.0.tgz","fileCount":48,"integrity":"sha512-+90+Na1/bGkOYxPMiNPTO2Uysg1r900DR7yERRDXvRTxILYJUsrMb4bhLukScPjKHaDsdsmOZ8uNLvP+UFpMBg==","signatures":[{"sig":"MEUCIQCteeu6fzpCtgXAe10L0gadepPN3VIlZJEh8v93tHQ1aQIgGXDOMwY+MoZ39dw8P0u/Y4W2fjqSf2jFvQbu1EPjlCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH9Ui4zu7G1Ic5Niko0lr+MGzuIoZmKHKr5ooB8sIQ2GAiAyluompdYVxmTWwzEj2JYI3BKcU47J78DCFpzTiTkBsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103797},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"9b1d9be6a3932a24aeaf538b9bd3d01aa1ff9b89","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b46350a-d8cd-4eca-b607-43f153818d22"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","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/node":"^22.10.6","@types/react":"^19.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.4.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@12-apps/eslint-config":"^1.21.0","@testing-library/react":"^16.1.0","@12-apps/typescript-config":"^1.20.0","eslint-plugin-test-flakiness":"^1.4.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.1.0_1787285191243_0.8242881671203868","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@12-apps/feature-flags","version":"2.1.1","license":"MIT","_id":"@12-apps/feature-flags@2.1.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":"81c9d3d497e4c96c684477a23fcee0dcb4f8a14b","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.1.1.tgz","fileCount":48,"integrity":"sha512-YTpb7B1X4yh8psvhJMmYB85yKj+pPUjM2ZKpvvYwmwqR57XMMb8yYTqYNWcu4Gz0DG9jnERi9b23xigxQ949RA==","signatures":[{"sig":"MEYCIQCXfB2EHY2fm7OKTHyJhXenkQcvQPTQCbRfJWFJWNotcwIhAIv3CWzQQifnHKNOfh+4phaC2isdpoTrJBkaMiq9t8Ty","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDaAYJ9RXY9R1eYJK27BsPGNgp3HZIk6M2HLQDP81IxLAiBcDCDPpcTPtKlza3x9uSuFXjSf8UGDjhjwNyvsLWFd0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103797},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"3c4711049bf8351685612372531c3cae1370bbbb","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b46350a-d8cd-4eca-b607-43f153818d22"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","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/node":"^22.10.6","@types/react":"^19.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.6.1","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@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":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.1.1_1787327375297_0.6077108417133936","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@12-apps/feature-flags","version":"2.2.0","license":"MIT","_id":"@12-apps/feature-flags@2.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":"c36277a69e53be9afb6fba307271716f6baa8755","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.2.0.tgz","fileCount":52,"integrity":"sha512-my69wKBcqRAYaTy890/1x2MWg27rfQZDQGV9cKIBH1iTN/9bR+F+B/RBqloRBNQNsFG+Ipc6FuwHdLi8mLh5DA==","signatures":[{"sig":"MEYCIQDkrBCj+D1q3YH4ZMthVGWRKfmu2+4Ai4WJbXu5X2YQvwIhAL7Gb6uQ6f3rpZ41aRgUDpqmbEHfdGsFz/aVSktR9XHl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGwXzBKaoXVNCbwI7QIu/aN8fsqXWwJLIXFtZ4jF/6MjAiEAuz2jTQr3uBjReP9DDPZGhrzoMYHYVgQNcURJPPOvEhI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108000},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"9aa6a7b4c316ceed44033000e57b1b02c316537b","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c24460bc-c52d-4cfc-8c9d-f12ef71cca7c"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","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/node":"^22.10.6","@types/react":"^19.2.0","@12-apps/i18n":"^1.0.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.10.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@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":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.2.0_1787547248200_0.2554313561059798","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@12-apps/feature-flags","version":"2.3.0","license":"MIT","_id":"@12-apps/feature-flags@2.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":"a5d77465affea1a1d4540ca938d49a0e3873f8a6","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.3.0.tgz","fileCount":52,"integrity":"sha512-KCTH3ec8BZVO4GHabmfroTsPPj9yq2z1qui/q2alH6XYV3e1FAl+fC7+R3MSRT+dCEqVedTXLh+zt6jX5CXUiw==","signatures":[{"sig":"MEQCIHxemHpHuBnfrZLLegjBjxjVGGn6ohc2xAZ494u3X3MkAiBPSH7GcbcYFY7cNWA03yny76oTYrSgNeGDn2uf6Bf6eA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDli9DwMb3ikVESsDrIYGQpGn/P+tn/9BNpPDkaQBXf/gIhAIC98DorCHFNT5WVG7x9RQtkndA9rYBeSGpjkPByHCEn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111156},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"03c5e167469ab2118b1d18148cf456f8653a0345","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c24460bc-c52d-4cfc-8c9d-f12ef71cca7c"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","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/node":"^22.10.6","@types/react":"^19.2.0","@12-apps/i18n":"^1.1.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.12.1","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@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":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.3.0_1787595050396_0.05550596591391965","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@12-apps/feature-flags","version":"2.4.0","license":"MIT","_id":"@12-apps/feature-flags@2.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":"23a717f46c4c162a4387b13805c32b67b5297a35","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.4.0.tgz","fileCount":52,"integrity":"sha512-w1mgewiVBcuLcQw5Hg+bIeUeuBQRb9ZZdULdTxetLtexR6ZvV+jUJlFI5yWhgeiTbuuyziqkKhMszeDMJeLfLA==","signatures":[{"sig":"MEQCICt4orNBbs7gmOGm9ueC2bhv5k80AguEHfcXsVsgdlRXAiBHgXxq5wRyuIniYCLS+IbZT05vlp8AwNiTfdIXnKzy/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC3cZAlYGE4VZo7Fn9xc//wMakkaFUGVkmE+szsETLm7QIgYp5cQgqAOpD7r8f3BQtsXocS1TFItqRaNFHR6AqnUy0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111196},"type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c24460bc-c52d-4cfc-8c9d-f12ef71cca7c"}},"repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","directories":{},"sideEffects":["**/e2e/**"],"_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/node":"^22.10.6","@types/react":"^19.2.0","@12-apps/i18n":"^1.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.14.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@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":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/feature-flags_2.4.0_1787617834305_0.7933763562030272","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"_id":"@12-apps/feature-flags@2.4.1","bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"dist":{"shasum":"10da0336f074fa42f20b75a097c23b4615445c22","tarball":"https://registry.npmjs.org/@12-apps/feature-flags/-/feature-flags-2.4.1.tgz","fileCount":52,"integrity":"sha512-1nXmWb2ME0R4ox2hgXZgSHipHVmi0mz7RuRz6nCGFtslCfBrcueIYlHOjIBJ9kmuRaPGkhEVY2+bPu9VL3HyvA==","signatures":[{"sig":"MEQCIHRpQcremUhhvQOl/jbDgg9RqkQzOgJsxW7dTG1PIYeNAiBE8Uu3ayjVubPhpzfvWfwedeDfJnjw4a82Ozybriy6IQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEhGuGUrloWc2P8CRYsBts2Qtyj3w9Vg2zBXYQw6sqdIAiEA9GHyUbPysFn7BRZN/XRC4qWgWfm4Mf3rKbvQmNfi+VM="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@12-apps%2ffeature-flags@2.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111196},"name":"@12-apps/feature-flags","type":"module","wiring":{"db":{"partial":"prisma/feature-flags.prisma","migrations":"prisma/migrations"}},"engines":{"node":">=22.0.0"},"exports":{".":"./src/index.ts","./e2e":{"types":"./dist/e2e/index.d.ts","default":"./dist/e2e/index.js"},"./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":"14d4758eea55506bae6bb0b6fe6001aa1c954e81","license":"MIT","scripts":{"lint":"eslint src --max-warnings 0","test":"node ../../scripts/vitest-with-teardown.mjs run","build":"tsc -p tsconfig.e2e.json","clean":"rm -rf node_modules coverage dist","typecheck":"tsc --noEmit","test:watch":"vitest watch","check-types":"tsc --noEmit","prisma:sync":"node scripts/sync-feature-flags-schema.mjs","prisma:sync:check":"node scripts/sync-feature-flags-schema.mjs --check"},"version":"2.4.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c24460bc-c52d-4cfc-8c9d-f12ef71cca7c"}},"homepage":"https://github.com/12-apps/shared-packages#readme","repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"_npmVersion":"12.0.2","description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","directories":{},"maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"sideEffects":["**/e2e/**"],"_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/node":"^22.10.6","@types/react":"^19.2.0","@12-apps/i18n":"^1.2.0","playwright-bdd":"^8.4.1","@12-apps/wiring":"^1.14.0","@playwright/test":"^1.56.1","@types/react-dom":"^19.2.0","@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":{"react":"^18.0.0 || ^19.0.0","playwright-bdd":">=8.0.0","@12-apps/wiring":">=1.0.0","@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"react":{"optional":true},"playwright-bdd":{"optional":true},"@12-apps/wiring":{"optional":true},"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/feature-flags_2.4.1_1787624825154_0.9956784669318617"}}},"time":{"created":"2026-08-20T19:14:54.844Z","modified":"2026-08-25T02:27:05.600Z","1.0.0":"2026-08-20T19:14:55.245Z","1.1.0":"2026-08-20T20:55:14.593Z","1.2.0":"2026-08-20T22:10:04.040Z","2.0.0":"2026-08-21T00:17:47.906Z","2.0.1":"2026-08-21T02:52:24.394Z","2.1.0":"2026-08-21T04:06:31.386Z","2.1.1":"2026-08-21T15:49:35.393Z","2.2.0":"2026-08-24T04:54:08.278Z","2.3.0":"2026-08-24T18:10:50.485Z","2.4.0":"2026-08-25T00:30:34.419Z","2.4.1":"2026-08-25T02:27:05.234Z"},"bugs":{"url":"https://github.com/12-apps/shared-packages/issues"},"license":"MIT","homepage":"https://github.com/12-apps/shared-packages#readme","repository":{"url":"git+https://github.com/12-apps/shared-packages.git","type":"git","directory":"packages/feature-flags"},"description":"User-level feature flags: per-user beta grants composed as a VEIL over the tenant axes — never a key past them. Core reader (.), framework-neutral superadmin management endpoints (./server), management screen (./react), wiring manifests (./manifest*), and","maintainers":[{"name":"tigredonorte","email":"tigredonorte3@gmail.com"}],"readme":"# @12-apps/feature-flags\n\nUser-level feature flags: a superadmin grants a feature in beta to individual\n**people** — an owner and a couple of users — and only they see it.\n\n## The one rule: a flag is a veil, never a key\n\nA flag composes by **AND** over every axis the host already has. It can only\n*narrow* visibility; it never turns on a feature that the tenant's plan,\nlifecycle status, own settings or RBAC turn off. Two consequences:\n\n- **Grants are user-global and safe to be.** The grant follows the person, and\n  in a store whose tenant axes deny the feature, the grant lights nothing —\n  which is exactly why no per-tenant grant column is needed.\n- **The veil fails CLOSED.** A flag that is absent, stale or failed-to-load\n  hides the feature. This is the *opposite* of the entitlements degradation\n  rule (absent ⇒ unlocked), and deliberately so: a stale client must never\n  paywall an owned feature, and must never leak an unreleased one.\n\nIn the origin host the server-side order is `401 auth → 403 RBAC → flag veil →\n402 entitlements` — the veil sits before the entitlement stack so nobody is\nupsold a feature that is not purchasable yet.\n\n## What lives where\n\n- **Grants** live in the database: `user_feature_grants`, one row per\n  (user, flag), no row = the flag's default (off), `enabled: false` = an\n  explicit opt-out that survives a future default-on rollout. `user_id` is a\n  by-value scalar — no FK into host tables (the payments-backend doctrine).\n- **The catalog** is HOST CODE, handed in as config. A flag with no code\n  behind it does nothing — every flag ships with a deploy anyway. A grant\n  whose key left the catalog is an **orphan**: reported by the management\n  surface, invisible to the reader.\n- **Every word is the host's.** The screen's `copy` (`FeatureFlagsCopy`) and\n  the routes' denial sentences (`FeatureFlagsServerCopy`) are REQUIRED config\n  with no defaults — the package ships no silent language, and server\n  assembly fails naming every missing key. pt-BR still ships, as NAMED packs\n  (`PT_BR_FEATURE_FLAGS_COPY` from `./react`,\n  `PT_BR_FEATURE_FLAGS_SERVER_COPY` from `./server`): a host imports one and\n  passes it by hand, so choosing the language is a reviewable line. The\n  machine `error` codes (`unknown_flag`, `user_not_found`, …) are the stable\n  half a client may branch on; the sentences beside them are the host's.\n\n## Surfaces\n\n| subpath | export | what it is |\n|---|---|---|\n| `.` | `createFlagReader` | the enforcement half — `flagsFor(userId)` for host gates |\n| `./server` | `createApiFeatureFlags` | six framework-neutral route descriptors (WireRoute-shaped) for the superadmin management surface |\n| `./react` | `createWebFeatureFlags` | the management screen, `{ page }` |\n| `./manifest`, `./manifest/server`, `./manifest/web` | wiring manifests | adopt through `@12-apps/wiring/consumer` |\n\nDeliberate absences in the manifest: **no `mcp`** (the surface is browser-only\n— a superadmin bearer already inherits cross-tenant reach over shared tools)\nand **no `permissions`** (platform authority in the origin host is an env\nallowlist no permission id can express).\n\n## Adoption sketch (server)\n\n```ts\nimport { createWiringHost } from '@12-apps/wiring/consumer';\nimport { featureFlagsManifest } from '@12-apps/feature-flags/manifest';\nimport { featureFlagsServerManifest } from '@12-apps/feature-flags/manifest/server';\n\nconst host = createWiringHost({ name: 'my-host', kind: 'server' });\nhost.adoptServer({\n  manifest: featureFlagsManifest,\n  server: featureFlagsServerManifest,\n  bindings: {\n    http: {\n      mountPath: '/api/platform/feature-flags',\n      // `copy` is every denial sentence — required; pass a named pack or\n      // your own object.\n      config: { db, catalog, directory, copy, audit },\n    },\n  },\n});\nconst wired = host.assemble();\n```\n\nThe host resolves the actor (its superadmin guard) before any handler runs;\nthe actor is `{ email }` — the audit identity, not an authorization input.\nRoute order is load-bearing for an in-order dispatcher (`/users/:userId`\nbefore `/:key/…`), and `assertCatalog` refuses a flag named `users` so the\nstatic segment can never be swallowed.\n\n## Prisma\n\n`prisma/feature-flags.prisma` is copied — never symlinked — into the host's\nschema folder by `pnpm --filter @12-apps/feature-flags prisma:sync`\n(`--check` gates drift). Migrations are discovered structurally by the host's\nplugin sync from `prisma/migrations/`.\n","readmeFilename":"README.md"}