@epilot/cli 0.1.112 → 0.1.114
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/README.md +1 -1
- package/definitions/app.json +34 -17
- package/definitions/configuration-hub.json +1064 -48
- package/dist/{add-component-TCF7V3KU.js → add-component-YSPAIR3D.js} +11 -1
- package/dist/{add-function-VRVBRNY3.js → add-function-6VYBWMRD.js} +11 -5
- package/dist/{api-5W2UMWCW.js → api-HKW3N3TV.js} +3 -2
- package/dist/app-TCMEJ6XJ.js +26 -0
- package/dist/bin/epilot.js +7 -7
- package/dist/{chunk-UDGF4AVJ.js → chunk-6HMS3A5C.js} +0 -3
- package/dist/{chunk-Q5BRCFO5.js → chunk-PKLYEJHD.js} +12 -2
- package/dist/{completion-TFNBZ2RL.js → completion-YY2UW6SA.js} +1 -1
- package/dist/{deploy-2U5FVEE7.js → deploy-3HGRSDVZ.js} +16 -29
- package/dist/{dev-JEAHUYQU.js → dev-IYGZMQ5U.js} +1 -1
- package/dist/{export-VLAY2KZP.js → export-TDFYIMNN.js} +1 -1
- package/dist/{init-C66L5GFR.js → init-5K7TXE74.js} +1 -1
- package/dist/{remove-component-7C7MPSBF.js → remove-component-4XFMVBFW.js} +1 -1
- package/dist/{review-JZTMQNU3.js → review-BD2ZOXCZ.js} +4 -2
- package/dist/{upgrade-JXF72TTA.js → upgrade-U5ADV54U.js} +1 -1
- package/dist/{validate-J35DJW3H.js → validate-B5MJWBXP.js} +1 -1
- package/dist/{versions-2TMTHO7W.js → versions-KZG3AZCT.js} +1 -1
- package/package.json +1 -1
- package/dist/app-NATUF3YX.js +0 -26
|
@@ -27,6 +27,14 @@
|
|
|
27
27
|
{
|
|
28
28
|
"name": "Sync",
|
|
29
29
|
"description": "Cross-org configuration sync jobs"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "Delete",
|
|
33
|
+
"description": "Bulk-delete jobs for configuration resources"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "Compare",
|
|
37
|
+
"description": "Cross-org configuration comparison, match suggestions, and lineage operations"
|
|
30
38
|
}
|
|
31
39
|
],
|
|
32
40
|
"paths": {
|
|
@@ -126,12 +134,13 @@
|
|
|
126
134
|
{
|
|
127
135
|
"name": "sort",
|
|
128
136
|
"in": "query",
|
|
129
|
-
"description": "Sort order. `updated_at` (default) sorts by most recently modified.\n`usage` sorts by the type-specific usage metric descending\n(submissions for journeys, executions for automations, entities for schemas, etc.).\n",
|
|
137
|
+
"description": "Sort order. `updated_at` (default) sorts by most recently modified.\n`usage` sorts by the type-specific usage metric descending\n(submissions for journeys, executions for automations, entities for schemas, etc.).\n`name` sorts alphabetically by title (A–Z, case-insensitive).\n",
|
|
130
138
|
"schema": {
|
|
131
139
|
"type": "string",
|
|
132
140
|
"enum": [
|
|
133
141
|
"updated_at",
|
|
134
|
-
"usage"
|
|
142
|
+
"usage",
|
|
143
|
+
"name"
|
|
135
144
|
],
|
|
136
145
|
"default": "updated_at"
|
|
137
146
|
}
|
|
@@ -267,6 +276,202 @@
|
|
|
267
276
|
}
|
|
268
277
|
}
|
|
269
278
|
},
|
|
279
|
+
"/v1/configs/compare": {
|
|
280
|
+
"post": {
|
|
281
|
+
"operationId": "compareConfigs",
|
|
282
|
+
"summary": "compareConfigs",
|
|
283
|
+
"description": "Compare the caller org's configs of a single type against another\n(source) org, side by side. Rows are paired via the lineage registry in\nboth sync directions (caller imported from source, or source imported\nfrom caller); configs without a counterpart come back as `only_current`\nor `only_source`.\n\n`source_auth_token` must be a valid token for `source_org_id` — the\nfrontend mints one via the pipeline pairing, mirroring `createSyncJob`'s\n`target_auth_token`. The token is verified against `source_org_id`\nbefore any source-org data is read.\n\nPOST because the request carries a token; the operation reads only.\n",
|
|
284
|
+
"tags": [
|
|
285
|
+
"Compare"
|
|
286
|
+
],
|
|
287
|
+
"requestBody": {
|
|
288
|
+
"required": true,
|
|
289
|
+
"content": {
|
|
290
|
+
"application/json": {
|
|
291
|
+
"schema": {
|
|
292
|
+
"$ref": "#/components/schemas/CompareRequest"
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
"responses": {
|
|
298
|
+
"200": {
|
|
299
|
+
"description": "Side-by-side comparison rows for the requested type",
|
|
300
|
+
"content": {
|
|
301
|
+
"application/json": {
|
|
302
|
+
"schema": {
|
|
303
|
+
"$ref": "#/components/schemas/CompareResponse"
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
"400": {
|
|
309
|
+
"description": "Unknown type or comparing an org with itself",
|
|
310
|
+
"content": {
|
|
311
|
+
"application/json": {
|
|
312
|
+
"schema": {
|
|
313
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
"403": {
|
|
319
|
+
"description": "source_auth_token does not belong to source_org_id",
|
|
320
|
+
"content": {
|
|
321
|
+
"application/json": {
|
|
322
|
+
"schema": {
|
|
323
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
"/v1/configs/compare/suggestions": {
|
|
332
|
+
"post": {
|
|
333
|
+
"operationId": "suggestMatches",
|
|
334
|
+
"summary": "suggestMatches",
|
|
335
|
+
"description": "Run the sync-grade heuristic match (`lookupByHeuristic` — name / slug /\nunique key) for a batch of source-org configs that have no lineage\nentry, and return candidate counterparts in the caller's org.\n\nSuggestions are ephemeral — nothing is persisted. The client offers\neach candidate to the user, and a confirmed pair is written via\n`confirmLineage`. Batches are capped at 25 ids; the client pages\nthrough unmatched rows across successive calls.\n",
|
|
336
|
+
"tags": [
|
|
337
|
+
"Compare"
|
|
338
|
+
],
|
|
339
|
+
"requestBody": {
|
|
340
|
+
"required": true,
|
|
341
|
+
"content": {
|
|
342
|
+
"application/json": {
|
|
343
|
+
"schema": {
|
|
344
|
+
"$ref": "#/components/schemas/SuggestMatchesRequest"
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
"responses": {
|
|
350
|
+
"200": {
|
|
351
|
+
"description": "Heuristic match candidates per source id",
|
|
352
|
+
"content": {
|
|
353
|
+
"application/json": {
|
|
354
|
+
"schema": {
|
|
355
|
+
"$ref": "#/components/schemas/SuggestMatchesResponse"
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"400": {
|
|
361
|
+
"description": "Unknown type or type without heuristic support",
|
|
362
|
+
"content": {
|
|
363
|
+
"application/json": {
|
|
364
|
+
"schema": {
|
|
365
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
"/v1/configs/lineage": {
|
|
374
|
+
"post": {
|
|
375
|
+
"operationId": "confirmLineage",
|
|
376
|
+
"summary": "confirmLineage",
|
|
377
|
+
"description": "Persist a lineage entry pairing a source-org config with a config in\nthe caller's org — used to confirm a heuristic suggestion from the\nCompare view. Writes to the caller org's lineage partition (caller as\nsync target), so subsequent syncs PATCH the confirmed target instead of\ncreating a duplicate. Conflicts (an existing entry pointing at a\ndifferent target) return 409 so the client can refresh.\n",
|
|
378
|
+
"tags": [
|
|
379
|
+
"Compare"
|
|
380
|
+
],
|
|
381
|
+
"requestBody": {
|
|
382
|
+
"required": true,
|
|
383
|
+
"content": {
|
|
384
|
+
"application/json": {
|
|
385
|
+
"schema": {
|
|
386
|
+
"$ref": "#/components/schemas/ConfirmLineageRequest"
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
"responses": {
|
|
392
|
+
"201": {
|
|
393
|
+
"description": "Lineage entry persisted",
|
|
394
|
+
"content": {
|
|
395
|
+
"application/json": {
|
|
396
|
+
"schema": {
|
|
397
|
+
"$ref": "#/components/schemas/LineageEntryResponse"
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"400": {
|
|
403
|
+
"description": "Unknown type or target config not found in caller org",
|
|
404
|
+
"content": {
|
|
405
|
+
"application/json": {
|
|
406
|
+
"schema": {
|
|
407
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
"409": {
|
|
413
|
+
"description": "A lineage entry for this source config already points at a different target",
|
|
414
|
+
"content": {
|
|
415
|
+
"application/json": {
|
|
416
|
+
"schema": {
|
|
417
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
},
|
|
424
|
+
"delete": {
|
|
425
|
+
"operationId": "breakLineage",
|
|
426
|
+
"summary": "breakLineage",
|
|
427
|
+
"description": "Delete a lineage entry from the caller org's partition (caller as sync\ntarget), identified by `type` + `source_id`. Used to break a wrong or\nstale match from the Compare view. Note: a future sync can re-match the\nsame pair heuristically — the entry is deleted, not blocklisted. To\nbreak a match recorded in the OTHER direction, call this operation\nauthenticated as the other org (pipeline token).\n",
|
|
428
|
+
"tags": [
|
|
429
|
+
"Compare"
|
|
430
|
+
],
|
|
431
|
+
"parameters": [
|
|
432
|
+
{
|
|
433
|
+
"name": "type",
|
|
434
|
+
"in": "query",
|
|
435
|
+
"required": true,
|
|
436
|
+
"description": "Configuration resource type of the lineage entry",
|
|
437
|
+
"schema": {
|
|
438
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
439
|
+
}
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"name": "source_id",
|
|
443
|
+
"in": "query",
|
|
444
|
+
"required": true,
|
|
445
|
+
"description": "Source-org config id the lineage entry is keyed by",
|
|
446
|
+
"schema": {
|
|
447
|
+
"type": "string"
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
],
|
|
451
|
+
"responses": {
|
|
452
|
+
"200": {
|
|
453
|
+
"description": "Lineage entry deleted",
|
|
454
|
+
"content": {
|
|
455
|
+
"application/json": {
|
|
456
|
+
"schema": {
|
|
457
|
+
"$ref": "#/components/schemas/BreakLineageResponse"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
"404": {
|
|
463
|
+
"description": "No lineage entry found for this type + source_id",
|
|
464
|
+
"content": {
|
|
465
|
+
"application/json": {
|
|
466
|
+
"schema": {
|
|
467
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
},
|
|
270
475
|
"/v1/configs/sync-jobs": {
|
|
271
476
|
"post": {
|
|
272
477
|
"operationId": "createSyncJob",
|
|
@@ -386,7 +591,7 @@
|
|
|
386
591
|
"post": {
|
|
387
592
|
"operationId": "retrySyncJob",
|
|
388
593
|
"summary": "retrySyncJob",
|
|
389
|
-
"description": "Retry the
|
|
594
|
+
"description": "Retry the unresolved resources from a prior sync job: `failed` rows, plus\nrows the original run left at `pending`/`in_progress` because it stopped\nearly. Creates a new job whose scope is that `(type, source_id)` set and\nenqueues it for execution. Optionally accepts inline payload overrides.\n",
|
|
390
595
|
"tags": [
|
|
391
596
|
"Sync"
|
|
392
597
|
],
|
|
@@ -429,6 +634,53 @@
|
|
|
429
634
|
}
|
|
430
635
|
}
|
|
431
636
|
},
|
|
637
|
+
"/v1/configs/sync-jobs/{id}/cancel": {
|
|
638
|
+
"post": {
|
|
639
|
+
"operationId": "cancelSyncJob",
|
|
640
|
+
"summary": "cancelSyncJob",
|
|
641
|
+
"description": "Cancel a running sync job. Marks the job `cancelled` with a `finished_at`\nso it stops being reported as in-flight, and the worker stops at its next\nbatch boundary — phases re-read the job status and abort rather than\noverwrite a cancellation with their own outcome.\n\nResources already written to the target are NOT rolled back; cancelling\nstops further work. Jobs already in a terminal state are rejected with\n409.\n",
|
|
642
|
+
"tags": [
|
|
643
|
+
"Sync"
|
|
644
|
+
],
|
|
645
|
+
"parameters": [
|
|
646
|
+
{
|
|
647
|
+
"$ref": "#/components/parameters/SyncJobId"
|
|
648
|
+
}
|
|
649
|
+
],
|
|
650
|
+
"responses": {
|
|
651
|
+
"200": {
|
|
652
|
+
"description": "Job cancelled",
|
|
653
|
+
"content": {
|
|
654
|
+
"application/json": {
|
|
655
|
+
"schema": {
|
|
656
|
+
"$ref": "#/components/schemas/SyncJob"
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
"404": {
|
|
662
|
+
"description": "Sync job not found",
|
|
663
|
+
"content": {
|
|
664
|
+
"application/json": {
|
|
665
|
+
"schema": {
|
|
666
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
},
|
|
671
|
+
"409": {
|
|
672
|
+
"description": "Job already finished",
|
|
673
|
+
"content": {
|
|
674
|
+
"application/json": {
|
|
675
|
+
"schema": {
|
|
676
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
},
|
|
432
684
|
"/v1/configs/sync-jobs/{id}/resources": {
|
|
433
685
|
"get": {
|
|
434
686
|
"operationId": "listSyncJobResources",
|
|
@@ -480,42 +732,225 @@
|
|
|
480
732
|
}
|
|
481
733
|
}
|
|
482
734
|
},
|
|
483
|
-
"/v1/configs/
|
|
735
|
+
"/v1/configs/delete-jobs": {
|
|
484
736
|
"post": {
|
|
485
|
-
"operationId": "
|
|
486
|
-
"summary": "
|
|
487
|
-
"description": "
|
|
737
|
+
"operationId": "createDeleteJob",
|
|
738
|
+
"summary": "createDeleteJob",
|
|
739
|
+
"description": "Create a bulk-delete job for the caller's organization. The selected\nresources are deleted asynchronously by a worker Lambda; the response\nreturns the persisted job header with status `pending`.\n\nRaw delete — no dependency checks are performed. On completion the\nworker auto-triggers an index rebuild so the config list reflects the\ndeletions.\n",
|
|
488
740
|
"tags": [
|
|
489
|
-
"
|
|
741
|
+
"Delete"
|
|
742
|
+
],
|
|
743
|
+
"requestBody": {
|
|
744
|
+
"required": true,
|
|
745
|
+
"content": {
|
|
746
|
+
"application/json": {
|
|
747
|
+
"schema": {
|
|
748
|
+
"$ref": "#/components/schemas/DeleteJobRequest"
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
},
|
|
753
|
+
"responses": {
|
|
754
|
+
"201": {
|
|
755
|
+
"description": "Delete job accepted",
|
|
756
|
+
"content": {
|
|
757
|
+
"application/json": {
|
|
758
|
+
"schema": {
|
|
759
|
+
"$ref": "#/components/schemas/DeleteJob"
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
},
|
|
764
|
+
"400": {
|
|
765
|
+
"description": "Invalid request body",
|
|
766
|
+
"content": {
|
|
767
|
+
"application/json": {
|
|
768
|
+
"schema": {
|
|
769
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
},
|
|
776
|
+
"get": {
|
|
777
|
+
"operationId": "listDeleteJobs",
|
|
778
|
+
"summary": "listDeleteJobs",
|
|
779
|
+
"description": "List bulk-delete jobs scoped to the caller's organization, paginated\nwith an opaque cursor. Most-recent first.\n",
|
|
780
|
+
"tags": [
|
|
781
|
+
"Delete"
|
|
782
|
+
],
|
|
783
|
+
"parameters": [
|
|
784
|
+
{
|
|
785
|
+
"$ref": "#/components/parameters/CursorParam"
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"$ref": "#/components/parameters/SizeParam"
|
|
789
|
+
}
|
|
490
790
|
],
|
|
491
791
|
"responses": {
|
|
492
792
|
"200": {
|
|
493
|
-
"description": "
|
|
793
|
+
"description": "Paginated delete jobs",
|
|
494
794
|
"content": {
|
|
495
795
|
"application/json": {
|
|
496
796
|
"schema": {
|
|
497
|
-
"$ref": "#/components/schemas/
|
|
797
|
+
"$ref": "#/components/schemas/DeleteJobListResponse"
|
|
498
798
|
}
|
|
499
799
|
}
|
|
500
800
|
}
|
|
501
801
|
}
|
|
502
802
|
}
|
|
503
803
|
}
|
|
504
|
-
}
|
|
505
|
-
},
|
|
506
|
-
"components": {
|
|
507
|
-
"securitySchemes": {
|
|
508
|
-
"EpilotAuth": {
|
|
509
|
-
"type": "http",
|
|
510
|
-
"scheme": "bearer",
|
|
511
|
-
"description": "epilot JWT auth token"
|
|
512
|
-
}
|
|
513
804
|
},
|
|
514
|
-
"
|
|
515
|
-
"
|
|
516
|
-
"
|
|
517
|
-
"
|
|
518
|
-
"
|
|
805
|
+
"/v1/configs/delete-jobs/{id}": {
|
|
806
|
+
"get": {
|
|
807
|
+
"operationId": "getDeleteJob",
|
|
808
|
+
"summary": "getDeleteJob",
|
|
809
|
+
"description": "Fetch a single bulk-delete job by ID. Returns the job header and counts\nsummary. Frontend polls this endpoint while the job runs.\n",
|
|
810
|
+
"tags": [
|
|
811
|
+
"Delete"
|
|
812
|
+
],
|
|
813
|
+
"parameters": [
|
|
814
|
+
{
|
|
815
|
+
"$ref": "#/components/parameters/DeleteJobId"
|
|
816
|
+
}
|
|
817
|
+
],
|
|
818
|
+
"responses": {
|
|
819
|
+
"200": {
|
|
820
|
+
"description": "Delete job detail",
|
|
821
|
+
"content": {
|
|
822
|
+
"application/json": {
|
|
823
|
+
"schema": {
|
|
824
|
+
"$ref": "#/components/schemas/DeleteJob"
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
"404": {
|
|
830
|
+
"description": "Delete job not found",
|
|
831
|
+
"content": {
|
|
832
|
+
"application/json": {
|
|
833
|
+
"schema": {
|
|
834
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
},
|
|
842
|
+
"/v1/configs/delete-jobs/{id}/resources": {
|
|
843
|
+
"get": {
|
|
844
|
+
"operationId": "listDeleteJobResources",
|
|
845
|
+
"summary": "listDeleteJobResources",
|
|
846
|
+
"description": "List the per-resource rows for a delete job, cursor-paginated. Used by\nthe failures view in the frontend.\n",
|
|
847
|
+
"tags": [
|
|
848
|
+
"Delete"
|
|
849
|
+
],
|
|
850
|
+
"parameters": [
|
|
851
|
+
{
|
|
852
|
+
"$ref": "#/components/parameters/DeleteJobId"
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
"$ref": "#/components/parameters/CursorParam"
|
|
856
|
+
},
|
|
857
|
+
{
|
|
858
|
+
"$ref": "#/components/parameters/SizeParam"
|
|
859
|
+
}
|
|
860
|
+
],
|
|
861
|
+
"responses": {
|
|
862
|
+
"200": {
|
|
863
|
+
"description": "Paginated delete job resources",
|
|
864
|
+
"content": {
|
|
865
|
+
"application/json": {
|
|
866
|
+
"schema": {
|
|
867
|
+
"$ref": "#/components/schemas/DeleteJobResourceListResponse"
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
},
|
|
872
|
+
"404": {
|
|
873
|
+
"description": "Delete job not found",
|
|
874
|
+
"content": {
|
|
875
|
+
"application/json": {
|
|
876
|
+
"schema": {
|
|
877
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
},
|
|
885
|
+
"/v1/configs/index:rebuild": {
|
|
886
|
+
"post": {
|
|
887
|
+
"operationId": "rebuildIndex",
|
|
888
|
+
"summary": "rebuildIndex",
|
|
889
|
+
"description": "Rebuild the configuration index for the caller's organization.\nFire-and-forget: invokes the async worker and returns immediately.\nA new rebuild will cancel any in-flight build (see `build_token`).\n",
|
|
890
|
+
"tags": [
|
|
891
|
+
"Configs"
|
|
892
|
+
],
|
|
893
|
+
"responses": {
|
|
894
|
+
"200": {
|
|
895
|
+
"description": "Index build status",
|
|
896
|
+
"content": {
|
|
897
|
+
"application/json": {
|
|
898
|
+
"schema": {
|
|
899
|
+
"$ref": "#/components/schemas/IndexRebuildResponse"
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
"/v1/configs/inventory": {
|
|
908
|
+
"get": {
|
|
909
|
+
"operationId": "getConfigInventory",
|
|
910
|
+
"summary": "getConfigInventory",
|
|
911
|
+
"description": "Returns a fresh inventory of an org's configuration resources — `{ type, id }` identities only,\nno full payloads. Calls every adapter's `list()` live (bypasses the 7-day DynamoDB index).\nIntended for snapshot-api to consume when taking a full-org snapshot.\n",
|
|
912
|
+
"tags": [
|
|
913
|
+
"Configs"
|
|
914
|
+
],
|
|
915
|
+
"parameters": [
|
|
916
|
+
{
|
|
917
|
+
"name": "include_dependency_only",
|
|
918
|
+
"in": "query",
|
|
919
|
+
"description": "When true (default), include dependency-only types (e.g. `entity_mapping`)\nin the inventory in addition to the top-level registered types.\n",
|
|
920
|
+
"schema": {
|
|
921
|
+
"type": "boolean",
|
|
922
|
+
"default": true
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
],
|
|
926
|
+
"responses": {
|
|
927
|
+
"200": {
|
|
928
|
+
"description": "Fresh inventory of all org configuration resources",
|
|
929
|
+
"content": {
|
|
930
|
+
"application/json": {
|
|
931
|
+
"schema": {
|
|
932
|
+
"$ref": "#/components/schemas/ConfigInventoryResponse"
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
"components": {
|
|
942
|
+
"securitySchemes": {
|
|
943
|
+
"EpilotAuth": {
|
|
944
|
+
"type": "http",
|
|
945
|
+
"scheme": "bearer",
|
|
946
|
+
"description": "epilot JWT auth token"
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
"parameters": {
|
|
950
|
+
"ConfigType": {
|
|
951
|
+
"name": "type",
|
|
952
|
+
"in": "path",
|
|
953
|
+
"required": true,
|
|
519
954
|
"description": "Configuration resource type",
|
|
520
955
|
"schema": {
|
|
521
956
|
"$ref": "#/components/schemas/ResourceType"
|
|
@@ -557,6 +992,15 @@
|
|
|
557
992
|
"schema": {
|
|
558
993
|
"type": "string"
|
|
559
994
|
}
|
|
995
|
+
},
|
|
996
|
+
"DeleteJobId": {
|
|
997
|
+
"name": "id",
|
|
998
|
+
"in": "path",
|
|
999
|
+
"required": true,
|
|
1000
|
+
"description": "Delete job ID",
|
|
1001
|
+
"schema": {
|
|
1002
|
+
"type": "string"
|
|
1003
|
+
}
|
|
560
1004
|
}
|
|
561
1005
|
},
|
|
562
1006
|
"schemas": {
|
|
@@ -625,6 +1069,11 @@
|
|
|
625
1069
|
"type": "string",
|
|
626
1070
|
"description": "@epilot/sdk subpath for fetching full config payloads",
|
|
627
1071
|
"example": "@epilot/sdk/journey"
|
|
1072
|
+
},
|
|
1073
|
+
"deletable": {
|
|
1074
|
+
"type": "boolean",
|
|
1075
|
+
"description": "Whether resources of this type can be deleted via the bulk-delete API",
|
|
1076
|
+
"example": true
|
|
628
1077
|
}
|
|
629
1078
|
},
|
|
630
1079
|
"required": [
|
|
@@ -632,7 +1081,8 @@
|
|
|
632
1081
|
"label",
|
|
633
1082
|
"icon",
|
|
634
1083
|
"source_api",
|
|
635
|
-
"sdk_client"
|
|
1084
|
+
"sdk_client",
|
|
1085
|
+
"deletable"
|
|
636
1086
|
]
|
|
637
1087
|
},
|
|
638
1088
|
"ConfigNode": {
|
|
@@ -809,35 +1259,314 @@
|
|
|
809
1259
|
}
|
|
810
1260
|
},
|
|
811
1261
|
"required": [
|
|
812
|
-
"status"
|
|
1262
|
+
"status"
|
|
1263
|
+
]
|
|
1264
|
+
},
|
|
1265
|
+
"IndexStatusResponse": {
|
|
1266
|
+
"type": "object",
|
|
1267
|
+
"description": "Current index build state",
|
|
1268
|
+
"properties": {
|
|
1269
|
+
"status": {
|
|
1270
|
+
"type": "string",
|
|
1271
|
+
"enum": [
|
|
1272
|
+
"missing",
|
|
1273
|
+
"building",
|
|
1274
|
+
"ready",
|
|
1275
|
+
"failed"
|
|
1276
|
+
]
|
|
1277
|
+
},
|
|
1278
|
+
"org_id": {
|
|
1279
|
+
"type": "string",
|
|
1280
|
+
"description": "Organization the index (and the authenticated token) belongs to.\nEchoed so callers holding a token for another org can resolve and\nverify its identity.\n"
|
|
1281
|
+
},
|
|
1282
|
+
"last_built_at": {
|
|
1283
|
+
"type": "string",
|
|
1284
|
+
"format": "date-time"
|
|
1285
|
+
},
|
|
1286
|
+
"total_items": {
|
|
1287
|
+
"type": "integer"
|
|
1288
|
+
},
|
|
1289
|
+
"build_duration_ms": {
|
|
1290
|
+
"type": "integer"
|
|
1291
|
+
}
|
|
1292
|
+
},
|
|
1293
|
+
"required": [
|
|
1294
|
+
"status"
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1297
|
+
"CompareRequest": {
|
|
1298
|
+
"type": "object",
|
|
1299
|
+
"description": "Request body for a per-type cross-org comparison",
|
|
1300
|
+
"properties": {
|
|
1301
|
+
"source_org_id": {
|
|
1302
|
+
"type": "string",
|
|
1303
|
+
"description": "Organization to compare the caller's org against"
|
|
1304
|
+
},
|
|
1305
|
+
"source_auth_token": {
|
|
1306
|
+
"type": "string",
|
|
1307
|
+
"description": "Auth token belonging to `source_org_id` (e.g. a pipeline token).\nVerified before any source-org data is read. Never logged.\n"
|
|
1308
|
+
},
|
|
1309
|
+
"type": {
|
|
1310
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
1311
|
+
}
|
|
1312
|
+
},
|
|
1313
|
+
"required": [
|
|
1314
|
+
"source_org_id",
|
|
1315
|
+
"source_auth_token",
|
|
1316
|
+
"type"
|
|
1317
|
+
]
|
|
1318
|
+
},
|
|
1319
|
+
"CompareLineage": {
|
|
1320
|
+
"type": "object",
|
|
1321
|
+
"description": "Provenance of a lineage-backed match",
|
|
1322
|
+
"properties": {
|
|
1323
|
+
"direction": {
|
|
1324
|
+
"type": "string",
|
|
1325
|
+
"enum": [
|
|
1326
|
+
"pull",
|
|
1327
|
+
"push"
|
|
1328
|
+
],
|
|
1329
|
+
"description": "`pull` — the caller org imported this config from the source org\n(entry lives in the caller's lineage partition). `push` — the\nsource org imported it from the caller (entry lives in the source\norg's partition).\n"
|
|
1330
|
+
},
|
|
1331
|
+
"last_synced_at": {
|
|
1332
|
+
"type": "string",
|
|
1333
|
+
"format": "date-time"
|
|
1334
|
+
},
|
|
1335
|
+
"last_sync_job_id": {
|
|
1336
|
+
"type": "string"
|
|
1337
|
+
},
|
|
1338
|
+
"origin": {
|
|
1339
|
+
"type": "string",
|
|
1340
|
+
"description": "`manual_confirm` when the entry was created by confirming a\nheuristic suggestion in the Compare view; absent for sync-written\nentries.\n"
|
|
1341
|
+
}
|
|
1342
|
+
},
|
|
1343
|
+
"required": [
|
|
1344
|
+
"direction"
|
|
1345
|
+
]
|
|
1346
|
+
},
|
|
1347
|
+
"CompareRow": {
|
|
1348
|
+
"type": "object",
|
|
1349
|
+
"description": "One row of the side-by-side comparison. `matched` rows carry both\nconfigs plus lineage provenance; one-sided rows carry only the side\nthe config exists on.\n",
|
|
1350
|
+
"properties": {
|
|
1351
|
+
"match_status": {
|
|
1352
|
+
"type": "string",
|
|
1353
|
+
"enum": [
|
|
1354
|
+
"matched",
|
|
1355
|
+
"only_current",
|
|
1356
|
+
"only_source"
|
|
1357
|
+
]
|
|
1358
|
+
},
|
|
1359
|
+
"current": {
|
|
1360
|
+
"$ref": "#/components/schemas/ConfigNode"
|
|
1361
|
+
},
|
|
1362
|
+
"source": {
|
|
1363
|
+
"$ref": "#/components/schemas/ConfigNode"
|
|
1364
|
+
},
|
|
1365
|
+
"lineage": {
|
|
1366
|
+
"$ref": "#/components/schemas/CompareLineage"
|
|
1367
|
+
}
|
|
1368
|
+
},
|
|
1369
|
+
"required": [
|
|
1370
|
+
"match_status"
|
|
1371
|
+
]
|
|
1372
|
+
},
|
|
1373
|
+
"CompareCounts": {
|
|
1374
|
+
"type": "object",
|
|
1375
|
+
"description": "Row counts per match status",
|
|
1376
|
+
"properties": {
|
|
1377
|
+
"matched": {
|
|
1378
|
+
"type": "integer"
|
|
1379
|
+
},
|
|
1380
|
+
"only_current": {
|
|
1381
|
+
"type": "integer"
|
|
1382
|
+
},
|
|
1383
|
+
"only_source": {
|
|
1384
|
+
"type": "integer"
|
|
1385
|
+
}
|
|
1386
|
+
},
|
|
1387
|
+
"required": [
|
|
1388
|
+
"matched",
|
|
1389
|
+
"only_current",
|
|
1390
|
+
"only_source"
|
|
1391
|
+
]
|
|
1392
|
+
},
|
|
1393
|
+
"CompareResponse": {
|
|
1394
|
+
"type": "object",
|
|
1395
|
+
"description": "Side-by-side comparison of one config type across two orgs",
|
|
1396
|
+
"properties": {
|
|
1397
|
+
"type": {
|
|
1398
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
1399
|
+
},
|
|
1400
|
+
"label": {
|
|
1401
|
+
"type": "string"
|
|
1402
|
+
},
|
|
1403
|
+
"icon": {
|
|
1404
|
+
"type": "string"
|
|
1405
|
+
},
|
|
1406
|
+
"rows": {
|
|
1407
|
+
"type": "array",
|
|
1408
|
+
"items": {
|
|
1409
|
+
"$ref": "#/components/schemas/CompareRow"
|
|
1410
|
+
}
|
|
1411
|
+
},
|
|
1412
|
+
"counts": {
|
|
1413
|
+
"$ref": "#/components/schemas/CompareCounts"
|
|
1414
|
+
}
|
|
1415
|
+
},
|
|
1416
|
+
"required": [
|
|
1417
|
+
"type",
|
|
1418
|
+
"label",
|
|
1419
|
+
"icon",
|
|
1420
|
+
"rows",
|
|
1421
|
+
"counts"
|
|
1422
|
+
]
|
|
1423
|
+
},
|
|
1424
|
+
"SuggestMatchesRequest": {
|
|
1425
|
+
"type": "object",
|
|
1426
|
+
"description": "Request body for batched heuristic match suggestions",
|
|
1427
|
+
"properties": {
|
|
1428
|
+
"source_org_id": {
|
|
1429
|
+
"type": "string"
|
|
1430
|
+
},
|
|
1431
|
+
"source_auth_token": {
|
|
1432
|
+
"type": "string",
|
|
1433
|
+
"description": "Auth token belonging to `source_org_id`. Never logged."
|
|
1434
|
+
},
|
|
1435
|
+
"type": {
|
|
1436
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
1437
|
+
},
|
|
1438
|
+
"source_ids": {
|
|
1439
|
+
"type": "array",
|
|
1440
|
+
"description": "Source-org config ids to find caller-org candidates for",
|
|
1441
|
+
"items": {
|
|
1442
|
+
"type": "string"
|
|
1443
|
+
},
|
|
1444
|
+
"minItems": 1,
|
|
1445
|
+
"maxItems": 25
|
|
1446
|
+
}
|
|
1447
|
+
},
|
|
1448
|
+
"required": [
|
|
1449
|
+
"source_org_id",
|
|
1450
|
+
"source_auth_token",
|
|
1451
|
+
"type",
|
|
1452
|
+
"source_ids"
|
|
1453
|
+
]
|
|
1454
|
+
},
|
|
1455
|
+
"MatchSuggestion": {
|
|
1456
|
+
"type": "object",
|
|
1457
|
+
"description": "Heuristic candidate for one source config (null candidate = no match)",
|
|
1458
|
+
"properties": {
|
|
1459
|
+
"source_id": {
|
|
1460
|
+
"type": "string"
|
|
1461
|
+
},
|
|
1462
|
+
"candidate": {
|
|
1463
|
+
"type": "object",
|
|
1464
|
+
"nullable": true,
|
|
1465
|
+
"properties": {
|
|
1466
|
+
"id": {
|
|
1467
|
+
"type": "string"
|
|
1468
|
+
},
|
|
1469
|
+
"title": {
|
|
1470
|
+
"type": "string"
|
|
1471
|
+
}
|
|
1472
|
+
},
|
|
1473
|
+
"required": [
|
|
1474
|
+
"id"
|
|
1475
|
+
]
|
|
1476
|
+
}
|
|
1477
|
+
},
|
|
1478
|
+
"required": [
|
|
1479
|
+
"source_id"
|
|
1480
|
+
]
|
|
1481
|
+
},
|
|
1482
|
+
"SuggestMatchesResponse": {
|
|
1483
|
+
"type": "object",
|
|
1484
|
+
"properties": {
|
|
1485
|
+
"type": {
|
|
1486
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
1487
|
+
},
|
|
1488
|
+
"suggestions": {
|
|
1489
|
+
"type": "array",
|
|
1490
|
+
"items": {
|
|
1491
|
+
"$ref": "#/components/schemas/MatchSuggestion"
|
|
1492
|
+
}
|
|
1493
|
+
}
|
|
1494
|
+
},
|
|
1495
|
+
"required": [
|
|
1496
|
+
"type",
|
|
1497
|
+
"suggestions"
|
|
1498
|
+
]
|
|
1499
|
+
},
|
|
1500
|
+
"ConfirmLineageRequest": {
|
|
1501
|
+
"type": "object",
|
|
1502
|
+
"description": "Persist a source→target lineage pairing (caller org as target)",
|
|
1503
|
+
"properties": {
|
|
1504
|
+
"type": {
|
|
1505
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
1506
|
+
},
|
|
1507
|
+
"source_org_id": {
|
|
1508
|
+
"type": "string"
|
|
1509
|
+
},
|
|
1510
|
+
"source_id": {
|
|
1511
|
+
"type": "string",
|
|
1512
|
+
"description": "Config id in the source org"
|
|
1513
|
+
},
|
|
1514
|
+
"target_id": {
|
|
1515
|
+
"type": "string",
|
|
1516
|
+
"description": "Config id in the caller's org to pair it with"
|
|
1517
|
+
}
|
|
1518
|
+
},
|
|
1519
|
+
"required": [
|
|
1520
|
+
"type",
|
|
1521
|
+
"source_org_id",
|
|
1522
|
+
"source_id",
|
|
1523
|
+
"target_id"
|
|
1524
|
+
]
|
|
1525
|
+
},
|
|
1526
|
+
"LineageEntryResponse": {
|
|
1527
|
+
"type": "object",
|
|
1528
|
+
"description": "A persisted lineage entry",
|
|
1529
|
+
"properties": {
|
|
1530
|
+
"type": {
|
|
1531
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
1532
|
+
},
|
|
1533
|
+
"target_org_id": {
|
|
1534
|
+
"type": "string"
|
|
1535
|
+
},
|
|
1536
|
+
"source_org_id": {
|
|
1537
|
+
"type": "string"
|
|
1538
|
+
},
|
|
1539
|
+
"source_id": {
|
|
1540
|
+
"type": "string"
|
|
1541
|
+
},
|
|
1542
|
+
"target_id": {
|
|
1543
|
+
"type": "string"
|
|
1544
|
+
},
|
|
1545
|
+
"last_synced_at": {
|
|
1546
|
+
"type": "string",
|
|
1547
|
+
"format": "date-time"
|
|
1548
|
+
},
|
|
1549
|
+
"origin": {
|
|
1550
|
+
"type": "string"
|
|
1551
|
+
}
|
|
1552
|
+
},
|
|
1553
|
+
"required": [
|
|
1554
|
+
"type",
|
|
1555
|
+
"target_org_id",
|
|
1556
|
+
"source_org_id",
|
|
1557
|
+
"source_id",
|
|
1558
|
+
"target_id"
|
|
813
1559
|
]
|
|
814
1560
|
},
|
|
815
|
-
"
|
|
1561
|
+
"BreakLineageResponse": {
|
|
816
1562
|
"type": "object",
|
|
817
|
-
"description": "Current index build state",
|
|
818
1563
|
"properties": {
|
|
819
|
-
"
|
|
820
|
-
"type": "
|
|
821
|
-
"enum": [
|
|
822
|
-
"missing",
|
|
823
|
-
"building",
|
|
824
|
-
"ready",
|
|
825
|
-
"failed"
|
|
826
|
-
]
|
|
827
|
-
},
|
|
828
|
-
"last_built_at": {
|
|
829
|
-
"type": "string",
|
|
830
|
-
"format": "date-time"
|
|
831
|
-
},
|
|
832
|
-
"total_items": {
|
|
833
|
-
"type": "integer"
|
|
834
|
-
},
|
|
835
|
-
"build_duration_ms": {
|
|
836
|
-
"type": "integer"
|
|
1564
|
+
"deleted": {
|
|
1565
|
+
"type": "boolean"
|
|
837
1566
|
}
|
|
838
1567
|
},
|
|
839
1568
|
"required": [
|
|
840
|
-
"
|
|
1569
|
+
"deleted"
|
|
841
1570
|
]
|
|
842
1571
|
},
|
|
843
1572
|
"ErrorResponse": {
|
|
@@ -964,7 +1693,7 @@
|
|
|
964
1693
|
},
|
|
965
1694
|
"SyncJobRetryRequest": {
|
|
966
1695
|
"type": "object",
|
|
967
|
-
"description": "Optional body for `retrySyncJob`. Defaults to retrying every
|
|
1696
|
+
"description": "Optional body for `retrySyncJob`. Defaults to retrying every unresolved\nresource of the original job (failed, pending or in_progress).\n",
|
|
968
1697
|
"properties": {
|
|
969
1698
|
"payload_overrides": {
|
|
970
1699
|
"type": "object",
|
|
@@ -1185,6 +1914,10 @@
|
|
|
1185
1914
|
"target_id": {
|
|
1186
1915
|
"type": "string"
|
|
1187
1916
|
},
|
|
1917
|
+
"title": {
|
|
1918
|
+
"type": "string",
|
|
1919
|
+
"description": "Human-readable resource title captured from the source payload\nduring Phase 0. Lets clients identify rows without resolving\nraw UUIDs. Absent on rows written before this field existed.\n"
|
|
1920
|
+
},
|
|
1188
1921
|
"status": {
|
|
1189
1922
|
"$ref": "#/components/schemas/SyncJobResourceStatus"
|
|
1190
1923
|
},
|
|
@@ -1228,6 +1961,289 @@
|
|
|
1228
1961
|
"required": [
|
|
1229
1962
|
"results"
|
|
1230
1963
|
]
|
|
1964
|
+
},
|
|
1965
|
+
"DeleteJobStatus": {
|
|
1966
|
+
"type": "string",
|
|
1967
|
+
"description": "Lifecycle status of a bulk-delete job.",
|
|
1968
|
+
"enum": [
|
|
1969
|
+
"pending",
|
|
1970
|
+
"in_progress",
|
|
1971
|
+
"succeeded",
|
|
1972
|
+
"partial",
|
|
1973
|
+
"failed",
|
|
1974
|
+
"cancelled"
|
|
1975
|
+
]
|
|
1976
|
+
},
|
|
1977
|
+
"DeleteJobResourceStatus": {
|
|
1978
|
+
"type": "string",
|
|
1979
|
+
"description": "Per-resource delete status. `skipped` is used for protected resources\nthat are intentionally not deleted (e.g. built-in schemas).\n",
|
|
1980
|
+
"enum": [
|
|
1981
|
+
"pending",
|
|
1982
|
+
"in_progress",
|
|
1983
|
+
"deleted",
|
|
1984
|
+
"skipped",
|
|
1985
|
+
"failed"
|
|
1986
|
+
]
|
|
1987
|
+
},
|
|
1988
|
+
"DeleteJobCounts": {
|
|
1989
|
+
"type": "object",
|
|
1990
|
+
"description": "Aggregate counters by resource delete status.",
|
|
1991
|
+
"properties": {
|
|
1992
|
+
"total": {
|
|
1993
|
+
"type": "integer"
|
|
1994
|
+
},
|
|
1995
|
+
"pending": {
|
|
1996
|
+
"type": "integer"
|
|
1997
|
+
},
|
|
1998
|
+
"in_progress": {
|
|
1999
|
+
"type": "integer"
|
|
2000
|
+
},
|
|
2001
|
+
"deleted": {
|
|
2002
|
+
"type": "integer"
|
|
2003
|
+
},
|
|
2004
|
+
"skipped": {
|
|
2005
|
+
"type": "integer"
|
|
2006
|
+
},
|
|
2007
|
+
"failed": {
|
|
2008
|
+
"type": "integer"
|
|
2009
|
+
}
|
|
2010
|
+
},
|
|
2011
|
+
"required": [
|
|
2012
|
+
"total",
|
|
2013
|
+
"pending",
|
|
2014
|
+
"in_progress",
|
|
2015
|
+
"deleted",
|
|
2016
|
+
"skipped",
|
|
2017
|
+
"failed"
|
|
2018
|
+
]
|
|
2019
|
+
},
|
|
2020
|
+
"DeleteJobRequest": {
|
|
2021
|
+
"type": "object",
|
|
2022
|
+
"description": "Request body for `createDeleteJob`.",
|
|
2023
|
+
"required": [
|
|
2024
|
+
"resources"
|
|
2025
|
+
],
|
|
2026
|
+
"properties": {
|
|
2027
|
+
"name": {
|
|
2028
|
+
"type": "string",
|
|
2029
|
+
"description": "Optional human-friendly job name shown in the history list."
|
|
2030
|
+
},
|
|
2031
|
+
"resources": {
|
|
2032
|
+
"type": "array",
|
|
2033
|
+
"description": "The resources to delete, by type + id.",
|
|
2034
|
+
"minItems": 1,
|
|
2035
|
+
"items": {
|
|
2036
|
+
"type": "object",
|
|
2037
|
+
"required": [
|
|
2038
|
+
"type",
|
|
2039
|
+
"id"
|
|
2040
|
+
],
|
|
2041
|
+
"properties": {
|
|
2042
|
+
"type": {
|
|
2043
|
+
"type": "string",
|
|
2044
|
+
"description": "Resource type identifier"
|
|
2045
|
+
},
|
|
2046
|
+
"id": {
|
|
2047
|
+
"type": "string",
|
|
2048
|
+
"description": "Resource ID"
|
|
2049
|
+
},
|
|
2050
|
+
"title": {
|
|
2051
|
+
"type": "string",
|
|
2052
|
+
"description": "Optional human-readable title captured for the failures view."
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
}
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
2058
|
+
},
|
|
2059
|
+
"DeleteJob": {
|
|
2060
|
+
"type": "object",
|
|
2061
|
+
"description": "Bulk-delete job header surfaced by `createDeleteJob`/`getDeleteJob`.",
|
|
2062
|
+
"properties": {
|
|
2063
|
+
"id": {
|
|
2064
|
+
"type": "string"
|
|
2065
|
+
},
|
|
2066
|
+
"name": {
|
|
2067
|
+
"type": "string"
|
|
2068
|
+
},
|
|
2069
|
+
"status": {
|
|
2070
|
+
"$ref": "#/components/schemas/DeleteJobStatus"
|
|
2071
|
+
},
|
|
2072
|
+
"org_id": {
|
|
2073
|
+
"type": "string"
|
|
2074
|
+
},
|
|
2075
|
+
"counts": {
|
|
2076
|
+
"$ref": "#/components/schemas/DeleteJobCounts"
|
|
2077
|
+
},
|
|
2078
|
+
"started_at": {
|
|
2079
|
+
"type": "string",
|
|
2080
|
+
"format": "date-time"
|
|
2081
|
+
},
|
|
2082
|
+
"finished_at": {
|
|
2083
|
+
"type": "string",
|
|
2084
|
+
"format": "date-time"
|
|
2085
|
+
},
|
|
2086
|
+
"rebuild_triggered": {
|
|
2087
|
+
"type": "boolean",
|
|
2088
|
+
"description": "True once the worker has kicked the index rebuild on completion."
|
|
2089
|
+
}
|
|
2090
|
+
},
|
|
2091
|
+
"required": [
|
|
2092
|
+
"id",
|
|
2093
|
+
"status",
|
|
2094
|
+
"org_id",
|
|
2095
|
+
"counts",
|
|
2096
|
+
"started_at"
|
|
2097
|
+
]
|
|
2098
|
+
},
|
|
2099
|
+
"DeleteJobListResponse": {
|
|
2100
|
+
"type": "object",
|
|
2101
|
+
"description": "Cursor-paginated list of delete jobs.",
|
|
2102
|
+
"properties": {
|
|
2103
|
+
"next_cursor": {
|
|
2104
|
+
"type": "string"
|
|
2105
|
+
},
|
|
2106
|
+
"results": {
|
|
2107
|
+
"type": "array",
|
|
2108
|
+
"items": {
|
|
2109
|
+
"$ref": "#/components/schemas/DeleteJob"
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2112
|
+
},
|
|
2113
|
+
"required": [
|
|
2114
|
+
"results"
|
|
2115
|
+
]
|
|
2116
|
+
},
|
|
2117
|
+
"DeleteJobResource": {
|
|
2118
|
+
"type": "object",
|
|
2119
|
+
"description": "Per-resource row for a delete job.",
|
|
2120
|
+
"properties": {
|
|
2121
|
+
"type": {
|
|
2122
|
+
"type": "string"
|
|
2123
|
+
},
|
|
2124
|
+
"id": {
|
|
2125
|
+
"type": "string"
|
|
2126
|
+
},
|
|
2127
|
+
"title": {
|
|
2128
|
+
"type": "string"
|
|
2129
|
+
},
|
|
2130
|
+
"status": {
|
|
2131
|
+
"$ref": "#/components/schemas/DeleteJobResourceStatus"
|
|
2132
|
+
},
|
|
2133
|
+
"attempt": {
|
|
2134
|
+
"type": "integer"
|
|
2135
|
+
},
|
|
2136
|
+
"error": {
|
|
2137
|
+
"type": "string"
|
|
2138
|
+
},
|
|
2139
|
+
"updated_at": {
|
|
2140
|
+
"type": "string",
|
|
2141
|
+
"format": "date-time"
|
|
2142
|
+
}
|
|
2143
|
+
},
|
|
2144
|
+
"required": [
|
|
2145
|
+
"type",
|
|
2146
|
+
"id",
|
|
2147
|
+
"status",
|
|
2148
|
+
"attempt",
|
|
2149
|
+
"updated_at"
|
|
2150
|
+
]
|
|
2151
|
+
},
|
|
2152
|
+
"DeleteJobResourceListResponse": {
|
|
2153
|
+
"type": "object",
|
|
2154
|
+
"description": "Cursor-paginated list of delete job resources.",
|
|
2155
|
+
"properties": {
|
|
2156
|
+
"next_cursor": {
|
|
2157
|
+
"type": "string"
|
|
2158
|
+
},
|
|
2159
|
+
"results": {
|
|
2160
|
+
"type": "array",
|
|
2161
|
+
"items": {
|
|
2162
|
+
"$ref": "#/components/schemas/DeleteJobResource"
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
},
|
|
2166
|
+
"required": [
|
|
2167
|
+
"results"
|
|
2168
|
+
]
|
|
2169
|
+
},
|
|
2170
|
+
"SnapshotInventoryItem": {
|
|
2171
|
+
"type": "object",
|
|
2172
|
+
"description": "Minimal identity of a single configuration resource.",
|
|
2173
|
+
"properties": {
|
|
2174
|
+
"type": {
|
|
2175
|
+
"$ref": "#/components/schemas/ResourceType"
|
|
2176
|
+
},
|
|
2177
|
+
"id": {
|
|
2178
|
+
"type": "string",
|
|
2179
|
+
"description": "Unique identifier of the resource"
|
|
2180
|
+
}
|
|
2181
|
+
},
|
|
2182
|
+
"required": [
|
|
2183
|
+
"type",
|
|
2184
|
+
"id"
|
|
2185
|
+
]
|
|
2186
|
+
},
|
|
2187
|
+
"SnapshotInventorySkippedType": {
|
|
2188
|
+
"type": "object",
|
|
2189
|
+
"description": "A type that could not be listed during inventory collection.",
|
|
2190
|
+
"properties": {
|
|
2191
|
+
"type": {
|
|
2192
|
+
"type": "string"
|
|
2193
|
+
},
|
|
2194
|
+
"reason": {
|
|
2195
|
+
"type": "string"
|
|
2196
|
+
}
|
|
2197
|
+
},
|
|
2198
|
+
"required": [
|
|
2199
|
+
"type",
|
|
2200
|
+
"reason"
|
|
2201
|
+
]
|
|
2202
|
+
},
|
|
2203
|
+
"ConfigInventoryResponse": {
|
|
2204
|
+
"type": "object",
|
|
2205
|
+
"description": "Fresh inventory of all configuration resources for an org.",
|
|
2206
|
+
"properties": {
|
|
2207
|
+
"inventory_id": {
|
|
2208
|
+
"type": "string",
|
|
2209
|
+
"description": "Unique identifier for this inventory run (UUID)."
|
|
2210
|
+
},
|
|
2211
|
+
"org_id": {
|
|
2212
|
+
"type": "string",
|
|
2213
|
+
"description": "Organization ID the inventory was collected for."
|
|
2214
|
+
},
|
|
2215
|
+
"indexed_at": {
|
|
2216
|
+
"type": "string",
|
|
2217
|
+
"format": "date-time",
|
|
2218
|
+
"description": "ISO timestamp of when the inventory was collected."
|
|
2219
|
+
},
|
|
2220
|
+
"resources_count": {
|
|
2221
|
+
"type": "integer",
|
|
2222
|
+
"description": "Total number of resources found across all types."
|
|
2223
|
+
},
|
|
2224
|
+
"resources": {
|
|
2225
|
+
"type": "array",
|
|
2226
|
+
"description": "List of all found resources as `{ type, id }` pairs.",
|
|
2227
|
+
"items": {
|
|
2228
|
+
"$ref": "#/components/schemas/SnapshotInventoryItem"
|
|
2229
|
+
}
|
|
2230
|
+
},
|
|
2231
|
+
"skipped_types": {
|
|
2232
|
+
"type": "array",
|
|
2233
|
+
"description": "Types that failed to list or had no adapter; never fail the whole inventory.",
|
|
2234
|
+
"items": {
|
|
2235
|
+
"$ref": "#/components/schemas/SnapshotInventorySkippedType"
|
|
2236
|
+
}
|
|
2237
|
+
}
|
|
2238
|
+
},
|
|
2239
|
+
"required": [
|
|
2240
|
+
"inventory_id",
|
|
2241
|
+
"org_id",
|
|
2242
|
+
"indexed_at",
|
|
2243
|
+
"resources_count",
|
|
2244
|
+
"resources",
|
|
2245
|
+
"skipped_types"
|
|
2246
|
+
]
|
|
1231
2247
|
}
|
|
1232
2248
|
}
|
|
1233
2249
|
}
|