@epilot/sdk 2.18.27 → 2.18.29
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/definitions/integration-toolkit.json +27 -103
- package/definitions/permissions.json +85 -2
- package/dist/apis/access-token.cjs +6 -6
- package/dist/apis/access-token.js +1 -1
- package/dist/apis/address-suggestions.cjs +6 -6
- package/dist/apis/address-suggestions.js +1 -1
- package/dist/apis/address.cjs +6 -6
- package/dist/apis/address.js +1 -1
- package/dist/apis/ai-agents.cjs +6 -6
- package/dist/apis/ai-agents.js +1 -1
- package/dist/apis/app.cjs +6 -6
- package/dist/apis/app.js +1 -1
- package/dist/apis/audit-logs.cjs +6 -6
- package/dist/apis/audit-logs.js +1 -1
- package/dist/apis/automation.cjs +6 -6
- package/dist/apis/automation.js +1 -1
- package/dist/apis/billing.cjs +6 -6
- package/dist/apis/billing.js +1 -1
- package/dist/apis/blueprint-manifest.cjs +6 -6
- package/dist/apis/blueprint-manifest.js +1 -1
- package/dist/apis/calendar.cjs +6 -6
- package/dist/apis/calendar.js +1 -1
- package/dist/apis/configuration-hub.cjs +6 -6
- package/dist/apis/configuration-hub.js +1 -1
- package/dist/apis/consent.cjs +6 -6
- package/dist/apis/consent.js +1 -1
- package/dist/apis/customer-portal.cjs +6 -6
- package/dist/apis/customer-portal.js +1 -1
- package/dist/apis/dashboard.cjs +6 -6
- package/dist/apis/dashboard.js +1 -1
- package/dist/apis/data-governance.cjs +6 -6
- package/dist/apis/data-governance.js +1 -1
- package/dist/apis/deduplication.cjs +6 -6
- package/dist/apis/deduplication.js +1 -1
- package/dist/apis/design.cjs +6 -6
- package/dist/apis/design.js +1 -1
- package/dist/apis/document.cjs +6 -6
- package/dist/apis/document.js +1 -1
- package/dist/apis/email-settings.cjs +6 -6
- package/dist/apis/email-settings.js +1 -1
- package/dist/apis/email-template.cjs +6 -6
- package/dist/apis/email-template.js +1 -1
- package/dist/apis/entity-mapping.cjs +6 -6
- package/dist/apis/entity-mapping.js +1 -1
- package/dist/apis/entity.cjs +6 -6
- package/dist/apis/entity.js +1 -1
- package/dist/apis/environments.cjs +6 -6
- package/dist/apis/environments.js +1 -1
- package/dist/apis/event-catalog.cjs +6 -6
- package/dist/apis/event-catalog.js +1 -1
- package/dist/apis/file.cjs +6 -6
- package/dist/apis/file.js +1 -1
- package/dist/apis/iban.cjs +6 -6
- package/dist/apis/iban.js +1 -1
- package/dist/apis/integration-toolkit.cjs +6 -6
- package/dist/apis/integration-toolkit.d.cts +2 -2
- package/dist/apis/integration-toolkit.d.ts +2 -2
- package/dist/apis/integration-toolkit.js +1 -1
- package/dist/apis/journey.cjs +6 -6
- package/dist/apis/journey.js +1 -1
- package/dist/apis/kanban.cjs +6 -6
- package/dist/apis/kanban.js +1 -1
- package/dist/apis/message.cjs +6 -6
- package/dist/apis/message.js +1 -1
- package/dist/apis/metering.cjs +6 -6
- package/dist/apis/metering.js +1 -1
- package/dist/apis/notes.cjs +6 -6
- package/dist/apis/notes.js +1 -1
- package/dist/apis/notification.cjs +6 -6
- package/dist/apis/notification.js +1 -1
- package/dist/apis/organization.cjs +6 -6
- package/dist/apis/organization.js +1 -1
- package/dist/apis/partner-directory.cjs +6 -6
- package/dist/apis/partner-directory.js +1 -1
- package/dist/apis/permissions.cjs +6 -6
- package/dist/apis/permissions.d.cts +2 -2
- package/dist/apis/permissions.d.ts +2 -2
- package/dist/apis/permissions.js +1 -1
- package/dist/apis/pricing-tier.cjs +6 -6
- package/dist/apis/pricing-tier.js +1 -1
- package/dist/apis/pricing.cjs +6 -6
- package/dist/apis/pricing.js +1 -1
- package/dist/apis/purpose.cjs +6 -6
- package/dist/apis/purpose.js +1 -1
- package/dist/apis/query.cjs +6 -6
- package/dist/apis/query.js +1 -1
- package/dist/apis/sandbox.cjs +6 -6
- package/dist/apis/sandbox.js +1 -1
- package/dist/apis/sharing.cjs +6 -6
- package/dist/apis/sharing.js +1 -1
- package/dist/apis/snapshot.cjs +6 -6
- package/dist/apis/snapshot.js +1 -1
- package/dist/apis/submission.cjs +6 -6
- package/dist/apis/submission.js +1 -1
- package/dist/apis/target.cjs +6 -6
- package/dist/apis/target.js +1 -1
- package/dist/apis/targeting.cjs +6 -6
- package/dist/apis/targeting.js +1 -1
- package/dist/apis/template-variables.cjs +6 -6
- package/dist/apis/template-variables.js +1 -1
- package/dist/apis/user.cjs +6 -6
- package/dist/apis/user.js +1 -1
- package/dist/apis/validation-rules.cjs +6 -6
- package/dist/apis/validation-rules.js +1 -1
- package/dist/apis/webhooks.cjs +6 -6
- package/dist/apis/webhooks.js +1 -1
- package/dist/apis/workflow-definition.cjs +6 -6
- package/dist/apis/workflow-definition.js +1 -1
- package/dist/apis/workflow.cjs +6 -6
- package/dist/apis/workflow.js +1 -1
- package/dist/{chunk-Q6DT64Q2.js → chunk-AUPMKSFK.js} +2 -2
- package/dist/{chunk-6ZJM4MNX.cjs → chunk-DZ6B3JHX.cjs} +2 -2
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/integration-toolkit-2WF2P4OX.cjs +7 -0
- package/dist/integration-toolkit-RDFELVKR.js +7 -0
- package/dist/{integration-toolkit.d-Dj-tULW0.d.cts → integration-toolkit.d-D8kNGpJq.d.cts} +282 -211
- package/dist/{integration-toolkit.d-Dj-tULW0.d.ts → integration-toolkit.d-D8kNGpJq.d.ts} +282 -211
- package/dist/permissions-I2ERCKW4.cjs +7 -0
- package/dist/permissions-K4CL2K2A.js +7 -0
- package/dist/{permissions.d-l6AT8SYP.d.cts → permissions.d-BKoyMhU7.d.cts} +62 -4
- package/dist/{permissions.d-l6AT8SYP.d.ts → permissions.d-BKoyMhU7.d.ts} +62 -4
- package/docs/integration-toolkit.md +100 -180
- package/docs/permissions.md +29 -1
- package/package.json +1 -1
- package/dist/integration-toolkit-LMRJVLJA.js +0 -7
- package/dist/integration-toolkit-YMVNGSQ5.cjs +0 -7
- package/dist/permissions-X3SJVSPC.js +0 -7
- package/dist/permissions-ZJHUIBWY.cjs +0 -7
|
@@ -1390,9 +1390,32 @@ declare namespace Components {
|
|
|
1390
1390
|
* **Upload** (`direction: upload`) pushes epilot files to the external system. It is not
|
|
1391
1391
|
* reachable over the download endpoint; an outbound use case points at it via a `file_proxy`
|
|
1392
1392
|
* delivery, and this configuration owns everything about what gets sent: `fan_out` decides
|
|
1393
|
-
* how many deliveries one event produces,
|
|
1394
|
-
* `
|
|
1395
|
-
* `upload`
|
|
1393
|
+
* how many deliveries one event produces, and every step builds its own request body with
|
|
1394
|
+
* `body_jsonata` — or leaves it empty to send the delivery's files unchanged.
|
|
1395
|
+
* `upload` is REQUIRED and `response` MUST be omitted.
|
|
1396
|
+
*
|
|
1397
|
+
* Two expression languages, split by what they produce. **Handlebars composes strings**:
|
|
1398
|
+
* `url` and `headers` on upload, plus a form-encoded, XML or plain-text `body` on
|
|
1399
|
+
* download. **JSONata produces data**: `body_jsonata` and the per-step `enabled`.
|
|
1400
|
+
* JSONata omits keys whose value is undefined, so an optional field needs no conditional
|
|
1401
|
+
* guard — it is simply absent from the serialized body.
|
|
1402
|
+
*
|
|
1403
|
+
* Handlebars templates are rendered EXACTLY ONCE, against a single context holding `env`,
|
|
1404
|
+
* `file_data`, `steps` and `auth_token`. Writing
|
|
1405
|
+
* `{{ env.some_var }}` resolves it. The legacy `\{{ env.some_var }}` escape belongs to the
|
|
1406
|
+
* two-pass renderer and is NOT rewritten here — it renders as the literal text
|
|
1407
|
+
* `{{ env.some_var }}`, which is rejected (see below) rather than shipped.
|
|
1408
|
+
*
|
|
1409
|
+
* Two guards run on every rendered upload template, because single-pass rendering fails
|
|
1410
|
+
* quietly by default. Both are terminal, and each names what to fix:
|
|
1411
|
+
*
|
|
1412
|
+
* - **residual `{{` after rendering** — a configuration still carrying the `\{{` escape.
|
|
1413
|
+
* Rewrite it without the backslash.
|
|
1414
|
+
* - **a referenced `env` key absent from the environment** — checked BEFORE the URL is
|
|
1415
|
+
* parsed, because an empty value in host position turns
|
|
1416
|
+
* `https://{{env.host}}/document/import` into `https:///document/import`, whose host
|
|
1417
|
+
* then parses as `document`. Provision the environment variable. A key that exists and
|
|
1418
|
+
* is legitimately empty is fine; only absence fails.
|
|
1396
1419
|
*
|
|
1397
1420
|
* OpenAPI 3.0 cannot express this conditional requiredness, so it is enforced by the
|
|
1398
1421
|
* server-side validator, which returns an explicit message naming the offending field.
|
|
@@ -1555,8 +1578,8 @@ declare namespace Components {
|
|
|
1555
1578
|
*
|
|
1556
1579
|
* A pure pointer, deliberately. The outbound use case decides WHEN to deliver — its event
|
|
1557
1580
|
* name plus `event_filter` — and the referenced `file_proxy` use case decides WHAT and HOW:
|
|
1558
|
-
* which items to fan out over (`fan_out`), what values to build (
|
|
1559
|
-
*
|
|
1581
|
+
* which items to fan out over (`fan_out`), what values to build (each
|
|
1582
|
+
* step's `body_jsonata`), and the steps that send them. Keeping every file concern on the
|
|
1560
1583
|
* file_proxy side is what lets one upload recipe be shared by several event subscriptions
|
|
1561
1584
|
* without duplicating any of it.
|
|
1562
1585
|
*
|
|
@@ -1678,9 +1701,32 @@ declare namespace Components {
|
|
|
1678
1701
|
* **Upload** (`direction: upload`) pushes epilot files to the external system. It is not
|
|
1679
1702
|
* reachable over the download endpoint; an outbound use case points at it via a `file_proxy`
|
|
1680
1703
|
* delivery, and this configuration owns everything about what gets sent: `fan_out` decides
|
|
1681
|
-
* how many deliveries one event produces,
|
|
1682
|
-
* `
|
|
1683
|
-
* `upload`
|
|
1704
|
+
* how many deliveries one event produces, and every step builds its own request body with
|
|
1705
|
+
* `body_jsonata` — or leaves it empty to send the delivery's files unchanged.
|
|
1706
|
+
* `upload` is REQUIRED and `response` MUST be omitted.
|
|
1707
|
+
*
|
|
1708
|
+
* Two expression languages, split by what they produce. **Handlebars composes strings**:
|
|
1709
|
+
* `url` and `headers` on upload, plus a form-encoded, XML or plain-text `body` on
|
|
1710
|
+
* download. **JSONata produces data**: `body_jsonata` and the per-step `enabled`.
|
|
1711
|
+
* JSONata omits keys whose value is undefined, so an optional field needs no conditional
|
|
1712
|
+
* guard — it is simply absent from the serialized body.
|
|
1713
|
+
*
|
|
1714
|
+
* Handlebars templates are rendered EXACTLY ONCE, against a single context holding `env`,
|
|
1715
|
+
* `file_data`, `steps` and `auth_token`. Writing
|
|
1716
|
+
* `{{ env.some_var }}` resolves it. The legacy `\{{ env.some_var }}` escape belongs to the
|
|
1717
|
+
* two-pass renderer and is NOT rewritten here — it renders as the literal text
|
|
1718
|
+
* `{{ env.some_var }}`, which is rejected (see below) rather than shipped.
|
|
1719
|
+
*
|
|
1720
|
+
* Two guards run on every rendered upload template, because single-pass rendering fails
|
|
1721
|
+
* quietly by default. Both are terminal, and each names what to fix:
|
|
1722
|
+
*
|
|
1723
|
+
* - **residual `{{` after rendering** — a configuration still carrying the `\{{` escape.
|
|
1724
|
+
* Rewrite it without the backslash.
|
|
1725
|
+
* - **a referenced `env` key absent from the environment** — checked BEFORE the URL is
|
|
1726
|
+
* parsed, because an empty value in host position turns
|
|
1727
|
+
* `https://{{env.host}}/document/import` into `https:///document/import`, whose host
|
|
1728
|
+
* then parses as `document`. Provision the environment variable. A key that exists and
|
|
1729
|
+
* is legitimately empty is fine; only absence fails.
|
|
1684
1730
|
*
|
|
1685
1731
|
* OpenAPI 3.0 cannot express this conditional requiredness, so it is enforced by the
|
|
1686
1732
|
* server-side validator, which returns an explicit message naming the offending field.
|
|
@@ -2182,7 +2228,7 @@ declare namespace Components {
|
|
|
2182
2228
|
* Enum of possible issue codes.
|
|
2183
2229
|
*
|
|
2184
2230
|
*/
|
|
2185
|
-
code: "UNIQUE_ID_COLUMN_MISSING" | "MAPPED_COLUMN_MISSING" | "MALFORMED_ROW" | "INVALID_ENCODING" | "EMPTY_FILE" | "TOO_MANY_ROWS";
|
|
2231
|
+
code: "UNIQUE_ID_COLUMN_MISSING" | "MAPPED_COLUMN_MISSING" | "MALFORMED_ROW" | "INVALID_ENCODING" | "EMPTY_FILE" | "TOO_MANY_ROWS" | "BLANK_ROWS_SKIPPED";
|
|
2186
2232
|
severity: "warning" | "blocking";
|
|
2187
2233
|
/**
|
|
2188
2234
|
* The columns this issue is about, at most one entry per column per entity.
|
|
@@ -2290,7 +2336,7 @@ declare namespace Components {
|
|
|
2290
2336
|
*/
|
|
2291
2337
|
export interface ErpImportValidation {
|
|
2292
2338
|
/**
|
|
2293
|
-
* Data rows
|
|
2339
|
+
* Data rows the import will act on. Rows with no value in any column are dropped before they are counted, and reported as BLANK_ROWS_SKIPPED — so this can be lower than the line count of the file.
|
|
2294
2340
|
*/
|
|
2295
2341
|
total_rows: number;
|
|
2296
2342
|
/**
|
|
@@ -2483,8 +2529,8 @@ declare namespace Components {
|
|
|
2483
2529
|
*
|
|
2484
2530
|
* A pure pointer, deliberately. The outbound use case decides WHEN to deliver — its event
|
|
2485
2531
|
* name plus `event_filter` — and the referenced `file_proxy` use case decides WHAT and HOW:
|
|
2486
|
-
* which items to fan out over (`fan_out`), what values to build (
|
|
2487
|
-
*
|
|
2532
|
+
* which items to fan out over (`fan_out`), what values to build (each
|
|
2533
|
+
* step's `body_jsonata`), and the steps that send them. Keeping every file concern on the
|
|
2488
2534
|
* file_proxy side is what lets one upload recipe be shared by several event subscriptions
|
|
2489
2535
|
* without duplicating any of it.
|
|
2490
2536
|
*
|
|
@@ -2509,78 +2555,33 @@ declare namespace Components {
|
|
|
2509
2555
|
use_case_slug: string;
|
|
2510
2556
|
}
|
|
2511
2557
|
/**
|
|
2512
|
-
*
|
|
2513
|
-
*
|
|
2514
|
-
*
|
|
2515
|
-
* produces one entity update per element. Made explicit with a toggle here because an upload
|
|
2516
|
-
* is also legitimately used without splitting, and because auto-detecting "array means
|
|
2517
|
-
* split" would make a single-element result ambiguous.
|
|
2558
|
+
* Whether one event produces one delivery per file, or a single delivery carrying all of
|
|
2559
|
+
* them. The split is always over the event's `event_attachments` — there is no expression
|
|
2560
|
+
* to write, because an upload only ever runs on events that declare that field.
|
|
2518
2561
|
*
|
|
2519
2562
|
* Each resulting delivery is fully independent: its own idempotency record, its own retry
|
|
2520
|
-
* schedule, its own monitoring events. A four-
|
|
2563
|
+
* schedule, its own monitoring events. A four-file event can therefore end up three-of-four
|
|
2521
2564
|
* delivered, which is the honest state to report.
|
|
2522
2565
|
*
|
|
2523
2566
|
* The split is evaluated ONCE, when the event is enqueued, so item indices — and therefore
|
|
2524
2567
|
* idempotency keys — stay stable across retries.
|
|
2525
2568
|
*
|
|
2569
|
+
* Either way, expressions read the same `$file_data` binding, so no expression needs to
|
|
2570
|
+
* know which mode it runs in. An event carrying no attachments is recorded as `skipped`.
|
|
2571
|
+
*
|
|
2526
2572
|
*/
|
|
2527
2573
|
export interface FileProxyFanOutConfig {
|
|
2528
2574
|
/**
|
|
2529
|
-
* When
|
|
2530
|
-
*
|
|
2575
|
+
* When true, one delivery per attachment, and `$file_data` holds exactly that one
|
|
2576
|
+
* file. When false (or absent), the event produces exactly one delivery and
|
|
2577
|
+
* `$file_data` holds every attachment on the event.
|
|
2531
2578
|
*
|
|
2532
|
-
|
|
2533
|
-
enabled: boolean;
|
|
2534
|
-
/**
|
|
2535
|
-
* JSONata over the event that MUST return an array; one delivery is created per element,
|
|
2536
|
-
* bound as `$item` in `params_mapping`. Required when `enabled` is true.
|
|
2537
|
-
*
|
|
2538
|
-
* Keep this a plain projection — scoping which events are handled at all belongs in the
|
|
2539
|
-
* outbound use case's `event_filter`, not here. A non-array result fails the event with
|
|
2540
|
-
* `FAN_OUT_INVALID_RESULT`; an empty array produces no deliveries and one info-level
|
|
2579
|
+
* An empty `event_attachments` produces no deliveries and one info-level
|
|
2541
2580
|
* `FAN_OUT_EMPTY`, which is the normal outcome for a catch-all subscription seeing an
|
|
2542
2581
|
* event with nothing to send.
|
|
2543
2582
|
*
|
|
2544
|
-
* example:
|
|
2545
|
-
* event_attachments
|
|
2546
|
-
*/
|
|
2547
|
-
split_expression?: string;
|
|
2548
|
-
}
|
|
2549
|
-
/**
|
|
2550
|
-
* A named translation from a value in the event to a value the external system expects.
|
|
2551
|
-
*
|
|
2552
|
-
*/
|
|
2553
|
-
export interface FileProxyLookup {
|
|
2554
|
-
/**
|
|
2555
|
-
* JSONata expression over the event producing the lookup key
|
|
2556
|
-
* example:
|
|
2557
|
-
* ticket._purpose_name[0]
|
|
2558
|
-
*/
|
|
2559
|
-
source: string;
|
|
2560
|
-
/**
|
|
2561
|
-
* Key-to-value translation table
|
|
2562
|
-
* example:
|
|
2563
|
-
* {
|
|
2564
|
-
* "Zählerstandsmeldung": "Zählerstand",
|
|
2565
|
-
* "Kündigung": "Kündigung"
|
|
2566
|
-
* }
|
|
2567
|
-
*/
|
|
2568
|
-
entries: {
|
|
2569
|
-
[name: string]: string;
|
|
2570
|
-
};
|
|
2571
|
-
/**
|
|
2572
|
-
* Value used when the key is absent from `entries`
|
|
2573
|
-
*/
|
|
2574
|
-
default?: string;
|
|
2575
|
-
/**
|
|
2576
|
-
* What happens when the key is not in `entries`.
|
|
2577
|
-
* `default` substitutes `default` silently; `warn` substitutes it and emits a
|
|
2578
|
-
* `LOOKUP_UNMAPPED` warning so the gap is visible without stopping delivery;
|
|
2579
|
-
* `fail` aborts the delivery terminally.
|
|
2580
|
-
* Defaults to `default` when a `default` is set, and to `warn` when it is not.
|
|
2581
|
-
*
|
|
2582
2583
|
*/
|
|
2583
|
-
|
|
2584
|
+
enabled: boolean;
|
|
2584
2585
|
}
|
|
2585
2586
|
export interface FileProxyParam {
|
|
2586
2587
|
/**
|
|
@@ -2641,20 +2642,88 @@ declare namespace Components {
|
|
|
2641
2642
|
[name: string]: string;
|
|
2642
2643
|
};
|
|
2643
2644
|
/**
|
|
2644
|
-
*
|
|
2645
|
-
*
|
|
2646
|
-
*
|
|
2645
|
+
* Upload-only. JSONata producing the request body as DATA; the result is serialized to
|
|
2646
|
+
* JSON and sent. Use this for every JSON body — it cannot emit malformed JSON, and it
|
|
2647
|
+
* omits a key whose value is undefined instead of sending it empty, which is what makes
|
|
2648
|
+
* optional fields work without a conditional guard.
|
|
2649
|
+
*
|
|
2650
|
+
* The evaluation root is the hydrated event, so `contact.customer_pin` and
|
|
2651
|
+
* `ticket._purpose` are reachable directly, unprefixed. **Everything else is a
|
|
2652
|
+
* `$`-prefixed binding**: `$file_data` (the files this delivery carries — see
|
|
2653
|
+
* `FileProxyFanOutConfig` for what it holds in each mode), `$ack_id`, `$env`,
|
|
2654
|
+
* `$steps` (results of the steps already executed, each
|
|
2655
|
+
* `{statusCode, headers, body}`), `$germanDate(iso)` and `$now()`.
|
|
2656
|
+
* Writing `file_data[0].filename` instead of `$file_data[0].filename` yields
|
|
2657
|
+
* nothing — it reads a field named `file_data` on the event, which does not exist.
|
|
2658
|
+
*
|
|
2659
|
+
* Leave this empty to send the delivery's files exactly as they are: the single
|
|
2660
|
+
* attachment object when fanning out, the whole array when not. No mapping is
|
|
2661
|
+
* needed for the common case.
|
|
2662
|
+
*
|
|
2663
|
+
* Must evaluate to an object or an array. Anything else fails the delivery terminally
|
|
2664
|
+
* with `MAPPING_EXPRESSION_FAILED`, naming the step.
|
|
2665
|
+
*
|
|
2666
|
+
* **Only `undefined` omits a key.** `null`, `""`, `false` and `0` are values and are
|
|
2667
|
+
* all sent. Two traps follow from that, and one idiom avoids both:
|
|
2668
|
+
*
|
|
2669
|
+
* - `x ? $string(x)` omits the key when `x` is `0` or `""`, because JSONata reads both
|
|
2670
|
+
* as false. A meter number of `"0"` would silently vanish.
|
|
2671
|
+
* - `: undefined` is not a literal — JSONata has no `undefined` keyword, so it is a
|
|
2672
|
+
* path lookup that happens to find nothing. Against an event that really does carry
|
|
2673
|
+
* a field named `undefined`, it returns that field's value.
|
|
2647
2674
|
*
|
|
2648
|
-
*
|
|
2649
|
-
*
|
|
2650
|
-
* a filename contains a quote. Write `"name": {{json params.fileName}}` instead — the
|
|
2651
|
-
* helper emits the surrounding quotes itself and renders absent values as `null`. Use
|
|
2652
|
-
* `{{jsonEscape v}}` if you prefer to keep your own quotes. Upload configurations whose
|
|
2653
|
-
* body would break on such input are rejected at save time.
|
|
2675
|
+
* Write the **two-arm ternary with no else branch**, which omits the key when the test
|
|
2676
|
+
* is false: `{ "pin": $exists(contact.pin) ? $string(contact.pin) }`.
|
|
2654
2677
|
*
|
|
2655
|
-
*
|
|
2656
|
-
*
|
|
2657
|
-
*
|
|
2678
|
+
* Every `$` binding is checked at save time against the known set, so a mistyped
|
|
2679
|
+
* binding (`$lookup.documentType` for `$file_data[0].filename`) is rejected rather
|
|
2680
|
+
* than silently producing a missing key.
|
|
2681
|
+
*
|
|
2682
|
+
* Not accepted together with `body`, which the upload direction rejects outright.
|
|
2683
|
+
*
|
|
2684
|
+
* example:
|
|
2685
|
+
* { "documentType": "Zählerstand", "fileName": $file_data[0].filename, "fileData": $file_data[0].base64, "pin": $exists(contact.customer_pin) ? $string(contact.customer_pin) }
|
|
2686
|
+
*/
|
|
2687
|
+
body_jsonata?: string;
|
|
2688
|
+
/**
|
|
2689
|
+
* Upload-only, OPTIONAL. JSONata returning a boolean, deciding whether this step
|
|
2690
|
+
* runs at all. Absent means it runs.
|
|
2691
|
+
*
|
|
2692
|
+
* A false result is a BREAK: this step is skipped and so is every step after it,
|
|
2693
|
+
* and the delivery is recorded as `skipped` rather than delivered or failed. It is
|
|
2694
|
+
* acknowledged and never retried, and a `STEP_DISABLED` monitoring event is emitted
|
|
2695
|
+
* at level `info` — a disabled step is the configuration working, not a fault.
|
|
2696
|
+
*
|
|
2697
|
+
* Reads the same bindings a body does, `$steps` included, so it can branch on what
|
|
2698
|
+
* an earlier step returned. This is how a delivery is filtered out: with one
|
|
2699
|
+
* delivery per attachment, a false result on the first step drops that file.
|
|
2700
|
+
*
|
|
2701
|
+
* An expression that throws, or returns a non-boolean, is a terminal
|
|
2702
|
+
* `MAPPING_EXPRESSION_FAILED` instead — a broken predicate must not read as a
|
|
2703
|
+
* deliberate skip.
|
|
2704
|
+
*
|
|
2705
|
+
* example:
|
|
2706
|
+
* $file_data[0].mime_type = "application/pdf"
|
|
2707
|
+
*/
|
|
2708
|
+
enabled?: string;
|
|
2709
|
+
/**
|
|
2710
|
+
* Handlebars template for the request body (write methods only), for bodies that are
|
|
2711
|
+
* NOT JSON — form-encoded, XML, plain text. For a JSON body use `body_jsonata`
|
|
2712
|
+
* instead; it cannot produce malformed JSON.
|
|
2713
|
+
*
|
|
2714
|
+
* **Download-only.** The upload direction rejects it: use `body_jsonata`, or leave
|
|
2715
|
+
* that empty to send the files unchanged.
|
|
2716
|
+
*
|
|
2717
|
+
* Rendered once, against the context described on `FileProxyUseCaseConfiguration`:
|
|
2718
|
+
* `{{ params.* }}`, `{{ env.* }}`, `{{ steps.N.body }}`, `{{ auth_token }}`.
|
|
2719
|
+
*
|
|
2720
|
+
* If a JSON body is written here anyway, **route every user-controlled value through
|
|
2721
|
+
* the `json` helper**: the template engine does not escape, so
|
|
2722
|
+
* `"name":"{{ params.documentName }}"` produces invalid JSON the moment a value
|
|
2723
|
+
* contains a quote. Write `"name": {{json params.documentName}}` instead — the helper
|
|
2724
|
+
* emits the surrounding quotes itself and renders absent values as `null`.
|
|
2725
|
+
*
|
|
2726
|
+
* Mutually exclusive with `body_jsonata`, which is upload-only.
|
|
2658
2727
|
*
|
|
2659
2728
|
*/
|
|
2660
2729
|
body?: string;
|
|
@@ -2666,12 +2735,25 @@ declare namespace Components {
|
|
|
2666
2735
|
/**
|
|
2667
2736
|
* Upload-side settings for a file_proxy use case with `direction: upload`.
|
|
2668
2737
|
* The surrounding file_proxy configuration owns WHAT and HOW to send: `fan_out`,
|
|
2669
|
-
*
|
|
2670
|
-
*
|
|
2738
|
+
* auth, and the steps with their `body_jsonata`. This nested object governs
|
|
2739
|
+
* upload-specific limits and how the final external response is judged. The
|
|
2671
2740
|
* outbound mapping remains a pure pointer to the recipe (see `FileProxyDeliveryConfig`).
|
|
2672
2741
|
*
|
|
2673
2742
|
*/
|
|
2674
2743
|
export interface FileProxyUploadConfig {
|
|
2744
|
+
/**
|
|
2745
|
+
* Ceiling for ALL of a delivery's files together, in bytes. Capped by the platform
|
|
2746
|
+
* limit, which it may lower but never raise.
|
|
2747
|
+
*
|
|
2748
|
+
* Only reachable with `fan_out.enabled: false`, where one delivery carries every
|
|
2749
|
+
* attachment and the worker holds them all resident at once. base64 inflates each
|
|
2750
|
+
* by about a third, so the combined figure is what matters rather than any single
|
|
2751
|
+
* file's size.
|
|
2752
|
+
*
|
|
2753
|
+
* example:
|
|
2754
|
+
* 26214400
|
|
2755
|
+
*/
|
|
2756
|
+
max_total_bytes?: number;
|
|
2675
2757
|
/**
|
|
2676
2758
|
* Per-file ceiling for this use case, in bytes. Files above it fail terminally with
|
|
2677
2759
|
* `FILE_TOO_LARGE` before any bytes are fetched. Defaults to — and is clamped by — the
|
|
@@ -2691,26 +2773,6 @@ declare namespace Components {
|
|
|
2691
2773
|
*
|
|
2692
2774
|
*/
|
|
2693
2775
|
max_delivery_attempts?: number;
|
|
2694
|
-
/**
|
|
2695
|
-
* Optional JSONata predicate evaluated against the final step result
|
|
2696
|
-
* (`{ statusCode, headers, body }`) to decide whether the external system really
|
|
2697
|
-
* accepted the file. When omitted, any 2xx counts as delivered. Use this for systems
|
|
2698
|
-
* that return 200 with an error envelope.
|
|
2699
|
-
*
|
|
2700
|
-
* example:
|
|
2701
|
-
* body.status = 'OK'
|
|
2702
|
-
*/
|
|
2703
|
-
success_when?: string;
|
|
2704
|
-
/**
|
|
2705
|
-
* Optional JSONata expression over the step results yielding the external system's
|
|
2706
|
-
* identifier for the stored document. Recorded on the delivery record and on the
|
|
2707
|
-
* `FILE_PROXY_UPLOADED` monitoring event so an operator can find the document in the
|
|
2708
|
-
* target system.
|
|
2709
|
-
*
|
|
2710
|
-
* example:
|
|
2711
|
-
* steps[-1].body.documentId
|
|
2712
|
-
*/
|
|
2713
|
-
external_id?: string;
|
|
2714
2776
|
}
|
|
2715
2777
|
/**
|
|
2716
2778
|
* Auto-constructs a file proxy download URL. orgId and integrationId are injected from context. Exactly one of use_case_id or use_case_slug must be provided. Using use_case_slug is recommended as it is portable across environments.
|
|
@@ -2815,9 +2877,32 @@ declare namespace Components {
|
|
|
2815
2877
|
* **Upload** (`direction: upload`) pushes epilot files to the external system. It is not
|
|
2816
2878
|
* reachable over the download endpoint; an outbound use case points at it via a `file_proxy`
|
|
2817
2879
|
* delivery, and this configuration owns everything about what gets sent: `fan_out` decides
|
|
2818
|
-
* how many deliveries one event produces,
|
|
2819
|
-
* `
|
|
2820
|
-
* `upload`
|
|
2880
|
+
* how many deliveries one event produces, and every step builds its own request body with
|
|
2881
|
+
* `body_jsonata` — or leaves it empty to send the delivery's files unchanged.
|
|
2882
|
+
* `upload` is REQUIRED and `response` MUST be omitted.
|
|
2883
|
+
*
|
|
2884
|
+
* Two expression languages, split by what they produce. **Handlebars composes strings**:
|
|
2885
|
+
* `url` and `headers` on upload, plus a form-encoded, XML or plain-text `body` on
|
|
2886
|
+
* download. **JSONata produces data**: `body_jsonata` and the per-step `enabled`.
|
|
2887
|
+
* JSONata omits keys whose value is undefined, so an optional field needs no conditional
|
|
2888
|
+
* guard — it is simply absent from the serialized body.
|
|
2889
|
+
*
|
|
2890
|
+
* Handlebars templates are rendered EXACTLY ONCE, against a single context holding `env`,
|
|
2891
|
+
* `file_data`, `steps` and `auth_token`. Writing
|
|
2892
|
+
* `{{ env.some_var }}` resolves it. The legacy `\{{ env.some_var }}` escape belongs to the
|
|
2893
|
+
* two-pass renderer and is NOT rewritten here — it renders as the literal text
|
|
2894
|
+
* `{{ env.some_var }}`, which is rejected (see below) rather than shipped.
|
|
2895
|
+
*
|
|
2896
|
+
* Two guards run on every rendered upload template, because single-pass rendering fails
|
|
2897
|
+
* quietly by default. Both are terminal, and each names what to fix:
|
|
2898
|
+
*
|
|
2899
|
+
* - **residual `{{` after rendering** — a configuration still carrying the `\{{` escape.
|
|
2900
|
+
* Rewrite it without the backslash.
|
|
2901
|
+
* - **a referenced `env` key absent from the environment** — checked BEFORE the URL is
|
|
2902
|
+
* parsed, because an empty value in host position turns
|
|
2903
|
+
* `https://{{env.host}}/document/import` into `https:///document/import`, whose host
|
|
2904
|
+
* then parses as `document`. Provision the environment variable. A key that exists and
|
|
2905
|
+
* is legitimately empty is fine; only absence fails.
|
|
2821
2906
|
*
|
|
2822
2907
|
* OpenAPI 3.0 cannot express this conditional requiredness, so it is enforced by the
|
|
2823
2908
|
* server-side validator, which returns an explicit message naming the offending field.
|
|
@@ -2839,9 +2924,32 @@ declare namespace Components {
|
|
|
2839
2924
|
* **Upload** (`direction: upload`) pushes epilot files to the external system. It is not
|
|
2840
2925
|
* reachable over the download endpoint; an outbound use case points at it via a `file_proxy`
|
|
2841
2926
|
* delivery, and this configuration owns everything about what gets sent: `fan_out` decides
|
|
2842
|
-
* how many deliveries one event produces,
|
|
2843
|
-
* `
|
|
2844
|
-
* `upload`
|
|
2927
|
+
* how many deliveries one event produces, and every step builds its own request body with
|
|
2928
|
+
* `body_jsonata` — or leaves it empty to send the delivery's files unchanged.
|
|
2929
|
+
* `upload` is REQUIRED and `response` MUST be omitted.
|
|
2930
|
+
*
|
|
2931
|
+
* Two expression languages, split by what they produce. **Handlebars composes strings**:
|
|
2932
|
+
* `url` and `headers` on upload, plus a form-encoded, XML or plain-text `body` on
|
|
2933
|
+
* download. **JSONata produces data**: `body_jsonata` and the per-step `enabled`.
|
|
2934
|
+
* JSONata omits keys whose value is undefined, so an optional field needs no conditional
|
|
2935
|
+
* guard — it is simply absent from the serialized body.
|
|
2936
|
+
*
|
|
2937
|
+
* Handlebars templates are rendered EXACTLY ONCE, against a single context holding `env`,
|
|
2938
|
+
* `file_data`, `steps` and `auth_token`. Writing
|
|
2939
|
+
* `{{ env.some_var }}` resolves it. The legacy `\{{ env.some_var }}` escape belongs to the
|
|
2940
|
+
* two-pass renderer and is NOT rewritten here — it renders as the literal text
|
|
2941
|
+
* `{{ env.some_var }}`, which is rejected (see below) rather than shipped.
|
|
2942
|
+
*
|
|
2943
|
+
* Two guards run on every rendered upload template, because single-pass rendering fails
|
|
2944
|
+
* quietly by default. Both are terminal, and each names what to fix:
|
|
2945
|
+
*
|
|
2946
|
+
* - **residual `{{` after rendering** — a configuration still carrying the `\{{` escape.
|
|
2947
|
+
* Rewrite it without the backslash.
|
|
2948
|
+
* - **a referenced `env` key absent from the environment** — checked BEFORE the URL is
|
|
2949
|
+
* parsed, because an empty value in host position turns
|
|
2950
|
+
* `https://{{env.host}}/document/import` into `https:///document/import`, whose host
|
|
2951
|
+
* then parses as `document`. Provision the environment variable. A key that exists and
|
|
2952
|
+
* is legitimately empty is fine; only absence fails.
|
|
2845
2953
|
*
|
|
2846
2954
|
* OpenAPI 3.0 cannot express this conditional requiredness, so it is enforced by the
|
|
2847
2955
|
* server-side validator, which returns an explicit message naming the offending field.
|
|
@@ -2861,111 +2969,29 @@ declare namespace Components {
|
|
|
2861
2969
|
upload?: /**
|
|
2862
2970
|
* Upload-side settings for a file_proxy use case with `direction: upload`.
|
|
2863
2971
|
* The surrounding file_proxy configuration owns WHAT and HOW to send: `fan_out`,
|
|
2864
|
-
*
|
|
2865
|
-
*
|
|
2972
|
+
* auth, and the steps with their `body_jsonata`. This nested object governs
|
|
2973
|
+
* upload-specific limits and how the final external response is judged. The
|
|
2866
2974
|
* outbound mapping remains a pure pointer to the recipe (see `FileProxyDeliveryConfig`).
|
|
2867
2975
|
*
|
|
2868
2976
|
*/
|
|
2869
2977
|
FileProxyUploadConfig;
|
|
2870
2978
|
fan_out?: /**
|
|
2871
|
-
*
|
|
2872
|
-
*
|
|
2873
|
-
*
|
|
2874
|
-
* produces one entity update per element. Made explicit with a toggle here because an upload
|
|
2875
|
-
* is also legitimately used without splitting, and because auto-detecting "array means
|
|
2876
|
-
* split" would make a single-element result ambiguous.
|
|
2979
|
+
* Whether one event produces one delivery per file, or a single delivery carrying all of
|
|
2980
|
+
* them. The split is always over the event's `event_attachments` — there is no expression
|
|
2981
|
+
* to write, because an upload only ever runs on events that declare that field.
|
|
2877
2982
|
*
|
|
2878
2983
|
* Each resulting delivery is fully independent: its own idempotency record, its own retry
|
|
2879
|
-
* schedule, its own monitoring events. A four-
|
|
2984
|
+
* schedule, its own monitoring events. A four-file event can therefore end up three-of-four
|
|
2880
2985
|
* delivered, which is the honest state to report.
|
|
2881
2986
|
*
|
|
2882
2987
|
* The split is evaluated ONCE, when the event is enqueued, so item indices — and therefore
|
|
2883
2988
|
* idempotency keys — stay stable across retries.
|
|
2884
2989
|
*
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
/**
|
|
2888
|
-
* Upload-only, REQUIRED when `direction` is `upload`. JSONata expression evaluated once
|
|
2889
|
-
* per fan-out item, producing the `params` object that step templates read as
|
|
2890
|
-
* `{{ params.* }}`.
|
|
2891
|
-
*
|
|
2892
|
-
* The evaluation root is the hydrated event, so `contact.customer_pin` and
|
|
2893
|
-
* `ticket._purpose` are reachable directly, unprefixed.
|
|
2894
|
-
*
|
|
2895
|
-
* **Everything per-item is a `$`-prefixed JSONata binding**: `$item` (the fan-out
|
|
2896
|
-
* element, absent when `fan_out` is disabled), `$file_base64` and `$file`
|
|
2897
|
-
* (`{filename, mime_type, size_bytes}`) for the resolved file, plus `$constants`,
|
|
2898
|
-
* `$lookups`, `$ack_id`, `$germanDate(iso)` and `$now()`. Writing `item.filename`
|
|
2899
|
-
* instead of `$item.filename` yields nothing — it reads a field named `item` on the
|
|
2900
|
-
* event, which does not exist.
|
|
2990
|
+
* Either way, expressions read the same `$file_data` binding, so no expression needs to
|
|
2991
|
+
* know which mode it runs in. An event carrying no attachments is recorded as `skipped`.
|
|
2901
2992
|
*
|
|
2902
|
-
* Must evaluate to an object. `constants` are shallow-merged underneath the result, so
|
|
2903
|
-
* the expression wins on any key collision.
|
|
2904
|
-
*
|
|
2905
|
-
* example:
|
|
2906
|
-
* { "documentType": $lookups.documentType, "fileName": $item.filename, "fileData": $file_base64, "pin": contact.customer_pin }
|
|
2907
2993
|
*/
|
|
2908
|
-
|
|
2909
|
-
/**
|
|
2910
|
-
* Upload-only. Named translation tables resolved BEFORE `params_mapping` runs and bound
|
|
2911
|
-
* as `$lookups`, so an expression reads `$lookups.documentType` rather than carrying a
|
|
2912
|
-
* conditional chain. Deliberately generic: the next ERP calls the same concept
|
|
2913
|
-
* `Belegart`.
|
|
2914
|
-
*
|
|
2915
|
-
*/
|
|
2916
|
-
lookups?: {
|
|
2917
|
-
[name: string]: /**
|
|
2918
|
-
* A named translation from a value in the event to a value the external system expects.
|
|
2919
|
-
*
|
|
2920
|
-
*/
|
|
2921
|
-
FileProxyLookup;
|
|
2922
|
-
};
|
|
2923
|
-
/**
|
|
2924
|
-
* Upload-only. Fixed values shallow-merged UNDERNEATH the `params_mapping` result — the
|
|
2925
|
-
* expression wins on key collisions, constants only add. Use for the unchanging strings
|
|
2926
|
-
* (tenant, sender, channel) that would otherwise be repeated in every expression.
|
|
2927
|
-
*
|
|
2928
|
-
* example:
|
|
2929
|
-
* {
|
|
2930
|
-
* "mandant": "EPILOT_WNG",
|
|
2931
|
-
* "sender": "KSSP"
|
|
2932
|
-
* }
|
|
2933
|
-
*/
|
|
2934
|
-
constants?: {
|
|
2935
|
-
[name: string]: any;
|
|
2936
|
-
};
|
|
2937
|
-
/**
|
|
2938
|
-
* Upload-only. JSONata returning the attachment-shaped object (`entity_id`, optionally
|
|
2939
|
-
* `s3ref`) whose bytes should be fetched for this delivery. The evaluation root is the
|
|
2940
|
-
* event; the fan-out element is the `$item` binding, same as in `params_mapping`.
|
|
2941
|
-
*
|
|
2942
|
-
* Usually unnecessary: when the fan-out item is itself attachment-shaped it is used
|
|
2943
|
-
* directly. Supply this only when splitting over something that is not the attachment
|
|
2944
|
-
* — for example one delivery per meter reading, each carrying a file referenced from
|
|
2945
|
-
* elsewhere in the event. When nothing resolves, no file is fetched and `file_base64`
|
|
2946
|
-
* is undefined, which is valid for a fan-out that sends metadata only.
|
|
2947
|
-
*
|
|
2948
|
-
* example:
|
|
2949
|
-
* event_attachments[entity_id = $item.file_id][0]
|
|
2950
|
-
*/
|
|
2951
|
-
file_source?: string;
|
|
2952
|
-
/**
|
|
2953
|
-
* Upload-only. Params that MUST be present after `params_mapping` runs. Any listed name
|
|
2954
|
-
* resolving to null or undefined fails the delivery terminally with
|
|
2955
|
-
* `REQUIRED_PARAM_MISSING` before a single step executes.
|
|
2956
|
-
*
|
|
2957
|
-
* This is the generic net behind a lookup's `on_miss: fail`: it catches a required field
|
|
2958
|
-
* going missing for any reason, so the external system never receives a body that is
|
|
2959
|
-
* silently short a field its API requires.
|
|
2960
|
-
*
|
|
2961
|
-
* example:
|
|
2962
|
-
* [
|
|
2963
|
-
* "documentType",
|
|
2964
|
-
* "fileName",
|
|
2965
|
-
* "fileData"
|
|
2966
|
-
* ]
|
|
2967
|
-
*/
|
|
2968
|
-
required_params?: string[];
|
|
2994
|
+
FileProxyFanOutConfig;
|
|
2969
2995
|
/**
|
|
2970
2996
|
* Optional secure proxy attachment for routing all outbound file proxy requests.
|
|
2971
2997
|
* Only `use_case_slug` is supported and the referenced secure_proxy use case
|
|
@@ -2995,8 +3021,8 @@ declare namespace Components {
|
|
|
2995
3021
|
allowed_origins?: string /* uri ^https?:// */[];
|
|
2996
3022
|
/**
|
|
2997
3023
|
* Ordered list of HTTP steps to execute. For `download` these retrieve the file; for
|
|
2998
|
-
* `upload` they deliver it, each assembling its own request body
|
|
2999
|
-
*
|
|
3024
|
+
* `upload` they deliver it, each assembling its own request body — `body_jsonata` for
|
|
3025
|
+
* JSON, `body` for anything else.
|
|
3000
3026
|
*
|
|
3001
3027
|
*/
|
|
3002
3028
|
steps: [
|
|
@@ -3084,9 +3110,32 @@ declare namespace Components {
|
|
|
3084
3110
|
* **Upload** (`direction: upload`) pushes epilot files to the external system. It is not
|
|
3085
3111
|
* reachable over the download endpoint; an outbound use case points at it via a `file_proxy`
|
|
3086
3112
|
* delivery, and this configuration owns everything about what gets sent: `fan_out` decides
|
|
3087
|
-
* how many deliveries one event produces,
|
|
3088
|
-
* `
|
|
3089
|
-
* `upload`
|
|
3113
|
+
* how many deliveries one event produces, and every step builds its own request body with
|
|
3114
|
+
* `body_jsonata` — or leaves it empty to send the delivery's files unchanged.
|
|
3115
|
+
* `upload` is REQUIRED and `response` MUST be omitted.
|
|
3116
|
+
*
|
|
3117
|
+
* Two expression languages, split by what they produce. **Handlebars composes strings**:
|
|
3118
|
+
* `url` and `headers` on upload, plus a form-encoded, XML or plain-text `body` on
|
|
3119
|
+
* download. **JSONata produces data**: `body_jsonata` and the per-step `enabled`.
|
|
3120
|
+
* JSONata omits keys whose value is undefined, so an optional field needs no conditional
|
|
3121
|
+
* guard — it is simply absent from the serialized body.
|
|
3122
|
+
*
|
|
3123
|
+
* Handlebars templates are rendered EXACTLY ONCE, against a single context holding `env`,
|
|
3124
|
+
* `file_data`, `steps` and `auth_token`. Writing
|
|
3125
|
+
* `{{ env.some_var }}` resolves it. The legacy `\{{ env.some_var }}` escape belongs to the
|
|
3126
|
+
* two-pass renderer and is NOT rewritten here — it renders as the literal text
|
|
3127
|
+
* `{{ env.some_var }}`, which is rejected (see below) rather than shipped.
|
|
3128
|
+
*
|
|
3129
|
+
* Two guards run on every rendered upload template, because single-pass rendering fails
|
|
3130
|
+
* quietly by default. Both are terminal, and each names what to fix:
|
|
3131
|
+
*
|
|
3132
|
+
* - **residual `{{` after rendering** — a configuration still carrying the `\{{` escape.
|
|
3133
|
+
* Rewrite it without the backslash.
|
|
3134
|
+
* - **a referenced `env` key absent from the environment** — checked BEFORE the URL is
|
|
3135
|
+
* parsed, because an empty value in host position turns
|
|
3136
|
+
* `https://{{env.host}}/document/import` into `https:///document/import`, whose host
|
|
3137
|
+
* then parses as `document`. Provision the environment variable. A key that exists and
|
|
3138
|
+
* is legitimately empty is fine; only absence fails.
|
|
3090
3139
|
*
|
|
3091
3140
|
* OpenAPI 3.0 cannot express this conditional requiredness, so it is enforced by the
|
|
3092
3141
|
* server-side validator, which returns an explicit message naming the offending field.
|
|
@@ -5363,7 +5412,7 @@ declare namespace Components {
|
|
|
5363
5412
|
*/
|
|
5364
5413
|
name: string;
|
|
5365
5414
|
/**
|
|
5366
|
-
* JSONata expression to transform the event payload. Required for webhook delivery, ignored for poll delivery, and rejected for file_proxy delivery — a file_proxy payload is built by the referenced use case's
|
|
5415
|
+
* JSONata expression to transform the event payload. Required for webhook delivery, ignored for poll delivery, and rejected for file_proxy delivery — a file_proxy payload is built by the referenced use case's steps, so accepting an expression here would silently do nothing.
|
|
5367
5416
|
* example:
|
|
5368
5417
|
* { "id": entity._id, "customer": entity.customer_name }
|
|
5369
5418
|
*/
|
|
@@ -7076,9 +7125,32 @@ declare namespace Components {
|
|
|
7076
7125
|
* **Upload** (`direction: upload`) pushes epilot files to the external system. It is not
|
|
7077
7126
|
* reachable over the download endpoint; an outbound use case points at it via a `file_proxy`
|
|
7078
7127
|
* delivery, and this configuration owns everything about what gets sent: `fan_out` decides
|
|
7079
|
-
* how many deliveries one event produces,
|
|
7080
|
-
* `
|
|
7081
|
-
* `upload`
|
|
7128
|
+
* how many deliveries one event produces, and every step builds its own request body with
|
|
7129
|
+
* `body_jsonata` — or leaves it empty to send the delivery's files unchanged.
|
|
7130
|
+
* `upload` is REQUIRED and `response` MUST be omitted.
|
|
7131
|
+
*
|
|
7132
|
+
* Two expression languages, split by what they produce. **Handlebars composes strings**:
|
|
7133
|
+
* `url` and `headers` on upload, plus a form-encoded, XML or plain-text `body` on
|
|
7134
|
+
* download. **JSONata produces data**: `body_jsonata` and the per-step `enabled`.
|
|
7135
|
+
* JSONata omits keys whose value is undefined, so an optional field needs no conditional
|
|
7136
|
+
* guard — it is simply absent from the serialized body.
|
|
7137
|
+
*
|
|
7138
|
+
* Handlebars templates are rendered EXACTLY ONCE, against a single context holding `env`,
|
|
7139
|
+
* `file_data`, `steps` and `auth_token`. Writing
|
|
7140
|
+
* `{{ env.some_var }}` resolves it. The legacy `\{{ env.some_var }}` escape belongs to the
|
|
7141
|
+
* two-pass renderer and is NOT rewritten here — it renders as the literal text
|
|
7142
|
+
* `{{ env.some_var }}`, which is rejected (see below) rather than shipped.
|
|
7143
|
+
*
|
|
7144
|
+
* Two guards run on every rendered upload template, because single-pass rendering fails
|
|
7145
|
+
* quietly by default. Both are terminal, and each names what to fix:
|
|
7146
|
+
*
|
|
7147
|
+
* - **residual `{{` after rendering** — a configuration still carrying the `\{{` escape.
|
|
7148
|
+
* Rewrite it without the backslash.
|
|
7149
|
+
* - **a referenced `env` key absent from the environment** — checked BEFORE the URL is
|
|
7150
|
+
* parsed, because an empty value in host position turns
|
|
7151
|
+
* `https://{{env.host}}/document/import` into `https:///document/import`, whose host
|
|
7152
|
+
* then parses as `document`. Provision the environment variable. A key that exists and
|
|
7153
|
+
* is legitimately empty is fine; only absence fails.
|
|
7082
7154
|
*
|
|
7083
7155
|
* OpenAPI 3.0 cannot express this conditional requiredness, so it is enforced by the
|
|
7084
7156
|
* server-side validator, which returns an explicit message naming the offending field.
|
|
@@ -10471,7 +10543,6 @@ type ExternalMonitoringSpan = Components.Schemas.ExternalMonitoringSpan;
|
|
|
10471
10543
|
type FileProxyAuth = Components.Schemas.FileProxyAuth;
|
|
10472
10544
|
type FileProxyDeliveryConfig = Components.Schemas.FileProxyDeliveryConfig;
|
|
10473
10545
|
type FileProxyFanOutConfig = Components.Schemas.FileProxyFanOutConfig;
|
|
10474
|
-
type FileProxyLookup = Components.Schemas.FileProxyLookup;
|
|
10475
10546
|
type FileProxyParam = Components.Schemas.FileProxyParam;
|
|
10476
10547
|
type FileProxyResponseConfig = Components.Schemas.FileProxyResponseConfig;
|
|
10477
10548
|
type FileProxySecureProxyAttachment = Components.Schemas.FileProxySecureProxyAttachment;
|
|
@@ -10617,4 +10688,4 @@ type ValidateErpImportRequest = Components.Schemas.ValidateErpImportRequest;
|
|
|
10617
10688
|
type WebhookDeliveryConfig = Components.Schemas.WebhookDeliveryConfig;
|
|
10618
10689
|
type WebhookStatus = Components.Schemas.WebhookStatus;
|
|
10619
10690
|
|
|
10620
|
-
export { type FileProxyAuth as $, type AccessLogEntry as A, type EmbeddedUseCaseRequest as B, type Client as C, type DeleteIntegrationAppMappingRequest as D, type EmbeddedFileProxyUseCaseRequest as E, type EmbeddedUseCaseRequestBase as F, type EntityPruneScopeUpdate as G, type EntityUpdate as H, type EnvVarRefConfig as I, type EnvironmentFieldConfig as J, type ErpEvent as K, type ErpEventV3 as L, type ErpImportError as M, type ErpImportFilePreview as N, type OperationMethods as O, Paths as P, type ErpImportIssue as Q, type ErpImportJob as R, type ErpImportList as S, type ErpImportProgress as T, type ErpImportUseCaseSuggestion as U, type ErpImportValidation as V, type ErpUpdatesEventsV2Request as W, type ErpUpdatesEventsV3Request as X, type ErrorResponseBase as Y, type ExecuteErpImportRequest as Z, type ExternalMonitoringSpan as _, Components as a, type
|
|
10691
|
+
export { type FileProxyAuth as $, type AccessLogEntry as A, type EmbeddedUseCaseRequest as B, type Client as C, type DeleteIntegrationAppMappingRequest as D, type EmbeddedFileProxyUseCaseRequest as E, type EmbeddedUseCaseRequestBase as F, type EntityPruneScopeUpdate as G, type EntityUpdate as H, type EnvVarRefConfig as I, type EnvironmentFieldConfig as J, type ErpEvent as K, type ErpEventV3 as L, type ErpImportError as M, type ErpImportFilePreview as N, type OperationMethods as O, Paths as P, type ErpImportIssue as Q, type ErpImportJob as R, type ErpImportList as S, type ErpImportProgress as T, type ErpImportUseCaseSuggestion as U, type ErpImportValidation as V, type ErpUpdatesEventsV2Request as W, type ErpUpdatesEventsV3Request as X, type ErrorResponseBase as Y, type ExecuteErpImportRequest as Z, type ExternalMonitoringSpan as _, Components as a, type NotificationRecipient as a$, type FileProxyDeliveryConfig as a0, type FileProxyFanOutConfig as a1, type FileProxyParam as a2, type FileProxyResponseConfig as a3, type FileProxySecureProxyAttachment as a4, type FileProxyStep as a5, type FileProxyUploadConfig as a6, type FileProxyUrlConfig as a7, type FileProxyUrlParam as a8, type FileProxyUrlParams as a9, type IntegrationObjectV1 as aA, type IntegrationSettings as aB, type IntegrationWithUseCases as aC, type ManagedCallAuth as aD, type ManagedCallErrorResponse as aE, type ManagedCallExecuteRequest as aF, type ManagedCallExecuteResponse as aG, type ManagedCallOperation as aH, type ManagedCallOperationConfig as aI, type ManagedCallUseCase as aJ, type ManagedCallUseCaseHistoryEntry as aK, type MappingSimulationRequest as aL, type MappingSimulationResponse as aM, type MappingSimulationV2Request as aN, type MappingSimulationWarning as aO, type MeterReadingPruneScopeConfig as aP, type MeterReadingPruneScopeUpdate as aQ, type MeterReadingUpdate as aR, type MeterUniqueIdsConfig as aS, type MonitoringEventV2 as aT, type MonitoringStats as aU, type MonitoringStatsV2 as aV, type MonitoringTraceResponse as aW, type NotificationChannelSet as aX, type NotificationDigestConfig as aY, type NotificationHistoryItem as aZ, type NotificationHistoryResponse as a_, type FileProxyUseCase as aa, type FileProxyUseCaseConfiguration as ab, type FileProxyUseCaseHistoryEntry as ac, type GenerateTypesPreviewResponse as ad, type GenerateTypesRequest as ae, type GenerateTypesResponse as af, type GetMonitoringStatsRequest as ag, type GetMonitoringStatsV2Request as ah, type GetMonitoringTimeSeriesRequest as ai, type GetMonitoringTimeSeriesV2Request as aj, type InboundIntegrationEventConfiguration as ak, type InboundMonitoringEvent as al, type InboundUseCase as am, type InboundUseCaseHistoryEntry as an, type IngestExternalMonitoringEventsRequest as ao, type IngestExternalMonitoringEventsResponse as ap, type Integration as aq, type IntegrationAppMapping as ar, type IntegrationConfigurationV1 as as, type IntegrationConfigurationV2 as at, type IntegrationEditableFields as au, type IntegrationEntity as av, type IntegrationEntityField as aw, type IntegrationFieldV1 as ax, type IntegrationMeterReading as ay, type IntegrationNotificationConfig as az, type PathsDictionary as b, type UnblockOutboundStreamResponse as b$, type NotificationRule as b0, type NotificationRuleStatus as b1, type NotificationStatusResponse as b2, type OutboundConflict as b3, type OutboundDlqListResponse as b4, type OutboundDlqMessage as b5, type OutboundFileProxyTargetStatus as b6, type OutboundIntegrationEventConfiguration as b7, type OutboundMapping as b8, type OutboundMessage as b9, type RelationUniqueIdField as bA, type RepeatableFieldType as bB, type ReplayEventsRequest as bC, type RuleBaselineBucket as bD, type RuleBaselineStatus as bE, type S3Reference as bF, type SecureProxyRequest as bG, type SecureProxyResponse as bH, type SecureProxySummary as bI, type SecureProxyUpstreamError as bJ, type SecureProxyUseCase as bK, type SecureProxyUseCaseConfiguration as bL, type SecureProxyUseCaseHistoryEntry as bM, type SecureProxyWhitelist as bN, type SecureProxyWhitelistUpdate as bO, type SetIntegrationAppMappingRequest as bP, type SuggestErpImportUseCasesResponse as bQ, type TestNotificationRequest as bR, type TestNotificationResponse as bS, type TimeSeriesBreakdownItemV2 as bT, type TimeSeriesBucket as bU, type TimeSeriesBucketV2 as bV, type TriggerErpActionRequest as bW, type TriggerWebhookResp as bX, type TypeAnnotations as bY, type TypeDescriptor as bZ, type UnblockOutboundStreamRequest as b_, type OutboundMonitoringEvent as ba, type OutboundPollStatus as bb, type OutboundStatusResponse as bc, type OutboundUseCase as bd, type OutboundUseCaseHistoryEntry as be, type OutboundUseCaseStatus as bf, type PollDeliveryConfig as bg, type PollOutboundMessagesRequest as bh, type PollOutboundMessagesResponse as bi, type PortalOrigin as bj, type PortalRefConfig as bk, type PortalRefFilter as bl, type PruneScopeConfig as bm, type QueryAccessLogsRequest as bn, type QueryEventsRequest as bo, type QueryInboundMonitoringEventsRequest as bp, type QueryMonitoringEventsV2Request as bq, type QueryOutboundMonitoringEventsRequest as br, type RedriveOutboundDlqRequest as bs, type RedriveOutboundDlqResponse as bt, type RedriveOutboundDlqResult as bu, type RelationConfig as bv, type RelationItemConfig as bw, type RelationRefItemConfig as bx, type RelationRefValueConfig as by, type RelationRefsConfig as bz, type AckOutboundMessagesRequest as c, type UpdateFileProxyUseCaseRequest as c0, type UpdateInboundUseCaseRequest as c1, type UpdateIntegrationRequest as c2, type UpdateManagedCallUseCaseRequest as c3, type UpdateOutboundUseCaseRequest as c4, type UpdateSecureProxyUseCaseRequest as c5, type UpdateUseCaseRequest as c6, type UpdateUseCaseRequestBase as c7, type UpsertDocumentationPageRequest as c8, type UpsertIntegrationWithUseCasesRequest as c9, type UseCase as ca, type UseCaseBase as cb, type UseCaseHistoryEntry as cc, type UseCaseHistoryEntryBase as cd, type UseCaseTypePreview as ce, type ValidateErpImportRequest as cf, type WebhookDeliveryConfig as cg, type WebhookStatus as ch, type AckOutboundMessagesResponse as d, type AckResult as e, type AutoRefreshSettings as f, type CommitTypesRequest as g, type CommitTypesResponse as h, type ConnectorConfig as i, type CreateErpImportRequest as j, type CreateErpImportResponse as k, type CreateFileProxyUseCaseRequest as l, type CreateInboundUseCaseRequest as m, type CreateIntegrationRequest as n, type CreateManagedCallUseCaseRequest as o, type CreateOutboundUseCaseRequest as p, type CreateSecureProxyUseCaseRequest as q, type CreateUseCaseRequest as r, type CreateUseCaseRequestBase as s, type DeliveryConfig as t, type DocumentationPage as u, type DocumentationPageSummary as v, type EmbeddedInboundUseCaseRequest as w, type EmbeddedManagedCallUseCaseRequest as x, type EmbeddedOutboundUseCaseRequest as y, type EmbeddedSecureProxyUseCaseRequest as z };
|