@shipeasy/openapi 2.1.0 → 2.2.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.
- package/dist/{chunk-EPLLHLZN.js → chunk-643YSMLU.js} +1 -1
- package/dist/{chunk-EPLLHLZN.js.map → chunk-643YSMLU.js.map} +1 -1
- package/dist/{chunk-SPH5HWCD.js → chunk-MRW3DJ57.js} +147 -88
- package/dist/chunk-MRW3DJ57.js.map +1 -0
- package/dist/{client-pVkoo3Bf.d.ts → client-K0ShmsC7.d.ts} +196 -98
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/custom.d.ts +23 -1
- package/dist/custom.js +8 -0
- package/dist/custom.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/schemas.d.ts +85 -32
- package/dist/schemas.js +17 -1
- package/openapi.json +533 -96
- package/openapi.yaml +390 -92
- package/package.json +1 -1
- package/spec/components/parameters.yaml +8 -0
- package/spec/components/responses.yaml +15 -0
- package/spec/components/schemas/common.yaml +5 -0
- package/spec/components/schemas/connectors.yaml +5 -11
- package/spec/components/schemas/gate-templates.yaml +41 -2
- package/spec/components/schemas/ops.yaml +4 -2
- package/spec/openapi.yaml +21 -2
- package/spec/paths/alert-rules.yaml +10 -2
- package/spec/paths/attributes.yaml +14 -3
- package/spec/paths/configs.yaml +23 -9
- package/spec/paths/connectors.yaml +42 -8
- package/spec/paths/errors.yaml +4 -4
- package/spec/paths/events.yaml +18 -4
- package/spec/paths/experiments.yaml +37 -11
- package/spec/paths/gate-templates.yaml +9 -5
- package/spec/paths/gates.yaml +20 -6
- package/spec/paths/i18n.yaml +18 -5
- package/spec/paths/keys.yaml +2 -1
- package/spec/paths/killswitches.yaml +23 -6
- package/spec/paths/metrics.yaml +14 -3
- package/spec/paths/ops.yaml +3 -3
- package/spec/paths/projects.yaml +1 -1
- package/spec/paths/universes.yaml +10 -2
- package/dist/chunk-SPH5HWCD.js.map +0 -1
package/openapi.json
CHANGED
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"tags": [
|
|
32
32
|
{
|
|
33
33
|
"name": "Release",
|
|
34
|
-
"summary": "Feature delivery",
|
|
34
|
+
"summary": "Feature delivery — flags, kill switches, dynamic configs, A/B experiments, and the universes they bucket in.",
|
|
35
35
|
"kind": "nav",
|
|
36
|
-
"description": "
|
|
36
|
+
"description": "Release: the feature-delivery surface. One roof over the five resources\nthat decide which code path a user gets — feature gates (flags), kill\nswitches, dynamic configs, A/B/n experiments, and the universes that bucket\nthem — each exposed as its own subcommand group.\n\n**Groups.**\n- `flags` — boolean feature gates: AND-combined targeting rules + a percentage rollout (basis points), evaluated on the SDK hot path.\n- `killswitch` (`ks`) — per-env boolean overrides for incident response; no rules, no rollout, versioned per environment.\n- `configs` — JSON-Schema-validated structured values with a draft → publish workflow, delivered per environment.\n- `experiments` — randomised A/B/n assignment plus the analysis pipeline (t-test, sequential testing, SRM detection); `universes` hold the shared bucketing space and holdouts the experiments draw from.\n\n**Delivery model.** Every write rebuilds the project's KV blob and purges\nthe CDN — SDKs poll at the plan interval and never touch the database on\nthe hot path. The destructive verb is `archive` (soft-delete), never\n`delete`.\n\nRun `shipeasy release <group> --help` for the full contract of each group."
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"name": "Flags",
|
|
@@ -157,6 +157,9 @@
|
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"$ref": "#/components/parameters/PaginationCursor"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"$ref": "#/components/parameters/Q"
|
|
160
163
|
}
|
|
161
164
|
],
|
|
162
165
|
"responses": {
|
|
@@ -360,6 +363,32 @@
|
|
|
360
363
|
"name": "checkout_v2"
|
|
361
364
|
}
|
|
362
365
|
}
|
|
366
|
+
},
|
|
367
|
+
"links": {
|
|
368
|
+
"UpdateGate": {
|
|
369
|
+
"operationId": "updateGate",
|
|
370
|
+
"parameters": {
|
|
371
|
+
"id": "$response.body#/id"
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
"EnableGate": {
|
|
375
|
+
"operationId": "enableGate",
|
|
376
|
+
"parameters": {
|
|
377
|
+
"id": "$response.body#/id"
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
"DisableGate": {
|
|
381
|
+
"operationId": "disableGate",
|
|
382
|
+
"parameters": {
|
|
383
|
+
"id": "$response.body#/id"
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
"DeleteGate": {
|
|
387
|
+
"operationId": "deleteGate",
|
|
388
|
+
"parameters": {
|
|
389
|
+
"id": "$response.body#/id"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
363
392
|
}
|
|
364
393
|
},
|
|
365
394
|
"400": {
|
|
@@ -414,7 +443,7 @@
|
|
|
414
443
|
"required": true,
|
|
415
444
|
"description": "Stable opaque gate id (`gat_…`) or the gate's `name`.",
|
|
416
445
|
"schema": {
|
|
417
|
-
"
|
|
446
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
418
447
|
}
|
|
419
448
|
}
|
|
420
449
|
],
|
|
@@ -569,7 +598,7 @@
|
|
|
569
598
|
"required": true,
|
|
570
599
|
"description": "Stable opaque gate id (`gat_…`) or the gate's `name`.",
|
|
571
600
|
"schema": {
|
|
572
|
-
"
|
|
601
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
573
602
|
}
|
|
574
603
|
}
|
|
575
604
|
],
|
|
@@ -639,12 +668,12 @@
|
|
|
639
668
|
"required": true,
|
|
640
669
|
"description": "Stable opaque gate id (`gat_…`) or the gate's `name`.",
|
|
641
670
|
"schema": {
|
|
642
|
-
"
|
|
671
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
643
672
|
}
|
|
644
673
|
}
|
|
645
674
|
],
|
|
646
675
|
"responses": {
|
|
647
|
-
"
|
|
676
|
+
"200": {
|
|
648
677
|
"description": "Enable a gate",
|
|
649
678
|
"content": {
|
|
650
679
|
"application/json": {
|
|
@@ -710,12 +739,12 @@
|
|
|
710
739
|
"required": true,
|
|
711
740
|
"description": "Stable opaque gate id (`gat_…`) or the gate's `name`.",
|
|
712
741
|
"schema": {
|
|
713
|
-
"
|
|
742
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
714
743
|
}
|
|
715
744
|
}
|
|
716
745
|
],
|
|
717
746
|
"responses": {
|
|
718
|
-
"
|
|
747
|
+
"200": {
|
|
719
748
|
"description": "Disable a gate",
|
|
720
749
|
"content": {
|
|
721
750
|
"application/json": {
|
|
@@ -780,6 +809,18 @@
|
|
|
780
809
|
},
|
|
781
810
|
{
|
|
782
811
|
"$ref": "#/components/parameters/PaginationCursor"
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
"name": "status",
|
|
815
|
+
"in": "query",
|
|
816
|
+
"required": false,
|
|
817
|
+
"description": "Filter by lifecycle status. Pass `archived` to return the archive tab; any other value (or omitting it) returns the non-archived experiments.",
|
|
818
|
+
"schema": {
|
|
819
|
+
"type": "string"
|
|
820
|
+
}
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"$ref": "#/components/parameters/Q"
|
|
783
824
|
}
|
|
784
825
|
],
|
|
785
826
|
"responses": {
|
|
@@ -990,6 +1031,44 @@
|
|
|
990
1031
|
"name": "checkout_button_color"
|
|
991
1032
|
}
|
|
992
1033
|
}
|
|
1034
|
+
},
|
|
1035
|
+
"links": {
|
|
1036
|
+
"GetExperiment": {
|
|
1037
|
+
"operationId": "getExperiment",
|
|
1038
|
+
"parameters": {
|
|
1039
|
+
"id": "$response.body#/id"
|
|
1040
|
+
}
|
|
1041
|
+
},
|
|
1042
|
+
"UpdateExperiment": {
|
|
1043
|
+
"operationId": "updateExperiment",
|
|
1044
|
+
"parameters": {
|
|
1045
|
+
"id": "$response.body#/id"
|
|
1046
|
+
}
|
|
1047
|
+
},
|
|
1048
|
+
"SetExperimentMetrics": {
|
|
1049
|
+
"operationId": "setExperimentMetrics",
|
|
1050
|
+
"parameters": {
|
|
1051
|
+
"id": "$response.body#/id"
|
|
1052
|
+
}
|
|
1053
|
+
},
|
|
1054
|
+
"SetExperimentStatus": {
|
|
1055
|
+
"operationId": "setExperimentStatus",
|
|
1056
|
+
"parameters": {
|
|
1057
|
+
"id": "$response.body#/id"
|
|
1058
|
+
}
|
|
1059
|
+
},
|
|
1060
|
+
"ReanalyzeExperiment": {
|
|
1061
|
+
"operationId": "reanalyzeExperiment",
|
|
1062
|
+
"parameters": {
|
|
1063
|
+
"id": "$response.body#/id"
|
|
1064
|
+
}
|
|
1065
|
+
},
|
|
1066
|
+
"DeleteExperiment": {
|
|
1067
|
+
"operationId": "deleteExperiment",
|
|
1068
|
+
"parameters": {
|
|
1069
|
+
"id": "$response.body#/id"
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
993
1072
|
}
|
|
994
1073
|
},
|
|
995
1074
|
"400": {
|
|
@@ -1047,7 +1126,7 @@
|
|
|
1047
1126
|
"required": true,
|
|
1048
1127
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1049
1128
|
"schema": {
|
|
1050
|
-
"
|
|
1129
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1051
1130
|
}
|
|
1052
1131
|
}
|
|
1053
1132
|
],
|
|
@@ -1148,7 +1227,7 @@
|
|
|
1148
1227
|
"required": true,
|
|
1149
1228
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1150
1229
|
"schema": {
|
|
1151
|
-
"
|
|
1230
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1152
1231
|
}
|
|
1153
1232
|
}
|
|
1154
1233
|
],
|
|
@@ -1271,7 +1350,7 @@
|
|
|
1271
1350
|
"required": true,
|
|
1272
1351
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1273
1352
|
"schema": {
|
|
1274
|
-
"
|
|
1353
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1275
1354
|
}
|
|
1276
1355
|
}
|
|
1277
1356
|
],
|
|
@@ -1341,7 +1420,7 @@
|
|
|
1341
1420
|
"required": true,
|
|
1342
1421
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1343
1422
|
"schema": {
|
|
1344
|
-
"
|
|
1423
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1345
1424
|
}
|
|
1346
1425
|
}
|
|
1347
1426
|
],
|
|
@@ -1386,7 +1465,7 @@
|
|
|
1386
1465
|
}
|
|
1387
1466
|
},
|
|
1388
1467
|
"responses": {
|
|
1389
|
-
"
|
|
1468
|
+
"200": {
|
|
1390
1469
|
"description": "Transition experiment status",
|
|
1391
1470
|
"content": {
|
|
1392
1471
|
"application/json": {
|
|
@@ -1475,7 +1554,7 @@
|
|
|
1475
1554
|
"required": true,
|
|
1476
1555
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1477
1556
|
"schema": {
|
|
1478
|
-
"
|
|
1557
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1479
1558
|
}
|
|
1480
1559
|
}
|
|
1481
1560
|
],
|
|
@@ -1515,7 +1594,7 @@
|
|
|
1515
1594
|
}
|
|
1516
1595
|
},
|
|
1517
1596
|
"responses": {
|
|
1518
|
-
"
|
|
1597
|
+
"200": {
|
|
1519
1598
|
"description": "Attach metrics",
|
|
1520
1599
|
"content": {
|
|
1521
1600
|
"application/json": {
|
|
@@ -1592,7 +1671,7 @@
|
|
|
1592
1671
|
"required": true,
|
|
1593
1672
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1594
1673
|
"schema": {
|
|
1595
|
-
"
|
|
1674
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1596
1675
|
}
|
|
1597
1676
|
}
|
|
1598
1677
|
],
|
|
@@ -1688,7 +1767,7 @@
|
|
|
1688
1767
|
"required": true,
|
|
1689
1768
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1690
1769
|
"schema": {
|
|
1691
|
-
"
|
|
1770
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1692
1771
|
}
|
|
1693
1772
|
},
|
|
1694
1773
|
{
|
|
@@ -1792,12 +1871,12 @@
|
|
|
1792
1871
|
"required": true,
|
|
1793
1872
|
"description": "Stable opaque experiment id (`exp_…`) or the experiment's `name`.",
|
|
1794
1873
|
"schema": {
|
|
1795
|
-
"
|
|
1874
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
1796
1875
|
}
|
|
1797
1876
|
}
|
|
1798
1877
|
],
|
|
1799
1878
|
"responses": {
|
|
1800
|
-
"
|
|
1879
|
+
"200": {
|
|
1801
1880
|
"description": "Re-queue analysis",
|
|
1802
1881
|
"content": {
|
|
1803
1882
|
"application/json": {
|
|
@@ -1862,6 +1941,9 @@
|
|
|
1862
1941
|
},
|
|
1863
1942
|
{
|
|
1864
1943
|
"$ref": "#/components/parameters/PaginationCursor"
|
|
1944
|
+
},
|
|
1945
|
+
{
|
|
1946
|
+
"$ref": "#/components/parameters/Q"
|
|
1865
1947
|
}
|
|
1866
1948
|
],
|
|
1867
1949
|
"responses": {
|
|
@@ -2089,6 +2171,32 @@
|
|
|
2089
2171
|
"name": "pricing.tiers"
|
|
2090
2172
|
}
|
|
2091
2173
|
}
|
|
2174
|
+
},
|
|
2175
|
+
"links": {
|
|
2176
|
+
"GetConfig": {
|
|
2177
|
+
"operationId": "getConfig",
|
|
2178
|
+
"parameters": {
|
|
2179
|
+
"id": "$response.body#/id"
|
|
2180
|
+
}
|
|
2181
|
+
},
|
|
2182
|
+
"UpdateConfig": {
|
|
2183
|
+
"operationId": "updateConfig",
|
|
2184
|
+
"parameters": {
|
|
2185
|
+
"id": "$response.body#/id"
|
|
2186
|
+
}
|
|
2187
|
+
},
|
|
2188
|
+
"PublishConfigDraft": {
|
|
2189
|
+
"operationId": "publishConfigDraft",
|
|
2190
|
+
"parameters": {
|
|
2191
|
+
"id": "$response.body#/id"
|
|
2192
|
+
}
|
|
2193
|
+
},
|
|
2194
|
+
"DeleteConfig": {
|
|
2195
|
+
"operationId": "deleteConfig",
|
|
2196
|
+
"parameters": {
|
|
2197
|
+
"id": "$response.body#/id"
|
|
2198
|
+
}
|
|
2199
|
+
}
|
|
2092
2200
|
}
|
|
2093
2201
|
},
|
|
2094
2202
|
"400": {
|
|
@@ -2143,7 +2251,7 @@
|
|
|
2143
2251
|
"required": true,
|
|
2144
2252
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2145
2253
|
"schema": {
|
|
2146
|
-
"
|
|
2254
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2147
2255
|
}
|
|
2148
2256
|
}
|
|
2149
2257
|
],
|
|
@@ -2298,7 +2406,7 @@
|
|
|
2298
2406
|
"required": true,
|
|
2299
2407
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2300
2408
|
"schema": {
|
|
2301
|
-
"
|
|
2409
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2302
2410
|
}
|
|
2303
2411
|
}
|
|
2304
2412
|
],
|
|
@@ -2414,7 +2522,7 @@
|
|
|
2414
2522
|
"required": true,
|
|
2415
2523
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2416
2524
|
"schema": {
|
|
2417
|
-
"
|
|
2525
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2418
2526
|
}
|
|
2419
2527
|
}
|
|
2420
2528
|
],
|
|
@@ -2483,7 +2591,7 @@
|
|
|
2483
2591
|
"required": true,
|
|
2484
2592
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2485
2593
|
"schema": {
|
|
2486
|
-
"
|
|
2594
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2487
2595
|
}
|
|
2488
2596
|
}
|
|
2489
2597
|
],
|
|
@@ -2586,7 +2694,7 @@
|
|
|
2586
2694
|
"required": true,
|
|
2587
2695
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2588
2696
|
"schema": {
|
|
2589
|
-
"
|
|
2697
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2590
2698
|
}
|
|
2591
2699
|
}
|
|
2592
2700
|
],
|
|
@@ -2674,7 +2782,7 @@
|
|
|
2674
2782
|
"required": true,
|
|
2675
2783
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2676
2784
|
"schema": {
|
|
2677
|
-
"
|
|
2785
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2678
2786
|
}
|
|
2679
2787
|
}
|
|
2680
2788
|
],
|
|
@@ -2705,7 +2813,7 @@
|
|
|
2705
2813
|
}
|
|
2706
2814
|
},
|
|
2707
2815
|
"responses": {
|
|
2708
|
-
"
|
|
2816
|
+
"200": {
|
|
2709
2817
|
"description": "Publish a draft",
|
|
2710
2818
|
"content": {
|
|
2711
2819
|
"application/json": {
|
|
@@ -2773,7 +2881,7 @@
|
|
|
2773
2881
|
"required": true,
|
|
2774
2882
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2775
2883
|
"schema": {
|
|
2776
|
-
"
|
|
2884
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2777
2885
|
}
|
|
2778
2886
|
},
|
|
2779
2887
|
{
|
|
@@ -2864,7 +2972,7 @@
|
|
|
2864
2972
|
"required": true,
|
|
2865
2973
|
"description": "Stable opaque config id (`cfg_…`) or the config's `name`.",
|
|
2866
2974
|
"schema": {
|
|
2867
|
-
"
|
|
2975
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
2868
2976
|
}
|
|
2869
2977
|
}
|
|
2870
2978
|
],
|
|
@@ -2965,6 +3073,9 @@
|
|
|
2965
3073
|
},
|
|
2966
3074
|
{
|
|
2967
3075
|
"$ref": "#/components/parameters/PaginationCursor"
|
|
3076
|
+
},
|
|
3077
|
+
{
|
|
3078
|
+
"$ref": "#/components/parameters/Q"
|
|
2968
3079
|
}
|
|
2969
3080
|
],
|
|
2970
3081
|
"responses": {
|
|
@@ -3102,6 +3213,38 @@
|
|
|
3102
3213
|
"name": "payments.checkout"
|
|
3103
3214
|
}
|
|
3104
3215
|
}
|
|
3216
|
+
},
|
|
3217
|
+
"links": {
|
|
3218
|
+
"GetKillswitch": {
|
|
3219
|
+
"operationId": "getKillswitch",
|
|
3220
|
+
"parameters": {
|
|
3221
|
+
"id": "$response.body#/id"
|
|
3222
|
+
}
|
|
3223
|
+
},
|
|
3224
|
+
"UpdateKillswitch": {
|
|
3225
|
+
"operationId": "updateKillswitch",
|
|
3226
|
+
"parameters": {
|
|
3227
|
+
"id": "$response.body#/id"
|
|
3228
|
+
}
|
|
3229
|
+
},
|
|
3230
|
+
"SetKillswitchSwitch": {
|
|
3231
|
+
"operationId": "setKillswitchSwitch",
|
|
3232
|
+
"parameters": {
|
|
3233
|
+
"id": "$response.body#/id"
|
|
3234
|
+
}
|
|
3235
|
+
},
|
|
3236
|
+
"SetKillswitchValue": {
|
|
3237
|
+
"operationId": "setKillswitchValue",
|
|
3238
|
+
"parameters": {
|
|
3239
|
+
"id": "$response.body#/id"
|
|
3240
|
+
}
|
|
3241
|
+
},
|
|
3242
|
+
"DeleteKillswitch": {
|
|
3243
|
+
"operationId": "deleteKillswitch",
|
|
3244
|
+
"parameters": {
|
|
3245
|
+
"id": "$response.body#/id"
|
|
3246
|
+
}
|
|
3247
|
+
}
|
|
3105
3248
|
}
|
|
3106
3249
|
},
|
|
3107
3250
|
"400": {
|
|
@@ -3156,7 +3299,7 @@
|
|
|
3156
3299
|
"required": true,
|
|
3157
3300
|
"description": "Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.",
|
|
3158
3301
|
"schema": {
|
|
3159
|
-
"
|
|
3302
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3160
3303
|
}
|
|
3161
3304
|
}
|
|
3162
3305
|
],
|
|
@@ -3246,7 +3389,7 @@
|
|
|
3246
3389
|
"required": true,
|
|
3247
3390
|
"description": "Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.",
|
|
3248
3391
|
"schema": {
|
|
3249
|
-
"
|
|
3392
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3250
3393
|
}
|
|
3251
3394
|
}
|
|
3252
3395
|
],
|
|
@@ -3357,7 +3500,7 @@
|
|
|
3357
3500
|
"required": true,
|
|
3358
3501
|
"description": "Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.",
|
|
3359
3502
|
"schema": {
|
|
3360
|
-
"
|
|
3503
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3361
3504
|
}
|
|
3362
3505
|
}
|
|
3363
3506
|
],
|
|
@@ -3426,7 +3569,7 @@
|
|
|
3426
3569
|
"required": true,
|
|
3427
3570
|
"description": "Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.",
|
|
3428
3571
|
"schema": {
|
|
3429
|
-
"
|
|
3572
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3430
3573
|
}
|
|
3431
3574
|
}
|
|
3432
3575
|
],
|
|
@@ -3527,7 +3670,7 @@
|
|
|
3527
3670
|
"required": true,
|
|
3528
3671
|
"description": "Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.",
|
|
3529
3672
|
"schema": {
|
|
3530
|
-
"
|
|
3673
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3531
3674
|
}
|
|
3532
3675
|
}
|
|
3533
3676
|
],
|
|
@@ -3619,7 +3762,7 @@
|
|
|
3619
3762
|
"required": true,
|
|
3620
3763
|
"description": "Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.",
|
|
3621
3764
|
"schema": {
|
|
3622
|
-
"
|
|
3765
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3623
3766
|
}
|
|
3624
3767
|
}
|
|
3625
3768
|
],
|
|
@@ -3724,6 +3867,9 @@
|
|
|
3724
3867
|
},
|
|
3725
3868
|
{
|
|
3726
3869
|
"$ref": "#/components/parameters/PaginationCursor"
|
|
3870
|
+
},
|
|
3871
|
+
{
|
|
3872
|
+
"$ref": "#/components/parameters/Q"
|
|
3727
3873
|
}
|
|
3728
3874
|
],
|
|
3729
3875
|
"responses": {
|
|
@@ -3843,6 +3989,20 @@
|
|
|
3843
3989
|
"name": "primary_users"
|
|
3844
3990
|
}
|
|
3845
3991
|
}
|
|
3992
|
+
},
|
|
3993
|
+
"links": {
|
|
3994
|
+
"UpdateUniverse": {
|
|
3995
|
+
"operationId": "updateUniverse",
|
|
3996
|
+
"parameters": {
|
|
3997
|
+
"id": "$response.body#/id"
|
|
3998
|
+
}
|
|
3999
|
+
},
|
|
4000
|
+
"DeleteUniverse": {
|
|
4001
|
+
"operationId": "deleteUniverse",
|
|
4002
|
+
"parameters": {
|
|
4003
|
+
"id": "$response.body#/id"
|
|
4004
|
+
}
|
|
4005
|
+
}
|
|
3846
4006
|
}
|
|
3847
4007
|
},
|
|
3848
4008
|
"400": {
|
|
@@ -3898,7 +4058,7 @@
|
|
|
3898
4058
|
"required": true,
|
|
3899
4059
|
"description": "Stable opaque universe id (`uni_…`) or the universe's `name`.",
|
|
3900
4060
|
"schema": {
|
|
3901
|
-
"
|
|
4061
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
3902
4062
|
}
|
|
3903
4063
|
}
|
|
3904
4064
|
],
|
|
@@ -3996,7 +4156,7 @@
|
|
|
3996
4156
|
"required": true,
|
|
3997
4157
|
"description": "Stable opaque universe id (`uni_…`) or the universe's `name`.",
|
|
3998
4158
|
"schema": {
|
|
3999
|
-
"
|
|
4159
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4000
4160
|
}
|
|
4001
4161
|
}
|
|
4002
4162
|
],
|
|
@@ -4052,7 +4212,7 @@
|
|
|
4052
4212
|
"get": {
|
|
4053
4213
|
"operationId": "listGateTemplates",
|
|
4054
4214
|
"summary": "List gate templates",
|
|
4055
|
-
"description": "Returns the merged targeting-rule template catalog — read-only **built-ins first** (the `@team`/`@owner` audience aliases, country, email-domain, region presets, …), then this project's **customer** templates. Each item carries a `rules: [{ attr, op, value }]` definition; the alias templates carry a symbol value (`email in [\"@team\"]`) that the SDK expands to the resolved email list at rebuild.\n\n**Turn \"launch X in country Y\" into a gated flag:** list templates (optionally with `
|
|
4215
|
+
"description": "Returns the merged targeting-rule template catalog — read-only **built-ins first** (the `@team`/`@owner` audience aliases, country, email-domain, region presets, …), then this project's **customer** templates. Each item carries a `rules: [{ attr, op, value }]` definition; the alias templates carry a symbol value (`email in [\"@team\"]`) that the SDK expands to the resolved email list at rebuild.\n\n**Turn \"launch X in country Y\" into a gated flag:** list templates (optionally with `q`), take the matching template's `rules`, substitute the concrete value(s), and pass them as the `rules` arg of `release_flags_create`.\n\nThe catalog is small and bounded, so the full merged set is returned in one page — this endpoint is **not** paginated (`next_cursor` is always `null`; there are no `limit`/`cursor` params).",
|
|
4056
4216
|
"tags": [
|
|
4057
4217
|
"Templates"
|
|
4058
4218
|
],
|
|
@@ -4060,11 +4220,15 @@
|
|
|
4060
4220
|
{
|
|
4061
4221
|
"$ref": "#/components/parameters/ProjectId"
|
|
4062
4222
|
},
|
|
4223
|
+
{
|
|
4224
|
+
"$ref": "#/components/parameters/Q"
|
|
4225
|
+
},
|
|
4063
4226
|
{
|
|
4064
4227
|
"name": "query",
|
|
4065
4228
|
"in": "query",
|
|
4066
4229
|
"required": false,
|
|
4067
|
-
"
|
|
4230
|
+
"deprecated": true,
|
|
4231
|
+
"description": "Deprecated alias for `q`, kept working for one release. Prefer `q`.",
|
|
4068
4232
|
"schema": {
|
|
4069
4233
|
"type": "string"
|
|
4070
4234
|
}
|
|
@@ -4233,7 +4397,7 @@
|
|
|
4233
4397
|
"required": true,
|
|
4234
4398
|
"description": "Built-in slug (`country`) or customer template id (`gtpl_…`).",
|
|
4235
4399
|
"schema": {
|
|
4236
|
-
"
|
|
4400
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4237
4401
|
}
|
|
4238
4402
|
}
|
|
4239
4403
|
],
|
|
@@ -4291,7 +4455,7 @@
|
|
|
4291
4455
|
"required": true,
|
|
4292
4456
|
"description": "Customer template id (`gtpl_…`) or its `name`.",
|
|
4293
4457
|
"schema": {
|
|
4294
|
-
"
|
|
4458
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4295
4459
|
}
|
|
4296
4460
|
}
|
|
4297
4461
|
],
|
|
@@ -4388,7 +4552,7 @@
|
|
|
4388
4552
|
"required": true,
|
|
4389
4553
|
"description": "Customer template id (`gtpl_…`) or its `name`.",
|
|
4390
4554
|
"schema": {
|
|
4391
|
-
"
|
|
4555
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4392
4556
|
}
|
|
4393
4557
|
}
|
|
4394
4558
|
],
|
|
@@ -4420,6 +4584,9 @@
|
|
|
4420
4584
|
},
|
|
4421
4585
|
"409": {
|
|
4422
4586
|
"$ref": "#/components/responses/Conflict"
|
|
4587
|
+
},
|
|
4588
|
+
"422": {
|
|
4589
|
+
"$ref": "#/components/responses/UnprocessableEntity"
|
|
4423
4590
|
}
|
|
4424
4591
|
},
|
|
4425
4592
|
"x-error-codes": [
|
|
@@ -4448,6 +4615,9 @@
|
|
|
4448
4615
|
"parameters": [
|
|
4449
4616
|
{
|
|
4450
4617
|
"$ref": "#/components/parameters/ProjectId"
|
|
4618
|
+
},
|
|
4619
|
+
{
|
|
4620
|
+
"$ref": "#/components/parameters/Q"
|
|
4451
4621
|
}
|
|
4452
4622
|
],
|
|
4453
4623
|
"responses": {
|
|
@@ -4547,6 +4717,26 @@
|
|
|
4547
4717
|
"name": "plan"
|
|
4548
4718
|
}
|
|
4549
4719
|
}
|
|
4720
|
+
},
|
|
4721
|
+
"links": {
|
|
4722
|
+
"GetAttribute": {
|
|
4723
|
+
"operationId": "getAttribute",
|
|
4724
|
+
"parameters": {
|
|
4725
|
+
"id": "$response.body#/id"
|
|
4726
|
+
}
|
|
4727
|
+
},
|
|
4728
|
+
"UpdateAttribute": {
|
|
4729
|
+
"operationId": "updateAttribute",
|
|
4730
|
+
"parameters": {
|
|
4731
|
+
"id": "$response.body#/id"
|
|
4732
|
+
}
|
|
4733
|
+
},
|
|
4734
|
+
"DeleteAttribute": {
|
|
4735
|
+
"operationId": "deleteAttribute",
|
|
4736
|
+
"parameters": {
|
|
4737
|
+
"id": "$response.body#/id"
|
|
4738
|
+
}
|
|
4739
|
+
}
|
|
4550
4740
|
}
|
|
4551
4741
|
},
|
|
4552
4742
|
"400": {
|
|
@@ -4601,7 +4791,7 @@
|
|
|
4601
4791
|
"required": true,
|
|
4602
4792
|
"description": "The attribute id.",
|
|
4603
4793
|
"schema": {
|
|
4604
|
-
"
|
|
4794
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4605
4795
|
}
|
|
4606
4796
|
}
|
|
4607
4797
|
],
|
|
@@ -4676,7 +4866,7 @@
|
|
|
4676
4866
|
"required": true,
|
|
4677
4867
|
"description": "The attribute id.",
|
|
4678
4868
|
"schema": {
|
|
4679
|
-
"
|
|
4869
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4680
4870
|
}
|
|
4681
4871
|
}
|
|
4682
4872
|
],
|
|
@@ -4761,7 +4951,7 @@
|
|
|
4761
4951
|
"required": true,
|
|
4762
4952
|
"description": "The attribute id.",
|
|
4763
4953
|
"schema": {
|
|
4764
|
-
"
|
|
4954
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
4765
4955
|
}
|
|
4766
4956
|
}
|
|
4767
4957
|
],
|
|
@@ -4823,6 +5013,9 @@
|
|
|
4823
5013
|
"parameters": [
|
|
4824
5014
|
{
|
|
4825
5015
|
"$ref": "#/components/parameters/ProjectId"
|
|
5016
|
+
},
|
|
5017
|
+
{
|
|
5018
|
+
"$ref": "#/components/parameters/Q"
|
|
4826
5019
|
}
|
|
4827
5020
|
],
|
|
4828
5021
|
"responses": {
|
|
@@ -4953,6 +5146,26 @@
|
|
|
4953
5146
|
"name": "checkouts"
|
|
4954
5147
|
}
|
|
4955
5148
|
}
|
|
5149
|
+
},
|
|
5150
|
+
"links": {
|
|
5151
|
+
"GetMetric": {
|
|
5152
|
+
"operationId": "getMetric",
|
|
5153
|
+
"parameters": {
|
|
5154
|
+
"id": "$response.body#/id"
|
|
5155
|
+
}
|
|
5156
|
+
},
|
|
5157
|
+
"UpdateMetric": {
|
|
5158
|
+
"operationId": "updateMetric",
|
|
5159
|
+
"parameters": {
|
|
5160
|
+
"id": "$response.body#/id"
|
|
5161
|
+
}
|
|
5162
|
+
},
|
|
5163
|
+
"DeleteMetric": {
|
|
5164
|
+
"operationId": "deleteMetric",
|
|
5165
|
+
"parameters": {
|
|
5166
|
+
"id": "$response.body#/id"
|
|
5167
|
+
}
|
|
5168
|
+
}
|
|
4956
5169
|
}
|
|
4957
5170
|
},
|
|
4958
5171
|
"400": {
|
|
@@ -5009,7 +5222,7 @@
|
|
|
5009
5222
|
"required": true,
|
|
5010
5223
|
"description": "Stable opaque metric id (`met_…`) or the metric's `name`.",
|
|
5011
5224
|
"schema": {
|
|
5012
|
-
"
|
|
5225
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5013
5226
|
}
|
|
5014
5227
|
}
|
|
5015
5228
|
],
|
|
@@ -5090,7 +5303,7 @@
|
|
|
5090
5303
|
"required": true,
|
|
5091
5304
|
"description": "Stable opaque metric id (`met_…`) or the metric's `name`.",
|
|
5092
5305
|
"schema": {
|
|
5093
|
-
"
|
|
5306
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5094
5307
|
}
|
|
5095
5308
|
}
|
|
5096
5309
|
],
|
|
@@ -5174,7 +5387,7 @@
|
|
|
5174
5387
|
"required": true,
|
|
5175
5388
|
"description": "Stable opaque metric id (`met_…`) or the metric's `name`.",
|
|
5176
5389
|
"schema": {
|
|
5177
|
-
"
|
|
5390
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5178
5391
|
}
|
|
5179
5392
|
}
|
|
5180
5393
|
],
|
|
@@ -5237,6 +5450,9 @@
|
|
|
5237
5450
|
"parameters": [
|
|
5238
5451
|
{
|
|
5239
5452
|
"$ref": "#/components/parameters/ProjectId"
|
|
5453
|
+
},
|
|
5454
|
+
{
|
|
5455
|
+
"$ref": "#/components/parameters/Q"
|
|
5240
5456
|
}
|
|
5241
5457
|
],
|
|
5242
5458
|
"responses": {
|
|
@@ -5355,6 +5571,32 @@
|
|
|
5355
5571
|
"name": "checkout_completed"
|
|
5356
5572
|
}
|
|
5357
5573
|
}
|
|
5574
|
+
},
|
|
5575
|
+
"links": {
|
|
5576
|
+
"GetEvent": {
|
|
5577
|
+
"operationId": "getEvent",
|
|
5578
|
+
"parameters": {
|
|
5579
|
+
"id": "$response.body#/id"
|
|
5580
|
+
}
|
|
5581
|
+
},
|
|
5582
|
+
"UpdateEvent": {
|
|
5583
|
+
"operationId": "updateEvent",
|
|
5584
|
+
"parameters": {
|
|
5585
|
+
"id": "$response.body#/id"
|
|
5586
|
+
}
|
|
5587
|
+
},
|
|
5588
|
+
"ApproveEvent": {
|
|
5589
|
+
"operationId": "approveEvent",
|
|
5590
|
+
"parameters": {
|
|
5591
|
+
"id": "$response.body#/id"
|
|
5592
|
+
}
|
|
5593
|
+
},
|
|
5594
|
+
"DeleteEvent": {
|
|
5595
|
+
"operationId": "deleteEvent",
|
|
5596
|
+
"parameters": {
|
|
5597
|
+
"id": "$response.body#/id"
|
|
5598
|
+
}
|
|
5599
|
+
}
|
|
5358
5600
|
}
|
|
5359
5601
|
},
|
|
5360
5602
|
"400": {
|
|
@@ -5409,7 +5651,7 @@
|
|
|
5409
5651
|
"required": true,
|
|
5410
5652
|
"description": "Stable opaque event id (`evt_…`) or the event's `name`.",
|
|
5411
5653
|
"schema": {
|
|
5412
|
-
"
|
|
5654
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5413
5655
|
}
|
|
5414
5656
|
}
|
|
5415
5657
|
],
|
|
@@ -5489,7 +5731,7 @@
|
|
|
5489
5731
|
"required": true,
|
|
5490
5732
|
"description": "Stable opaque event id (`evt_…`) or the event's `name`.",
|
|
5491
5733
|
"schema": {
|
|
5492
|
-
"
|
|
5734
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5493
5735
|
}
|
|
5494
5736
|
}
|
|
5495
5737
|
],
|
|
@@ -5589,7 +5831,7 @@
|
|
|
5589
5831
|
"required": true,
|
|
5590
5832
|
"description": "Stable opaque event id (`evt_…`) or the event's `name`.",
|
|
5591
5833
|
"schema": {
|
|
5592
|
-
"
|
|
5834
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5593
5835
|
}
|
|
5594
5836
|
}
|
|
5595
5837
|
],
|
|
@@ -5659,7 +5901,7 @@
|
|
|
5659
5901
|
"required": true,
|
|
5660
5902
|
"description": "Stable opaque event id (`evt_…`) or the event's `name`.",
|
|
5661
5903
|
"schema": {
|
|
5662
|
-
"
|
|
5904
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5663
5905
|
}
|
|
5664
5906
|
}
|
|
5665
5907
|
],
|
|
@@ -5989,7 +6231,7 @@
|
|
|
5989
6231
|
"required": true,
|
|
5990
6232
|
"description": "Per-project item number (e.g. `7`) or the full ops item id.",
|
|
5991
6233
|
"schema": {
|
|
5992
|
-
"
|
|
6234
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
5993
6235
|
}
|
|
5994
6236
|
}
|
|
5995
6237
|
],
|
|
@@ -6062,7 +6304,7 @@
|
|
|
6062
6304
|
"required": true,
|
|
6063
6305
|
"description": "Per-project item number (e.g. `7`) or the full ops item id.",
|
|
6064
6306
|
"schema": {
|
|
6065
|
-
"
|
|
6307
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
6066
6308
|
}
|
|
6067
6309
|
}
|
|
6068
6310
|
],
|
|
@@ -6162,7 +6404,7 @@
|
|
|
6162
6404
|
"required": true,
|
|
6163
6405
|
"description": "Per-project item number (e.g. `7`) or the full ops item id.",
|
|
6164
6406
|
"schema": {
|
|
6165
|
-
"
|
|
6407
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
6166
6408
|
}
|
|
6167
6409
|
}
|
|
6168
6410
|
],
|
|
@@ -6384,6 +6626,9 @@
|
|
|
6384
6626
|
"parameters": [
|
|
6385
6627
|
{
|
|
6386
6628
|
"$ref": "#/components/parameters/ProjectId"
|
|
6629
|
+
},
|
|
6630
|
+
{
|
|
6631
|
+
"$ref": "#/components/parameters/Q"
|
|
6387
6632
|
}
|
|
6388
6633
|
],
|
|
6389
6634
|
"responses": {
|
|
@@ -6506,6 +6751,20 @@
|
|
|
6506
6751
|
"id": "ar_01j7w8a1b2c3d4e5f6g7h8i9j0"
|
|
6507
6752
|
}
|
|
6508
6753
|
}
|
|
6754
|
+
},
|
|
6755
|
+
"links": {
|
|
6756
|
+
"UpdateAlertRule": {
|
|
6757
|
+
"operationId": "updateAlertRule",
|
|
6758
|
+
"parameters": {
|
|
6759
|
+
"id": "$response.body#/id"
|
|
6760
|
+
}
|
|
6761
|
+
},
|
|
6762
|
+
"DeleteAlertRule": {
|
|
6763
|
+
"operationId": "deleteAlertRule",
|
|
6764
|
+
"parameters": {
|
|
6765
|
+
"id": "$response.body#/id"
|
|
6766
|
+
}
|
|
6767
|
+
}
|
|
6509
6768
|
}
|
|
6510
6769
|
},
|
|
6511
6770
|
"400": {
|
|
@@ -6558,7 +6817,7 @@
|
|
|
6558
6817
|
"required": true,
|
|
6559
6818
|
"description": "Stable opaque alert-rule id (`ar_…`) or the rule's `name`.",
|
|
6560
6819
|
"schema": {
|
|
6561
|
-
"
|
|
6820
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
6562
6821
|
}
|
|
6563
6822
|
}
|
|
6564
6823
|
],
|
|
@@ -6660,7 +6919,7 @@
|
|
|
6660
6919
|
"required": true,
|
|
6661
6920
|
"description": "Stable opaque alert-rule id (`ar_…`) or the rule's `name`.",
|
|
6662
6921
|
"schema": {
|
|
6663
|
-
"
|
|
6922
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
6664
6923
|
}
|
|
6665
6924
|
}
|
|
6666
6925
|
],
|
|
@@ -6891,7 +7150,7 @@
|
|
|
6891
7150
|
"required": true,
|
|
6892
7151
|
"description": "Stable opaque project id. Must match the caller's own project.",
|
|
6893
7152
|
"schema": {
|
|
6894
|
-
"
|
|
7153
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
6895
7154
|
}
|
|
6896
7155
|
}
|
|
6897
7156
|
],
|
|
@@ -7088,6 +7347,14 @@
|
|
|
7088
7347
|
"name": "fr:prod"
|
|
7089
7348
|
}
|
|
7090
7349
|
}
|
|
7350
|
+
},
|
|
7351
|
+
"links": {
|
|
7352
|
+
"PublishI18nProfile": {
|
|
7353
|
+
"operationId": "publishI18nProfile",
|
|
7354
|
+
"parameters": {
|
|
7355
|
+
"profileId": "$response.body#/id"
|
|
7356
|
+
}
|
|
7357
|
+
}
|
|
7091
7358
|
}
|
|
7092
7359
|
},
|
|
7093
7360
|
"400": {
|
|
@@ -7155,9 +7422,10 @@
|
|
|
7155
7422
|
"name": "q",
|
|
7156
7423
|
"in": "query",
|
|
7157
7424
|
"required": false,
|
|
7158
|
-
"description": "Free-text search — matches keys whose name OR
|
|
7425
|
+
"description": "Free-text search — matches keys whose name, value, OR description contains this substring (case-insensitive). Use it to find the key behind a piece of on-screen copy.",
|
|
7159
7426
|
"schema": {
|
|
7160
|
-
"type": "string"
|
|
7427
|
+
"type": "string",
|
|
7428
|
+
"maxLength": 100
|
|
7161
7429
|
}
|
|
7162
7430
|
},
|
|
7163
7431
|
{
|
|
@@ -7170,6 +7438,17 @@
|
|
|
7170
7438
|
"minimum": 1,
|
|
7171
7439
|
"maximum": 500
|
|
7172
7440
|
}
|
|
7441
|
+
},
|
|
7442
|
+
{
|
|
7443
|
+
"name": "offset",
|
|
7444
|
+
"in": "query",
|
|
7445
|
+
"required": false,
|
|
7446
|
+
"description": "Number of keys to skip before returning `limit` rows (offset pagination).",
|
|
7447
|
+
"schema": {
|
|
7448
|
+
"type": "integer",
|
|
7449
|
+
"minimum": 0,
|
|
7450
|
+
"default": 0
|
|
7451
|
+
}
|
|
7173
7452
|
}
|
|
7174
7453
|
],
|
|
7175
7454
|
"responses": {
|
|
@@ -7319,7 +7598,7 @@
|
|
|
7319
7598
|
"required": true,
|
|
7320
7599
|
"description": "The key's id.",
|
|
7321
7600
|
"schema": {
|
|
7322
|
-
"
|
|
7601
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7323
7602
|
}
|
|
7324
7603
|
}
|
|
7325
7604
|
],
|
|
@@ -7533,7 +7812,7 @@
|
|
|
7533
7812
|
"required": true,
|
|
7534
7813
|
"description": "The draft id to update.",
|
|
7535
7814
|
"schema": {
|
|
7536
|
-
"
|
|
7815
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7537
7816
|
}
|
|
7538
7817
|
}
|
|
7539
7818
|
],
|
|
@@ -7617,7 +7896,7 @@
|
|
|
7617
7896
|
"required": true,
|
|
7618
7897
|
"description": "The profile id to publish.",
|
|
7619
7898
|
"schema": {
|
|
7620
|
-
"
|
|
7899
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7621
7900
|
}
|
|
7622
7901
|
}
|
|
7623
7902
|
],
|
|
@@ -7635,7 +7914,7 @@
|
|
|
7635
7914
|
}
|
|
7636
7915
|
},
|
|
7637
7916
|
"responses": {
|
|
7638
|
-
"
|
|
7917
|
+
"200": {
|
|
7639
7918
|
"description": "Publish a profile chunk",
|
|
7640
7919
|
"content": {
|
|
7641
7920
|
"application/json": {
|
|
@@ -7902,7 +8181,7 @@
|
|
|
7902
8181
|
"required": true,
|
|
7903
8182
|
"description": "Stable opaque error id (`err_…`).",
|
|
7904
8183
|
"schema": {
|
|
7905
|
-
"
|
|
8184
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7906
8185
|
}
|
|
7907
8186
|
}
|
|
7908
8187
|
],
|
|
@@ -7990,7 +8269,7 @@
|
|
|
7990
8269
|
"required": true,
|
|
7991
8270
|
"description": "Stable opaque error id (`err_…`).",
|
|
7992
8271
|
"schema": {
|
|
7993
|
-
"
|
|
8272
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7994
8273
|
}
|
|
7995
8274
|
}
|
|
7996
8275
|
],
|
|
@@ -8107,7 +8386,7 @@
|
|
|
8107
8386
|
"required": true,
|
|
8108
8387
|
"description": "Stable opaque error id (`err_…`).",
|
|
8109
8388
|
"schema": {
|
|
8110
|
-
"
|
|
8389
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8111
8390
|
}
|
|
8112
8391
|
}
|
|
8113
8392
|
],
|
|
@@ -8176,7 +8455,7 @@
|
|
|
8176
8455
|
"required": true,
|
|
8177
8456
|
"description": "Stable opaque error id (`err_…`).",
|
|
8178
8457
|
"schema": {
|
|
8179
|
-
"
|
|
8458
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8180
8459
|
}
|
|
8181
8460
|
}
|
|
8182
8461
|
],
|
|
@@ -8273,6 +8552,9 @@
|
|
|
8273
8552
|
"parameters": [
|
|
8274
8553
|
{
|
|
8275
8554
|
"$ref": "#/components/parameters/ProjectId"
|
|
8555
|
+
},
|
|
8556
|
+
{
|
|
8557
|
+
"$ref": "#/components/parameters/Q"
|
|
8276
8558
|
}
|
|
8277
8559
|
],
|
|
8278
8560
|
"responses": {
|
|
@@ -8426,6 +8708,32 @@
|
|
|
8426
8708
|
"id": "9b0e7c2a-1f3d-4a8e-bf21-0c6a2e5d7f10"
|
|
8427
8709
|
}
|
|
8428
8710
|
}
|
|
8711
|
+
},
|
|
8712
|
+
"links": {
|
|
8713
|
+
"GetConnector": {
|
|
8714
|
+
"operationId": "getConnector",
|
|
8715
|
+
"parameters": {
|
|
8716
|
+
"id": "$response.body#/id"
|
|
8717
|
+
}
|
|
8718
|
+
},
|
|
8719
|
+
"UpdateConnector": {
|
|
8720
|
+
"operationId": "updateConnector",
|
|
8721
|
+
"parameters": {
|
|
8722
|
+
"id": "$response.body#/id"
|
|
8723
|
+
}
|
|
8724
|
+
},
|
|
8725
|
+
"TestConnector": {
|
|
8726
|
+
"operationId": "testConnector",
|
|
8727
|
+
"parameters": {
|
|
8728
|
+
"id": "$response.body#/id"
|
|
8729
|
+
}
|
|
8730
|
+
},
|
|
8731
|
+
"DeleteConnector": {
|
|
8732
|
+
"operationId": "deleteConnector",
|
|
8733
|
+
"parameters": {
|
|
8734
|
+
"id": "$response.body#/id"
|
|
8735
|
+
}
|
|
8736
|
+
}
|
|
8429
8737
|
}
|
|
8430
8738
|
},
|
|
8431
8739
|
"400": {
|
|
@@ -8475,7 +8783,7 @@
|
|
|
8475
8783
|
"required": true,
|
|
8476
8784
|
"description": "Stable opaque connector id.",
|
|
8477
8785
|
"schema": {
|
|
8478
|
-
"
|
|
8786
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8479
8787
|
}
|
|
8480
8788
|
}
|
|
8481
8789
|
],
|
|
@@ -8558,7 +8866,7 @@
|
|
|
8558
8866
|
"required": true,
|
|
8559
8867
|
"description": "Stable opaque connector id.",
|
|
8560
8868
|
"schema": {
|
|
8561
|
-
"
|
|
8869
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8562
8870
|
}
|
|
8563
8871
|
}
|
|
8564
8872
|
],
|
|
@@ -8664,7 +8972,7 @@
|
|
|
8664
8972
|
"required": true,
|
|
8665
8973
|
"description": "Stable opaque connector id.",
|
|
8666
8974
|
"schema": {
|
|
8667
|
-
"
|
|
8975
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8668
8976
|
}
|
|
8669
8977
|
}
|
|
8670
8978
|
],
|
|
@@ -8732,7 +9040,7 @@
|
|
|
8732
9040
|
"required": true,
|
|
8733
9041
|
"description": "Stable opaque connector id.",
|
|
8734
9042
|
"schema": {
|
|
8735
|
-
"
|
|
9043
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8736
9044
|
}
|
|
8737
9045
|
}
|
|
8738
9046
|
],
|
|
@@ -8761,7 +9069,7 @@
|
|
|
8761
9069
|
},
|
|
8762
9070
|
"responses": {
|
|
8763
9071
|
"200": {
|
|
8764
|
-
"description": "
|
|
9072
|
+
"description": "The trigger run was successfully kicked off.",
|
|
8765
9073
|
"content": {
|
|
8766
9074
|
"application/json": {
|
|
8767
9075
|
"schema": {
|
|
@@ -8790,6 +9098,9 @@
|
|
|
8790
9098
|
},
|
|
8791
9099
|
"422": {
|
|
8792
9100
|
"$ref": "#/components/responses/UnprocessableEntity"
|
|
9101
|
+
},
|
|
9102
|
+
"502": {
|
|
9103
|
+
"$ref": "#/components/responses/BadGateway"
|
|
8793
9104
|
}
|
|
8794
9105
|
},
|
|
8795
9106
|
"x-error-codes": [
|
|
@@ -8823,13 +9134,13 @@
|
|
|
8823
9134
|
"required": true,
|
|
8824
9135
|
"description": "Stable opaque connector id.",
|
|
8825
9136
|
"schema": {
|
|
8826
|
-
"
|
|
9137
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8827
9138
|
}
|
|
8828
9139
|
}
|
|
8829
9140
|
],
|
|
8830
9141
|
"responses": {
|
|
8831
9142
|
"200": {
|
|
8832
|
-
"description": "
|
|
9143
|
+
"description": "The test dispatch reached the destination.",
|
|
8833
9144
|
"content": {
|
|
8834
9145
|
"application/json": {
|
|
8835
9146
|
"schema": {
|
|
@@ -8859,6 +9170,9 @@
|
|
|
8859
9170
|
},
|
|
8860
9171
|
"422": {
|
|
8861
9172
|
"$ref": "#/components/responses/UnprocessableEntity"
|
|
9173
|
+
},
|
|
9174
|
+
"502": {
|
|
9175
|
+
"$ref": "#/components/responses/BadGateway"
|
|
8862
9176
|
}
|
|
8863
9177
|
},
|
|
8864
9178
|
"x-error-codes": [
|
|
@@ -8892,7 +9206,7 @@
|
|
|
8892
9206
|
"required": true,
|
|
8893
9207
|
"description": "Stable opaque connector id. Its stored `provider` must match the body's `provider`.",
|
|
8894
9208
|
"schema": {
|
|
8895
|
-
"
|
|
9209
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
8896
9210
|
}
|
|
8897
9211
|
}
|
|
8898
9212
|
],
|
|
@@ -9038,6 +9352,38 @@
|
|
|
9038
9352
|
"id": "9b0e7c2a-1f3d-4a8e-bf21-0c6a2e5d7f10"
|
|
9039
9353
|
}
|
|
9040
9354
|
}
|
|
9355
|
+
},
|
|
9356
|
+
"links": {
|
|
9357
|
+
"FireConnector": {
|
|
9358
|
+
"operationId": "fireConnector",
|
|
9359
|
+
"parameters": {
|
|
9360
|
+
"id": "$response.body#/id"
|
|
9361
|
+
}
|
|
9362
|
+
},
|
|
9363
|
+
"TestConnector": {
|
|
9364
|
+
"operationId": "testConnector",
|
|
9365
|
+
"parameters": {
|
|
9366
|
+
"id": "$response.body#/id"
|
|
9367
|
+
}
|
|
9368
|
+
},
|
|
9369
|
+
"GetConnector": {
|
|
9370
|
+
"operationId": "getConnector",
|
|
9371
|
+
"parameters": {
|
|
9372
|
+
"id": "$response.body#/id"
|
|
9373
|
+
}
|
|
9374
|
+
},
|
|
9375
|
+
"UpdateTriggerConnector": {
|
|
9376
|
+
"operationId": "updateTriggerConnector",
|
|
9377
|
+
"parameters": {
|
|
9378
|
+
"id": "$response.body#/id"
|
|
9379
|
+
}
|
|
9380
|
+
},
|
|
9381
|
+
"DeleteConnector": {
|
|
9382
|
+
"operationId": "deleteConnector",
|
|
9383
|
+
"parameters": {
|
|
9384
|
+
"id": "$response.body#/id"
|
|
9385
|
+
}
|
|
9386
|
+
}
|
|
9041
9387
|
}
|
|
9042
9388
|
},
|
|
9043
9389
|
"400": {
|
|
@@ -9129,6 +9475,9 @@
|
|
|
9129
9475
|
},
|
|
9130
9476
|
{
|
|
9131
9477
|
"$ref": "#/components/parameters/PaginationCursor"
|
|
9478
|
+
},
|
|
9479
|
+
{
|
|
9480
|
+
"$ref": "#/components/parameters/Q"
|
|
9132
9481
|
}
|
|
9133
9482
|
],
|
|
9134
9483
|
"responses": {
|
|
@@ -9306,7 +9655,7 @@
|
|
|
9306
9655
|
"required": true,
|
|
9307
9656
|
"description": "Stable opaque key id (UUID) returned by `create` / `list`.",
|
|
9308
9657
|
"schema": {
|
|
9309
|
-
"
|
|
9658
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
9310
9659
|
}
|
|
9311
9660
|
}
|
|
9312
9661
|
],
|
|
@@ -9484,6 +9833,16 @@
|
|
|
9484
9833
|
"schema": {
|
|
9485
9834
|
"type": "string"
|
|
9486
9835
|
}
|
|
9836
|
+
},
|
|
9837
|
+
"Q": {
|
|
9838
|
+
"name": "q",
|
|
9839
|
+
"in": "query",
|
|
9840
|
+
"required": false,
|
|
9841
|
+
"description": "Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything.",
|
|
9842
|
+
"schema": {
|
|
9843
|
+
"type": "string",
|
|
9844
|
+
"maxLength": 100
|
|
9845
|
+
}
|
|
9487
9846
|
}
|
|
9488
9847
|
},
|
|
9489
9848
|
"schemas": {
|
|
@@ -10370,6 +10729,12 @@
|
|
|
10370
10729
|
],
|
|
10371
10730
|
"additionalProperties": false
|
|
10372
10731
|
},
|
|
10732
|
+
"ResourceId": {
|
|
10733
|
+
"type": "string",
|
|
10734
|
+
"minLength": 1,
|
|
10735
|
+
"maxLength": 128,
|
|
10736
|
+
"description": "A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long value can never name a real row."
|
|
10737
|
+
},
|
|
10373
10738
|
"DeleteGateResponse": {
|
|
10374
10739
|
"type": "object",
|
|
10375
10740
|
"properties": {
|
|
@@ -13327,7 +13692,7 @@
|
|
|
13327
13692
|
],
|
|
13328
13693
|
"additionalProperties": false
|
|
13329
13694
|
},
|
|
13330
|
-
"
|
|
13695
|
+
"GateTemplateRuleResponse": {
|
|
13331
13696
|
"type": "object",
|
|
13332
13697
|
"properties": {
|
|
13333
13698
|
"attr": {
|
|
@@ -13362,11 +13727,10 @@
|
|
|
13362
13727
|
},
|
|
13363
13728
|
"required": [
|
|
13364
13729
|
"attr",
|
|
13365
|
-
"op"
|
|
13366
|
-
"value"
|
|
13730
|
+
"op"
|
|
13367
13731
|
],
|
|
13368
13732
|
"additionalProperties": false,
|
|
13369
|
-
"description": "Single targeting predicate
|
|
13733
|
+
"description": "Single targeting predicate as returned by the API. `value` is optional here — read-only built-in templates (e.g. `@owner`, or presets whose operand is supplied at substitution time) legitimately omit it. Request bodies still require `value`."
|
|
13370
13734
|
},
|
|
13371
13735
|
"GateTemplate": {
|
|
13372
13736
|
"type": "object",
|
|
@@ -13414,7 +13778,7 @@
|
|
|
13414
13778
|
"rules": {
|
|
13415
13779
|
"type": "array",
|
|
13416
13780
|
"items": {
|
|
13417
|
-
"$ref": "#/components/schemas/
|
|
13781
|
+
"$ref": "#/components/schemas/GateTemplateRuleResponse"
|
|
13418
13782
|
},
|
|
13419
13783
|
"description": "The rule definition — copy, substitute the value(s), pass as `rules`."
|
|
13420
13784
|
},
|
|
@@ -13478,6 +13842,62 @@
|
|
|
13478
13842
|
],
|
|
13479
13843
|
"additionalProperties": false
|
|
13480
13844
|
},
|
|
13845
|
+
"GateTemplateRule": {
|
|
13846
|
+
"type": "object",
|
|
13847
|
+
"properties": {
|
|
13848
|
+
"attr": {
|
|
13849
|
+
"type": "string",
|
|
13850
|
+
"description": "Attribute key on the evaluation context (e.g. `country`, `plan`, `email`). Matched case-sensitively against `Shipeasy.checkGate(user, name)` input. May be empty on a built-in template whose attribute is supplied at substitution time (e.g. the `exp_in` \"in any experiment\" preset — you fill in the experiment name)."
|
|
13851
|
+
},
|
|
13852
|
+
"op": {
|
|
13853
|
+
"type": "string",
|
|
13854
|
+
"enum": [
|
|
13855
|
+
"eq",
|
|
13856
|
+
"neq",
|
|
13857
|
+
"in",
|
|
13858
|
+
"not_in",
|
|
13859
|
+
"gt",
|
|
13860
|
+
"gte",
|
|
13861
|
+
"lt",
|
|
13862
|
+
"lte",
|
|
13863
|
+
"contains",
|
|
13864
|
+
"regex",
|
|
13865
|
+
"semver_gt",
|
|
13866
|
+
"semver_gte",
|
|
13867
|
+
"semver_lt",
|
|
13868
|
+
"semver_lte",
|
|
13869
|
+
"gate_pass",
|
|
13870
|
+
"exp_in"
|
|
13871
|
+
],
|
|
13872
|
+
"description": "Comparison operator. Equality: `eq`/`neq`. Set membership: `in`/`not_in` (value is an array). Numeric order: `gt`/`gte`/`lt`/`lte`. Semver order: `semver_gt`/`semver_gte`/`semver_lt`/`semver_lte`. String: `contains` (substring), `regex` (JS-flavour pattern). Cross-resource: `gate_pass` (value is another gate's name), `exp_in` (attr is an experiment name, value is a variant / `\"$holdout\"` / `\"$any\"`)."
|
|
13873
|
+
},
|
|
13874
|
+
"value": {
|
|
13875
|
+
"description": "Operand. Shape depends on `op`: scalar for `eq/neq/gt/gte/lt/lte/contains/semver_*`; array of scalars for `in/not_in`; string pattern for `regex`; referenced gate name for `gate_pass`; variant selector for `exp_in`. Required on every request rule (value-ops need it; the valueless built-in presets are read-only and never created via the API).",
|
|
13876
|
+
"anyOf": [
|
|
13877
|
+
{
|
|
13878
|
+
"type": "string"
|
|
13879
|
+
},
|
|
13880
|
+
{
|
|
13881
|
+
"type": "number"
|
|
13882
|
+
},
|
|
13883
|
+
{
|
|
13884
|
+
"type": "boolean"
|
|
13885
|
+
},
|
|
13886
|
+
{
|
|
13887
|
+
"type": "array",
|
|
13888
|
+
"items": {}
|
|
13889
|
+
}
|
|
13890
|
+
]
|
|
13891
|
+
}
|
|
13892
|
+
},
|
|
13893
|
+
"required": [
|
|
13894
|
+
"attr",
|
|
13895
|
+
"op",
|
|
13896
|
+
"value"
|
|
13897
|
+
],
|
|
13898
|
+
"additionalProperties": false,
|
|
13899
|
+
"description": "Single targeting predicate. Copy a template's rules, substitute the concrete `value`(s), and pass them as the `rules` arg of `release_flags_create`."
|
|
13900
|
+
},
|
|
13481
13901
|
"CreateGateTemplateRequest": {
|
|
13482
13902
|
"type": "object",
|
|
13483
13903
|
"description": "Body for `POST /api/admin/gate-templates`. Creates a per-project (customer) template. At minimum supply `name` + `rules`.",
|
|
@@ -16600,8 +17020,15 @@
|
|
|
16600
17020
|
}
|
|
16601
17021
|
},
|
|
16602
17022
|
"href": {
|
|
16603
|
-
"description": "Dashboard-relative deep link to the related item.",
|
|
16604
|
-
"
|
|
17023
|
+
"description": "Dashboard-relative deep link to the related item. `null` is accepted and treated as \"no link\".",
|
|
17024
|
+
"anyOf": [
|
|
17025
|
+
{
|
|
17026
|
+
"type": "string"
|
|
17027
|
+
},
|
|
17028
|
+
{
|
|
17029
|
+
"type": "null"
|
|
17030
|
+
}
|
|
17031
|
+
]
|
|
16605
17032
|
},
|
|
16606
17033
|
"dedupeKey": {
|
|
16607
17034
|
"description": "Stable per-escalation key (e.g. `feedback:7`) so re-runs dedupe to one row.",
|
|
@@ -18816,25 +19243,21 @@
|
|
|
18816
19243
|
"properties": {
|
|
18817
19244
|
"ok": {
|
|
18818
19245
|
"type": "boolean",
|
|
18819
|
-
"description": "`true`
|
|
18820
|
-
},
|
|
18821
|
-
"error": {
|
|
18822
|
-
"type": "string",
|
|
18823
|
-
"description": "Failure reason. Present only when `ok` is `false` — the fire reached the handler but the underlying dispatch to the provider failed."
|
|
19246
|
+
"description": "Always `true` — a successful fire returns HTTP 200. A dispatch failure returns HTTP 502 with the `Error` envelope, not this body."
|
|
18824
19247
|
}
|
|
18825
19248
|
},
|
|
18826
19249
|
"required": [
|
|
18827
19250
|
"ok"
|
|
18828
19251
|
],
|
|
18829
19252
|
"additionalProperties": false,
|
|
18830
|
-
"description": "Result of
|
|
19253
|
+
"description": "Result of a successful trigger fire: `{ ok: true }`. When the downstream dispatch fails the endpoint returns HTTP 502 (see the `Error` response), never `ok: false`."
|
|
18831
19254
|
},
|
|
18832
19255
|
"TestConnectorResponse": {
|
|
18833
19256
|
"type": "object",
|
|
18834
19257
|
"properties": {
|
|
18835
19258
|
"ok": {
|
|
18836
19259
|
"type": "boolean",
|
|
18837
|
-
"description": "`true`
|
|
19260
|
+
"description": "Always `true` — a successful test returns HTTP 200. A dispatch failure returns HTTP 502 with the `Error` envelope, not this body."
|
|
18838
19261
|
},
|
|
18839
19262
|
"issueUrl": {
|
|
18840
19263
|
"anyOf": [
|
|
@@ -18845,11 +19268,7 @@
|
|
|
18845
19268
|
"type": "null"
|
|
18846
19269
|
}
|
|
18847
19270
|
],
|
|
18848
|
-
"description": "URL of the artifact the test produced (e.g. the GitHub Issue created by a `github` connector), or `null` when the provider produces no linkable artifact
|
|
18849
|
-
},
|
|
18850
|
-
"error": {
|
|
18851
|
-
"type": "string",
|
|
18852
|
-
"description": "Failure reason. Present only when `ok` is `false` — the test reached the handler but the underlying dispatch to the provider failed."
|
|
19271
|
+
"description": "URL of the artifact the test produced (e.g. the GitHub Issue created by a `github` connector), or `null` when the provider produces no linkable artifact."
|
|
18853
19272
|
}
|
|
18854
19273
|
},
|
|
18855
19274
|
"required": [
|
|
@@ -18857,7 +19276,7 @@
|
|
|
18857
19276
|
"issueUrl"
|
|
18858
19277
|
],
|
|
18859
19278
|
"additionalProperties": false,
|
|
18860
|
-
"description": "Result of
|
|
19279
|
+
"description": "Result of a successful connector test: `{ ok: true, issueUrl }`. When the downstream dispatch fails the endpoint returns HTTP 502 (see the `Error` response), never `ok: false`."
|
|
18861
19280
|
},
|
|
18862
19281
|
"UpdateClaudeTriggerRequest": {
|
|
18863
19282
|
"type": "object",
|
|
@@ -19555,6 +19974,24 @@
|
|
|
19555
19974
|
}
|
|
19556
19975
|
}
|
|
19557
19976
|
}
|
|
19977
|
+
},
|
|
19978
|
+
"BadGateway": {
|
|
19979
|
+
"description": "The request was well-formed and the resource exists, but a downstream provider\nthe endpoint delegates to (e.g. a connector's Slack/GitHub/cloud-agent dispatch)\nfailed. The failure is upstream of this API, not a client error. No stable\n`ErrorCode` is assigned to upstream failures, so `code` is omitted.",
|
|
19980
|
+
"content": {
|
|
19981
|
+
"application/json": {
|
|
19982
|
+
"schema": {
|
|
19983
|
+
"$ref": "#/components/schemas/Error"
|
|
19984
|
+
},
|
|
19985
|
+
"examples": {
|
|
19986
|
+
"UPSTREAM_FAILURE": {
|
|
19987
|
+
"summary": "Downstream provider dispatch failed",
|
|
19988
|
+
"value": {
|
|
19989
|
+
"error": "GitHub API responded 403: resource not accessible by integration."
|
|
19990
|
+
}
|
|
19991
|
+
}
|
|
19992
|
+
}
|
|
19993
|
+
}
|
|
19994
|
+
}
|
|
19558
19995
|
}
|
|
19559
19996
|
}
|
|
19560
19997
|
}
|