@epilot/sdk 2.4.4 → 2.6.0

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.
Files changed (215) hide show
  1. package/definitions/app.json +137 -58
  2. package/definitions/customer-portal-runtime.json +1 -1
  3. package/definitions/customer-portal.json +496 -24
  4. package/definitions/entity.json +185 -8
  5. package/definitions/integration-toolkit-runtime.json +1 -1
  6. package/definitions/integration-toolkit.json +480 -4
  7. package/definitions/metering-runtime.json +1 -1
  8. package/definitions/metering.json +728 -64
  9. package/definitions/webhooks-runtime.json +1 -1
  10. package/definitions/webhooks.json +134 -4
  11. package/dist/apis/access-token.cjs +6 -6
  12. package/dist/apis/access-token.js +1 -1
  13. package/dist/apis/address-suggestions.cjs +6 -6
  14. package/dist/apis/address-suggestions.js +1 -1
  15. package/dist/apis/address.cjs +6 -6
  16. package/dist/apis/address.js +1 -1
  17. package/dist/apis/ai-agents.cjs +6 -6
  18. package/dist/apis/ai-agents.js +1 -1
  19. package/dist/apis/app.cjs +8 -8
  20. package/dist/apis/app.d.cts +2 -2
  21. package/dist/apis/app.d.ts +2 -2
  22. package/dist/apis/app.js +2 -2
  23. package/dist/apis/audit-logs.cjs +6 -6
  24. package/dist/apis/audit-logs.js +1 -1
  25. package/dist/apis/automation.cjs +6 -6
  26. package/dist/apis/automation.js +1 -1
  27. package/dist/apis/billing.cjs +6 -6
  28. package/dist/apis/billing.js +1 -1
  29. package/dist/apis/blueprint-manifest.cjs +6 -6
  30. package/dist/apis/blueprint-manifest.js +1 -1
  31. package/dist/apis/calendar.cjs +6 -6
  32. package/dist/apis/calendar.js +1 -1
  33. package/dist/apis/configuration-hub.cjs +6 -6
  34. package/dist/apis/configuration-hub.js +1 -1
  35. package/dist/apis/consent.cjs +6 -6
  36. package/dist/apis/consent.js +1 -1
  37. package/dist/apis/customer-portal.cjs +8 -8
  38. package/dist/apis/customer-portal.d.cts +2 -2
  39. package/dist/apis/customer-portal.d.ts +2 -2
  40. package/dist/apis/customer-portal.js +2 -2
  41. package/dist/apis/dashboard.cjs +6 -6
  42. package/dist/apis/dashboard.js +1 -1
  43. package/dist/apis/data-governance.cjs +6 -6
  44. package/dist/apis/data-governance.js +1 -1
  45. package/dist/apis/deduplication.cjs +6 -6
  46. package/dist/apis/deduplication.js +1 -1
  47. package/dist/apis/design.cjs +6 -6
  48. package/dist/apis/design.js +1 -1
  49. package/dist/apis/document.cjs +6 -6
  50. package/dist/apis/document.js +1 -1
  51. package/dist/apis/email-settings.cjs +6 -6
  52. package/dist/apis/email-settings.js +1 -1
  53. package/dist/apis/email-template.cjs +6 -6
  54. package/dist/apis/email-template.js +1 -1
  55. package/dist/apis/entity-mapping.cjs +6 -6
  56. package/dist/apis/entity-mapping.js +1 -1
  57. package/dist/apis/entity.cjs +6 -6
  58. package/dist/apis/entity.d.cts +2 -2
  59. package/dist/apis/entity.d.ts +2 -2
  60. package/dist/apis/entity.js +1 -1
  61. package/dist/apis/environments.cjs +6 -6
  62. package/dist/apis/environments.js +1 -1
  63. package/dist/apis/event-catalog.cjs +6 -6
  64. package/dist/apis/event-catalog.js +1 -1
  65. package/dist/apis/file.cjs +6 -6
  66. package/dist/apis/file.js +1 -1
  67. package/dist/apis/iban.cjs +6 -6
  68. package/dist/apis/iban.js +1 -1
  69. package/dist/apis/integration-toolkit.cjs +8 -8
  70. package/dist/apis/integration-toolkit.d.cts +2 -2
  71. package/dist/apis/integration-toolkit.d.ts +2 -2
  72. package/dist/apis/integration-toolkit.js +2 -2
  73. package/dist/apis/journey.cjs +6 -6
  74. package/dist/apis/journey.js +1 -1
  75. package/dist/apis/kanban.cjs +6 -6
  76. package/dist/apis/kanban.js +1 -1
  77. package/dist/apis/message.cjs +6 -6
  78. package/dist/apis/message.js +1 -1
  79. package/dist/apis/metering.cjs +8 -8
  80. package/dist/apis/metering.d.cts +2 -2
  81. package/dist/apis/metering.d.ts +2 -2
  82. package/dist/apis/metering.js +2 -2
  83. package/dist/apis/notes.cjs +6 -6
  84. package/dist/apis/notes.d.cts +2 -2
  85. package/dist/apis/notes.d.ts +2 -2
  86. package/dist/apis/notes.js +1 -1
  87. package/dist/apis/notification.cjs +6 -6
  88. package/dist/apis/notification.js +1 -1
  89. package/dist/apis/organization.cjs +6 -6
  90. package/dist/apis/organization.js +1 -1
  91. package/dist/apis/partner-directory.cjs +6 -6
  92. package/dist/apis/partner-directory.js +1 -1
  93. package/dist/apis/permissions.cjs +6 -6
  94. package/dist/apis/permissions.js +1 -1
  95. package/dist/apis/pricing-tier.cjs +6 -6
  96. package/dist/apis/pricing-tier.js +1 -1
  97. package/dist/apis/pricing.cjs +6 -6
  98. package/dist/apis/pricing.js +1 -1
  99. package/dist/apis/purpose.cjs +6 -6
  100. package/dist/apis/purpose.js +1 -1
  101. package/dist/apis/query.cjs +6 -6
  102. package/dist/apis/query.js +1 -1
  103. package/dist/apis/sandbox.cjs +6 -6
  104. package/dist/apis/sandbox.js +1 -1
  105. package/dist/apis/sharing.cjs +6 -6
  106. package/dist/apis/sharing.js +1 -1
  107. package/dist/apis/submission.cjs +6 -6
  108. package/dist/apis/submission.js +1 -1
  109. package/dist/apis/target.cjs +6 -6
  110. package/dist/apis/target.js +1 -1
  111. package/dist/apis/targeting.cjs +6 -6
  112. package/dist/apis/targeting.js +1 -1
  113. package/dist/apis/template-variables.cjs +6 -6
  114. package/dist/apis/template-variables.js +1 -1
  115. package/dist/apis/user.cjs +6 -6
  116. package/dist/apis/user.js +1 -1
  117. package/dist/apis/validation-rules.cjs +6 -6
  118. package/dist/apis/validation-rules.js +1 -1
  119. package/dist/apis/webhooks.cjs +8 -8
  120. package/dist/apis/webhooks.d.cts +2 -2
  121. package/dist/apis/webhooks.d.ts +2 -2
  122. package/dist/apis/webhooks.js +2 -2
  123. package/dist/apis/workflow-definition.cjs +6 -6
  124. package/dist/apis/workflow-definition.js +1 -1
  125. package/dist/apis/workflow.cjs +6 -6
  126. package/dist/apis/workflow.js +1 -1
  127. package/dist/app-34OBBTA4.js +7 -0
  128. package/dist/app-SSF545U7.cjs +7 -0
  129. package/dist/app-runtime-AFNM67YN.cjs +5 -0
  130. package/dist/{app-runtime-U7RGV7KT.js → app-runtime-DBUXZL6E.js} +1 -1
  131. package/dist/{app.d-u7Dq42kU.d.cts → app.d--5n0FQQ4.d.cts} +377 -11
  132. package/dist/{app.d-u7Dq42kU.d.ts → app.d--5n0FQQ4.d.ts} +377 -11
  133. package/dist/bin/cli.js +1 -1
  134. package/dist/{chunk-JTFWOEZF.cjs → chunk-4FFGRWLS.cjs} +1 -1
  135. package/dist/chunk-56MMZJOD.js +14 -0
  136. package/dist/chunk-5OBMZHRL.cjs +14 -0
  137. package/dist/{chunk-L66IX6GX.cjs → chunk-KMVJYNLB.cjs} +1 -1
  138. package/dist/chunk-KYCVV2XE.cjs +14 -0
  139. package/dist/{chunk-TSV242UN.js → chunk-QNUU4TTU.js} +13 -13
  140. package/dist/chunk-RGO3LTAM.js +14 -0
  141. package/dist/{chunk-CD4OX2U6.cjs → chunk-SDIGGISZ.cjs} +13 -13
  142. package/dist/chunk-T6A22LSD.cjs +14 -0
  143. package/dist/chunk-WM74R3BD.js +14 -0
  144. package/dist/{chunk-LLZYRINH.js → chunk-Z4H2FZ2K.js} +1 -1
  145. package/dist/chunk-Z6HGUGXK.js +14 -0
  146. package/dist/customer-portal-5I7ZGQDU.cjs +7 -0
  147. package/dist/customer-portal-YL2YMPZL.js +7 -0
  148. package/dist/{customer-portal-runtime-PSM55KGU.js → customer-portal-runtime-N4NWQ67M.js} +1 -1
  149. package/dist/{customer-portal-runtime-DULJLR7F.cjs → customer-portal-runtime-OEXTSMSE.cjs} +2 -2
  150. package/dist/{customer-portal.d-DyZ2n2dW.d.cts → customer-portal.d-ChSEioI5.d.cts} +394 -9
  151. package/dist/{customer-portal.d-DyZ2n2dW.d.ts → customer-portal.d-ChSEioI5.d.ts} +394 -9
  152. package/dist/entity-SS36LQO6.cjs +7 -0
  153. package/dist/entity-Z4YWKDVG.js +7 -0
  154. package/dist/{entity.d-BHR9dEon.d.cts → entity.d-fospShiN.d.cts} +234 -169
  155. package/dist/{entity.d-BHR9dEon.d.ts → entity.d-fospShiN.d.ts} +234 -169
  156. package/dist/index.cjs +18 -18
  157. package/dist/index.d.cts +7 -7
  158. package/dist/index.d.ts +7 -7
  159. package/dist/index.js +6 -6
  160. package/dist/integration-toolkit-3I3IPVFN.cjs +7 -0
  161. package/dist/integration-toolkit-XAFQXNQY.js +7 -0
  162. package/dist/{integration-toolkit-runtime-5KG3LGXF.cjs → integration-toolkit-runtime-YHTU4X5J.cjs} +2 -2
  163. package/dist/{integration-toolkit-runtime-LYHFVIRW.js → integration-toolkit-runtime-YR4CIMKH.js} +1 -1
  164. package/dist/{integration-toolkit.d-Ry-KC9ow.d.cts → integration-toolkit.d-BstNqiJb.d.cts} +460 -20
  165. package/dist/{integration-toolkit.d-Ry-KC9ow.d.ts → integration-toolkit.d-BstNqiJb.d.ts} +460 -20
  166. package/dist/{js-yaml-UPZKYVRY.js → js-yaml-DLCVPJ7G.js} +17 -15
  167. package/dist/metering-3IUSYAGN.js +7 -0
  168. package/dist/metering-MHBFU7QH.cjs +7 -0
  169. package/dist/{webhooks-runtime-EBM4M3SU.cjs → metering-runtime-IUZJHBVS.cjs} +2 -2
  170. package/dist/{metering-runtime-NJ6NEUMB.js → metering-runtime-KZMJKKUZ.js} +1 -1
  171. package/dist/{metering.d-DvtPv7wk.d.ts → metering.d-CUICZDiL.d.cts} +718 -130
  172. package/dist/{metering.d-DvtPv7wk.d.cts → metering.d-CUICZDiL.d.ts} +718 -130
  173. package/dist/notes-K2IIFCX3.cjs +7 -0
  174. package/dist/notes-Q7JGS7O3.js +7 -0
  175. package/dist/{notes.d-BC-scR42.d.cts → notes.d-BcV_m5fe.d.cts} +33 -11
  176. package/dist/{notes.d-BC-scR42.d.ts → notes.d-BcV_m5fe.d.ts} +33 -11
  177. package/dist/{pricing-XAET4G7T.cjs → pricing-FODHQFCB.cjs} +1 -1
  178. package/dist/{pricing-G67CH3XH.js → pricing-XRIDVZFC.js} +1 -1
  179. package/dist/webhooks-NZ3TM3AY.cjs +7 -0
  180. package/dist/webhooks-XLBUXXCS.js +7 -0
  181. package/dist/{metering-runtime-HAIWXZXJ.cjs → webhooks-runtime-QVAFNBDW.cjs} +2 -2
  182. package/dist/{webhooks-runtime-XCQYIGQK.js → webhooks-runtime-UYTPQQVG.js} +1 -1
  183. package/dist/{webhooks.d-pLHIL_io.d.cts → webhooks.d-D79qib9f.d.cts} +115 -5
  184. package/dist/{webhooks.d-pLHIL_io.d.ts → webhooks.d-D79qib9f.d.ts} +115 -5
  185. package/docs/app.md +244 -9
  186. package/docs/customer-portal.md +340 -113
  187. package/docs/entity.md +65 -0
  188. package/docs/integration-toolkit.md +334 -19
  189. package/docs/metering.md +570 -48
  190. package/docs/notes.md +19 -12
  191. package/docs/pricing.md +3 -1
  192. package/docs/webhooks.md +49 -0
  193. package/package.json +1 -1
  194. package/dist/app-5KSVSKDU.js +0 -7
  195. package/dist/app-PL3IOROO.cjs +0 -7
  196. package/dist/app-runtime-SSNHSBR7.cjs +0 -5
  197. package/dist/chunk-265TE2OV.js +0 -14
  198. package/dist/chunk-2MMSXUOL.cjs +0 -14
  199. package/dist/chunk-4ZMLRFDX.cjs +0 -14
  200. package/dist/chunk-A7AAVJGM.js +0 -14
  201. package/dist/chunk-GVNT76UU.js +0 -14
  202. package/dist/chunk-HHMXS5NC.cjs +0 -14
  203. package/dist/chunk-U4PUHKZC.js +0 -14
  204. package/dist/customer-portal-5LMHNBMD.cjs +0 -7
  205. package/dist/customer-portal-RZACUF4N.js +0 -7
  206. package/dist/entity-H6ESUH3Y.js +0 -7
  207. package/dist/entity-ZVDKWQSF.cjs +0 -7
  208. package/dist/integration-toolkit-FRPFOYT2.js +0 -7
  209. package/dist/integration-toolkit-VNMDI55O.cjs +0 -7
  210. package/dist/metering-DZNZPPY6.cjs +0 -7
  211. package/dist/metering-KOSCPPKB.js +0 -7
  212. package/dist/notes-3AO5GXIT.js +0 -7
  213. package/dist/notes-MPWOQC5J.cjs +0 -7
  214. package/dist/webhooks-H3RT33BF.cjs +0 -7
  215. package/dist/webhooks-RTOU3MS5.js +0 -7
package/docs/notes.md CHANGED
@@ -179,14 +179,17 @@ const { data } = await client.updateNote(
179
179
  }
180
180
  ],
181
181
  pinned_at: '1970-01-01T00:00:00.000Z',
182
- created_by: {
183
- type: 'user',
184
- user_id: 'string',
185
- display_name: 'string',
186
- org_id: 'string',
187
- email: 'string',
188
- phone: 'string'
189
- },
182
+ edited_at: '1970-01-01T00:00:00.000Z',
183
+ created_by: [
184
+ {
185
+ type: 'user',
186
+ user_id: 'string',
187
+ display_name: 'string',
188
+ org_id: 'string',
189
+ email: 'string',
190
+ phone: 'string'
191
+ }
192
+ ],
190
193
  read_by: ['string'],
191
194
  reactions: {}
192
195
  },
@@ -225,6 +228,7 @@ const { data } = await client.searchNotesByContext(
225
228
  id: 'string'
226
229
  }
227
230
  ],
231
+ include_related_schemas: ['string'],
228
232
  from: 0,
229
233
  size: 10
230
234
  },
@@ -476,14 +480,15 @@ type NotePatchRequestBody = {
476
480
  id: string
477
481
  }>
478
482
  pinned_at?: string // date-time
479
- created_by?: {
483
+ edited_at?: string // date-time
484
+ created_by?: Array<{
480
485
  type: "user" | "group"
481
486
  user_id?: string
482
487
  display_name?: string
483
488
  org_id?: string
484
489
  email?: string
485
490
  phone?: string
486
- }
491
+ }>
487
492
  read_by?: string[]
488
493
  reactions?: Record<string, string[]>
489
494
  }
@@ -561,14 +566,15 @@ type NotePutRequestBody = {
561
566
  id: string
562
567
  }>
563
568
  pinned_at?: string // date-time
564
- created_by?: {
569
+ edited_at?: string // date-time
570
+ created_by?: Array<{
565
571
  type: "user" | "group"
566
572
  user_id?: string
567
573
  display_name?: string
568
574
  org_id?: string
569
575
  email?: string
570
576
  phone?: string
571
- }
577
+ }>
572
578
  read_by?: string[]
573
579
  reactions?: Record<string, string[]>
574
580
  }
@@ -582,6 +588,7 @@ type NoteSearchByContextRequestBody = {
582
588
  type: "workflow_execution" | "workflow_task" | "workflow_configuration" | "journey_configuration" | "entity"
583
589
  id: string
584
590
  }>
591
+ include_related_schemas?: string[]
585
592
  from?: number
586
593
  size?: number
587
594
  }
package/docs/pricing.md CHANGED
@@ -4659,10 +4659,11 @@ type RecurrenceAmount = {
4659
4659
 
4660
4660
  ### `CashbackAmount`
4661
4661
 
4662
- An amount associated with a specific cashback period.
4662
+ A detail associated with a specific cashback.
4663
4663
 
4664
4664
  ```ts
4665
4665
  type CashbackAmount = {
4666
+ cashback_name?: string
4666
4667
  cashback_period: "0" | "12"
4667
4668
  amount_total: number
4668
4669
  }
@@ -4726,6 +4727,7 @@ type TotalDetails = {
4726
4727
  before_discount_amount_subtotal_decimal?: { ... }
4727
4728
  }>
4728
4729
  cashbacks?: Array<{
4730
+ cashback_name?: { ... }
4729
4731
  cashback_period: { ... }
4730
4732
  amount_total: { ... }
4731
4733
  }>
package/docs/webhooks.md CHANGED
@@ -32,6 +32,7 @@ const { data } = await webhooksClient.getPublicKey(...)
32
32
  - [`getConfig`](#getconfig)
33
33
  - [`updateConfig`](#updateconfig)
34
34
  - [`deleteConfig`](#deleteconfig)
35
+ - [`testOAuth`](#testoauth)
35
36
  - [`triggerWebhook`](#triggerwebhook)
36
37
  - [`batchReplayEvents`](#batchreplayevents)
37
38
  - [`getEventById`](#geteventbyid)
@@ -67,6 +68,7 @@ const { data } = await webhooksClient.getPublicKey(...)
67
68
  - [`WebhookEvent`](#webhookevent)
68
69
  - [`ExampleRequest`](#examplerequest)
69
70
  - [`ExampleResponse`](#exampleresponse)
71
+ - [`TestOAuthResponse`](#testoauthresponse)
70
72
  - [`BatchReplayRequest`](#batchreplayrequest)
71
73
 
72
74
  ### `getPublicKey`
@@ -331,6 +333,34 @@ const { data } = await client.deleteConfig({
331
333
 
332
334
  ---
333
335
 
336
+ ### `testOAuth`
337
+
338
+ Test OAuth connection
339
+
340
+ `POST /v1/webhooks/configs/{configId}/test-oauth`
341
+
342
+ ```ts
343
+ const { data } = await client.testOAuth({
344
+ configId: 'example',
345
+ })
346
+ ```
347
+
348
+ <details>
349
+ <summary>Response</summary>
350
+
351
+ ```json
352
+ {
353
+ "success": true,
354
+ "expires_in": 3600,
355
+ "token_type": "Bearer",
356
+ "message": "OAuth token exchange successful"
357
+ }
358
+ ```
359
+
360
+ </details>
361
+
362
+ ---
363
+
334
364
  ### `triggerWebhook`
335
365
 
336
366
  triggers a webhook event either async or sync
@@ -798,6 +828,7 @@ type WebhookConfig = {
798
828
  eventName: string
799
829
  url?: string
800
830
  creationTime?: string
831
+ updatedTime?: string
801
832
  httpMethod?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD"
802
833
  enabled?: boolean
803
834
  auth?: {
@@ -830,6 +861,7 @@ type WebhookConfig = {
830
861
  include_relations?: boolean
831
862
  include_activity?: boolean
832
863
  include_changed_attributes?: boolean
864
+ apply_changesets?: boolean
833
865
  custom_headers?: Record<string, string>
834
866
  }
835
867
  enableStaticIP?: boolean
@@ -840,6 +872,11 @@ type WebhookConfig = {
840
872
  }
841
873
  status?: "active" | "inactive" | "incomplete"
842
874
  jsonataExpression?: string
875
+ deliveryMode?: "json_base64" | "binary_multipart"
876
+ multipartConfig?: {
877
+ fileFieldName?: string
878
+ metadataFieldName?: string
879
+ }
843
880
  filterConditions?: {
844
881
  conditions?: Array<{
845
882
  field: { ... }
@@ -907,6 +944,7 @@ type PayloadConfiguration = {
907
944
  include_relations?: boolean
908
945
  include_activity?: boolean
909
946
  include_changed_attributes?: boolean
947
+ apply_changesets?: boolean
910
948
  custom_headers?: Record<string, string>
911
949
  }
912
950
  ```
@@ -1038,6 +1076,17 @@ type ExampleResponse = {
1038
1076
  }
1039
1077
  ```
1040
1078
 
1079
+ ### `TestOAuthResponse`
1080
+
1081
+ ```ts
1082
+ type TestOAuthResponse = {
1083
+ success: boolean
1084
+ expires_in?: number
1085
+ token_type?: string
1086
+ message: string
1087
+ }
1088
+ ```
1089
+
1041
1090
  ### `BatchReplayRequest`
1042
1091
 
1043
1092
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/sdk",
3
- "version": "2.4.4",
3
+ "version": "2.6.0",
4
4
  "description": "JavaScript/TypeScript SDK for epilot APIs",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1,7 +0,0 @@
1
- import "./chunk-YPSWSI3M.js";
2
-
3
- // src/docs/app.json
4
- var app_default = '# App API\n\n- **Base URL:** `https://app.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/app](https://docs.epilot.io/api/app)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.app.getPublicFacingComponent(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/app\'\n\nconst appClient = getClient()\nauthorize(appClient, () => \'<token>\')\nconst { data } = await appClient.getPublicFacingComponent(...)\n```\n\n## Operations\n\n**App Installation**\n- [`getPublicFacingComponent`](#getpublicfacingcomponent)\n- [`listInstallations`](#listinstallations)\n- [`getInstallation`](#getinstallation)\n- [`install`](#install)\n- [`patchInstallation`](#patchinstallation)\n- [`uninstall`](#uninstall)\n- [`promoteVersion`](#promoteversion)\n\n**App Configuration**\n- [`listConfigurations`](#listconfigurations)\n- [`createConfiguration`](#createconfiguration)\n- [`listPublicConfigurations`](#listpublicconfigurations)\n- [`getPublicConfiguration`](#getpublicconfiguration)\n- [`getConfiguration`](#getconfiguration)\n- [`patchMetadata`](#patchmetadata)\n- [`deleteConfiguration`](#deleteconfiguration)\n- [`createBundleUploadUrl`](#createbundleuploadurl)\n- [`createZipUploadUrl`](#createzipuploadurl)\n- [`createLogoUploadUrl`](#createlogouploadurl)\n- [`deleteLogo`](#deletelogo)\n- [`listVersions`](#listversions)\n- [`getVersion`](#getversion)\n- [`deleteVersion`](#deleteversion)\n- [`patchVersion`](#patchversion)\n- [`getReview`](#getreview)\n- [`createReview`](#createreview)\n- [`createComponent`](#createcomponent)\n- [`patchComponent`](#patchcomponent)\n- [`deleteComponent`](#deletecomponent)\n- [`cloneVersion`](#cloneversion)\n\n**App Analytics**\n- [`queryEvents`](#queryevents)\n- [`ingestEvent`](#ingestevent)\n\n**Schemas**\n- [`Role`](#role)\n- [`Options`](#options)\n- [`Option`](#option)\n- [`OptionsRef`](#optionsref)\n- [`S3Reference`](#s3reference)\n- [`ComponentType`](#componenttype)\n- [`Author`](#author)\n- [`NotificationConfig`](#notificationconfig)\n- [`NotificationEvent`](#notificationevent)\n- [`BaseComponentCommon`](#basecomponentcommon)\n- [`BaseComponent`](#basecomponent)\n- [`CustomCapabilityComponent`](#customcapabilitycomponent)\n- [`CustomPageComponent`](#custompagecomponent)\n- [`CustomPageConfig`](#custompageconfig)\n- [`JourneyBlockComponent`](#journeyblockcomponent)\n- [`PortalBlockComponent`](#portalblockcomponent)\n- [`ErpInformToolkitComponent`](#erpinformtoolkitcomponent)\n- [`CustomFlowActionComponent`](#customflowactioncomponent)\n- [`BaseCustomActionConfig`](#basecustomactionconfig)\n- [`ExternalIntegrationCustomActionConfig`](#externalintegrationcustomactionconfig)\n- [`SandboxCustomActionConfig`](#sandboxcustomactionconfig)\n- [`CustomFlowConfig`](#customflowconfig)\n- [`ExternalProductCatalogComponent`](#externalproductcatalogcomponent)\n- [`ExternalProductCatalogConfig`](#externalproductcatalogconfig)\n- [`ExternalProductCatalogHookProducts`](#externalproductcataloghookproducts)\n- [`ExternalProductCatalogHookProductRecommendations`](#externalproductcataloghookproductrecommendations)\n- [`PortalExtensionComponent`](#portalextensioncomponent)\n- [`PortalExtensionConfig`](#portalextensionconfig)\n- [`PortalExtensionHookRegistrationIdentifiersCheck`](#portalextensionhookregistrationidentifierscheck)\n- [`PortalExtensionHookContractIdentification`](#portalextensionhookcontractidentification)\n- [`PortalExtensionHookMeterReadingPlausibilityCheck`](#portalextensionhookmeterreadingplausibilitycheck)\n- [`PortalExtensionHookPriceDataRetrieval`](#portalextensionhookpricedataretrieval)\n- [`PortalExtensionHookConsumptionDataRetrieval`](#portalextensionhookconsumptiondataretrieval)\n- [`PortalExtensionHookCostDataRetrieval`](#portalextensionhookcostdataretrieval)\n- [`PortalExtensionSeamlessLink`](#portalextensionseamlesslink)\n- [`PortalExtensionAuthBlock`](#portalextensionauthblock)\n- [`PortalExtensionSecureProxy`](#portalextensionsecureproxy)\n- [`ExternalProductCatalogAuthBlock`](#externalproductcatalogauthblock)\n- [`OverrideDevMode`](#overridedevmode)\n- [`JourneyBlockConfig`](#journeyblockconfig)\n- [`PortalBlockConfig`](#portalblockconfig)\n- [`AppBridgeSurfaceConfig`](#appbridgesurfaceconfig)\n- [`PortalBlockSurfaceConfig`](#portalblocksurfaceconfig)\n- [`JourneyBlockComponentArgs`](#journeyblockcomponentargs)\n- [`TextArg`](#textarg)\n- [`BooleanArg`](#booleanarg)\n- [`EnumArg`](#enumarg)\n- [`BillingFrequency`](#billingfrequency)\n- [`Pricing`](#pricing)\n- [`Audit`](#audit)\n- [`Review`](#review)\n- [`ConfigurationMetadata`](#configurationmetadata)\n- [`ConfigurationVersion`](#configurationversion)\n- [`Grants`](#grants)\n- [`BlueprintRef`](#blueprintref)\n- [`Installation`](#installation)\n- [`PublicConfiguration`](#publicconfiguration)\n- [`Configuration`](#configuration)\n- [`TranslatedString`](#translatedstring)\n- [`CallerIdentity`](#calleridentity)\n- [`BatchEventRequest`](#batcheventrequest)\n- [`Actor`](#actor)\n- [`AppEventData`](#appeventdata)\n- [`EventsQuery`](#eventsquery)\n- [`EventsQueryResponse`](#eventsqueryresponse)\n- [`RawEvents`](#rawevents)\n- [`AggregatedEvents`](#aggregatedevents)\n\n### `getPublicFacingComponent`\n\nRetrieve public facing components for an installed app\n\n`GET /v1/public/app/{appId}/components/{componentId}`\n\n```ts\nconst { data } = await client.getPublicFacingComponent({\n appId: \'example\',\n componentId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component": {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `listConfigurations`\n\nList all app configuration metadata owned by an organization. To get full app configuration details, use the /v1/app-configurations/{appId} endpoint.\n\n`GET /v1/app-configurations`\n\n```ts\nconst { data } = await client.listConfigurations({\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "configurations": [\n {\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `createConfiguration`\n\nCreate a new private app configuration. To make it public a verification process needs to be triggered\n\n`POST /v1/app-configurations`\n\n```ts\nconst { data } = await client.createConfiguration(\n null,\n {\n name: \'string\',\n description: {\n en: \'string\',\n de: \'string\'\n },\n category: \'string\',\n logo_url_key: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string"\n}\n```\n\n</details>\n\n---\n\n### `listPublicConfigurations`\n\nList all publicly available app configurations that can be installed. This endpoint returns apps that have at least one public version.\n\n`GET /v1/app-configurations/public`\n\n```ts\nconst { data } = await client.listPublicConfigurations({\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "configurations": [\n {\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getPublicConfiguration`\n\nRetrieve the public configuration of an app to install in your tenant\n\n`GET /v1/app-configurations/public/{appId}`\n\n```ts\nconst { data } = await client.getPublicConfiguration({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "support_email": "string",\n "owner_org_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {}\n }\n ],\n "is_beta": true,\n "deprecated_at": "string",\n "version": "string",\n "role": {\n "id": "string",\n "grants": [\n {}\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "latest_version": "string",\n "public": true,\n "versions": [\n {\n "app_id": "string",\n "owner_org_id": "string",\n "components": [],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {},\n "blueprint_ref": {},\n "version_audit": {}\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getConfiguration`\n\nRetrieve a specific app configuration\n\n`GET /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.getConfiguration({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {\n "action": "string",\n "resource": "string"\n }\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `patchMetadata`\n\nPatch non-versioned configuration metadata of a given app configuration.\n\n`PATCH /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.patchMetadata(\n {\n appId: \'example\',\n },\n {\n name: \'string\',\n description: {\n en: \'string\',\n de: \'string\'\n },\n category: \'string\',\n documentation_url: \'string\',\n notifications: {\n email: \'developer@example.com\',\n events: [\'app.installed\']\n },\n pricing: {\n pricing_type: \'FREE\',\n billing_frequency: \'MONTHLY\'\n },\n logo_url_key: \'string\',\n support_email: \'string\',\n dev_mode: true\n },\n)\n```\n\n---\n\n### `deleteConfiguration`\n\nDelete app configuration\n\n`DELETE /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.deleteConfiguration({\n appId: \'example\',\n})\n```\n\n---\n\n### `queryEvents`\n\nQuery analytics events for a specific app with flexible filtering\n\n`POST /v1/app-configurations/{appId}/events`\n\n```ts\nconst { data } = await client.queryEvents(\n {\n appId: \'example\',\n },\n {\n time_range: {\n start: \'1970-01-01T00:00:00.000Z\',\n end: \'1970-01-01T00:00:00.000Z\',\n preset: \'1h\'\n },\n filters: {\n source: [\'CUSTOM_JOURNEY_BLOCK\'],\n component_id: [\'string\'],\n event_type: [\'ERROR\'],\n correlation_id: \'string\'\n },\n aggregation: {\n group_by: [\'source\'],\n metrics: [\'count\']\n },\n pagination: {\n page: 1,\n page_size: 100\n },\n sort: {\n field: \'timestamp\',\n order: \'desc\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "query": {\n "time_range": {\n "start": "1970-01-01T00:00:00.000Z",\n "end": "1970-01-01T00:00:00.000Z",\n "preset": "1h"\n },\n "filters": {\n "source": ["CUSTOM_JOURNEY_BLOCK"],\n "component_id": ["string"],\n "event_type": ["ERROR"],\n "correlation_id": "string"\n },\n "aggregation": {\n "group_by": ["source"],\n "metrics": ["count"]\n },\n "pagination": {\n "page": 1,\n "page_size": 100\n },\n "sort": {\n "field": "timestamp",\n "order": "desc"\n }\n },\n "results": {\n "type": "raw",\n "events": [\n {\n "app_id": "string",\n "version": "string",\n "event_id": "string",\n "component_id": "string",\n "timestamp": "string",\n "correlation_id": "string",\n "event_type": "ERROR",\n "source": "CUSTOM_JOURNEY_BLOCK",\n "actor": {\n "org_id": "string",\n "user_id": "string",\n "type": "user"\n },\n "details": {}\n }\n ]\n },\n "pagination": {\n "page": 0,\n "page_size": 0,\n "total_items": 0,\n "has_next": true\n }\n}\n```\n\n</details>\n\n---\n\n### `createBundleUploadUrl`\n\nGenerate a presigned URL for uploading app bundle to /``<app-id>``/bundle.js path\n\n`POST /v1/app-configurations/{appId}/bundle`\n\n```ts\nconst { data } = await client.createBundleUploadUrl(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n component_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component_id": "string",\n "component_url": "string",\n "upload_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `createZipUploadUrl`\n\nGenerate a presigned URL to upload a zip file with artifacts that will be unpacked in a new directory under the /``<app-id>``/ path\n\n`POST /v1/app-configurations/{appId}/zip`\n\n```ts\nconst { data } = await client.createZipUploadUrl(\n {\n appId: \'example\',\n },\n {\n version: \'1.0.0\',\n component_id: \'string\',\n filename: \'dist.zip\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component_id": "string",\n "upload_url": "string",\n "artifact_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `createLogoUploadUrl`\n\nGenerate a presigned URL for uploading app logo to /``<app-id>``/logo.png path\n\n`POST /v1/app-configurations/{appId}/logo`\n\n```ts\nconst { data } = await client.createLogoUploadUrl(\n {\n appId: \'example\',\n },\n {\n filename: \'company-logo.png\',\n mime_type: \'image/png\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "upload_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteLogo`\n\nDelete the app logo from /``<app-id>``/logo.png path\n\n`DELETE /v1/app-configurations/{appId}/logo`\n\n```ts\nconst { data } = await client.deleteLogo({\n appId: \'example\',\n})\n```\n\n---\n\n### `listVersions`\n\nRetrieve a list of versions for an app configuration\n\n`GET /v1/app-configurations/{appId}/versions`\n\n```ts\nconst { data } = await client.listVersions({\n appId: \'example\',\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "versions": [\n {\n "app_id": "string",\n "owner_org_id": "string",\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {\n "action": "string",\n "resource": "string"\n }\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getVersion`\n\nRetrieve a specific version of an app configuration\n\n`GET /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.getVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {\n "action": "string",\n "resource": "string"\n }\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `deleteVersion`\n\nDelete a specific version of an app configuration\n\n`DELETE /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.deleteVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n---\n\n### `patchVersion`\n\nPatch an existing app version\n\n`PATCH /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.patchVersion(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n manifest_id: \'string\',\n role_id: \'string\',\n grants: [\n {\n action: \'string\',\n resource: \'string\'\n }\n ]\n },\n)\n```\n\n---\n\n### `getReview`\n\nRetrieve the review status of a specific app version\n\n`GET /v1/app-configurations/{appId}/versions/{version}/review`\n\n```ts\nconst { data } = await client.getReview({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "review": {\n "version": "string",\n "review_status": "approved",\n "requested_at": "string",\n "requested_by": "string",\n "technical_contact": "string",\n "marketing_contact": "string",\n "demo_url": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createReview`\n\nSubmit an app version for review to make it public\n\n`POST /v1/app-configurations/{appId}/versions/{version}/review`\n\n```ts\nconst { data } = await client.createReview(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n technical_contact: \'string\',\n marketing_contact: \'string\',\n demo_url: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "review": {\n "version": "string",\n "review_status": "approved",\n "requested_at": "string",\n "requested_by": "string",\n "technical_contact": "string",\n "marketing_contact": "string",\n "demo_url": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createComponent`\n\nPatch an existing app version to create/add a component\n\n`POST /v1/app-configurations/{appId}/versions/{version}/components`\n\n```ts\nconst { data } = await client.createComponent(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n component_type: \'CUSTOM_JOURNEY_BLOCK\',\n configuration: {\n override_dev_mode: {\n override_url: \'http://localhost:3000\'\n },\n component_url: \'https://cdn.apps.com/123/v1.0.0/bundle.js\',\n component_tag: \'string\',\n component_args: [\n {\n type: \'text\'\n }\n ],\n component_size: 0,\n component_mapping: {}\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component": {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `patchComponent`\n\nPatch an existing app version to update its components\n\n`PATCH /v1/app-configurations/{appId}/versions/{version}/components/{componentId}`\n\n```ts\nconst { data } = await client.patchComponent(\n {\n appId: \'example\',\n version: \'example\',\n componentId: \'example\',\n },\n {\n component_type: \'CUSTOM_JOURNEY_BLOCK\',\n configuration: {\n override_dev_mode: {\n override_url: \'http://localhost:3000\'\n },\n component_url: \'https://cdn.apps.com/123/v1.0.0/bundle.js\',\n component_tag: \'string\',\n component_args: [\n {\n type: \'text\'\n }\n ],\n component_size: 0,\n component_mapping: {}\n }\n },\n)\n```\n\n---\n\n### `deleteComponent`\n\nDelete a specific component from an app version\n\n`DELETE /v1/app-configurations/{appId}/versions/{version}/components/{componentId}`\n\n```ts\nconst { data } = await client.deleteComponent({\n appId: \'example\',\n version: \'example\',\n componentId: \'example\',\n})\n```\n\n---\n\n### `cloneVersion`\n\nClone an existing app version to create a new version\n\n`POST /v1/app-configurations/{appId}/versions/{sourceVersion}/clone-to/{targetVersion}`\n\n```ts\nconst { data } = await client.cloneVersion({\n appId: \'example\',\n sourceVersion: \'example\',\n targetVersion: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "version": "string",\n "status": "pending"\n}\n```\n\n</details>\n\n---\n\n### `listInstallations`\n\nRetrieve a list of installed apps for the organization.\n\n`GET /v1/app`\n\n```ts\nconst { data } = await client.listInstallations({\n componentType: \'example\',\n enabled: true,\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "apps": [\n {\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getInstallation`\n\nRetrieve details of an installed app by its ID.\n\n`GET /v1/app/{appId}`\n\n```ts\nconst { data } = await client.getInstallation({\n appId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `install`\n\nUpsert app installation by its ID.\n\n`POST /v1/app/{appId}`\n\n```ts\nconst { data } = await client.install(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n option_values: [\n {\n component_id: \'string\',\n options: [\n {\n key: \'string\',\n value: {}\n }\n ]\n }\n ],\n _manifest: [\'123e4567-e89b-12d3-a456-426614174000\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `patchInstallation`\n\nPatch an installed app by its ID.\n\n`PATCH /v1/app/{appId}`\n\n```ts\nconst { data } = await client.patchInstallation(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n option_values: [\n {\n component_id: \'string\',\n options: [\n {\n key: \'string\',\n value: {}\n }\n ]\n }\n ],\n _manifest: [\'123e4567-e89b-12d3-a456-426614174000\']\n },\n)\n```\n\n---\n\n### `uninstall`\n\nUninstall an app by its ID.\n\n`DELETE /v1/app/{appId}`\n\n```ts\nconst { data } = await client.uninstall({\n appId: \'example\',\n})\n```\n\n---\n\n### `promoteVersion`\n\nUpdate an installed app to a new version\n\n`POST /v1/app/{appId}/promote-to/{version}`\n\n```ts\nconst { data } = await client.promoteVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `ingestEvent`\n\nInternal endpoint for services to submit app events for analytic purposes\n\n`POST /v1/app-events`\n\n```ts\nconst { data } = await client.ingestEvent(\n null,\n {\n app_id: \'string\',\n version: \'string\',\n event_id: \'string\',\n component_id: \'string\',\n timestamp: \'string\',\n correlation_id: \'string\',\n event_type: \'ERROR\',\n source: \'CUSTOM_JOURNEY_BLOCK\',\n actor: {\n org_id: \'string\',\n user_id: \'string\',\n type: \'user\'\n },\n details: {}\n },\n)\n```\n\n---\n\n## Schemas\n\n### `Role`\n\n```ts\ntype Role = {\n id?: string\n grants?: Array<{\n action: string\n resource?: string\n }>\n}\n```\n\n### `Options`\n\nOptions for the component configuration\n\n```ts\ntype Options = {\n key: string\n label?: string\n required?: boolean\n description?: string\n value?: unknown\n type: "text" | "number" | "boolean" | "secret"\n}\n```\n\n### `Option`\n\n```ts\ntype Option = {\n key: string\n value: unknown\n}\n```\n\n### `OptionsRef`\n\n```ts\ntype OptionsRef = {\n component_id: string\n options: Array<{\n key: string\n value: unknown\n }>\n}\n```\n\n### `S3Reference`\n\n```ts\ntype S3Reference = {\n bucket: string\n key: string\n}\n```\n\n### `ComponentType`\n\nType of app component\n\n```ts\ntype ComponentType = "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n```\n\n### `Author`\n\n```ts\ntype Author = {\n name?: string\n company: string\n email?: string\n}\n```\n\n### `NotificationConfig`\n\n```ts\ntype NotificationConfig = {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n}\n```\n\n### `NotificationEvent`\n\n```ts\ntype NotificationEvent = "app.installed" | "app.uninstalled"\n```\n\n### `BaseComponentCommon`\n\n```ts\ntype BaseComponentCommon = {\n id: string\n name?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n value?: unknown\n type: "text" | "number" | "boolean" | "secret"\n }>\n surfaces?: object\n}\n```\n\n### `BaseComponent`\n\n```ts\ntype BaseComponent = {\n id: string\n name?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n value?: unknown\n type: "text" | "number" | "boolean" | "secret"\n }>\n surfaces?: object\n}\n```\n\n### `CustomCapabilityComponent`\n\n```ts\ntype CustomCapabilityComponent = {\n component_type: "CUSTOM_CAPABILITY"\n configuration: {\n type?: "tab" | "group"\n allowed_schemas?: string[]\n }\n surfaces?: {\n capability_config?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `CustomPageComponent`\n\n```ts\ntype CustomPageComponent = {\n component_type: "CUSTOM_PAGE"\n configuration: {\n slug: string\n nav_label?: string\n nav_icon?: string\n nav_description?: string\n }\n surfaces?: {\n page?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `CustomPageConfig`\n\n```ts\ntype CustomPageConfig = {\n slug: string\n nav_label?: string\n nav_icon?: string\n nav_description?: string\n}\n```\n\n### `JourneyBlockComponent`\n\n```ts\ntype JourneyBlockComponent = {\n component_type: "CUSTOM_JOURNEY_BLOCK"\n configuration: {\n override_dev_mode?: {\n override_url?: { ... }\n }\n component_url: string\n component_tag: string\n component_args?: Array<{\n key: { ... }\n type: { ... }\n required?: { ... }\n description?: { ... }\n label: { ... }\n }>\n component_size?: number\n component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">\n }\n}\n```\n\n### `PortalBlockComponent`\n\n```ts\ntype PortalBlockComponent = {\n component_type: "CUSTOM_PORTAL_BLOCK"\n configuration: object\n surfaces?: {\n portal_block?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n supported_surfaces?: { ... }\n }\n }\n}\n```\n\n### `ErpInformToolkitComponent`\n\n```ts\ntype ErpInformToolkitComponent = {\n component_type: "ERP_INFORM_TOOLKIT"\n configuration: {\n type: "inbound" | "outbound"\n }\n}\n```\n\n### `CustomFlowActionComponent`\n\n```ts\ntype CustomFlowActionComponent = {\n component_type: "CUSTOM_FLOW_ACTION"\n configuration: {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: { ... }\n headers?: { ... }\n }\n } | {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "sandbox"\n sandbox_settings?: {\n code?: { ... }\n }\n }\n surfaces?: {\n flow_action_config?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `BaseCustomActionConfig`\n\n```ts\ntype BaseCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n}\n```\n\n### `ExternalIntegrationCustomActionConfig`\n\n```ts\ntype ExternalIntegrationCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: string\n headers?: Record<string, unknown>\n }\n}\n```\n\n### `SandboxCustomActionConfig`\n\n```ts\ntype SandboxCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "sandbox"\n sandbox_settings?: {\n code?: string\n }\n}\n```\n\n### `CustomFlowConfig`\n\n```ts\ntype CustomFlowConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: string\n headers?: Record<string, unknown>\n }\n} | {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "sandbox"\n sandbox_settings?: {\n code?: string\n }\n}\n```\n\n### `ExternalProductCatalogComponent`\n\n```ts\ntype ExternalProductCatalogComponent = {\n component_type: "EXTERNAL_PRODUCT_CATALOG"\n configuration: {\n hooks?: Array<{\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n }>\n }\n}\n```\n\n### `ExternalProductCatalogConfig`\n\n```ts\ntype ExternalProductCatalogConfig = {\n hooks?: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "products"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "product-recommendations"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n }>\n}\n```\n\n### `ExternalProductCatalogHookProducts`\n\nHook for getting products from an external catalog. This hook makes a call to retrieve product data from an external source. Check the docs or the response API call contract https://docs.api.epilot.io/pricing-api-external-catalog for more details.\n\n\n```ts\ntype ExternalProductCatalogHookProducts = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "products"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n}\n```\n\n### `ExternalProductCatalogHookProductRecommendations`\n\nHook for getting product recommendations from an external catalog. This hook makes a call to retrieve product recommendations from an external source. Check the docs or the response API call contract https://docs.api.epilot.io/pricing-api-external-catalog for more details.\n\n\n```ts\ntype ExternalProductCatalogHookProductRecommendations = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "product-recommendations"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n}\n```\n\n### `PortalExtensionComponent`\n\n```ts\ntype PortalExtensionComponent = {\n component_type: "PORTAL_EXTENSION"\n configuration: {\n hooks?: Array<{\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n assignment_mode?: { ... }\n contact_relation_attribute?: { ... }\n explanation?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n plausibility_mode?: { ... }\n auth?: { ... }\n call: { ... }\n resolved: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n }>\n links?: Array<{\n id: { ... }\n name: { ... }\n description?: { ... }\n type: { ... }\n condition?: { ... }\n auth?: { ... }\n redirect: { ... }\n }>\n }\n}\n```\n\n### `PortalExtensionConfig`\n\n```ts\ntype PortalExtensionConfig = {\n hooks?: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "registrationIdentifiersCheck"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers: { ... }\n body?: { ... }\n result: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "contractIdentification"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers: { ... }\n body?: { ... }\n result?: { ... }\n }\n assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"\n contact_relation_attribute?: string\n explanation?: {\n en: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "priceDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n resolved?: {\n dataPath?: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "consumptionDataRetrieval"\n // ...\n}\n```\n\n### `PortalExtensionHookRegistrationIdentifiersCheck`\n\nHook that replaces the built-in registration identifiers check. This hook makes a POST call whenever a user is trying to register to find the corresponding contact. The expected response to the call is:\n - 200 with contact id if exactly one contact is found\n - 404 if no contact is found or more th\n\n```ts\ntype PortalExtensionHookRegistrationIdentifiersCheck = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "registrationIdentifiersCheck"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n result: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookContractIdentification`\n\nHook 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).\nThe expected response http status code to the call is:\n - 200 if found\n - 404 if not found\n\nThe following assignment modes are suppo\n\n```ts\ntype PortalExtensionHookContractIdentification = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "contractIdentification"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n result?: string\n }\n assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"\n contact_relation_attribute?: string\n explanation?: {\n en: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookMeterReadingPlausibilityCheck`\n\nHook that checks the plausibility of meter readings before they are saved. This hook makes a POST call whenever a user is trying to save a meter reading. The expected response to the call is:\n - 200:\n If meter reading is plausible, the response should contain:\n - valid: true\n If meter re\n\n```ts\ntype PortalExtensionHookMeterReadingPlausibilityCheck = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "meterReadingPlausibilityCheck"\n plausibility_mode?: "check" | "range"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n url: string\n body: Record<string, unknown>\n headers: Record<string, string>\n }\n resolved: {\n dataPath?: string\n counter_identifiers?: Record<string, string>\n valid?: string\n upper_limit?: string\n lower_limit?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookPriceDataRetrieval`\n\nHook that will allow using the specified source as data for price 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\n\n```ts\ntype PortalExtensionHookPriceDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "priceDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n dataPath?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookConsumptionDataRetrieval`\n\nHook 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\n\n```ts\ntype PortalExtensionHookConsumptionDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "consumptionDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n dataPath?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookCostDataRetrieval`\n\nHook 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\n\n```ts\ntype PortalExtensionHookCostDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "costDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n dataPath?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionSeamlessLink`\n\n```ts\ntype PortalExtensionSeamlessLink = {\n id: string\n name: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n type: "seamless"\n condition?: string\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n redirect: {\n url?: string\n params?: Record<string, string>\n }\n}\n```\n\n### `PortalExtensionAuthBlock`\n\n```ts\ntype PortalExtensionAuthBlock = {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: string\n ttl: string\n }\n}\n```\n\n### `PortalExtensionSecureProxy`\n\nIf set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips.\n\n```ts\ntype PortalExtensionSecureProxy = {\n integration_id: string // uuid\n use_case_slug: string\n}\n```\n\n### `ExternalProductCatalogAuthBlock`\n\n```ts\ntype ExternalProductCatalogAuthBlock = {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n}\n```\n\n### `OverrideDevMode`\n\nOverride URL when app is in dev mode\n\n```ts\ntype OverrideDevMode = {\n override_url?: string\n}\n```\n\n### `JourneyBlockConfig`\n\n```ts\ntype JourneyBlockConfig = {\n override_dev_mode?: {\n override_url?: string\n }\n component_url: string\n component_tag: string\n component_args?: Array<{\n key: string\n type: "text" | "boolean" | "enum"\n required?: boolean\n description?: {\n en?: { ... }\n de: { ... }\n }\n label: {\n en?: { ... }\n de: { ... }\n }\n }>\n component_size?: number\n component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">\n}\n```\n\n### `PortalBlockConfig`\n\n```ts\ntype PortalBlockConfig = object\n```\n\n### `AppBridgeSurfaceConfig`\n\n```ts\ntype AppBridgeSurfaceConfig = {\n app_url?: string\n zip_url?: string\n override_url?: string\n}\n```\n\n### `PortalBlockSurfaceConfig`\n\n```ts\ntype PortalBlockSurfaceConfig = {\n app_url?: string\n zip_url?: string\n override_url?: string\n supported_surfaces?: "main" | "footer_inline" | "footer_left_absolute" | "footer_right_absolute"[]\n}\n```\n\n### `JourneyBlockComponentArgs`\n\n```ts\ntype JourneyBlockComponentArgs = {\n key: string\n type: "text" | "boolean" | "enum"\n required?: boolean\n description?: {\n en?: string\n de: string\n }\n label: {\n en?: string\n de: string\n }\n}\n```\n\n### `TextArg`\n\n```ts\ntype TextArg = {\n type?: "text"\n}\n```\n\n### `BooleanArg`\n\n```ts\ntype BooleanArg = {\n type?: "boolean"\n}\n```\n\n### `EnumArg`\n\n```ts\ntype EnumArg = {\n type?: "enum"\n isMulti?: boolean\n options: Array<{\n id: string\n label: {\n en?: { ... }\n de: { ... }\n }\n }>\n}\n```\n\n### `BillingFrequency`\n\nHow often the subscription is billed\n\n```ts\ntype BillingFrequency = "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n```\n\n### `Pricing`\n\n```ts\ntype Pricing = {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n}\n```\n\n### `Audit`\n\n```ts\ntype Audit = {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n}\n```\n\n### `Review`\n\n```ts\ntype Review = {\n version?: string\n review_status?: "approved" | "rejected" | "pending"\n requested_at?: string\n requested_by?: string\n technical_contact?: string\n marketing_contact?: string\n demo_url?: string\n}\n```\n\n### `ConfigurationMetadata`\n\nBasic metadata about your app configuration which does not get versioned\n\n```ts\ntype ConfigurationMetadata = {\n app_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n versions: string[]\n public_versions?: string[]\n support_email?: string\n latest_version: string\n category?: string\n icon_url?: string\n documentation_url?: string\n description: {\n en?: string\n de: string\n }\n notifications?: {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n }\n owner_org_id: string\n internal?: boolean\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n configuration_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n}\n```\n\n### `ConfigurationVersion`\n\nConfiguration data about your app which is versionable\n\n```ts\ntype ConfigurationVersion = {\n app_id: string\n owner_org_id: string\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n version_audit: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n versioned_at?: string\n versioned_by?: string\n }\n}\n```\n\n### `Grants`\n\nRequired grants for the app in order to call APIs for the installing tenant\n\n```ts\ntype Grants = Array<{\n action: string\n resource?: string\n}>\n```\n\n### `BlueprintRef`\n\n```ts\ntype BlueprintRef = {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n}\n```\n\n### `Installation`\n\nInformation about the installed app. Has configuration data of the installed version\n\n```ts\ntype Installation = {\n app_id: string\n installer_org_id: string\n owner_org_id?: string\n enabled: boolean\n name: string\n option_values?: Array<{\n component_id: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n }>\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n installed_version: string\n role?: string\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n installation_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n _manifest?: string // uuid[]\n}\n```\n\n### `PublicConfiguration`\n\nPublic configuration of the published app\n\n```ts\ntype PublicConfiguration = {\n app_id: string\n support_email?: string\n owner_org_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n category?: string\n icon_url?: string\n documentation_url?: string\n description?: {\n en?: string\n de: string\n }\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n is_beta?: boolean\n deprecated_at?: string\n version: string\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n latest_version?: string\n public?: boolean\n versions?: Array<{\n app_id: string\n owner_org_id: string\n components: Array<{\n id: { ... }\n name?: { ... }\n description?: { ... }\n options?: { ... }\n surfaces?: { ... }\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: { ... }\n grants?: { ... }\n }\n blueprint_ref?: {\n manifest_id?: { ... }\n job_id?: { ... }\n source_blueprint_file?: { ... }\n }\n version_audit: {\n created_at?: { ... }\n created_by?: { ... }\n updated_at?: { ... }\n updated_by?: { ... }\n versioned_at?: { ... }\n versioned_by?: { ... }\n }\n }>\n}\n```\n\n### `Configuration`\n\nConfiguration of the published app\n\n```ts\ntype Configuration = {\n app_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n versions: string[]\n public_versions?: string[]\n support_email?: string\n latest_version: string\n category?: string\n icon_url?: string\n documentation_url?: string\n description: {\n en?: string\n de: string\n }\n notifications?: {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n }\n owner_org_id: string\n internal?: boolean\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n configuration_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n version_audit: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n versioned_at?: string\n versioned_by?: string\n }\n}\n```\n\n### `TranslatedString`\n\n```ts\ntype TranslatedString = {\n en?: string\n de: string\n}\n```\n\n### `CallerIdentity`\n\n```ts\ntype CallerIdentity = {\n name?: unknown\n org_id: string\n user_id?: string\n token_id?: string\n}\n```\n\n### `BatchEventRequest`\n\n```ts\ntype BatchEventRequest = {\n events: Array<{\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n actor: {\n org_id?: { ... }\n user_id?: { ... }\n type: { ... }\n }\n details?: Record<string, unknown>\n }>\n}\n```\n\n### `Actor`\n\n```ts\ntype Actor = {\n org_id?: string\n user_id?: string\n type: "user" | "system"\n}\n```\n\n### `AppEventData`\n\n```ts\ntype AppEventData = {\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n actor: {\n org_id?: string\n user_id?: string\n type: "user" | "system"\n }\n details?: Record<string, unknown>\n}\n```\n\n### `EventsQuery`\n\n```ts\ntype EventsQuery = {\n time_range?: {\n start?: string // date-time\n end?: string // date-time\n preset?: "1h" | "6h" | "24h" | "7d" | "30d"\n }\n filters?: {\n source?: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"[]\n component_id?: string[]\n event_type?: "ERROR" | "WARNING" | "INFO"[]\n correlation_id?: string\n }\n aggregation?: {\n group_by?: "source" | "component_id" | "event_type" | "hour" | "day"[]\n metrics?: "count" | "error_rate" | "unique_users"[]\n }\n pagination?: {\n page?: number\n page_size?: number\n }\n sort?: {\n field?: "timestamp" | "event_type" | "component_id"\n order?: "asc" | "desc"\n }\n}\n```\n\n### `EventsQueryResponse`\n\n```ts\ntype EventsQueryResponse = {\n query?: {\n time_range?: {\n start?: { ... }\n end?: { ... }\n preset?: { ... }\n }\n filters?: {\n source?: { ... }\n component_id?: { ... }\n event_type?: { ... }\n correlation_id?: { ... }\n }\n aggregation?: {\n group_by?: { ... }\n metrics?: { ... }\n }\n pagination?: {\n page?: { ... }\n page_size?: { ... }\n }\n sort?: {\n field?: { ... }\n order?: { ... }\n }\n }\n results?: {\n type?: "raw"\n events?: Array<{\n app_id: { ... }\n version: { ... }\n event_id?: { ... }\n component_id: { ... }\n timestamp?: { ... }\n correlation_id?: { ... }\n event_type: { ... }\n source: { ... }\n actor: { ... }\n details?: { ... }\n }>\n } | {\n type?: "aggregated"\n groups?: Array<{\n dimensions?: { ... }\n metrics?: { ... }\n }>\n }\n pagination?: {\n page?: number\n page_size?: number\n total_items?: number\n has_next?: boolean\n }\n}\n```\n\n### `RawEvents`\n\n```ts\ntype RawEvents = {\n type?: "raw"\n events?: Array<{\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n actor: {\n org_id?: { ... }\n user_id?: { ... }\n type: { ... }\n }\n details?: Record<string, unknown>\n }>\n}\n```\n\n### `AggregatedEvents`\n\n```ts\ntype AggregatedEvents = {\n type?: "aggregated"\n groups?: Array<{\n dimensions?: Record<string, unknown>\n metrics?: {\n count?: { ... }\n error_rate?: { ... }\n }\n }>\n}\n```\n';
5
- export {
6
- app_default as default
7
- };
@@ -1,7 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
2
-
3
- // src/docs/app.json
4
- var app_default = '# App API\n\n- **Base URL:** `https://app.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/app](https://docs.epilot.io/api/app)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.app.getPublicFacingComponent(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/app\'\n\nconst appClient = getClient()\nauthorize(appClient, () => \'<token>\')\nconst { data } = await appClient.getPublicFacingComponent(...)\n```\n\n## Operations\n\n**App Installation**\n- [`getPublicFacingComponent`](#getpublicfacingcomponent)\n- [`listInstallations`](#listinstallations)\n- [`getInstallation`](#getinstallation)\n- [`install`](#install)\n- [`patchInstallation`](#patchinstallation)\n- [`uninstall`](#uninstall)\n- [`promoteVersion`](#promoteversion)\n\n**App Configuration**\n- [`listConfigurations`](#listconfigurations)\n- [`createConfiguration`](#createconfiguration)\n- [`listPublicConfigurations`](#listpublicconfigurations)\n- [`getPublicConfiguration`](#getpublicconfiguration)\n- [`getConfiguration`](#getconfiguration)\n- [`patchMetadata`](#patchmetadata)\n- [`deleteConfiguration`](#deleteconfiguration)\n- [`createBundleUploadUrl`](#createbundleuploadurl)\n- [`createZipUploadUrl`](#createzipuploadurl)\n- [`createLogoUploadUrl`](#createlogouploadurl)\n- [`deleteLogo`](#deletelogo)\n- [`listVersions`](#listversions)\n- [`getVersion`](#getversion)\n- [`deleteVersion`](#deleteversion)\n- [`patchVersion`](#patchversion)\n- [`getReview`](#getreview)\n- [`createReview`](#createreview)\n- [`createComponent`](#createcomponent)\n- [`patchComponent`](#patchcomponent)\n- [`deleteComponent`](#deletecomponent)\n- [`cloneVersion`](#cloneversion)\n\n**App Analytics**\n- [`queryEvents`](#queryevents)\n- [`ingestEvent`](#ingestevent)\n\n**Schemas**\n- [`Role`](#role)\n- [`Options`](#options)\n- [`Option`](#option)\n- [`OptionsRef`](#optionsref)\n- [`S3Reference`](#s3reference)\n- [`ComponentType`](#componenttype)\n- [`Author`](#author)\n- [`NotificationConfig`](#notificationconfig)\n- [`NotificationEvent`](#notificationevent)\n- [`BaseComponentCommon`](#basecomponentcommon)\n- [`BaseComponent`](#basecomponent)\n- [`CustomCapabilityComponent`](#customcapabilitycomponent)\n- [`CustomPageComponent`](#custompagecomponent)\n- [`CustomPageConfig`](#custompageconfig)\n- [`JourneyBlockComponent`](#journeyblockcomponent)\n- [`PortalBlockComponent`](#portalblockcomponent)\n- [`ErpInformToolkitComponent`](#erpinformtoolkitcomponent)\n- [`CustomFlowActionComponent`](#customflowactioncomponent)\n- [`BaseCustomActionConfig`](#basecustomactionconfig)\n- [`ExternalIntegrationCustomActionConfig`](#externalintegrationcustomactionconfig)\n- [`SandboxCustomActionConfig`](#sandboxcustomactionconfig)\n- [`CustomFlowConfig`](#customflowconfig)\n- [`ExternalProductCatalogComponent`](#externalproductcatalogcomponent)\n- [`ExternalProductCatalogConfig`](#externalproductcatalogconfig)\n- [`ExternalProductCatalogHookProducts`](#externalproductcataloghookproducts)\n- [`ExternalProductCatalogHookProductRecommendations`](#externalproductcataloghookproductrecommendations)\n- [`PortalExtensionComponent`](#portalextensioncomponent)\n- [`PortalExtensionConfig`](#portalextensionconfig)\n- [`PortalExtensionHookRegistrationIdentifiersCheck`](#portalextensionhookregistrationidentifierscheck)\n- [`PortalExtensionHookContractIdentification`](#portalextensionhookcontractidentification)\n- [`PortalExtensionHookMeterReadingPlausibilityCheck`](#portalextensionhookmeterreadingplausibilitycheck)\n- [`PortalExtensionHookPriceDataRetrieval`](#portalextensionhookpricedataretrieval)\n- [`PortalExtensionHookConsumptionDataRetrieval`](#portalextensionhookconsumptiondataretrieval)\n- [`PortalExtensionHookCostDataRetrieval`](#portalextensionhookcostdataretrieval)\n- [`PortalExtensionSeamlessLink`](#portalextensionseamlesslink)\n- [`PortalExtensionAuthBlock`](#portalextensionauthblock)\n- [`PortalExtensionSecureProxy`](#portalextensionsecureproxy)\n- [`ExternalProductCatalogAuthBlock`](#externalproductcatalogauthblock)\n- [`OverrideDevMode`](#overridedevmode)\n- [`JourneyBlockConfig`](#journeyblockconfig)\n- [`PortalBlockConfig`](#portalblockconfig)\n- [`AppBridgeSurfaceConfig`](#appbridgesurfaceconfig)\n- [`PortalBlockSurfaceConfig`](#portalblocksurfaceconfig)\n- [`JourneyBlockComponentArgs`](#journeyblockcomponentargs)\n- [`TextArg`](#textarg)\n- [`BooleanArg`](#booleanarg)\n- [`EnumArg`](#enumarg)\n- [`BillingFrequency`](#billingfrequency)\n- [`Pricing`](#pricing)\n- [`Audit`](#audit)\n- [`Review`](#review)\n- [`ConfigurationMetadata`](#configurationmetadata)\n- [`ConfigurationVersion`](#configurationversion)\n- [`Grants`](#grants)\n- [`BlueprintRef`](#blueprintref)\n- [`Installation`](#installation)\n- [`PublicConfiguration`](#publicconfiguration)\n- [`Configuration`](#configuration)\n- [`TranslatedString`](#translatedstring)\n- [`CallerIdentity`](#calleridentity)\n- [`BatchEventRequest`](#batcheventrequest)\n- [`Actor`](#actor)\n- [`AppEventData`](#appeventdata)\n- [`EventsQuery`](#eventsquery)\n- [`EventsQueryResponse`](#eventsqueryresponse)\n- [`RawEvents`](#rawevents)\n- [`AggregatedEvents`](#aggregatedevents)\n\n### `getPublicFacingComponent`\n\nRetrieve public facing components for an installed app\n\n`GET /v1/public/app/{appId}/components/{componentId}`\n\n```ts\nconst { data } = await client.getPublicFacingComponent({\n appId: \'example\',\n componentId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component": {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `listConfigurations`\n\nList all app configuration metadata owned by an organization. To get full app configuration details, use the /v1/app-configurations/{appId} endpoint.\n\n`GET /v1/app-configurations`\n\n```ts\nconst { data } = await client.listConfigurations({\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "configurations": [\n {\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `createConfiguration`\n\nCreate a new private app configuration. To make it public a verification process needs to be triggered\n\n`POST /v1/app-configurations`\n\n```ts\nconst { data } = await client.createConfiguration(\n null,\n {\n name: \'string\',\n description: {\n en: \'string\',\n de: \'string\'\n },\n category: \'string\',\n logo_url_key: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string"\n}\n```\n\n</details>\n\n---\n\n### `listPublicConfigurations`\n\nList all publicly available app configurations that can be installed. This endpoint returns apps that have at least one public version.\n\n`GET /v1/app-configurations/public`\n\n```ts\nconst { data } = await client.listPublicConfigurations({\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "configurations": [\n {\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getPublicConfiguration`\n\nRetrieve the public configuration of an app to install in your tenant\n\n`GET /v1/app-configurations/public/{appId}`\n\n```ts\nconst { data } = await client.getPublicConfiguration({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "support_email": "string",\n "owner_org_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {}\n }\n ],\n "is_beta": true,\n "deprecated_at": "string",\n "version": "string",\n "role": {\n "id": "string",\n "grants": [\n {}\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "latest_version": "string",\n "public": true,\n "versions": [\n {\n "app_id": "string",\n "owner_org_id": "string",\n "components": [],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {},\n "blueprint_ref": {},\n "version_audit": {}\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getConfiguration`\n\nRetrieve a specific app configuration\n\n`GET /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.getConfiguration({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {\n "action": "string",\n "resource": "string"\n }\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `patchMetadata`\n\nPatch non-versioned configuration metadata of a given app configuration.\n\n`PATCH /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.patchMetadata(\n {\n appId: \'example\',\n },\n {\n name: \'string\',\n description: {\n en: \'string\',\n de: \'string\'\n },\n category: \'string\',\n documentation_url: \'string\',\n notifications: {\n email: \'developer@example.com\',\n events: [\'app.installed\']\n },\n pricing: {\n pricing_type: \'FREE\',\n billing_frequency: \'MONTHLY\'\n },\n logo_url_key: \'string\',\n support_email: \'string\',\n dev_mode: true\n },\n)\n```\n\n---\n\n### `deleteConfiguration`\n\nDelete app configuration\n\n`DELETE /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.deleteConfiguration({\n appId: \'example\',\n})\n```\n\n---\n\n### `queryEvents`\n\nQuery analytics events for a specific app with flexible filtering\n\n`POST /v1/app-configurations/{appId}/events`\n\n```ts\nconst { data } = await client.queryEvents(\n {\n appId: \'example\',\n },\n {\n time_range: {\n start: \'1970-01-01T00:00:00.000Z\',\n end: \'1970-01-01T00:00:00.000Z\',\n preset: \'1h\'\n },\n filters: {\n source: [\'CUSTOM_JOURNEY_BLOCK\'],\n component_id: [\'string\'],\n event_type: [\'ERROR\'],\n correlation_id: \'string\'\n },\n aggregation: {\n group_by: [\'source\'],\n metrics: [\'count\']\n },\n pagination: {\n page: 1,\n page_size: 100\n },\n sort: {\n field: \'timestamp\',\n order: \'desc\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "query": {\n "time_range": {\n "start": "1970-01-01T00:00:00.000Z",\n "end": "1970-01-01T00:00:00.000Z",\n "preset": "1h"\n },\n "filters": {\n "source": ["CUSTOM_JOURNEY_BLOCK"],\n "component_id": ["string"],\n "event_type": ["ERROR"],\n "correlation_id": "string"\n },\n "aggregation": {\n "group_by": ["source"],\n "metrics": ["count"]\n },\n "pagination": {\n "page": 1,\n "page_size": 100\n },\n "sort": {\n "field": "timestamp",\n "order": "desc"\n }\n },\n "results": {\n "type": "raw",\n "events": [\n {\n "app_id": "string",\n "version": "string",\n "event_id": "string",\n "component_id": "string",\n "timestamp": "string",\n "correlation_id": "string",\n "event_type": "ERROR",\n "source": "CUSTOM_JOURNEY_BLOCK",\n "actor": {\n "org_id": "string",\n "user_id": "string",\n "type": "user"\n },\n "details": {}\n }\n ]\n },\n "pagination": {\n "page": 0,\n "page_size": 0,\n "total_items": 0,\n "has_next": true\n }\n}\n```\n\n</details>\n\n---\n\n### `createBundleUploadUrl`\n\nGenerate a presigned URL for uploading app bundle to /``<app-id>``/bundle.js path\n\n`POST /v1/app-configurations/{appId}/bundle`\n\n```ts\nconst { data } = await client.createBundleUploadUrl(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n component_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component_id": "string",\n "component_url": "string",\n "upload_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `createZipUploadUrl`\n\nGenerate a presigned URL to upload a zip file with artifacts that will be unpacked in a new directory under the /``<app-id>``/ path\n\n`POST /v1/app-configurations/{appId}/zip`\n\n```ts\nconst { data } = await client.createZipUploadUrl(\n {\n appId: \'example\',\n },\n {\n version: \'1.0.0\',\n component_id: \'string\',\n filename: \'dist.zip\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component_id": "string",\n "upload_url": "string",\n "artifact_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `createLogoUploadUrl`\n\nGenerate a presigned URL for uploading app logo to /``<app-id>``/logo.png path\n\n`POST /v1/app-configurations/{appId}/logo`\n\n```ts\nconst { data } = await client.createLogoUploadUrl(\n {\n appId: \'example\',\n },\n {\n filename: \'company-logo.png\',\n mime_type: \'image/png\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "upload_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteLogo`\n\nDelete the app logo from /``<app-id>``/logo.png path\n\n`DELETE /v1/app-configurations/{appId}/logo`\n\n```ts\nconst { data } = await client.deleteLogo({\n appId: \'example\',\n})\n```\n\n---\n\n### `listVersions`\n\nRetrieve a list of versions for an app configuration\n\n`GET /v1/app-configurations/{appId}/versions`\n\n```ts\nconst { data } = await client.listVersions({\n appId: \'example\',\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "versions": [\n {\n "app_id": "string",\n "owner_org_id": "string",\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {\n "action": "string",\n "resource": "string"\n }\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getVersion`\n\nRetrieve a specific version of an app configuration\n\n`GET /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.getVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {\n "action": "string",\n "resource": "string"\n }\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `deleteVersion`\n\nDelete a specific version of an app configuration\n\n`DELETE /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.deleteVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n---\n\n### `patchVersion`\n\nPatch an existing app version\n\n`PATCH /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.patchVersion(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n manifest_id: \'string\',\n role_id: \'string\',\n grants: [\n {\n action: \'string\',\n resource: \'string\'\n }\n ]\n },\n)\n```\n\n---\n\n### `getReview`\n\nRetrieve the review status of a specific app version\n\n`GET /v1/app-configurations/{appId}/versions/{version}/review`\n\n```ts\nconst { data } = await client.getReview({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "review": {\n "version": "string",\n "review_status": "approved",\n "requested_at": "string",\n "requested_by": "string",\n "technical_contact": "string",\n "marketing_contact": "string",\n "demo_url": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createReview`\n\nSubmit an app version for review to make it public\n\n`POST /v1/app-configurations/{appId}/versions/{version}/review`\n\n```ts\nconst { data } = await client.createReview(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n technical_contact: \'string\',\n marketing_contact: \'string\',\n demo_url: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "review": {\n "version": "string",\n "review_status": "approved",\n "requested_at": "string",\n "requested_by": "string",\n "technical_contact": "string",\n "marketing_contact": "string",\n "demo_url": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createComponent`\n\nPatch an existing app version to create/add a component\n\n`POST /v1/app-configurations/{appId}/versions/{version}/components`\n\n```ts\nconst { data } = await client.createComponent(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n component_type: \'CUSTOM_JOURNEY_BLOCK\',\n configuration: {\n override_dev_mode: {\n override_url: \'http://localhost:3000\'\n },\n component_url: \'https://cdn.apps.com/123/v1.0.0/bundle.js\',\n component_tag: \'string\',\n component_args: [\n {\n type: \'text\'\n }\n ],\n component_size: 0,\n component_mapping: {}\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component": {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `patchComponent`\n\nPatch an existing app version to update its components\n\n`PATCH /v1/app-configurations/{appId}/versions/{version}/components/{componentId}`\n\n```ts\nconst { data } = await client.patchComponent(\n {\n appId: \'example\',\n version: \'example\',\n componentId: \'example\',\n },\n {\n component_type: \'CUSTOM_JOURNEY_BLOCK\',\n configuration: {\n override_dev_mode: {\n override_url: \'http://localhost:3000\'\n },\n component_url: \'https://cdn.apps.com/123/v1.0.0/bundle.js\',\n component_tag: \'string\',\n component_args: [\n {\n type: \'text\'\n }\n ],\n component_size: 0,\n component_mapping: {}\n }\n },\n)\n```\n\n---\n\n### `deleteComponent`\n\nDelete a specific component from an app version\n\n`DELETE /v1/app-configurations/{appId}/versions/{version}/components/{componentId}`\n\n```ts\nconst { data } = await client.deleteComponent({\n appId: \'example\',\n version: \'example\',\n componentId: \'example\',\n})\n```\n\n---\n\n### `cloneVersion`\n\nClone an existing app version to create a new version\n\n`POST /v1/app-configurations/{appId}/versions/{sourceVersion}/clone-to/{targetVersion}`\n\n```ts\nconst { data } = await client.cloneVersion({\n appId: \'example\',\n sourceVersion: \'example\',\n targetVersion: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "version": "string",\n "status": "pending"\n}\n```\n\n</details>\n\n---\n\n### `listInstallations`\n\nRetrieve a list of installed apps for the organization.\n\n`GET /v1/app`\n\n```ts\nconst { data } = await client.listInstallations({\n componentType: \'example\',\n enabled: true,\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "apps": [\n {\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getInstallation`\n\nRetrieve details of an installed app by its ID.\n\n`GET /v1/app/{appId}`\n\n```ts\nconst { data } = await client.getInstallation({\n appId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `install`\n\nUpsert app installation by its ID.\n\n`POST /v1/app/{appId}`\n\n```ts\nconst { data } = await client.install(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n option_values: [\n {\n component_id: \'string\',\n options: [\n {\n key: \'string\',\n value: {}\n }\n ]\n }\n ],\n _manifest: [\'123e4567-e89b-12d3-a456-426614174000\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `patchInstallation`\n\nPatch an installed app by its ID.\n\n`PATCH /v1/app/{appId}`\n\n```ts\nconst { data } = await client.patchInstallation(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n option_values: [\n {\n component_id: \'string\',\n options: [\n {\n key: \'string\',\n value: {}\n }\n ]\n }\n ],\n _manifest: [\'123e4567-e89b-12d3-a456-426614174000\']\n },\n)\n```\n\n---\n\n### `uninstall`\n\nUninstall an app by its ID.\n\n`DELETE /v1/app/{appId}`\n\n```ts\nconst { data } = await client.uninstall({\n appId: \'example\',\n})\n```\n\n---\n\n### `promoteVersion`\n\nUpdate an installed app to a new version\n\n`POST /v1/app/{appId}/promote-to/{version}`\n\n```ts\nconst { data } = await client.promoteVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `ingestEvent`\n\nInternal endpoint for services to submit app events for analytic purposes\n\n`POST /v1/app-events`\n\n```ts\nconst { data } = await client.ingestEvent(\n null,\n {\n app_id: \'string\',\n version: \'string\',\n event_id: \'string\',\n component_id: \'string\',\n timestamp: \'string\',\n correlation_id: \'string\',\n event_type: \'ERROR\',\n source: \'CUSTOM_JOURNEY_BLOCK\',\n actor: {\n org_id: \'string\',\n user_id: \'string\',\n type: \'user\'\n },\n details: {}\n },\n)\n```\n\n---\n\n## Schemas\n\n### `Role`\n\n```ts\ntype Role = {\n id?: string\n grants?: Array<{\n action: string\n resource?: string\n }>\n}\n```\n\n### `Options`\n\nOptions for the component configuration\n\n```ts\ntype Options = {\n key: string\n label?: string\n required?: boolean\n description?: string\n value?: unknown\n type: "text" | "number" | "boolean" | "secret"\n}\n```\n\n### `Option`\n\n```ts\ntype Option = {\n key: string\n value: unknown\n}\n```\n\n### `OptionsRef`\n\n```ts\ntype OptionsRef = {\n component_id: string\n options: Array<{\n key: string\n value: unknown\n }>\n}\n```\n\n### `S3Reference`\n\n```ts\ntype S3Reference = {\n bucket: string\n key: string\n}\n```\n\n### `ComponentType`\n\nType of app component\n\n```ts\ntype ComponentType = "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n```\n\n### `Author`\n\n```ts\ntype Author = {\n name?: string\n company: string\n email?: string\n}\n```\n\n### `NotificationConfig`\n\n```ts\ntype NotificationConfig = {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n}\n```\n\n### `NotificationEvent`\n\n```ts\ntype NotificationEvent = "app.installed" | "app.uninstalled"\n```\n\n### `BaseComponentCommon`\n\n```ts\ntype BaseComponentCommon = {\n id: string\n name?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n value?: unknown\n type: "text" | "number" | "boolean" | "secret"\n }>\n surfaces?: object\n}\n```\n\n### `BaseComponent`\n\n```ts\ntype BaseComponent = {\n id: string\n name?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n value?: unknown\n type: "text" | "number" | "boolean" | "secret"\n }>\n surfaces?: object\n}\n```\n\n### `CustomCapabilityComponent`\n\n```ts\ntype CustomCapabilityComponent = {\n component_type: "CUSTOM_CAPABILITY"\n configuration: {\n type?: "tab" | "group"\n allowed_schemas?: string[]\n }\n surfaces?: {\n capability_config?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `CustomPageComponent`\n\n```ts\ntype CustomPageComponent = {\n component_type: "CUSTOM_PAGE"\n configuration: {\n slug: string\n nav_label?: string\n nav_icon?: string\n nav_description?: string\n }\n surfaces?: {\n page?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `CustomPageConfig`\n\n```ts\ntype CustomPageConfig = {\n slug: string\n nav_label?: string\n nav_icon?: string\n nav_description?: string\n}\n```\n\n### `JourneyBlockComponent`\n\n```ts\ntype JourneyBlockComponent = {\n component_type: "CUSTOM_JOURNEY_BLOCK"\n configuration: {\n override_dev_mode?: {\n override_url?: { ... }\n }\n component_url: string\n component_tag: string\n component_args?: Array<{\n key: { ... }\n type: { ... }\n required?: { ... }\n description?: { ... }\n label: { ... }\n }>\n component_size?: number\n component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">\n }\n}\n```\n\n### `PortalBlockComponent`\n\n```ts\ntype PortalBlockComponent = {\n component_type: "CUSTOM_PORTAL_BLOCK"\n configuration: object\n surfaces?: {\n portal_block?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n supported_surfaces?: { ... }\n }\n }\n}\n```\n\n### `ErpInformToolkitComponent`\n\n```ts\ntype ErpInformToolkitComponent = {\n component_type: "ERP_INFORM_TOOLKIT"\n configuration: {\n type: "inbound" | "outbound"\n }\n}\n```\n\n### `CustomFlowActionComponent`\n\n```ts\ntype CustomFlowActionComponent = {\n component_type: "CUSTOM_FLOW_ACTION"\n configuration: {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: { ... }\n headers?: { ... }\n }\n } | {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "sandbox"\n sandbox_settings?: {\n code?: { ... }\n }\n }\n surfaces?: {\n flow_action_config?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `BaseCustomActionConfig`\n\n```ts\ntype BaseCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n}\n```\n\n### `ExternalIntegrationCustomActionConfig`\n\n```ts\ntype ExternalIntegrationCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: string\n headers?: Record<string, unknown>\n }\n}\n```\n\n### `SandboxCustomActionConfig`\n\n```ts\ntype SandboxCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "sandbox"\n sandbox_settings?: {\n code?: string\n }\n}\n```\n\n### `CustomFlowConfig`\n\n```ts\ntype CustomFlowConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: string\n headers?: Record<string, unknown>\n }\n} | {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "sandbox"\n sandbox_settings?: {\n code?: string\n }\n}\n```\n\n### `ExternalProductCatalogComponent`\n\n```ts\ntype ExternalProductCatalogComponent = {\n component_type: "EXTERNAL_PRODUCT_CATALOG"\n configuration: {\n hooks?: Array<{\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n }>\n }\n}\n```\n\n### `ExternalProductCatalogConfig`\n\n```ts\ntype ExternalProductCatalogConfig = {\n hooks?: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "products"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "product-recommendations"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n }>\n}\n```\n\n### `ExternalProductCatalogHookProducts`\n\nHook for getting products from an external catalog. This hook makes a call to retrieve product data from an external source. Check the docs or the response API call contract https://docs.api.epilot.io/pricing-api-external-catalog for more details.\n\n\n```ts\ntype ExternalProductCatalogHookProducts = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "products"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n}\n```\n\n### `ExternalProductCatalogHookProductRecommendations`\n\nHook for getting product recommendations from an external catalog. This hook makes a call to retrieve product recommendations from an external source. Check the docs or the response API call contract https://docs.api.epilot.io/pricing-api-external-catalog for more details.\n\n\n```ts\ntype ExternalProductCatalogHookProductRecommendations = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "product-recommendations"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n}\n```\n\n### `PortalExtensionComponent`\n\n```ts\ntype PortalExtensionComponent = {\n component_type: "PORTAL_EXTENSION"\n configuration: {\n hooks?: Array<{\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n assignment_mode?: { ... }\n contact_relation_attribute?: { ... }\n explanation?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n plausibility_mode?: { ... }\n auth?: { ... }\n call: { ... }\n resolved: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n }>\n links?: Array<{\n id: { ... }\n name: { ... }\n description?: { ... }\n type: { ... }\n condition?: { ... }\n auth?: { ... }\n redirect: { ... }\n }>\n }\n}\n```\n\n### `PortalExtensionConfig`\n\n```ts\ntype PortalExtensionConfig = {\n hooks?: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "registrationIdentifiersCheck"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers: { ... }\n body?: { ... }\n result: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "contractIdentification"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers: { ... }\n body?: { ... }\n result?: { ... }\n }\n assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"\n contact_relation_attribute?: string\n explanation?: {\n en: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "priceDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n resolved?: {\n dataPath?: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "consumptionDataRetrieval"\n // ...\n}\n```\n\n### `PortalExtensionHookRegistrationIdentifiersCheck`\n\nHook that replaces the built-in registration identifiers check. This hook makes a POST call whenever a user is trying to register to find the corresponding contact. The expected response to the call is:\n - 200 with contact id if exactly one contact is found\n - 404 if no contact is found or more th\n\n```ts\ntype PortalExtensionHookRegistrationIdentifiersCheck = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "registrationIdentifiersCheck"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n result: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookContractIdentification`\n\nHook 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).\nThe expected response http status code to the call is:\n - 200 if found\n - 404 if not found\n\nThe following assignment modes are suppo\n\n```ts\ntype PortalExtensionHookContractIdentification = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "contractIdentification"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n result?: string\n }\n assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"\n contact_relation_attribute?: string\n explanation?: {\n en: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookMeterReadingPlausibilityCheck`\n\nHook that checks the plausibility of meter readings before they are saved. This hook makes a POST call whenever a user is trying to save a meter reading. The expected response to the call is:\n - 200:\n If meter reading is plausible, the response should contain:\n - valid: true\n If meter re\n\n```ts\ntype PortalExtensionHookMeterReadingPlausibilityCheck = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "meterReadingPlausibilityCheck"\n plausibility_mode?: "check" | "range"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n url: string\n body: Record<string, unknown>\n headers: Record<string, string>\n }\n resolved: {\n dataPath?: string\n counter_identifiers?: Record<string, string>\n valid?: string\n upper_limit?: string\n lower_limit?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookPriceDataRetrieval`\n\nHook that will allow using the specified source as data for price 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\n\n```ts\ntype PortalExtensionHookPriceDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "priceDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n dataPath?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookConsumptionDataRetrieval`\n\nHook 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\n\n```ts\ntype PortalExtensionHookConsumptionDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "consumptionDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n dataPath?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookCostDataRetrieval`\n\nHook 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\n\n```ts\ntype PortalExtensionHookCostDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "costDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n dataPath?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionSeamlessLink`\n\n```ts\ntype PortalExtensionSeamlessLink = {\n id: string\n name: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n type: "seamless"\n condition?: string\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n redirect: {\n url?: string\n params?: Record<string, string>\n }\n}\n```\n\n### `PortalExtensionAuthBlock`\n\n```ts\ntype PortalExtensionAuthBlock = {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: string\n ttl: string\n }\n}\n```\n\n### `PortalExtensionSecureProxy`\n\nIf set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips.\n\n```ts\ntype PortalExtensionSecureProxy = {\n integration_id: string // uuid\n use_case_slug: string\n}\n```\n\n### `ExternalProductCatalogAuthBlock`\n\n```ts\ntype ExternalProductCatalogAuthBlock = {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n}\n```\n\n### `OverrideDevMode`\n\nOverride URL when app is in dev mode\n\n```ts\ntype OverrideDevMode = {\n override_url?: string\n}\n```\n\n### `JourneyBlockConfig`\n\n```ts\ntype JourneyBlockConfig = {\n override_dev_mode?: {\n override_url?: string\n }\n component_url: string\n component_tag: string\n component_args?: Array<{\n key: string\n type: "text" | "boolean" | "enum"\n required?: boolean\n description?: {\n en?: { ... }\n de: { ... }\n }\n label: {\n en?: { ... }\n de: { ... }\n }\n }>\n component_size?: number\n component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">\n}\n```\n\n### `PortalBlockConfig`\n\n```ts\ntype PortalBlockConfig = object\n```\n\n### `AppBridgeSurfaceConfig`\n\n```ts\ntype AppBridgeSurfaceConfig = {\n app_url?: string\n zip_url?: string\n override_url?: string\n}\n```\n\n### `PortalBlockSurfaceConfig`\n\n```ts\ntype PortalBlockSurfaceConfig = {\n app_url?: string\n zip_url?: string\n override_url?: string\n supported_surfaces?: "main" | "footer_inline" | "footer_left_absolute" | "footer_right_absolute"[]\n}\n```\n\n### `JourneyBlockComponentArgs`\n\n```ts\ntype JourneyBlockComponentArgs = {\n key: string\n type: "text" | "boolean" | "enum"\n required?: boolean\n description?: {\n en?: string\n de: string\n }\n label: {\n en?: string\n de: string\n }\n}\n```\n\n### `TextArg`\n\n```ts\ntype TextArg = {\n type?: "text"\n}\n```\n\n### `BooleanArg`\n\n```ts\ntype BooleanArg = {\n type?: "boolean"\n}\n```\n\n### `EnumArg`\n\n```ts\ntype EnumArg = {\n type?: "enum"\n isMulti?: boolean\n options: Array<{\n id: string\n label: {\n en?: { ... }\n de: { ... }\n }\n }>\n}\n```\n\n### `BillingFrequency`\n\nHow often the subscription is billed\n\n```ts\ntype BillingFrequency = "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n```\n\n### `Pricing`\n\n```ts\ntype Pricing = {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n}\n```\n\n### `Audit`\n\n```ts\ntype Audit = {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n}\n```\n\n### `Review`\n\n```ts\ntype Review = {\n version?: string\n review_status?: "approved" | "rejected" | "pending"\n requested_at?: string\n requested_by?: string\n technical_contact?: string\n marketing_contact?: string\n demo_url?: string\n}\n```\n\n### `ConfigurationMetadata`\n\nBasic metadata about your app configuration which does not get versioned\n\n```ts\ntype ConfigurationMetadata = {\n app_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n versions: string[]\n public_versions?: string[]\n support_email?: string\n latest_version: string\n category?: string\n icon_url?: string\n documentation_url?: string\n description: {\n en?: string\n de: string\n }\n notifications?: {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n }\n owner_org_id: string\n internal?: boolean\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n configuration_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n}\n```\n\n### `ConfigurationVersion`\n\nConfiguration data about your app which is versionable\n\n```ts\ntype ConfigurationVersion = {\n app_id: string\n owner_org_id: string\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n version_audit: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n versioned_at?: string\n versioned_by?: string\n }\n}\n```\n\n### `Grants`\n\nRequired grants for the app in order to call APIs for the installing tenant\n\n```ts\ntype Grants = Array<{\n action: string\n resource?: string\n}>\n```\n\n### `BlueprintRef`\n\n```ts\ntype BlueprintRef = {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n}\n```\n\n### `Installation`\n\nInformation about the installed app. Has configuration data of the installed version\n\n```ts\ntype Installation = {\n app_id: string\n installer_org_id: string\n owner_org_id?: string\n enabled: boolean\n name: string\n option_values?: Array<{\n component_id: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n }>\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n installed_version: string\n role?: string\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n installation_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n _manifest?: string // uuid[]\n}\n```\n\n### `PublicConfiguration`\n\nPublic configuration of the published app\n\n```ts\ntype PublicConfiguration = {\n app_id: string\n support_email?: string\n owner_org_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n category?: string\n icon_url?: string\n documentation_url?: string\n description?: {\n en?: string\n de: string\n }\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n is_beta?: boolean\n deprecated_at?: string\n version: string\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n latest_version?: string\n public?: boolean\n versions?: Array<{\n app_id: string\n owner_org_id: string\n components: Array<{\n id: { ... }\n name?: { ... }\n description?: { ... }\n options?: { ... }\n surfaces?: { ... }\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: { ... }\n grants?: { ... }\n }\n blueprint_ref?: {\n manifest_id?: { ... }\n job_id?: { ... }\n source_blueprint_file?: { ... }\n }\n version_audit: {\n created_at?: { ... }\n created_by?: { ... }\n updated_at?: { ... }\n updated_by?: { ... }\n versioned_at?: { ... }\n versioned_by?: { ... }\n }\n }>\n}\n```\n\n### `Configuration`\n\nConfiguration of the published app\n\n```ts\ntype Configuration = {\n app_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n versions: string[]\n public_versions?: string[]\n support_email?: string\n latest_version: string\n category?: string\n icon_url?: string\n documentation_url?: string\n description: {\n en?: string\n de: string\n }\n notifications?: {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n }\n owner_org_id: string\n internal?: boolean\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n configuration_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n version_audit: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n versioned_at?: string\n versioned_by?: string\n }\n}\n```\n\n### `TranslatedString`\n\n```ts\ntype TranslatedString = {\n en?: string\n de: string\n}\n```\n\n### `CallerIdentity`\n\n```ts\ntype CallerIdentity = {\n name?: unknown\n org_id: string\n user_id?: string\n token_id?: string\n}\n```\n\n### `BatchEventRequest`\n\n```ts\ntype BatchEventRequest = {\n events: Array<{\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n actor: {\n org_id?: { ... }\n user_id?: { ... }\n type: { ... }\n }\n details?: Record<string, unknown>\n }>\n}\n```\n\n### `Actor`\n\n```ts\ntype Actor = {\n org_id?: string\n user_id?: string\n type: "user" | "system"\n}\n```\n\n### `AppEventData`\n\n```ts\ntype AppEventData = {\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n actor: {\n org_id?: string\n user_id?: string\n type: "user" | "system"\n }\n details?: Record<string, unknown>\n}\n```\n\n### `EventsQuery`\n\n```ts\ntype EventsQuery = {\n time_range?: {\n start?: string // date-time\n end?: string // date-time\n preset?: "1h" | "6h" | "24h" | "7d" | "30d"\n }\n filters?: {\n source?: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"[]\n component_id?: string[]\n event_type?: "ERROR" | "WARNING" | "INFO"[]\n correlation_id?: string\n }\n aggregation?: {\n group_by?: "source" | "component_id" | "event_type" | "hour" | "day"[]\n metrics?: "count" | "error_rate" | "unique_users"[]\n }\n pagination?: {\n page?: number\n page_size?: number\n }\n sort?: {\n field?: "timestamp" | "event_type" | "component_id"\n order?: "asc" | "desc"\n }\n}\n```\n\n### `EventsQueryResponse`\n\n```ts\ntype EventsQueryResponse = {\n query?: {\n time_range?: {\n start?: { ... }\n end?: { ... }\n preset?: { ... }\n }\n filters?: {\n source?: { ... }\n component_id?: { ... }\n event_type?: { ... }\n correlation_id?: { ... }\n }\n aggregation?: {\n group_by?: { ... }\n metrics?: { ... }\n }\n pagination?: {\n page?: { ... }\n page_size?: { ... }\n }\n sort?: {\n field?: { ... }\n order?: { ... }\n }\n }\n results?: {\n type?: "raw"\n events?: Array<{\n app_id: { ... }\n version: { ... }\n event_id?: { ... }\n component_id: { ... }\n timestamp?: { ... }\n correlation_id?: { ... }\n event_type: { ... }\n source: { ... }\n actor: { ... }\n details?: { ... }\n }>\n } | {\n type?: "aggregated"\n groups?: Array<{\n dimensions?: { ... }\n metrics?: { ... }\n }>\n }\n pagination?: {\n page?: number\n page_size?: number\n total_items?: number\n has_next?: boolean\n }\n}\n```\n\n### `RawEvents`\n\n```ts\ntype RawEvents = {\n type?: "raw"\n events?: Array<{\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"\n actor: {\n org_id?: { ... }\n user_id?: { ... }\n type: { ... }\n }\n details?: Record<string, unknown>\n }>\n}\n```\n\n### `AggregatedEvents`\n\n```ts\ntype AggregatedEvents = {\n type?: "aggregated"\n groups?: Array<{\n dimensions?: Record<string, unknown>\n metrics?: {\n count?: { ... }\n error_rate?: { ... }\n }\n }>\n}\n```\n';
5
-
6
-
7
- exports.default = app_default;
@@ -1,5 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkL66IX6GXcjs = require('./chunk-L66IX6GX.cjs');
4
- require('./chunk-NJK5F5TF.cjs');
5
- exports. default = _chunkL66IX6GXcjs.require_app_runtime.call(void 0, );