@epilot/cli 0.1.26 → 0.1.27
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 +539 -31
- package/definitions/automation.json +42 -0
- package/definitions/configuration-hub.json +757 -7
- package/definitions/customer-portal.json +1063 -63
- package/definitions/email-settings.json +86 -4
- package/definitions/entity.json +568 -4
- package/definitions/event-catalog.json +256 -1
- package/definitions/file.json +262 -4
- package/definitions/integration-toolkit.json +480 -4
- package/definitions/journey.json +21 -1
- package/definitions/kanban.json +2 -1
- package/definitions/metering.json +728 -64
- package/definitions/notes.json +175 -130
- package/definitions/pricing.json +163 -84
- package/definitions/webhooks.json +149 -4
- package/definitions/workflow-definition.json +52 -0
- package/definitions/workflow.json +24 -0
- package/dist/bin/epilot.js +6 -6
- package/dist/{chunk-QSYX2PUB.js → chunk-OBSR3RKB.js} +51 -15
- package/dist/{completion-AZYWK6IZ.js → completion-AUP6EFBO.js} +1 -1
- package/dist/{upgrade-O5G6HRVY.js → upgrade-PPGT4OMA.js} +1 -1
- package/package.json +1 -1
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
"openapi": "3.0.3",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "Configuration Hub API",
|
|
5
|
-
"description": "Lightweight index API for exploring epilot organization configurations.\n\nProvides a unified tree view across all config types. Returns summary metadata only —\nthe frontend calls individual epilot APIs directly (via @epilot/sdk) for full config payloads.\n\n## Source APIs per resource type\n\nEach resource type maps to a specific epilot API. The frontend should use the corresponding\n@epilot/sdk client to fetch full config details (e.g., for the side panel JSON view).\n\n| Resource Type | Source API | SDK Client |\n|---|---|---|\n| `journey` | journey.sls.epilot.io | `@epilot/sdk/journey` |\n| `automation_flow` | automation.sls.epilot.io | `@epilot/sdk/automation` |\n| `workflow_definition` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `closing_reason` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `flow_template` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `schema` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy_classification` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `emailtemplate` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `price` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `tax` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `coupon` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `file` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `webhook` | webhooks.sls.epilot.io | `@epilot/sdk/webhooks` |\n| `saved_view` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `dashboard` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `kanban` | kanban.sls.epilot.io | `@epilot/sdk/kanban` |\n| `role` | permissions.sls.epilot.io | `@epilot/sdk/permissions` |\n| `usergroup` | user.sls.epilot.io | `@epilot/sdk/user` |\n| `validation_rule` | entity.sls.epilot.io | `@epilot/sdk/validation-rules` |\n| `integration` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `app` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `designbuilder` |
|
|
5
|
+
"description": "Lightweight index API for exploring epilot organization configurations.\n\nProvides a unified tree view across all config types. Returns summary metadata only —\nthe frontend calls individual epilot APIs directly (via @epilot/sdk) for full config payloads.\n\n## Source APIs per resource type\n\nEach resource type maps to a specific epilot API. The frontend should use the corresponding\n@epilot/sdk client to fetch full config details (e.g., for the side panel JSON view).\n\n| Resource Type | Source API | SDK Client |\n|---|---|---|\n| `journey` | journey.sls.epilot.io | `@epilot/sdk/journey` |\n| `automation_flow` | automation.sls.epilot.io | `@epilot/sdk/automation` |\n| `workflow_definition` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `closing_reason` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `flow_template` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `schema` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy_classification` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `emailtemplate` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `price` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `tax` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `coupon` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `file` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `document_template` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `webhook` | webhooks.sls.epilot.io | `@epilot/sdk/webhooks` |\n| `saved_view` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `dashboard` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `kanban` | kanban.sls.epilot.io | `@epilot/sdk/kanban` |\n| `role` | permissions.sls.epilot.io | `@epilot/sdk/permissions` |\n| `usergroup` | user.sls.epilot.io | `@epilot/sdk/user` |\n| `validation_rule` | entity.sls.epilot.io | `@epilot/sdk/validation-rules` |\n| `integration` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `app` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `designbuilder` | design-builder-api.sls.epilot.io | `@epilot/sdk/design` |\n| `notification_template` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `custom_variable` | entity.sls.epilot.io | `@epilot/sdk/template-variables` |\n| `environment_variable` | environments.sls.epilot.io | `@epilot/sdk/environments` |\n| `entity_mapping` | entity-mapping.sls.epilot.io | `@epilot/sdk/entity-mapping` |\n| `portal_config` | customer-portal.sls.epilot.io | `@epilot/sdk/customer-portal` |\n| `target` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product_recommendation` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `access_token` | access-token.sls.epilot.io | `@epilot/sdk/access-token` |\n",
|
|
6
6
|
"version": "0.2.0"
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
10
10
|
"url": "https://configuration-hub.sls.epilot.io"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"url": "https://configuration-hub.dev.sls.epilot.io",
|
|
14
|
+
"description": "Dev"
|
|
11
15
|
}
|
|
12
16
|
],
|
|
13
17
|
"security": [
|
|
@@ -19,6 +23,10 @@
|
|
|
19
23
|
{
|
|
20
24
|
"name": "Configs",
|
|
21
25
|
"description": "Configuration tree index"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "Sync",
|
|
29
|
+
"description": "Cross-org configuration sync jobs"
|
|
22
30
|
}
|
|
23
31
|
],
|
|
24
32
|
"paths": {
|
|
@@ -106,6 +114,35 @@
|
|
|
106
114
|
"schema": {
|
|
107
115
|
"type": "string"
|
|
108
116
|
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "blueprint_ids",
|
|
120
|
+
"in": "query",
|
|
121
|
+
"description": "Filter by installed-blueprint IDs (comma-separated). Only configs installed by one of the listed blueprints are returned.",
|
|
122
|
+
"schema": {
|
|
123
|
+
"type": "string"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "sort",
|
|
128
|
+
"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",
|
|
130
|
+
"schema": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"enum": [
|
|
133
|
+
"updated_at",
|
|
134
|
+
"usage"
|
|
135
|
+
],
|
|
136
|
+
"default": "updated_at"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"name": "active_only",
|
|
141
|
+
"in": "query",
|
|
142
|
+
"description": "If true, filter out configs that are explicitly inactive (active=false).\nConfigs with no `active` field are always included.\n",
|
|
143
|
+
"schema": {
|
|
144
|
+
"type": "boolean"
|
|
145
|
+
}
|
|
109
146
|
}
|
|
110
147
|
],
|
|
111
148
|
"responses": {
|
|
@@ -178,13 +215,278 @@
|
|
|
178
215
|
}
|
|
179
216
|
}
|
|
180
217
|
},
|
|
181
|
-
"/v1/
|
|
218
|
+
"/v1/configs/{type}/{id}/used_by": {
|
|
219
|
+
"get": {
|
|
220
|
+
"operationId": "getConfigUsedBy",
|
|
221
|
+
"summary": "getConfigUsedBy",
|
|
222
|
+
"description": "Get configs that reference the given config (reverse dependencies).\nScans the indexed config items for references to this config's ID or aliases.\n",
|
|
223
|
+
"tags": [
|
|
224
|
+
"Configs"
|
|
225
|
+
],
|
|
226
|
+
"parameters": [
|
|
227
|
+
{
|
|
228
|
+
"$ref": "#/components/parameters/ConfigType"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"$ref": "#/components/parameters/ConfigId"
|
|
232
|
+
}
|
|
233
|
+
],
|
|
234
|
+
"responses": {
|
|
235
|
+
"200": {
|
|
236
|
+
"description": "List of configs that reference this config",
|
|
237
|
+
"content": {
|
|
238
|
+
"application/json": {
|
|
239
|
+
"schema": {
|
|
240
|
+
"$ref": "#/components/schemas/ConfigDependenciesResponse"
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"/v1/configs/index": {
|
|
249
|
+
"get": {
|
|
250
|
+
"operationId": "getIndex",
|
|
251
|
+
"summary": "getIndex",
|
|
252
|
+
"description": "Return the current index build state for the caller's organization.\nClients poll this to decide whether to show a \"building\" indicator\nand when to refetch data.\n",
|
|
253
|
+
"tags": [
|
|
254
|
+
"Configs"
|
|
255
|
+
],
|
|
256
|
+
"responses": {
|
|
257
|
+
"200": {
|
|
258
|
+
"description": "Current index status",
|
|
259
|
+
"content": {
|
|
260
|
+
"application/json": {
|
|
261
|
+
"schema": {
|
|
262
|
+
"$ref": "#/components/schemas/IndexStatusResponse"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
"/v1/configs/sync-jobs": {
|
|
271
|
+
"post": {
|
|
272
|
+
"operationId": "createSyncJob",
|
|
273
|
+
"summary": "createSyncJob",
|
|
274
|
+
"description": "Create a new cross-org sync job. The job is enqueued for asynchronous execution\nby the worker Lambda; the response returns the persisted job header with status\n`pending`.\n\nSee `docs/sync/INTERFACES.md` for the locked request/response contract.\n",
|
|
275
|
+
"tags": [
|
|
276
|
+
"Sync"
|
|
277
|
+
],
|
|
278
|
+
"requestBody": {
|
|
279
|
+
"required": true,
|
|
280
|
+
"content": {
|
|
281
|
+
"application/json": {
|
|
282
|
+
"schema": {
|
|
283
|
+
"$ref": "#/components/schemas/SyncJobRequest"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"responses": {
|
|
289
|
+
"201": {
|
|
290
|
+
"description": "Sync job accepted",
|
|
291
|
+
"content": {
|
|
292
|
+
"application/json": {
|
|
293
|
+
"schema": {
|
|
294
|
+
"$ref": "#/components/schemas/SyncJob"
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
"400": {
|
|
300
|
+
"description": "Invalid request body",
|
|
301
|
+
"content": {
|
|
302
|
+
"application/json": {
|
|
303
|
+
"schema": {
|
|
304
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
"get": {
|
|
312
|
+
"operationId": "listSyncJobs",
|
|
313
|
+
"summary": "listSyncJobs",
|
|
314
|
+
"description": "List sync jobs scoped to the caller's organization, paginated with an opaque\ncursor. Defaults to most-recent first.\n",
|
|
315
|
+
"tags": [
|
|
316
|
+
"Sync"
|
|
317
|
+
],
|
|
318
|
+
"parameters": [
|
|
319
|
+
{
|
|
320
|
+
"$ref": "#/components/parameters/CursorParam"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"$ref": "#/components/parameters/SizeParam"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"name": "status",
|
|
327
|
+
"in": "query",
|
|
328
|
+
"description": "Filter jobs by status",
|
|
329
|
+
"schema": {
|
|
330
|
+
"$ref": "#/components/schemas/SyncJobStatus"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
],
|
|
334
|
+
"responses": {
|
|
335
|
+
"200": {
|
|
336
|
+
"description": "Paginated sync jobs",
|
|
337
|
+
"content": {
|
|
338
|
+
"application/json": {
|
|
339
|
+
"schema": {
|
|
340
|
+
"$ref": "#/components/schemas/SyncJobListResponse"
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"/v1/configs/sync-jobs/{id}": {
|
|
349
|
+
"get": {
|
|
350
|
+
"operationId": "getSyncJob",
|
|
351
|
+
"summary": "getSyncJob",
|
|
352
|
+
"description": "Fetch a single sync job by ID. Returns the job header, counts summary,\ncurrent phase pointer, and the latest activity events. Frontend polls this\nendpoint with a ramping interval.\n",
|
|
353
|
+
"tags": [
|
|
354
|
+
"Sync"
|
|
355
|
+
],
|
|
356
|
+
"parameters": [
|
|
357
|
+
{
|
|
358
|
+
"$ref": "#/components/parameters/SyncJobId"
|
|
359
|
+
}
|
|
360
|
+
],
|
|
361
|
+
"responses": {
|
|
362
|
+
"200": {
|
|
363
|
+
"description": "Sync job detail",
|
|
364
|
+
"content": {
|
|
365
|
+
"application/json": {
|
|
366
|
+
"schema": {
|
|
367
|
+
"$ref": "#/components/schemas/SyncJob"
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
"404": {
|
|
373
|
+
"description": "Sync job not found",
|
|
374
|
+
"content": {
|
|
375
|
+
"application/json": {
|
|
376
|
+
"schema": {
|
|
377
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"/v1/configs/sync-jobs/{id}/retry": {
|
|
386
|
+
"post": {
|
|
387
|
+
"operationId": "retrySyncJob",
|
|
388
|
+
"summary": "retrySyncJob",
|
|
389
|
+
"description": "Retry the failed resources from a prior sync job. Creates a new job whose\nscope is the failed `(type, source_id)` set of the original job and enqueues\nit for execution. Optionally accepts inline payload overrides.\n",
|
|
390
|
+
"tags": [
|
|
391
|
+
"Sync"
|
|
392
|
+
],
|
|
393
|
+
"parameters": [
|
|
394
|
+
{
|
|
395
|
+
"$ref": "#/components/parameters/SyncJobId"
|
|
396
|
+
}
|
|
397
|
+
],
|
|
398
|
+
"requestBody": {
|
|
399
|
+
"required": false,
|
|
400
|
+
"content": {
|
|
401
|
+
"application/json": {
|
|
402
|
+
"schema": {
|
|
403
|
+
"$ref": "#/components/schemas/SyncJobRetryRequest"
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
"responses": {
|
|
409
|
+
"201": {
|
|
410
|
+
"description": "Retry job accepted",
|
|
411
|
+
"content": {
|
|
412
|
+
"application/json": {
|
|
413
|
+
"schema": {
|
|
414
|
+
"$ref": "#/components/schemas/SyncJob"
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
"404": {
|
|
420
|
+
"description": "Sync job not found",
|
|
421
|
+
"content": {
|
|
422
|
+
"application/json": {
|
|
423
|
+
"schema": {
|
|
424
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
"/v1/configs/sync-jobs/{id}/resources": {
|
|
433
|
+
"get": {
|
|
434
|
+
"operationId": "listSyncJobResources",
|
|
435
|
+
"summary": "listSyncJobResources",
|
|
436
|
+
"description": "List the per-resource rows for a sync job. Supports filtering by status\n(e.g. `failed`) and cursor pagination. Used by the failures table and the\ndry-run plan view in the frontend.\n",
|
|
437
|
+
"tags": [
|
|
438
|
+
"Sync"
|
|
439
|
+
],
|
|
440
|
+
"parameters": [
|
|
441
|
+
{
|
|
442
|
+
"$ref": "#/components/parameters/SyncJobId"
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"$ref": "#/components/parameters/CursorParam"
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"$ref": "#/components/parameters/SizeParam"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"name": "status",
|
|
452
|
+
"in": "query",
|
|
453
|
+
"description": "Filter resources by status",
|
|
454
|
+
"schema": {
|
|
455
|
+
"$ref": "#/components/schemas/SyncJobResourceStatus"
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
],
|
|
459
|
+
"responses": {
|
|
460
|
+
"200": {
|
|
461
|
+
"description": "Paginated sync job resources",
|
|
462
|
+
"content": {
|
|
463
|
+
"application/json": {
|
|
464
|
+
"schema": {
|
|
465
|
+
"$ref": "#/components/schemas/SyncJobResourceListResponse"
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
"404": {
|
|
471
|
+
"description": "Sync job not found",
|
|
472
|
+
"content": {
|
|
473
|
+
"application/json": {
|
|
474
|
+
"schema": {
|
|
475
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
},
|
|
483
|
+
"/v1/configs/index:rebuild": {
|
|
182
484
|
"post": {
|
|
183
485
|
"operationId": "rebuildIndex",
|
|
184
486
|
"summary": "rebuildIndex",
|
|
185
|
-
"description": "Rebuild the configuration index for the caller's organization.\
|
|
487
|
+
"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",
|
|
186
488
|
"tags": [
|
|
187
|
-
"
|
|
489
|
+
"Configs"
|
|
188
490
|
],
|
|
189
491
|
"responses": {
|
|
190
492
|
"200": {
|
|
@@ -246,6 +548,15 @@
|
|
|
246
548
|
"minimum": 1,
|
|
247
549
|
"maximum": 100
|
|
248
550
|
}
|
|
551
|
+
},
|
|
552
|
+
"SyncJobId": {
|
|
553
|
+
"name": "id",
|
|
554
|
+
"in": "path",
|
|
555
|
+
"required": true,
|
|
556
|
+
"description": "Sync job ID",
|
|
557
|
+
"schema": {
|
|
558
|
+
"type": "string"
|
|
559
|
+
}
|
|
249
560
|
}
|
|
250
561
|
},
|
|
251
562
|
"schemas": {
|
|
@@ -265,6 +576,7 @@
|
|
|
265
576
|
"tax",
|
|
266
577
|
"coupon",
|
|
267
578
|
"file",
|
|
579
|
+
"document_template",
|
|
268
580
|
"webhook",
|
|
269
581
|
"saved_view",
|
|
270
582
|
"dashboard",
|
|
@@ -283,7 +595,8 @@
|
|
|
283
595
|
"entity_mapping",
|
|
284
596
|
"portal_config",
|
|
285
597
|
"target",
|
|
286
|
-
"product_recommendation"
|
|
598
|
+
"product_recommendation",
|
|
599
|
+
"access_token"
|
|
287
600
|
]
|
|
288
601
|
},
|
|
289
602
|
"ConfigTypeInfo": {
|
|
@@ -353,6 +666,13 @@
|
|
|
353
666
|
},
|
|
354
667
|
"description": "Tags / labels"
|
|
355
668
|
},
|
|
669
|
+
"aliases": {
|
|
670
|
+
"type": "array",
|
|
671
|
+
"items": {
|
|
672
|
+
"type": "string"
|
|
673
|
+
},
|
|
674
|
+
"description": "Alternative identifiers (short IDs, slugs, variable keys) used in cross-references"
|
|
675
|
+
},
|
|
356
676
|
"purposes": {
|
|
357
677
|
"type": "array",
|
|
358
678
|
"items": {
|
|
@@ -364,6 +684,34 @@
|
|
|
364
684
|
"type": "string",
|
|
365
685
|
"format": "uri",
|
|
366
686
|
"description": "Direct link to open this config in epilot"
|
|
687
|
+
},
|
|
688
|
+
"active": {
|
|
689
|
+
"type": "boolean",
|
|
690
|
+
"description": "Whether this config is currently active/enabled (omitted when not applicable)"
|
|
691
|
+
},
|
|
692
|
+
"blueprints": {
|
|
693
|
+
"type": "array",
|
|
694
|
+
"description": "Installed blueprints that produced this config (tagged during the rebuild lineage pass)",
|
|
695
|
+
"items": {
|
|
696
|
+
"type": "object",
|
|
697
|
+
"properties": {
|
|
698
|
+
"id": {
|
|
699
|
+
"type": "string"
|
|
700
|
+
},
|
|
701
|
+
"title": {
|
|
702
|
+
"type": "string"
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
"required": [
|
|
706
|
+
"id",
|
|
707
|
+
"title"
|
|
708
|
+
]
|
|
709
|
+
}
|
|
710
|
+
},
|
|
711
|
+
"metadata": {
|
|
712
|
+
"type": "object",
|
|
713
|
+
"description": "Type-specific metadata (e.g., submission count for journeys)",
|
|
714
|
+
"additionalProperties": true
|
|
367
715
|
}
|
|
368
716
|
},
|
|
369
717
|
"required": [
|
|
@@ -393,7 +741,7 @@
|
|
|
393
741
|
"type": "string",
|
|
394
742
|
"description": "Cursor for fetching the next page. Absent when no more pages."
|
|
395
743
|
},
|
|
396
|
-
"
|
|
744
|
+
"results": {
|
|
397
745
|
"type": "array",
|
|
398
746
|
"items": {
|
|
399
747
|
"$ref": "#/components/schemas/ConfigNode"
|
|
@@ -404,7 +752,7 @@
|
|
|
404
752
|
"type",
|
|
405
753
|
"label",
|
|
406
754
|
"icon",
|
|
407
|
-
"
|
|
755
|
+
"results"
|
|
408
756
|
]
|
|
409
757
|
},
|
|
410
758
|
"ConfigDependenciesResponse": {
|
|
@@ -464,6 +812,34 @@
|
|
|
464
812
|
"status"
|
|
465
813
|
]
|
|
466
814
|
},
|
|
815
|
+
"IndexStatusResponse": {
|
|
816
|
+
"type": "object",
|
|
817
|
+
"description": "Current index build state",
|
|
818
|
+
"properties": {
|
|
819
|
+
"status": {
|
|
820
|
+
"type": "string",
|
|
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"
|
|
837
|
+
}
|
|
838
|
+
},
|
|
839
|
+
"required": [
|
|
840
|
+
"status"
|
|
841
|
+
]
|
|
842
|
+
},
|
|
467
843
|
"ErrorResponse": {
|
|
468
844
|
"type": "object",
|
|
469
845
|
"properties": {
|
|
@@ -478,6 +854,380 @@
|
|
|
478
854
|
"status",
|
|
479
855
|
"error"
|
|
480
856
|
]
|
|
857
|
+
},
|
|
858
|
+
"SyncJobStatus": {
|
|
859
|
+
"type": "string",
|
|
860
|
+
"description": "Lifecycle status of a sync job. See `docs/sync/INTERFACES.md` for state\ntransitions.\n",
|
|
861
|
+
"enum": [
|
|
862
|
+
"pending",
|
|
863
|
+
"in_progress",
|
|
864
|
+
"succeeded",
|
|
865
|
+
"partial",
|
|
866
|
+
"failed",
|
|
867
|
+
"cancelled"
|
|
868
|
+
]
|
|
869
|
+
},
|
|
870
|
+
"SyncDirection": {
|
|
871
|
+
"type": "string",
|
|
872
|
+
"description": "Direction of the sync, derived from the source/target pane selection in the\nconfiguration hub UI.\n",
|
|
873
|
+
"enum": [
|
|
874
|
+
"push",
|
|
875
|
+
"pull"
|
|
876
|
+
]
|
|
877
|
+
},
|
|
878
|
+
"SyncPhase": {
|
|
879
|
+
"type": "string",
|
|
880
|
+
"description": "Three-phase orchestrator phase. `phase_0` fetches source payloads,\n`phase_a` creates/matches with topological batches, `phase_a5` resolves\nderived references, `phase_b` patches with the full ID map, `finalize`\nruns cycle-breaking finalizers.\n",
|
|
881
|
+
"enum": [
|
|
882
|
+
"phase_0",
|
|
883
|
+
"phase_a",
|
|
884
|
+
"phase_a5",
|
|
885
|
+
"phase_b",
|
|
886
|
+
"finalize"
|
|
887
|
+
]
|
|
888
|
+
},
|
|
889
|
+
"SyncJobResourceStatus": {
|
|
890
|
+
"type": "string",
|
|
891
|
+
"description": "Per-resource status. `would_*` values are produced by dry-run jobs.\n",
|
|
892
|
+
"enum": [
|
|
893
|
+
"pending",
|
|
894
|
+
"in_progress",
|
|
895
|
+
"created",
|
|
896
|
+
"patched",
|
|
897
|
+
"skipped",
|
|
898
|
+
"would_create",
|
|
899
|
+
"would_patch",
|
|
900
|
+
"would_skip_unchanged",
|
|
901
|
+
"would_match_heuristic",
|
|
902
|
+
"failed"
|
|
903
|
+
]
|
|
904
|
+
},
|
|
905
|
+
"SyncJobRequest": {
|
|
906
|
+
"type": "object",
|
|
907
|
+
"description": "Request body for `createSyncJob`. `target_auth_token` is the destination\norg's auth token and MUST NOT be persisted or logged — it is `writeOnly`.\n",
|
|
908
|
+
"required": [
|
|
909
|
+
"source_org_id",
|
|
910
|
+
"target_org_id",
|
|
911
|
+
"target_auth_token",
|
|
912
|
+
"resources"
|
|
913
|
+
],
|
|
914
|
+
"properties": {
|
|
915
|
+
"source_org_id": {
|
|
916
|
+
"type": "string",
|
|
917
|
+
"description": "Org ID the resources are sourced from."
|
|
918
|
+
},
|
|
919
|
+
"target_org_id": {
|
|
920
|
+
"type": "string",
|
|
921
|
+
"description": "Org ID the resources are written into."
|
|
922
|
+
},
|
|
923
|
+
"target_auth_token": {
|
|
924
|
+
"type": "string",
|
|
925
|
+
"writeOnly": true,
|
|
926
|
+
"description": "Destination-org auth token forwarded to adapter writes. Never returned\nin responses and never logged.\n"
|
|
927
|
+
},
|
|
928
|
+
"name": {
|
|
929
|
+
"type": "string",
|
|
930
|
+
"description": "Optional human-friendly job name shown in the history list."
|
|
931
|
+
},
|
|
932
|
+
"dry_run": {
|
|
933
|
+
"type": "boolean",
|
|
934
|
+
"default": false,
|
|
935
|
+
"description": "If true, the orchestrator runs Phase 0 + a planning pass and writes\n`would_*` resource rows but performs no destination writes.\n"
|
|
936
|
+
},
|
|
937
|
+
"include_dependencies": {
|
|
938
|
+
"type": "boolean",
|
|
939
|
+
"default": true,
|
|
940
|
+
"description": "If true, the orchestrator expands the resource set by following\ndependency edges discovered during Phase 0.\n"
|
|
941
|
+
},
|
|
942
|
+
"resources": {
|
|
943
|
+
"type": "array",
|
|
944
|
+
"description": "Initial resource selection. Dependencies may be added.",
|
|
945
|
+
"items": {
|
|
946
|
+
"type": "object",
|
|
947
|
+
"required": [
|
|
948
|
+
"type",
|
|
949
|
+
"id"
|
|
950
|
+
],
|
|
951
|
+
"properties": {
|
|
952
|
+
"type": {
|
|
953
|
+
"type": "string",
|
|
954
|
+
"description": "Resource type identifier"
|
|
955
|
+
},
|
|
956
|
+
"id": {
|
|
957
|
+
"type": "string",
|
|
958
|
+
"description": "Source-org resource ID"
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
},
|
|
965
|
+
"SyncJobRetryRequest": {
|
|
966
|
+
"type": "object",
|
|
967
|
+
"description": "Optional body for `retrySyncJob`. Defaults to retrying every failed\nresource of the original job.\n",
|
|
968
|
+
"properties": {
|
|
969
|
+
"payload_overrides": {
|
|
970
|
+
"type": "object",
|
|
971
|
+
"description": "Map of `<type>:<source_id>` → partial payload patch. Applied on top of\nthe originally fetched payload before re-running Phase A.\n",
|
|
972
|
+
"additionalProperties": true
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
},
|
|
976
|
+
"SyncJobCounts": {
|
|
977
|
+
"type": "object",
|
|
978
|
+
"description": "Aggregate counters by resource status.",
|
|
979
|
+
"properties": {
|
|
980
|
+
"total": {
|
|
981
|
+
"type": "integer"
|
|
982
|
+
},
|
|
983
|
+
"pending": {
|
|
984
|
+
"type": "integer"
|
|
985
|
+
},
|
|
986
|
+
"in_progress": {
|
|
987
|
+
"type": "integer"
|
|
988
|
+
},
|
|
989
|
+
"succeeded": {
|
|
990
|
+
"type": "integer"
|
|
991
|
+
},
|
|
992
|
+
"failed": {
|
|
993
|
+
"type": "integer"
|
|
994
|
+
},
|
|
995
|
+
"skipped_unchanged": {
|
|
996
|
+
"type": "integer"
|
|
997
|
+
}
|
|
998
|
+
},
|
|
999
|
+
"required": [
|
|
1000
|
+
"total",
|
|
1001
|
+
"pending",
|
|
1002
|
+
"in_progress",
|
|
1003
|
+
"succeeded",
|
|
1004
|
+
"failed",
|
|
1005
|
+
"skipped_unchanged"
|
|
1006
|
+
]
|
|
1007
|
+
},
|
|
1008
|
+
"SyncJobEvent": {
|
|
1009
|
+
"type": "object",
|
|
1010
|
+
"description": "Activity-log entry surfaced to the frontend. Backed by the op-log rows in\nthe index table (`SYNC#<jobId>#OP#<seq>`).\n",
|
|
1011
|
+
"properties": {
|
|
1012
|
+
"seq": {
|
|
1013
|
+
"type": "integer",
|
|
1014
|
+
"description": "Monotonic sequence number assigned at write time."
|
|
1015
|
+
},
|
|
1016
|
+
"ts": {
|
|
1017
|
+
"type": "string",
|
|
1018
|
+
"format": "date-time"
|
|
1019
|
+
},
|
|
1020
|
+
"phase": {
|
|
1021
|
+
"$ref": "#/components/schemas/SyncPhase"
|
|
1022
|
+
},
|
|
1023
|
+
"type": {
|
|
1024
|
+
"type": "string",
|
|
1025
|
+
"description": "Resource type"
|
|
1026
|
+
},
|
|
1027
|
+
"source_id": {
|
|
1028
|
+
"type": "string"
|
|
1029
|
+
},
|
|
1030
|
+
"target_id": {
|
|
1031
|
+
"type": "string"
|
|
1032
|
+
},
|
|
1033
|
+
"status": {
|
|
1034
|
+
"$ref": "#/components/schemas/SyncJobResourceStatus"
|
|
1035
|
+
},
|
|
1036
|
+
"message": {
|
|
1037
|
+
"type": "string"
|
|
1038
|
+
},
|
|
1039
|
+
"error": {
|
|
1040
|
+
"type": "string"
|
|
1041
|
+
}
|
|
1042
|
+
},
|
|
1043
|
+
"required": [
|
|
1044
|
+
"seq",
|
|
1045
|
+
"ts",
|
|
1046
|
+
"status"
|
|
1047
|
+
]
|
|
1048
|
+
},
|
|
1049
|
+
"SyncJobBatch": {
|
|
1050
|
+
"type": "object",
|
|
1051
|
+
"description": "Position within the current topological batch for the active phase.",
|
|
1052
|
+
"properties": {
|
|
1053
|
+
"index": {
|
|
1054
|
+
"type": "integer",
|
|
1055
|
+
"description": "Zero-based index of the batch currently executing."
|
|
1056
|
+
},
|
|
1057
|
+
"of": {
|
|
1058
|
+
"type": "integer",
|
|
1059
|
+
"description": "Total number of batches in the current phase."
|
|
1060
|
+
},
|
|
1061
|
+
"level": {
|
|
1062
|
+
"type": "integer",
|
|
1063
|
+
"description": "Dependency level (matches `dependencyLevel` from the topological sort)."
|
|
1064
|
+
}
|
|
1065
|
+
},
|
|
1066
|
+
"required": [
|
|
1067
|
+
"index",
|
|
1068
|
+
"of",
|
|
1069
|
+
"level"
|
|
1070
|
+
]
|
|
1071
|
+
},
|
|
1072
|
+
"SyncJob": {
|
|
1073
|
+
"type": "object",
|
|
1074
|
+
"description": "Sync job header as surfaced by `getSyncJob` and the create response. The\ncanonical persistence shape is described in `docs/sync/INTERFACES.md`.\n",
|
|
1075
|
+
"properties": {
|
|
1076
|
+
"id": {
|
|
1077
|
+
"type": "string"
|
|
1078
|
+
},
|
|
1079
|
+
"name": {
|
|
1080
|
+
"type": "string"
|
|
1081
|
+
},
|
|
1082
|
+
"status": {
|
|
1083
|
+
"$ref": "#/components/schemas/SyncJobStatus"
|
|
1084
|
+
},
|
|
1085
|
+
"direction": {
|
|
1086
|
+
"$ref": "#/components/schemas/SyncDirection"
|
|
1087
|
+
},
|
|
1088
|
+
"source_org_id": {
|
|
1089
|
+
"type": "string"
|
|
1090
|
+
},
|
|
1091
|
+
"target_org_id": {
|
|
1092
|
+
"type": "string"
|
|
1093
|
+
},
|
|
1094
|
+
"dry_run": {
|
|
1095
|
+
"type": "boolean"
|
|
1096
|
+
},
|
|
1097
|
+
"counts": {
|
|
1098
|
+
"$ref": "#/components/schemas/SyncJobCounts"
|
|
1099
|
+
},
|
|
1100
|
+
"current_phase": {
|
|
1101
|
+
"$ref": "#/components/schemas/SyncPhase"
|
|
1102
|
+
},
|
|
1103
|
+
"current_batch": {
|
|
1104
|
+
"$ref": "#/components/schemas/SyncJobBatch"
|
|
1105
|
+
},
|
|
1106
|
+
"started_at": {
|
|
1107
|
+
"type": "string",
|
|
1108
|
+
"format": "date-time"
|
|
1109
|
+
},
|
|
1110
|
+
"finished_at": {
|
|
1111
|
+
"type": "string",
|
|
1112
|
+
"format": "date-time"
|
|
1113
|
+
},
|
|
1114
|
+
"events": {
|
|
1115
|
+
"type": "array",
|
|
1116
|
+
"description": "Most recent events (capped server-side, typically last 10).",
|
|
1117
|
+
"items": {
|
|
1118
|
+
"$ref": "#/components/schemas/SyncJobEvent"
|
|
1119
|
+
}
|
|
1120
|
+
},
|
|
1121
|
+
"errors_sample": {
|
|
1122
|
+
"type": "array",
|
|
1123
|
+
"description": "Up to 20 sample error messages from failed resources.",
|
|
1124
|
+
"maxItems": 20,
|
|
1125
|
+
"items": {
|
|
1126
|
+
"type": "object",
|
|
1127
|
+
"properties": {
|
|
1128
|
+
"type": {
|
|
1129
|
+
"type": "string"
|
|
1130
|
+
},
|
|
1131
|
+
"source_id": {
|
|
1132
|
+
"type": "string"
|
|
1133
|
+
},
|
|
1134
|
+
"error": {
|
|
1135
|
+
"type": "string"
|
|
1136
|
+
}
|
|
1137
|
+
},
|
|
1138
|
+
"required": [
|
|
1139
|
+
"type",
|
|
1140
|
+
"source_id",
|
|
1141
|
+
"error"
|
|
1142
|
+
]
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
},
|
|
1146
|
+
"required": [
|
|
1147
|
+
"id",
|
|
1148
|
+
"status",
|
|
1149
|
+
"direction",
|
|
1150
|
+
"source_org_id",
|
|
1151
|
+
"target_org_id",
|
|
1152
|
+
"dry_run",
|
|
1153
|
+
"counts",
|
|
1154
|
+
"started_at"
|
|
1155
|
+
]
|
|
1156
|
+
},
|
|
1157
|
+
"SyncJobListResponse": {
|
|
1158
|
+
"type": "object",
|
|
1159
|
+
"description": "Cursor-paginated list of sync jobs.",
|
|
1160
|
+
"properties": {
|
|
1161
|
+
"next_cursor": {
|
|
1162
|
+
"type": "string"
|
|
1163
|
+
},
|
|
1164
|
+
"results": {
|
|
1165
|
+
"type": "array",
|
|
1166
|
+
"items": {
|
|
1167
|
+
"$ref": "#/components/schemas/SyncJob"
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
},
|
|
1171
|
+
"required": [
|
|
1172
|
+
"results"
|
|
1173
|
+
]
|
|
1174
|
+
},
|
|
1175
|
+
"SyncJobResource": {
|
|
1176
|
+
"type": "object",
|
|
1177
|
+
"description": "Per-resource row backed by `SyncResourcesTable`. See\n`docs/sync/INTERFACES.md` for the DDB shape.\n",
|
|
1178
|
+
"properties": {
|
|
1179
|
+
"type": {
|
|
1180
|
+
"type": "string"
|
|
1181
|
+
},
|
|
1182
|
+
"source_id": {
|
|
1183
|
+
"type": "string"
|
|
1184
|
+
},
|
|
1185
|
+
"target_id": {
|
|
1186
|
+
"type": "string"
|
|
1187
|
+
},
|
|
1188
|
+
"status": {
|
|
1189
|
+
"$ref": "#/components/schemas/SyncJobResourceStatus"
|
|
1190
|
+
},
|
|
1191
|
+
"phase": {
|
|
1192
|
+
"$ref": "#/components/schemas/SyncPhase"
|
|
1193
|
+
},
|
|
1194
|
+
"attempt": {
|
|
1195
|
+
"type": "integer"
|
|
1196
|
+
},
|
|
1197
|
+
"error": {
|
|
1198
|
+
"type": "string"
|
|
1199
|
+
},
|
|
1200
|
+
"updated_at": {
|
|
1201
|
+
"type": "string",
|
|
1202
|
+
"format": "date-time"
|
|
1203
|
+
}
|
|
1204
|
+
},
|
|
1205
|
+
"required": [
|
|
1206
|
+
"type",
|
|
1207
|
+
"source_id",
|
|
1208
|
+
"status",
|
|
1209
|
+
"phase",
|
|
1210
|
+
"attempt",
|
|
1211
|
+
"updated_at"
|
|
1212
|
+
]
|
|
1213
|
+
},
|
|
1214
|
+
"SyncJobResourceListResponse": {
|
|
1215
|
+
"type": "object",
|
|
1216
|
+
"description": "Cursor-paginated list of sync job resources.",
|
|
1217
|
+
"properties": {
|
|
1218
|
+
"next_cursor": {
|
|
1219
|
+
"type": "string"
|
|
1220
|
+
},
|
|
1221
|
+
"results": {
|
|
1222
|
+
"type": "array",
|
|
1223
|
+
"items": {
|
|
1224
|
+
"$ref": "#/components/schemas/SyncJobResource"
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
},
|
|
1228
|
+
"required": [
|
|
1229
|
+
"results"
|
|
1230
|
+
]
|
|
481
1231
|
}
|
|
482
1232
|
}
|
|
483
1233
|
}
|