@contractspec/lib.feature-flags 0.0.0-canary-20260113162409

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +173 -0
  3. package/dist/contracts/index.d.ts +1010 -0
  4. package/dist/contracts/index.d.ts.map +1 -0
  5. package/dist/contracts/index.js +908 -0
  6. package/dist/contracts/index.js.map +1 -0
  7. package/dist/contracts/src/app-config/lifecycle.d.ts +1 -0
  8. package/dist/contracts/src/app-config/runtime.d.ts +13 -0
  9. package/dist/contracts/src/app-config/spec.d.ts +9 -0
  10. package/dist/contracts/src/app-config/validation.d.ts +8 -0
  11. package/dist/contracts/src/capabilities/capabilities.d.ts +33 -0
  12. package/dist/contracts/src/capabilities/capabilities.d.ts.map +1 -0
  13. package/dist/contracts/src/capabilities/index.d.ts +2 -0
  14. package/dist/contracts/src/capabilities/openbanking.d.ts +1 -0
  15. package/dist/contracts/src/client/index.d.ts +1 -0
  16. package/dist/contracts/src/client/react/drivers/rn-reusables.d.ts +1 -0
  17. package/dist/contracts/src/client/react/drivers/shadcn.d.ts +1 -0
  18. package/dist/contracts/src/client/react/feature-render.d.ts +3 -0
  19. package/dist/contracts/src/client/react/form-render.d.ts +4 -0
  20. package/dist/contracts/src/client/react/index.d.ts +4 -0
  21. package/dist/contracts/src/contract-registry/index.d.ts +2 -0
  22. package/dist/contracts/src/contract-registry/schemas.d.ts +2 -0
  23. package/dist/contracts/src/contract-registry/types.d.ts +1 -0
  24. package/dist/contracts/src/data-views/index.d.ts +3 -0
  25. package/dist/contracts/src/data-views/registry.d.ts +2 -0
  26. package/dist/contracts/src/data-views/spec.d.ts +2 -0
  27. package/dist/contracts/src/data-views/types.d.ts +2 -0
  28. package/dist/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.d.ts +1 -0
  29. package/dist/contracts/src/docs/index.d.ts +25 -0
  30. package/dist/contracts/src/docs/presentations.d.ts +2 -0
  31. package/dist/contracts/src/docs/registry.d.ts +10 -0
  32. package/dist/contracts/src/docs/registry.d.ts.map +1 -0
  33. package/dist/contracts/src/docs/tech/auth/better-auth-nextjs.docblock.d.ts +1 -0
  34. package/dist/contracts/src/docs/tech/contracts/README.docblock.d.ts +1 -0
  35. package/dist/contracts/src/docs/tech/contracts/openapi-export.docblock.d.ts +1 -0
  36. package/dist/contracts/src/docs/tech/contracts/openapi-import.docblock.d.ts +1 -0
  37. package/dist/contracts/src/docs/tech/lifecycle-stage-system.docblock.d.ts +1 -0
  38. package/dist/contracts/src/docs/tech/llm/llm-integration.docblock.d.ts +1 -0
  39. package/dist/contracts/src/docs/tech/mcp-endpoints.docblock.d.ts +1 -0
  40. package/dist/contracts/src/docs/tech/presentation-runtime.docblock.d.ts +1 -0
  41. package/dist/contracts/src/docs/tech/schema/README.docblock.d.ts +1 -0
  42. package/dist/contracts/src/docs/tech/studio/learning-events.docblock.d.ts +1 -0
  43. package/dist/contracts/src/docs/tech/studio/learning-journeys.docblock.d.ts +1 -0
  44. package/dist/contracts/src/docs/tech/studio/platform-admin-panel.docblock.d.ts +1 -0
  45. package/dist/contracts/src/docs/tech/studio/project-access-teams.docblock.d.ts +1 -0
  46. package/dist/contracts/src/docs/tech/studio/project-routing.docblock.d.ts +1 -0
  47. package/dist/contracts/src/docs/tech/studio/sandbox-unlogged.docblock.d.ts +1 -0
  48. package/dist/contracts/src/docs/tech/studio/team-invitations.docblock.d.ts +1 -0
  49. package/dist/contracts/src/docs/tech/studio/workspace-ops.docblock.d.ts +1 -0
  50. package/dist/contracts/src/docs/tech/studio/workspaces.docblock.d.ts +1 -0
  51. package/dist/contracts/src/docs/tech/telemetry-ingest.docblock.d.ts +1 -0
  52. package/dist/contracts/src/docs/tech/vscode-extension.docblock.d.ts +1 -0
  53. package/dist/contracts/src/events.d.ts +25 -0
  54. package/dist/contracts/src/events.d.ts.map +1 -0
  55. package/dist/contracts/src/examples/index.d.ts +4 -0
  56. package/dist/contracts/src/examples/registry.d.ts +2 -0
  57. package/dist/contracts/src/examples/schema.d.ts +2 -0
  58. package/dist/contracts/src/examples/types.d.ts +3 -0
  59. package/dist/contracts/src/examples/validation.d.ts +1 -0
  60. package/dist/contracts/src/experiments/evaluator.d.ts +2 -0
  61. package/dist/contracts/src/experiments/spec-resolver.d.ts +4 -0
  62. package/dist/contracts/src/experiments/spec.d.ts +13 -0
  63. package/dist/contracts/src/experiments/spec.d.ts.map +1 -0
  64. package/dist/contracts/src/features/index.d.ts +4 -0
  65. package/dist/contracts/src/features/install.d.ts +6 -0
  66. package/dist/contracts/src/features/registry.d.ts +2 -0
  67. package/dist/contracts/src/features/types.d.ts +86 -0
  68. package/dist/contracts/src/features/types.d.ts.map +1 -0
  69. package/dist/contracts/src/features/validation.d.ts +2 -0
  70. package/dist/contracts/src/forms/forms.d.ts +3 -0
  71. package/dist/contracts/src/forms/index.d.ts +1 -0
  72. package/dist/contracts/src/index.d.ts +51 -0
  73. package/dist/contracts/src/install.d.ts +7 -0
  74. package/dist/contracts/src/integrations/connection.d.ts +1 -0
  75. package/dist/contracts/src/integrations/index.d.ts +6 -0
  76. package/dist/contracts/src/integrations/openbanking/contracts/accounts.d.ts +4 -0
  77. package/dist/contracts/src/integrations/openbanking/contracts/balances.d.ts +4 -0
  78. package/dist/contracts/src/integrations/openbanking/contracts/index.d.ts +5 -0
  79. package/dist/contracts/src/integrations/openbanking/contracts/transactions.d.ts +4 -0
  80. package/dist/contracts/src/integrations/openbanking/guards.d.ts +1 -0
  81. package/dist/contracts/src/integrations/openbanking/models.d.ts +1 -0
  82. package/dist/contracts/src/integrations/openbanking/openbanking.feature.d.ts +1 -0
  83. package/dist/contracts/src/integrations/operations.d.ts +4 -0
  84. package/dist/contracts/src/integrations/providers/elevenlabs.d.ts +2 -0
  85. package/dist/contracts/src/integrations/providers/gcs-storage.d.ts +2 -0
  86. package/dist/contracts/src/integrations/providers/gmail.d.ts +2 -0
  87. package/dist/contracts/src/integrations/providers/google-calendar.d.ts +2 -0
  88. package/dist/contracts/src/integrations/providers/index.d.ts +11 -0
  89. package/dist/contracts/src/integrations/providers/mistral.d.ts +2 -0
  90. package/dist/contracts/src/integrations/providers/postmark.d.ts +2 -0
  91. package/dist/contracts/src/integrations/providers/powens.d.ts +2 -0
  92. package/dist/contracts/src/integrations/providers/qdrant.d.ts +2 -0
  93. package/dist/contracts/src/integrations/providers/registry.d.ts +1 -0
  94. package/dist/contracts/src/integrations/providers/stripe.d.ts +2 -0
  95. package/dist/contracts/src/integrations/providers/twilio-sms.d.ts +2 -0
  96. package/dist/contracts/src/integrations/spec.d.ts +3 -0
  97. package/dist/contracts/src/jsonschema.d.ts +4 -0
  98. package/dist/contracts/src/knowledge/index.d.ts +2 -0
  99. package/dist/contracts/src/knowledge/operations.d.ts +4 -0
  100. package/dist/contracts/src/knowledge/spaces/email-threads.d.ts +1 -0
  101. package/dist/contracts/src/knowledge/spaces/financial-docs.d.ts +1 -0
  102. package/dist/contracts/src/knowledge/spaces/financial-overview.d.ts +1 -0
  103. package/dist/contracts/src/knowledge/spaces/index.d.ts +6 -0
  104. package/dist/contracts/src/knowledge/spaces/product-canon.d.ts +1 -0
  105. package/dist/contracts/src/knowledge/spaces/support-faq.d.ts +1 -0
  106. package/dist/contracts/src/knowledge/spaces/uploaded-docs.d.ts +1 -0
  107. package/dist/contracts/src/knowledge/spec.d.ts +3 -0
  108. package/dist/contracts/src/llm/exporters.d.ts +7 -0
  109. package/dist/contracts/src/llm/index.d.ts +3 -0
  110. package/dist/contracts/src/llm/prompts.d.ts +2 -0
  111. package/dist/contracts/src/llm/types.d.ts +5 -0
  112. package/dist/contracts/src/migrations.d.ts +1 -0
  113. package/dist/contracts/src/model-registry.d.ts +1 -0
  114. package/dist/contracts/src/onboarding-base.d.ts +2 -0
  115. package/dist/contracts/src/openapi.d.ts +1 -0
  116. package/dist/contracts/src/operations/index.d.ts +2 -0
  117. package/dist/contracts/src/operations/operation.d.ts +170 -0
  118. package/dist/contracts/src/operations/operation.d.ts.map +1 -0
  119. package/dist/contracts/src/operations/registry.d.ts +6 -0
  120. package/dist/contracts/src/ownership.d.ts +61 -0
  121. package/dist/contracts/src/ownership.d.ts.map +1 -0
  122. package/dist/contracts/src/policy/engine.d.ts +3 -0
  123. package/dist/contracts/src/policy/index.d.ts +4 -0
  124. package/dist/contracts/src/policy/opa-adapter.d.ts +3 -0
  125. package/dist/contracts/src/policy/registry.d.ts +2 -0
  126. package/dist/contracts/src/policy/spec.d.ts +11 -0
  127. package/dist/contracts/src/policy/spec.d.ts.map +1 -0
  128. package/dist/contracts/src/presentations/index.d.ts +3 -0
  129. package/dist/contracts/src/presentations/presentations.d.ts +9 -0
  130. package/dist/contracts/src/presentations/presentations.d.ts.map +1 -0
  131. package/dist/contracts/src/presentations/registry.d.ts +2 -0
  132. package/dist/contracts/src/presentations/transform-engine.d.ts +2 -0
  133. package/dist/contracts/src/prompt.d.ts +2 -0
  134. package/dist/contracts/src/promptRegistry.d.ts +2 -0
  135. package/dist/contracts/src/regenerator/adapters.d.ts +1 -0
  136. package/dist/contracts/src/regenerator/executor.d.ts +1 -0
  137. package/dist/contracts/src/regenerator/index.d.ts +6 -0
  138. package/dist/contracts/src/regenerator/service.d.ts +2 -0
  139. package/dist/contracts/src/regenerator/sinks.d.ts +2 -0
  140. package/dist/contracts/src/regenerator/types.d.ts +3 -0
  141. package/dist/contracts/src/regenerator/utils.d.ts +1 -0
  142. package/dist/contracts/src/registry-utils.d.ts +1 -0
  143. package/dist/contracts/src/registry.d.ts +3 -0
  144. package/dist/contracts/src/resources.d.ts +19 -0
  145. package/dist/contracts/src/resources.d.ts.map +1 -0
  146. package/dist/contracts/src/schema-to-markdown.d.ts +1 -0
  147. package/dist/contracts/src/server/graphql-pothos.d.ts +7 -0
  148. package/dist/contracts/src/server/index.d.ts +7 -0
  149. package/dist/contracts/src/server/mcp/createMcpServer.d.ts +5 -0
  150. package/dist/contracts/src/server/mcp/mcpTypes.d.ts +2 -0
  151. package/dist/contracts/src/server/provider-mcp.d.ts +1 -0
  152. package/dist/contracts/src/server/rest-elysia.d.ts +3 -0
  153. package/dist/contracts/src/server/rest-express.d.ts +3 -0
  154. package/dist/contracts/src/server/rest-generic.d.ts +2 -0
  155. package/dist/contracts/src/server/rest-next-app.d.ts +3 -0
  156. package/dist/contracts/src/server/rest-next-pages.d.ts +3 -0
  157. package/dist/contracts/src/telemetry/anomaly.d.ts +2 -0
  158. package/dist/contracts/src/telemetry/index.d.ts +3 -0
  159. package/dist/contracts/src/telemetry/spec.d.ts +2 -0
  160. package/dist/contracts/src/telemetry/tracker.d.ts +2 -0
  161. package/dist/contracts/src/tests/index.d.ts +2 -0
  162. package/dist/contracts/src/tests/runner.d.ts +3 -0
  163. package/dist/contracts/src/tests/spec.d.ts +11 -0
  164. package/dist/contracts/src/tests/spec.d.ts.map +1 -0
  165. package/dist/contracts/src/themes.d.ts +2 -0
  166. package/dist/contracts/src/types.d.ts +5 -0
  167. package/dist/contracts/src/workflow/adapters/db-adapter.d.ts +1 -0
  168. package/dist/contracts/src/workflow/adapters/file-adapter.d.ts +1 -0
  169. package/dist/contracts/src/workflow/adapters/index.d.ts +3 -0
  170. package/dist/contracts/src/workflow/adapters/memory-store.d.ts +1 -0
  171. package/dist/contracts/src/workflow/index.d.ts +5 -0
  172. package/dist/contracts/src/workflow/overview.docblock.d.ts +1 -0
  173. package/dist/contracts/src/workflow/runner.d.ts +5 -0
  174. package/dist/contracts/src/workflow/spec.d.ts +5 -0
  175. package/dist/contracts/src/workflow/state.d.ts +1 -0
  176. package/dist/contracts/src/workflow/validation.d.ts +3 -0
  177. package/dist/contracts/src/workspace-config/contractsrc-schema.d.ts +1 -0
  178. package/dist/contracts/src/workspace-config/index.d.ts +1 -0
  179. package/dist/contracts/src/workspace-config/workspace-config.docblock.d.ts +1 -0
  180. package/dist/docs/feature-flags.docblock.d.ts +1 -0
  181. package/dist/docs/feature-flags.docblock.js +76 -0
  182. package/dist/docs/feature-flags.docblock.js.map +1 -0
  183. package/dist/docs/index.d.ts +1 -0
  184. package/dist/docs/index.js +1 -0
  185. package/dist/entities/index.d.ts +201 -0
  186. package/dist/entities/index.d.ts.map +1 -0
  187. package/dist/entities/index.js +325 -0
  188. package/dist/entities/index.js.map +1 -0
  189. package/dist/evaluation/index.d.ts +163 -0
  190. package/dist/evaluation/index.d.ts.map +1 -0
  191. package/dist/evaluation/index.js +221 -0
  192. package/dist/evaluation/index.js.map +1 -0
  193. package/dist/events.d.ts +628 -0
  194. package/dist/events.d.ts.map +1 -0
  195. package/dist/events.js +536 -0
  196. package/dist/events.js.map +1 -0
  197. package/dist/feature-flags.capability.d.ts +9 -0
  198. package/dist/feature-flags.capability.d.ts.map +1 -0
  199. package/dist/feature-flags.capability.js +25 -0
  200. package/dist/feature-flags.capability.js.map +1 -0
  201. package/dist/feature-flags.feature.d.ts +12 -0
  202. package/dist/feature-flags.feature.d.ts.map +1 -0
  203. package/dist/feature-flags.feature.js +148 -0
  204. package/dist/feature-flags.feature.js.map +1 -0
  205. package/dist/index.d.ts +6 -0
  206. package/dist/index.js +8 -0
  207. package/dist/schema/src/EnumType.d.ts +36 -0
  208. package/dist/schema/src/EnumType.d.ts.map +1 -0
  209. package/dist/schema/src/FieldType.d.ts +30 -0
  210. package/dist/schema/src/FieldType.d.ts.map +1 -0
  211. package/dist/schema/src/GraphQLSchemaType.d.ts +2 -0
  212. package/dist/schema/src/JsonSchemaType.d.ts +2 -0
  213. package/dist/schema/src/ScalarTypeEnum.d.ts +1 -0
  214. package/dist/schema/src/SchemaModel.d.ts +70 -0
  215. package/dist/schema/src/SchemaModel.d.ts.map +1 -0
  216. package/dist/schema/src/SchemaModelType.d.ts +38 -0
  217. package/dist/schema/src/SchemaModelType.d.ts.map +1 -0
  218. package/dist/schema/src/ZodSchemaType.d.ts +2 -0
  219. package/dist/schema/src/entity/defineEntity.d.ts +1 -0
  220. package/dist/schema/src/entity/generator.d.ts +1 -0
  221. package/dist/schema/src/entity/index.d.ts +3 -0
  222. package/dist/schema/src/entity/types.d.ts +146 -0
  223. package/dist/schema/src/entity/types.d.ts.map +1 -0
  224. package/dist/schema/src/index.d.ts +10 -0
  225. package/package.json +74 -0
@@ -0,0 +1,3 @@
1
+ import "../operations/registry.js";
2
+ import "../types.js";
3
+ import "./rest-generic.js";
@@ -0,0 +1,2 @@
1
+ import "../operations/registry.js";
2
+ import "../types.js";
@@ -0,0 +1,3 @@
1
+ import "../operations/registry.js";
2
+ import "../types.js";
3
+ import "./rest-generic.js";
@@ -0,0 +1,3 @@
1
+ import "../operations/registry.js";
2
+ import "../types.js";
3
+ import "./rest-generic.js";
@@ -0,0 +1,2 @@
1
+ import "./spec.js";
2
+ import "./tracker.js";
@@ -0,0 +1,3 @@
1
+ import "./spec.js";
2
+ import "./anomaly.js";
3
+ import "./tracker.js";
@@ -0,0 +1,2 @@
1
+ import "../ownership.js";
2
+ import "../registry.js";
@@ -0,0 +1,2 @@
1
+ import "./spec.js";
2
+ import "./anomaly.js";
@@ -0,0 +1,2 @@
1
+ import { TestSpecRef } from "./spec.js";
2
+ import "./runner.js";
@@ -0,0 +1,3 @@
1
+ import "./spec.js";
2
+ import "../types.js";
3
+ import "../index.js";
@@ -0,0 +1,11 @@
1
+ import "../ownership.js";
2
+
3
+ //#region ../contracts/src/tests/spec.d.ts
4
+
5
+ interface TestSpecRef {
6
+ key: string;
7
+ version?: string;
8
+ }
9
+ //#endregion
10
+ export { TestSpecRef };
11
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","names":[],"sources":["../../../../../contracts/src/tests/spec.ts"],"sourcesContent":[],"mappings":";;;;UAiFiB,WAAA"}
@@ -0,0 +1,2 @@
1
+ import "./ownership.js";
2
+ import "./registry.js";
@@ -0,0 +1,5 @@
1
+ import "./policy/spec.js";
2
+ import "./telemetry/index.js";
3
+ import "./app-config/runtime.js";
4
+ import "./experiments/spec-resolver.js";
5
+ import "./events.js";
@@ -0,0 +1 @@
1
+ import "../state.js";
@@ -0,0 +1 @@
1
+ import "../state.js";
@@ -0,0 +1,3 @@
1
+ import "./memory-store.js";
2
+ import "./db-adapter.js";
3
+ import "./file-adapter.js";
@@ -0,0 +1 @@
1
+ import "../state.js";
@@ -0,0 +1,5 @@
1
+ import "./spec.js";
2
+ import "./validation.js";
3
+ import "./state.js";
4
+ import "./runner.js";
5
+ import "./adapters/index.js";
@@ -0,0 +1 @@
1
+ import "../docs/index.js";
@@ -0,0 +1,5 @@
1
+ import "../features/index.js";
2
+ import "./spec.js";
3
+ import "../app-config/runtime.js";
4
+ import "../types.js";
5
+ import "./state.js";
@@ -0,0 +1,5 @@
1
+ import "../ownership.js";
2
+ import "../capabilities/index.js";
3
+ import "../experiments/spec.js";
4
+ import "../features/index.js";
5
+ import "../registry.js";
@@ -0,0 +1 @@
1
+ import "./spec.js";
@@ -0,0 +1,3 @@
1
+ import "../operations/registry.js";
2
+ import "./spec.js";
3
+ import "../forms/index.js";
@@ -0,0 +1 @@
1
+ import "./contractsrc-schema.js";
@@ -0,0 +1 @@
1
+ import "../docs/index.js";
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,76 @@
1
+ import { registerDocBlocks } from "@contractspec/lib.contracts/docs";
2
+
3
+ //#region src/docs/feature-flags.docblock.ts
4
+ registerDocBlocks([{
5
+ id: "docs.feature-flags.overview",
6
+ title: "Feature Flags & Experiments",
7
+ summary: "Reusable, spec-first feature flag and experiment module with targeting, gradual rollout, multivariate variants, and evaluation logging.",
8
+ kind: "reference",
9
+ visibility: "public",
10
+ route: "/docs/feature-flags/overview",
11
+ tags: [
12
+ "feature-flags",
13
+ "experiments",
14
+ "progressive-delivery"
15
+ ],
16
+ body: `## What this module provides
17
+
18
+ - **Entities**: FeatureFlag, FlagTargetingRule, Experiment, ExperimentAssignment, FlagEvaluation.
19
+ - **Contracts**: create/update/delete/toggle/list/get flags; create/delete rules; evaluate flags; create/start/stop/get experiments.
20
+ - **Events**: flag.created/updated/deleted/toggled, rule.created/deleted, experiment.created/started/stopped, flag.evaluated, experiment.variant_assigned.
21
+ - **Evaluation Engine**: Deterministic evaluator with gradual rollout, rule priority, audience filters, and experiment bucketing.
22
+
23
+ ## How to use
24
+
25
+ 1) Compose schema
26
+ - Add \`featureFlagsSchemaContribution\` to your module composition.
27
+
28
+ 2) Register contracts/events
29
+ - Import exports from \`@contractspec/lib.feature-flags\` into your spec registry.
30
+
31
+ 3) Evaluate at runtime
32
+ - Instantiate \`FlagEvaluator\` with a repository implementation and optional logger.
33
+ - Evaluate with context attributes (userId, orgId, plan, segment, sessionId, attributes).
34
+
35
+ 4) Wire observability
36
+ - Emit audit trail on config changes; emit \`flag.evaluated\` for analytics.
37
+
38
+ ## Usage example
39
+
40
+ \`\`\`ts
41
+ import {
42
+ FlagEvaluator,
43
+ InMemoryFlagRepository,
44
+ } from '@contractspec/lib.feature-flags';
45
+
46
+ const repo = new InMemoryFlagRepository();
47
+ repo.addFlag({
48
+ id: 'flag-1',
49
+ key: 'new_dashboard',
50
+ status: 'GRADUAL',
51
+ defaultValue: false,
52
+ });
53
+
54
+ const evaluator = new FlagEvaluator({ repository: repo });
55
+ const result = await evaluator.evaluate('new_dashboard', {
56
+ userId: 'user-123',
57
+ orgId: 'org-456',
58
+ plan: 'pro',
59
+ });
60
+
61
+ if (result.enabled) {
62
+ // serve the new dashboard
63
+ }
64
+ \`\`\`,
65
+
66
+ ## Guardrails
67
+
68
+ - Keep flag keys stable and human-readable; avoid PII in context.
69
+ - Ensure experiments’ variant percentages sum to 100; default flag status to OFF.
70
+ - Use org-scoped flags for multi-tenant isolation.
71
+ - Log evaluations only when needed to control volume; prefer sampling for noisy paths.
72
+ `
73
+ }]);
74
+
75
+ //#endregion
76
+ //# sourceMappingURL=feature-flags.docblock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flags.docblock.js","names":[],"sources":["../../src/docs/feature-flags.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@contractspec/lib.contracts/docs';\nimport { registerDocBlocks } from '@contractspec/lib.contracts/docs';\n\nconst featureFlagsDocBlocks: DocBlock[] = [\n {\n id: 'docs.feature-flags.overview',\n title: 'Feature Flags & Experiments',\n summary:\n 'Reusable, spec-first feature flag and experiment module with targeting, gradual rollout, multivariate variants, and evaluation logging.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/feature-flags/overview',\n tags: ['feature-flags', 'experiments', 'progressive-delivery'],\n body: `## What this module provides\n\n- **Entities**: FeatureFlag, FlagTargetingRule, Experiment, ExperimentAssignment, FlagEvaluation.\n- **Contracts**: create/update/delete/toggle/list/get flags; create/delete rules; evaluate flags; create/start/stop/get experiments.\n- **Events**: flag.created/updated/deleted/toggled, rule.created/deleted, experiment.created/started/stopped, flag.evaluated, experiment.variant_assigned.\n- **Evaluation Engine**: Deterministic evaluator with gradual rollout, rule priority, audience filters, and experiment bucketing.\n\n## How to use\n\n1) Compose schema\n - Add \\`featureFlagsSchemaContribution\\` to your module composition.\n\n2) Register contracts/events\n - Import exports from \\`@contractspec/lib.feature-flags\\` into your spec registry.\n\n3) Evaluate at runtime\n - Instantiate \\`FlagEvaluator\\` with a repository implementation and optional logger.\n - Evaluate with context attributes (userId, orgId, plan, segment, sessionId, attributes).\n\n4) Wire observability\n - Emit audit trail on config changes; emit \\`flag.evaluated\\` for analytics.\n\n## Usage example\n\n${'```'}ts\nimport {\n FlagEvaluator,\n InMemoryFlagRepository,\n} from '@contractspec/lib.feature-flags';\n\nconst repo = new InMemoryFlagRepository();\nrepo.addFlag({\n id: 'flag-1',\n key: 'new_dashboard',\n status: 'GRADUAL',\n defaultValue: false,\n});\n\nconst evaluator = new FlagEvaluator({ repository: repo });\nconst result = await evaluator.evaluate('new_dashboard', {\n userId: 'user-123',\n orgId: 'org-456',\n plan: 'pro',\n});\n\nif (result.enabled) {\n // serve the new dashboard\n}\n${'```'},\n\n## Guardrails\n\n- Keep flag keys stable and human-readable; avoid PII in context.\n- Ensure experiments’ variant percentages sum to 100; default flag status to OFF.\n- Use org-scoped flags for multi-tenant isolation.\n- Log evaluations only when needed to control volume; prefer sampling for noisy paths.\n`,\n },\n];\n\nregisterDocBlocks(featureFlagsDocBlocks);\n"],"mappings":";;;AAyEA,kBAtE0C,CACxC;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAiB;EAAe;EAAuB;CAC9D,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDP,CACF,CAEuC"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ import "./feature-flags.docblock.js";
@@ -0,0 +1,201 @@
1
+ import { EntityEnumDef, EntityEnumField, EntityRelationField, EntityScalarField, EntitySpec, ModuleSchemaContribution } from "../schema/src/entity/types.js";
2
+ import "../schema/src/index.js";
3
+
4
+ //#region src/entities/index.d.ts
5
+ /**
6
+ * Feature flag status enum.
7
+ */
8
+ declare const FlagStatusEnum: EntityEnumDef;
9
+ /**
10
+ * Targeting rule operator enum.
11
+ */
12
+ declare const RuleOperatorEnum: EntityEnumDef;
13
+ /**
14
+ * Experiment status enum.
15
+ */
16
+ declare const ExperimentStatusEnum: EntityEnumDef;
17
+ /**
18
+ * FeatureFlag entity - defines a feature flag.
19
+ */
20
+ declare const FeatureFlagEntity: EntitySpec<{
21
+ id: EntityScalarField;
22
+ key: EntityScalarField;
23
+ name: EntityScalarField;
24
+ description: EntityScalarField;
25
+ status: EntityEnumField;
26
+ defaultValue: EntityScalarField;
27
+ variants: EntityScalarField;
28
+ orgId: EntityScalarField;
29
+ tags: EntityScalarField;
30
+ metadata: EntityScalarField;
31
+ createdAt: EntityScalarField;
32
+ updatedAt: EntityScalarField;
33
+ targetingRules: EntityRelationField;
34
+ experiments: EntityRelationField;
35
+ evaluations: EntityRelationField;
36
+ }>;
37
+ /**
38
+ * FlagTargetingRule entity - conditions for targeting.
39
+ */
40
+ declare const FlagTargetingRuleEntity: EntitySpec<{
41
+ id: EntityScalarField;
42
+ flagId: EntityScalarField;
43
+ name: EntityScalarField;
44
+ priority: EntityScalarField;
45
+ enabled: EntityScalarField;
46
+ attribute: EntityScalarField;
47
+ operator: EntityEnumField;
48
+ value: EntityScalarField;
49
+ rolloutPercentage: EntityScalarField;
50
+ serveValue: EntityScalarField;
51
+ serveVariant: EntityScalarField;
52
+ createdAt: EntityScalarField;
53
+ updatedAt: EntityScalarField;
54
+ flag: EntityRelationField;
55
+ }>;
56
+ /**
57
+ * Experiment entity - A/B test configuration.
58
+ */
59
+ declare const ExperimentEntity: EntitySpec<{
60
+ id: EntityScalarField;
61
+ key: EntityScalarField;
62
+ name: EntityScalarField;
63
+ description: EntityScalarField;
64
+ hypothesis: EntityScalarField;
65
+ flagId: EntityScalarField;
66
+ status: EntityEnumField;
67
+ variants: EntityScalarField;
68
+ metrics: EntityScalarField;
69
+ audiencePercentage: EntityScalarField;
70
+ audienceFilter: EntityScalarField;
71
+ scheduledStartAt: EntityScalarField;
72
+ scheduledEndAt: EntityScalarField;
73
+ startedAt: EntityScalarField;
74
+ endedAt: EntityScalarField;
75
+ winningVariant: EntityScalarField;
76
+ results: EntityScalarField;
77
+ orgId: EntityScalarField;
78
+ createdAt: EntityScalarField;
79
+ updatedAt: EntityScalarField;
80
+ flag: EntityRelationField;
81
+ assignments: EntityRelationField;
82
+ }>;
83
+ /**
84
+ * ExperimentAssignment entity - tracks which variant a subject is assigned to.
85
+ */
86
+ declare const ExperimentAssignmentEntity: EntitySpec<{
87
+ id: EntityScalarField;
88
+ experimentId: EntityScalarField;
89
+ subjectType: EntityScalarField;
90
+ subjectId: EntityScalarField;
91
+ variant: EntityScalarField;
92
+ bucket: EntityScalarField;
93
+ context: EntityScalarField;
94
+ assignedAt: EntityScalarField;
95
+ experiment: EntityRelationField;
96
+ }>;
97
+ /**
98
+ * FlagEvaluation entity - evaluation log for analytics.
99
+ */
100
+ declare const FlagEvaluationEntity: EntitySpec<{
101
+ id: EntityScalarField;
102
+ flagId: EntityScalarField;
103
+ flagKey: EntityScalarField;
104
+ subjectType: EntityScalarField;
105
+ subjectId: EntityScalarField;
106
+ result: EntityScalarField;
107
+ variant: EntityScalarField;
108
+ matchedRuleId: EntityScalarField;
109
+ reason: EntityScalarField;
110
+ context: EntityScalarField;
111
+ evaluatedAt: EntityScalarField;
112
+ flag: EntityRelationField;
113
+ }>;
114
+ /**
115
+ * All feature flag entities for schema composition.
116
+ */
117
+ declare const featureFlagEntities: (EntitySpec<{
118
+ id: EntityScalarField;
119
+ key: EntityScalarField;
120
+ name: EntityScalarField;
121
+ description: EntityScalarField;
122
+ status: EntityEnumField;
123
+ defaultValue: EntityScalarField;
124
+ variants: EntityScalarField;
125
+ orgId: EntityScalarField;
126
+ tags: EntityScalarField;
127
+ metadata: EntityScalarField;
128
+ createdAt: EntityScalarField;
129
+ updatedAt: EntityScalarField;
130
+ targetingRules: EntityRelationField;
131
+ experiments: EntityRelationField;
132
+ evaluations: EntityRelationField;
133
+ }> | EntitySpec<{
134
+ id: EntityScalarField;
135
+ flagId: EntityScalarField;
136
+ name: EntityScalarField;
137
+ priority: EntityScalarField;
138
+ enabled: EntityScalarField;
139
+ attribute: EntityScalarField;
140
+ operator: EntityEnumField;
141
+ value: EntityScalarField;
142
+ rolloutPercentage: EntityScalarField;
143
+ serveValue: EntityScalarField;
144
+ serveVariant: EntityScalarField;
145
+ createdAt: EntityScalarField;
146
+ updatedAt: EntityScalarField;
147
+ flag: EntityRelationField;
148
+ }> | EntitySpec<{
149
+ id: EntityScalarField;
150
+ key: EntityScalarField;
151
+ name: EntityScalarField;
152
+ description: EntityScalarField;
153
+ hypothesis: EntityScalarField;
154
+ flagId: EntityScalarField;
155
+ status: EntityEnumField;
156
+ variants: EntityScalarField;
157
+ metrics: EntityScalarField;
158
+ audiencePercentage: EntityScalarField;
159
+ audienceFilter: EntityScalarField;
160
+ scheduledStartAt: EntityScalarField;
161
+ scheduledEndAt: EntityScalarField;
162
+ startedAt: EntityScalarField;
163
+ endedAt: EntityScalarField;
164
+ winningVariant: EntityScalarField;
165
+ results: EntityScalarField;
166
+ orgId: EntityScalarField;
167
+ createdAt: EntityScalarField;
168
+ updatedAt: EntityScalarField;
169
+ flag: EntityRelationField;
170
+ assignments: EntityRelationField;
171
+ }> | EntitySpec<{
172
+ id: EntityScalarField;
173
+ experimentId: EntityScalarField;
174
+ subjectType: EntityScalarField;
175
+ subjectId: EntityScalarField;
176
+ variant: EntityScalarField;
177
+ bucket: EntityScalarField;
178
+ context: EntityScalarField;
179
+ assignedAt: EntityScalarField;
180
+ experiment: EntityRelationField;
181
+ }> | EntitySpec<{
182
+ id: EntityScalarField;
183
+ flagId: EntityScalarField;
184
+ flagKey: EntityScalarField;
185
+ subjectType: EntityScalarField;
186
+ subjectId: EntityScalarField;
187
+ result: EntityScalarField;
188
+ variant: EntityScalarField;
189
+ matchedRuleId: EntityScalarField;
190
+ reason: EntityScalarField;
191
+ context: EntityScalarField;
192
+ evaluatedAt: EntityScalarField;
193
+ flag: EntityRelationField;
194
+ }>)[];
195
+ /**
196
+ * Module schema contribution for feature flags.
197
+ */
198
+ declare const featureFlagsSchemaContribution: ModuleSchemaContribution;
199
+ //#endregion
200
+ export { ExperimentAssignmentEntity, ExperimentEntity, ExperimentStatusEnum, FeatureFlagEntity, FlagEvaluationEntity, FlagStatusEnum, FlagTargetingRuleEntity, RuleOperatorEnum, featureFlagEntities, featureFlagsSchemaContribution };
201
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/entities/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAWa,cAAA,cAKX,EAAA,aAAA;AAKF;AAsBA;AAUA;AA4DE,cA5FW,gBA4FX,EA3EA,aA2EA;;;;cAtEW,sBAKX;;;;cAKW;MA4DX;;;;;;;EA5D4B,KAAA,mBAAA;EAiEjB,IAAA,mBAyDX;EAAA,QAAA,mBAAA;;;;;;;;;;cAzDW;MAyDX;;;;EAzDkC,OAAA,mBAAA;EA8DvB,SAAA,mBA2FX;EAAA,QAAA,iBAAA;;;;;;;;;;;;cA3FW;MA2FX;;;;;;;;;;EA3F2B,cAAA,mBAAA;EAgGhB,gBAAA,mBAuCX;EAAA,cAAA,mBAAA;;;;;;;;;;CAvCqC,CAAA;AA4CvC;;;cA5Ca;MAuCX;;;;;;;;;;;AA+DF;;cA1Da;MAqDX;;;;;;;;;;;;;;;;cAKW;MAMZ;;;;;;;;;;;;;;;;MAN+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWnB,MAAA,mBAAgC;;;;;;;;;;;;;;;;;;;;;cAAhC,gCAAgC"}