@epilot/app-client 0.12.2 → 0.12.4

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: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 o=n(t(466));r.default=o.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":{}}}},"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 o=r[n];if(void 0!==o)return o.exports;var p=r[n]={exports:{}};return e[n].call(p.exports,p,p.exports,t),p.exports}(330),n=exports;for(var o in t)n[o]=t[o];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})})();
@@ -501,6 +501,41 @@
501
501
  },
502
502
  "responses": {}
503
503
  }
504
+ },
505
+ "/v1/public/app/{appId}/proxy/{proxyName}/{path}": {
506
+ "parameters": [
507
+ {
508
+ "name": "appId",
509
+ "in": "path",
510
+ "required": true,
511
+ "description": "ID of the installed app"
512
+ },
513
+ {
514
+ "name": "proxyName",
515
+ "in": "path",
516
+ "required": true,
517
+ "description": "Name of the proxy target as defined in the app manifest"
518
+ },
519
+ {
520
+ "name": "path",
521
+ "in": "path",
522
+ "required": true,
523
+ "description": "Path to forward to the proxy target"
524
+ }
525
+ ],
526
+ "get": {
527
+ "operationId": "publicProxyGet",
528
+ "responses": {}
529
+ },
530
+ "post": {
531
+ "operationId": "publicProxyPost",
532
+ "requestBody": {
533
+ "content": {
534
+ "application/json": {}
535
+ }
536
+ },
537
+ "responses": {}
538
+ }
504
539
  }
505
540
  },
506
541
  "components": {
package/dist/openapi.d.ts CHANGED
@@ -138,6 +138,35 @@ declare namespace Components {
138
138
  };
139
139
  }[];
140
140
  }
141
+ export interface ApiProxyComponent {
142
+ component_type: "API_PROXY";
143
+ configuration: /* Configuration for an API proxy component */ ApiProxyConfig;
144
+ }
145
+ /**
146
+ * Configuration for an API proxy component
147
+ */
148
+ export interface ApiProxyConfig {
149
+ /**
150
+ * Human-friendly proxy name used in SDK calls
151
+ */
152
+ name: string; // ^[a-zA-Z0-9_-]+$
153
+ /**
154
+ * Base URL of the target API. Must be HTTPS.
155
+ */
156
+ target: string; // uri ^https://
157
+ /**
158
+ * Authentication strategy
159
+ */
160
+ auth_type: "header" | "bearer" | "oauth2" | "none";
161
+ /**
162
+ * Header name for 'header' auth type
163
+ */
164
+ auth_header?: string;
165
+ /**
166
+ * OAuth2 token endpoint URL
167
+ */
168
+ token_url?: string; // uri ^https://
169
+ }
141
170
  export interface AppBridgeSurfaceConfig {
142
171
  /**
143
172
  * URL of the uploaded App Bridge App. This is the entrypoint for the app
@@ -245,7 +274,7 @@ declare namespace Components {
245
274
  surfaces?: {
246
275
  [key: string]: any;
247
276
  };
248
- } & (JourneyBlockComponent | PortalBlockComponent | PortalExtensionComponent | CustomFlowActionComponent | ErpInformToolkitComponent | CustomCapabilityComponent | ExternalProductCatalogComponent | CustomPageComponent);
277
+ } & (JourneyBlockComponent | PortalBlockComponent | PortalExtensionComponent | CustomFlowActionComponent | ErpInformToolkitComponent | CustomCapabilityComponent | ExternalProductCatalogComponent | CustomPageComponent | ApiProxyComponent);
249
278
  export interface BaseComponentCommon {
250
279
  /**
251
280
  * Unique identifier for the component
@@ -407,6 +436,22 @@ declare namespace Components {
407
436
  * How often the subscription is billed
408
437
  */
409
438
  export type BillingFrequency = "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM";
439
+ /**
440
+ * References another journey block by its ID. The configuring user picks
441
+ * a block from the journey via a dropdown in the journey-builder; the
442
+ * chosen block's ID is stored as the arg value (a string). The bundle can
443
+ * then call `subscribe(blockId, cb)` / `getValue(blockId)` against that ID.
444
+ *
445
+ */
446
+ export interface BlockReferenceArg {
447
+ type?: "block_reference";
448
+ /**
449
+ * Restrict the picker to blocks of these journey block types
450
+ * (e.g. ["availability-check", "address"]). Omit to allow any type.
451
+ *
452
+ */
453
+ allowed_types?: string[];
454
+ }
410
455
  export interface BlueprintRef {
411
456
  /**
412
457
  * ID of the blueprint
@@ -453,7 +498,7 @@ declare namespace Components {
453
498
  /**
454
499
  * Type of app component
455
500
  */
456
- export type ComponentType = "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE";
501
+ export type ComponentType = "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE" | "API_PROXY";
457
502
  /**
458
503
  * Configuration of the published app
459
504
  */
@@ -1214,7 +1259,7 @@ declare namespace Components {
1214
1259
  * Unique identifier for this component arg
1215
1260
  */
1216
1261
  key: string;
1217
- type: "text" | "boolean" | "enum";
1262
+ type: "text" | "boolean" | "enum" | "block_reference";
1218
1263
  /**
1219
1264
  * Flag to indicate if this option is required
1220
1265
  */
@@ -1245,7 +1290,14 @@ declare namespace Components {
1245
1290
  */
1246
1291
  de: string;
1247
1292
  };
1248
- } & (TextArg | BooleanArg | EnumArg);
1293
+ } & (TextArg | BooleanArg | EnumArg | /**
1294
+ * References another journey block by its ID. The configuring user picks
1295
+ * a block from the journey via a dropdown in the journey-builder; the
1296
+ * chosen block's ID is stored as the arg value (a string). The bundle can
1297
+ * then call `subscribe(blockId, cb)` / `getValue(blockId)` against that ID.
1298
+ *
1299
+ */
1300
+ BlockReferenceArg);
1249
1301
  export interface JourneyBlockConfig {
1250
1302
  override_dev_mode?: /* Override URL when app is in dev mode */ OverrideDevMode;
1251
1303
  /**
@@ -1445,6 +1497,11 @@ declare namespace Components {
1445
1497
  *
1446
1498
  */
1447
1499
  PortalExtensionHookConsumptionDataRetrieval | /**
1500
+ * Hook that takes over the export of consumption data from the portal. When defined, the portal delegates exporting (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the export itself. This hook is triggered when an end user requests a consumption export. 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
+ PortalExtensionHookConsumptionExport | /**
1448
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:
1449
1506
  * - 200 with the time series data
1450
1507
  *
@@ -1488,6 +1545,16 @@ declare namespace Components {
1488
1545
  };
1489
1546
  }[];
1490
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
+ }
1491
1558
  /**
1492
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:
1493
1560
  * - 200 with the time series data
@@ -1504,6 +1571,16 @@ declare namespace Components {
1504
1571
  * Intervals supported by the API. If omitted, it is assumed that all intervals are supported.
1505
1572
  */
1506
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[];
1507
1584
  auth?: PortalExtensionAuthBlock;
1508
1585
  call: {
1509
1586
  /**
@@ -1540,11 +1617,72 @@ declare namespace Components {
1540
1617
  dataPath?: string;
1541
1618
  };
1542
1619
  /**
1620
+ * Deprecated. Prefer `secure_proxy` instead.
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
+ *
1623
+ */
1624
+ use_static_ips?: boolean;
1625
+ secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
1626
+ }
1627
+ /**
1628
+ * Hook that takes over the export of consumption data from the portal. When defined, the portal delegates exporting (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the export itself. This hook is triggered when an end user requests a consumption export. The expected response to the call is:
1629
+ * - 200 with a JSON body describing the exported file (download_url, optional filename, content_type, expires_at)
1630
+ *
1631
+ */
1632
+ export interface PortalExtensionHookConsumptionExport {
1633
+ /**
1634
+ * Identifier of the hook. Should not change between updates.
1635
+ */
1636
+ id: string; // ^[a-zA-Z0-9_-]+$
1637
+ name?: TranslatedString;
1638
+ type: "consumptionExport";
1639
+ auth?: PortalExtensionAuthBlock;
1640
+ call: {
1641
+ /**
1642
+ * HTTP method to use for the call
1643
+ */
1644
+ method?: string;
1645
+ /**
1646
+ * URL to call. Supports variable interpolation.
1647
+ */
1648
+ url: string;
1649
+ /**
1650
+ * Parameters to append to the URL. Supports variable interpolation.
1651
+ */
1652
+ params?: {
1653
+ [name: string]: string;
1654
+ };
1655
+ /**
1656
+ * Headers to use. Supports variable interpolation.
1657
+ */
1658
+ headers?: {
1659
+ [name: string]: string;
1660
+ };
1661
+ /**
1662
+ * Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.
1663
+ */
1664
+ body?: {
1665
+ [name: string]: any;
1666
+ };
1667
+ };
1668
+ /**
1669
+ * Deprecated. Prefer `secure_proxy` instead.
1543
1670
  * 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.
1671
+ *
1544
1672
  */
1545
1673
  use_static_ips?: boolean;
1546
1674
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
1547
1675
  }
1676
+ /**
1677
+ * A consumption type advertised by a consumption data retrieval hook.
1678
+ */
1679
+ export interface PortalExtensionHookConsumptionOption {
1680
+ /**
1681
+ * Identifier of the option. Matches the `type` value returned by the hook (e.g. `ht`, `nt`, `feed-in`).
1682
+ */
1683
+ id: string;
1684
+ label: TranslatedString;
1685
+ }
1548
1686
  /**
1549
1687
  * 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).
1550
1688
  * The expected response http status code to the call is:
@@ -1622,7 +1760,9 @@ declare namespace Components {
1622
1760
  en: string;
1623
1761
  };
1624
1762
  /**
1763
+ * Deprecated. Prefer `secure_proxy` instead.
1625
1764
  * 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.
1765
+ *
1626
1766
  */
1627
1767
  use_static_ips?: boolean;
1628
1768
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1679,7 +1819,9 @@ declare namespace Components {
1679
1819
  dataPath?: string;
1680
1820
  };
1681
1821
  /**
1822
+ * Deprecated. Prefer `secure_proxy` instead.
1682
1823
  * 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.
1824
+ *
1683
1825
  */
1684
1826
  use_static_ips?: boolean;
1685
1827
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1773,7 +1915,9 @@ declare namespace Components {
1773
1915
  lower_limit?: string;
1774
1916
  };
1775
1917
  /**
1918
+ * Deprecated. Prefer `secure_proxy` instead.
1776
1919
  * 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.
1920
+ *
1777
1921
  */
1778
1922
  use_static_ips?: boolean;
1779
1923
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1830,7 +1974,9 @@ declare namespace Components {
1830
1974
  dataPath?: string;
1831
1975
  };
1832
1976
  /**
1977
+ * Deprecated. Prefer `secure_proxy` instead.
1833
1978
  * 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.
1979
+ *
1834
1980
  */
1835
1981
  use_static_ips?: boolean;
1836
1982
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -1882,7 +2028,9 @@ declare namespace Components {
1882
2028
  result: string;
1883
2029
  };
1884
2030
  /**
2031
+ * Deprecated. Prefer `secure_proxy` instead.
1885
2032
  * 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.
2033
+ *
1886
2034
  */
1887
2035
  use_static_ips?: boolean;
1888
2036
  secure_proxy?: /* If set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips. */ PortalExtensionSecureProxy;
@@ -2607,6 +2755,32 @@ declare namespace Paths {
2607
2755
  }
2608
2756
  }
2609
2757
  }
2758
+ namespace PublicProxyGet {
2759
+ namespace Responses {
2760
+ export interface $200 {
2761
+ }
2762
+ export interface $403 {
2763
+ }
2764
+ export interface $404 {
2765
+ }
2766
+ export interface $502 {
2767
+ }
2768
+ }
2769
+ }
2770
+ namespace PublicProxyPost {
2771
+ export interface RequestBody {
2772
+ }
2773
+ namespace Responses {
2774
+ export interface $200 {
2775
+ }
2776
+ export interface $403 {
2777
+ }
2778
+ export interface $404 {
2779
+ }
2780
+ export interface $502 {
2781
+ }
2782
+ }
2783
+ }
2610
2784
  namespace QueryEvents {
2611
2785
  namespace Parameters {
2612
2786
  export type AppId = string;
@@ -2671,6 +2845,18 @@ declare namespace Paths {
2671
2845
  componentId: Parameters.ComponentId;
2672
2846
  }
2673
2847
  }
2848
+ namespace V1PublicApp$AppIdProxy$ProxyName$Path {
2849
+ namespace Parameters {
2850
+ export type AppId = string;
2851
+ export type Path = string;
2852
+ export type ProxyName = string;
2853
+ }
2854
+ export interface PathParameters {
2855
+ appId: Parameters.AppId;
2856
+ proxyName: Parameters.ProxyName;
2857
+ path: Parameters.Path;
2858
+ }
2859
+ }
2674
2860
  }
2675
2861
 
2676
2862
 
@@ -2976,6 +3162,26 @@ export interface OperationMethods {
2976
3162
  data?: Paths.IngestEvent.RequestBody,
2977
3163
  config?: AxiosRequestConfig
2978
3164
  ): OperationResponse<Paths.IngestEvent.Responses.$202>
3165
+ /**
3166
+ * publicProxyGet - publicProxyGet
3167
+ *
3168
+ * Forward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)
3169
+ */
3170
+ 'publicProxyGet'(
3171
+ parameters?: Parameters<Paths.V1PublicApp$AppIdProxy$ProxyName$Path.PathParameters> | null,
3172
+ data?: any,
3173
+ config?: AxiosRequestConfig
3174
+ ): OperationResponse<Paths.PublicProxyGet.Responses.$200>
3175
+ /**
3176
+ * publicProxyPost - publicProxyPost
3177
+ *
3178
+ * Forward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)
3179
+ */
3180
+ 'publicProxyPost'(
3181
+ parameters?: Parameters<Paths.V1PublicApp$AppIdProxy$ProxyName$Path.PathParameters> | null,
3182
+ data?: Paths.PublicProxyPost.RequestBody,
3183
+ config?: AxiosRequestConfig
3184
+ ): OperationResponse<Paths.PublicProxyPost.Responses.$200>
2979
3185
  }
2980
3186
 
2981
3187
  export interface PathsDictionary {
@@ -3318,6 +3524,28 @@ export interface PathsDictionary {
3318
3524
  config?: AxiosRequestConfig
3319
3525
  ): OperationResponse<Paths.IngestEvent.Responses.$202>
3320
3526
  }
3527
+ ['/v1/public/app/{appId}/proxy/{proxyName}/{path}']: {
3528
+ /**
3529
+ * publicProxyGet - publicProxyGet
3530
+ *
3531
+ * Forward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)
3532
+ */
3533
+ 'get'(
3534
+ parameters?: Parameters<Paths.V1PublicApp$AppIdProxy$ProxyName$Path.PathParameters> | null,
3535
+ data?: any,
3536
+ config?: AxiosRequestConfig
3537
+ ): OperationResponse<Paths.PublicProxyGet.Responses.$200>
3538
+ /**
3539
+ * publicProxyPost - publicProxyPost
3540
+ *
3541
+ * Forward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)
3542
+ */
3543
+ 'post'(
3544
+ parameters?: Parameters<Paths.V1PublicApp$AppIdProxy$ProxyName$Path.PathParameters> | null,
3545
+ data?: Paths.PublicProxyPost.RequestBody,
3546
+ config?: AxiosRequestConfig
3547
+ ): OperationResponse<Paths.PublicProxyPost.Responses.$200>
3548
+ }
3321
3549
  }
3322
3550
 
3323
3551
  export type Client = OpenAPIClient<OperationMethods, PathsDictionary>
@@ -3325,6 +3553,8 @@ export type Client = OpenAPIClient<OperationMethods, PathsDictionary>
3325
3553
 
3326
3554
  export type Actor = Components.Schemas.Actor;
3327
3555
  export type AggregatedEvents = Components.Schemas.AggregatedEvents;
3556
+ export type ApiProxyComponent = Components.Schemas.ApiProxyComponent;
3557
+ export type ApiProxyConfig = Components.Schemas.ApiProxyConfig;
3328
3558
  export type AppBridgeSurfaceConfig = Components.Schemas.AppBridgeSurfaceConfig;
3329
3559
  export type AppEventData = Components.Schemas.AppEventData;
3330
3560
  export type Audit = Components.Schemas.Audit;
@@ -3334,6 +3564,7 @@ export type BaseComponentCommon = Components.Schemas.BaseComponentCommon;
3334
3564
  export type BaseCustomActionConfig = Components.Schemas.BaseCustomActionConfig;
3335
3565
  export type BatchEventRequest = Components.Schemas.BatchEventRequest;
3336
3566
  export type BillingFrequency = Components.Schemas.BillingFrequency;
3567
+ export type BlockReferenceArg = Components.Schemas.BlockReferenceArg;
3337
3568
  export type BlueprintRef = Components.Schemas.BlueprintRef;
3338
3569
  export type BooleanArg = Components.Schemas.BooleanArg;
3339
3570
  export type CallerIdentity = Components.Schemas.CallerIdentity;
@@ -3373,7 +3604,10 @@ export type PortalBlockSurfaceConfig = Components.Schemas.PortalBlockSurfaceConf
3373
3604
  export type PortalExtensionAuthBlock = Components.Schemas.PortalExtensionAuthBlock;
3374
3605
  export type PortalExtensionComponent = Components.Schemas.PortalExtensionComponent;
3375
3606
  export type PortalExtensionConfig = Components.Schemas.PortalExtensionConfig;
3607
+ export type PortalExtensionHookConsumptionAggregationMethodOption = Components.Schemas.PortalExtensionHookConsumptionAggregationMethodOption;
3376
3608
  export type PortalExtensionHookConsumptionDataRetrieval = Components.Schemas.PortalExtensionHookConsumptionDataRetrieval;
3609
+ export type PortalExtensionHookConsumptionExport = Components.Schemas.PortalExtensionHookConsumptionExport;
3610
+ export type PortalExtensionHookConsumptionOption = Components.Schemas.PortalExtensionHookConsumptionOption;
3377
3611
  export type PortalExtensionHookContractIdentification = Components.Schemas.PortalExtensionHookContractIdentification;
3378
3612
  export type PortalExtensionHookCostDataRetrieval = Components.Schemas.PortalExtensionHookCostDataRetrieval;
3379
3613
  export type PortalExtensionHookMeterReadingPlausibilityCheck = Components.Schemas.PortalExtensionHookMeterReadingPlausibilityCheck;
package/dist/openapi.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": {
@@ -1832,7 +1930,8 @@
1832
1930
  "ERP_INFORM_TOOLKIT",
1833
1931
  "CUSTOM_CAPABILITY",
1834
1932
  "EXTERNAL_PRODUCT_CATALOG",
1835
- "CUSTOM_PAGE"
1933
+ "CUSTOM_PAGE",
1934
+ "API_PROXY"
1836
1935
  ],
1837
1936
  "description": "Type of app component"
1838
1937
  },
@@ -1944,7 +2043,8 @@
1944
2043
  "ERP_INFORM_TOOLKIT": "#/components/schemas/ErpInformToolkitComponent",
1945
2044
  "CUSTOM_CAPABILITY": "#/components/schemas/CustomCapabilityComponent",
1946
2045
  "EXTERNAL_PRODUCT_CATALOG": "#/components/schemas/ExternalProductCatalogComponent",
1947
- "CUSTOM_PAGE": "#/components/schemas/CustomPageComponent"
2046
+ "CUSTOM_PAGE": "#/components/schemas/CustomPageComponent",
2047
+ "API_PROXY": "#/components/schemas/ApiProxyComponent"
1948
2048
  }
1949
2049
  },
1950
2050
  "oneOf": [
@@ -1971,11 +2071,32 @@
1971
2071
  },
1972
2072
  {
1973
2073
  "$ref": "#/components/schemas/CustomPageComponent"
2074
+ },
2075
+ {
2076
+ "$ref": "#/components/schemas/ApiProxyComponent"
1974
2077
  }
1975
2078
  ]
1976
2079
  }
1977
2080
  ]
1978
2081
  },
2082
+ "ApiProxyComponent": {
2083
+ "type": "object",
2084
+ "required": [
2085
+ "component_type",
2086
+ "configuration"
2087
+ ],
2088
+ "properties": {
2089
+ "component_type": {
2090
+ "type": "string",
2091
+ "enum": [
2092
+ "API_PROXY"
2093
+ ]
2094
+ },
2095
+ "configuration": {
2096
+ "$ref": "#/components/schemas/ApiProxyConfig"
2097
+ }
2098
+ }
2099
+ },
1979
2100
  "CustomCapabilityComponent": {
1980
2101
  "type": "object",
1981
2102
  "required": [
@@ -2488,6 +2609,7 @@
2488
2609
  "contractIdentification": "#/components/schemas/PortalExtensionHookContractIdentification",
2489
2610
  "priceDataRetrieval": "#/components/schemas/PortalExtensionHookPriceDataRetrieval",
2490
2611
  "consumptionDataRetrieval": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval",
2612
+ "consumptionExport": "#/components/schemas/PortalExtensionHookConsumptionExport",
2491
2613
  "costDataRetrieval": "#/components/schemas/PortalExtensionHookCostDataRetrieval",
2492
2614
  "meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck"
2493
2615
  }
@@ -2505,6 +2627,9 @@
2505
2627
  {
2506
2628
  "$ref": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval"
2507
2629
  },
2630
+ {
2631
+ "$ref": "#/components/schemas/PortalExtensionHookConsumptionExport"
2632
+ },
2508
2633
  {
2509
2634
  "$ref": "#/components/schemas/PortalExtensionHookCostDataRetrieval"
2510
2635
  },
@@ -2594,7 +2719,8 @@
2594
2719
  },
2595
2720
  "use_static_ips": {
2596
2721
  "type": "boolean",
2597
- "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",
2598
2724
  "default": false
2599
2725
  },
2600
2726
  "secure_proxy": {
@@ -2707,7 +2833,8 @@
2707
2833
  },
2708
2834
  "use_static_ips": {
2709
2835
  "type": "boolean",
2710
- "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",
2711
2838
  "default": false
2712
2839
  },
2713
2840
  "secure_proxy": {
@@ -2818,7 +2945,8 @@
2818
2945
  },
2819
2946
  "use_static_ips": {
2820
2947
  "type": "boolean",
2821
- "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",
2822
2950
  "default": false
2823
2951
  },
2824
2952
  "secure_proxy": {
@@ -2918,7 +3046,8 @@
2918
3046
  },
2919
3047
  "use_static_ips": {
2920
3048
  "type": "boolean",
2921
- "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",
2922
3051
  "default": false
2923
3052
  },
2924
3053
  "secure_proxy": {
@@ -2963,6 +3092,20 @@
2963
3092
  ]
2964
3093
  }
2965
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
+ },
2966
3109
  "auth": {
2967
3110
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
2968
3111
  },
@@ -3017,7 +3160,85 @@
3017
3160
  },
3018
3161
  "use_static_ips": {
3019
3162
  "type": "boolean",
3020
- "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",
3165
+ "default": false
3166
+ },
3167
+ "secure_proxy": {
3168
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3169
+ }
3170
+ },
3171
+ "required": [
3172
+ "id",
3173
+ "type",
3174
+ "call"
3175
+ ],
3176
+ "additionalProperties": false
3177
+ },
3178
+ "PortalExtensionHookConsumptionExport": {
3179
+ "description": "Hook that takes over the export of consumption data from the portal. When defined, the portal delegates exporting (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the export itself. This hook is triggered when an end user requests a consumption export. 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
+ "consumptionExport"
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",
3021
3242
  "default": false
3022
3243
  },
3023
3244
  "secure_proxy": {
@@ -3031,6 +3252,48 @@
3031
3252
  ],
3032
3253
  "additionalProperties": false
3033
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
+ },
3267
+ "required": [
3268
+ "id",
3269
+ "label"
3270
+ ],
3271
+ "additionalProperties": false
3272
+ },
3273
+ "PortalExtensionHookConsumptionAggregationMethodOption": {
3274
+ "type": "object",
3275
+ "description": "An aggregation method advertised by a consumption data retrieval hook.",
3276
+ "properties": {
3277
+ "id": {
3278
+ "type": "string",
3279
+ "enum": [
3280
+ "sum",
3281
+ "average",
3282
+ "min",
3283
+ "max"
3284
+ ],
3285
+ "description": "Identifier of the option. Matches the `aggregation_method` value returned by the hook."
3286
+ },
3287
+ "label": {
3288
+ "$ref": "#/components/schemas/TranslatedString"
3289
+ }
3290
+ },
3291
+ "required": [
3292
+ "id",
3293
+ "label"
3294
+ ],
3295
+ "additionalProperties": false
3296
+ },
3034
3297
  "PortalExtensionHookCostDataRetrieval": {
3035
3298
  "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",
3036
3299
  "type": "object",
@@ -3116,7 +3379,8 @@
3116
3379
  },
3117
3380
  "use_static_ips": {
3118
3381
  "type": "boolean",
3119
- "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.",
3382
+ "deprecated": true,
3383
+ "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
3384
  "default": false
3121
3385
  },
3122
3386
  "secure_proxy": {
@@ -3430,7 +3694,8 @@
3430
3694
  "enum": [
3431
3695
  "text",
3432
3696
  "boolean",
3433
- "enum"
3697
+ "enum",
3698
+ "block_reference"
3434
3699
  ]
3435
3700
  },
3436
3701
  "required": {
@@ -3467,7 +3732,8 @@
3467
3732
  "mapping": {
3468
3733
  "text": "#/components/schemas/TextArg",
3469
3734
  "boolean": "#/components/schemas/BooleanArg",
3470
- "enum": "#/components/schemas/EnumArg"
3735
+ "enum": "#/components/schemas/EnumArg",
3736
+ "block_reference": "#/components/schemas/BlockReferenceArg"
3471
3737
  }
3472
3738
  },
3473
3739
  "oneOf": [
@@ -3479,6 +3745,9 @@
3479
3745
  },
3480
3746
  {
3481
3747
  "$ref": "#/components/schemas/EnumArg"
3748
+ },
3749
+ {
3750
+ "$ref": "#/components/schemas/BlockReferenceArg"
3482
3751
  }
3483
3752
  ]
3484
3753
  }
@@ -3506,6 +3775,25 @@
3506
3775
  }
3507
3776
  }
3508
3777
  },
3778
+ "BlockReferenceArg": {
3779
+ "type": "object",
3780
+ "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",
3781
+ "properties": {
3782
+ "type": {
3783
+ "type": "string",
3784
+ "enum": [
3785
+ "block_reference"
3786
+ ]
3787
+ },
3788
+ "allowed_types": {
3789
+ "type": "array",
3790
+ "description": "Restrict the picker to blocks of these journey block types\n(e.g. [\"availability-check\", \"address\"]). Omit to allow any type.\n",
3791
+ "items": {
3792
+ "type": "string"
3793
+ }
3794
+ }
3795
+ }
3796
+ },
3509
3797
  "EnumArg": {
3510
3798
  "type": "object",
3511
3799
  "required": [
@@ -3876,6 +4164,49 @@
3876
4164
  }
3877
4165
  }
3878
4166
  },
4167
+ "ApiProxyConfig": {
4168
+ "type": "object",
4169
+ "description": "Configuration for an API proxy component",
4170
+ "required": [
4171
+ "name",
4172
+ "target",
4173
+ "auth_type"
4174
+ ],
4175
+ "properties": {
4176
+ "name": {
4177
+ "type": "string",
4178
+ "description": "Human-friendly proxy name used in SDK calls",
4179
+ "pattern": "^[a-zA-Z0-9_-]+$",
4180
+ "maxLength": 64
4181
+ },
4182
+ "target": {
4183
+ "type": "string",
4184
+ "format": "uri",
4185
+ "description": "Base URL of the target API. Must be HTTPS.",
4186
+ "pattern": "^https://"
4187
+ },
4188
+ "auth_type": {
4189
+ "type": "string",
4190
+ "enum": [
4191
+ "header",
4192
+ "bearer",
4193
+ "oauth2",
4194
+ "none"
4195
+ ],
4196
+ "description": "Authentication strategy"
4197
+ },
4198
+ "auth_header": {
4199
+ "type": "string",
4200
+ "description": "Header name for 'header' auth type"
4201
+ },
4202
+ "token_url": {
4203
+ "type": "string",
4204
+ "format": "uri",
4205
+ "description": "OAuth2 token endpoint URL",
4206
+ "pattern": "^https://"
4207
+ }
4208
+ }
4209
+ },
3879
4210
  "Grants": {
3880
4211
  "type": "array",
3881
4212
  "description": "Required grants for the app in order to call APIs for the installing tenant",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/app-client",
3
- "version": "0.12.2",
3
+ "version": "0.12.4",
4
4
  "description": "JavaScript client library for the epilot App API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -64,7 +64,7 @@
64
64
  "axios": "^1.11.0",
65
65
  "copy-webpack-plugin": "^7.0.0",
66
66
  "json-loader": "^0.5.7",
67
- "openapicmd": "^2.7.0",
67
+ "openapicmd": "^2.9.2",
68
68
  "ts-loader": "^8.0.14",
69
69
  "ts-node": "^10.9.1",
70
70
  "typescript": "^4.1.3",