@epilot/app-client 0.12.3 → 0.12.5

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.
@@ -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(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})})();
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
@@ -1497,6 +1497,11 @@ declare namespace Components {
1497
1497
  *
1498
1498
  */
1499
1499
  PortalExtensionHookConsumptionDataRetrieval | /**
1500
+ * 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:
1501
+ * - 200 with a JSON body describing the exported file (download_url, optional filename, content_type, expires_at)
1502
+ *
1503
+ */
1504
+ PortalExtensionHookDataExport | /**
1500
1505
  * Hook that will allow using the specified source as data for consumption visualizations. This hook is triggered to fetch the data. Format of the request and response has to follow the following specification: TBD. The expected response to the call is:
1501
1506
  * - 200 with the time series data
1502
1507
  *
@@ -1540,6 +1545,16 @@ declare namespace Components {
1540
1545
  };
1541
1546
  }[];
1542
1547
  }
1548
+ /**
1549
+ * An aggregation method advertised by a consumption data retrieval hook.
1550
+ */
1551
+ export interface PortalExtensionHookConsumptionAggregationMethodOption {
1552
+ /**
1553
+ * Identifier of the option. Matches the `aggregation_method` value returned by the hook.
1554
+ */
1555
+ id: "sum" | "average" | "min" | "max";
1556
+ label: TranslatedString;
1557
+ }
1543
1558
  /**
1544
1559
  * Hook that will allow using the specified source as data for consumption visualizations. This hook is triggered to fetch the data. Format of the request and response has to follow the following specification: TBD. The expected response to the call is:
1545
1560
  * - 200 with the time series data
@@ -1556,6 +1571,16 @@ declare namespace Components {
1556
1571
  * Intervals supported by the API. If omitted, it is assumed that all intervals are supported.
1557
1572
  */
1558
1573
  intervals?: ("PT15M" | "PT1H" | "P1D" | "P1M")[];
1574
+ /**
1575
+ * Consumption types advertised by the hook (e.g. `ht`/`nt`, `feed-in`/`feed-out`). The `id` has to match the `type` field returned in the consumption response.
1576
+ *
1577
+ */
1578
+ type_options?: /* A consumption type advertised by a consumption data retrieval hook. */ PortalExtensionHookConsumptionOption[];
1579
+ /**
1580
+ * Aggregation methods advertised by the hook (e.g. `sum`, `average`, `min`, `max`). The `id` has to match the `aggregation_method` field returned in the consumption response.
1581
+ *
1582
+ */
1583
+ aggregation_method_options?: /* An aggregation method advertised by a consumption data retrieval hook. */ PortalExtensionHookConsumptionAggregationMethodOption[];
1559
1584
  auth?: PortalExtensionAuthBlock;
1560
1585
  call: {
1561
1586
  /**
@@ -1592,11 +1617,30 @@ declare namespace Components {
1592
1617
  dataPath?: string;
1593
1618
  };
1594
1619
  /**
1620
+ * Deprecated. Prefer `secure_proxy` instead.
1595
1621
  * 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.
1622
+ *
1596
1623
  */
1597
1624
  use_static_ips?: boolean;
1598
1625
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
1599
1626
  }
1627
+ /**
1628
+ * A consumption type advertised by a consumption data retrieval hook.
1629
+ */
1630
+ export interface PortalExtensionHookConsumptionOption {
1631
+ /**
1632
+ * Identifier of the option. Matches the `type` value returned by the hook (e.g. `ht`, `nt`, `feed-in`).
1633
+ */
1634
+ id: string;
1635
+ label: TranslatedString;
1636
+ /**
1637
+ * Optional grouping key. Types sharing the same aggregation_group are interpreted as values that can be aggregated (e.g. ht/nt shown as a stacked bar chart - summed into total consumption per interval). Types in different groups — or types without a group — are not (e.g. feed-in vs feed-out shown as separate bars).
1638
+ *
1639
+ * example:
1640
+ * consumption
1641
+ */
1642
+ aggregation_group?: string;
1643
+ }
1600
1644
  /**
1601
1645
  * Hook that replaces the built-in Contract identification for self-assignment. This hook involves an HTTP request whenever a user is trying to self-assign Contract(s).
1602
1646
  * The expected response http status code to the call is:
@@ -1674,7 +1718,9 @@ declare namespace Components {
1674
1718
  en: string;
1675
1719
  };
1676
1720
  /**
1721
+ * Deprecated. Prefer `secure_proxy` instead.
1677
1722
  * 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.
1723
+ *
1678
1724
  */
1679
1725
  use_static_ips?: boolean;
1680
1726
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1731,7 +1777,58 @@ declare namespace Components {
1731
1777
  dataPath?: string;
1732
1778
  };
1733
1779
  /**
1780
+ * Deprecated. Prefer `secure_proxy` instead.
1734
1781
  * 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.
1782
+ *
1783
+ */
1784
+ use_static_ips?: boolean;
1785
+ secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
1786
+ }
1787
+ /**
1788
+ * 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:
1789
+ * - 200 with a JSON body describing the exported file (download_url, optional filename, content_type, expires_at)
1790
+ *
1791
+ */
1792
+ export interface PortalExtensionHookDataExport {
1793
+ /**
1794
+ * Identifier of the hook. Should not change between updates.
1795
+ */
1796
+ id: string; // ^[a-zA-Z0-9_-]+$
1797
+ name?: TranslatedString;
1798
+ type: "dataExport";
1799
+ auth?: PortalExtensionAuthBlock;
1800
+ call: {
1801
+ /**
1802
+ * HTTP method to use for the call
1803
+ */
1804
+ method?: string;
1805
+ /**
1806
+ * URL to call. Supports variable interpolation.
1807
+ */
1808
+ url: string;
1809
+ /**
1810
+ * Parameters to append to the URL. Supports variable interpolation.
1811
+ */
1812
+ params?: {
1813
+ [name: string]: string;
1814
+ };
1815
+ /**
1816
+ * Headers to use. Supports variable interpolation.
1817
+ */
1818
+ headers?: {
1819
+ [name: string]: string;
1820
+ };
1821
+ /**
1822
+ * Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.
1823
+ */
1824
+ body?: {
1825
+ [name: string]: any;
1826
+ };
1827
+ };
1828
+ /**
1829
+ * Deprecated. Prefer `secure_proxy` instead.
1830
+ * 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.
1831
+ *
1735
1832
  */
1736
1833
  use_static_ips?: boolean;
1737
1834
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1825,7 +1922,9 @@ declare namespace Components {
1825
1922
  lower_limit?: string;
1826
1923
  };
1827
1924
  /**
1925
+ * Deprecated. Prefer `secure_proxy` instead.
1828
1926
  * 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.
1927
+ *
1829
1928
  */
1830
1929
  use_static_ips?: boolean;
1831
1930
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1882,7 +1981,9 @@ declare namespace Components {
1882
1981
  dataPath?: string;
1883
1982
  };
1884
1983
  /**
1984
+ * Deprecated. Prefer `secure_proxy` instead.
1885
1985
  * 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.
1986
+ *
1886
1987
  */
1887
1988
  use_static_ips?: boolean;
1888
1989
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1934,7 +2035,9 @@ declare namespace Components {
1934
2035
  result: string;
1935
2036
  };
1936
2037
  /**
2038
+ * Deprecated. Prefer `secure_proxy` instead.
1937
2039
  * 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.
2040
+ *
1938
2041
  */
1939
2042
  use_static_ips?: boolean;
1940
2043
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -3508,9 +3611,12 @@ export type PortalBlockSurfaceConfig = Components.Schemas.PortalBlockSurfaceConf
3508
3611
  export type PortalExtensionAuthBlock = Components.Schemas.PortalExtensionAuthBlock;
3509
3612
  export type PortalExtensionComponent = Components.Schemas.PortalExtensionComponent;
3510
3613
  export type PortalExtensionConfig = Components.Schemas.PortalExtensionConfig;
3614
+ export type PortalExtensionHookConsumptionAggregationMethodOption = Components.Schemas.PortalExtensionHookConsumptionAggregationMethodOption;
3511
3615
  export type PortalExtensionHookConsumptionDataRetrieval = Components.Schemas.PortalExtensionHookConsumptionDataRetrieval;
3616
+ export type PortalExtensionHookConsumptionOption = Components.Schemas.PortalExtensionHookConsumptionOption;
3512
3617
  export type PortalExtensionHookContractIdentification = Components.Schemas.PortalExtensionHookContractIdentification;
3513
3618
  export type PortalExtensionHookCostDataRetrieval = Components.Schemas.PortalExtensionHookCostDataRetrieval;
3619
+ export type PortalExtensionHookDataExport = Components.Schemas.PortalExtensionHookDataExport;
3514
3620
  export type PortalExtensionHookMeterReadingPlausibilityCheck = Components.Schemas.PortalExtensionHookMeterReadingPlausibilityCheck;
3515
3621
  export type PortalExtensionHookPriceDataRetrieval = Components.Schemas.PortalExtensionHookPriceDataRetrieval;
3516
3622
  export type PortalExtensionHookRegistrationIdentifiersCheck = Components.Schemas.PortalExtensionHookRegistrationIdentifiersCheck;
package/dist/openapi.json CHANGED
@@ -2609,6 +2609,7 @@
2609
2609
  "contractIdentification": "#/components/schemas/PortalExtensionHookContractIdentification",
2610
2610
  "priceDataRetrieval": "#/components/schemas/PortalExtensionHookPriceDataRetrieval",
2611
2611
  "consumptionDataRetrieval": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval",
2612
+ "dataExport": "#/components/schemas/PortalExtensionHookDataExport",
2612
2613
  "costDataRetrieval": "#/components/schemas/PortalExtensionHookCostDataRetrieval",
2613
2614
  "meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck"
2614
2615
  }
@@ -2626,6 +2627,9 @@
2626
2627
  {
2627
2628
  "$ref": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval"
2628
2629
  },
2630
+ {
2631
+ "$ref": "#/components/schemas/PortalExtensionHookDataExport"
2632
+ },
2629
2633
  {
2630
2634
  "$ref": "#/components/schemas/PortalExtensionHookCostDataRetrieval"
2631
2635
  },
@@ -2715,7 +2719,8 @@
2715
2719
  },
2716
2720
  "use_static_ips": {
2717
2721
  "type": "boolean",
2718
- "description": "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.",
2722
+ "deprecated": true,
2723
+ "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",
2719
2724
  "default": false
2720
2725
  },
2721
2726
  "secure_proxy": {
@@ -2828,7 +2833,8 @@
2828
2833
  },
2829
2834
  "use_static_ips": {
2830
2835
  "type": "boolean",
2831
- "description": "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.",
2836
+ "deprecated": true,
2837
+ "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",
2832
2838
  "default": false
2833
2839
  },
2834
2840
  "secure_proxy": {
@@ -2939,7 +2945,8 @@
2939
2945
  },
2940
2946
  "use_static_ips": {
2941
2947
  "type": "boolean",
2942
- "description": "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.",
2948
+ "deprecated": true,
2949
+ "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",
2943
2950
  "default": false
2944
2951
  },
2945
2952
  "secure_proxy": {
@@ -3039,7 +3046,8 @@
3039
3046
  },
3040
3047
  "use_static_ips": {
3041
3048
  "type": "boolean",
3042
- "description": "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.",
3049
+ "deprecated": true,
3050
+ "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",
3043
3051
  "default": false
3044
3052
  },
3045
3053
  "secure_proxy": {
@@ -3084,6 +3092,20 @@
3084
3092
  ]
3085
3093
  }
3086
3094
  },
3095
+ "type_options": {
3096
+ "type": "array",
3097
+ "description": "Consumption types advertised by the hook (e.g. `ht`/`nt`, `feed-in`/`feed-out`). The `id` has to match the `type` field returned in the consumption response.\n",
3098
+ "items": {
3099
+ "$ref": "#/components/schemas/PortalExtensionHookConsumptionOption"
3100
+ }
3101
+ },
3102
+ "aggregation_method_options": {
3103
+ "type": "array",
3104
+ "description": "Aggregation methods advertised by the hook (e.g. `sum`, `average`, `min`, `max`). The `id` has to match the `aggregation_method` field returned in the consumption response.\n",
3105
+ "items": {
3106
+ "$ref": "#/components/schemas/PortalExtensionHookConsumptionAggregationMethodOption"
3107
+ }
3108
+ },
3087
3109
  "auth": {
3088
3110
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3089
3111
  },
@@ -3138,7 +3160,8 @@
3138
3160
  },
3139
3161
  "use_static_ips": {
3140
3162
  "type": "boolean",
3141
- "description": "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.",
3163
+ "deprecated": true,
3164
+ "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",
3142
3165
  "default": false
3143
3166
  },
3144
3167
  "secure_proxy": {
@@ -3152,6 +3175,130 @@
3152
3175
  ],
3153
3176
  "additionalProperties": false
3154
3177
  },
3178
+ "PortalExtensionHookDataExport": {
3179
+ "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",
3180
+ "type": "object",
3181
+ "properties": {
3182
+ "id": {
3183
+ "type": "string",
3184
+ "pattern": "^[a-zA-Z0-9_-]+$",
3185
+ "description": "Identifier of the hook. Should not change between updates."
3186
+ },
3187
+ "name": {
3188
+ "$ref": "#/components/schemas/TranslatedString"
3189
+ },
3190
+ "type": {
3191
+ "type": "string",
3192
+ "enum": [
3193
+ "dataExport"
3194
+ ]
3195
+ },
3196
+ "auth": {
3197
+ "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3198
+ },
3199
+ "call": {
3200
+ "type": "object",
3201
+ "properties": {
3202
+ "method": {
3203
+ "type": "string",
3204
+ "description": "HTTP method to use for the call",
3205
+ "default": "GET"
3206
+ },
3207
+ "url": {
3208
+ "type": "string",
3209
+ "description": "URL to call. Supports variable interpolation."
3210
+ },
3211
+ "params": {
3212
+ "type": "object",
3213
+ "description": "Parameters to append to the URL. Supports variable interpolation.",
3214
+ "additionalProperties": {
3215
+ "type": "string"
3216
+ },
3217
+ "default": {}
3218
+ },
3219
+ "headers": {
3220
+ "type": "object",
3221
+ "description": "Headers to use. Supports variable interpolation.",
3222
+ "additionalProperties": {
3223
+ "type": "string"
3224
+ },
3225
+ "default": {}
3226
+ },
3227
+ "body": {
3228
+ "type": "object",
3229
+ "description": "Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.",
3230
+ "additionalProperties": true
3231
+ }
3232
+ },
3233
+ "required": [
3234
+ "url"
3235
+ ],
3236
+ "additionalProperties": false
3237
+ },
3238
+ "use_static_ips": {
3239
+ "type": "boolean",
3240
+ "deprecated": true,
3241
+ "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",
3242
+ "default": false
3243
+ },
3244
+ "secure_proxy": {
3245
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3246
+ }
3247
+ },
3248
+ "required": [
3249
+ "id",
3250
+ "type",
3251
+ "call"
3252
+ ],
3253
+ "additionalProperties": false
3254
+ },
3255
+ "PortalExtensionHookConsumptionOption": {
3256
+ "type": "object",
3257
+ "description": "A consumption type advertised by a consumption data retrieval hook.",
3258
+ "properties": {
3259
+ "id": {
3260
+ "type": "string",
3261
+ "description": "Identifier of the option. Matches the `type` value returned by the hook (e.g. `ht`, `nt`, `feed-in`)."
3262
+ },
3263
+ "label": {
3264
+ "$ref": "#/components/schemas/TranslatedString"
3265
+ },
3266
+ "aggregation_group": {
3267
+ "type": "string",
3268
+ "description": "Optional grouping key. Types sharing the same aggregation_group are interpreted as values that can be aggregated (e.g. ht/nt shown as a stacked bar chart - summed into total consumption per interval). Types in different groups — or types without a group — are not (e.g. feed-in vs feed-out shown as separate bars).\n",
3269
+ "example": "consumption"
3270
+ }
3271
+ },
3272
+ "required": [
3273
+ "id",
3274
+ "label"
3275
+ ],
3276
+ "additionalProperties": false
3277
+ },
3278
+ "PortalExtensionHookConsumptionAggregationMethodOption": {
3279
+ "type": "object",
3280
+ "description": "An aggregation method advertised by a consumption data retrieval hook.",
3281
+ "properties": {
3282
+ "id": {
3283
+ "type": "string",
3284
+ "enum": [
3285
+ "sum",
3286
+ "average",
3287
+ "min",
3288
+ "max"
3289
+ ],
3290
+ "description": "Identifier of the option. Matches the `aggregation_method` value returned by the hook."
3291
+ },
3292
+ "label": {
3293
+ "$ref": "#/components/schemas/TranslatedString"
3294
+ }
3295
+ },
3296
+ "required": [
3297
+ "id",
3298
+ "label"
3299
+ ],
3300
+ "additionalProperties": false
3301
+ },
3155
3302
  "PortalExtensionHookCostDataRetrieval": {
3156
3303
  "description": "Hook that will allow using the specified source as data for consumption visualizations. This hook is triggered to fetch the data. Format of the request and response has to follow the following specification: TBD. The expected response to the call is:\n - 200 with the time series data\n",
3157
3304
  "type": "object",
@@ -3237,7 +3384,8 @@
3237
3384
  },
3238
3385
  "use_static_ips": {
3239
3386
  "type": "boolean",
3240
- "description": "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.",
3387
+ "deprecated": true,
3388
+ "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",
3241
3389
  "default": false
3242
3390
  },
3243
3391
  "secure_proxy": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/app-client",
3
- "version": "0.12.3",
3
+ "version": "0.12.5",
4
4
  "description": "JavaScript client library for the epilot App API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  "test": "vitest",
26
26
  "typescript": "tsc",
27
27
  "bundle-definition": "webpack",
28
- "openapi:local": "node ../../scripts/update-openapi.js /Users/sauerer/epilot/app-api/openapi.yml",
28
+ "openapi:local": "node ../../scripts/update-openapi.js ../../../app-api/openapi.yml",
29
29
  "openapi": "node ../../scripts/update-openapi.js https://docs.api.epilot.io/app.yaml",
30
30
  "typegen": "openapi typegen src/openapi.json --client > src/openapi.d.ts",
31
31
  "build": "tsc && npm run build:patch && npm run bundle-definition",