@contractspec/lib.feature-flags 1.57.0 → 1.58.0

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 (53) hide show
  1. package/dist/browser/contracts/index.js +636 -0
  2. package/dist/browser/docs/feature-flags.docblock.js +71 -0
  3. package/dist/browser/docs/index.js +71 -0
  4. package/dist/browser/entities/index.js +306 -0
  5. package/dist/browser/evaluation/index.js +223 -0
  6. package/dist/browser/events.js +296 -0
  7. package/dist/browser/feature-flags.capability.js +28 -0
  8. package/dist/browser/feature-flags.feature.js +55 -0
  9. package/dist/browser/index.js +1583 -0
  10. package/dist/contracts/index.d.ts +944 -950
  11. package/dist/contracts/index.d.ts.map +1 -1
  12. package/dist/contracts/index.js +635 -906
  13. package/dist/docs/feature-flags.docblock.d.ts +2 -1
  14. package/dist/docs/feature-flags.docblock.d.ts.map +1 -0
  15. package/dist/docs/feature-flags.docblock.js +18 -22
  16. package/dist/docs/index.d.ts +2 -1
  17. package/dist/docs/index.d.ts.map +1 -0
  18. package/dist/docs/index.js +72 -1
  19. package/dist/entities/index.d.ts +159 -164
  20. package/dist/entities/index.d.ts.map +1 -1
  21. package/dist/entities/index.js +297 -315
  22. package/dist/evaluation/index.d.ts +119 -122
  23. package/dist/evaluation/index.d.ts.map +1 -1
  24. package/dist/evaluation/index.js +215 -212
  25. package/dist/events.d.ts +480 -486
  26. package/dist/events.d.ts.map +1 -1
  27. package/dist/events.js +272 -511
  28. package/dist/feature-flags.capability.d.ts +2 -7
  29. package/dist/feature-flags.capability.d.ts.map +1 -1
  30. package/dist/feature-flags.capability.js +29 -25
  31. package/dist/feature-flags.feature.d.ts +1 -6
  32. package/dist/feature-flags.feature.d.ts.map +1 -1
  33. package/dist/feature-flags.feature.js +54 -146
  34. package/dist/index.d.ts +7 -6
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +1584 -8
  37. package/dist/node/contracts/index.js +636 -0
  38. package/dist/node/docs/feature-flags.docblock.js +71 -0
  39. package/dist/node/docs/index.js +71 -0
  40. package/dist/node/entities/index.js +306 -0
  41. package/dist/node/evaluation/index.js +223 -0
  42. package/dist/node/events.js +296 -0
  43. package/dist/node/feature-flags.capability.js +28 -0
  44. package/dist/node/feature-flags.feature.js +55 -0
  45. package/dist/node/index.js +1583 -0
  46. package/package.json +117 -30
  47. package/dist/contracts/index.js.map +0 -1
  48. package/dist/docs/feature-flags.docblock.js.map +0 -1
  49. package/dist/entities/index.js.map +0 -1
  50. package/dist/evaluation/index.js.map +0 -1
  51. package/dist/events.js.map +0 -1
  52. package/dist/feature-flags.capability.js.map +0 -1
  53. package/dist/feature-flags.feature.js.map +0 -1
@@ -0,0 +1,296 @@
1
+ // src/events.ts
2
+ import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
3
+ import { defineEvent } from "@contractspec/lib.contracts";
4
+ var FlagCreatedPayload = defineSchemaModel({
5
+ name: "FlagCreatedEventPayload",
6
+ description: "Payload when a feature flag is created",
7
+ fields: {
8
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
9
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
10
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
11
+ status: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
12
+ orgId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
13
+ createdBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
14
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
15
+ }
16
+ });
17
+ var FlagUpdatedPayload = defineSchemaModel({
18
+ name: "FlagUpdatedEventPayload",
19
+ description: "Payload when a feature flag is updated",
20
+ fields: {
21
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
22
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
23
+ changes: { type: ScalarTypeEnum.JSON(), isOptional: false },
24
+ updatedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
25
+ updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
26
+ }
27
+ });
28
+ var FlagDeletedPayload = defineSchemaModel({
29
+ name: "FlagDeletedEventPayload",
30
+ description: "Payload when a feature flag is deleted",
31
+ fields: {
32
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
33
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
34
+ deletedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
35
+ deletedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
36
+ }
37
+ });
38
+ var FlagToggledPayload = defineSchemaModel({
39
+ name: "FlagToggledEventPayload",
40
+ description: "Payload when a feature flag status is toggled",
41
+ fields: {
42
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
43
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
44
+ previousStatus: {
45
+ type: ScalarTypeEnum.String_unsecure(),
46
+ isOptional: false
47
+ },
48
+ newStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
49
+ toggledBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
50
+ toggledAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
51
+ }
52
+ });
53
+ var RuleCreatedPayload = defineSchemaModel({
54
+ name: "RuleCreatedEventPayload",
55
+ description: "Payload when a targeting rule is created",
56
+ fields: {
57
+ ruleId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
58
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
59
+ flagKey: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
60
+ attribute: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
61
+ operator: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
62
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
63
+ }
64
+ });
65
+ var RuleDeletedPayload = defineSchemaModel({
66
+ name: "RuleDeletedEventPayload",
67
+ description: "Payload when a targeting rule is deleted",
68
+ fields: {
69
+ ruleId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
70
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
71
+ flagKey: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
72
+ deletedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
73
+ }
74
+ });
75
+ var ExperimentCreatedPayload = defineSchemaModel({
76
+ name: "ExperimentCreatedEventPayload",
77
+ description: "Payload when an experiment is created",
78
+ fields: {
79
+ experimentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
80
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
81
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
82
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
83
+ variants: { type: ScalarTypeEnum.JSON(), isOptional: false },
84
+ createdBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
85
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
86
+ }
87
+ });
88
+ var ExperimentStartedPayload = defineSchemaModel({
89
+ name: "ExperimentStartedEventPayload",
90
+ description: "Payload when an experiment starts",
91
+ fields: {
92
+ experimentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
93
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
94
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
95
+ variants: { type: ScalarTypeEnum.JSON(), isOptional: false },
96
+ audiencePercentage: {
97
+ type: ScalarTypeEnum.Int_unsecure(),
98
+ isOptional: false
99
+ },
100
+ startedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
101
+ startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
102
+ }
103
+ });
104
+ var ExperimentStoppedPayload = defineSchemaModel({
105
+ name: "ExperimentStoppedEventPayload",
106
+ description: "Payload when an experiment stops",
107
+ fields: {
108
+ experimentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
109
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
110
+ reason: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
111
+ winningVariant: {
112
+ type: ScalarTypeEnum.String_unsecure(),
113
+ isOptional: true
114
+ },
115
+ stoppedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
116
+ stoppedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
117
+ }
118
+ });
119
+ var FlagEvaluatedPayload = defineSchemaModel({
120
+ name: "FlagEvaluatedEventPayload",
121
+ description: "Payload when a flag is evaluated (for analytics)",
122
+ fields: {
123
+ flagId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
124
+ flagKey: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
125
+ subjectType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
126
+ subjectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
127
+ result: { type: ScalarTypeEnum.Boolean(), isOptional: false },
128
+ variant: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
129
+ reason: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
130
+ evaluatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
131
+ }
132
+ });
133
+ var VariantAssignedPayload = defineSchemaModel({
134
+ name: "VariantAssignedEventPayload",
135
+ description: "Payload when a subject is assigned to an experiment variant",
136
+ fields: {
137
+ experimentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
138
+ experimentKey: {
139
+ type: ScalarTypeEnum.String_unsecure(),
140
+ isOptional: false
141
+ },
142
+ subjectType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
143
+ subjectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
144
+ variant: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
145
+ bucket: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
146
+ assignedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
147
+ }
148
+ });
149
+ var FlagCreatedEvent = defineEvent({
150
+ meta: {
151
+ key: "flag.created",
152
+ version: "1.0.0",
153
+ description: "A feature flag has been created.",
154
+ stability: "stable",
155
+ owners: ["@platform.feature-flags"],
156
+ tags: ["feature-flags", "create"]
157
+ },
158
+ payload: FlagCreatedPayload
159
+ });
160
+ var FlagUpdatedEvent = defineEvent({
161
+ meta: {
162
+ key: "flag.updated",
163
+ version: "1.0.0",
164
+ description: "A feature flag has been updated.",
165
+ stability: "stable",
166
+ owners: ["@platform.feature-flags"],
167
+ tags: ["feature-flags", "update"]
168
+ },
169
+ payload: FlagUpdatedPayload
170
+ });
171
+ var FlagDeletedEvent = defineEvent({
172
+ meta: {
173
+ key: "flag.deleted",
174
+ version: "1.0.0",
175
+ description: "A feature flag has been deleted.",
176
+ stability: "stable",
177
+ owners: ["@platform.feature-flags"],
178
+ tags: ["feature-flags", "delete"]
179
+ },
180
+ payload: FlagDeletedPayload
181
+ });
182
+ var FlagToggledEvent = defineEvent({
183
+ meta: {
184
+ key: "flag.toggled",
185
+ version: "1.0.0",
186
+ description: "A feature flag status has been toggled.",
187
+ stability: "stable",
188
+ owners: ["@platform.feature-flags"],
189
+ tags: ["feature-flags", "toggle"]
190
+ },
191
+ payload: FlagToggledPayload
192
+ });
193
+ var RuleCreatedEvent = defineEvent({
194
+ meta: {
195
+ key: "flag.rule_created",
196
+ version: "1.0.0",
197
+ description: "A targeting rule has been created.",
198
+ stability: "stable",
199
+ owners: ["@platform.feature-flags"],
200
+ tags: ["feature-flags", "rule", "create"]
201
+ },
202
+ payload: RuleCreatedPayload
203
+ });
204
+ var RuleDeletedEvent = defineEvent({
205
+ meta: {
206
+ key: "flag.rule_deleted",
207
+ version: "1.0.0",
208
+ description: "A targeting rule has been deleted.",
209
+ stability: "stable",
210
+ owners: ["@platform.feature-flags"],
211
+ tags: ["feature-flags", "rule", "delete"]
212
+ },
213
+ payload: RuleDeletedPayload
214
+ });
215
+ var ExperimentCreatedEvent = defineEvent({
216
+ meta: {
217
+ key: "experiment.created",
218
+ version: "1.0.0",
219
+ description: "An experiment has been created.",
220
+ stability: "stable",
221
+ owners: ["@platform.feature-flags"],
222
+ tags: ["feature-flags", "experiment", "create"]
223
+ },
224
+ payload: ExperimentCreatedPayload
225
+ });
226
+ var ExperimentStartedEvent = defineEvent({
227
+ meta: {
228
+ key: "experiment.started",
229
+ version: "1.0.0",
230
+ description: "An experiment has started.",
231
+ stability: "stable",
232
+ owners: ["@platform.feature-flags"],
233
+ tags: ["feature-flags", "experiment", "start"]
234
+ },
235
+ payload: ExperimentStartedPayload
236
+ });
237
+ var ExperimentStoppedEvent = defineEvent({
238
+ meta: {
239
+ key: "experiment.stopped",
240
+ version: "1.0.0",
241
+ description: "An experiment has stopped.",
242
+ stability: "stable",
243
+ owners: ["@platform.feature-flags"],
244
+ tags: ["feature-flags", "experiment", "stop"]
245
+ },
246
+ payload: ExperimentStoppedPayload
247
+ });
248
+ var FlagEvaluatedEvent = defineEvent({
249
+ meta: {
250
+ key: "flag.evaluated",
251
+ version: "1.0.0",
252
+ description: "A feature flag has been evaluated.",
253
+ stability: "stable",
254
+ owners: ["@platform.feature-flags"],
255
+ tags: ["feature-flags", "evaluate"]
256
+ },
257
+ payload: FlagEvaluatedPayload
258
+ });
259
+ var VariantAssignedEvent = defineEvent({
260
+ meta: {
261
+ key: "experiment.variant_assigned",
262
+ version: "1.0.0",
263
+ description: "A subject has been assigned to an experiment variant.",
264
+ stability: "stable",
265
+ owners: ["@platform.feature-flags"],
266
+ tags: ["feature-flags", "experiment", "variant"]
267
+ },
268
+ payload: VariantAssignedPayload
269
+ });
270
+ var FeatureFlagEvents = {
271
+ FlagCreatedEvent,
272
+ FlagUpdatedEvent,
273
+ FlagDeletedEvent,
274
+ FlagToggledEvent,
275
+ RuleCreatedEvent,
276
+ RuleDeletedEvent,
277
+ ExperimentCreatedEvent,
278
+ ExperimentStartedEvent,
279
+ ExperimentStoppedEvent,
280
+ FlagEvaluatedEvent,
281
+ VariantAssignedEvent
282
+ };
283
+ export {
284
+ VariantAssignedEvent,
285
+ RuleDeletedEvent,
286
+ RuleCreatedEvent,
287
+ FlagUpdatedEvent,
288
+ FlagToggledEvent,
289
+ FlagEvaluatedEvent,
290
+ FlagDeletedEvent,
291
+ FlagCreatedEvent,
292
+ FeatureFlagEvents,
293
+ ExperimentStoppedEvent,
294
+ ExperimentStartedEvent,
295
+ ExperimentCreatedEvent
296
+ };
@@ -0,0 +1,28 @@
1
+ // src/feature-flags.capability.ts
2
+ import { defineCapability, StabilityEnum } from "@contractspec/lib.contracts";
3
+ var FeatureFlagsCapability = defineCapability({
4
+ meta: {
5
+ key: "feature-flag",
6
+ version: "1.0.0",
7
+ kind: "api",
8
+ stability: StabilityEnum.Experimental,
9
+ description: "Feature flag management and evaluation",
10
+ owners: ["@platform.featureflags"],
11
+ tags: ["feature-flags", "configuration"]
12
+ }
13
+ });
14
+ var ExperimentsCapability = defineCapability({
15
+ meta: {
16
+ key: "experiments",
17
+ version: "1.0.0",
18
+ kind: "api",
19
+ stability: StabilityEnum.Experimental,
20
+ description: "A/B testing and experimentation platform",
21
+ owners: ["@platform.featureflags"],
22
+ tags: ["experiments", "ab-testing"]
23
+ }
24
+ });
25
+ export {
26
+ FeatureFlagsCapability,
27
+ ExperimentsCapability
28
+ };
@@ -0,0 +1,55 @@
1
+ // src/feature-flags.feature.ts
2
+ import { defineFeature } from "@contractspec/lib.contracts";
3
+ var FeatureFlagsFeature = defineFeature({
4
+ meta: {
5
+ key: "feature-flags",
6
+ version: "1.0.0",
7
+ title: "Feature Flags",
8
+ description: "Feature flag management with targeting rules and A/B experiments",
9
+ domain: "platform",
10
+ owners: ["@platform.feature-flags"],
11
+ tags: ["feature-flags", "experiments", "targeting"],
12
+ stability: "stable"
13
+ },
14
+ operations: [
15
+ { key: "flag.create", version: "1.0.0" },
16
+ { key: "flag.update", version: "1.0.0" },
17
+ { key: "flag.delete", version: "1.0.0" },
18
+ { key: "flag.toggle", version: "1.0.0" },
19
+ { key: "flag.get", version: "1.0.0" },
20
+ { key: "flag.list", version: "1.0.0" },
21
+ { key: "flag.evaluate", version: "1.0.0" },
22
+ { key: "flag.rule.create", version: "1.0.0" },
23
+ { key: "flag.rule.delete", version: "1.0.0" },
24
+ { key: "experiment.create", version: "1.0.0" },
25
+ { key: "experiment.start", version: "1.0.0" },
26
+ { key: "experiment.stop", version: "1.0.0" },
27
+ { key: "experiment.get", version: "1.0.0" }
28
+ ],
29
+ events: [
30
+ { key: "flag.created", version: "1.0.0" },
31
+ { key: "flag.updated", version: "1.0.0" },
32
+ { key: "flag.deleted", version: "1.0.0" },
33
+ { key: "flag.toggled", version: "1.0.0" },
34
+ { key: "flag.evaluated", version: "1.0.0" },
35
+ { key: "flag.rule_created", version: "1.0.0" },
36
+ { key: "flag.rule_deleted", version: "1.0.0" },
37
+ { key: "experiment.created", version: "1.0.0" },
38
+ { key: "experiment.started", version: "1.0.0" },
39
+ { key: "experiment.stopped", version: "1.0.0" },
40
+ { key: "experiment.variant_assigned", version: "1.0.0" }
41
+ ],
42
+ presentations: [],
43
+ opToPresentation: [],
44
+ presentationsTargets: [],
45
+ capabilities: {
46
+ provides: [
47
+ { key: "feature-flag", version: "1.0.0" },
48
+ { key: "experiments", version: "1.0.0" }
49
+ ],
50
+ requires: [{ key: "identity", version: "1.0.0" }]
51
+ }
52
+ });
53
+ export {
54
+ FeatureFlagsFeature
55
+ };