@epilot/app-client 0.13.0 → 0.13.1
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/dist/definition.js +1 -1
- package/dist/openapi.d.ts +54 -2
- package/dist/openapi.json +37 -1
- package/package.json +1 -1
package/dist/definition.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e={330(e,r,t){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});var p=n(t(466));r.default=p.default},466
|
|
1
|
+
(()=>{"use strict";var e={330:function(e,r,t){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0});var p=n(t(466));r.default=p.default},466:e=>{e.exports=JSON.parse('{"openapi":"3.1.0","info":{"title":"","version":""},"servers":[{"url":"https://app.sls.epilot.io"}],"paths":{"/v1/public/app/{appId}/components/{componentId}":{"parameters":[{"name":"appId","in":"path","required":true,"description":"ID of the app configuration to install"},{"name":"componentId","in":"path","required":true,"description":"ID of the component to retrieve"}],"get":{"operationId":"getPublicFacingComponent","responses":{}}},"/v1/app-configurations":{"get":{"operationId":"listConfigurations","parameters":[{"name":"page","in":"query"},{"name":"pageSize","in":"query"}],"responses":{}},"post":{"operationId":"createConfiguration","requestBody":{"$ref":"#/components/requestBodies/CreateConfigRequest"},"responses":{}}},"/v1/app-configurations/public":{"get":{"operationId":"listPublicConfigurations","parameters":[{"name":"page","in":"query"},{"name":"pageSize","in":"query"}],"responses":{}}},"/v1/app-configurations/public/{appId}":{"parameters":[{"name":"appId","in":"path","required":true,"description":"ID of the app configuration to install"}],"get":{"operationId":"getPublicConfiguration","parameters":[{"name":"version","in":"query"}],"responses":{}}},"/v1/app-configurations/{appId}":{"parameters":[{"name":"appId","in":"path","required":true,"description":"ID of the app configuration"}],"get":{"operationId":"getConfiguration","parameters":[{"name":"version","in":"query"}],"responses":{}},"patch":{"operationId":"patchMetadata","requestBody":{"$ref":"#/components/requestBodies/PatchConfigMetadataRequest"},"responses":{}},"delete":{"operationId":"deleteConfiguration","responses":{}}},"/v1/app-configurations/{appId}/events":{"post":{"operationId":"queryEvents","parameters":[{"name":"appId","in":"path","required":true}],"requestBody":{"required":true,"content":{"application/json":{}}},"responses":{}}},"/v1/app-configurations/{appId}/bundle":{"post":{"operationId":"createBundleUploadUrl","parameters":[{"name":"appId","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/CreateBundlePresignedRequest"},"responses":{}}},"/v1/app-configurations/{appId}/zip":{"post":{"operationId":"createZipUploadUrl","parameters":[{"name":"appId","in":"path","required":true}],"requestBody":{"content":{"application/json":{}}},"responses":{}}},"/v1/app-configurations/{appId}/logo":{"parameters":[{"name":"appId","in":"path","required":true,"description":"ID of the app configuration"}],"post":{"operationId":"createLogoUploadUrl","requestBody":{"$ref":"#/components/requestBodies/CreateLogoPresignedRequest"},"responses":{}},"delete":{"operationId":"deleteLogo","responses":{}}},"/v1/app-configurations/{appId}/versions":{"get":{"operationId":"listVersions","parameters":[{"name":"appId","in":"path","required":true},{"name":"page","in":"query"},{"name":"pageSize","in":"query"}],"responses":{}}},"/v1/app-configurations/{appId}/versions/{version}":{"get":{"operationId":"getVersion","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"responses":{}},"delete":{"operationId":"deleteVersion","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"responses":{}},"patch":{"operationId":"patchVersion","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/PatchVersionRequest"},"responses":{}}},"/v1/app-configurations/{appId}/versions/{version}/review":{"get":{"operationId":"getReview","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"responses":{}},"post":{"operationId":"createReview","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/CreateReviewRequest"},"responses":{}}},"/v1/app-configurations/{appId}/versions/{version}/components":{"post":{"operationId":"createComponent","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/UpsertComponentRequest"},"responses":{}}},"/v1/app-configurations/{appId}/versions/{version}/components/{componentId}":{"patch":{"operationId":"patchComponent","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true},{"name":"componentId","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/UpsertComponentRequest"},"responses":{}},"delete":{"operationId":"deleteComponent","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true},{"name":"componentId","in":"path","required":true}],"responses":{}}},"/v1/app-configurations/{appId}/versions/{sourceVersion}/clone-to/{targetVersion}":{"post":{"operationId":"cloneVersion","parameters":[{"name":"appId","in":"path","required":true},{"name":"sourceVersion","in":"path","required":true},{"name":"targetVersion","in":"path","required":true}],"responses":{}}},"/v1/app":{"get":{"operationId":"listInstallations","parameters":[{"name":"componentType","in":"query"},{"name":"enabled","in":"query"},{"name":"page","in":"query"},{"name":"pageSize","in":"query"}],"responses":{}}},"/v1/app/{appId}":{"get":{"operationId":"getInstallation","parameters":[{"name":"appId","in":"path","required":true}],"responses":{}},"post":{"operationId":"install","parameters":[{"name":"appId","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/InstallRequest"},"responses":{}},"patch":{"operationId":"patchInstallation","parameters":[{"name":"appId","in":"path","required":true}],"requestBody":{"$ref":"#/components/requestBodies/InstallRequest"},"responses":{}},"delete":{"operationId":"uninstall","parameters":[{"name":"appId","in":"path","required":true}],"responses":{}}},"/v1/app/{appId}/promote-to/{version}":{"post":{"operationId":"promoteVersion","parameters":[{"name":"appId","in":"path","required":true},{"name":"version","in":"path","required":true}],"responses":{}}},"/v1/app-events":{"post":{"operationId":"ingestEvent","requestBody":{"required":true,"content":{"application/json":{}}},"responses":{}}},"/v1/public/app/{appId}/proxy/{proxyName}/{path}":{"parameters":[{"name":"appId","in":"path","required":true,"description":"ID of the installed app"},{"name":"proxyName","in":"path","required":true,"description":"Name of the proxy target as defined in the app manifest"},{"name":"path","in":"path","required":true,"description":"Path to forward to the proxy target"}],"get":{"operationId":"publicProxyGet","responses":{}},"post":{"operationId":"publicProxyPost","requestBody":{"content":{"application/json":{}}},"responses":{}}}},"components":{"requestBodies":{"CreateReviewRequest":{"required":true,"content":{"application/json":{}}},"CreateLogoPresignedRequest":{"required":true,"content":{"application/json":{}}},"CreateBundlePresignedRequest":{"required":true,"content":{"application/json":{}}},"PatchConfigMetadataRequest":{"required":true,"content":{"application/json":{}}},"PatchVersionRequest":{"required":true,"content":{"application/json":{}}},"UpsertComponentRequest":{"required":true,"content":{"application/json":{}}},"CreateConfigRequest":{"required":true,"content":{"application/json":{}}},"InstallRequest":{"content":{"application/json":{}}}}}}')}},r={},t=function t(n){var p=r[n];if(void 0!==p)return p.exports;var o=r[n]={exports:{}};return e[n].call(o.exports,o,o.exports,t),o.exports}(330),n=exports;for(var p in t)n[p]=t[p];t.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();
|
package/dist/openapi.d.ts
CHANGED
|
@@ -1580,13 +1580,14 @@ declare namespace Components {
|
|
|
1580
1580
|
* - 200 with a JSON body of shape:
|
|
1581
1581
|
* {
|
|
1582
1582
|
* "type_options": [
|
|
1583
|
-
* { "id": "ht", "label": { "en": "High tariff" }, "aggregation_group": "consumption", "statistical_method": "sum", "unit": "kWh" },
|
|
1583
|
+
* { "id": "ht", "label": { "en": "High tariff" }, "aggregation_group": "consumption", "statistical_method": "sum", "unit": "kWh", "color": "primary", "precision": 2 },
|
|
1584
1584
|
* ...
|
|
1585
1585
|
* ],
|
|
1586
1586
|
* "intervals": ["PT15M", "PT1H", "P1D", "P1M"],
|
|
1587
1587
|
* "data_range": { "from": "2024-01-01T00:00:00Z", "to": "2026-05-01T00:00:00Z" }
|
|
1588
1588
|
* }
|
|
1589
1589
|
* 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.
|
|
1590
|
+
* 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.
|
|
1590
1591
|
* `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):
|
|
1591
1592
|
* - 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.
|
|
1592
1593
|
* - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.
|
|
@@ -1676,6 +1677,14 @@ declare namespace Components {
|
|
|
1676
1677
|
* Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level.
|
|
1677
1678
|
*/
|
|
1678
1679
|
dataPath?: string;
|
|
1680
|
+
/**
|
|
1681
|
+
* Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
|
|
1682
|
+
* If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
|
|
1683
|
+
*
|
|
1684
|
+
* example:
|
|
1685
|
+
* error.message
|
|
1686
|
+
*/
|
|
1687
|
+
errorMessagePath?: string;
|
|
1679
1688
|
};
|
|
1680
1689
|
/**
|
|
1681
1690
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -1821,6 +1830,14 @@ declare namespace Components {
|
|
|
1821
1830
|
* Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level.
|
|
1822
1831
|
*/
|
|
1823
1832
|
dataPath?: string;
|
|
1833
|
+
/**
|
|
1834
|
+
* Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
|
|
1835
|
+
* If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
|
|
1836
|
+
*
|
|
1837
|
+
* example:
|
|
1838
|
+
* error.message
|
|
1839
|
+
*/
|
|
1840
|
+
errorMessagePath?: string;
|
|
1824
1841
|
};
|
|
1825
1842
|
/**
|
|
1826
1843
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -1879,6 +1896,16 @@ declare namespace Components {
|
|
|
1879
1896
|
[name: string]: any;
|
|
1880
1897
|
};
|
|
1881
1898
|
};
|
|
1899
|
+
resolved?: {
|
|
1900
|
+
/**
|
|
1901
|
+
* Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
|
|
1902
|
+
* If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
|
|
1903
|
+
*
|
|
1904
|
+
* example:
|
|
1905
|
+
* error.message
|
|
1906
|
+
*/
|
|
1907
|
+
errorMessagePath?: string;
|
|
1908
|
+
};
|
|
1882
1909
|
/**
|
|
1883
1910
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
1884
1911
|
* If 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.
|
|
@@ -1974,6 +2001,14 @@ declare namespace Components {
|
|
|
1974
2001
|
* {{CallResponse.data.lower_limit}}
|
|
1975
2002
|
*/
|
|
1976
2003
|
lower_limit?: string;
|
|
2004
|
+
/**
|
|
2005
|
+
* Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
|
|
2006
|
+
* If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
|
|
2007
|
+
*
|
|
2008
|
+
* example:
|
|
2009
|
+
* error.message
|
|
2010
|
+
*/
|
|
2011
|
+
errorMessagePath?: string;
|
|
1977
2012
|
};
|
|
1978
2013
|
/**
|
|
1979
2014
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -2035,6 +2070,14 @@ declare namespace Components {
|
|
|
2035
2070
|
* Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level.
|
|
2036
2071
|
*/
|
|
2037
2072
|
dataPath?: string;
|
|
2073
|
+
/**
|
|
2074
|
+
* Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
|
|
2075
|
+
* If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
|
|
2076
|
+
*
|
|
2077
|
+
* example:
|
|
2078
|
+
* error.message
|
|
2079
|
+
*/
|
|
2080
|
+
errorMessagePath?: string;
|
|
2038
2081
|
};
|
|
2039
2082
|
/**
|
|
2040
2083
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -2103,13 +2146,14 @@ declare namespace Components {
|
|
|
2103
2146
|
* - 200 with a JSON body of shape:
|
|
2104
2147
|
* {
|
|
2105
2148
|
* "type_options": [
|
|
2106
|
-
* { "id": "ht", "label": { "en": "High tariff" }, "aggregation_group": "consumption", "statistical_method": "sum", "unit": "kWh" },
|
|
2149
|
+
* { "id": "ht", "label": { "en": "High tariff" }, "aggregation_group": "consumption", "statistical_method": "sum", "unit": "kWh", "color": "primary", "precision": 2 },
|
|
2107
2150
|
* ...
|
|
2108
2151
|
* ],
|
|
2109
2152
|
* "intervals": ["PT15M", "PT1H", "P1D", "P1M"],
|
|
2110
2153
|
* "data_range": { "from": "2024-01-01T00:00:00Z", "to": "2026-05-01T00:00:00Z" }
|
|
2111
2154
|
* }
|
|
2112
2155
|
* 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.
|
|
2156
|
+
* 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.
|
|
2113
2157
|
* `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):
|
|
2114
2158
|
* - 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.
|
|
2115
2159
|
* - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.
|
|
@@ -2158,6 +2202,14 @@ declare namespace Components {
|
|
|
2158
2202
|
* Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level.
|
|
2159
2203
|
*/
|
|
2160
2204
|
dataPath?: string;
|
|
2205
|
+
/**
|
|
2206
|
+
* Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
|
|
2207
|
+
* If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
|
|
2208
|
+
*
|
|
2209
|
+
* example:
|
|
2210
|
+
* error.message
|
|
2211
|
+
*/
|
|
2212
|
+
errorMessagePath?: string;
|
|
2161
2213
|
};
|
|
2162
2214
|
/**
|
|
2163
2215
|
* Deprecated. Prefer `secure_proxy` instead.
|
package/dist/openapi.json
CHANGED
|
@@ -2982,6 +2982,11 @@
|
|
|
2982
2982
|
"type": "string",
|
|
2983
2983
|
"description": "Lower allowed limit of the meter reading",
|
|
2984
2984
|
"example": "{{CallResponse.data.lower_limit}}"
|
|
2985
|
+
},
|
|
2986
|
+
"errorMessagePath": {
|
|
2987
|
+
"type": "string",
|
|
2988
|
+
"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",
|
|
2989
|
+
"example": "error.message"
|
|
2985
2990
|
}
|
|
2986
2991
|
},
|
|
2987
2992
|
"additionalProperties": false
|
|
@@ -3084,6 +3089,11 @@
|
|
|
3084
3089
|
"dataPath": {
|
|
3085
3090
|
"type": "string",
|
|
3086
3091
|
"description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
|
|
3092
|
+
},
|
|
3093
|
+
"errorMessagePath": {
|
|
3094
|
+
"type": "string",
|
|
3095
|
+
"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",
|
|
3096
|
+
"example": "error.message"
|
|
3087
3097
|
}
|
|
3088
3098
|
},
|
|
3089
3099
|
"additionalProperties": false
|
|
@@ -3185,6 +3195,11 @@
|
|
|
3185
3195
|
"dataPath": {
|
|
3186
3196
|
"type": "string",
|
|
3187
3197
|
"description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
|
|
3198
|
+
},
|
|
3199
|
+
"errorMessagePath": {
|
|
3200
|
+
"type": "string",
|
|
3201
|
+
"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",
|
|
3202
|
+
"example": "error.message"
|
|
3188
3203
|
}
|
|
3189
3204
|
},
|
|
3190
3205
|
"additionalProperties": false
|
|
@@ -3273,6 +3288,17 @@
|
|
|
3273
3288
|
],
|
|
3274
3289
|
"additionalProperties": false
|
|
3275
3290
|
},
|
|
3291
|
+
"resolved": {
|
|
3292
|
+
"type": "object",
|
|
3293
|
+
"properties": {
|
|
3294
|
+
"errorMessagePath": {
|
|
3295
|
+
"type": "string",
|
|
3296
|
+
"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",
|
|
3297
|
+
"example": "error.message"
|
|
3298
|
+
}
|
|
3299
|
+
},
|
|
3300
|
+
"additionalProperties": false
|
|
3301
|
+
},
|
|
3276
3302
|
"use_static_ips": {
|
|
3277
3303
|
"type": "boolean",
|
|
3278
3304
|
"deprecated": true,
|
|
@@ -3291,7 +3317,7 @@
|
|
|
3291
3317
|
"additionalProperties": false
|
|
3292
3318
|
},
|
|
3293
3319
|
"PortalExtensionHookVisualizationMetadata": {
|
|
3294
|
-
"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\" },\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 `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",
|
|
3320
|
+
"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",
|
|
3295
3321
|
"type": "object",
|
|
3296
3322
|
"properties": {
|
|
3297
3323
|
"id": {
|
|
@@ -3356,6 +3382,11 @@
|
|
|
3356
3382
|
"dataPath": {
|
|
3357
3383
|
"type": "string",
|
|
3358
3384
|
"description": "Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level."
|
|
3385
|
+
},
|
|
3386
|
+
"errorMessagePath": {
|
|
3387
|
+
"type": "string",
|
|
3388
|
+
"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",
|
|
3389
|
+
"example": "error.message"
|
|
3359
3390
|
}
|
|
3360
3391
|
},
|
|
3361
3392
|
"additionalProperties": false
|
|
@@ -3457,6 +3488,11 @@
|
|
|
3457
3488
|
"dataPath": {
|
|
3458
3489
|
"type": "string",
|
|
3459
3490
|
"description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
|
|
3491
|
+
},
|
|
3492
|
+
"errorMessagePath": {
|
|
3493
|
+
"type": "string",
|
|
3494
|
+
"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",
|
|
3495
|
+
"example": "error.message"
|
|
3460
3496
|
}
|
|
3461
3497
|
},
|
|
3462
3498
|
"additionalProperties": false
|