@epilot/app-client 0.12.8 → 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/openapi.d.ts +120 -11
- package/dist/openapi.json +87 -12
- package/package.json +1 -1
package/dist/openapi.d.ts
CHANGED
|
@@ -1338,15 +1338,44 @@ declare namespace Components {
|
|
|
1338
1338
|
events?: NotificationEvent[];
|
|
1339
1339
|
}
|
|
1340
1340
|
export type NotificationEvent = "app.installed" | "app.uninstalled";
|
|
1341
|
+
/**
|
|
1342
|
+
* One declared field inside a `type: object` option. Fields are primitives — object nesting
|
|
1343
|
+
* is not supported.
|
|
1344
|
+
*
|
|
1345
|
+
*/
|
|
1346
|
+
export interface ObjectField {
|
|
1347
|
+
/**
|
|
1348
|
+
* Unique identifier for this field within the parent object.
|
|
1349
|
+
*/
|
|
1350
|
+
key: string;
|
|
1351
|
+
/**
|
|
1352
|
+
* Human-readable label for the field.
|
|
1353
|
+
*/
|
|
1354
|
+
label?: string;
|
|
1355
|
+
/**
|
|
1356
|
+
* Detailed description of what this field is for.
|
|
1357
|
+
*/
|
|
1358
|
+
description?: string;
|
|
1359
|
+
/**
|
|
1360
|
+
* Flag to indicate if this field must be filled.
|
|
1361
|
+
*/
|
|
1362
|
+
required?: boolean;
|
|
1363
|
+
/**
|
|
1364
|
+
* Primitive type of this field.
|
|
1365
|
+
*/
|
|
1366
|
+
type: "text" | "number" | "boolean" | "secret";
|
|
1367
|
+
}
|
|
1341
1368
|
export interface Option {
|
|
1342
1369
|
/**
|
|
1343
1370
|
* Key matching a config_option from the component
|
|
1344
1371
|
*/
|
|
1345
1372
|
key: string;
|
|
1346
1373
|
/**
|
|
1347
|
-
* The configured value for this option
|
|
1374
|
+
* The configured value for this option. Shape depends on the matching component option's
|
|
1375
|
+
* `type` and `repeatable` (see `Options.value`).
|
|
1376
|
+
*
|
|
1348
1377
|
*/
|
|
1349
|
-
value:
|
|
1378
|
+
value: any;
|
|
1350
1379
|
}
|
|
1351
1380
|
/**
|
|
1352
1381
|
* Options for the component configuration
|
|
@@ -1369,10 +1398,41 @@ declare namespace Components {
|
|
|
1369
1398
|
*/
|
|
1370
1399
|
description?: string;
|
|
1371
1400
|
/**
|
|
1372
|
-
*
|
|
1401
|
+
* When true, the configured value is an array of entries, each tagged with a stable
|
|
1402
|
+
* server-assigned `id`. Combine with any `type` to express "many of this thing."
|
|
1403
|
+
* Defaults to false.
|
|
1404
|
+
*
|
|
1373
1405
|
*/
|
|
1374
|
-
|
|
1375
|
-
|
|
1406
|
+
repeatable?: boolean;
|
|
1407
|
+
/**
|
|
1408
|
+
* Field declarations — required when `type: object`. Each entry describes one primitive
|
|
1409
|
+
* sub-field of the object value. Object types may not nest (no `type: object` inside `fields`).
|
|
1410
|
+
*
|
|
1411
|
+
*/
|
|
1412
|
+
fields?: /**
|
|
1413
|
+
* One declared field inside a `type: object` option. Fields are primitives — object nesting
|
|
1414
|
+
* is not supported.
|
|
1415
|
+
*
|
|
1416
|
+
*/
|
|
1417
|
+
ObjectField[];
|
|
1418
|
+
/**
|
|
1419
|
+
* The configured value for this option. Shape depends on `type` and `repeatable`:
|
|
1420
|
+
* - primitive `type` (text/number/boolean/secret), `repeatable` false → primitive
|
|
1421
|
+
* - primitive `type`, `repeatable` true → array of `{id, value}` entries
|
|
1422
|
+
* - `type: object`, `repeatable` false → object with declared fields
|
|
1423
|
+
* - `type: object`, `repeatable` true → array of `{id, ...declared fields}` entries
|
|
1424
|
+
*
|
|
1425
|
+
* `id` is server-assigned and stable across edits so consumers can reference entries
|
|
1426
|
+
* by id rather than by index.
|
|
1427
|
+
*
|
|
1428
|
+
*/
|
|
1429
|
+
value?: any;
|
|
1430
|
+
/**
|
|
1431
|
+
* The type of this option. `object` declares a structured value whose fields are listed
|
|
1432
|
+
* under `fields`. Combine with `repeatable: true` to express a list of these objects.
|
|
1433
|
+
*
|
|
1434
|
+
*/
|
|
1435
|
+
type: "text" | "number" | "boolean" | "secret" | "object";
|
|
1376
1436
|
}
|
|
1377
1437
|
export interface OptionsRef {
|
|
1378
1438
|
/**
|
|
@@ -1520,15 +1580,14 @@ declare namespace Components {
|
|
|
1520
1580
|
* - 200 with a JSON body of shape:
|
|
1521
1581
|
* {
|
|
1522
1582
|
* "type_options": [
|
|
1523
|
-
* { "id": "
|
|
1524
|
-
* { "id": "feed-in", "label": { "en": "Feed-in" }, "aggregation_group": "grid", "statistical_method": "sum", "direction": "in", "unit": "kWh" },
|
|
1583
|
+
* { "id": "ht", "label": { "en": "High tariff" }, "aggregation_group": "consumption", "statistical_method": "sum", "unit": "kWh", "color": "primary", "precision": 2 },
|
|
1525
1584
|
* ...
|
|
1526
1585
|
* ],
|
|
1527
1586
|
* "intervals": ["PT15M", "PT1H", "P1D", "P1M"],
|
|
1528
1587
|
* "data_range": { "from": "2024-01-01T00:00:00Z", "to": "2026-05-01T00:00:00Z" }
|
|
1529
1588
|
* }
|
|
1530
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.
|
|
1531
|
-
*
|
|
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.
|
|
1532
1591
|
* `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):
|
|
1533
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.
|
|
1534
1593
|
* - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.
|
|
@@ -1618,6 +1677,14 @@ declare namespace Components {
|
|
|
1618
1677
|
* Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level.
|
|
1619
1678
|
*/
|
|
1620
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;
|
|
1621
1688
|
};
|
|
1622
1689
|
/**
|
|
1623
1690
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -1763,6 +1830,14 @@ declare namespace Components {
|
|
|
1763
1830
|
* Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level.
|
|
1764
1831
|
*/
|
|
1765
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;
|
|
1766
1841
|
};
|
|
1767
1842
|
/**
|
|
1768
1843
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -1821,6 +1896,16 @@ declare namespace Components {
|
|
|
1821
1896
|
[name: string]: any;
|
|
1822
1897
|
};
|
|
1823
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
|
+
};
|
|
1824
1909
|
/**
|
|
1825
1910
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
1826
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.
|
|
@@ -1916,6 +2001,14 @@ declare namespace Components {
|
|
|
1916
2001
|
* {{CallResponse.data.lower_limit}}
|
|
1917
2002
|
*/
|
|
1918
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;
|
|
1919
2012
|
};
|
|
1920
2013
|
/**
|
|
1921
2014
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -1977,6 +2070,14 @@ declare namespace Components {
|
|
|
1977
2070
|
* Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level.
|
|
1978
2071
|
*/
|
|
1979
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;
|
|
1980
2081
|
};
|
|
1981
2082
|
/**
|
|
1982
2083
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -2045,15 +2146,14 @@ declare namespace Components {
|
|
|
2045
2146
|
* - 200 with a JSON body of shape:
|
|
2046
2147
|
* {
|
|
2047
2148
|
* "type_options": [
|
|
2048
|
-
* { "id": "
|
|
2049
|
-
* { "id": "feed-in", "label": { "en": "Feed-in" }, "aggregation_group": "grid", "statistical_method": "sum", "direction": "in", "unit": "kWh" },
|
|
2149
|
+
* { "id": "ht", "label": { "en": "High tariff" }, "aggregation_group": "consumption", "statistical_method": "sum", "unit": "kWh", "color": "primary", "precision": 2 },
|
|
2050
2150
|
* ...
|
|
2051
2151
|
* ],
|
|
2052
2152
|
* "intervals": ["PT15M", "PT1H", "P1D", "P1M"],
|
|
2053
2153
|
* "data_range": { "from": "2024-01-01T00:00:00Z", "to": "2026-05-01T00:00:00Z" }
|
|
2054
2154
|
* }
|
|
2055
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.
|
|
2056
|
-
*
|
|
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.
|
|
2057
2157
|
* `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):
|
|
2058
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.
|
|
2059
2159
|
* - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.
|
|
@@ -2102,6 +2202,14 @@ declare namespace Components {
|
|
|
2102
2202
|
* Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level.
|
|
2103
2203
|
*/
|
|
2104
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;
|
|
2105
2213
|
};
|
|
2106
2214
|
/**
|
|
2107
2215
|
* Deprecated. Prefer `secure_proxy` instead.
|
|
@@ -3670,6 +3778,7 @@ export type JourneyBlockComponentArgs = Components.Schemas.JourneyBlockComponent
|
|
|
3670
3778
|
export type JourneyBlockConfig = Components.Schemas.JourneyBlockConfig;
|
|
3671
3779
|
export type NotificationConfig = Components.Schemas.NotificationConfig;
|
|
3672
3780
|
export type NotificationEvent = Components.Schemas.NotificationEvent;
|
|
3781
|
+
export type ObjectField = Components.Schemas.ObjectField;
|
|
3673
3782
|
export type Option = Components.Schemas.Option;
|
|
3674
3783
|
export type Options = Components.Schemas.Options;
|
|
3675
3784
|
export type OptionsRef = Components.Schemas.OptionsRef;
|
package/dist/openapi.json
CHANGED
|
@@ -1842,13 +1842,56 @@
|
|
|
1842
1842
|
"type": "string",
|
|
1843
1843
|
"description": "Detailed description of what this configuration option does"
|
|
1844
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
|
+
},
|
|
1845
1856
|
"value": {
|
|
1846
|
-
"
|
|
1847
|
-
|
|
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",
|
|
1848
1864
|
"boolean",
|
|
1849
|
-
"
|
|
1865
|
+
"secret",
|
|
1866
|
+
"object"
|
|
1850
1867
|
],
|
|
1851
|
-
"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."
|
|
1852
1895
|
},
|
|
1853
1896
|
"type": {
|
|
1854
1897
|
"type": "string",
|
|
@@ -1857,7 +1900,8 @@
|
|
|
1857
1900
|
"number",
|
|
1858
1901
|
"boolean",
|
|
1859
1902
|
"secret"
|
|
1860
|
-
]
|
|
1903
|
+
],
|
|
1904
|
+
"description": "Primitive type of this field."
|
|
1861
1905
|
}
|
|
1862
1906
|
}
|
|
1863
1907
|
},
|
|
@@ -1873,12 +1917,7 @@
|
|
|
1873
1917
|
"description": "Key matching a config_option from the component"
|
|
1874
1918
|
},
|
|
1875
1919
|
"value": {
|
|
1876
|
-
"
|
|
1877
|
-
"string",
|
|
1878
|
-
"boolean",
|
|
1879
|
-
"number"
|
|
1880
|
-
],
|
|
1881
|
-
"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"
|
|
1882
1921
|
}
|
|
1883
1922
|
}
|
|
1884
1923
|
},
|
|
@@ -2943,6 +2982,11 @@
|
|
|
2943
2982
|
"type": "string",
|
|
2944
2983
|
"description": "Lower allowed limit of the meter reading",
|
|
2945
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"
|
|
2946
2990
|
}
|
|
2947
2991
|
},
|
|
2948
2992
|
"additionalProperties": false
|
|
@@ -3045,6 +3089,11 @@
|
|
|
3045
3089
|
"dataPath": {
|
|
3046
3090
|
"type": "string",
|
|
3047
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"
|
|
3048
3097
|
}
|
|
3049
3098
|
},
|
|
3050
3099
|
"additionalProperties": false
|
|
@@ -3146,6 +3195,11 @@
|
|
|
3146
3195
|
"dataPath": {
|
|
3147
3196
|
"type": "string",
|
|
3148
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"
|
|
3149
3203
|
}
|
|
3150
3204
|
},
|
|
3151
3205
|
"additionalProperties": false
|
|
@@ -3234,6 +3288,17 @@
|
|
|
3234
3288
|
],
|
|
3235
3289
|
"additionalProperties": false
|
|
3236
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
|
+
},
|
|
3237
3302
|
"use_static_ips": {
|
|
3238
3303
|
"type": "boolean",
|
|
3239
3304
|
"deprecated": true,
|
|
@@ -3252,7 +3317,7 @@
|
|
|
3252
3317
|
"additionalProperties": false
|
|
3253
3318
|
},
|
|
3254
3319
|
"PortalExtensionHookVisualizationMetadata": {
|
|
3255
|
-
"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\": \"
|
|
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",
|
|
3256
3321
|
"type": "object",
|
|
3257
3322
|
"properties": {
|
|
3258
3323
|
"id": {
|
|
@@ -3317,6 +3382,11 @@
|
|
|
3317
3382
|
"dataPath": {
|
|
3318
3383
|
"type": "string",
|
|
3319
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"
|
|
3320
3390
|
}
|
|
3321
3391
|
},
|
|
3322
3392
|
"additionalProperties": false
|
|
@@ -3418,6 +3488,11 @@
|
|
|
3418
3488
|
"dataPath": {
|
|
3419
3489
|
"type": "string",
|
|
3420
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"
|
|
3421
3496
|
}
|
|
3422
3497
|
},
|
|
3423
3498
|
"additionalProperties": false
|