@epilot/cli 0.1.76 → 0.1.78
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/customer-portal.json +36 -8
- package/definitions/integration-toolkit.json +290 -3
- package/dist/bin/epilot.js +6 -6
- package/dist/{chunk-Z6XZLCPF.js → chunk-P2TAWLHV.js} +3 -1
- package/dist/{completion-SRBQ67FX.js → completion-FAY7S3QS.js} +1 -1
- package/dist/{upgrade-VBSV2FKU.js → upgrade-33QB7A5M.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4252,7 +4252,7 @@
|
|
|
4252
4252
|
},
|
|
4253
4253
|
"password": {
|
|
4254
4254
|
"type": "string",
|
|
4255
|
-
"description": "Password of the portal user for confirmation.\nRequired unless a `changeEmail` portal extension hook with `require_password_confirmation` disabled is configured for the portal.\n"
|
|
4255
|
+
"description": "Password of the portal user for confirmation.\nRequired unless a `changeEmail` portal extension hook with `require_password_confirmation` disabled is configured for the portal.\nAlso required by a `changeEmail` hook with `change_mode` set to `synchronous`, except for portal users whose identity is managed by an identity provider - an SSO login has no password to confirm.\n"
|
|
4256
4256
|
}
|
|
4257
4257
|
}
|
|
4258
4258
|
}
|
|
@@ -4261,7 +4261,7 @@
|
|
|
4261
4261
|
},
|
|
4262
4262
|
"responses": {
|
|
4263
4263
|
"200": {
|
|
4264
|
-
"description": "Portal user email updated successfully
|
|
4264
|
+
"description": "Portal user email updated successfully.\nThe user receives a confirmation email, unless a `changeEmail` portal extension hook with\n`change_mode` set to `synchronous` changed the login email right away.\n",
|
|
4265
4265
|
"content": {
|
|
4266
4266
|
"application/json": {
|
|
4267
4267
|
"schema": {
|
|
@@ -4269,7 +4269,7 @@
|
|
|
4269
4269
|
"properties": {
|
|
4270
4270
|
"message": {
|
|
4271
4271
|
"type": "string",
|
|
4272
|
-
"description": "`You will receive a confirmation mail soon on your updated email address.` for the built-in flow,\
|
|
4272
|
+
"description": "`You will receive a confirmation mail soon on your updated email address.` for the built-in flow,\n`Your email change request has been received.` when a changeEmail portal extension hook handed\nthe change over to a third party, or `Your email has been changed.` when a synchronous changeEmail\nportal extension hook changed the login email immediately - the portal user has to sign in again\nwith the new email address in that case.\n",
|
|
4273
4273
|
"example": "You will receive a confirmation mail soon on your updated email address."
|
|
4274
4274
|
}
|
|
4275
4275
|
}
|
|
@@ -15481,9 +15481,18 @@
|
|
|
15481
15481
|
"type": "string",
|
|
15482
15482
|
"description": "Identifier of the hook."
|
|
15483
15483
|
},
|
|
15484
|
+
"change_mode": {
|
|
15485
|
+
"type": "string",
|
|
15486
|
+
"enum": [
|
|
15487
|
+
"synchronous",
|
|
15488
|
+
"asynchronous"
|
|
15489
|
+
],
|
|
15490
|
+
"description": "Whether the third-party system applies the email change immediately (`synchronous`) or takes it over entirely (`asynchronous`).\nIn synchronous mode the login email is changed as soon as the request succeeds and the portal user has to sign in again with the new address.\n",
|
|
15491
|
+
"default": "asynchronous"
|
|
15492
|
+
},
|
|
15484
15493
|
"require_password_confirmation": {
|
|
15485
15494
|
"type": "boolean",
|
|
15486
|
-
"description": "Whether the portal user must confirm their current password before the email change is handed over to the third-party system
|
|
15495
|
+
"description": "Whether the portal user must confirm their current password before the email change is handed over to the third-party system.\nAlso required when `change_mode` is `synchronous`, except for portal users whose identity is managed by an identity provider - an SSO login has no password to confirm.\n",
|
|
15487
15496
|
"default": true
|
|
15488
15497
|
},
|
|
15489
15498
|
"explanation": {
|
|
@@ -16803,7 +16812,7 @@
|
|
|
16803
16812
|
]
|
|
16804
16813
|
},
|
|
16805
16814
|
"ExtensionHookChangeEmail": {
|
|
16806
|
-
"description": "Hook that replaces the built-in change email functionality for portal users. When configured, the portal does not
|
|
16815
|
+
"description": "Hook that replaces the built-in change email functionality for portal users. When configured, the portal does not run its own change email flow. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the email change.\nThe `change_mode` controls what the portal does after the call:\n - `asynchronous`: The third-party system takes the email change over entirely (most likely by sending the user instructions to confirm the new email address). The portal does not change the login email itself.\n - `synchronous`: The third-party system applies the email change immediately. The portal waits for a successful (2xx) response and then also changes the portal user's login email right away, without sending a confirmation email. The user has to sign in again with the new email address afterwards.\n\nThe expected response http status code to the call is:\n - 2xx if the request was accepted\n - non-2xx if the request failed (optionally with a human-readable message resolved via `resolved.error_message_path`)\n",
|
|
16807
16816
|
"type": "object",
|
|
16808
16817
|
"properties": {
|
|
16809
16818
|
"type": {
|
|
@@ -16812,9 +16821,18 @@
|
|
|
16812
16821
|
"changeEmail"
|
|
16813
16822
|
]
|
|
16814
16823
|
},
|
|
16824
|
+
"change_mode": {
|
|
16825
|
+
"type": "string",
|
|
16826
|
+
"enum": [
|
|
16827
|
+
"synchronous",
|
|
16828
|
+
"asynchronous"
|
|
16829
|
+
],
|
|
16830
|
+
"description": "Controls how the email change is handled once the third-party system accepted it. `asynchronous` hands the email change over entirely to the third-party system and the portal does not change the login email itself. `synchronous` waits for the third-party system to respond and then changes the portal user's login email immediately, without a confirmation email.\n",
|
|
16831
|
+
"default": "asynchronous"
|
|
16832
|
+
},
|
|
16815
16833
|
"require_password_confirmation": {
|
|
16816
16834
|
"type": "boolean",
|
|
16817
|
-
"description": "Whether the portal user must confirm their current password before the change email request is handed over to the third-party system. When true, the portal collects and verifies the current password before calling the hook.\n",
|
|
16835
|
+
"description": "Whether the portal user must confirm their current password before the change email request is handed over to the third-party system. When true, the portal collects and verifies the current password before calling the hook. Treated as true when `change_mode` is `synchronous`, since the portal re-creates the login with the confirmed password. Skipped either way for portal users whose identity is managed by an identity provider: an SSO login has no password to confirm.\n",
|
|
16818
16836
|
"default": true
|
|
16819
16837
|
},
|
|
16820
16838
|
"explanation": {
|
|
@@ -16989,7 +17007,7 @@
|
|
|
16989
17007
|
]
|
|
16990
17008
|
},
|
|
16991
17009
|
"ExtensionHookDeleteAccount": {
|
|
16992
|
-
"description": "Hook that replaces the built-in delete account functionality for portal users. When configured, the portal does not delete the user itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the deletion.\nThe `deletion_mode` controls what the portal does after the call:\n - `synchronous`: The third-party system deletes the user immediately. The portal waits for a successful (2xx) response and then also deletes the epilot user.\n - `asynchronous`: The third-party system handles deletion out-of-band. The portal does not delete anything immediately; cleanup is expected to happen later (e.g. via the user deletion API or webhooks).\n\nThe expected response http status code to the call is:\n - 2xx if the request was accepted\n - non-2xx if the request failed (optionally with a human-readable message resolved via `resolved.error_message_path`)\n",
|
|
17010
|
+
"description": "Hook that replaces the built-in delete account functionality for portal users. When configured, the portal does not delete the user itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the deletion.\nThe `deletion_mode` controls what the portal does after the call:\n - `synchronous`: The third-party system deletes the user immediately. The portal waits for a successful (2xx) response and then also deletes the epilot user.\n - `asynchronous`: The third-party system handles deletion out-of-band. The portal does not delete anything immediately; cleanup is expected to happen later (e.g. via the user deletion API or webhooks).\n\nThe optional `delete_contact` additionally deletes the contact related to the portal user, once the portal user itself was deleted (`synchronous` mode only).\n\nThe expected response http status code to the call is:\n - 2xx if the request was accepted\n - non-2xx if the request failed (optionally with a human-readable message resolved via `resolved.error_message_path`)\n",
|
|
16993
17011
|
"type": "object",
|
|
16994
17012
|
"properties": {
|
|
16995
17013
|
"type": {
|
|
@@ -17007,6 +17025,16 @@
|
|
|
17007
17025
|
"description": "Controls how the account deletion is handled. `synchronous` waits for the third-party system to respond and then also deletes the epilot user. `asynchronous` hands the deletion over entirely to the third-party system and the portal does not delete anything immediately.\n",
|
|
17008
17026
|
"default": "synchronous"
|
|
17009
17027
|
},
|
|
17028
|
+
"delete_contact": {
|
|
17029
|
+
"type": "string",
|
|
17030
|
+
"enum": [
|
|
17031
|
+
"none",
|
|
17032
|
+
"soft",
|
|
17033
|
+
"hard"
|
|
17034
|
+
],
|
|
17035
|
+
"description": "Opt-in deletion of the contact related to the portal user, applied after the portal user itself was deleted. `none` (default) leaves the contact untouched. `soft` deletes the contact, so it can still be restored from the trash. `hard` permanently purges the contact. Only applied in `synchronous` deletion mode, as `asynchronous` mode hands the cleanup over to the third-party system.\n",
|
|
17036
|
+
"default": "none"
|
|
17037
|
+
},
|
|
17010
17038
|
"explanation": {
|
|
17011
17039
|
"type": "object",
|
|
17012
17040
|
"properties": {
|
|
@@ -17379,7 +17407,7 @@
|
|
|
17379
17407
|
"type": "string",
|
|
17380
17408
|
"example": "office-365-login",
|
|
17381
17409
|
"description": "URL-friendly slug to use as organization-unique identifier for Provider",
|
|
17382
|
-
"pattern": "[0-9a-
|
|
17410
|
+
"pattern": "[0-9a-z_-]+"
|
|
17383
17411
|
},
|
|
17384
17412
|
"ProviderDisplayName": {
|
|
17385
17413
|
"type": "string",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.0.3",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "Integration Toolkit API",
|
|
5
|
-
"version": "1.5.
|
|
5
|
+
"version": "1.5.12",
|
|
6
6
|
"description": "API for integrating with external systems in a standardised way."
|
|
7
7
|
},
|
|
8
8
|
"tags": [
|
|
@@ -279,6 +279,9 @@
|
|
|
279
279
|
"401": {
|
|
280
280
|
"$ref": "#/components/responses/Unauthorized"
|
|
281
281
|
},
|
|
282
|
+
"404": {
|
|
283
|
+
"$ref": "#/components/responses/NotFound"
|
|
284
|
+
},
|
|
282
285
|
"500": {
|
|
283
286
|
"$ref": "#/components/responses/InternalServerError"
|
|
284
287
|
}
|
|
@@ -332,6 +335,9 @@
|
|
|
332
335
|
"401": {
|
|
333
336
|
"$ref": "#/components/responses/Unauthorized"
|
|
334
337
|
},
|
|
338
|
+
"404": {
|
|
339
|
+
"$ref": "#/components/responses/NotFound"
|
|
340
|
+
},
|
|
335
341
|
"500": {
|
|
336
342
|
"$ref": "#/components/responses/InternalServerError"
|
|
337
343
|
}
|
|
@@ -3228,6 +3234,122 @@
|
|
|
3228
3234
|
}
|
|
3229
3235
|
}
|
|
3230
3236
|
},
|
|
3237
|
+
"/v2/integrations/{integrationId}/monitoring/external-events": {
|
|
3238
|
+
"post": {
|
|
3239
|
+
"operationId": "ingestExternalMonitoringEvents",
|
|
3240
|
+
"summary": "ingestExternalMonitoringEvents",
|
|
3241
|
+
"description": "Ingest monitoring spans produced by an EXTERNAL system (e.g. an integration\nmiddleware), so the Integration Hub is the central monitoring point and the\ncross-system event trace spans both the external system and epilot's own\nprocessing.\n\nEach span is validated, assigned a server-controlled `EXTERNAL_*` taxonomy code\nderived from its `level` (the client never supplies a code — this marks\nprovenance and prevents spoofing an epilot code), has its `use_case_slug`\nresolved against the integration's configured use cases, and is republished onto\nthe same monitoring event bus as epilot's own spans — so external spans are\nfirst-class to the trace view, stats, alerting and digests.\n\nSpans link to the epilot trace via `correlation_id` (the trace id): the middleware\nmust stamp the same `correlation_id` here and on the event it forwards to the\ninbound endpoint. Invalid spans in a batch are reported per-item and do not fail\nthe whole batch.\n",
|
|
3242
|
+
"tags": [
|
|
3243
|
+
"monitoring",
|
|
3244
|
+
"integrations"
|
|
3245
|
+
],
|
|
3246
|
+
"parameters": [
|
|
3247
|
+
{
|
|
3248
|
+
"name": "integrationId",
|
|
3249
|
+
"in": "path",
|
|
3250
|
+
"required": true,
|
|
3251
|
+
"description": "The integration ID",
|
|
3252
|
+
"schema": {
|
|
3253
|
+
"type": "string",
|
|
3254
|
+
"format": "uuid"
|
|
3255
|
+
}
|
|
3256
|
+
}
|
|
3257
|
+
],
|
|
3258
|
+
"requestBody": {
|
|
3259
|
+
"required": true,
|
|
3260
|
+
"content": {
|
|
3261
|
+
"application/json": {
|
|
3262
|
+
"schema": {
|
|
3263
|
+
"$ref": "#/components/schemas/IngestExternalMonitoringEventsRequest"
|
|
3264
|
+
}
|
|
3265
|
+
}
|
|
3266
|
+
}
|
|
3267
|
+
},
|
|
3268
|
+
"responses": {
|
|
3269
|
+
"202": {
|
|
3270
|
+
"description": "Batch accepted (some spans may have been rejected — see counts).",
|
|
3271
|
+
"content": {
|
|
3272
|
+
"application/json": {
|
|
3273
|
+
"schema": {
|
|
3274
|
+
"$ref": "#/components/schemas/IngestExternalMonitoringEventsResponse"
|
|
3275
|
+
}
|
|
3276
|
+
}
|
|
3277
|
+
}
|
|
3278
|
+
},
|
|
3279
|
+
"400": {
|
|
3280
|
+
"$ref": "#/components/responses/BadRequest"
|
|
3281
|
+
},
|
|
3282
|
+
"401": {
|
|
3283
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
3284
|
+
},
|
|
3285
|
+
"403": {
|
|
3286
|
+
"$ref": "#/components/responses/Forbidden"
|
|
3287
|
+
},
|
|
3288
|
+
"404": {
|
|
3289
|
+
"$ref": "#/components/responses/NotFound"
|
|
3290
|
+
},
|
|
3291
|
+
"500": {
|
|
3292
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
3293
|
+
}
|
|
3294
|
+
}
|
|
3295
|
+
}
|
|
3296
|
+
},
|
|
3297
|
+
"/v2/integrations/{integrationId}/monitoring/traces/{correlationId}": {
|
|
3298
|
+
"get": {
|
|
3299
|
+
"operationId": "getMonitoringTraceByCorrelation",
|
|
3300
|
+
"summary": "getMonitoringTraceByCorrelation",
|
|
3301
|
+
"description": "Returns the cross-system event trace for a `correlation_id`: every monitoring\nspan sharing it — external spans (middleware) plus epilot's own processing spans\n— ordered chronologically, with a rolled-up status and the epilot inbound event\n\"head\" attached. This is the correlation-grouped counterpart to\n`…/events/{eventId}/associated` (which groups a single epilot event's fan-out by\nevent_id). Origin is distinguished by the `EXTERNAL_*` code prefix on external\nspans. Freshness is near-real-time (spans land as they are produced/ingested).\n",
|
|
3302
|
+
"tags": [
|
|
3303
|
+
"monitoring",
|
|
3304
|
+
"integrations"
|
|
3305
|
+
],
|
|
3306
|
+
"parameters": [
|
|
3307
|
+
{
|
|
3308
|
+
"name": "integrationId",
|
|
3309
|
+
"in": "path",
|
|
3310
|
+
"required": true,
|
|
3311
|
+
"description": "The integration ID",
|
|
3312
|
+
"schema": {
|
|
3313
|
+
"type": "string",
|
|
3314
|
+
"format": "uuid"
|
|
3315
|
+
}
|
|
3316
|
+
},
|
|
3317
|
+
{
|
|
3318
|
+
"name": "correlationId",
|
|
3319
|
+
"in": "path",
|
|
3320
|
+
"required": true,
|
|
3321
|
+
"description": "The trace id (correlation_id) shared across systems",
|
|
3322
|
+
"schema": {
|
|
3323
|
+
"type": "string"
|
|
3324
|
+
}
|
|
3325
|
+
}
|
|
3326
|
+
],
|
|
3327
|
+
"responses": {
|
|
3328
|
+
"200": {
|
|
3329
|
+
"description": "The assembled cross-system trace.",
|
|
3330
|
+
"content": {
|
|
3331
|
+
"application/json": {
|
|
3332
|
+
"schema": {
|
|
3333
|
+
"$ref": "#/components/schemas/MonitoringTraceResponse"
|
|
3334
|
+
}
|
|
3335
|
+
}
|
|
3336
|
+
}
|
|
3337
|
+
},
|
|
3338
|
+
"400": {
|
|
3339
|
+
"$ref": "#/components/responses/BadRequest"
|
|
3340
|
+
},
|
|
3341
|
+
"401": {
|
|
3342
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
3343
|
+
},
|
|
3344
|
+
"404": {
|
|
3345
|
+
"$ref": "#/components/responses/NotFound"
|
|
3346
|
+
},
|
|
3347
|
+
"500": {
|
|
3348
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
3349
|
+
}
|
|
3350
|
+
}
|
|
3351
|
+
}
|
|
3352
|
+
},
|
|
3231
3353
|
"/v1/integrations/secure-proxies": {
|
|
3232
3354
|
"get": {
|
|
3233
3355
|
"operationId": "listSecureProxies",
|
|
@@ -4003,6 +4125,11 @@
|
|
|
4003
4125
|
"description": "Optional unique identifier for idempotency - prevents duplicate processing of the same event within 24 hours in context of the same integration. Must contain only alphanumeric characters, hyphens, and underscores.\n",
|
|
4004
4126
|
"example": "evt-2025-05-01-12345-create-bp"
|
|
4005
4127
|
},
|
|
4128
|
+
"correlation_id": {
|
|
4129
|
+
"type": "string",
|
|
4130
|
+
"description": "Optional per-event trace id for cross-system tracing (unique per business operation). Overrides the request-level meta.correlation_id for THIS event. When absent, the event inherits the request-level correlation_id; when both are absent, epilot mints its own event_id and the trace is epilot-only. Orthogonal to deduplication_id (idempotency).\n",
|
|
4131
|
+
"example": "bp-8f3a2c-7d4e-4b1a-9c2f-1e6d5a4b3c21"
|
|
4132
|
+
},
|
|
4006
4133
|
"use_case_id": {
|
|
4007
4134
|
"type": "string",
|
|
4008
4135
|
"nullable": true,
|
|
@@ -4109,6 +4236,12 @@
|
|
|
4109
4236
|
"maxLength": 255,
|
|
4110
4237
|
"description": "Optional unique identifier for idempotency - prevents duplicate processing of the same event within 24 hours in context of the same integration. Must contain only alphanumeric characters, hyphens, and underscores.\n",
|
|
4111
4238
|
"example": "evt-2025-05-01-12345-bp"
|
|
4239
|
+
},
|
|
4240
|
+
"group_id": {
|
|
4241
|
+
"type": "string",
|
|
4242
|
+
"description": "Optional per-event ordering group. Overrides the request-level `group_id` for THIS event; when absent, the event inherits the request-level `group_id` (or the default strict per-integration ordering). Use it when a single batch carries events for unrelated business objects that may be processed in parallel. See the request-level `group_id` for semantics.\n",
|
|
4243
|
+
"maxLength": 128,
|
|
4244
|
+
"example": "customer-42"
|
|
4112
4245
|
}
|
|
4113
4246
|
}
|
|
4114
4247
|
},
|
|
@@ -4130,7 +4263,7 @@
|
|
|
4130
4263
|
},
|
|
4131
4264
|
"group_id": {
|
|
4132
4265
|
"type": "string",
|
|
4133
|
-
"description": "Controls ordering and parallelism for this request's events.\n\nBy default, all events for a given `integration_id` are processed\n**strictly in order, one at a time**. For high-volume integrations this\ncan become a throughput bottleneck.\n\nSet `group_id` to opt into **parallel processing**:\n- Events sharing the same `group_id` are processed in the order received.\n- Events with different `group_id` values are processed in parallel.\n\nTypical usage is to derive `group_id` from a logical partition key in\nyour payload — for example the customer ID, contract ID, or meter ID —\nso updates to the same business object remain ordered while unrelated\nobjects are processed concurrently.\n\nNotes:\n- Up to 20 groups per integration are processed concurrently. Using\n more distinct values than that yields no additional parallelism.\n- Omit this field if strict per-integration ordering is required.\n",
|
|
4266
|
+
"description": "Controls ordering and parallelism for this request's events.\n\nBy default, all events for a given `integration_id` are processed\n**strictly in order, one at a time**. For high-volume integrations this\ncan become a throughput bottleneck.\n\nSet `group_id` to opt into **parallel processing**:\n- Events sharing the same `group_id` are processed in the order received.\n- Events with different `group_id` values are processed in parallel.\n\nTypical usage is to derive `group_id` from a logical partition key in\nyour payload — for example the customer ID, contract ID, or meter ID —\nso updates to the same business object remain ordered while unrelated\nobjects are processed concurrently.\n\nNotes:\n- Individual events may set their own `group_id`, which overrides this\n request-level value for that event only.\n- Up to 20 groups per integration are processed concurrently. Using\n more distinct values than that yields no additional parallelism.\n- Omit this field if strict per-integration ordering is required.\n",
|
|
4134
4267
|
"maxLength": 128,
|
|
4135
4268
|
"example": "customer-42"
|
|
4136
4269
|
},
|
|
@@ -7074,7 +7207,7 @@
|
|
|
7074
7207
|
"prevent_indirect_serving": {
|
|
7075
7208
|
"type": "boolean",
|
|
7076
7209
|
"default": false,
|
|
7077
|
-
"description": "When `true`,
|
|
7210
|
+
"description": "When `true`, this use case is served via the streaming endpoint: mapped file URLs\nare built as `/stream/download`, files of any size are streamed inline over HTTP\nresponse streaming, and buffered `/download` requests for oversize files are\n307-redirected to `/stream`. Files never transit epilot's temporary S3 storage on\nthe streaming path. Defaults to `false` (small files are served directly and large\nfiles are transparently served via a temporary S3 redirect).\n"
|
|
7078
7211
|
}
|
|
7079
7212
|
}
|
|
7080
7213
|
},
|
|
@@ -9255,6 +9388,160 @@
|
|
|
9255
9388
|
}
|
|
9256
9389
|
}
|
|
9257
9390
|
},
|
|
9391
|
+
"ExternalMonitoringSpan": {
|
|
9392
|
+
"type": "object",
|
|
9393
|
+
"properties": {
|
|
9394
|
+
"correlation_id": {
|
|
9395
|
+
"type": "string",
|
|
9396
|
+
"description": "Trace id — links this span to the epilot trace. Unique per business operation. Required."
|
|
9397
|
+
},
|
|
9398
|
+
"level": {
|
|
9399
|
+
"type": "string",
|
|
9400
|
+
"description": "Span outcome level — one of success | error | warning | info. Drives the server-assigned EXTERNAL_* code, coloring, and alerting. Required.\n"
|
|
9401
|
+
},
|
|
9402
|
+
"use_case_slug": {
|
|
9403
|
+
"type": "string",
|
|
9404
|
+
"description": "Business use case slug (e.g. \"business_partner\"). Resolved server-side against the integration's configured use cases to a use_case_id/use_case_type; stored as the grouping dimension. Portable — no epilot-internal UUIDs required.\n"
|
|
9405
|
+
},
|
|
9406
|
+
"occurred_at": {
|
|
9407
|
+
"type": "string",
|
|
9408
|
+
"format": "date-time",
|
|
9409
|
+
"description": "External clock time the span occurred; stored as created_at."
|
|
9410
|
+
},
|
|
9411
|
+
"message": {
|
|
9412
|
+
"type": "string",
|
|
9413
|
+
"description": "Human-readable line shown in the trace and event tables."
|
|
9414
|
+
},
|
|
9415
|
+
"detail": {
|
|
9416
|
+
"type": "object",
|
|
9417
|
+
"additionalProperties": true,
|
|
9418
|
+
"nullable": true,
|
|
9419
|
+
"description": "Free-form context (step, http_status, reason, …). The place for external-system specificity — the taxonomy code stays clean (EXTERNAL_*).\n"
|
|
9420
|
+
}
|
|
9421
|
+
},
|
|
9422
|
+
"description": "A single monitoring span produced by an external system. `correlation_id`, `level`, `use_case_slug`, `occurred_at` and `message` are all required and `level` must be one of success|error|warning|info — but these are validated PER SPAN at ingest and reported in the per-item `results[]`, so one malformed span never fails the whole batch (the fields are intentionally not marked `required`/`enum` at the schema level to preserve that partial-acceptance behavior). The client does NOT send a `code` (server-assigned from `level`), a `source` (origin is the EXTERNAL_* code prefix), or span/event ids (the external system owns its own identity and dedup).\n"
|
|
9423
|
+
},
|
|
9424
|
+
"IngestExternalMonitoringEventsRequest": {
|
|
9425
|
+
"type": "object",
|
|
9426
|
+
"required": [
|
|
9427
|
+
"events"
|
|
9428
|
+
],
|
|
9429
|
+
"properties": {
|
|
9430
|
+
"events": {
|
|
9431
|
+
"type": "array",
|
|
9432
|
+
"minItems": 1,
|
|
9433
|
+
"maxItems": 100,
|
|
9434
|
+
"items": {
|
|
9435
|
+
"$ref": "#/components/schemas/ExternalMonitoringSpan"
|
|
9436
|
+
},
|
|
9437
|
+
"description": "Batch of external monitoring spans (max 100 per request)."
|
|
9438
|
+
}
|
|
9439
|
+
}
|
|
9440
|
+
},
|
|
9441
|
+
"IngestExternalMonitoringEventsResponse": {
|
|
9442
|
+
"type": "object",
|
|
9443
|
+
"required": [
|
|
9444
|
+
"accepted",
|
|
9445
|
+
"rejected"
|
|
9446
|
+
],
|
|
9447
|
+
"properties": {
|
|
9448
|
+
"accepted": {
|
|
9449
|
+
"type": "integer",
|
|
9450
|
+
"description": "Number of spans accepted and republished onto the monitoring bus."
|
|
9451
|
+
},
|
|
9452
|
+
"rejected": {
|
|
9453
|
+
"type": "integer",
|
|
9454
|
+
"description": "Number of spans rejected in validation. See `results` for reasons."
|
|
9455
|
+
},
|
|
9456
|
+
"results": {
|
|
9457
|
+
"type": "array",
|
|
9458
|
+
"description": "Per-span results; present for rejections in a mixed batch.",
|
|
9459
|
+
"items": {
|
|
9460
|
+
"type": "object",
|
|
9461
|
+
"required": [
|
|
9462
|
+
"index",
|
|
9463
|
+
"status"
|
|
9464
|
+
],
|
|
9465
|
+
"properties": {
|
|
9466
|
+
"index": {
|
|
9467
|
+
"type": "integer",
|
|
9468
|
+
"description": "Zero-based index of the span in the request `events` array."
|
|
9469
|
+
},
|
|
9470
|
+
"status": {
|
|
9471
|
+
"type": "string",
|
|
9472
|
+
"enum": [
|
|
9473
|
+
"accepted",
|
|
9474
|
+
"rejected"
|
|
9475
|
+
]
|
|
9476
|
+
},
|
|
9477
|
+
"reason": {
|
|
9478
|
+
"type": "string",
|
|
9479
|
+
"description": "Rejection reason (present when status is rejected)."
|
|
9480
|
+
}
|
|
9481
|
+
}
|
|
9482
|
+
}
|
|
9483
|
+
}
|
|
9484
|
+
}
|
|
9485
|
+
},
|
|
9486
|
+
"MonitoringTraceResponse": {
|
|
9487
|
+
"type": "object",
|
|
9488
|
+
"required": [
|
|
9489
|
+
"correlation_id",
|
|
9490
|
+
"status",
|
|
9491
|
+
"span_count",
|
|
9492
|
+
"truncated",
|
|
9493
|
+
"spans"
|
|
9494
|
+
],
|
|
9495
|
+
"properties": {
|
|
9496
|
+
"correlation_id": {
|
|
9497
|
+
"type": "string",
|
|
9498
|
+
"description": "The trace id these spans share."
|
|
9499
|
+
},
|
|
9500
|
+
"status": {
|
|
9501
|
+
"type": "string",
|
|
9502
|
+
"enum": [
|
|
9503
|
+
"success",
|
|
9504
|
+
"error",
|
|
9505
|
+
"warning",
|
|
9506
|
+
"info"
|
|
9507
|
+
],
|
|
9508
|
+
"description": "Rolled-up status across all spans (error > warning > success > info)."
|
|
9509
|
+
},
|
|
9510
|
+
"started_at": {
|
|
9511
|
+
"type": "string",
|
|
9512
|
+
"format": "date-time",
|
|
9513
|
+
"nullable": true,
|
|
9514
|
+
"description": "created_at of the earliest span (null when the trace is empty)."
|
|
9515
|
+
},
|
|
9516
|
+
"ended_at": {
|
|
9517
|
+
"type": "string",
|
|
9518
|
+
"format": "date-time",
|
|
9519
|
+
"nullable": true,
|
|
9520
|
+
"description": "created_at of the latest returned span (null when the trace is empty)."
|
|
9521
|
+
},
|
|
9522
|
+
"span_count": {
|
|
9523
|
+
"type": "integer",
|
|
9524
|
+
"description": "Number of spans RETURNED (== spans.length; capped)."
|
|
9525
|
+
},
|
|
9526
|
+
"truncated": {
|
|
9527
|
+
"type": "boolean",
|
|
9528
|
+
"description": "True when the trace has more spans than the cap; the returned window is the earliest spans, so ended_at/status reflect only that window.\n"
|
|
9529
|
+
},
|
|
9530
|
+
"spans": {
|
|
9531
|
+
"type": "array",
|
|
9532
|
+
"items": {
|
|
9533
|
+
"$ref": "#/components/schemas/MonitoringEventV2"
|
|
9534
|
+
},
|
|
9535
|
+
"description": "All spans sharing the correlation_id, chronological. External-origin spans carry an EXTERNAL_* code; epilot spans carry an epilot code or empty (success).\n"
|
|
9536
|
+
},
|
|
9537
|
+
"inbound_event": {
|
|
9538
|
+
"type": "object",
|
|
9539
|
+
"nullable": true,
|
|
9540
|
+
"additionalProperties": true,
|
|
9541
|
+
"description": "The epilot inbound event \"head\" (raw payload), when present."
|
|
9542
|
+
}
|
|
9543
|
+
}
|
|
9544
|
+
},
|
|
9258
9545
|
"MonitoringEventV2": {
|
|
9259
9546
|
"type": "object",
|
|
9260
9547
|
"required": [
|
package/dist/bin/epilot.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
API_LIST
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-P2TAWLHV.js";
|
|
5
5
|
|
|
6
6
|
// bin/epilot.ts
|
|
7
7
|
import { runMain } from "citty";
|
|
@@ -11,7 +11,7 @@ import { defineCommand } from "citty";
|
|
|
11
11
|
var main = defineCommand({
|
|
12
12
|
meta: {
|
|
13
13
|
name: "epilot",
|
|
14
|
-
version: "0.1.
|
|
14
|
+
version: "0.1.78",
|
|
15
15
|
description: "CLI for epilot APIs"
|
|
16
16
|
},
|
|
17
17
|
args: {
|
|
@@ -30,8 +30,8 @@ var main = defineCommand({
|
|
|
30
30
|
auth: () => import("../auth-4HG7B2GC.js").then((m) => m.default),
|
|
31
31
|
profile: () => import("../profile-OZJL5ZPT.js").then((m) => m.default),
|
|
32
32
|
config: () => import("../config-DGZIMLZK.js").then((m) => m.default),
|
|
33
|
-
completion: () => import("../completion-
|
|
34
|
-
upgrade: () => import("../upgrade-
|
|
33
|
+
completion: () => import("../completion-FAY7S3QS.js").then((m) => m.default),
|
|
34
|
+
upgrade: () => import("../upgrade-33QB7A5M.js").then((m) => m.default),
|
|
35
35
|
"access-token": () => import("../access-token-WWE6BDJH.js").then((m) => m.default),
|
|
36
36
|
address: () => import("../address-EH3C4CVB.js").then((m) => m.default),
|
|
37
37
|
"address-suggestions": () => import("../address-suggestions-RRSLOBFW.js").then((m) => m.default),
|
|
@@ -134,13 +134,13 @@ process.stderr.on("error", (err) => {
|
|
|
134
134
|
if (err.code === "EPIPE") process.exit(0);
|
|
135
135
|
throw err;
|
|
136
136
|
});
|
|
137
|
-
var VERSION = true ? "0.1.
|
|
137
|
+
var VERSION = true ? "0.1.78" : (await null).default.version;
|
|
138
138
|
var reorderedArgv = hoistFlagsAfterSubcommand(process.argv.slice(2));
|
|
139
139
|
process.argv = [process.argv[0], process.argv[1], ...reorderedArgv];
|
|
140
140
|
var args = process.argv.slice(2);
|
|
141
141
|
var completionsIdx = args.indexOf("--_completions");
|
|
142
142
|
if (completionsIdx >= 0) {
|
|
143
|
-
const { handleCompletions } = await import("../completion-
|
|
143
|
+
const { handleCompletions } = await import("../completion-FAY7S3QS.js");
|
|
144
144
|
handleCompletions(args[completionsIdx + 1], args[completionsIdx + 2]);
|
|
145
145
|
process.exit(0);
|
|
146
146
|
}
|
|
@@ -799,7 +799,7 @@ var API_LIST = [
|
|
|
799
799
|
kebabName: "integration-toolkit",
|
|
800
800
|
title: "Integration Toolkit API",
|
|
801
801
|
serverUrl: "https://integration-toolkit.sls.epilot.io",
|
|
802
|
-
operationCount:
|
|
802
|
+
operationCount: 56,
|
|
803
803
|
operationIds: [
|
|
804
804
|
"acknowledgeTracking",
|
|
805
805
|
"triggerErp",
|
|
@@ -849,6 +849,8 @@ var API_LIST = [
|
|
|
849
849
|
"getMonitoringStatsV2",
|
|
850
850
|
"getMonitoringTimeSeriesV2",
|
|
851
851
|
"getAssociatedMonitoringEvents",
|
|
852
|
+
"ingestExternalMonitoringEvents",
|
|
853
|
+
"getMonitoringTraceByCorrelation",
|
|
852
854
|
"listSecureProxies",
|
|
853
855
|
"secureProxy",
|
|
854
856
|
"managedCallExecute",
|
|
@@ -72,7 +72,7 @@ ${GREEN}${BOLD}Upgraded to @epilot/cli@${latest}${RESET}
|
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
74
|
var getCurrentVersion = () => {
|
|
75
|
-
if (true) return "0.1.
|
|
75
|
+
if (true) return "0.1.78";
|
|
76
76
|
try {
|
|
77
77
|
const output = execSync("npm ls -g @epilot/cli --depth=0 --json 2>/dev/null", {
|
|
78
78
|
encoding: "utf-8",
|