@shipeasy/openapi 2.4.0 → 3.0.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.
@@ -87,7 +87,7 @@
87
87
 
88
88
  - **Minimal create** — `name` + `schema`. Initial value defaults to `{}`.
89
89
  - **Seeded create** — supply a flat `value` to publish the same object on every env.
90
- - **Per-env seed** — supply a `{ env: value }` map for different per-env starting values.
90
+ - **Per-env seed** — supply a `{ env: value }` map under `value`, or pass the env keys `dev`/`staging`/`prod` directly (each overrides `value` for that env and is published at version 1).
91
91
  tags:
92
92
  - Configs
93
93
  parameters:
@@ -129,8 +129,8 @@
129
129
  - name: free
130
130
  - name: pro
131
131
  perEnvSeed:
132
- summary: Per-env seed
133
- description: "Pass a `{ env: value }` map to seed different initial values per env."
132
+ summary: Per-env seed (env keys)
133
+ description: "Pass the env keys directly to seed different initial values per env. Each overrides `value` for that env and is published at version 1."
134
134
  value:
135
135
  name: pricing.tiers
136
136
  schema:
@@ -140,20 +140,15 @@
140
140
  type: array
141
141
  required:
142
142
  - tiers
143
- value:
144
- dev:
145
- tiers:
146
- - name: free
147
- - name: pro
148
- - name: enterprise
149
- stage:
150
- tiers:
151
- - name: free
152
- - name: pro
153
- prod:
154
- tiers:
155
- - name: free
156
- - name: pro
143
+ dev:
144
+ tiers:
145
+ - name: free
146
+ - name: pro
147
+ - name: enterprise
148
+ prod:
149
+ tiers:
150
+ - name: free
151
+ - name: pro
157
152
  responses:
158
153
  "201":
159
154
  description: Create a dynamic config
@@ -302,15 +297,13 @@
302
297
  operationId: updateConfig
303
298
  summary: Update a dynamic config
304
299
  description: |-
305
- Partial update. When `value` is supplied it is **republished on every env** (new version per env). When `schema` is supplied it replaces the current schema; every existing value is re-validated.
306
-
307
- For env-scoped edits, use the draft/publish flow (`PUT /{id}/drafts` then `POST /{id}/publish`) instead.
300
+ Partial update. When `value` is supplied it is **republished on every env** (new version per env). A per-env key (`dev`/`staging`/`prod`) publishes a new version to **only that env**, immediately, overriding `value` for it. When `schema` is supplied it replaces the current schema; every existing value is re-validated.
308
301
 
309
302
  **Use cases**
310
303
 
311
304
  - **Republish flat value** — `{ "value": {…} }` sets the same value on every env.
305
+ - **Publish one env** — `{ "prod": {…} }` publishes a new version to prod only, instantly.
312
306
  - **Schema migration** — `{ "schema": {…} }` replaces the schema; existing values are re-validated.
313
- - **Env-scoped edits** — use `PUT /{id}/drafts` + `POST /{id}/publish` instead of PATCH.
314
307
  tags:
315
308
  - Configs
316
309
  parameters:
@@ -336,6 +329,15 @@
336
329
  tiers:
337
330
  - name: free
338
331
  - name: pro
332
+ prodOnly:
333
+ summary: Per-env — publish prod only
334
+ description: Publishes a new version to prod only, immediately. dev/staging untouched.
335
+ value:
336
+ prod:
337
+ tiers:
338
+ - name: free
339
+ - name: pro
340
+ - name: enterprise
339
341
  schemaOnly:
340
342
  summary: Schema-only update
341
343
  description: Replaces the schema. Existing values must still validate or the update fails.
@@ -496,6 +498,7 @@
496
498
  - VALIDATION
497
499
  x-cli:
498
500
  name: draft
501
+ hidden: true
499
502
  positional:
500
503
  - id
501
504
  delete:
@@ -555,6 +558,7 @@
555
558
  - NOT_FOUND
556
559
  x-cli:
557
560
  name: discard-draft
561
+ hidden: true
558
562
  positional:
559
563
  - id
560
564
  /api/admin/configs/{id}/publish:
@@ -626,6 +630,7 @@
626
630
  - VALIDATION
627
631
  x-cli:
628
632
  name: publish
633
+ hidden: true
629
634
  positional:
630
635
  - id
631
636
  /api/admin/configs/{id}/activity:
@@ -690,6 +695,7 @@
690
695
  - NOT_FOUND
691
696
  x-cli:
692
697
  name: activity
698
+ hidden: true
693
699
  positional:
694
700
  - id
695
701
  /api/admin/configs/{id}/versions:
@@ -756,6 +762,7 @@
756
762
  - NOT_FOUND
757
763
  x-cli:
758
764
  name: versions
765
+ hidden: true
759
766
  positional:
760
767
  - id
761
768
  /api/admin/configs/{id}/schema:
@@ -5,7 +5,7 @@
5
5
  description: |-
6
6
  Returns every locale profile in the project (e.g. `en:prod`, `fr:prod`).
7
7
 
8
- **Use case:** Discover which locale profiles exist before pushing keys or publishing a chunk.
8
+ **Use case:** Discover which locale profiles exist before pushing keys or publishing.
9
9
  tags:
10
10
  - Profiles
11
11
  parameters:
@@ -173,11 +173,13 @@
173
173
  name: list
174
174
  post:
175
175
  operationId: pushI18nKeys
176
- summary: Push new i18n keys (insert-only)
176
+ summary: Push i18n keys (insert-only, or `force` to overwrite)
177
177
  description: |-
178
- Add NEW keys to a profile. Insert-only — existing keys are left untouched (overwrite one with `updateI18nKey`).
178
+ Add NEW keys to a profile. Insert-only by default — existing keys are left untouched and reported back as `skipped`.
179
179
 
180
- **Use case:** Seed newly-extracted keys without clobbering translations already in the profile.
180
+ Pass `force: true` to overwrite the existing ones in bulk with the submitted values: they come back as `updated` instead of `skipped`. Without `force` the only overwrite paths are `updateI18nKey` (one key) and the devtools-only `upsertI18nKeys`.
181
+
182
+ **Use case:** Seed newly-extracted keys without clobbering translations already in the profile — or re-push a whole source-language file with `force` after the copy changed.
181
183
  tags:
182
184
  - Keys
183
185
  parameters:
@@ -195,7 +197,7 @@
195
197
  value: Buy now
196
198
  responses:
197
199
  "201":
198
- description: Push new i18n keys (insert-only)
200
+ description: Push i18n keys (insert-only, or `force` to overwrite)
199
201
  content:
200
202
  application/json:
201
203
  schema:
@@ -204,8 +206,10 @@
204
206
  added:
205
207
  - checkout.cta
206
208
  skipped: []
209
+ updated: []
207
210
  pushed_count: 1
208
211
  skipped_count: 0
212
+ updated_count: 0
209
213
  "400":
210
214
  $ref: ../components/responses.yaml#/BadRequest
211
215
  "401":
@@ -259,7 +263,6 @@
259
263
  $ref: ../components/schemas/i18n.yaml#/UpsertI18nKeysResponse
260
264
  example:
261
265
  upserted: 1
262
- chunk: default
263
266
  "400":
264
267
  $ref: ../components/responses.yaml#/BadRequest
265
268
  "401":
@@ -726,7 +729,7 @@
726
729
  operationId: publishI18nProfile
727
730
  summary: Publish a profile live
728
731
  description: |-
729
- Publish a profile to the CDN — rebuild its KV snapshot + purge the edge. Publishing is PROFILE-WIDE: the whole profile is snapshotted into one KV blob, so the optional `chunk` in the body is an audit label only (it does not scope what ships).
732
+ Publish a profile to the CDN — rebuild its KV snapshot + purge the edge. Publishing is PROFILE-WIDE: the whole profile is snapshotted into one KV blob, so the body takes no options.
730
733
 
731
734
  **Use case:** Ship the latest translations live after pushing/updating keys.
732
735
  tags:
@@ -740,16 +743,15 @@
740
743
  schema:
741
744
  $ref: ../components/schemas/common.yaml#/ResourceId
742
745
  requestBody:
743
- required: true
746
+ required: false
744
747
  content:
745
748
  application/json:
746
749
  schema:
747
750
  $ref: ../components/schemas/i18n.yaml#/PublishI18nProfileRequest
748
- example:
749
- chunk: default
751
+ example: {}
750
752
  responses:
751
753
  "200":
752
- description: Publish a profile chunk
754
+ description: Publish a profile
753
755
  content:
754
756
  application/json:
755
757
  schema:
@@ -505,7 +505,7 @@
505
505
  **Use case:** Read what a previous agent run already found before starting
506
506
  your own investigation of the item.
507
507
  tags:
508
- - Ops
508
+ - Investigations
509
509
  parameters:
510
510
  - $ref: ../components/parameters.yaml#/ProjectId
511
511
  - name: handle
@@ -536,6 +536,10 @@
536
536
  - UNAUTHORIZED
537
537
  - FORBIDDEN
538
538
  - NOT_FOUND
539
+ x-cli:
540
+ name: list
541
+ positional:
542
+ - handle
539
543
  post:
540
544
  operationId: createOpsInvestigation
541
545
  summary: Record an investigation
@@ -551,7 +555,7 @@
551
555
  markdown findings, sources inspected, confidence) so the team — and the
552
556
  next agent run — sees what you learned.
553
557
  tags:
554
- - Ops
558
+ - Investigations
555
559
  parameters:
556
560
  - $ref: ../components/parameters.yaml#/ProjectId
557
561
  - name: handle
@@ -609,6 +613,85 @@
609
613
  - FORBIDDEN
610
614
  - NOT_FOUND
611
615
  - VALIDATION
616
+ x-cli:
617
+ name: create
618
+ positional:
619
+ - handle
620
+ /api/admin/ops/{handle}/investigation/{investigationId}:
621
+ patch:
622
+ operationId: updateOpsInvestigation
623
+ summary: Update an investigation record
624
+ description: |-
625
+ Update one existing investigation record in place — the write-back seam for
626
+ the `working` run record you were handed when a run was launched. Fill in
627
+ the `summary`/`findings`, attach the fixing PR, record your `confidence`
628
+ and the `sources` you inspected, or flip its `kind` off `working` once the
629
+ investigation is done. A partial patch: send only the fields you want to
630
+ change. Safe for restricted ops keys (it never reads or deletes).
631
+
632
+ **Use case:** A run started with an empty `working` record; as you work,
633
+ PATCH it with your findings so the cockpit's detail panel fills in live —
634
+ no need to append a second record.
635
+ tags:
636
+ - Investigations
637
+ parameters:
638
+ - $ref: ../components/parameters.yaml#/ProjectId
639
+ - name: handle
640
+ in: path
641
+ required: true
642
+ description: Per-project item number (e.g. `7`) or the full ops item id.
643
+ schema:
644
+ $ref: ../components/schemas/common.yaml#/ResourceId
645
+ - name: investigationId
646
+ in: path
647
+ required: true
648
+ description: The investigation record id (from `POST`/`GET .../investigation` or the `runId` an ack/launch returned).
649
+ schema:
650
+ $ref: ../components/schemas/common.yaml#/ResourceId
651
+ requestBody:
652
+ required: true
653
+ content:
654
+ application/json:
655
+ schema:
656
+ $ref: ../components/schemas/ops.yaml#/UpdateOpsInvestigationRequest
657
+ examples:
658
+ findings:
659
+ summary: Fill in the run record's findings
660
+ value:
661
+ kind: investigated
662
+ summary: Root cause is a stale KV read on the checkout flag.
663
+ findings: "The `checkout.cta` gate is rebuilt without a CDN purge, so…"
664
+ confidence: high
665
+ prNumber: 4821
666
+ prUrl: https://github.com/acme/web/pull/4821
667
+ responses:
668
+ "200":
669
+ description: The updated investigation record
670
+ content:
671
+ application/json:
672
+ schema:
673
+ $ref: ../components/schemas/ops.yaml#/OpsInvestigation
674
+ "400":
675
+ $ref: ../components/responses.yaml#/BadRequest
676
+ "401":
677
+ $ref: ../components/responses.yaml#/Unauthorized
678
+ "403":
679
+ $ref: ../components/responses.yaml#/Forbidden
680
+ "404":
681
+ $ref: ../components/responses.yaml#/NotFound
682
+ "422":
683
+ $ref: ../components/responses.yaml#/UnprocessableEntity
684
+ x-error-codes:
685
+ - BAD_REQUEST
686
+ - UNAUTHORIZED
687
+ - FORBIDDEN
688
+ - NOT_FOUND
689
+ - VALIDATION
690
+ x-cli:
691
+ name: update
692
+ positional:
693
+ - handle
694
+ - investigationId
612
695
  /api/admin/agent-profiles:
613
696
  get:
614
697
  operationId: listOpsAgents