@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,908 @@
1
+ import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
2
+ import { defineCommand, defineQuery } from "@contractspec/lib.contracts";
3
+
4
+ //#region src/contracts/index.ts
5
+ const OWNERS = ["platform.feature-flags"];
6
+ const FeatureFlagModel = defineSchemaModel({
7
+ name: "FeatureFlag",
8
+ description: "Represents a feature flag",
9
+ fields: {
10
+ id: {
11
+ type: ScalarTypeEnum.String_unsecure(),
12
+ isOptional: false
13
+ },
14
+ key: {
15
+ type: ScalarTypeEnum.String_unsecure(),
16
+ isOptional: false
17
+ },
18
+ name: {
19
+ type: ScalarTypeEnum.String_unsecure(),
20
+ isOptional: false
21
+ },
22
+ description: {
23
+ type: ScalarTypeEnum.String_unsecure(),
24
+ isOptional: true
25
+ },
26
+ status: {
27
+ type: ScalarTypeEnum.String_unsecure(),
28
+ isOptional: false
29
+ },
30
+ defaultValue: {
31
+ type: ScalarTypeEnum.Boolean(),
32
+ isOptional: false
33
+ },
34
+ variants: {
35
+ type: ScalarTypeEnum.JSON(),
36
+ isOptional: true
37
+ },
38
+ orgId: {
39
+ type: ScalarTypeEnum.String_unsecure(),
40
+ isOptional: true
41
+ },
42
+ tags: {
43
+ type: ScalarTypeEnum.JSON(),
44
+ isOptional: true
45
+ },
46
+ createdAt: {
47
+ type: ScalarTypeEnum.DateTime(),
48
+ isOptional: false
49
+ },
50
+ updatedAt: {
51
+ type: ScalarTypeEnum.DateTime(),
52
+ isOptional: false
53
+ }
54
+ }
55
+ });
56
+ const TargetingRuleModel = defineSchemaModel({
57
+ name: "TargetingRule",
58
+ description: "Represents a targeting rule",
59
+ fields: {
60
+ id: {
61
+ type: ScalarTypeEnum.String_unsecure(),
62
+ isOptional: false
63
+ },
64
+ flagId: {
65
+ type: ScalarTypeEnum.String_unsecure(),
66
+ isOptional: false
67
+ },
68
+ name: {
69
+ type: ScalarTypeEnum.String_unsecure(),
70
+ isOptional: true
71
+ },
72
+ priority: {
73
+ type: ScalarTypeEnum.Int_unsecure(),
74
+ isOptional: false
75
+ },
76
+ enabled: {
77
+ type: ScalarTypeEnum.Boolean(),
78
+ isOptional: false
79
+ },
80
+ attribute: {
81
+ type: ScalarTypeEnum.String_unsecure(),
82
+ isOptional: false
83
+ },
84
+ operator: {
85
+ type: ScalarTypeEnum.String_unsecure(),
86
+ isOptional: false
87
+ },
88
+ value: {
89
+ type: ScalarTypeEnum.JSON(),
90
+ isOptional: false
91
+ },
92
+ rolloutPercentage: {
93
+ type: ScalarTypeEnum.Int_unsecure(),
94
+ isOptional: true
95
+ },
96
+ serveValue: {
97
+ type: ScalarTypeEnum.Boolean(),
98
+ isOptional: true
99
+ },
100
+ serveVariant: {
101
+ type: ScalarTypeEnum.String_unsecure(),
102
+ isOptional: true
103
+ }
104
+ }
105
+ });
106
+ const ExperimentModel = defineSchemaModel({
107
+ name: "Experiment",
108
+ description: "Represents an experiment",
109
+ fields: {
110
+ id: {
111
+ type: ScalarTypeEnum.String_unsecure(),
112
+ isOptional: false
113
+ },
114
+ key: {
115
+ type: ScalarTypeEnum.String_unsecure(),
116
+ isOptional: false
117
+ },
118
+ name: {
119
+ type: ScalarTypeEnum.String_unsecure(),
120
+ isOptional: false
121
+ },
122
+ description: {
123
+ type: ScalarTypeEnum.String_unsecure(),
124
+ isOptional: true
125
+ },
126
+ hypothesis: {
127
+ type: ScalarTypeEnum.String_unsecure(),
128
+ isOptional: true
129
+ },
130
+ flagId: {
131
+ type: ScalarTypeEnum.String_unsecure(),
132
+ isOptional: false
133
+ },
134
+ status: {
135
+ type: ScalarTypeEnum.String_unsecure(),
136
+ isOptional: false
137
+ },
138
+ variants: {
139
+ type: ScalarTypeEnum.JSON(),
140
+ isOptional: false
141
+ },
142
+ metrics: {
143
+ type: ScalarTypeEnum.JSON(),
144
+ isOptional: true
145
+ },
146
+ audiencePercentage: {
147
+ type: ScalarTypeEnum.Int_unsecure(),
148
+ isOptional: false
149
+ },
150
+ startedAt: {
151
+ type: ScalarTypeEnum.DateTime(),
152
+ isOptional: true
153
+ },
154
+ endedAt: {
155
+ type: ScalarTypeEnum.DateTime(),
156
+ isOptional: true
157
+ },
158
+ winningVariant: {
159
+ type: ScalarTypeEnum.String_unsecure(),
160
+ isOptional: true
161
+ },
162
+ results: {
163
+ type: ScalarTypeEnum.JSON(),
164
+ isOptional: true
165
+ },
166
+ createdAt: {
167
+ type: ScalarTypeEnum.DateTime(),
168
+ isOptional: false
169
+ }
170
+ }
171
+ });
172
+ const EvaluationResultModel = defineSchemaModel({
173
+ name: "EvaluationResult",
174
+ description: "Result of flag evaluation",
175
+ fields: {
176
+ enabled: {
177
+ type: ScalarTypeEnum.Boolean(),
178
+ isOptional: false
179
+ },
180
+ variant: {
181
+ type: ScalarTypeEnum.String_unsecure(),
182
+ isOptional: true
183
+ },
184
+ reason: {
185
+ type: ScalarTypeEnum.String_unsecure(),
186
+ isOptional: false
187
+ },
188
+ ruleId: {
189
+ type: ScalarTypeEnum.String_unsecure(),
190
+ isOptional: true
191
+ },
192
+ experimentId: {
193
+ type: ScalarTypeEnum.String_unsecure(),
194
+ isOptional: true
195
+ }
196
+ }
197
+ });
198
+ const CreateFlagInput = defineSchemaModel({
199
+ name: "CreateFlagInput",
200
+ description: "Input for creating a feature flag",
201
+ fields: {
202
+ key: {
203
+ type: ScalarTypeEnum.String_unsecure(),
204
+ isOptional: false
205
+ },
206
+ name: {
207
+ type: ScalarTypeEnum.String_unsecure(),
208
+ isOptional: false
209
+ },
210
+ description: {
211
+ type: ScalarTypeEnum.String_unsecure(),
212
+ isOptional: true
213
+ },
214
+ defaultValue: {
215
+ type: ScalarTypeEnum.Boolean(),
216
+ isOptional: true
217
+ },
218
+ variants: {
219
+ type: ScalarTypeEnum.JSON(),
220
+ isOptional: true
221
+ },
222
+ orgId: {
223
+ type: ScalarTypeEnum.String_unsecure(),
224
+ isOptional: true
225
+ },
226
+ tags: {
227
+ type: ScalarTypeEnum.JSON(),
228
+ isOptional: true
229
+ }
230
+ }
231
+ });
232
+ const UpdateFlagInput = defineSchemaModel({
233
+ name: "UpdateFlagInput",
234
+ description: "Input for updating a feature flag",
235
+ fields: {
236
+ flagId: {
237
+ type: ScalarTypeEnum.String_unsecure(),
238
+ isOptional: false
239
+ },
240
+ name: {
241
+ type: ScalarTypeEnum.String_unsecure(),
242
+ isOptional: true
243
+ },
244
+ description: {
245
+ type: ScalarTypeEnum.String_unsecure(),
246
+ isOptional: true
247
+ },
248
+ defaultValue: {
249
+ type: ScalarTypeEnum.Boolean(),
250
+ isOptional: true
251
+ },
252
+ variants: {
253
+ type: ScalarTypeEnum.JSON(),
254
+ isOptional: true
255
+ },
256
+ tags: {
257
+ type: ScalarTypeEnum.JSON(),
258
+ isOptional: true
259
+ }
260
+ }
261
+ });
262
+ const DeleteFlagInput = defineSchemaModel({
263
+ name: "DeleteFlagInput",
264
+ description: "Input for deleting a feature flag",
265
+ fields: { flagId: {
266
+ type: ScalarTypeEnum.String_unsecure(),
267
+ isOptional: false
268
+ } }
269
+ });
270
+ const ToggleFlagInput = defineSchemaModel({
271
+ name: "ToggleFlagInput",
272
+ description: "Input for toggling a feature flag",
273
+ fields: {
274
+ flagId: {
275
+ type: ScalarTypeEnum.String_unsecure(),
276
+ isOptional: false
277
+ },
278
+ status: {
279
+ type: ScalarTypeEnum.String_unsecure(),
280
+ isOptional: false
281
+ }
282
+ }
283
+ });
284
+ const GetFlagInput = defineSchemaModel({
285
+ name: "GetFlagInput",
286
+ description: "Input for getting a feature flag",
287
+ fields: {
288
+ key: {
289
+ type: ScalarTypeEnum.String_unsecure(),
290
+ isOptional: false
291
+ },
292
+ orgId: {
293
+ type: ScalarTypeEnum.String_unsecure(),
294
+ isOptional: true
295
+ }
296
+ }
297
+ });
298
+ const ListFlagsInput = defineSchemaModel({
299
+ name: "ListFlagsInput",
300
+ description: "Input for listing feature flags",
301
+ fields: {
302
+ orgId: {
303
+ type: ScalarTypeEnum.String_unsecure(),
304
+ isOptional: true
305
+ },
306
+ status: {
307
+ type: ScalarTypeEnum.String_unsecure(),
308
+ isOptional: true
309
+ },
310
+ tags: {
311
+ type: ScalarTypeEnum.JSON(),
312
+ isOptional: true
313
+ },
314
+ limit: {
315
+ type: ScalarTypeEnum.Int_unsecure(),
316
+ isOptional: true
317
+ },
318
+ offset: {
319
+ type: ScalarTypeEnum.Int_unsecure(),
320
+ isOptional: true
321
+ }
322
+ }
323
+ });
324
+ const ListFlagsOutput = defineSchemaModel({
325
+ name: "ListFlagsOutput",
326
+ description: "Output for listing feature flags",
327
+ fields: {
328
+ flags: {
329
+ type: FeatureFlagModel,
330
+ isArray: true,
331
+ isOptional: false
332
+ },
333
+ total: {
334
+ type: ScalarTypeEnum.Int_unsecure(),
335
+ isOptional: false
336
+ }
337
+ }
338
+ });
339
+ const EvaluateFlagInput = defineSchemaModel({
340
+ name: "EvaluateFlagInput",
341
+ description: "Input for evaluating a feature flag",
342
+ fields: {
343
+ key: {
344
+ type: ScalarTypeEnum.String_unsecure(),
345
+ isOptional: false
346
+ },
347
+ context: {
348
+ type: ScalarTypeEnum.JSON(),
349
+ isOptional: false
350
+ }
351
+ }
352
+ });
353
+ const CreateRuleInput = defineSchemaModel({
354
+ name: "CreateRuleInput",
355
+ description: "Input for creating a targeting rule",
356
+ fields: {
357
+ flagId: {
358
+ type: ScalarTypeEnum.String_unsecure(),
359
+ isOptional: false
360
+ },
361
+ name: {
362
+ type: ScalarTypeEnum.String_unsecure(),
363
+ isOptional: true
364
+ },
365
+ priority: {
366
+ type: ScalarTypeEnum.Int_unsecure(),
367
+ isOptional: true
368
+ },
369
+ attribute: {
370
+ type: ScalarTypeEnum.String_unsecure(),
371
+ isOptional: false
372
+ },
373
+ operator: {
374
+ type: ScalarTypeEnum.String_unsecure(),
375
+ isOptional: false
376
+ },
377
+ value: {
378
+ type: ScalarTypeEnum.JSON(),
379
+ isOptional: false
380
+ },
381
+ rolloutPercentage: {
382
+ type: ScalarTypeEnum.Int_unsecure(),
383
+ isOptional: true
384
+ },
385
+ serveValue: {
386
+ type: ScalarTypeEnum.Boolean(),
387
+ isOptional: true
388
+ },
389
+ serveVariant: {
390
+ type: ScalarTypeEnum.String_unsecure(),
391
+ isOptional: true
392
+ }
393
+ }
394
+ });
395
+ const DeleteRuleInput = defineSchemaModel({
396
+ name: "DeleteRuleInput",
397
+ description: "Input for deleting a targeting rule",
398
+ fields: { ruleId: {
399
+ type: ScalarTypeEnum.String_unsecure(),
400
+ isOptional: false
401
+ } }
402
+ });
403
+ const CreateExperimentInput = defineSchemaModel({
404
+ name: "CreateExperimentInput",
405
+ description: "Input for creating an experiment",
406
+ fields: {
407
+ key: {
408
+ type: ScalarTypeEnum.String_unsecure(),
409
+ isOptional: false
410
+ },
411
+ name: {
412
+ type: ScalarTypeEnum.String_unsecure(),
413
+ isOptional: false
414
+ },
415
+ description: {
416
+ type: ScalarTypeEnum.String_unsecure(),
417
+ isOptional: true
418
+ },
419
+ hypothesis: {
420
+ type: ScalarTypeEnum.String_unsecure(),
421
+ isOptional: true
422
+ },
423
+ flagId: {
424
+ type: ScalarTypeEnum.String_unsecure(),
425
+ isOptional: false
426
+ },
427
+ variants: {
428
+ type: ScalarTypeEnum.JSON(),
429
+ isOptional: false
430
+ },
431
+ metrics: {
432
+ type: ScalarTypeEnum.JSON(),
433
+ isOptional: true
434
+ },
435
+ audiencePercentage: {
436
+ type: ScalarTypeEnum.Int_unsecure(),
437
+ isOptional: true
438
+ },
439
+ scheduledStartAt: {
440
+ type: ScalarTypeEnum.DateTime(),
441
+ isOptional: true
442
+ },
443
+ scheduledEndAt: {
444
+ type: ScalarTypeEnum.DateTime(),
445
+ isOptional: true
446
+ },
447
+ orgId: {
448
+ type: ScalarTypeEnum.String_unsecure(),
449
+ isOptional: true
450
+ }
451
+ }
452
+ });
453
+ const StartExperimentInput = defineSchemaModel({
454
+ name: "StartExperimentInput",
455
+ description: "Input for starting an experiment",
456
+ fields: { experimentId: {
457
+ type: ScalarTypeEnum.String_unsecure(),
458
+ isOptional: false
459
+ } }
460
+ });
461
+ const StopExperimentInput = defineSchemaModel({
462
+ name: "StopExperimentInput",
463
+ description: "Input for stopping an experiment",
464
+ fields: {
465
+ experimentId: {
466
+ type: ScalarTypeEnum.String_unsecure(),
467
+ isOptional: false
468
+ },
469
+ reason: {
470
+ type: ScalarTypeEnum.String_unsecure(),
471
+ isOptional: false
472
+ },
473
+ winningVariant: {
474
+ type: ScalarTypeEnum.String_unsecure(),
475
+ isOptional: true
476
+ }
477
+ }
478
+ });
479
+ const GetExperimentInput = defineSchemaModel({
480
+ name: "GetExperimentInput",
481
+ description: "Input for getting an experiment",
482
+ fields: { experimentId: {
483
+ type: ScalarTypeEnum.String_unsecure(),
484
+ isOptional: false
485
+ } }
486
+ });
487
+ const SuccessOutput = defineSchemaModel({
488
+ name: "SuccessOutput",
489
+ description: "Generic success output",
490
+ fields: { success: {
491
+ type: ScalarTypeEnum.Boolean(),
492
+ isOptional: false
493
+ } }
494
+ });
495
+ /**
496
+ * Create a feature flag.
497
+ */
498
+ const CreateFlagContract = defineCommand({
499
+ meta: {
500
+ key: "flag.create",
501
+ version: "1.0.0",
502
+ stability: "stable",
503
+ owners: [...OWNERS],
504
+ tags: ["feature-flags", "create"],
505
+ description: "Create a new feature flag.",
506
+ goal: "Define a new feature flag for toggling features.",
507
+ context: "Called when setting up a new feature flag."
508
+ },
509
+ io: {
510
+ input: CreateFlagInput,
511
+ output: FeatureFlagModel,
512
+ errors: { KEY_ALREADY_EXISTS: {
513
+ description: "Flag key already exists",
514
+ http: 409,
515
+ gqlCode: "FLAG_KEY_EXISTS",
516
+ when: "A flag with this key already exists"
517
+ } }
518
+ },
519
+ policy: { auth: "admin" }
520
+ });
521
+ /**
522
+ * Update a feature flag.
523
+ */
524
+ const UpdateFlagContract = defineCommand({
525
+ meta: {
526
+ key: "flag.update",
527
+ version: "1.0.0",
528
+ stability: "stable",
529
+ owners: [...OWNERS],
530
+ tags: ["feature-flags", "update"],
531
+ description: "Update an existing feature flag.",
532
+ goal: "Modify flag configuration.",
533
+ context: "Called when adjusting flag settings."
534
+ },
535
+ io: {
536
+ input: UpdateFlagInput,
537
+ output: FeatureFlagModel,
538
+ errors: { FLAG_NOT_FOUND: {
539
+ description: "Flag does not exist",
540
+ http: 404,
541
+ gqlCode: "FLAG_NOT_FOUND",
542
+ when: "Flag ID is invalid"
543
+ } }
544
+ },
545
+ policy: { auth: "admin" }
546
+ });
547
+ /**
548
+ * Delete a feature flag.
549
+ */
550
+ const DeleteFlagContract = defineCommand({
551
+ meta: {
552
+ key: "flag.delete",
553
+ version: "1.0.0",
554
+ stability: "stable",
555
+ owners: [...OWNERS],
556
+ tags: ["feature-flags", "delete"],
557
+ description: "Delete a feature flag.",
558
+ goal: "Remove a feature flag and all its rules.",
559
+ context: "Called when a flag is no longer needed."
560
+ },
561
+ io: {
562
+ input: DeleteFlagInput,
563
+ output: SuccessOutput,
564
+ errors: {
565
+ FLAG_NOT_FOUND: {
566
+ description: "Flag does not exist",
567
+ http: 404,
568
+ gqlCode: "FLAG_NOT_FOUND",
569
+ when: "Flag ID is invalid"
570
+ },
571
+ FLAG_HAS_ACTIVE_EXPERIMENT: {
572
+ description: "Flag has an active experiment",
573
+ http: 409,
574
+ gqlCode: "FLAG_HAS_ACTIVE_EXPERIMENT",
575
+ when: "Cannot delete flag with running experiment"
576
+ }
577
+ }
578
+ },
579
+ policy: { auth: "admin" }
580
+ });
581
+ /**
582
+ * Toggle a feature flag status.
583
+ */
584
+ const ToggleFlagContract = defineCommand({
585
+ meta: {
586
+ key: "flag.toggle",
587
+ version: "1.0.0",
588
+ stability: "stable",
589
+ owners: [...OWNERS],
590
+ tags: ["feature-flags", "toggle"],
591
+ description: "Toggle a feature flag status.",
592
+ goal: "Quickly enable or disable a feature.",
593
+ context: "Called when turning a feature on or off."
594
+ },
595
+ io: {
596
+ input: ToggleFlagInput,
597
+ output: FeatureFlagModel,
598
+ errors: {
599
+ FLAG_NOT_FOUND: {
600
+ description: "Flag does not exist",
601
+ http: 404,
602
+ gqlCode: "FLAG_NOT_FOUND",
603
+ when: "Flag ID is invalid"
604
+ },
605
+ INVALID_STATUS: {
606
+ description: "Invalid status value",
607
+ http: 400,
608
+ gqlCode: "INVALID_STATUS",
609
+ when: "Status must be OFF, ON, or GRADUAL"
610
+ }
611
+ }
612
+ },
613
+ policy: { auth: "admin" }
614
+ });
615
+ /**
616
+ * Get a feature flag by key.
617
+ */
618
+ const GetFlagContract = defineQuery({
619
+ meta: {
620
+ key: "flag.get",
621
+ version: "1.0.0",
622
+ stability: "stable",
623
+ owners: [...OWNERS],
624
+ tags: ["feature-flags", "get"],
625
+ description: "Get a feature flag by key.",
626
+ goal: "Retrieve flag configuration.",
627
+ context: "Called to inspect flag details."
628
+ },
629
+ io: {
630
+ input: GetFlagInput,
631
+ output: FeatureFlagModel,
632
+ errors: { FLAG_NOT_FOUND: {
633
+ description: "Flag does not exist",
634
+ http: 404,
635
+ gqlCode: "FLAG_NOT_FOUND",
636
+ when: "Flag key is invalid"
637
+ } }
638
+ },
639
+ policy: { auth: "user" }
640
+ });
641
+ /**
642
+ * List feature flags.
643
+ */
644
+ const ListFlagsContract = defineQuery({
645
+ meta: {
646
+ key: "flag.list",
647
+ version: "1.0.0",
648
+ stability: "stable",
649
+ owners: [...OWNERS],
650
+ tags: ["feature-flags", "list"],
651
+ description: "List all feature flags.",
652
+ goal: "View all configured flags.",
653
+ context: "Admin dashboard."
654
+ },
655
+ io: {
656
+ input: ListFlagsInput,
657
+ output: ListFlagsOutput
658
+ },
659
+ policy: { auth: "admin" }
660
+ });
661
+ /**
662
+ * Evaluate a feature flag.
663
+ */
664
+ const EvaluateFlagContract = defineQuery({
665
+ meta: {
666
+ key: "flag.evaluate",
667
+ version: "1.0.0",
668
+ stability: "stable",
669
+ owners: [...OWNERS],
670
+ tags: ["feature-flags", "evaluate"],
671
+ description: "Evaluate a feature flag for a given context.",
672
+ goal: "Determine if a feature should be enabled.",
673
+ context: "Called at runtime to check feature availability."
674
+ },
675
+ io: {
676
+ input: EvaluateFlagInput,
677
+ output: EvaluationResultModel,
678
+ errors: { FLAG_NOT_FOUND: {
679
+ description: "Flag does not exist",
680
+ http: 404,
681
+ gqlCode: "FLAG_NOT_FOUND",
682
+ when: "Flag key is invalid"
683
+ } }
684
+ },
685
+ policy: { auth: "anonymous" }
686
+ });
687
+ /**
688
+ * Create a targeting rule.
689
+ */
690
+ const CreateRuleContract = defineCommand({
691
+ meta: {
692
+ key: "flag.rule.create",
693
+ version: "1.0.0",
694
+ stability: "stable",
695
+ owners: [...OWNERS],
696
+ tags: [
697
+ "feature-flags",
698
+ "rule",
699
+ "create"
700
+ ],
701
+ description: "Create a targeting rule for a flag.",
702
+ goal: "Add conditional targeting to a flag.",
703
+ context: "Called when setting up targeting."
704
+ },
705
+ io: {
706
+ input: CreateRuleInput,
707
+ output: TargetingRuleModel,
708
+ errors: {
709
+ FLAG_NOT_FOUND: {
710
+ description: "Flag does not exist",
711
+ http: 404,
712
+ gqlCode: "FLAG_NOT_FOUND",
713
+ when: "Flag ID is invalid"
714
+ },
715
+ INVALID_OPERATOR: {
716
+ description: "Invalid operator",
717
+ http: 400,
718
+ gqlCode: "INVALID_OPERATOR",
719
+ when: "Operator is not supported"
720
+ }
721
+ }
722
+ },
723
+ policy: { auth: "admin" }
724
+ });
725
+ /**
726
+ * Delete a targeting rule.
727
+ */
728
+ const DeleteRuleContract = defineCommand({
729
+ meta: {
730
+ key: "flag.rule.delete",
731
+ version: "1.0.0",
732
+ stability: "stable",
733
+ owners: [...OWNERS],
734
+ tags: [
735
+ "feature-flags",
736
+ "rule",
737
+ "delete"
738
+ ],
739
+ description: "Delete a targeting rule.",
740
+ goal: "Remove a targeting rule from a flag.",
741
+ context: "Called when removing targeting conditions."
742
+ },
743
+ io: {
744
+ input: DeleteRuleInput,
745
+ output: SuccessOutput,
746
+ errors: { RULE_NOT_FOUND: {
747
+ description: "Rule does not exist",
748
+ http: 404,
749
+ gqlCode: "RULE_NOT_FOUND",
750
+ when: "Rule ID is invalid"
751
+ } }
752
+ },
753
+ policy: { auth: "admin" }
754
+ });
755
+ /**
756
+ * Create an experiment.
757
+ */
758
+ const CreateExperimentContract = defineCommand({
759
+ meta: {
760
+ key: "experiment.create",
761
+ version: "1.0.0",
762
+ stability: "stable",
763
+ owners: [...OWNERS],
764
+ tags: [
765
+ "feature-flags",
766
+ "experiment",
767
+ "create"
768
+ ],
769
+ description: "Create an A/B test experiment.",
770
+ goal: "Set up an experiment with variants.",
771
+ context: "Called when setting up A/B testing."
772
+ },
773
+ io: {
774
+ input: CreateExperimentInput,
775
+ output: ExperimentModel,
776
+ errors: {
777
+ FLAG_NOT_FOUND: {
778
+ description: "Flag does not exist",
779
+ http: 404,
780
+ gqlCode: "FLAG_NOT_FOUND",
781
+ when: "Flag ID is invalid"
782
+ },
783
+ EXPERIMENT_KEY_EXISTS: {
784
+ description: "Experiment key already exists",
785
+ http: 409,
786
+ gqlCode: "EXPERIMENT_KEY_EXISTS",
787
+ when: "An experiment with this key already exists"
788
+ },
789
+ INVALID_VARIANTS: {
790
+ description: "Invalid variant configuration",
791
+ http: 400,
792
+ gqlCode: "INVALID_VARIANTS",
793
+ when: "Variant percentages must sum to 100"
794
+ }
795
+ }
796
+ },
797
+ policy: { auth: "admin" }
798
+ });
799
+ /**
800
+ * Start an experiment.
801
+ */
802
+ const StartExperimentContract = defineCommand({
803
+ meta: {
804
+ key: "experiment.start",
805
+ version: "1.0.0",
806
+ stability: "stable",
807
+ owners: [...OWNERS],
808
+ tags: [
809
+ "feature-flags",
810
+ "experiment",
811
+ "start"
812
+ ],
813
+ description: "Start an experiment.",
814
+ goal: "Begin collecting data for an experiment.",
815
+ context: "Called when ready to run an A/B test."
816
+ },
817
+ io: {
818
+ input: StartExperimentInput,
819
+ output: ExperimentModel,
820
+ errors: {
821
+ EXPERIMENT_NOT_FOUND: {
822
+ description: "Experiment does not exist",
823
+ http: 404,
824
+ gqlCode: "EXPERIMENT_NOT_FOUND",
825
+ when: "Experiment ID is invalid"
826
+ },
827
+ EXPERIMENT_ALREADY_RUNNING: {
828
+ description: "Experiment is already running",
829
+ http: 409,
830
+ gqlCode: "EXPERIMENT_ALREADY_RUNNING",
831
+ when: "Cannot start an experiment that is already running"
832
+ }
833
+ }
834
+ },
835
+ policy: { auth: "admin" }
836
+ });
837
+ /**
838
+ * Stop an experiment.
839
+ */
840
+ const StopExperimentContract = defineCommand({
841
+ meta: {
842
+ key: "experiment.stop",
843
+ version: "1.0.0",
844
+ stability: "stable",
845
+ owners: [...OWNERS],
846
+ tags: [
847
+ "feature-flags",
848
+ "experiment",
849
+ "stop"
850
+ ],
851
+ description: "Stop an experiment.",
852
+ goal: "End an experiment and optionally declare a winner.",
853
+ context: "Called when concluding an A/B test."
854
+ },
855
+ io: {
856
+ input: StopExperimentInput,
857
+ output: ExperimentModel,
858
+ errors: {
859
+ EXPERIMENT_NOT_FOUND: {
860
+ description: "Experiment does not exist",
861
+ http: 404,
862
+ gqlCode: "EXPERIMENT_NOT_FOUND",
863
+ when: "Experiment ID is invalid"
864
+ },
865
+ EXPERIMENT_NOT_RUNNING: {
866
+ description: "Experiment is not running",
867
+ http: 409,
868
+ gqlCode: "EXPERIMENT_NOT_RUNNING",
869
+ when: "Cannot stop an experiment that is not running"
870
+ }
871
+ }
872
+ },
873
+ policy: { auth: "admin" }
874
+ });
875
+ /**
876
+ * Get an experiment.
877
+ */
878
+ const GetExperimentContract = defineQuery({
879
+ meta: {
880
+ key: "experiment.get",
881
+ version: "1.0.0",
882
+ stability: "stable",
883
+ owners: [...OWNERS],
884
+ tags: [
885
+ "feature-flags",
886
+ "experiment",
887
+ "get"
888
+ ],
889
+ description: "Get experiment details.",
890
+ goal: "View experiment configuration and results.",
891
+ context: "Called to inspect experiment status."
892
+ },
893
+ io: {
894
+ input: GetExperimentInput,
895
+ output: ExperimentModel,
896
+ errors: { EXPERIMENT_NOT_FOUND: {
897
+ description: "Experiment does not exist",
898
+ http: 404,
899
+ gqlCode: "EXPERIMENT_NOT_FOUND",
900
+ when: "Experiment ID is invalid"
901
+ } }
902
+ },
903
+ policy: { auth: "user" }
904
+ });
905
+
906
+ //#endregion
907
+ export { CreateExperimentContract, CreateFlagContract, CreateRuleContract, DeleteFlagContract, DeleteRuleContract, EvaluateFlagContract, EvaluationResultModel, ExperimentModel, FeatureFlagModel, GetExperimentContract, GetFlagContract, ListFlagsContract, StartExperimentContract, StopExperimentContract, TargetingRuleModel, ToggleFlagContract, UpdateFlagContract };
908
+ //# sourceMappingURL=index.js.map