@fabricorg/experiments-api-protocol 0.1.0 → 0.1.2
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.
- package/dist/index.cjs +269 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10186 -1650
- package/dist/index.d.ts +10186 -1650
- package/dist/index.js +254 -4
- package/dist/index.js.map +1 -1
- package/package.json +11 -13
- package/LICENSE +0 -21
package/dist/index.cjs
CHANGED
|
@@ -21,6 +21,19 @@ var TenantSelf = zod.z.object({
|
|
|
21
21
|
name: zod.z.string().nullable()
|
|
22
22
|
})
|
|
23
23
|
});
|
|
24
|
+
var ProjectListResponse = zod.z.object({ projects: zod.z.array(experimentsDomain.Project) });
|
|
25
|
+
var PropertyListResponse = zod.z.object({ properties: zod.z.array(experimentsDomain.Property) });
|
|
26
|
+
var EnvironmentListResponse = zod.z.object({ environments: zod.z.array(experimentsDomain.Environment) });
|
|
27
|
+
var FeatureListResponse = zod.z.object({ features: zod.z.array(experimentsDomain.Feature) });
|
|
28
|
+
var FeatureRuleListResponse = zod.z.object({ rules: zod.z.array(experimentsDomain.FeatureRule) });
|
|
29
|
+
var PublicationListResponse = zod.z.object({ publications: zod.z.array(experimentsDomain.EnvironmentPublication) });
|
|
30
|
+
var PromoteEnvironmentInput = zod.z.object({ sourceEnvironmentId: zod.z.string().uuid() });
|
|
31
|
+
var PromoteEnvironmentResponse = zod.z.object({
|
|
32
|
+
sourceEnvironmentId: zod.z.string().uuid(),
|
|
33
|
+
sourceVersion: zod.z.number().int().positive(),
|
|
34
|
+
targetEnvironmentId: zod.z.string().uuid(),
|
|
35
|
+
promotedRuleCount: zod.z.number().int().nonnegative()
|
|
36
|
+
});
|
|
24
37
|
var ExperimentSummary = zod.z.object({
|
|
25
38
|
id: experimentsDomain.Experiment.shape.id,
|
|
26
39
|
name: experimentsDomain.Experiment.shape.name,
|
|
@@ -45,14 +58,52 @@ var AggregateRow = zod.z.object({
|
|
|
45
58
|
var AggregateInput = zod.z.object({
|
|
46
59
|
metric: zod.z.string().min(1).max(120),
|
|
47
60
|
fromIso: zod.z.string().datetime().optional(),
|
|
48
|
-
untilIso: zod.z.string().datetime().optional()
|
|
61
|
+
untilIso: zod.z.string().datetime().optional(),
|
|
62
|
+
segmentKey: zod.z.string().min(1).max(80).regex(/^[A-Za-z0-9_.-]+$/).optional(),
|
|
63
|
+
prePeriodDays: zod.z.coerce.number().int().min(1).max(365).optional()
|
|
49
64
|
});
|
|
50
65
|
var AggregateResponse = zod.z.object({
|
|
51
66
|
experimentId: experimentsDomain.ExperimentId,
|
|
52
67
|
metric: zod.z.string(),
|
|
53
68
|
rows: zod.z.array(AggregateRow),
|
|
54
69
|
/** ISO datetime — when this aggregate was computed. SDKs may cache by this. */
|
|
55
|
-
computedAt: zod.z.string().datetime()
|
|
70
|
+
computedAt: zod.z.string().datetime(),
|
|
71
|
+
analytics: zod.z.object({
|
|
72
|
+
variants: zod.z.array(
|
|
73
|
+
zod.z.object({
|
|
74
|
+
variantKey: zod.z.string(),
|
|
75
|
+
exposedSubjects: zod.z.number().int().nonnegative(),
|
|
76
|
+
convertedSubjects: zod.z.number().int().nonnegative(),
|
|
77
|
+
meanTimeToConvertMs: zod.z.number().nonnegative().nullable(),
|
|
78
|
+
medianTimeToConvertMs: zod.z.number().nonnegative().nullable(),
|
|
79
|
+
p90TimeToConvertMs: zod.z.number().nonnegative().nullable(),
|
|
80
|
+
meanConversionDepth: zod.z.number().nonnegative(),
|
|
81
|
+
conversionDepth: zod.z.object({
|
|
82
|
+
oneOrMore: zod.z.number().int().nonnegative(),
|
|
83
|
+
twoOrMore: zod.z.number().int().nonnegative(),
|
|
84
|
+
threeOrMore: zod.z.number().int().nonnegative()
|
|
85
|
+
}),
|
|
86
|
+
cupedAdjustedRate: zod.z.number().nullable(),
|
|
87
|
+
cupedLift: zod.z.number().nullable()
|
|
88
|
+
})
|
|
89
|
+
),
|
|
90
|
+
segments: zod.z.array(
|
|
91
|
+
zod.z.object({
|
|
92
|
+
segmentValue: zod.z.string(),
|
|
93
|
+
variantKey: zod.z.string(),
|
|
94
|
+
exposureCount: zod.z.number().int().nonnegative(),
|
|
95
|
+
conversionCount: zod.z.number().int().nonnegative(),
|
|
96
|
+
conversionRate: zod.z.number().min(0).max(1)
|
|
97
|
+
})
|
|
98
|
+
),
|
|
99
|
+
segmentKey: zod.z.string().optional(),
|
|
100
|
+
cuped: zod.z.object({
|
|
101
|
+
available: zod.z.boolean(),
|
|
102
|
+
prePeriodDays: zod.z.number().int().positive(),
|
|
103
|
+
theta: zod.z.number().nullable(),
|
|
104
|
+
varianceReduction: zod.z.number().nullable()
|
|
105
|
+
})
|
|
106
|
+
}).optional()
|
|
56
107
|
});
|
|
57
108
|
var InvokeActionInput = zod.z.object({
|
|
58
109
|
actionId: experimentsDomain.ActionId,
|
|
@@ -157,6 +208,69 @@ var SamlConfig = zod.z.object({
|
|
|
157
208
|
message: "connectionId, issuer, ssoUrl, certificate required when SAML is enabled"
|
|
158
209
|
}
|
|
159
210
|
);
|
|
211
|
+
var TestRunStatus = zod.z.enum(["running", "passed", "failed", "skipped", "canceled"]);
|
|
212
|
+
var TestCaseStatus = zod.z.enum([
|
|
213
|
+
"passed",
|
|
214
|
+
"failed",
|
|
215
|
+
"skipped",
|
|
216
|
+
"pending",
|
|
217
|
+
"undefined",
|
|
218
|
+
"unknown"
|
|
219
|
+
]);
|
|
220
|
+
var TestCaseResult = zod.z.object({
|
|
221
|
+
id: zod.z.string().max(240).optional(),
|
|
222
|
+
name: zod.z.string().min(1).max(500),
|
|
223
|
+
uri: zod.z.string().max(1e3).optional(),
|
|
224
|
+
status: TestCaseStatus,
|
|
225
|
+
durationMs: zod.z.number().int().nonnegative().max(864e5),
|
|
226
|
+
tags: zod.z.array(zod.z.string().max(120)).max(100).default([]),
|
|
227
|
+
error: zod.z.string().max(65536).optional(),
|
|
228
|
+
statementId: zod.z.string().max(240).optional(),
|
|
229
|
+
resourceUrl: zod.z.string().url().max(4e3).optional(),
|
|
230
|
+
details: zod.z.record(zod.z.unknown()).optional()
|
|
231
|
+
});
|
|
232
|
+
var TestRunSummary = zod.z.object({
|
|
233
|
+
total: zod.z.number().int().nonnegative(),
|
|
234
|
+
passed: zod.z.number().int().nonnegative(),
|
|
235
|
+
failed: zod.z.number().int().nonnegative(),
|
|
236
|
+
skipped: zod.z.number().int().nonnegative(),
|
|
237
|
+
pending: zod.z.number().int().nonnegative().default(0)
|
|
238
|
+
});
|
|
239
|
+
var TestRunArtifact = zod.z.object({
|
|
240
|
+
name: zod.z.string().min(1).max(240),
|
|
241
|
+
url: zod.z.string().url().max(4e3),
|
|
242
|
+
mediaType: zod.z.string().max(240).optional()
|
|
243
|
+
});
|
|
244
|
+
var CreateTestRunInput = zod.z.object({
|
|
245
|
+
externalId: zod.z.string().min(1).max(300).optional(),
|
|
246
|
+
source: zod.z.enum(["bdd", "live-suite", "junit", "cli", "other"]),
|
|
247
|
+
suite: zod.z.string().min(1).max(240),
|
|
248
|
+
status: TestRunStatus,
|
|
249
|
+
startedAt: zod.z.string().datetime().nullable().optional(),
|
|
250
|
+
finishedAt: zod.z.string().datetime().nullable().optional(),
|
|
251
|
+
durationMs: zod.z.number().int().nonnegative().max(6048e5).default(0),
|
|
252
|
+
summary: TestRunSummary,
|
|
253
|
+
environment: zod.z.record(zod.z.unknown()).default({}),
|
|
254
|
+
revision: zod.z.record(zod.z.unknown()).default({}),
|
|
255
|
+
cases: zod.z.array(TestCaseResult).max(2e3).default([]),
|
|
256
|
+
artifacts: zod.z.array(TestRunArtifact).max(100).default([])
|
|
257
|
+
});
|
|
258
|
+
var TestRun = CreateTestRunInput.extend({
|
|
259
|
+
id: zod.z.string().uuid(),
|
|
260
|
+
orgId: zod.z.string(),
|
|
261
|
+
createdBy: zod.z.string(),
|
|
262
|
+
createdAt: zod.z.string().datetime(),
|
|
263
|
+
updatedAt: zod.z.string().datetime()
|
|
264
|
+
});
|
|
265
|
+
var TestRunListInput = zod.z.object({
|
|
266
|
+
status: TestRunStatus.optional(),
|
|
267
|
+
source: CreateTestRunInput.shape.source.optional(),
|
|
268
|
+
suite: zod.z.string().min(1).max(240).optional(),
|
|
269
|
+
limit: zod.z.coerce.number().int().min(1).max(200).optional()
|
|
270
|
+
});
|
|
271
|
+
var TestRunListResponse = zod.z.object({
|
|
272
|
+
runs: zod.z.array(TestRun.omit({ cases: true }))
|
|
273
|
+
});
|
|
160
274
|
var endpoints = {
|
|
161
275
|
"tenants.me": {
|
|
162
276
|
method: "GET",
|
|
@@ -206,6 +320,118 @@ var endpoints = {
|
|
|
206
320
|
mutates: false,
|
|
207
321
|
requiresRole: "viewer"
|
|
208
322
|
},
|
|
323
|
+
"projects.list": {
|
|
324
|
+
method: "GET",
|
|
325
|
+
path: "/v1/orgs/:orgId/projects",
|
|
326
|
+
params: Empty,
|
|
327
|
+
response: ProjectListResponse,
|
|
328
|
+
mutates: false,
|
|
329
|
+
requiresRole: "viewer"
|
|
330
|
+
},
|
|
331
|
+
"projects.create": {
|
|
332
|
+
method: "POST",
|
|
333
|
+
path: "/v1/orgs/:orgId/projects",
|
|
334
|
+
params: experimentsDomain.CreateProjectInput,
|
|
335
|
+
response: experimentsDomain.Project,
|
|
336
|
+
mutates: true,
|
|
337
|
+
requiresRole: "experimenter"
|
|
338
|
+
},
|
|
339
|
+
"properties.list": {
|
|
340
|
+
method: "GET",
|
|
341
|
+
path: "/v1/orgs/:orgId/projects/:projectId/properties",
|
|
342
|
+
params: Empty,
|
|
343
|
+
response: PropertyListResponse,
|
|
344
|
+
mutates: false,
|
|
345
|
+
requiresRole: "viewer"
|
|
346
|
+
},
|
|
347
|
+
"properties.create": {
|
|
348
|
+
method: "POST",
|
|
349
|
+
path: "/v1/orgs/:orgId/projects/:projectId/properties",
|
|
350
|
+
params: experimentsDomain.CreatePropertyInput,
|
|
351
|
+
response: experimentsDomain.Property,
|
|
352
|
+
mutates: true,
|
|
353
|
+
requiresRole: "experimenter"
|
|
354
|
+
},
|
|
355
|
+
"environments.list": {
|
|
356
|
+
method: "GET",
|
|
357
|
+
path: "/v1/orgs/:orgId/projects/:projectId/environments",
|
|
358
|
+
params: Empty,
|
|
359
|
+
response: EnvironmentListResponse,
|
|
360
|
+
mutates: false,
|
|
361
|
+
requiresRole: "viewer"
|
|
362
|
+
},
|
|
363
|
+
"environments.create": {
|
|
364
|
+
method: "POST",
|
|
365
|
+
path: "/v1/orgs/:orgId/projects/:projectId/environments",
|
|
366
|
+
params: experimentsDomain.CreateEnvironmentInput,
|
|
367
|
+
response: experimentsDomain.Environment,
|
|
368
|
+
mutates: true,
|
|
369
|
+
requiresRole: "experimenter"
|
|
370
|
+
},
|
|
371
|
+
"features.list": {
|
|
372
|
+
method: "GET",
|
|
373
|
+
path: "/v1/orgs/:orgId/projects/:projectId/features",
|
|
374
|
+
params: Empty,
|
|
375
|
+
response: FeatureListResponse,
|
|
376
|
+
mutates: false,
|
|
377
|
+
requiresRole: "viewer"
|
|
378
|
+
},
|
|
379
|
+
"features.create": {
|
|
380
|
+
method: "POST",
|
|
381
|
+
path: "/v1/orgs/:orgId/projects/:projectId/features",
|
|
382
|
+
params: experimentsDomain.CreateFeatureInput,
|
|
383
|
+
response: experimentsDomain.Feature,
|
|
384
|
+
mutates: true,
|
|
385
|
+
requiresRole: "experimenter"
|
|
386
|
+
},
|
|
387
|
+
"rules.list": {
|
|
388
|
+
method: "GET",
|
|
389
|
+
path: "/v1/orgs/:orgId/features/:featureId/rules",
|
|
390
|
+
params: Empty,
|
|
391
|
+
response: FeatureRuleListResponse,
|
|
392
|
+
mutates: false,
|
|
393
|
+
requiresRole: "viewer"
|
|
394
|
+
},
|
|
395
|
+
"rules.create": {
|
|
396
|
+
method: "POST",
|
|
397
|
+
path: "/v1/orgs/:orgId/features/:featureId/rules",
|
|
398
|
+
params: experimentsDomain.CreateFeatureRuleInput,
|
|
399
|
+
response: experimentsDomain.FeatureRule,
|
|
400
|
+
mutates: true,
|
|
401
|
+
requiresRole: "experimenter"
|
|
402
|
+
},
|
|
403
|
+
"environments.publish": {
|
|
404
|
+
method: "POST",
|
|
405
|
+
path: "/v1/orgs/:orgId/environments/:environmentId/publish",
|
|
406
|
+
params: Empty,
|
|
407
|
+
response: experimentsDomain.EnvironmentPublication,
|
|
408
|
+
mutates: true,
|
|
409
|
+
requiresRole: "experimenter"
|
|
410
|
+
},
|
|
411
|
+
"environments.publications": {
|
|
412
|
+
method: "GET",
|
|
413
|
+
path: "/v1/orgs/:orgId/environments/:environmentId/publications",
|
|
414
|
+
params: Empty,
|
|
415
|
+
response: PublicationListResponse,
|
|
416
|
+
mutates: false,
|
|
417
|
+
requiresRole: "viewer"
|
|
418
|
+
},
|
|
419
|
+
"environments.promote": {
|
|
420
|
+
method: "POST",
|
|
421
|
+
path: "/v1/orgs/:orgId/environments/:environmentId/promote",
|
|
422
|
+
params: PromoteEnvironmentInput,
|
|
423
|
+
response: PromoteEnvironmentResponse,
|
|
424
|
+
mutates: true,
|
|
425
|
+
requiresRole: "experimenter"
|
|
426
|
+
},
|
|
427
|
+
"configuration.getPublished": {
|
|
428
|
+
method: "GET",
|
|
429
|
+
path: "/v1/orgs/:orgId/environments/:environmentId/configuration",
|
|
430
|
+
params: Empty,
|
|
431
|
+
response: experimentsDomain.EnvironmentPublication,
|
|
432
|
+
mutates: false,
|
|
433
|
+
requiresRole: "viewer"
|
|
434
|
+
},
|
|
209
435
|
"manifests.publish": {
|
|
210
436
|
method: "POST",
|
|
211
437
|
path: "/v1/orgs/:orgId/manifests/publish",
|
|
@@ -317,6 +543,30 @@ var endpoints = {
|
|
|
317
543
|
response: SamlConfig,
|
|
318
544
|
mutates: true,
|
|
319
545
|
requiresRole: "owner"
|
|
546
|
+
},
|
|
547
|
+
"testRuns.list": {
|
|
548
|
+
method: "GET",
|
|
549
|
+
path: "/v1/orgs/:orgId/test-runs",
|
|
550
|
+
params: TestRunListInput,
|
|
551
|
+
response: TestRunListResponse,
|
|
552
|
+
mutates: false,
|
|
553
|
+
requiresRole: "viewer"
|
|
554
|
+
},
|
|
555
|
+
"testRuns.create": {
|
|
556
|
+
method: "POST",
|
|
557
|
+
path: "/v1/orgs/:orgId/test-runs",
|
|
558
|
+
params: CreateTestRunInput,
|
|
559
|
+
response: TestRun,
|
|
560
|
+
mutates: true,
|
|
561
|
+
requiresRole: "experimenter"
|
|
562
|
+
},
|
|
563
|
+
"testRuns.get": {
|
|
564
|
+
method: "GET",
|
|
565
|
+
path: "/v1/orgs/:orgId/test-runs/:runId",
|
|
566
|
+
params: Empty,
|
|
567
|
+
response: TestRun,
|
|
568
|
+
mutates: false,
|
|
569
|
+
requiresRole: "viewer"
|
|
320
570
|
}
|
|
321
571
|
};
|
|
322
572
|
function buildPath(template, pathParams) {
|
|
@@ -355,18 +605,35 @@ exports.CreateApiKeyResponse = CreateApiKeyResponse;
|
|
|
355
605
|
exports.CreateAuditExportInput = CreateAuditExportInput;
|
|
356
606
|
exports.CreateExperimentInput = CreateExperimentInput;
|
|
357
607
|
exports.CreateExperimentResponse = CreateExperimentResponse;
|
|
608
|
+
exports.CreateTestRunInput = CreateTestRunInput;
|
|
358
609
|
exports.EdgePushResult = EdgePushResult;
|
|
610
|
+
exports.EnvironmentListResponse = EnvironmentListResponse;
|
|
359
611
|
exports.ExperimentListResponse = ExperimentListResponse;
|
|
360
612
|
exports.ExperimentSummary = ExperimentSummary;
|
|
613
|
+
exports.FeatureListResponse = FeatureListResponse;
|
|
614
|
+
exports.FeatureRuleListResponse = FeatureRuleListResponse;
|
|
361
615
|
exports.InvokeActionInput = InvokeActionInput;
|
|
362
616
|
exports.InvokeActionResponse = InvokeActionResponse;
|
|
363
617
|
exports.ManifestKey = ManifestKey;
|
|
364
618
|
exports.ManifestKeysResponse = ManifestKeysResponse;
|
|
365
619
|
exports.PreviewSignInput = PreviewSignInput;
|
|
366
620
|
exports.PreviewSignResponse = PreviewSignResponse;
|
|
621
|
+
exports.ProjectListResponse = ProjectListResponse;
|
|
622
|
+
exports.PromoteEnvironmentInput = PromoteEnvironmentInput;
|
|
623
|
+
exports.PromoteEnvironmentResponse = PromoteEnvironmentResponse;
|
|
624
|
+
exports.PropertyListResponse = PropertyListResponse;
|
|
625
|
+
exports.PublicationListResponse = PublicationListResponse;
|
|
367
626
|
exports.PublishManifestResponse = PublishManifestResponse;
|
|
368
627
|
exports.SamlConfig = SamlConfig;
|
|
369
628
|
exports.TenantSelf = TenantSelf;
|
|
629
|
+
exports.TestCaseResult = TestCaseResult;
|
|
630
|
+
exports.TestCaseStatus = TestCaseStatus;
|
|
631
|
+
exports.TestRun = TestRun;
|
|
632
|
+
exports.TestRunArtifact = TestRunArtifact;
|
|
633
|
+
exports.TestRunListInput = TestRunListInput;
|
|
634
|
+
exports.TestRunListResponse = TestRunListResponse;
|
|
635
|
+
exports.TestRunStatus = TestRunStatus;
|
|
636
|
+
exports.TestRunSummary = TestRunSummary;
|
|
370
637
|
exports.buildPath = buildPath;
|
|
371
638
|
exports.endpoints = endpoints;
|
|
372
639
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/endpoints.ts","../src/errors.ts"],"names":["z","Experiment","ExperimentState","ExperimentSpecBase","ExperimentId","ActionId"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n ActionId,\n Experiment,\n ExperimentId,\n ExperimentSpec,\n ExperimentSpecBase,\n ExperimentState,\n} from '@fabricorg/experiments-domain';\nimport { z } from 'zod';\n\n/**\n * Each endpoint declares method, path template, request schema, and response\n * schema. The server registers handlers against this table; the api-client\n * derives its method signatures from it. Drift between client and server is\n * impossible by construction.\n */\n\nexport interface EndpointDef<\n TParams extends z.ZodTypeAny = z.ZodTypeAny,\n TResponse extends z.ZodTypeAny = z.ZodTypeAny,\n> {\n method: 'GET' | 'POST' | 'DELETE';\n /** Path with `:param` placeholders, e.g. `/v1/orgs/:orgId/experiments`. */\n path: string;\n /** Request schema. For GET, used to validate query params; otherwise body. */\n params: TParams;\n response: TResponse;\n /** True if this endpoint mutates state — server applies idempotency cache. */\n mutates: boolean;\n /** Required role on the active org. `null` = any authenticated session. */\n requiresRole: 'owner' | 'admin' | 'experimenter' | 'viewer' | null;\n}\n\nconst Empty = z.object({});\n\n// ---- tenants ----------------------------------------------------------------\n\nexport const TenantSelf = z.object({\n organization: z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n createdAt: z.string().datetime(),\n }),\n member: z.object({\n role: z.enum(['owner', 'admin', 'experimenter', 'viewer']),\n }),\n user: z.object({\n id: z.string(),\n email: z.string().email(),\n name: z.string().nullable(),\n }),\n});\nexport type TenantSelf = z.infer<typeof TenantSelf>;\n\n// ---- experiments ------------------------------------------------------------\n\nexport const ExperimentSummary = z.object({\n id: Experiment.shape.id,\n name: Experiment.shape.name,\n state: ExperimentState,\n updatedAt: z.string().datetime(),\n});\nexport type ExperimentSummary = z.infer<typeof ExperimentSummary>;\n\nexport const ExperimentListResponse = z.object({\n experiments: z.array(ExperimentSummary),\n});\nexport type ExperimentListResponse = z.infer<typeof ExperimentListResponse>;\n\nexport const CreateExperimentInput = ExperimentSpecBase;\nexport type CreateExperimentInput = z.infer<typeof CreateExperimentInput>;\n\nexport const CreateExperimentResponse = z.object({\n experimentId: ExperimentId,\n idempotent: z.boolean().optional(),\n});\nexport type CreateExperimentResponse = z.infer<typeof CreateExperimentResponse>;\n\n/**\n * Aggregate row per variant for a given metric over an optional time window.\n * Sourced from the warehouse adapter (Databricks in prod, Local in dev).\n */\nexport const AggregateRow = z.object({\n variantKey: z.string(),\n exposureCount: z.number().int().nonnegative(),\n conversionCount: z.number().int().nonnegative(),\n conversionSum: z.number(),\n failureCount: z.number().int().nonnegative().default(0),\n});\nexport type AggregateRow = z.infer<typeof AggregateRow>;\n\nexport const AggregateInput = z.object({\n metric: z.string().min(1).max(120),\n fromIso: z.string().datetime().optional(),\n untilIso: z.string().datetime().optional(),\n});\nexport type AggregateInput = z.infer<typeof AggregateInput>;\n\nexport const AggregateResponse = z.object({\n experimentId: ExperimentId,\n metric: z.string(),\n rows: z.array(AggregateRow),\n /** ISO datetime — when this aggregate was computed. SDKs may cache by this. */\n computedAt: z.string().datetime(),\n});\nexport type AggregateResponse = z.infer<typeof AggregateResponse>;\n\nexport const InvokeActionInput = z.object({\n actionId: ActionId,\n params: z.record(z.unknown()),\n /** Optional client-supplied idempotency key. */\n idempotencyKey: z.string().min(8).max(128).optional(),\n});\nexport type InvokeActionInput = z.infer<typeof InvokeActionInput>;\n\nexport const InvokeActionResponse = z.object({\n success: z.boolean(),\n data: z.record(z.unknown()).optional(),\n error: z.string().optional(),\n});\nexport type InvokeActionResponse = z.infer<typeof InvokeActionResponse>;\n\n// ---- manifests --------------------------------------------------------------\n\n/** Result of pushing the signed manifest to the Cloudflare manifest-worker. */\nexport const EdgePushResult = z.object({\n pushed: z.boolean(),\n reason: z.string().optional(),\n status: z.number().int().optional(),\n});\nexport type EdgePushResult = z.infer<typeof EdgePushResult>;\n\nexport const PublishManifestResponse = z.object({\n manifestVersion: z.number().int().nonnegative(),\n contentHash: z.string().regex(/^[0-9a-f]{64}$/),\n experimentCount: z.number().int().nonnegative(),\n /** Edge push status. `pushed: false` with `reason: 'unconfigured'` is normal in local dev. */\n edgePush: EdgePushResult,\n});\nexport type PublishManifestResponse = z.infer<typeof PublishManifestResponse>;\n\nexport const ManifestKey = z.object({\n keyId: z.string(),\n publicKeyHex: z.string().regex(/^[0-9a-f]+$/),\n status: z.enum(['active', 'retiring', 'retired']),\n createdAt: z.string().datetime(),\n retiredAt: z.string().datetime().nullable(),\n});\nexport type ManifestKey = z.infer<typeof ManifestKey>;\n\nexport const ManifestKeysResponse = z.object({ keys: z.array(ManifestKey) });\nexport type ManifestKeysResponse = z.infer<typeof ManifestKeysResponse>;\n\n// ---- preview tokens ---------------------------------------------------------\n\nexport const PreviewSignInput = z.object({\n experimentId: ExperimentId,\n variantKey: z.string().min(1).max(32),\n /** Token TTL in seconds. Clamped server-side to [60, 3600]; default 900. */\n ttlSeconds: z.number().int().min(60).max(3600).optional(),\n});\nexport type PreviewSignInput = z.infer<typeof PreviewSignInput>;\n\nexport const PreviewSignResponse = z.object({\n token: z.string(),\n /** ISO datetime when the token expires. */\n expiresAt: z.string().datetime(),\n /** ID of the public JWKS key used to sign — exposed for debugging only. */\n keyId: z.string(),\n /** Unique JWT id for audit/debugging and future replay controls. */\n jti: z.string(),\n});\nexport type PreviewSignResponse = z.infer<typeof PreviewSignResponse>;\n\n// ---- audit ------------------------------------------------------------------\n\nexport const AuditEvent = z.object({\n id: z.string(),\n type: z.string(),\n experimentId: z.string(),\n actorId: z.string(),\n at: z.string().datetime(),\n payload: z.record(z.unknown()),\n});\nexport type AuditEvent = z.infer<typeof AuditEvent>;\n\nexport const AuditListResponse = z.object({ events: z.array(AuditEvent) });\nexport type AuditListResponse = z.infer<typeof AuditListResponse>;\n\nexport const AuditExport = z.object({\n id: z.string(),\n destinationKind: z.enum(['s3', 'r2', 'splunk-hec']),\n status: z.enum(['active', 'paused', 'failed']),\n lastCursorAt: z.string().datetime().nullable(),\n});\nexport const AuditExportListResponse = z.object({ exports: z.array(AuditExport) });\n\nexport const CreateAuditExportInput = z.object({\n destinationKind: z.enum(['s3', 'r2', 'splunk-hec']),\n /** Free-form config; encrypted at rest. Schema enforced by destination kind. */\n config: z.record(z.unknown()),\n});\n\n// ---- api keys ---------------------------------------------------------------\n\nexport const ApiKeySummary = z.object({\n id: z.string(),\n name: z.string(),\n prefix: z.string(),\n role: z.enum(['owner', 'admin', 'experimenter', 'viewer']),\n scopes: z.array(z.enum(['read', 'write', 'admin'])),\n createdAt: z.string().datetime(),\n lastUsedAt: z.string().datetime().nullable(),\n expiresAt: z.string().datetime().nullable(),\n});\nexport const ApiKeyListResponse = z.object({ keys: z.array(ApiKeySummary) });\n\nexport const CreateApiKeyInput = z.object({\n name: z.string().min(1).max(120),\n /** ISO datetime of expiry; null for non-expiring (not recommended in prod). */\n expiresAt: z.string().datetime().nullable(),\n /** Role assigned to the key. Defaults to the creator's role. */\n role: z.enum(['owner', 'admin', 'experimenter', 'viewer']).optional(),\n /** Permission scopes assigned to the key. Defaults are derived from role. */\n scopes: z.array(z.enum(['read', 'write', 'admin'])).optional(),\n});\nexport type CreateApiKeyInput = z.infer<typeof CreateApiKeyInput>;\n\nexport const CreateApiKeyResponse = ApiKeySummary.extend({\n /** Plaintext key, returned exactly once at creation time. */\n key: z.string(),\n});\nexport type CreateApiKeyResponse = z.infer<typeof CreateApiKeyResponse>;\n\n// ---- SAML / SSO --------------------------------------------------------------\n\nexport const SamlConfig = z\n .object({\n enabled: z.boolean(),\n connectionId: z.string().min(1).max(200).nullable(),\n issuer: z.string().min(1).max(500).nullable(),\n ssoUrl: z.string().url().nullable(),\n certificate: z.string().min(1).max(10000).nullable(),\n })\n .refine(\n (value) =>\n !value.enabled ||\n Boolean(value.connectionId && value.issuer && value.ssoUrl && value.certificate),\n {\n message: 'connectionId, issuer, ssoUrl, certificate required when SAML is enabled',\n },\n );\nexport type SamlConfig = z.infer<typeof SamlConfig>;\n\n// ---- the registry ----------------------------------------------------------\n\nexport const endpoints = {\n 'tenants.me': {\n method: 'GET',\n path: '/v1/tenants/me',\n params: Empty,\n response: TenantSelf,\n mutates: false,\n requiresRole: null,\n },\n\n 'experiments.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/experiments',\n params: Empty,\n response: ExperimentListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'experiments.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/experiments',\n params: CreateExperimentInput,\n response: CreateExperimentResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'experiments.get': {\n method: 'GET',\n path: '/v1/orgs/:orgId/experiments/:experimentId',\n params: Empty,\n response: Experiment,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'experiments.invokeAction': {\n method: 'POST',\n path: '/v1/orgs/:orgId/experiments/actions',\n params: InvokeActionInput,\n response: InvokeActionResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'experiments.aggregate': {\n method: 'GET',\n path: '/v1/orgs/:orgId/experiments/:experimentId/aggregate',\n params: AggregateInput,\n response: AggregateResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n\n 'manifests.publish': {\n method: 'POST',\n path: '/v1/orgs/:orgId/manifests/publish',\n params: Empty,\n response: PublishManifestResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'manifests.getKeys': {\n method: 'GET',\n path: '/v1/orgs/:orgId/manifests/keys',\n params: Empty,\n response: ManifestKeysResponse,\n mutates: false,\n requiresRole: 'admin',\n },\n 'manifests.rotateKey': {\n method: 'POST',\n path: '/v1/orgs/:orgId/manifests/keys/rotate',\n params: z.object({ keyId: z.string().min(1).max(128) }),\n response: ManifestKey,\n mutates: true,\n requiresRole: 'admin',\n },\n 'manifests.retireKey': {\n method: 'POST',\n path: '/v1/orgs/:orgId/manifests/keys/retire',\n params: z.object({ keyId: z.string() }),\n response: ManifestKey,\n mutates: true,\n requiresRole: 'admin',\n },\n\n 'preview.sign': {\n method: 'POST',\n path: '/v1/orgs/:orgId/preview/sign',\n params: PreviewSignInput,\n response: PreviewSignResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n\n 'audit.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/audit',\n params: Empty,\n response: AuditListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'audit.exports.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/audit/exports',\n params: Empty,\n response: AuditExportListResponse,\n mutates: false,\n requiresRole: 'admin',\n },\n 'audit.exports.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/audit/exports',\n params: CreateAuditExportInput,\n response: AuditExport,\n mutates: true,\n requiresRole: 'admin',\n },\n 'audit.exports.delete': {\n method: 'DELETE',\n path: '/v1/orgs/:orgId/audit/exports/:exportId',\n params: Empty,\n response: z.object({ ok: z.literal(true) }),\n mutates: true,\n requiresRole: 'admin',\n },\n\n 'apiKeys.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/api-keys',\n params: Empty,\n response: ApiKeyListResponse,\n mutates: false,\n requiresRole: 'admin',\n },\n 'apiKeys.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/api-keys',\n params: CreateApiKeyInput,\n response: CreateApiKeyResponse,\n mutates: true,\n requiresRole: 'admin',\n },\n 'apiKeys.revoke': {\n method: 'DELETE',\n path: '/v1/orgs/:orgId/api-keys/:keyId',\n params: Empty,\n response: z.object({ ok: z.literal(true) }),\n mutates: true,\n requiresRole: 'admin',\n },\n\n 'saml.get': {\n method: 'GET',\n path: '/v1/orgs/:orgId/saml',\n params: Empty,\n response: SamlConfig,\n mutates: false,\n requiresRole: 'owner',\n },\n 'saml.update': {\n method: 'POST',\n path: '/v1/orgs/:orgId/saml',\n params: SamlConfig,\n response: SamlConfig,\n mutates: true,\n requiresRole: 'owner',\n },\n} satisfies Record<string, EndpointDef>;\n\nexport type EndpointName = keyof typeof endpoints;\nexport type EndpointParams<E extends EndpointName> = z.infer<(typeof endpoints)[E]['params']>;\nexport type EndpointResponse<E extends EndpointName> = z.infer<(typeof endpoints)[E]['response']>;\n\n/** Substitute path parameters in a path template. */\nexport function buildPath(template: string, pathParams: Record<string, string>): string {\n return template.replace(/:([a-zA-Z][a-zA-Z0-9_]*)/g, (_, name) => {\n const v = pathParams[name];\n if (v == null) throw new Error(`Missing path parameter: ${name}`);\n return encodeURIComponent(v);\n });\n}\n","import { z } from 'zod';\n\nexport const ApiError = z.object({\n code: z.enum([\n 'UNAUTHENTICATED',\n 'FORBIDDEN',\n 'NOT_FOUND',\n 'VALIDATION_FAILED',\n 'CONFLICT',\n 'RATE_LIMITED',\n 'INTERNAL',\n ]),\n message: z.string(),\n details: z.record(z.unknown()).optional(),\n});\nexport type ApiError = z.infer<typeof ApiError>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/endpoints.ts","../src/errors.ts"],"names":["z","Project","Property","Environment","Feature","FeatureRule","EnvironmentPublication","Experiment","ExperimentState","ExperimentSpecBase","ExperimentId","ActionId","CreateProjectInput","CreatePropertyInput","CreateEnvironmentInput","CreateFeatureInput","CreateFeatureRuleInput"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n ActionId,\n CreateEnvironmentInput,\n CreateFeatureInput,\n CreateFeatureRuleInput,\n CreateProjectInput,\n CreatePropertyInput,\n Environment,\n EnvironmentPublication,\n Experiment,\n ExperimentId,\n ExperimentSpec,\n ExperimentSpecBase,\n ExperimentState,\n Feature,\n FeatureRule,\n Project,\n Property,\n} from '@fabricorg/experiments-domain';\nimport { z } from 'zod';\n\n/**\n * Each endpoint declares method, path template, request schema, and response\n * schema. The server registers handlers against this table; the api-client\n * derives its method signatures from it. Drift between client and server is\n * impossible by construction.\n */\n\nexport interface EndpointDef<\n TParams extends z.ZodTypeAny = z.ZodTypeAny,\n TResponse extends z.ZodTypeAny = z.ZodTypeAny,\n> {\n method: 'GET' | 'POST' | 'DELETE';\n /** Path with `:param` placeholders, e.g. `/v1/orgs/:orgId/experiments`. */\n path: string;\n /** Request schema. For GET, used to validate query params; otherwise body. */\n params: TParams;\n response: TResponse;\n /** True if this endpoint mutates state — server applies idempotency cache. */\n mutates: boolean;\n /** Required role on the active org. `null` = any authenticated session. */\n requiresRole: 'owner' | 'admin' | 'experimenter' | 'viewer' | null;\n}\n\nconst Empty = z.object({});\n\n// ---- tenants ----------------------------------------------------------------\n\nexport const TenantSelf = z.object({\n organization: z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n createdAt: z.string().datetime(),\n }),\n member: z.object({\n role: z.enum(['owner', 'admin', 'experimenter', 'viewer']),\n }),\n user: z.object({\n id: z.string(),\n email: z.string().email(),\n name: z.string().nullable(),\n }),\n});\nexport type TenantSelf = z.infer<typeof TenantSelf>;\n\n// ---- workspace hierarchy ---------------------------------------------------\n\nexport const ProjectListResponse = z.object({ projects: z.array(Project) });\nexport const PropertyListResponse = z.object({ properties: z.array(Property) });\nexport const EnvironmentListResponse = z.object({ environments: z.array(Environment) });\nexport const FeatureListResponse = z.object({ features: z.array(Feature) });\nexport const FeatureRuleListResponse = z.object({ rules: z.array(FeatureRule) });\nexport const PublicationListResponse = z.object({ publications: z.array(EnvironmentPublication) });\nexport const PromoteEnvironmentInput = z.object({ sourceEnvironmentId: z.string().uuid() });\nexport const PromoteEnvironmentResponse = z.object({\n sourceEnvironmentId: z.string().uuid(),\n sourceVersion: z.number().int().positive(),\n targetEnvironmentId: z.string().uuid(),\n promotedRuleCount: z.number().int().nonnegative(),\n});\n\n// ---- experiments ------------------------------------------------------------\n\nexport const ExperimentSummary = z.object({\n id: Experiment.shape.id,\n name: Experiment.shape.name,\n state: ExperimentState,\n updatedAt: z.string().datetime(),\n});\nexport type ExperimentSummary = z.infer<typeof ExperimentSummary>;\n\nexport const ExperimentListResponse = z.object({\n experiments: z.array(ExperimentSummary),\n});\nexport type ExperimentListResponse = z.infer<typeof ExperimentListResponse>;\n\nexport const CreateExperimentInput = ExperimentSpecBase;\nexport type CreateExperimentInput = z.infer<typeof CreateExperimentInput>;\n\nexport const CreateExperimentResponse = z.object({\n experimentId: ExperimentId,\n idempotent: z.boolean().optional(),\n});\nexport type CreateExperimentResponse = z.infer<typeof CreateExperimentResponse>;\n\n/**\n * Aggregate row per variant for a given metric over an optional time window.\n * Sourced from the warehouse adapter (Databricks in prod, Local in dev).\n */\nexport const AggregateRow = z.object({\n variantKey: z.string(),\n exposureCount: z.number().int().nonnegative(),\n conversionCount: z.number().int().nonnegative(),\n conversionSum: z.number(),\n failureCount: z.number().int().nonnegative().default(0),\n});\nexport type AggregateRow = z.infer<typeof AggregateRow>;\n\nexport const AggregateInput = z.object({\n metric: z.string().min(1).max(120),\n fromIso: z.string().datetime().optional(),\n untilIso: z.string().datetime().optional(),\n segmentKey: z\n .string()\n .min(1)\n .max(80)\n .regex(/^[A-Za-z0-9_.-]+$/)\n .optional(),\n prePeriodDays: z.coerce.number().int().min(1).max(365).optional(),\n});\nexport type AggregateInput = z.infer<typeof AggregateInput>;\n\nexport const AggregateResponse = z.object({\n experimentId: ExperimentId,\n metric: z.string(),\n rows: z.array(AggregateRow),\n /** ISO datetime — when this aggregate was computed. SDKs may cache by this. */\n computedAt: z.string().datetime(),\n analytics: z\n .object({\n variants: z.array(\n z.object({\n variantKey: z.string(),\n exposedSubjects: z.number().int().nonnegative(),\n convertedSubjects: z.number().int().nonnegative(),\n meanTimeToConvertMs: z.number().nonnegative().nullable(),\n medianTimeToConvertMs: z.number().nonnegative().nullable(),\n p90TimeToConvertMs: z.number().nonnegative().nullable(),\n meanConversionDepth: z.number().nonnegative(),\n conversionDepth: z.object({\n oneOrMore: z.number().int().nonnegative(),\n twoOrMore: z.number().int().nonnegative(),\n threeOrMore: z.number().int().nonnegative(),\n }),\n cupedAdjustedRate: z.number().nullable(),\n cupedLift: z.number().nullable(),\n }),\n ),\n segments: z.array(\n z.object({\n segmentValue: z.string(),\n variantKey: z.string(),\n exposureCount: z.number().int().nonnegative(),\n conversionCount: z.number().int().nonnegative(),\n conversionRate: z.number().min(0).max(1),\n }),\n ),\n segmentKey: z.string().optional(),\n cuped: z.object({\n available: z.boolean(),\n prePeriodDays: z.number().int().positive(),\n theta: z.number().nullable(),\n varianceReduction: z.number().nullable(),\n }),\n })\n .optional(),\n});\nexport type AggregateResponse = z.infer<typeof AggregateResponse>;\n\nexport const InvokeActionInput = z.object({\n actionId: ActionId,\n params: z.record(z.unknown()),\n /** Optional client-supplied idempotency key. */\n idempotencyKey: z.string().min(8).max(128).optional(),\n});\nexport type InvokeActionInput = z.infer<typeof InvokeActionInput>;\n\nexport const InvokeActionResponse = z.object({\n success: z.boolean(),\n data: z.record(z.unknown()).optional(),\n error: z.string().optional(),\n});\nexport type InvokeActionResponse = z.infer<typeof InvokeActionResponse>;\n\n// ---- manifests --------------------------------------------------------------\n\n/** Result of pushing the signed manifest to the Cloudflare manifest-worker. */\nexport const EdgePushResult = z.object({\n pushed: z.boolean(),\n reason: z.string().optional(),\n status: z.number().int().optional(),\n});\nexport type EdgePushResult = z.infer<typeof EdgePushResult>;\n\nexport const PublishManifestResponse = z.object({\n manifestVersion: z.number().int().nonnegative(),\n contentHash: z.string().regex(/^[0-9a-f]{64}$/),\n experimentCount: z.number().int().nonnegative(),\n /** Edge push status. `pushed: false` with `reason: 'unconfigured'` is normal in local dev. */\n edgePush: EdgePushResult,\n});\nexport type PublishManifestResponse = z.infer<typeof PublishManifestResponse>;\n\nexport const ManifestKey = z.object({\n keyId: z.string(),\n publicKeyHex: z.string().regex(/^[0-9a-f]+$/),\n status: z.enum(['active', 'retiring', 'retired']),\n createdAt: z.string().datetime(),\n retiredAt: z.string().datetime().nullable(),\n});\nexport type ManifestKey = z.infer<typeof ManifestKey>;\n\nexport const ManifestKeysResponse = z.object({ keys: z.array(ManifestKey) });\nexport type ManifestKeysResponse = z.infer<typeof ManifestKeysResponse>;\n\n// ---- preview tokens ---------------------------------------------------------\n\nexport const PreviewSignInput = z.object({\n experimentId: ExperimentId,\n variantKey: z.string().min(1).max(32),\n /** Token TTL in seconds. Clamped server-side to [60, 3600]; default 900. */\n ttlSeconds: z.number().int().min(60).max(3600).optional(),\n});\nexport type PreviewSignInput = z.infer<typeof PreviewSignInput>;\n\nexport const PreviewSignResponse = z.object({\n token: z.string(),\n /** ISO datetime when the token expires. */\n expiresAt: z.string().datetime(),\n /** ID of the public JWKS key used to sign — exposed for debugging only. */\n keyId: z.string(),\n /** Unique JWT id for audit/debugging and future replay controls. */\n jti: z.string(),\n});\nexport type PreviewSignResponse = z.infer<typeof PreviewSignResponse>;\n\n// ---- audit ------------------------------------------------------------------\n\nexport const AuditEvent = z.object({\n id: z.string(),\n type: z.string(),\n experimentId: z.string(),\n actorId: z.string(),\n at: z.string().datetime(),\n payload: z.record(z.unknown()),\n});\nexport type AuditEvent = z.infer<typeof AuditEvent>;\n\nexport const AuditListResponse = z.object({ events: z.array(AuditEvent) });\nexport type AuditListResponse = z.infer<typeof AuditListResponse>;\n\nexport const AuditExport = z.object({\n id: z.string(),\n destinationKind: z.enum(['s3', 'r2', 'splunk-hec']),\n status: z.enum(['active', 'paused', 'failed']),\n lastCursorAt: z.string().datetime().nullable(),\n});\nexport const AuditExportListResponse = z.object({ exports: z.array(AuditExport) });\n\nexport const CreateAuditExportInput = z.object({\n destinationKind: z.enum(['s3', 'r2', 'splunk-hec']),\n /** Free-form config; encrypted at rest. Schema enforced by destination kind. */\n config: z.record(z.unknown()),\n});\n\n// ---- api keys ---------------------------------------------------------------\n\nexport const ApiKeySummary = z.object({\n id: z.string(),\n name: z.string(),\n prefix: z.string(),\n role: z.enum(['owner', 'admin', 'experimenter', 'viewer']),\n scopes: z.array(z.enum(['read', 'write', 'admin'])),\n createdAt: z.string().datetime(),\n lastUsedAt: z.string().datetime().nullable(),\n expiresAt: z.string().datetime().nullable(),\n});\nexport const ApiKeyListResponse = z.object({ keys: z.array(ApiKeySummary) });\n\nexport const CreateApiKeyInput = z.object({\n name: z.string().min(1).max(120),\n /** ISO datetime of expiry; null for non-expiring (not recommended in prod). */\n expiresAt: z.string().datetime().nullable(),\n /** Role assigned to the key. Defaults to the creator's role. */\n role: z.enum(['owner', 'admin', 'experimenter', 'viewer']).optional(),\n /** Permission scopes assigned to the key. Defaults are derived from role. */\n scopes: z.array(z.enum(['read', 'write', 'admin'])).optional(),\n});\nexport type CreateApiKeyInput = z.infer<typeof CreateApiKeyInput>;\n\nexport const CreateApiKeyResponse = ApiKeySummary.extend({\n /** Plaintext key, returned exactly once at creation time. */\n key: z.string(),\n});\nexport type CreateApiKeyResponse = z.infer<typeof CreateApiKeyResponse>;\n\n// ---- SAML / SSO --------------------------------------------------------------\n\nexport const SamlConfig = z\n .object({\n enabled: z.boolean(),\n connectionId: z.string().min(1).max(200).nullable(),\n issuer: z.string().min(1).max(500).nullable(),\n ssoUrl: z.string().url().nullable(),\n certificate: z.string().min(1).max(10000).nullable(),\n })\n .refine(\n (value) =>\n !value.enabled ||\n Boolean(value.connectionId && value.issuer && value.ssoUrl && value.certificate),\n {\n message: 'connectionId, issuer, ssoUrl, certificate required when SAML is enabled',\n },\n );\nexport type SamlConfig = z.infer<typeof SamlConfig>;\n\n// ---- quality / test evidence ------------------------------------------------\n\nexport const TestRunStatus = z.enum(['running', 'passed', 'failed', 'skipped', 'canceled']);\nexport type TestRunStatus = z.infer<typeof TestRunStatus>;\n\nexport const TestCaseStatus = z.enum([\n 'passed',\n 'failed',\n 'skipped',\n 'pending',\n 'undefined',\n 'unknown',\n]);\n\nexport const TestCaseResult = z.object({\n id: z.string().max(240).optional(),\n name: z.string().min(1).max(500),\n uri: z.string().max(1000).optional(),\n status: TestCaseStatus,\n durationMs: z.number().int().nonnegative().max(86_400_000),\n tags: z.array(z.string().max(120)).max(100).default([]),\n error: z.string().max(65_536).optional(),\n statementId: z.string().max(240).optional(),\n resourceUrl: z.string().url().max(4000).optional(),\n details: z.record(z.unknown()).optional(),\n});\nexport type TestCaseResult = z.infer<typeof TestCaseResult>;\n\nexport const TestRunSummary = z.object({\n total: z.number().int().nonnegative(),\n passed: z.number().int().nonnegative(),\n failed: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n pending: z.number().int().nonnegative().default(0),\n});\n\nexport const TestRunArtifact = z.object({\n name: z.string().min(1).max(240),\n url: z.string().url().max(4000),\n mediaType: z.string().max(240).optional(),\n});\n\nexport const CreateTestRunInput = z.object({\n externalId: z.string().min(1).max(300).optional(),\n source: z.enum(['bdd', 'live-suite', 'junit', 'cli', 'other']),\n suite: z.string().min(1).max(240),\n status: TestRunStatus,\n startedAt: z.string().datetime().nullable().optional(),\n finishedAt: z.string().datetime().nullable().optional(),\n durationMs: z.number().int().nonnegative().max(604_800_000).default(0),\n summary: TestRunSummary,\n environment: z.record(z.unknown()).default({}),\n revision: z.record(z.unknown()).default({}),\n cases: z.array(TestCaseResult).max(2000).default([]),\n artifacts: z.array(TestRunArtifact).max(100).default([]),\n});\nexport type CreateTestRunInput = z.infer<typeof CreateTestRunInput>;\n\nexport const TestRun = CreateTestRunInput.extend({\n id: z.string().uuid(),\n orgId: z.string(),\n createdBy: z.string(),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n});\nexport type TestRun = z.infer<typeof TestRun>;\n\nexport const TestRunListInput = z.object({\n status: TestRunStatus.optional(),\n source: CreateTestRunInput.shape.source.optional(),\n suite: z.string().min(1).max(240).optional(),\n limit: z.coerce.number().int().min(1).max(200).optional(),\n});\nexport const TestRunListResponse = z.object({\n runs: z.array(TestRun.omit({ cases: true })),\n});\n\n// ---- the registry ----------------------------------------------------------\n\nexport const endpoints = {\n 'tenants.me': {\n method: 'GET',\n path: '/v1/tenants/me',\n params: Empty,\n response: TenantSelf,\n mutates: false,\n requiresRole: null,\n },\n\n 'experiments.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/experiments',\n params: Empty,\n response: ExperimentListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'experiments.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/experiments',\n params: CreateExperimentInput,\n response: CreateExperimentResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'experiments.get': {\n method: 'GET',\n path: '/v1/orgs/:orgId/experiments/:experimentId',\n params: Empty,\n response: Experiment,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'experiments.invokeAction': {\n method: 'POST',\n path: '/v1/orgs/:orgId/experiments/actions',\n params: InvokeActionInput,\n response: InvokeActionResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'experiments.aggregate': {\n method: 'GET',\n path: '/v1/orgs/:orgId/experiments/:experimentId/aggregate',\n params: AggregateInput,\n response: AggregateResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n\n 'projects.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/projects',\n params: Empty,\n response: ProjectListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'projects.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/projects',\n params: CreateProjectInput,\n response: Project,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'properties.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/projects/:projectId/properties',\n params: Empty,\n response: PropertyListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'properties.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/projects/:projectId/properties',\n params: CreatePropertyInput,\n response: Property,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'environments.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/projects/:projectId/environments',\n params: Empty,\n response: EnvironmentListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'environments.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/projects/:projectId/environments',\n params: CreateEnvironmentInput,\n response: Environment,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'features.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/projects/:projectId/features',\n params: Empty,\n response: FeatureListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'features.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/projects/:projectId/features',\n params: CreateFeatureInput,\n response: Feature,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'rules.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/features/:featureId/rules',\n params: Empty,\n response: FeatureRuleListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'rules.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/features/:featureId/rules',\n params: CreateFeatureRuleInput,\n response: FeatureRule,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'environments.publish': {\n method: 'POST',\n path: '/v1/orgs/:orgId/environments/:environmentId/publish',\n params: Empty,\n response: EnvironmentPublication,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'environments.publications': {\n method: 'GET',\n path: '/v1/orgs/:orgId/environments/:environmentId/publications',\n params: Empty,\n response: PublicationListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'environments.promote': {\n method: 'POST',\n path: '/v1/orgs/:orgId/environments/:environmentId/promote',\n params: PromoteEnvironmentInput,\n response: PromoteEnvironmentResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'configuration.getPublished': {\n method: 'GET',\n path: '/v1/orgs/:orgId/environments/:environmentId/configuration',\n params: Empty,\n response: EnvironmentPublication,\n mutates: false,\n requiresRole: 'viewer',\n },\n\n 'manifests.publish': {\n method: 'POST',\n path: '/v1/orgs/:orgId/manifests/publish',\n params: Empty,\n response: PublishManifestResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'manifests.getKeys': {\n method: 'GET',\n path: '/v1/orgs/:orgId/manifests/keys',\n params: Empty,\n response: ManifestKeysResponse,\n mutates: false,\n requiresRole: 'admin',\n },\n 'manifests.rotateKey': {\n method: 'POST',\n path: '/v1/orgs/:orgId/manifests/keys/rotate',\n params: z.object({ keyId: z.string().min(1).max(128) }),\n response: ManifestKey,\n mutates: true,\n requiresRole: 'admin',\n },\n 'manifests.retireKey': {\n method: 'POST',\n path: '/v1/orgs/:orgId/manifests/keys/retire',\n params: z.object({ keyId: z.string() }),\n response: ManifestKey,\n mutates: true,\n requiresRole: 'admin',\n },\n\n 'preview.sign': {\n method: 'POST',\n path: '/v1/orgs/:orgId/preview/sign',\n params: PreviewSignInput,\n response: PreviewSignResponse,\n mutates: true,\n requiresRole: 'experimenter',\n },\n\n 'audit.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/audit',\n params: Empty,\n response: AuditListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'audit.exports.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/audit/exports',\n params: Empty,\n response: AuditExportListResponse,\n mutates: false,\n requiresRole: 'admin',\n },\n 'audit.exports.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/audit/exports',\n params: CreateAuditExportInput,\n response: AuditExport,\n mutates: true,\n requiresRole: 'admin',\n },\n 'audit.exports.delete': {\n method: 'DELETE',\n path: '/v1/orgs/:orgId/audit/exports/:exportId',\n params: Empty,\n response: z.object({ ok: z.literal(true) }),\n mutates: true,\n requiresRole: 'admin',\n },\n\n 'apiKeys.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/api-keys',\n params: Empty,\n response: ApiKeyListResponse,\n mutates: false,\n requiresRole: 'admin',\n },\n 'apiKeys.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/api-keys',\n params: CreateApiKeyInput,\n response: CreateApiKeyResponse,\n mutates: true,\n requiresRole: 'admin',\n },\n 'apiKeys.revoke': {\n method: 'DELETE',\n path: '/v1/orgs/:orgId/api-keys/:keyId',\n params: Empty,\n response: z.object({ ok: z.literal(true) }),\n mutates: true,\n requiresRole: 'admin',\n },\n\n 'saml.get': {\n method: 'GET',\n path: '/v1/orgs/:orgId/saml',\n params: Empty,\n response: SamlConfig,\n mutates: false,\n requiresRole: 'owner',\n },\n 'saml.update': {\n method: 'POST',\n path: '/v1/orgs/:orgId/saml',\n params: SamlConfig,\n response: SamlConfig,\n mutates: true,\n requiresRole: 'owner',\n },\n\n 'testRuns.list': {\n method: 'GET',\n path: '/v1/orgs/:orgId/test-runs',\n params: TestRunListInput,\n response: TestRunListResponse,\n mutates: false,\n requiresRole: 'viewer',\n },\n 'testRuns.create': {\n method: 'POST',\n path: '/v1/orgs/:orgId/test-runs',\n params: CreateTestRunInput,\n response: TestRun,\n mutates: true,\n requiresRole: 'experimenter',\n },\n 'testRuns.get': {\n method: 'GET',\n path: '/v1/orgs/:orgId/test-runs/:runId',\n params: Empty,\n response: TestRun,\n mutates: false,\n requiresRole: 'viewer',\n },\n} satisfies Record<string, EndpointDef>;\n\nexport type EndpointName = keyof typeof endpoints;\nexport type EndpointParams<E extends EndpointName> = z.infer<(typeof endpoints)[E]['params']>;\nexport type EndpointResponse<E extends EndpointName> = z.infer<(typeof endpoints)[E]['response']>;\n\n/** Substitute path parameters in a path template. */\nexport function buildPath(template: string, pathParams: Record<string, string>): string {\n return template.replace(/:([a-zA-Z][a-zA-Z0-9_]*)/g, (_, name) => {\n const v = pathParams[name];\n if (v == null) throw new Error(`Missing path parameter: ${name}`);\n return encodeURIComponent(v);\n });\n}\n","import { z } from 'zod';\n\nexport const ApiError = z.object({\n code: z.enum([\n 'UNAUTHENTICATED',\n 'FORBIDDEN',\n 'NOT_FOUND',\n 'VALIDATION_FAILED',\n 'CONFLICT',\n 'RATE_LIMITED',\n 'INTERNAL',\n ]),\n message: z.string(),\n details: z.record(z.unknown()).optional(),\n});\nexport type ApiError = z.infer<typeof ApiError>;\n"]}
|