@shipeasy/openapi 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{chunk-643YSMLU.js → chunk-4QSU744W.js} +183 -1
  2. package/dist/chunk-4QSU744W.js.map +1 -0
  3. package/dist/{chunk-MRW3DJ57.js → chunk-ZPKHTUVV.js} +1238 -335
  4. package/dist/chunk-ZPKHTUVV.js.map +1 -0
  5. package/dist/{client-K0ShmsC7.d.ts → client-WGNXT4xl.d.ts} +5818 -2647
  6. package/dist/client.d.ts +1 -1
  7. package/dist/client.js +51 -1
  8. package/dist/custom.js +4 -4
  9. package/dist/custom.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.js +52 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/schemas.d.ts +3538 -534
  14. package/dist/schemas.js +253 -5
  15. package/openapi.json +12914 -7158
  16. package/openapi.yaml +7672 -3742
  17. package/package.json +1 -1
  18. package/spec/components/errors.yaml +33 -1
  19. package/spec/components/schemas/alerts.yaml +138 -0
  20. package/spec/components/schemas/attributes.yaml +53 -3
  21. package/spec/components/schemas/common.yaml +16 -0
  22. package/spec/components/schemas/configs.yaml +58 -0
  23. package/spec/components/schemas/connectors.yaml +5 -1
  24. package/spec/components/schemas/errors-api.yaml +116 -6
  25. package/spec/components/schemas/experiment-api-row.yaml +293 -0
  26. package/spec/components/schemas/experiments.yaml +395 -380
  27. package/spec/components/schemas/gates.yaml +355 -272
  28. package/spec/components/schemas/i18n.yaml +169 -40
  29. package/spec/components/schemas/keys.yaml +2 -1
  30. package/spec/components/schemas/killswitches.yaml +36 -0
  31. package/spec/components/schemas/metrics.yaml +200 -23
  32. package/spec/components/schemas/ops.yaml +918 -29
  33. package/spec/components/schemas/projects.yaml +246 -2
  34. package/spec/components/schemas/universes.yaml +83 -1
  35. package/spec/openapi.yaml +61 -0
  36. package/spec/paths/alert-rules.yaml +1 -0
  37. package/spec/paths/alerts.yaml +184 -0
  38. package/spec/paths/attributes.yaml +23 -5
  39. package/spec/paths/configs.yaml +71 -0
  40. package/spec/paths/errors.yaml +112 -2
  41. package/spec/paths/events.yaml +1 -0
  42. package/spec/paths/experiments.yaml +244 -16
  43. package/spec/paths/gates.yaml +138 -0
  44. package/spec/paths/i18n.yaml +290 -6
  45. package/spec/paths/keys.yaml +1 -0
  46. package/spec/paths/killswitches.yaml +7 -0
  47. package/spec/paths/metrics.yaml +187 -0
  48. package/spec/paths/ops.yaml +410 -0
  49. package/spec/paths/projects.yaml +62 -2
  50. package/spec/paths/universes.yaml +1 -0
  51. package/dist/chunk-643YSMLU.js.map +0 -1
  52. package/dist/chunk-MRW3DJ57.js.map +0 -1
@@ -0,0 +1,184 @@
1
+ /api/admin/alerts:
2
+ get:
3
+ operationId: listAlerts
4
+ summary: List fired alerts
5
+ description: |-
6
+ Returns the project's FIRED alerts as a **bare JSON array** (no pagination envelope), ordered by `createdAt desc`. Defaults to the currently-firing ones (`status=active`); pass a `status` to widen to resolved/dismissed history or `all`.
7
+
8
+ Fired alerts are raised only by the platform — the UI's killswitch handlers plus the worker's analysis consumer and alerts cron — never filed by hand, so this surface is list + triage (via PATCH), with no create. The rules that *define* metric-threshold alerts live at `/api/admin/alert-rules`.
9
+
10
+ **Use case:** Snapshot what is currently firing for an on-call view or the home Alerts block, or pull `status=all` to audit how a noisy rule has behaved over time.
11
+ tags:
12
+ - Fired Alerts
13
+ parameters:
14
+ - $ref: ../components/parameters.yaml#/ProjectId
15
+ - name: status
16
+ in: query
17
+ required: false
18
+ description: Filter by lifecycle state. Defaults to `active` (currently firing); `all` returns every status.
19
+ schema:
20
+ type: string
21
+ enum:
22
+ - active
23
+ - resolved
24
+ - dismissed
25
+ - all
26
+ default: active
27
+ responses:
28
+ "200":
29
+ description: List fired alerts
30
+ content:
31
+ application/json:
32
+ schema:
33
+ $ref: ../components/schemas/alerts.yaml#/ListAlertsResponse
34
+ example:
35
+ - id: al_01j7w9c4d5e6f7g8h9i0j1k2l3
36
+ source: metric_rule
37
+ ruleId: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
38
+ severity: danger
39
+ dedupeKey: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
40
+ title: Checkout error rate above threshold
41
+ detail: checkout_errors was 137 over the trailing 24h — above the rule's threshold of 50.
42
+ href: /dashboard/metrics/met_01j6abc2d3e4f5g6h7i8j9k0l1
43
+ observedValue: 137
44
+ status: active
45
+ createdAt: 2026-06-28T14:55:31.000Z
46
+ resolvedAt: null
47
+ dismissedAt: null
48
+ assigneeId: null
49
+ assigneeConnectorId: null
50
+ assigneeAgent: null
51
+ - id: al_01j7w9b2a1z0y9x8w7v6u5t4s3
52
+ source: killswitch_armed
53
+ ruleId: null
54
+ severity: warn
55
+ dedupeKey: ks_01j5checkout_kill
56
+ title: Kill switch "checkout_kill" is armed
57
+ detail: The kill switch has been armed for 3 days — confirm it is still intentional.
58
+ href: /dashboard/killswitches/ks_01j5checkout_kill
59
+ observedValue: null
60
+ status: active
61
+ createdAt: 2026-06-27T09:12:05.000Z
62
+ resolvedAt: null
63
+ dismissedAt: null
64
+ assigneeId: 6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c
65
+ assigneeConnectorId: null
66
+ assigneeAgent: null
67
+ "400":
68
+ $ref: ../components/responses.yaml#/BadRequest
69
+ "401":
70
+ $ref: ../components/responses.yaml#/Unauthorized
71
+ "403":
72
+ $ref: ../components/responses.yaml#/Forbidden
73
+ "404":
74
+ $ref: ../components/responses.yaml#/NotFound
75
+ "409":
76
+ $ref: ../components/responses.yaml#/Conflict
77
+ "422":
78
+ $ref: ../components/responses.yaml#/UnprocessableEntity
79
+ x-error-codes:
80
+ - BAD_REQUEST
81
+ - UNAUTHORIZED
82
+ - FORBIDDEN
83
+ x-cli:
84
+ name: list
85
+ /api/admin/alerts/{id}:
86
+ patch:
87
+ operationId: updateAlert
88
+ summary: Update a fired alert
89
+ description: |-
90
+ Triage writes on one fired alert — the only mutations this surface allows. All body fields are optional (at least one required); only the fields present are changed.
91
+
92
+ - **`status`** — flip between `active` / `resolved` / `dismissed`. `resolved` and `dismissed` stamp `resolvedAt` / `dismissedAt`; `active` re-opens and clears both. A resolved alert re-fires (as the same row, re-activated) if its condition is raised again.
93
+ - **`assigneeId`** — the PERSON owner (a `users.id`), or `null` to unassign.
94
+ - **`agent`** — the AGENT owner: a connected trigger connector's id, or the built-in `"jarvis"` (**Enterprise plan only** — `403` otherwise), or `null` to clear. Person and agent halves are independent.
95
+
96
+ Returns the updated row; `404` if the alert does not exist in the project.
97
+
98
+ **Use cases**
99
+
100
+ - **Wave off a known condition** — `{ "status": "dismissed" }` on an alert that needs no action.
101
+ - **Hand it to someone** — `{ "assigneeId": "…" }` from the ops cockpit's Owner column.
102
+ tags:
103
+ - Fired Alerts
104
+ parameters:
105
+ - $ref: ../components/parameters.yaml#/ProjectId
106
+ - name: id
107
+ in: path
108
+ required: true
109
+ description: Stable opaque alert id (`al_…`).
110
+ schema:
111
+ $ref: ../components/schemas/common.yaml#/ResourceId
112
+ requestBody:
113
+ required: true
114
+ content:
115
+ application/json:
116
+ schema:
117
+ $ref: ../components/schemas/alerts.yaml#/UpdateAlertRequest
118
+ examples:
119
+ resolve:
120
+ summary: Mark resolved
121
+ description: Close out a fired alert once the underlying condition is handled.
122
+ value:
123
+ status: resolved
124
+ dismiss:
125
+ summary: Dismiss a benign alert
126
+ description: Wave off an alert that needs no action.
127
+ value:
128
+ status: dismissed
129
+ assignPerson:
130
+ summary: Assign a person owner
131
+ description: Hand the alert to a teammate from the ops cockpit's Owner column.
132
+ value:
133
+ assigneeId: 6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c
134
+ assignAgent:
135
+ summary: Assign an agent owner
136
+ description: Hand the alert to a connected coding agent (a connector id, or `"jarvis"` on Enterprise).
137
+ value:
138
+ agent: con_01j7wagentclaude0001
139
+ responses:
140
+ "200":
141
+ description: Update a fired alert
142
+ content:
143
+ application/json:
144
+ schema:
145
+ $ref: ../components/schemas/alerts.yaml#/UpdateAlertResponse
146
+ example:
147
+ id: al_01j7w9c4d5e6f7g8h9i0j1k2l3
148
+ source: metric_rule
149
+ ruleId: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
150
+ severity: danger
151
+ dedupeKey: ar_01j7w8a1b2c3d4e5f6g7h8i9j0
152
+ title: Checkout error rate above threshold
153
+ detail: checkout_errors was 137 over the trailing 24h — above the rule's threshold of 50.
154
+ href: /dashboard/metrics/met_01j6abc2d3e4f5g6h7i8j9k0l1
155
+ observedValue: 137
156
+ status: resolved
157
+ createdAt: 2026-06-28T14:55:31.000Z
158
+ resolvedAt: 2026-06-28T16:40:12.000Z
159
+ dismissedAt: null
160
+ assigneeId: null
161
+ assigneeConnectorId: null
162
+ assigneeAgent: null
163
+ "400":
164
+ $ref: ../components/responses.yaml#/BadRequest
165
+ "401":
166
+ $ref: ../components/responses.yaml#/Unauthorized
167
+ "403":
168
+ $ref: ../components/responses.yaml#/Forbidden
169
+ "404":
170
+ $ref: ../components/responses.yaml#/NotFound
171
+ "409":
172
+ $ref: ../components/responses.yaml#/Conflict
173
+ "422":
174
+ $ref: ../components/responses.yaml#/UnprocessableEntity
175
+ x-error-codes:
176
+ - BAD_REQUEST
177
+ - UNAUTHORIZED
178
+ - FORBIDDEN
179
+ - NOT_FOUND
180
+ - VALIDATION
181
+ x-cli:
182
+ name: update
183
+ positional:
184
+ - id
@@ -19,12 +19,30 @@
19
19
  schema:
20
20
  $ref: ../components/schemas/attributes.yaml#/ListAttributesResponse
21
21
  example:
22
- - name: plan
22
+ - id: attr_01j7w8a1b2c3
23
+ name: plan
24
+ type: enum
25
+ enumValues:
26
+ - free
27
+ - paid
28
+ required: 1
29
+ description: Billing plan of the calling user.
30
+ sdkPath: user.plan
31
+ createdAt: 2026-06-20T09:14:08.000Z
32
+ source: manual
33
+ lastSeenAt: 2026-07-16T22:04:11.000Z
34
+ deprecated: 0
35
+ - id: attr_01j7w8a1b2c4
36
+ name: country
23
37
  type: string
24
- - name: country
25
- type: string
26
- - name: seats
27
- type: number
38
+ enumValues: null
39
+ required: 0
40
+ description: null
41
+ sdkPath: null
42
+ createdAt: 2026-06-20T09:14:08.000Z
43
+ source: auto
44
+ lastSeenAt: 2026-07-16T22:04:11.000Z
45
+ deprecated: 0
28
46
  "400":
29
47
  $ref: ../components/responses.yaml#/BadRequest
30
48
  "401":
@@ -25,6 +25,9 @@
25
25
  - id: cfg_01j7wae5h6j7k8l9m0n1p2q3r4
26
26
  name: pricing.tiers
27
27
  description: Pricing tier definitions consumed by the checkout flow.
28
+ folder: pricing
29
+ creatorEmail: ana@example.com
30
+ createdAt: 2026-05-01T10:12:00.000Z
28
31
  schema:
29
32
  type: object
30
33
  properties:
@@ -192,6 +195,7 @@
192
195
  - FORBIDDEN
193
196
  - ALREADY_EXISTS
194
197
  - VALIDATION
198
+ - PLAN_LIMIT
195
199
  x-cli:
196
200
  name: create
197
201
  positional:
@@ -225,6 +229,7 @@
225
229
  id: cfg_01j7wae5h6j7k8l9m0n1p2q3r4
226
230
  name: pricing.tiers
227
231
  description: Pricing tier definitions consumed by the checkout flow.
232
+ folder: pricing
228
233
  schema:
229
234
  type: object
230
235
  properties:
@@ -687,6 +692,72 @@
687
692
  name: activity
688
693
  positional:
689
694
  - id
695
+ /api/admin/configs/{id}/versions:
696
+ get:
697
+ operationId: listConfigVersions
698
+ summary: List config version history
699
+ description: |-
700
+ Returns every published version of the config's value on one env, newest first. The `env` query parameter picks the environment (`dev`, `staging`, or `prod`) and defaults to `prod`; an unknown env returns `400`. The config's JSON Schema is config-level and not versioned — this is value history only.
701
+
702
+ **Use case:** Render the History timeline in the config detail pane (value diff + restore), or audit which value was live on prod at a given version.
703
+ tags:
704
+ - Configs
705
+ parameters:
706
+ - $ref: ../components/parameters.yaml#/ProjectId
707
+ - name: id
708
+ in: path
709
+ required: true
710
+ description: Stable opaque config id (`cfg_…`) or the config's `name`.
711
+ schema:
712
+ $ref: ../components/schemas/common.yaml#/ResourceId
713
+ - name: env
714
+ in: query
715
+ required: false
716
+ description: Environment to list history for (`dev`, `staging`, or `prod`). Defaults to `prod` when omitted.
717
+ schema:
718
+ $ref: ../components/schemas/common.yaml#/Env
719
+ responses:
720
+ "200":
721
+ description: List config version history
722
+ content:
723
+ application/json:
724
+ schema:
725
+ $ref: ../components/schemas/configs.yaml#/ListConfigVersionsResponse
726
+ example:
727
+ - version: 5
728
+ value:
729
+ tiers:
730
+ - name: free
731
+ - name: pro
732
+ publishedAt: 2026-05-09T18:22:11.000Z
733
+ publishedBy: ana@example.com
734
+ - version: 4
735
+ value:
736
+ tiers:
737
+ - name: free
738
+ publishedAt: 2026-05-08T11:05:22.000Z
739
+ publishedBy: bo@example.com
740
+ "400":
741
+ $ref: ../components/responses.yaml#/BadRequest
742
+ "401":
743
+ $ref: ../components/responses.yaml#/Unauthorized
744
+ "403":
745
+ $ref: ../components/responses.yaml#/Forbidden
746
+ "404":
747
+ $ref: ../components/responses.yaml#/NotFound
748
+ "409":
749
+ $ref: ../components/responses.yaml#/Conflict
750
+ "422":
751
+ $ref: ../components/responses.yaml#/UnprocessableEntity
752
+ x-error-codes:
753
+ - BAD_REQUEST
754
+ - UNAUTHORIZED
755
+ - FORBIDDEN
756
+ - NOT_FOUND
757
+ x-cli:
758
+ name: versions
759
+ positional:
760
+ - id
690
761
  /api/admin/configs/{id}/schema:
691
762
  patch:
692
763
  operationId: updateConfigSchema
@@ -73,6 +73,9 @@
73
73
  lastSeenAt: 2026-06-28T14:55:31.000Z
74
74
  createdAt: 2026-06-20T08:11:02.000Z
75
75
  updatedAt: 2026-06-28T14:55:31.000Z
76
+ assigneeId: null
77
+ assigneeConnectorId: null
78
+ assigneeAgent: null
76
79
  "400":
77
80
  $ref: ../components/responses.yaml#/BadRequest
78
81
  "401":
@@ -96,9 +99,9 @@
96
99
  operationId: getError
97
100
  summary: Get a tracked error
98
101
  description: |-
99
- Returns a single tracked error by its id, including the latest occurrence's stack, extras, and consequence. Returns `404` if no such error exists in the project.
102
+ Returns a single tracked error by its id, including the latest occurrence's stack, extras, and consequence, plus `occurrences` — the sampled per-instance detail rows behind the issue (newest first; exhaustive while the issue is small, thinned at volume, capped at 100). Returns `404` if no such error exists in the project.
100
103
 
101
- **Use case:** Drill into one issue — fetch its full stack and `seenUrls` to investigate, or to render the detail panel behind a row in the errors list.
104
+ **Use case:** Drill into one issue — fetch its full stack and `seenUrls` to investigate, or walk `occurrences` to see how the failing message/stack varies across instances.
102
105
  tags:
103
106
  - Errors
104
107
  parameters:
@@ -142,6 +145,38 @@
142
145
  lastSeenAt: 2026-06-28T14:55:31.000Z
143
146
  createdAt: 2026-06-20T08:11:02.000Z
144
147
  updatedAt: 2026-06-28T14:55:31.000Z
148
+ assigneeId: 6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c
149
+ assigneeConnectorId: null
150
+ assigneeAgent: null
151
+ occurrences:
152
+ - id: occ_01j7w7qq0v3k9d2m5rc8t1xh4n
153
+ projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
154
+ errorId: err_01j7w7m9q4hxbf6npe6s9zr3vc
155
+ message: Cannot read properties of undefined (reading 'id')
156
+ stack: |-
157
+ TypeError: Cannot read properties of undefined (reading 'id')
158
+ at GateEditor (/app/gates/[id]/page.tsx:42:18)
159
+ url: https://app.example.com/dashboard/gat_01j7/edit
160
+ env: prod
161
+ side: client
162
+ sdkVersion: 6.0.0
163
+ extrasJson: '{"gateId":"gat_01j7"}'
164
+ sampleRate: 100
165
+ seenAt: 2026-06-28T14:55:31.000Z
166
+ - id: occ_01j7w7pk8s6e3f9b0zad7y5w2q
167
+ projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
168
+ errorId: err_01j7w7m9q4hxbf6npe6s9zr3vc
169
+ message: Cannot read properties of undefined (reading 'id')
170
+ stack: |-
171
+ TypeError: Cannot read properties of undefined (reading 'id')
172
+ at GateEditor (/app/gates/[id]/page.tsx:42:18)
173
+ url: https://app.example.com/dashboard/gat_02c4/edit
174
+ env: prod
175
+ side: client
176
+ sdkVersion: 6.0.0
177
+ extrasJson: '{"gateId":"gat_02c4"}'
178
+ sampleRate: 10
179
+ seenAt: 2026-06-24T09:12:05.000Z
145
180
  "400":
146
181
  $ref: ../components/responses.yaml#/BadRequest
147
182
  "401":
@@ -232,6 +267,9 @@
232
267
  lastSeenAt: 2026-06-28T14:55:31.000Z
233
268
  createdAt: 2026-06-20T08:11:02.000Z
234
269
  updatedAt: 2026-06-28T15:02:10.000Z
270
+ assigneeId: null
271
+ assigneeConnectorId: null
272
+ assigneeAgent: null
235
273
  "400":
236
274
  $ref: ../components/responses.yaml#/BadRequest
237
275
  "401":
@@ -303,6 +341,78 @@
303
341
  name: file
304
342
  positional:
305
343
  - id
344
+ /api/admin/errors/{id}/resolve:
345
+ post:
346
+ operationId: resolveError
347
+ summary: Resolve a tracked error
348
+ description: |-
349
+ Marks one tracked error `resolved` — the single-purpose "close out" action. Takes no body; it is `PATCH /api/admin/errors/{id}` pinned to `{ "status": "resolved" }`, exposed so tooling can close an error without being handed the full open/resolved/ignored status machine. A resolved error reopens automatically (ingestion-side) if it recurs, so resolving is always safe: a premature resolve un-does itself on the next occurrence. Returns the updated row; `404` if the error does not exist.
350
+
351
+ **Use case:** Close out a tracked error from an agent or script once its fix has shipped — e.g. after a deploy, resolve every open issue the change addressed and let recurrence reopen anything that wasn't actually fixed.
352
+ tags:
353
+ - Errors
354
+ parameters:
355
+ - $ref: ../components/parameters.yaml#/ProjectId
356
+ - name: id
357
+ in: path
358
+ required: true
359
+ description: Stable opaque error id (`err_…`).
360
+ schema:
361
+ $ref: ../components/schemas/common.yaml#/ResourceId
362
+ responses:
363
+ "200":
364
+ description: Resolve a tracked error
365
+ content:
366
+ application/json:
367
+ schema:
368
+ $ref: ../components/schemas/errors-api.yaml#/ErrorRecord
369
+ example:
370
+ id: err_01j7w7m9q4hxbf6npe6s9zr3vc
371
+ projectId: e976b15e-2f0d-4c6e-9b1a-3a7c1f2d8e90
372
+ fingerprint: 9c1f4f1f2c0c4a5fa1c2b6d3e7c8e3a1
373
+ causedByFingerprint: null
374
+ message: Cannot read properties of undefined (reading 'id')
375
+ errorType: TypeError
376
+ stack: null
377
+ source: shipeasy
378
+ url: https://app.example.com/dashboard/gat_01j7/edit
379
+ seenUrls: null
380
+ subject: gate editor
381
+ outcome: crash on load
382
+ side: client
383
+ env: prod
384
+ kind: uncaught
385
+ lastExtrasJson: null
386
+ sdkVersion: 6.0.0
387
+ count: 137
388
+ status: resolved
389
+ firstSeenAt: 2026-06-20T08:11:02.000Z
390
+ lastSeenAt: 2026-06-28T14:55:31.000Z
391
+ createdAt: 2026-06-20T08:11:02.000Z
392
+ updatedAt: 2026-06-28T15:02:10.000Z
393
+ assigneeId: null
394
+ assigneeConnectorId: null
395
+ assigneeAgent: null
396
+ "400":
397
+ $ref: ../components/responses.yaml#/BadRequest
398
+ "401":
399
+ $ref: ../components/responses.yaml#/Unauthorized
400
+ "403":
401
+ $ref: ../components/responses.yaml#/Forbidden
402
+ "404":
403
+ $ref: ../components/responses.yaml#/NotFound
404
+ "409":
405
+ $ref: ../components/responses.yaml#/Conflict
406
+ "422":
407
+ $ref: ../components/responses.yaml#/UnprocessableEntity
408
+ x-error-codes:
409
+ - UNAUTHORIZED
410
+ - FORBIDDEN
411
+ - NOT_FOUND
412
+ x-cli:
413
+ name: resolve
414
+ positional:
415
+ - id
306
416
  /api/admin/errors/{id}/series:
307
417
  post:
308
418
  operationId: getErrorSeries
@@ -127,6 +127,7 @@
127
127
  - FORBIDDEN
128
128
  - ALREADY_EXISTS
129
129
  - VALIDATION
130
+ - PLAN_LIMIT
130
131
  x-cli:
131
132
  name: create
132
133
  positional: