@epilot/cli 0.1.151 → 0.1.153
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 +13 -12
- package/definitions/customer-portal.json +249 -9
- package/definitions/event-catalog.json +83 -12
- package/definitions/file.json +392 -0
- package/definitions/journey.json +526 -5
- package/dist/bin/epilot.js +6 -6
- package/dist/{chunk-ZLLWCEDW.js → chunk-V3XTUOKN.js} +10 -3
- package/dist/{completion-3IL3RXHU.js → completion-ZKB2LRUW.js} +1 -1
- package/dist/{upgrade-S7CTZFQG.js → upgrade-PU3DKU37.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/definitions/app.json
CHANGED
|
@@ -511,6 +511,7 @@
|
|
|
511
511
|
}
|
|
512
512
|
],
|
|
513
513
|
"requestBody": {
|
|
514
|
+
"required": true,
|
|
514
515
|
"content": {
|
|
515
516
|
"application/json": {
|
|
516
517
|
"schema": {
|
|
@@ -1974,6 +1975,7 @@
|
|
|
1974
1975
|
}
|
|
1975
1976
|
},
|
|
1976
1977
|
"InstallRequest": {
|
|
1978
|
+
"required": true,
|
|
1977
1979
|
"content": {
|
|
1978
1980
|
"application/json": {
|
|
1979
1981
|
"schema": {
|
|
@@ -2254,7 +2256,7 @@
|
|
|
2254
2256
|
"code": {
|
|
2255
2257
|
"type": "string",
|
|
2256
2258
|
"maxLength": 307200,
|
|
2257
|
-
"description": "JavaScript code to execute. Must declare a top-level `async function handler(input, context)`. Maximum size: 300KB (hard limit). Security restrictions: eval
|
|
2259
|
+
"description": "JavaScript code to execute. Must declare a top-level `async function handler(input, context)`. Maximum size: 300KB (hard limit). Security restrictions: dynamic code evaluation via `eval` or the `Function` constructor is not allowed.\n"
|
|
2258
2260
|
},
|
|
2259
2261
|
"schedule": {
|
|
2260
2262
|
"type": "string",
|
|
@@ -3417,7 +3419,7 @@
|
|
|
3417
3419
|
"intervals": {
|
|
3418
3420
|
"type": "array",
|
|
3419
3421
|
"deprecated": true,
|
|
3420
|
-
"description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
|
|
3422
|
+
"description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n`custom` marks a period-based consumption source: records carry the `period` they cover instead of sitting on a fixed grid, and the portal shows the whole data range as one bar per record.\n",
|
|
3421
3423
|
"items": {
|
|
3422
3424
|
"type": "string",
|
|
3423
3425
|
"enum": [
|
|
@@ -3425,7 +3427,8 @@
|
|
|
3425
3427
|
"PT1H",
|
|
3426
3428
|
"P1D",
|
|
3427
3429
|
"P1M",
|
|
3428
|
-
"P1Y"
|
|
3430
|
+
"P1Y",
|
|
3431
|
+
"custom"
|
|
3429
3432
|
]
|
|
3430
3433
|
}
|
|
3431
3434
|
},
|
|
@@ -3529,7 +3532,7 @@
|
|
|
3529
3532
|
"intervals": {
|
|
3530
3533
|
"type": "array",
|
|
3531
3534
|
"deprecated": true,
|
|
3532
|
-
"description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
|
|
3535
|
+
"description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n`custom` marks a period-based consumption source: records carry the `period` they cover instead of sitting on a fixed grid, and the portal shows the whole data range as one bar per record.\n",
|
|
3533
3536
|
"items": {
|
|
3534
3537
|
"type": "string",
|
|
3535
3538
|
"enum": [
|
|
@@ -3537,7 +3540,8 @@
|
|
|
3537
3540
|
"PT1H",
|
|
3538
3541
|
"P1D",
|
|
3539
3542
|
"P1M",
|
|
3540
|
-
"P1Y"
|
|
3543
|
+
"P1Y",
|
|
3544
|
+
"custom"
|
|
3541
3545
|
]
|
|
3542
3546
|
}
|
|
3543
3547
|
},
|
|
@@ -3716,7 +3720,7 @@
|
|
|
3716
3720
|
"additionalProperties": false
|
|
3717
3721
|
},
|
|
3718
3722
|
"PortalExtensionHookVisualizationMetadata": {
|
|
3719
|
-
"description": "Hook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape can vary per meter/contract. The expected response to the call is:\n - 200 with a JSON body of shape:\n {\n \"type_options\": [\n { \"id\": \"ht\", \"label\": { \"en\": \"High tariff\" }, \"aggregation_group\": \"consumption\", \"statistical_method\": \"sum\", \"unit\": \"kWh\", \"color\": \"primary\", \"precision\": 2 },\n ...\n ],\n \"intervals\": [\"PT15M\", \"PT1H\", \"P1D\", \"P1M\", \"P1Y\"],\n \"data_range\": { \"from\": \"2024-01-01T00:00:00Z\", \"to\": \"2026-05-01T00:00:00Z\" }\n }\n Each type option carries its own `statistical_method`, which describes the method already applied to that type's data and dictates the chart shape: `sum` is rendered as a bar chart; `min`, `average`, and `max` are rendered as a line chart. A single visualization can therefore mix bar-shaped types with line-shaped types. Defaults to `sum` when omitted.\n Each type option may also customize its rendering: `color` picks a Spark palette color (`primary`, `slate`, `mauve`, `orange`, `red`, `tomato`, `amber`, `green`, `blue`) used to draw the type's series; `precision` sets the number of decimal places to show for that type's values (axis labels, tooltips, summaries). Both are optional — the consumer falls back to its own defaults when they are omitted.\n `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):\n - bar chart (`sum`): same-group types are stacked into a single bar (e.g. ht/nt summed into total consumption); different-group types render side-by-side.\n - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.\n All fields are optional; the consumer falls back to its defaults for whatever the hook does not return.\nThe portal looks up this hook implicitly per extension (one `visualizationMetadata` hook per extension) — there is no need for a data-retrieval hook to reference it explicitly.\n",
|
|
3723
|
+
"description": "Hook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape can vary per meter/contract. The expected response to the call is:\n - 200 with a JSON body of shape:\n {\n \"type_options\": [\n { \"id\": \"ht\", \"label\": { \"en\": \"High tariff\" }, \"aggregation_group\": \"consumption\", \"statistical_method\": \"sum\", \"unit\": \"kWh\", \"color\": \"primary\", \"precision\": 2 },\n ...\n ],\n \"intervals\": [\"PT15M\", \"PT1H\", \"P1D\", \"P1M\", \"P1Y\", \"custom\"],\n \"data_range\": { \"from\": \"2024-01-01T00:00:00Z\", \"to\": \"2026-05-01T00:00:00Z\" }\n }\n Each type option carries its own `statistical_method`, which describes the method already applied to that type's data and dictates the chart shape: `sum` is rendered as a bar chart; `min`, `average`, and `max` are rendered as a line chart. A single visualization can therefore mix bar-shaped types with line-shaped types. Defaults to `sum` when omitted.\n Each type option may also customize its rendering: `color` picks a Spark palette color (`primary`, `slate`, `mauve`, `orange`, `red`, `tomato`, `amber`, `green`, `blue`) used to draw the type's series; `precision` sets the number of decimal places to show for that type's values (axis labels, tooltips, summaries). Both are optional — the consumer falls back to its own defaults when they are omitted.\n `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):\n - bar chart (`sum`): same-group types are stacked into a single bar (e.g. ht/nt summed into total consumption); different-group types render side-by-side.\n - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.\n All fields are optional; the consumer falls back to its defaults for whatever the hook does not return.\nThe portal looks up this hook implicitly per extension (one `visualizationMetadata` hook per extension) — there is no need for a data-retrieval hook to reference it explicitly.\n",
|
|
3720
3724
|
"type": "object",
|
|
3721
3725
|
"properties": {
|
|
3722
3726
|
"id": {
|
|
@@ -3833,7 +3837,7 @@
|
|
|
3833
3837
|
"intervals": {
|
|
3834
3838
|
"type": "array",
|
|
3835
3839
|
"deprecated": true,
|
|
3836
|
-
"description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
|
|
3840
|
+
"description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n`custom` marks a period-based consumption source: records carry the `period` they cover instead of sitting on a fixed grid, and the portal shows the whole data range as one bar per record.\n",
|
|
3837
3841
|
"items": {
|
|
3838
3842
|
"type": "string",
|
|
3839
3843
|
"enum": [
|
|
@@ -3841,7 +3845,8 @@
|
|
|
3841
3845
|
"PT1H",
|
|
3842
3846
|
"P1D",
|
|
3843
3847
|
"P1M",
|
|
3844
|
-
"P1Y"
|
|
3848
|
+
"P1Y",
|
|
3849
|
+
"custom"
|
|
3845
3850
|
]
|
|
3846
3851
|
}
|
|
3847
3852
|
},
|
|
@@ -5276,10 +5281,6 @@
|
|
|
5276
5281
|
}
|
|
5277
5282
|
}
|
|
5278
5283
|
},
|
|
5279
|
-
"use_static_ips": {
|
|
5280
|
-
"type": "boolean",
|
|
5281
|
-
"description": "If set, requests are sent from epilot's static egress IPs. Mutually exclusive with secure_proxy."
|
|
5282
|
-
},
|
|
5283
5284
|
"secure_proxy": {
|
|
5284
5285
|
"$ref": "#/components/schemas/PortalExtensionSecureProxy"
|
|
5285
5286
|
}
|
|
@@ -543,10 +543,7 @@
|
|
|
543
543
|
},
|
|
544
544
|
"language": {
|
|
545
545
|
"type": "string",
|
|
546
|
-
"
|
|
547
|
-
"de",
|
|
548
|
-
"en"
|
|
549
|
-
]
|
|
546
|
+
"example": "de"
|
|
550
547
|
}
|
|
551
548
|
}
|
|
552
549
|
}
|
|
@@ -962,11 +959,12 @@
|
|
|
962
959
|
"PT1H",
|
|
963
960
|
"P1D",
|
|
964
961
|
"P1M",
|
|
965
|
-
"P1Y"
|
|
962
|
+
"P1Y",
|
|
963
|
+
"custom"
|
|
966
964
|
]
|
|
967
965
|
},
|
|
968
966
|
"required": true,
|
|
969
|
-
"description": "Interval between consumption data points (e.g., PT15M for 15 minutes, PT1H for hourly). Not all intervals have to be supported."
|
|
967
|
+
"description": "Interval between consumption data points (e.g., PT15M for 15 minutes, PT1H for hourly). Not all intervals have to be supported. `custom` is period-based retrieval for sources that advertise it in their `visualizationMetadata.intervals`: the App returns one record per period it has data for within `from`..`to`, each carrying `period`, and the portal renders every record as its own bar.\n"
|
|
970
968
|
},
|
|
971
969
|
{
|
|
972
970
|
"in": "query",
|
|
@@ -1020,6 +1018,30 @@
|
|
|
1020
1018
|
"en": "Billing period 1",
|
|
1021
1019
|
"de": "Abrechnungszeitraum 1"
|
|
1022
1020
|
}
|
|
1021
|
+
},
|
|
1022
|
+
"period": {
|
|
1023
|
+
"type": "object",
|
|
1024
|
+
"description": "The date range this value covers. Required for period-based sources (`interval=custom`), whose records don't sit on a fixed time grid: the portal renders one bar per record, orders them by `period.from`, and — unless `label` is set — labels each bar with the formatted `from` - `to` range. Ignored for interval-based retrieval.\n",
|
|
1025
|
+
"properties": {
|
|
1026
|
+
"from": {
|
|
1027
|
+
"type": "string",
|
|
1028
|
+
"format": "date-time",
|
|
1029
|
+
"description": "Start of the covered period."
|
|
1030
|
+
},
|
|
1031
|
+
"to": {
|
|
1032
|
+
"type": "string",
|
|
1033
|
+
"format": "date-time",
|
|
1034
|
+
"description": "End of the covered period. Shown as given in the fallback label, so pass the date the period visibly ends on (consecutive periods may share this boundary).\n"
|
|
1035
|
+
}
|
|
1036
|
+
},
|
|
1037
|
+
"required": [
|
|
1038
|
+
"from",
|
|
1039
|
+
"to"
|
|
1040
|
+
],
|
|
1041
|
+
"example": {
|
|
1042
|
+
"from": "2024-01-03T00:00:00.000Z",
|
|
1043
|
+
"to": "2025-01-05T00:00:00.000Z"
|
|
1044
|
+
}
|
|
1023
1045
|
}
|
|
1024
1046
|
},
|
|
1025
1047
|
"required": [
|
|
@@ -11537,6 +11559,46 @@
|
|
|
11537
11559
|
}
|
|
11538
11560
|
}
|
|
11539
11561
|
},
|
|
11562
|
+
"TooManyRequests": {
|
|
11563
|
+
"description": "The upstream service rate-limited the request",
|
|
11564
|
+
"content": {
|
|
11565
|
+
"application/json": {
|
|
11566
|
+
"schema": {
|
|
11567
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
11568
|
+
}
|
|
11569
|
+
}
|
|
11570
|
+
}
|
|
11571
|
+
},
|
|
11572
|
+
"BadGateway": {
|
|
11573
|
+
"description": "The upstream service failed to process the request",
|
|
11574
|
+
"content": {
|
|
11575
|
+
"application/json": {
|
|
11576
|
+
"schema": {
|
|
11577
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
11578
|
+
}
|
|
11579
|
+
}
|
|
11580
|
+
}
|
|
11581
|
+
},
|
|
11582
|
+
"ServiceUnavailable": {
|
|
11583
|
+
"description": "The requested feature is not configured",
|
|
11584
|
+
"content": {
|
|
11585
|
+
"application/json": {
|
|
11586
|
+
"schema": {
|
|
11587
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
11588
|
+
}
|
|
11589
|
+
}
|
|
11590
|
+
}
|
|
11591
|
+
},
|
|
11592
|
+
"GatewayTimeout": {
|
|
11593
|
+
"description": "The upstream service timed out",
|
|
11594
|
+
"content": {
|
|
11595
|
+
"application/json": {
|
|
11596
|
+
"schema": {
|
|
11597
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
11598
|
+
}
|
|
11599
|
+
}
|
|
11600
|
+
}
|
|
11601
|
+
},
|
|
11540
11602
|
"ConfirmUserInvalidRequest": {
|
|
11541
11603
|
"description": "The request could not be validated",
|
|
11542
11604
|
"content": {
|
|
@@ -12571,6 +12633,17 @@
|
|
|
12571
12633
|
"new_design": {
|
|
12572
12634
|
"type": "boolean",
|
|
12573
12635
|
"description": "Enable or disable the new design for the portal"
|
|
12636
|
+
},
|
|
12637
|
+
"mcp_enabled": {
|
|
12638
|
+
"type": "boolean",
|
|
12639
|
+
"description": "Enable the MCP (AI agent) connector channel for this portal"
|
|
12640
|
+
},
|
|
12641
|
+
"mcp_grant_version": {
|
|
12642
|
+
"type": "integer",
|
|
12643
|
+
"minimum": 0,
|
|
12644
|
+
"default": 0,
|
|
12645
|
+
"readOnly": true,
|
|
12646
|
+
"description": "Server-managed generation used to invalidate MCP grants after the connector is disabled or re-enabled"
|
|
12574
12647
|
}
|
|
12575
12648
|
}
|
|
12576
12649
|
},
|
|
@@ -15959,7 +16032,7 @@
|
|
|
15959
16032
|
},
|
|
15960
16033
|
"q": {
|
|
15961
16034
|
"type": "string",
|
|
15962
|
-
"description": "
|
|
16035
|
+
"description": "Free-text keyword search. This is plain text, **not** a query language: punctuation separates words rather than carrying any special meaning, and every word has to match. Use `q_fields` to restrict which fields are searched, and `filters`/`targets` for structured filtering. Overly long input is trimmed, and input with no words in it is ignored — the remaining parameters still apply.",
|
|
15963
16036
|
"example": "contract"
|
|
15964
16037
|
},
|
|
15965
16038
|
"q_fields": {
|
|
@@ -16597,7 +16670,7 @@
|
|
|
16597
16670
|
},
|
|
16598
16671
|
"intervals": {
|
|
16599
16672
|
"type": "array",
|
|
16600
|
-
"description": "Intervals supported for the current context. If omitted, all intervals are assumed supported.",
|
|
16673
|
+
"description": "Intervals supported for the current context. If omitted, all intervals are assumed supported. `custom` marks a period-based consumption source: the portal requests the whole `data_range` once with `interval=custom` and renders one bar per returned record (see `period` on the consumption data point) instead of offering interval / date navigation or period comparison. When `custom` is present it takes precedence over any fixed intervals also listed.\n",
|
|
16601
16674
|
"items": {
|
|
16602
16675
|
"type": "string",
|
|
16603
16676
|
"enum": [
|
|
@@ -16605,7 +16678,8 @@
|
|
|
16605
16678
|
"PT1H",
|
|
16606
16679
|
"P1D",
|
|
16607
16680
|
"P1M",
|
|
16608
|
-
"P1Y"
|
|
16681
|
+
"P1Y",
|
|
16682
|
+
"custom"
|
|
16609
16683
|
]
|
|
16610
16684
|
}
|
|
16611
16685
|
},
|
|
@@ -19219,6 +19293,17 @@
|
|
|
19219
19293
|
"new_design": {
|
|
19220
19294
|
"type": "boolean",
|
|
19221
19295
|
"description": "Enable or disable the new design for the portal"
|
|
19296
|
+
},
|
|
19297
|
+
"mcp_enabled": {
|
|
19298
|
+
"type": "boolean",
|
|
19299
|
+
"description": "Enable the MCP (AI agent) connector channel for this portal"
|
|
19300
|
+
},
|
|
19301
|
+
"mcp_grant_version": {
|
|
19302
|
+
"type": "integer",
|
|
19303
|
+
"minimum": 0,
|
|
19304
|
+
"default": 0,
|
|
19305
|
+
"readOnly": true,
|
|
19306
|
+
"description": "Server-managed generation used to invalidate MCP grants after the connector is disabled or re-enabled"
|
|
19222
19307
|
}
|
|
19223
19308
|
}
|
|
19224
19309
|
},
|
|
@@ -19877,6 +19962,10 @@
|
|
|
19877
19962
|
"type": "boolean",
|
|
19878
19963
|
"description": "Whether the org is in canary mode"
|
|
19879
19964
|
},
|
|
19965
|
+
"is_legacy_design": {
|
|
19966
|
+
"type": "boolean",
|
|
19967
|
+
"description": "Whether the portal still runs the old design (the `new_design` feature setting is off). Legacy portals are always served the frozen legacy bundle, even when the org is in canary."
|
|
19968
|
+
},
|
|
19880
19969
|
"redirect_to": {
|
|
19881
19970
|
"type": "string",
|
|
19882
19971
|
"description": "The URL to redirect to",
|
|
@@ -19934,6 +20023,157 @@
|
|
|
19934
20023
|
"example": true
|
|
19935
20024
|
}
|
|
19936
20025
|
}
|
|
20026
|
+
},
|
|
20027
|
+
"SupportReportType": {
|
|
20028
|
+
"type": "string",
|
|
20029
|
+
"enum": [
|
|
20030
|
+
"bug",
|
|
20031
|
+
"feedback"
|
|
20032
|
+
]
|
|
20033
|
+
},
|
|
20034
|
+
"SupportRequestAttachment": {
|
|
20035
|
+
"type": "object",
|
|
20036
|
+
"required": [
|
|
20037
|
+
"filename",
|
|
20038
|
+
"mime_type",
|
|
20039
|
+
"contents"
|
|
20040
|
+
],
|
|
20041
|
+
"properties": {
|
|
20042
|
+
"filename": {
|
|
20043
|
+
"type": "string",
|
|
20044
|
+
"maxLength": 255,
|
|
20045
|
+
"example": "screenshot.png"
|
|
20046
|
+
},
|
|
20047
|
+
"mime_type": {
|
|
20048
|
+
"type": "string",
|
|
20049
|
+
"example": "image/png"
|
|
20050
|
+
},
|
|
20051
|
+
"contents": {
|
|
20052
|
+
"type": "string",
|
|
20053
|
+
"description": "Base64-encoded file, optionally as a data URL"
|
|
20054
|
+
}
|
|
20055
|
+
}
|
|
20056
|
+
},
|
|
20057
|
+
"CleverPvContext": {
|
|
20058
|
+
"type": "object",
|
|
20059
|
+
"properties": {
|
|
20060
|
+
"screen": {
|
|
20061
|
+
"type": "string",
|
|
20062
|
+
"maxLength": 256,
|
|
20063
|
+
"description": "Current Clever PV screen identifier"
|
|
20064
|
+
},
|
|
20065
|
+
"version": {
|
|
20066
|
+
"type": "string",
|
|
20067
|
+
"maxLength": 64,
|
|
20068
|
+
"description": "Clever PV application version"
|
|
20069
|
+
},
|
|
20070
|
+
"connection_state": {
|
|
20071
|
+
"type": "string",
|
|
20072
|
+
"maxLength": 64,
|
|
20073
|
+
"description": "Device connectivity at the time of the report"
|
|
20074
|
+
},
|
|
20075
|
+
"locale": {
|
|
20076
|
+
"type": "string",
|
|
20077
|
+
"maxLength": 32,
|
|
20078
|
+
"description": "App locale at the time of the report"
|
|
20079
|
+
},
|
|
20080
|
+
"timezone": {
|
|
20081
|
+
"type": "string",
|
|
20082
|
+
"maxLength": 64,
|
|
20083
|
+
"description": "App timezone at the time of the report"
|
|
20084
|
+
},
|
|
20085
|
+
"firmware_version": {
|
|
20086
|
+
"type": "string",
|
|
20087
|
+
"maxLength": 64,
|
|
20088
|
+
"description": "Device firmware version when known"
|
|
20089
|
+
},
|
|
20090
|
+
"build": {
|
|
20091
|
+
"type": "string",
|
|
20092
|
+
"maxLength": 64,
|
|
20093
|
+
"description": "App build identifier when known"
|
|
20094
|
+
},
|
|
20095
|
+
"trace_id": {
|
|
20096
|
+
"type": "string",
|
|
20097
|
+
"maxLength": 128,
|
|
20098
|
+
"description": "Client-generated correlation id for the report"
|
|
20099
|
+
},
|
|
20100
|
+
"device": {
|
|
20101
|
+
"type": "object",
|
|
20102
|
+
"additionalProperties": true,
|
|
20103
|
+
"description": "Optional device snapshot from the portal. Attached as a JSON file on\nthe original Zendesk comment. Must include id when present. Serialized\nJSON is limited to 256 KiB.\n"
|
|
20104
|
+
},
|
|
20105
|
+
"vendor": {
|
|
20106
|
+
"type": "object",
|
|
20107
|
+
"additionalProperties": true,
|
|
20108
|
+
"properties": {
|
|
20109
|
+
"id": {
|
|
20110
|
+
"type": "string"
|
|
20111
|
+
},
|
|
20112
|
+
"name": {
|
|
20113
|
+
"type": "string"
|
|
20114
|
+
}
|
|
20115
|
+
},
|
|
20116
|
+
"description": "Optional onboarding vendor id and name. Included in the Zendesk\ncomment. Not a portal entity.\n"
|
|
20117
|
+
}
|
|
20118
|
+
}
|
|
20119
|
+
},
|
|
20120
|
+
"CreateSupportRequest": {
|
|
20121
|
+
"type": "object",
|
|
20122
|
+
"required": [
|
|
20123
|
+
"report_type",
|
|
20124
|
+
"description",
|
|
20125
|
+
"submission_id"
|
|
20126
|
+
],
|
|
20127
|
+
"properties": {
|
|
20128
|
+
"report_type": {
|
|
20129
|
+
"$ref": "#/components/schemas/SupportReportType"
|
|
20130
|
+
},
|
|
20131
|
+
"description": {
|
|
20132
|
+
"type": "string",
|
|
20133
|
+
"minLength": 1,
|
|
20134
|
+
"maxLength": 8000
|
|
20135
|
+
},
|
|
20136
|
+
"submission_id": {
|
|
20137
|
+
"type": "string",
|
|
20138
|
+
"minLength": 8,
|
|
20139
|
+
"maxLength": 128,
|
|
20140
|
+
"pattern": "^[A-Za-z0-9._-]+$",
|
|
20141
|
+
"description": "Client-generated id for correlating the request"
|
|
20142
|
+
},
|
|
20143
|
+
"site_id": {
|
|
20144
|
+
"$ref": "#/components/schemas/EntityId"
|
|
20145
|
+
},
|
|
20146
|
+
"device_id": {
|
|
20147
|
+
"$ref": "#/components/schemas/EntityId"
|
|
20148
|
+
},
|
|
20149
|
+
"clever_pv": {
|
|
20150
|
+
"$ref": "#/components/schemas/CleverPvContext"
|
|
20151
|
+
},
|
|
20152
|
+
"attachments": {
|
|
20153
|
+
"type": "array",
|
|
20154
|
+
"maxItems": 5,
|
|
20155
|
+
"items": {
|
|
20156
|
+
"$ref": "#/components/schemas/SupportRequestAttachment"
|
|
20157
|
+
}
|
|
20158
|
+
}
|
|
20159
|
+
}
|
|
20160
|
+
},
|
|
20161
|
+
"SupportRequestResult": {
|
|
20162
|
+
"type": "object",
|
|
20163
|
+
"required": [
|
|
20164
|
+
"reference",
|
|
20165
|
+
"status"
|
|
20166
|
+
],
|
|
20167
|
+
"properties": {
|
|
20168
|
+
"reference": {
|
|
20169
|
+
"type": "string",
|
|
20170
|
+
"example": "12345"
|
|
20171
|
+
},
|
|
20172
|
+
"status": {
|
|
20173
|
+
"type": "string",
|
|
20174
|
+
"example": "new"
|
|
20175
|
+
}
|
|
20176
|
+
}
|
|
19937
20177
|
}
|
|
19938
20178
|
}
|
|
19939
20179
|
},
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"post": {
|
|
53
53
|
"operationId": "createCustomEvent",
|
|
54
54
|
"summary": "createCustomEvent",
|
|
55
|
-
"description": "Reserve an org-scoped custom event name and persist its immutable v1.0 draft definition.",
|
|
55
|
+
"description": "Reserve an org-scoped custom event name and persist its immutable v1.0 draft definition. Custom events are always projected from an entity graph: entity_graph is required and, in guided mapping mode, every schema field needs a graph_source expression. Caller-supplied trigger fields are ignored for custom events.",
|
|
56
56
|
"tags": [
|
|
57
57
|
"Event Catalog"
|
|
58
58
|
],
|
|
@@ -159,6 +159,58 @@
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
},
|
|
162
|
+
"put": {
|
|
163
|
+
"operationId": "replaceCustomEventDraft",
|
|
164
|
+
"summary": "replaceCustomEventDraft",
|
|
165
|
+
"description": "Replace the complete v1.0 definition of an org-scoped custom event while it is still an\nunpublished draft. Drafts have no consumers, so their definition is not yet immutable;\nthe event name is the identity and cannot change. Publication remains a separate action.\n",
|
|
166
|
+
"tags": [
|
|
167
|
+
"Event Catalog"
|
|
168
|
+
],
|
|
169
|
+
"parameters": [
|
|
170
|
+
{
|
|
171
|
+
"name": "event_name",
|
|
172
|
+
"in": "path",
|
|
173
|
+
"required": true,
|
|
174
|
+
"schema": {
|
|
175
|
+
"type": "string"
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
"requestBody": {
|
|
180
|
+
"required": true,
|
|
181
|
+
"content": {
|
|
182
|
+
"application/json": {
|
|
183
|
+
"schema": {
|
|
184
|
+
"$ref": "#/components/schemas/CreateCustomEventPayload"
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"responses": {
|
|
190
|
+
"200": {
|
|
191
|
+
"description": "Updated draft event configuration",
|
|
192
|
+
"content": {
|
|
193
|
+
"application/json": {
|
|
194
|
+
"schema": {
|
|
195
|
+
"$ref": "#/components/schemas/EventConfig"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
"400": {
|
|
201
|
+
"description": "Definition is invalid or the body event_name differs from the path"
|
|
202
|
+
},
|
|
203
|
+
"404": {
|
|
204
|
+
"description": "Custom event not found"
|
|
205
|
+
},
|
|
206
|
+
"409": {
|
|
207
|
+
"description": "Event is built-in or no longer an unpublished draft"
|
|
208
|
+
},
|
|
209
|
+
"422": {
|
|
210
|
+
"description": "Definition could not be stored"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
},
|
|
162
214
|
"delete": {
|
|
163
215
|
"operationId": "deprecateCustomEvent",
|
|
164
216
|
"summary": "deprecateCustomEvent",
|
|
@@ -775,16 +827,19 @@
|
|
|
775
827
|
"default": false,
|
|
776
828
|
"example": true
|
|
777
829
|
},
|
|
830
|
+
"api_trigger": {
|
|
831
|
+
"type": "boolean",
|
|
832
|
+
"default": true,
|
|
833
|
+
"description": "Allows explicit API-source triggering, not HTTP transport. Automation also uses HTTP. Automation-only events always disable this source."
|
|
834
|
+
},
|
|
778
835
|
"automation_trigger_only": {
|
|
779
836
|
"type": "boolean",
|
|
780
|
-
"readOnly": true,
|
|
781
837
|
"description": "Whether explicit triggering is restricted to Automation. When true, callers must pass\n`_trigger_source_type: automation` and a stable `_trigger_source`. The trigger uses\nstrict entity readiness validation and the durable Automation outbox.\nRequires `automation_trigger: true` and cannot be combined with `entity_operation`.\n",
|
|
782
838
|
"default": false,
|
|
783
839
|
"example": true
|
|
784
840
|
},
|
|
785
841
|
"automation_trigger_seed_node": {
|
|
786
842
|
"type": "string",
|
|
787
|
-
"readOnly": true,
|
|
788
843
|
"description": "Required entity-graph seed node for an Automation-only trigger. When configured, an\nexplicit trigger using any other node is rejected before hydration.\n",
|
|
789
844
|
"example": "ticket"
|
|
790
845
|
},
|
|
@@ -840,7 +895,7 @@
|
|
|
840
895
|
},
|
|
841
896
|
"CreateCustomEventPayload": {
|
|
842
897
|
"type": "object",
|
|
843
|
-
"description": "Complete immutable custom-event v1.0 definition. Publication is a separate conditional action.",
|
|
898
|
+
"description": "Complete immutable custom-event v1.0 definition projected from a required entity graph. Publication is a separate conditional action.",
|
|
844
899
|
"properties": {
|
|
845
900
|
"event_name": {
|
|
846
901
|
"type": "string",
|
|
@@ -877,6 +932,21 @@
|
|
|
877
932
|
"type": "boolean",
|
|
878
933
|
"default": true
|
|
879
934
|
},
|
|
935
|
+
"api_trigger": {
|
|
936
|
+
"type": "boolean",
|
|
937
|
+
"default": true,
|
|
938
|
+
"description": "Allows API-source triggering independently of Automation (which also uses HTTP). Must be false for Automation-only events."
|
|
939
|
+
},
|
|
940
|
+
"automation_trigger_only": {
|
|
941
|
+
"type": "boolean",
|
|
942
|
+
"default": false,
|
|
943
|
+
"description": "Restricts triggering to Automation with durable delivery and strict readiness. Requires automation_trigger true, api_trigger false, and no entity_operation."
|
|
944
|
+
},
|
|
945
|
+
"automation_trigger_seed_node": {
|
|
946
|
+
"type": "string",
|
|
947
|
+
"minLength": 1,
|
|
948
|
+
"description": "Required cardinality-one graph seed for an Automation-only event. Inherited restrictions cannot be changed."
|
|
949
|
+
},
|
|
880
950
|
"mapping": {
|
|
881
951
|
"$ref": "#/components/schemas/EventMapping"
|
|
882
952
|
},
|
|
@@ -891,7 +961,8 @@
|
|
|
891
961
|
"required": [
|
|
892
962
|
"event_name",
|
|
893
963
|
"event_title",
|
|
894
|
-
"schema_fields"
|
|
964
|
+
"schema_fields",
|
|
965
|
+
"entity_graph"
|
|
895
966
|
]
|
|
896
967
|
},
|
|
897
968
|
"EventMapping": {
|
|
@@ -918,7 +989,7 @@
|
|
|
918
989
|
},
|
|
919
990
|
"CustomEventLineage": {
|
|
920
991
|
"type": "object",
|
|
921
|
-
"description": "Optional catalog lineage to a separately named base event. It does not replace the base event.",
|
|
992
|
+
"description": "Optional catalog lineage to a separately named base event. Built-in inheritance is validated against this exact registered version; its trigger restrictions cannot be removed or replaced. It does not replace the base event.",
|
|
922
993
|
"properties": {
|
|
923
994
|
"base_event_name": {
|
|
924
995
|
"type": "string"
|
|
@@ -1038,7 +1109,7 @@
|
|
|
1038
1109
|
},
|
|
1039
1110
|
"graph_source": {
|
|
1040
1111
|
"type": "string",
|
|
1041
|
-
"description": "
|
|
1112
|
+
"description": "JSONata expression to extract the field value from the hydrated entity graph.\n\nThe expression has access to all hydrated graph nodes by their node ID.\nOptional for built-in events, where an unset value must be provided as input when\ntriggering the event. Required for custom events in guided mapping mode.\n\nExamples:\n - \"ticket.meter_reading_value\" (simple path)\n - \"contact.email[0].email\" (nested/array access)\n - \"ticket.reading_timestamp ?? $now()\" (with fallback)\n - \"$number(meter_counter.reading_value)\" (type coercion)\n",
|
|
1042
1113
|
"example": "ticket.meter_reading_value"
|
|
1043
1114
|
}
|
|
1044
1115
|
},
|
|
@@ -1080,7 +1151,7 @@
|
|
|
1080
1151
|
]
|
|
1081
1152
|
},
|
|
1082
1153
|
"CustomSchemaField": {
|
|
1083
|
-
"description": "Custom v1 fields support JSON Schema values and context entities; attachment semantics are built-in-only.",
|
|
1154
|
+
"description": "Custom v1 fields support graph-projected JSON Schema values and context entities; attachment semantics are built-in-only.",
|
|
1084
1155
|
"oneOf": [
|
|
1085
1156
|
{
|
|
1086
1157
|
"$ref": "#/components/schemas/PrimitiveField"
|
|
@@ -1585,7 +1656,7 @@
|
|
|
1585
1656
|
},
|
|
1586
1657
|
"attribute": {
|
|
1587
1658
|
"type": "array",
|
|
1588
|
-
"description": "Optional list of entity attributes to track for changes.\nIf specified, the event only triggers when these attributes are affected.\n- On createEntity: attribute must be defined in the entity payload\n- On updateEntity: attribute must be in diff.added, diff.updated, or diff.deleted\nIf not specified, all changes to matching entities will trigger the event.\n",
|
|
1659
|
+
"description": "Optional list of entity attributes to track for changes.\nIf specified, the event only triggers when these attributes are affected.\n- On createEntity: attribute must be defined in the entity payload\n- On updateEntity: attribute must be in diff.added, diff.updated, or diff.deleted\nIf not specified, all changes to matching entities will trigger the event.\nDerived built-in triggers retain every inherited attribute; additions are OR alternatives.\nAn inherited unfiltered trigger cannot be narrowed by adding attribute filters.\n",
|
|
1589
1660
|
"items": {
|
|
1590
1661
|
"type": "string"
|
|
1591
1662
|
},
|
|
@@ -1597,7 +1668,7 @@
|
|
|
1597
1668
|
},
|
|
1598
1669
|
"purpose": {
|
|
1599
1670
|
"type": "array",
|
|
1600
|
-
"description": "Optional list of purpose names to filter by.\nThe entity must have at least one matching purpose in its _purpose array.\nPurpose names are matched against the taxonomy classification names (e.g., \"Kündigung\", \"Umzug/Auszug\").\nIf
|
|
1671
|
+
"description": "Optional list of purpose names to filter by.\nThe entity must have at least one matching purpose in its _purpose array.\nPurpose names are matched against the taxonomy classification names (e.g., \"Kündigung\", \"Umzug/Auszug\").\nFor custom events, names are allowed only when inherited unchanged from the actual\npinned built-in lineage version. New purposes must use stable purpose_filters IDs.\nNames and stable IDs are OR alternatives; operation/schema/attribute conditions still apply.\nIf neither purpose nor purpose_filters is specified, the event triggers regardless of purpose.\n",
|
|
1601
1672
|
"items": {
|
|
1602
1673
|
"type": "string"
|
|
1603
1674
|
},
|
|
@@ -1608,7 +1679,7 @@
|
|
|
1608
1679
|
},
|
|
1609
1680
|
"purpose_filters": {
|
|
1610
1681
|
"type": "array",
|
|
1611
|
-
"description": "Stable purpose IDs plus immutable display-name snapshots for custom events.",
|
|
1682
|
+
"description": "Stable purpose IDs plus immutable display-name snapshots for custom events. Additive to inherited purpose names (OR). Inherited unfiltered triggers cannot be narrowed.",
|
|
1612
1683
|
"items": {
|
|
1613
1684
|
"$ref": "#/components/schemas/PurposeFilterSnapshot"
|
|
1614
1685
|
}
|
|
@@ -1734,7 +1805,7 @@
|
|
|
1734
1805
|
},
|
|
1735
1806
|
"fields": {
|
|
1736
1807
|
"type": "object",
|
|
1737
|
-
"description": "Input field values for
|
|
1808
|
+
"description": "Input field values for built-in events. Keys must match the event's\nschema_fields definitions. Values are validated against each\nfield's JSON Schema. Ignored for custom events, whose fields are\nalways projected from the entity graph.\n",
|
|
1738
1809
|
"additionalProperties": true
|
|
1739
1810
|
},
|
|
1740
1811
|
"skip_hydration": {
|