@epilot/cli 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/definitions/app.json +539 -31
- package/definitions/automation.json +42 -0
- package/definitions/configuration-hub.json +757 -7
- package/definitions/customer-portal.json +1063 -63
- package/definitions/email-settings.json +86 -4
- package/definitions/entity.json +568 -4
- package/definitions/event-catalog.json +256 -1
- package/definitions/file.json +262 -4
- package/definitions/integration-toolkit.json +480 -4
- package/definitions/journey.json +21 -1
- package/definitions/kanban.json +2 -1
- package/definitions/metering.json +728 -64
- package/definitions/notes.json +175 -130
- package/definitions/pricing.json +163 -84
- package/definitions/webhooks.json +149 -4
- package/definitions/workflow-definition.json +52 -0
- package/definitions/workflow.json +24 -0
- package/dist/bin/epilot.js +6 -6
- package/dist/{chunk-QSYX2PUB.js → chunk-OBSR3RKB.js} +51 -15
- package/dist/{completion-AZYWK6IZ.js → completion-AUP6EFBO.js} +1 -1
- package/dist/{upgrade-O5G6HRVY.js → upgrade-C6AGEAVE.js} +1 -1
- package/package.json +1 -1
package/definitions/app.json
CHANGED
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
{
|
|
18
18
|
"name": "App Analytics",
|
|
19
19
|
"description": "Analytics for installed apps"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "App Proxy",
|
|
23
|
+
"description": "Forward requests to external APIs via registered proxy targets"
|
|
20
24
|
}
|
|
21
25
|
],
|
|
22
26
|
"servers": [
|
|
@@ -1468,6 +1472,100 @@
|
|
|
1468
1472
|
}
|
|
1469
1473
|
}
|
|
1470
1474
|
}
|
|
1475
|
+
},
|
|
1476
|
+
"/v1/public/app/{appId}/proxy/{proxyName}/{path}": {
|
|
1477
|
+
"parameters": [
|
|
1478
|
+
{
|
|
1479
|
+
"name": "appId",
|
|
1480
|
+
"in": "path",
|
|
1481
|
+
"required": true,
|
|
1482
|
+
"schema": {
|
|
1483
|
+
"type": "string"
|
|
1484
|
+
},
|
|
1485
|
+
"description": "ID of the installed app"
|
|
1486
|
+
},
|
|
1487
|
+
{
|
|
1488
|
+
"name": "proxyName",
|
|
1489
|
+
"in": "path",
|
|
1490
|
+
"required": true,
|
|
1491
|
+
"schema": {
|
|
1492
|
+
"type": "string"
|
|
1493
|
+
},
|
|
1494
|
+
"description": "Name of the proxy target as defined in the app manifest"
|
|
1495
|
+
},
|
|
1496
|
+
{
|
|
1497
|
+
"name": "path",
|
|
1498
|
+
"in": "path",
|
|
1499
|
+
"required": true,
|
|
1500
|
+
"schema": {
|
|
1501
|
+
"type": "string"
|
|
1502
|
+
},
|
|
1503
|
+
"description": "Path to forward to the proxy target"
|
|
1504
|
+
}
|
|
1505
|
+
],
|
|
1506
|
+
"get": {
|
|
1507
|
+
"summary": "publicProxyGet",
|
|
1508
|
+
"operationId": "publicProxyGet",
|
|
1509
|
+
"description": "Forward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)",
|
|
1510
|
+
"tags": [
|
|
1511
|
+
"App Proxy"
|
|
1512
|
+
],
|
|
1513
|
+
"security": [
|
|
1514
|
+
{
|
|
1515
|
+
"EpilotAuth": []
|
|
1516
|
+
}
|
|
1517
|
+
],
|
|
1518
|
+
"responses": {
|
|
1519
|
+
"200": {
|
|
1520
|
+
"description": "Proxied response from the target API"
|
|
1521
|
+
},
|
|
1522
|
+
"403": {
|
|
1523
|
+
"description": "Forbidden - app not installed or no public component uses this proxy"
|
|
1524
|
+
},
|
|
1525
|
+
"404": {
|
|
1526
|
+
"description": "Proxy target not found"
|
|
1527
|
+
},
|
|
1528
|
+
"502": {
|
|
1529
|
+
"description": "Bad gateway - proxy target unreachable or error"
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
},
|
|
1533
|
+
"post": {
|
|
1534
|
+
"summary": "publicProxyPost",
|
|
1535
|
+
"operationId": "publicProxyPost",
|
|
1536
|
+
"description": "Forward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)",
|
|
1537
|
+
"tags": [
|
|
1538
|
+
"App Proxy"
|
|
1539
|
+
],
|
|
1540
|
+
"security": [
|
|
1541
|
+
{
|
|
1542
|
+
"EpilotAuth": []
|
|
1543
|
+
}
|
|
1544
|
+
],
|
|
1545
|
+
"requestBody": {
|
|
1546
|
+
"content": {
|
|
1547
|
+
"application/json": {
|
|
1548
|
+
"schema": {
|
|
1549
|
+
"type": "object"
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
}
|
|
1553
|
+
},
|
|
1554
|
+
"responses": {
|
|
1555
|
+
"200": {
|
|
1556
|
+
"description": "Proxied response from the target API"
|
|
1557
|
+
},
|
|
1558
|
+
"403": {
|
|
1559
|
+
"description": "Forbidden - app not installed or no public component uses this proxy"
|
|
1560
|
+
},
|
|
1561
|
+
"404": {
|
|
1562
|
+
"description": "Proxy target not found"
|
|
1563
|
+
},
|
|
1564
|
+
"502": {
|
|
1565
|
+
"description": "Bad gateway - proxy target unreachable or error"
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1471
1569
|
}
|
|
1472
1570
|
},
|
|
1473
1571
|
"components": {
|
|
@@ -1744,13 +1842,56 @@
|
|
|
1744
1842
|
"type": "string",
|
|
1745
1843
|
"description": "Detailed description of what this configuration option does"
|
|
1746
1844
|
},
|
|
1845
|
+
"repeatable": {
|
|
1846
|
+
"type": "boolean",
|
|
1847
|
+
"description": "When true, the configured value is an array of entries, each tagged with a stable\nserver-assigned `id`. Combine with any `type` to express \"many of this thing.\"\nDefaults to false.\n"
|
|
1848
|
+
},
|
|
1849
|
+
"fields": {
|
|
1850
|
+
"type": "array",
|
|
1851
|
+
"description": "Field declarations — required when `type: object`. Each entry describes one primitive\nsub-field of the object value. Object types may not nest (no `type: object` inside `fields`).\n",
|
|
1852
|
+
"items": {
|
|
1853
|
+
"$ref": "#/components/schemas/ObjectField"
|
|
1854
|
+
}
|
|
1855
|
+
},
|
|
1747
1856
|
"value": {
|
|
1748
|
-
"
|
|
1749
|
-
|
|
1857
|
+
"description": "The configured value for this option. Shape depends on `type` and `repeatable`:\n- primitive `type` (text/number/boolean/secret), `repeatable` false → primitive\n- primitive `type`, `repeatable` true → array of `{id, value}` entries\n- `type: object`, `repeatable` false → object with declared fields\n- `type: object`, `repeatable` true → array of `{id, ...declared fields}` entries\n\n`id` is server-assigned and stable across edits so consumers can reference entries\nby id rather than by index.\n"
|
|
1858
|
+
},
|
|
1859
|
+
"type": {
|
|
1860
|
+
"type": "string",
|
|
1861
|
+
"enum": [
|
|
1862
|
+
"text",
|
|
1863
|
+
"number",
|
|
1750
1864
|
"boolean",
|
|
1751
|
-
"
|
|
1865
|
+
"secret",
|
|
1866
|
+
"object"
|
|
1752
1867
|
],
|
|
1753
|
-
"description": "The
|
|
1868
|
+
"description": "The type of this option. `object` declares a structured value whose fields are listed\nunder `fields`. Combine with `repeatable: true` to express a list of these objects.\n"
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
},
|
|
1872
|
+
"ObjectField": {
|
|
1873
|
+
"type": "object",
|
|
1874
|
+
"description": "One declared field inside a `type: object` option. Fields are primitives — object nesting\nis not supported.\n",
|
|
1875
|
+
"required": [
|
|
1876
|
+
"key",
|
|
1877
|
+
"type"
|
|
1878
|
+
],
|
|
1879
|
+
"properties": {
|
|
1880
|
+
"key": {
|
|
1881
|
+
"type": "string",
|
|
1882
|
+
"description": "Unique identifier for this field within the parent object."
|
|
1883
|
+
},
|
|
1884
|
+
"label": {
|
|
1885
|
+
"type": "string",
|
|
1886
|
+
"description": "Human-readable label for the field."
|
|
1887
|
+
},
|
|
1888
|
+
"description": {
|
|
1889
|
+
"type": "string",
|
|
1890
|
+
"description": "Detailed description of what this field is for."
|
|
1891
|
+
},
|
|
1892
|
+
"required": {
|
|
1893
|
+
"type": "boolean",
|
|
1894
|
+
"description": "Flag to indicate if this field must be filled."
|
|
1754
1895
|
},
|
|
1755
1896
|
"type": {
|
|
1756
1897
|
"type": "string",
|
|
@@ -1759,7 +1900,8 @@
|
|
|
1759
1900
|
"number",
|
|
1760
1901
|
"boolean",
|
|
1761
1902
|
"secret"
|
|
1762
|
-
]
|
|
1903
|
+
],
|
|
1904
|
+
"description": "Primitive type of this field."
|
|
1763
1905
|
}
|
|
1764
1906
|
}
|
|
1765
1907
|
},
|
|
@@ -1775,12 +1917,7 @@
|
|
|
1775
1917
|
"description": "Key matching a config_option from the component"
|
|
1776
1918
|
},
|
|
1777
1919
|
"value": {
|
|
1778
|
-
"
|
|
1779
|
-
"string",
|
|
1780
|
-
"boolean",
|
|
1781
|
-
"number"
|
|
1782
|
-
],
|
|
1783
|
-
"description": "The configured value for this option"
|
|
1920
|
+
"description": "The configured value for this option. Shape depends on the matching component option's\n`type` and `repeatable` (see `Options.value`).\n"
|
|
1784
1921
|
}
|
|
1785
1922
|
}
|
|
1786
1923
|
},
|
|
@@ -1832,7 +1969,8 @@
|
|
|
1832
1969
|
"ERP_INFORM_TOOLKIT",
|
|
1833
1970
|
"CUSTOM_CAPABILITY",
|
|
1834
1971
|
"EXTERNAL_PRODUCT_CATALOG",
|
|
1835
|
-
"CUSTOM_PAGE"
|
|
1972
|
+
"CUSTOM_PAGE",
|
|
1973
|
+
"API_PROXY"
|
|
1836
1974
|
],
|
|
1837
1975
|
"description": "Type of app component"
|
|
1838
1976
|
},
|
|
@@ -1944,7 +2082,8 @@
|
|
|
1944
2082
|
"ERP_INFORM_TOOLKIT": "#/components/schemas/ErpInformToolkitComponent",
|
|
1945
2083
|
"CUSTOM_CAPABILITY": "#/components/schemas/CustomCapabilityComponent",
|
|
1946
2084
|
"EXTERNAL_PRODUCT_CATALOG": "#/components/schemas/ExternalProductCatalogComponent",
|
|
1947
|
-
"CUSTOM_PAGE": "#/components/schemas/CustomPageComponent"
|
|
2085
|
+
"CUSTOM_PAGE": "#/components/schemas/CustomPageComponent",
|
|
2086
|
+
"API_PROXY": "#/components/schemas/ApiProxyComponent"
|
|
1948
2087
|
}
|
|
1949
2088
|
},
|
|
1950
2089
|
"oneOf": [
|
|
@@ -1971,11 +2110,32 @@
|
|
|
1971
2110
|
},
|
|
1972
2111
|
{
|
|
1973
2112
|
"$ref": "#/components/schemas/CustomPageComponent"
|
|
2113
|
+
},
|
|
2114
|
+
{
|
|
2115
|
+
"$ref": "#/components/schemas/ApiProxyComponent"
|
|
1974
2116
|
}
|
|
1975
2117
|
]
|
|
1976
2118
|
}
|
|
1977
2119
|
]
|
|
1978
2120
|
},
|
|
2121
|
+
"ApiProxyComponent": {
|
|
2122
|
+
"type": "object",
|
|
2123
|
+
"required": [
|
|
2124
|
+
"component_type",
|
|
2125
|
+
"configuration"
|
|
2126
|
+
],
|
|
2127
|
+
"properties": {
|
|
2128
|
+
"component_type": {
|
|
2129
|
+
"type": "string",
|
|
2130
|
+
"enum": [
|
|
2131
|
+
"API_PROXY"
|
|
2132
|
+
]
|
|
2133
|
+
},
|
|
2134
|
+
"configuration": {
|
|
2135
|
+
"$ref": "#/components/schemas/ApiProxyConfig"
|
|
2136
|
+
}
|
|
2137
|
+
}
|
|
2138
|
+
},
|
|
1979
2139
|
"CustomCapabilityComponent": {
|
|
1980
2140
|
"type": "object",
|
|
1981
2141
|
"required": [
|
|
@@ -2488,8 +2648,10 @@
|
|
|
2488
2648
|
"contractIdentification": "#/components/schemas/PortalExtensionHookContractIdentification",
|
|
2489
2649
|
"priceDataRetrieval": "#/components/schemas/PortalExtensionHookPriceDataRetrieval",
|
|
2490
2650
|
"consumptionDataRetrieval": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval",
|
|
2651
|
+
"dataExport": "#/components/schemas/PortalExtensionHookDataExport",
|
|
2491
2652
|
"costDataRetrieval": "#/components/schemas/PortalExtensionHookCostDataRetrieval",
|
|
2492
|
-
"meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck"
|
|
2653
|
+
"meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck",
|
|
2654
|
+
"visualizationMetadata": "#/components/schemas/PortalExtensionHookVisualizationMetadata"
|
|
2493
2655
|
}
|
|
2494
2656
|
},
|
|
2495
2657
|
"oneOf": [
|
|
@@ -2505,11 +2667,17 @@
|
|
|
2505
2667
|
{
|
|
2506
2668
|
"$ref": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval"
|
|
2507
2669
|
},
|
|
2670
|
+
{
|
|
2671
|
+
"$ref": "#/components/schemas/PortalExtensionHookDataExport"
|
|
2672
|
+
},
|
|
2508
2673
|
{
|
|
2509
2674
|
"$ref": "#/components/schemas/PortalExtensionHookCostDataRetrieval"
|
|
2510
2675
|
},
|
|
2511
2676
|
{
|
|
2512
2677
|
"$ref": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck"
|
|
2678
|
+
},
|
|
2679
|
+
{
|
|
2680
|
+
"$ref": "#/components/schemas/PortalExtensionHookVisualizationMetadata"
|
|
2513
2681
|
}
|
|
2514
2682
|
]
|
|
2515
2683
|
}
|
|
@@ -2582,7 +2750,8 @@
|
|
|
2582
2750
|
},
|
|
2583
2751
|
"result": {
|
|
2584
2752
|
"type": "string",
|
|
2585
|
-
"
|
|
2753
|
+
"deprecated": true,
|
|
2754
|
+
"description": "Deprecated. Use `resolved.result` instead. Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation."
|
|
2586
2755
|
}
|
|
2587
2756
|
},
|
|
2588
2757
|
"required": [
|
|
@@ -2592,9 +2761,25 @@
|
|
|
2592
2761
|
],
|
|
2593
2762
|
"additionalProperties": false
|
|
2594
2763
|
},
|
|
2764
|
+
"resolved": {
|
|
2765
|
+
"type": "object",
|
|
2766
|
+
"properties": {
|
|
2767
|
+
"result": {
|
|
2768
|
+
"type": "string",
|
|
2769
|
+
"description": "Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`."
|
|
2770
|
+
},
|
|
2771
|
+
"error_message_path": {
|
|
2772
|
+
"type": "string",
|
|
2773
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
2774
|
+
"example": "error.message"
|
|
2775
|
+
}
|
|
2776
|
+
},
|
|
2777
|
+
"additionalProperties": false
|
|
2778
|
+
},
|
|
2595
2779
|
"use_static_ips": {
|
|
2596
2780
|
"type": "boolean",
|
|
2597
|
-
"
|
|
2781
|
+
"deprecated": true,
|
|
2782
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
2598
2783
|
"default": false
|
|
2599
2784
|
},
|
|
2600
2785
|
"secure_proxy": {
|
|
@@ -2663,7 +2848,8 @@
|
|
|
2663
2848
|
},
|
|
2664
2849
|
"result": {
|
|
2665
2850
|
"type": "string",
|
|
2666
|
-
"
|
|
2851
|
+
"deprecated": true,
|
|
2852
|
+
"description": "Deprecated. Use `resolved.result` instead. Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation."
|
|
2667
2853
|
}
|
|
2668
2854
|
},
|
|
2669
2855
|
"required": [
|
|
@@ -2672,6 +2858,21 @@
|
|
|
2672
2858
|
],
|
|
2673
2859
|
"additionalProperties": false
|
|
2674
2860
|
},
|
|
2861
|
+
"resolved": {
|
|
2862
|
+
"type": "object",
|
|
2863
|
+
"properties": {
|
|
2864
|
+
"result": {
|
|
2865
|
+
"type": "string",
|
|
2866
|
+
"description": "Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`."
|
|
2867
|
+
},
|
|
2868
|
+
"error_message_path": {
|
|
2869
|
+
"type": "string",
|
|
2870
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
2871
|
+
"example": "error.message"
|
|
2872
|
+
}
|
|
2873
|
+
},
|
|
2874
|
+
"additionalProperties": false
|
|
2875
|
+
},
|
|
2675
2876
|
"assignment_mode": {
|
|
2676
2877
|
"type": "string",
|
|
2677
2878
|
"enum": [
|
|
@@ -2707,7 +2908,8 @@
|
|
|
2707
2908
|
},
|
|
2708
2909
|
"use_static_ips": {
|
|
2709
2910
|
"type": "boolean",
|
|
2710
|
-
"
|
|
2911
|
+
"deprecated": true,
|
|
2912
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
2711
2913
|
"default": false
|
|
2712
2914
|
},
|
|
2713
2915
|
"secure_proxy": {
|
|
@@ -2783,11 +2985,16 @@
|
|
|
2783
2985
|
"type": "object",
|
|
2784
2986
|
"description": "Response to the call",
|
|
2785
2987
|
"properties": {
|
|
2786
|
-
"
|
|
2988
|
+
"data_path": {
|
|
2787
2989
|
"type": "string",
|
|
2788
2990
|
"description": "Optional path to an array in the response. If specified and the path points to an array,\nthe hook will map over each item using 'Item' variable for interpolation.\nRelevant only if plausibility_mode is \"range\".\n",
|
|
2789
2991
|
"example": "data.results"
|
|
2790
2992
|
},
|
|
2993
|
+
"dataPath": {
|
|
2994
|
+
"type": "string",
|
|
2995
|
+
"deprecated": true,
|
|
2996
|
+
"description": "Deprecated. Use `data_path` instead."
|
|
2997
|
+
},
|
|
2791
2998
|
"counter_identifiers": {
|
|
2792
2999
|
"description": "Counter identifier(s) used to match against the meter's counters.\nCan be a string (counter ID) or an object with counter properties.\nThe backend resolves this to meter_counter_id in the final response.\nRelevant only if plausibility_mode is \"range\".\n",
|
|
2793
3000
|
"type": "object",
|
|
@@ -2812,13 +3019,19 @@
|
|
|
2812
3019
|
"type": "string",
|
|
2813
3020
|
"description": "Lower allowed limit of the meter reading",
|
|
2814
3021
|
"example": "{{CallResponse.data.lower_limit}}"
|
|
3022
|
+
},
|
|
3023
|
+
"error_message_path": {
|
|
3024
|
+
"type": "string",
|
|
3025
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
3026
|
+
"example": "error.message"
|
|
2815
3027
|
}
|
|
2816
3028
|
},
|
|
2817
3029
|
"additionalProperties": false
|
|
2818
3030
|
},
|
|
2819
3031
|
"use_static_ips": {
|
|
2820
3032
|
"type": "boolean",
|
|
2821
|
-
"
|
|
3033
|
+
"deprecated": true,
|
|
3034
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
2822
3035
|
"default": false
|
|
2823
3036
|
},
|
|
2824
3037
|
"secure_proxy": {
|
|
@@ -2853,7 +3066,8 @@
|
|
|
2853
3066
|
},
|
|
2854
3067
|
"intervals": {
|
|
2855
3068
|
"type": "array",
|
|
2856
|
-
"
|
|
3069
|
+
"deprecated": true,
|
|
3070
|
+
"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",
|
|
2857
3071
|
"items": {
|
|
2858
3072
|
"type": "string",
|
|
2859
3073
|
"enum": [
|
|
@@ -2909,16 +3123,27 @@
|
|
|
2909
3123
|
"resolved": {
|
|
2910
3124
|
"type": "object",
|
|
2911
3125
|
"properties": {
|
|
2912
|
-
"
|
|
3126
|
+
"data_path": {
|
|
2913
3127
|
"type": "string",
|
|
2914
3128
|
"description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
|
|
3129
|
+
},
|
|
3130
|
+
"dataPath": {
|
|
3131
|
+
"type": "string",
|
|
3132
|
+
"deprecated": true,
|
|
3133
|
+
"description": "Deprecated. Use `data_path` instead."
|
|
3134
|
+
},
|
|
3135
|
+
"error_message_path": {
|
|
3136
|
+
"type": "string",
|
|
3137
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
3138
|
+
"example": "error.message"
|
|
2915
3139
|
}
|
|
2916
3140
|
},
|
|
2917
3141
|
"additionalProperties": false
|
|
2918
3142
|
},
|
|
2919
3143
|
"use_static_ips": {
|
|
2920
3144
|
"type": "boolean",
|
|
2921
|
-
"
|
|
3145
|
+
"deprecated": true,
|
|
3146
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
2922
3147
|
"default": false
|
|
2923
3148
|
},
|
|
2924
3149
|
"secure_proxy": {
|
|
@@ -2952,7 +3177,8 @@
|
|
|
2952
3177
|
},
|
|
2953
3178
|
"intervals": {
|
|
2954
3179
|
"type": "array",
|
|
2955
|
-
"
|
|
3180
|
+
"deprecated": true,
|
|
3181
|
+
"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",
|
|
2956
3182
|
"items": {
|
|
2957
3183
|
"type": "string",
|
|
2958
3184
|
"enum": [
|
|
@@ -3008,16 +3234,219 @@
|
|
|
3008
3234
|
"resolved": {
|
|
3009
3235
|
"type": "object",
|
|
3010
3236
|
"properties": {
|
|
3011
|
-
"
|
|
3237
|
+
"data_path": {
|
|
3012
3238
|
"type": "string",
|
|
3013
3239
|
"description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
|
|
3240
|
+
},
|
|
3241
|
+
"dataPath": {
|
|
3242
|
+
"type": "string",
|
|
3243
|
+
"deprecated": true,
|
|
3244
|
+
"description": "Deprecated. Use `data_path` instead."
|
|
3245
|
+
},
|
|
3246
|
+
"error_message_path": {
|
|
3247
|
+
"type": "string",
|
|
3248
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
3249
|
+
"example": "error.message"
|
|
3250
|
+
}
|
|
3251
|
+
},
|
|
3252
|
+
"additionalProperties": false
|
|
3253
|
+
},
|
|
3254
|
+
"use_static_ips": {
|
|
3255
|
+
"type": "boolean",
|
|
3256
|
+
"deprecated": true,
|
|
3257
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
3258
|
+
"default": false
|
|
3259
|
+
},
|
|
3260
|
+
"secure_proxy": {
|
|
3261
|
+
"$ref": "#/components/schemas/PortalExtensionSecureProxy"
|
|
3262
|
+
}
|
|
3263
|
+
},
|
|
3264
|
+
"required": [
|
|
3265
|
+
"id",
|
|
3266
|
+
"type",
|
|
3267
|
+
"call"
|
|
3268
|
+
],
|
|
3269
|
+
"additionalProperties": false
|
|
3270
|
+
},
|
|
3271
|
+
"PortalExtensionHookDataExport": {
|
|
3272
|
+
"description": "Generic data export hook. When configured on blocks that support it, the portal delegates the export action (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the file itself. Can be used by any block that supports export — consumption charts, dynamic tariff charts, etc. The expected response to the call is:\n - 200 with a JSON body describing the exported file (download_url, optional filename, content_type, expires_at)\n",
|
|
3273
|
+
"type": "object",
|
|
3274
|
+
"properties": {
|
|
3275
|
+
"id": {
|
|
3276
|
+
"type": "string",
|
|
3277
|
+
"pattern": "^[a-zA-Z0-9_-]+$",
|
|
3278
|
+
"description": "Identifier of the hook. Should not change between updates."
|
|
3279
|
+
},
|
|
3280
|
+
"name": {
|
|
3281
|
+
"$ref": "#/components/schemas/TranslatedString"
|
|
3282
|
+
},
|
|
3283
|
+
"type": {
|
|
3284
|
+
"type": "string",
|
|
3285
|
+
"enum": [
|
|
3286
|
+
"dataExport"
|
|
3287
|
+
]
|
|
3288
|
+
},
|
|
3289
|
+
"block_types": {
|
|
3290
|
+
"type": "array",
|
|
3291
|
+
"description": "Optional list of portal block types this hook supports. If omitted,\nthe hook is usable on any export-capable block. Allowed values match\nthe block type identifiers used by the portal builder\n(e.g. `consumption_visualization`, `dynamic_tariff`).\n",
|
|
3292
|
+
"items": {
|
|
3293
|
+
"type": "string"
|
|
3294
|
+
}
|
|
3295
|
+
},
|
|
3296
|
+
"auth": {
|
|
3297
|
+
"$ref": "#/components/schemas/PortalExtensionAuthBlock"
|
|
3298
|
+
},
|
|
3299
|
+
"call": {
|
|
3300
|
+
"type": "object",
|
|
3301
|
+
"properties": {
|
|
3302
|
+
"method": {
|
|
3303
|
+
"type": "string",
|
|
3304
|
+
"description": "HTTP method to use for the call",
|
|
3305
|
+
"default": "GET"
|
|
3306
|
+
},
|
|
3307
|
+
"url": {
|
|
3308
|
+
"type": "string",
|
|
3309
|
+
"description": "URL to call. Supports variable interpolation."
|
|
3310
|
+
},
|
|
3311
|
+
"params": {
|
|
3312
|
+
"type": "object",
|
|
3313
|
+
"description": "Parameters to append to the URL. Supports variable interpolation.",
|
|
3314
|
+
"additionalProperties": {
|
|
3315
|
+
"type": "string"
|
|
3316
|
+
},
|
|
3317
|
+
"default": {}
|
|
3318
|
+
},
|
|
3319
|
+
"headers": {
|
|
3320
|
+
"type": "object",
|
|
3321
|
+
"description": "Headers to use. Supports variable interpolation.",
|
|
3322
|
+
"additionalProperties": {
|
|
3323
|
+
"type": "string"
|
|
3324
|
+
},
|
|
3325
|
+
"default": {}
|
|
3326
|
+
},
|
|
3327
|
+
"body": {
|
|
3328
|
+
"type": "object",
|
|
3329
|
+
"description": "Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.",
|
|
3330
|
+
"additionalProperties": true
|
|
3331
|
+
}
|
|
3332
|
+
},
|
|
3333
|
+
"required": [
|
|
3334
|
+
"url"
|
|
3335
|
+
],
|
|
3336
|
+
"additionalProperties": false
|
|
3337
|
+
},
|
|
3338
|
+
"resolved": {
|
|
3339
|
+
"type": "object",
|
|
3340
|
+
"properties": {
|
|
3341
|
+
"error_message_path": {
|
|
3342
|
+
"type": "string",
|
|
3343
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
3344
|
+
"example": "error.message"
|
|
3014
3345
|
}
|
|
3015
3346
|
},
|
|
3016
3347
|
"additionalProperties": false
|
|
3017
3348
|
},
|
|
3018
3349
|
"use_static_ips": {
|
|
3019
3350
|
"type": "boolean",
|
|
3020
|
-
"
|
|
3351
|
+
"deprecated": true,
|
|
3352
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
3353
|
+
"default": false
|
|
3354
|
+
},
|
|
3355
|
+
"secure_proxy": {
|
|
3356
|
+
"$ref": "#/components/schemas/PortalExtensionSecureProxy"
|
|
3357
|
+
}
|
|
3358
|
+
},
|
|
3359
|
+
"required": [
|
|
3360
|
+
"id",
|
|
3361
|
+
"type",
|
|
3362
|
+
"call"
|
|
3363
|
+
],
|
|
3364
|
+
"additionalProperties": false
|
|
3365
|
+
},
|
|
3366
|
+
"PortalExtensionHookVisualizationMetadata": {
|
|
3367
|
+
"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\"],\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",
|
|
3368
|
+
"type": "object",
|
|
3369
|
+
"properties": {
|
|
3370
|
+
"id": {
|
|
3371
|
+
"type": "string",
|
|
3372
|
+
"pattern": "^[a-zA-Z0-9_-]+$",
|
|
3373
|
+
"description": "Identifier of the hook. Should not change between updates."
|
|
3374
|
+
},
|
|
3375
|
+
"name": {
|
|
3376
|
+
"$ref": "#/components/schemas/TranslatedString"
|
|
3377
|
+
},
|
|
3378
|
+
"type": {
|
|
3379
|
+
"type": "string",
|
|
3380
|
+
"enum": [
|
|
3381
|
+
"visualizationMetadata"
|
|
3382
|
+
]
|
|
3383
|
+
},
|
|
3384
|
+
"auth": {
|
|
3385
|
+
"$ref": "#/components/schemas/PortalExtensionAuthBlock"
|
|
3386
|
+
},
|
|
3387
|
+
"call": {
|
|
3388
|
+
"type": "object",
|
|
3389
|
+
"properties": {
|
|
3390
|
+
"method": {
|
|
3391
|
+
"type": "string",
|
|
3392
|
+
"description": "HTTP method to use for the call",
|
|
3393
|
+
"default": "GET"
|
|
3394
|
+
},
|
|
3395
|
+
"url": {
|
|
3396
|
+
"type": "string",
|
|
3397
|
+
"description": "URL to call. Supports variable interpolation."
|
|
3398
|
+
},
|
|
3399
|
+
"params": {
|
|
3400
|
+
"type": "object",
|
|
3401
|
+
"description": "Parameters to append to the URL. Supports variable interpolation.",
|
|
3402
|
+
"additionalProperties": {
|
|
3403
|
+
"type": "string"
|
|
3404
|
+
},
|
|
3405
|
+
"default": {}
|
|
3406
|
+
},
|
|
3407
|
+
"headers": {
|
|
3408
|
+
"type": "object",
|
|
3409
|
+
"description": "Headers to use. Supports variable interpolation.",
|
|
3410
|
+
"additionalProperties": {
|
|
3411
|
+
"type": "string"
|
|
3412
|
+
},
|
|
3413
|
+
"default": {}
|
|
3414
|
+
},
|
|
3415
|
+
"body": {
|
|
3416
|
+
"type": "object",
|
|
3417
|
+
"description": "Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.",
|
|
3418
|
+
"additionalProperties": true
|
|
3419
|
+
}
|
|
3420
|
+
},
|
|
3421
|
+
"required": [
|
|
3422
|
+
"url"
|
|
3423
|
+
],
|
|
3424
|
+
"additionalProperties": false
|
|
3425
|
+
},
|
|
3426
|
+
"resolved": {
|
|
3427
|
+
"type": "object",
|
|
3428
|
+
"properties": {
|
|
3429
|
+
"data_path": {
|
|
3430
|
+
"type": "string",
|
|
3431
|
+
"description": "Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level."
|
|
3432
|
+
},
|
|
3433
|
+
"dataPath": {
|
|
3434
|
+
"type": "string",
|
|
3435
|
+
"deprecated": true,
|
|
3436
|
+
"description": "Deprecated. Use `data_path` instead."
|
|
3437
|
+
},
|
|
3438
|
+
"error_message_path": {
|
|
3439
|
+
"type": "string",
|
|
3440
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
3441
|
+
"example": "error.message"
|
|
3442
|
+
}
|
|
3443
|
+
},
|
|
3444
|
+
"additionalProperties": false
|
|
3445
|
+
},
|
|
3446
|
+
"use_static_ips": {
|
|
3447
|
+
"type": "boolean",
|
|
3448
|
+
"deprecated": true,
|
|
3449
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
3021
3450
|
"default": false
|
|
3022
3451
|
},
|
|
3023
3452
|
"secure_proxy": {
|
|
@@ -3051,7 +3480,8 @@
|
|
|
3051
3480
|
},
|
|
3052
3481
|
"intervals": {
|
|
3053
3482
|
"type": "array",
|
|
3054
|
-
"
|
|
3483
|
+
"deprecated": true,
|
|
3484
|
+
"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",
|
|
3055
3485
|
"items": {
|
|
3056
3486
|
"type": "string",
|
|
3057
3487
|
"enum": [
|
|
@@ -3107,16 +3537,27 @@
|
|
|
3107
3537
|
"resolved": {
|
|
3108
3538
|
"type": "object",
|
|
3109
3539
|
"properties": {
|
|
3110
|
-
"
|
|
3540
|
+
"data_path": {
|
|
3111
3541
|
"type": "string",
|
|
3112
3542
|
"description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
|
|
3543
|
+
},
|
|
3544
|
+
"dataPath": {
|
|
3545
|
+
"type": "string",
|
|
3546
|
+
"deprecated": true,
|
|
3547
|
+
"description": "Deprecated. Use `data_path` instead."
|
|
3548
|
+
},
|
|
3549
|
+
"error_message_path": {
|
|
3550
|
+
"type": "string",
|
|
3551
|
+
"description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
|
|
3552
|
+
"example": "error.message"
|
|
3113
3553
|
}
|
|
3114
3554
|
},
|
|
3115
3555
|
"additionalProperties": false
|
|
3116
3556
|
},
|
|
3117
3557
|
"use_static_ips": {
|
|
3118
3558
|
"type": "boolean",
|
|
3119
|
-
"
|
|
3559
|
+
"deprecated": true,
|
|
3560
|
+
"description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
|
|
3120
3561
|
"default": false
|
|
3121
3562
|
},
|
|
3122
3563
|
"secure_proxy": {
|
|
@@ -3430,7 +3871,8 @@
|
|
|
3430
3871
|
"enum": [
|
|
3431
3872
|
"text",
|
|
3432
3873
|
"boolean",
|
|
3433
|
-
"enum"
|
|
3874
|
+
"enum",
|
|
3875
|
+
"block_reference"
|
|
3434
3876
|
]
|
|
3435
3877
|
},
|
|
3436
3878
|
"required": {
|
|
@@ -3467,7 +3909,8 @@
|
|
|
3467
3909
|
"mapping": {
|
|
3468
3910
|
"text": "#/components/schemas/TextArg",
|
|
3469
3911
|
"boolean": "#/components/schemas/BooleanArg",
|
|
3470
|
-
"enum": "#/components/schemas/EnumArg"
|
|
3912
|
+
"enum": "#/components/schemas/EnumArg",
|
|
3913
|
+
"block_reference": "#/components/schemas/BlockReferenceArg"
|
|
3471
3914
|
}
|
|
3472
3915
|
},
|
|
3473
3916
|
"oneOf": [
|
|
@@ -3479,6 +3922,9 @@
|
|
|
3479
3922
|
},
|
|
3480
3923
|
{
|
|
3481
3924
|
"$ref": "#/components/schemas/EnumArg"
|
|
3925
|
+
},
|
|
3926
|
+
{
|
|
3927
|
+
"$ref": "#/components/schemas/BlockReferenceArg"
|
|
3482
3928
|
}
|
|
3483
3929
|
]
|
|
3484
3930
|
}
|
|
@@ -3506,6 +3952,25 @@
|
|
|
3506
3952
|
}
|
|
3507
3953
|
}
|
|
3508
3954
|
},
|
|
3955
|
+
"BlockReferenceArg": {
|
|
3956
|
+
"type": "object",
|
|
3957
|
+
"description": "References another journey block by its ID. The configuring user picks\na block from the journey via a dropdown in the journey-builder; the\nchosen block's ID is stored as the arg value (a string). The bundle can\nthen call `subscribe(blockId, cb)` / `getValue(blockId)` against that ID.\n",
|
|
3958
|
+
"properties": {
|
|
3959
|
+
"type": {
|
|
3960
|
+
"type": "string",
|
|
3961
|
+
"enum": [
|
|
3962
|
+
"block_reference"
|
|
3963
|
+
]
|
|
3964
|
+
},
|
|
3965
|
+
"allowed_types": {
|
|
3966
|
+
"type": "array",
|
|
3967
|
+
"description": "Restrict the picker to blocks of these journey block types\n(e.g. [\"availability-check\", \"address\"]). Omit to allow any type.\n",
|
|
3968
|
+
"items": {
|
|
3969
|
+
"type": "string"
|
|
3970
|
+
}
|
|
3971
|
+
}
|
|
3972
|
+
}
|
|
3973
|
+
},
|
|
3509
3974
|
"EnumArg": {
|
|
3510
3975
|
"type": "object",
|
|
3511
3976
|
"required": [
|
|
@@ -3876,6 +4341,49 @@
|
|
|
3876
4341
|
}
|
|
3877
4342
|
}
|
|
3878
4343
|
},
|
|
4344
|
+
"ApiProxyConfig": {
|
|
4345
|
+
"type": "object",
|
|
4346
|
+
"description": "Configuration for an API proxy component",
|
|
4347
|
+
"required": [
|
|
4348
|
+
"name",
|
|
4349
|
+
"target",
|
|
4350
|
+
"auth_type"
|
|
4351
|
+
],
|
|
4352
|
+
"properties": {
|
|
4353
|
+
"name": {
|
|
4354
|
+
"type": "string",
|
|
4355
|
+
"description": "Human-friendly proxy name used in SDK calls",
|
|
4356
|
+
"pattern": "^[a-zA-Z0-9_-]+$",
|
|
4357
|
+
"maxLength": 64
|
|
4358
|
+
},
|
|
4359
|
+
"target": {
|
|
4360
|
+
"type": "string",
|
|
4361
|
+
"format": "uri",
|
|
4362
|
+
"description": "Base URL of the target API. Must be HTTPS.",
|
|
4363
|
+
"pattern": "^https://"
|
|
4364
|
+
},
|
|
4365
|
+
"auth_type": {
|
|
4366
|
+
"type": "string",
|
|
4367
|
+
"enum": [
|
|
4368
|
+
"header",
|
|
4369
|
+
"bearer",
|
|
4370
|
+
"oauth2",
|
|
4371
|
+
"none"
|
|
4372
|
+
],
|
|
4373
|
+
"description": "Authentication strategy"
|
|
4374
|
+
},
|
|
4375
|
+
"auth_header": {
|
|
4376
|
+
"type": "string",
|
|
4377
|
+
"description": "Header name for 'header' auth type"
|
|
4378
|
+
},
|
|
4379
|
+
"token_url": {
|
|
4380
|
+
"type": "string",
|
|
4381
|
+
"format": "uri",
|
|
4382
|
+
"description": "OAuth2 token endpoint URL",
|
|
4383
|
+
"pattern": "^https://"
|
|
4384
|
+
}
|
|
4385
|
+
}
|
|
4386
|
+
},
|
|
3879
4387
|
"Grants": {
|
|
3880
4388
|
"type": "array",
|
|
3881
4389
|
"description": "Required grants for the app in order to call APIs for the installing tenant",
|