@epilot/sdk 2.18.17 → 2.18.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/definitions/app.json +34 -17
- package/definitions/calendar.json +18 -4
- package/dist/apis/access-token.cjs +6 -6
- package/dist/apis/access-token.js +1 -1
- package/dist/apis/address-suggestions.cjs +6 -6
- package/dist/apis/address-suggestions.js +1 -1
- package/dist/apis/address.cjs +6 -6
- package/dist/apis/address.js +1 -1
- package/dist/apis/ai-agents.cjs +6 -6
- package/dist/apis/ai-agents.js +1 -1
- package/dist/apis/app.cjs +6 -6
- package/dist/apis/app.d.cts +2 -2
- package/dist/apis/app.d.ts +2 -2
- package/dist/apis/app.js +1 -1
- package/dist/apis/audit-logs.cjs +6 -6
- package/dist/apis/audit-logs.js +1 -1
- package/dist/apis/automation.cjs +6 -6
- package/dist/apis/automation.js +1 -1
- package/dist/apis/billing.cjs +6 -6
- package/dist/apis/billing.js +1 -1
- package/dist/apis/blueprint-manifest.cjs +6 -6
- package/dist/apis/blueprint-manifest.js +1 -1
- package/dist/apis/calendar.cjs +6 -6
- package/dist/apis/calendar.d.cts +2 -2
- package/dist/apis/calendar.d.ts +2 -2
- package/dist/apis/calendar.js +1 -1
- package/dist/apis/configuration-hub.cjs +6 -6
- package/dist/apis/configuration-hub.js +1 -1
- package/dist/apis/consent.cjs +6 -6
- package/dist/apis/consent.js +1 -1
- package/dist/apis/customer-portal.cjs +6 -6
- package/dist/apis/customer-portal.js +1 -1
- package/dist/apis/dashboard.cjs +6 -6
- package/dist/apis/dashboard.js +1 -1
- package/dist/apis/data-governance.cjs +6 -6
- package/dist/apis/data-governance.js +1 -1
- package/dist/apis/deduplication.cjs +6 -6
- package/dist/apis/deduplication.js +1 -1
- package/dist/apis/design.cjs +6 -6
- package/dist/apis/design.js +1 -1
- package/dist/apis/document.cjs +6 -6
- package/dist/apis/document.js +1 -1
- package/dist/apis/email-settings.cjs +6 -6
- package/dist/apis/email-settings.js +1 -1
- package/dist/apis/email-template.cjs +6 -6
- package/dist/apis/email-template.js +1 -1
- package/dist/apis/entity-mapping.cjs +6 -6
- package/dist/apis/entity-mapping.js +1 -1
- package/dist/apis/entity.cjs +6 -6
- package/dist/apis/entity.js +1 -1
- package/dist/apis/environments.cjs +6 -6
- package/dist/apis/environments.js +1 -1
- package/dist/apis/event-catalog.cjs +6 -6
- package/dist/apis/event-catalog.js +1 -1
- package/dist/apis/file.cjs +6 -6
- package/dist/apis/file.js +1 -1
- package/dist/apis/iban.cjs +6 -6
- package/dist/apis/iban.js +1 -1
- package/dist/apis/integration-toolkit.cjs +6 -6
- package/dist/apis/integration-toolkit.js +1 -1
- package/dist/apis/journey.cjs +6 -6
- package/dist/apis/journey.js +1 -1
- package/dist/apis/kanban.cjs +6 -6
- package/dist/apis/kanban.js +1 -1
- package/dist/apis/message.cjs +6 -6
- package/dist/apis/message.js +1 -1
- package/dist/apis/metering.cjs +6 -6
- package/dist/apis/metering.js +1 -1
- package/dist/apis/notes.cjs +6 -6
- package/dist/apis/notes.js +1 -1
- package/dist/apis/notification.cjs +6 -6
- package/dist/apis/notification.js +1 -1
- package/dist/apis/organization.cjs +6 -6
- package/dist/apis/organization.js +1 -1
- package/dist/apis/partner-directory.cjs +6 -6
- package/dist/apis/partner-directory.js +1 -1
- package/dist/apis/permissions.cjs +6 -6
- package/dist/apis/permissions.js +1 -1
- package/dist/apis/pricing-tier.cjs +6 -6
- package/dist/apis/pricing-tier.js +1 -1
- package/dist/apis/pricing.cjs +6 -6
- package/dist/apis/pricing.js +1 -1
- package/dist/apis/purpose.cjs +6 -6
- package/dist/apis/purpose.js +1 -1
- package/dist/apis/query.cjs +6 -6
- package/dist/apis/query.js +1 -1
- package/dist/apis/sandbox.cjs +6 -6
- package/dist/apis/sandbox.js +1 -1
- package/dist/apis/sharing.cjs +6 -6
- package/dist/apis/sharing.js +1 -1
- package/dist/apis/snapshot.cjs +6 -6
- package/dist/apis/snapshot.js +1 -1
- package/dist/apis/submission.cjs +6 -6
- package/dist/apis/submission.js +1 -1
- package/dist/apis/target.cjs +6 -6
- package/dist/apis/target.js +1 -1
- package/dist/apis/targeting.cjs +6 -6
- package/dist/apis/targeting.js +1 -1
- package/dist/apis/template-variables.cjs +6 -6
- package/dist/apis/template-variables.js +1 -1
- package/dist/apis/user.cjs +6 -6
- package/dist/apis/user.js +1 -1
- package/dist/apis/validation-rules.cjs +6 -6
- package/dist/apis/validation-rules.js +1 -1
- package/dist/apis/webhooks.cjs +6 -6
- package/dist/apis/webhooks.js +1 -1
- package/dist/apis/workflow-definition.cjs +6 -6
- package/dist/apis/workflow-definition.js +1 -1
- package/dist/apis/workflow.cjs +6 -6
- package/dist/apis/workflow.js +1 -1
- package/dist/app-IXCUVIHD.js +7 -0
- package/dist/app-RKHOTF7Z.cjs +7 -0
- package/dist/{app.d-vPrbhe5h.d.cts → app.d-CZDjyxee.d.cts} +22 -15
- package/dist/{app.d-vPrbhe5h.d.ts → app.d-CZDjyxee.d.ts} +22 -15
- package/dist/calendar-2H4RGMV3.js +7 -0
- package/dist/calendar-UADWQX7G.cjs +7 -0
- package/dist/{calendar.d-Cz8R-GJ5.d.cts → calendar.d-mk-ltGpk.d.cts} +10 -5
- package/dist/{calendar.d-Cz8R-GJ5.d.ts → calendar.d-mk-ltGpk.d.ts} +10 -5
- package/dist/{chunk-LPUT63UQ.cjs → chunk-ELTL6P4A.cjs} +2 -2
- package/dist/{chunk-TQCQYO4X.js → chunk-YQ5ZNKOC.js} +2 -2
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/docs/app.md +43 -88
- package/docs/calendar.md +8 -2
- package/package.json +1 -1
- package/dist/app-A7P5LKNL.cjs +0 -7
- package/dist/app-EEEBOCVZ.js +0 -7
- package/dist/calendar-EMNHW6ME.cjs +0 -7
- package/dist/calendar-PZFEAXYE.js +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
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**App Proxy**\n- [`publicProxyGet`](#publicproxyget)\n- [`publicProxyPost`](#publicproxypost)\n- [`publicProxyPut`](#publicproxyput)\n- [`publicProxyPatch`](#publicproxypatch)\n- [`publicProxyDelete`](#publicproxydelete)\n\n**Schemas**\n- [`Role`](#role)\n- [`Options`](#options)\n- [`ObjectField`](#objectfield)\n- [`Option`](#option)\n- [`OptionsRef`](#optionsref)\n- [`S3Reference`](#s3reference)\n- [`ComponentType`](#componenttype)\n- [`FunctionDefinition`](#functiondefinition)\n- [`Author`](#author)\n- [`NotificationConfig`](#notificationconfig)\n- [`NotificationEvent`](#notificationevent)\n- [`BaseComponentCommon`](#basecomponentcommon)\n- [`BaseComponent`](#basecomponent)\n- [`ApiProxyComponent`](#apiproxycomponent)\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- [`FunctionRefCustomActionConfig`](#functionrefcustomactionconfig)\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- [`PortalExtensionHookDataExport`](#portalextensionhookdataexport)\n- [`PortalExtensionHookVisualizationMetadata`](#portalextensionhookvisualizationmetadata)\n- [`PortalExtensionHookCostDataRetrieval`](#portalextensionhookcostdataretrieval)\n- [`PortalExtensionHookChangeEmail`](#portalextensionhookchangeemail)\n- [`PortalExtensionHookChangePassword`](#portalextensionhookchangepassword)\n- [`PortalExtensionHookDeleteAccount`](#portalextensionhookdeleteaccount)\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- [`BlockReferenceArg`](#blockreferencearg)\n- [`EnumArg`](#enumarg)\n- [`BillingFrequency`](#billingfrequency)\n- [`Pricing`](#pricing)\n- [`Audit`](#audit)\n- [`Review`](#review)\n- [`InternalReview`](#internalreview)\n- [`ConfigurationMetadata`](#configurationmetadata)\n- [`ConfigurationVersion`](#configurationversion)\n- [`ApiProxyConfig`](#apiproxyconfig)\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 "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {},\n "description": {},\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 "functions": [],\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 }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {},\n "description": {},\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 ]\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 "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {},\n "description": {},\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 ]\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 functions: [\n {\n name: \'string\',\n type: \'workflow\',\n label: {\n en: \'string\',\n de: \'string\'\n },\n description: {\n en: \'string\',\n de: \'string\'\n },\n code: \'string\',\n schedule: \'rate(30 minutes)\',\n schedule_timezone: \'Europe/Berlin\',\n schedule_overlap: \'skip\',\n secrets: [\'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 "icon_url": "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 "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 "icon_url": "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 "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 "icon_url": "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 "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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 "icon_url": "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 "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\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### `publicProxyGet`\n\nForward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)\n\n`GET /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyGet({\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n})\n```\n\n---\n\n### `publicProxyPost`\n\nForward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)\n\n`POST /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyPost(\n {\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n },\n {},\n)\n```\n\n---\n\n### `publicProxyPut`\n\nForward a PUT request to a registered proxy target from a public-facing component\n\n`PUT /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyPut(\n {\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n },\n {},\n)\n```\n\n---\n\n### `publicProxyPatch`\n\nForward a PATCH request to a registered proxy target from a public-facing component\n\n`PATCH /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyPatch(\n {\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n },\n {},\n)\n```\n\n---\n\n### `publicProxyDelete`\n\nForward a DELETE request to a registered proxy target from a public-facing component\n\n`DELETE /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyDelete({\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\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 repeatable?: boolean\n fields?: Array<{\n key: string\n label?: string\n description?: string\n required?: boolean\n type: "text" | "number" | "boolean" | "secret"\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n}\n```\n\n### `ObjectField`\n\nOne declared field inside a `type: object` option. Fields are primitives \u2014 object nesting\nis not supported.\n\n\n```ts\ntype ObjectField = {\n key: string\n label?: string\n description?: string\n required?: boolean\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" | "API_PROXY" | "APP_FUNCTION"\n```\n\n### `FunctionDefinition`\n\nA named server-side function belonging to the app. Runs in the epilot code-execution sandbox with an installation-scoped app token. Functions with a schedule are executed automatically once per installation.\n\n\n```ts\ntype FunctionDefinition = {\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\n}\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 repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\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 repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n }>\n surfaces?: object\n}\n```\n\n### `ApiProxyComponent`\n\n```ts\ntype ApiProxyComponent = {\n component_type: "API_PROXY"\n configuration: {\n name: string\n target: string\n auth_type: "header" | "bearer" | "basic" | "oauth2" | "none"\n auth_header?: string\n token_url?: string // uri\n headers?: Record<string, string>\n }\n}\n```\n\n### `CustomCapabilityComponent`\n\n```ts\ntype CustomCapabilityComponent = {\n component_type: "CUSTOM_CAPABILITY"\n configuration: {\n type?: "tab" | "group" | "widget"\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: "function"\n function_name: string\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### `FunctionRefCustomActionConfig`\n\n```ts\ntype FunctionRefCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "function"\n function_name: string\n}\n```\n\n### `CustomFlowConfig`\n\nConfiguration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.\n\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: "function"\n function_name: string\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 resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\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 block_types?: { ... }\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 id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n change_mode?: { ... }\n require_password_confirmation?: { ... }\n explanation?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n require_new_password?: { ... }\n explanation?: { ... }\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 resolved?: {\n result?: { ... }\n error_message_path?: { ... }\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 resolved?: {\n result?: { ... }\n error_message_path?: { ... }\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 data_path?: { ... }\n dataPath?: { ... }\n error_message_path?: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\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 resolved?: {\n result?: string\n error_message_path?: 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 resolved?: {\n result?: string\n error_message_path?: 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 data_path?: string\n dataPath?: string\n counter_identifiers?: Record<string, string>\n valid?: string\n upper_limit?: string\n lower_limit?: string\n error_message_path?: 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 data_path?: string\n dataPath?: string\n error_message_path?: 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 data_path?: string\n dataPath?: string\n error_message_path?: 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### `PortalExtensionHookDataExport`\n\nGeneric data export hook. When configured on blocks that support it, the portal delegates the export action (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the file itself. Can be used by any block that supports export \u2014 consumption charts, dynamic tariff charts\n\n```ts\ntype PortalExtensionHookDataExport = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "dataExport"\n block_types?: 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 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 error_message_path?: 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### `PortalExtensionHookVisualizationMetadata`\n\nHook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape \n\n```ts\ntype PortalExtensionHookVisualizationMetadata = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "visualizationMetadata"\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 data_path?: string\n dataPath?: string\n error_message_path?: 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 data_path?: string\n dataPath?: string\n error_message_path?: 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### `PortalExtensionHookChangeEmail`\n\nHook that replaces the built-in change email functionality for portal users. When configured, the portal does not run its own change email flow. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the email change.\nThe `change_mode` controls what the portal d\n\n```ts\ntype PortalExtensionHookChangeEmail = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "changeEmail"\n change_mode?: "synchronous" | "asynchronous"\n require_password_confirmation?: boolean\n explanation?: {\n en: string\n }\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 }\n resolved?: {\n error_message_path?: string\n }\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookChangePassword`\n\nHook that replaces the built-in change password functionality for portal users. When configured, the portal does not change the user\'s password itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the password change (most likely by sending the user in\n\n```ts\ntype PortalExtensionHookChangePassword = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "changePassword"\n require_new_password?: boolean\n explanation?: {\n en: string\n }\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 }\n resolved?: {\n error_message_path?: string\n }\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookDeleteAccount`\n\nHook that replaces the built-in delete account functionality for portal users. When configured, the portal does not delete the user itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the deletion.\nThe `deletion_mode` controls what the portal does aft\n\n```ts\ntype PortalExtensionHookDeleteAccount = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "deleteAccount"\n deletion_mode?: "synchronous" | "asynchronous"\n delete_contact?: "none" | "soft" | "hard"\n explanation?: {\n en: string\n }\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 }\n resolved?: {\n error_message_path?: string\n }\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" | "block_reference"\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" | "block_reference"\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### `BlockReferenceArg`\n\nReferences another journey block by its ID. The configuring user picks\na block from the journey via a dropdown in the journey-builder; the\nchosen block\'s ID is stored as the arg value (a string). The bundle can\nthen call `subscribe(blockId, cb)` / `getValue(blockId)` against that ID.\n\n\n```ts\ntype BlockReferenceArg = {\n type?: "block_reference"\n allowed_types?: string[]\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### `InternalReview`\n\nReview entry including app ownership info, used by internal admin endpoints\n\n```ts\ntype InternalReview = {\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 app_id?: string\n org_id?: string\n reviewed_by?: string\n reviewed_at?: 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 repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\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### `ApiProxyConfig`\n\nConfiguration for an API proxy component\n\n```ts\ntype ApiProxyConfig = {\n name: string\n target: string\n auth_type: "header" | "bearer" | "basic" | "oauth2" | "none"\n auth_header?: string\n token_url?: string // uri\n headers?: Record<string, string>\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 icon_url?: 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 repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\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 repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\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 functions?: Array<{\n name: { ... }\n type: { ... }\n label?: { ... }\n description?: { ... }\n code: { ... }\n schedule?: { ... }\n schedule_timezone?: { ... }\n schedule_overlap?: { ... }\n secrets?: { ... }\n }>\n visibility?: "public" | "private"\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 repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n }>\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\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 // ...\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" | "API_PROXY" | "APP_FUNCTION"\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" | "API_PROXY" | "APP_FUNCTION"\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" | "API_PROXY" | "APP_FUNCTION"[]\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" | "API_PROXY" | "APP_FUNCTION"\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;
|
|
@@ -891,7 +891,7 @@ declare namespace Components {
|
|
|
891
891
|
export interface CustomFlowActionComponent {
|
|
892
892
|
component_type: "CUSTOM_FLOW_ACTION";
|
|
893
893
|
configuration: /**
|
|
894
|
-
* Configuration of
|
|
894
|
+
* Configuration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.
|
|
895
895
|
*
|
|
896
896
|
*/
|
|
897
897
|
CustomFlowConfig;
|
|
@@ -900,14 +900,14 @@ declare namespace Components {
|
|
|
900
900
|
};
|
|
901
901
|
}
|
|
902
902
|
/**
|
|
903
|
-
* Configuration of
|
|
903
|
+
* Configuration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.
|
|
904
904
|
*
|
|
905
905
|
*/
|
|
906
906
|
export type CustomFlowConfig = /**
|
|
907
|
-
* Configuration of
|
|
907
|
+
* Configuration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.
|
|
908
908
|
*
|
|
909
909
|
*/
|
|
910
|
-
ExternalIntegrationCustomActionConfig;
|
|
910
|
+
ExternalIntegrationCustomActionConfig | FunctionRefCustomActionConfig;
|
|
911
911
|
export interface CustomPageComponent {
|
|
912
912
|
component_type: "CUSTOM_PAGE";
|
|
913
913
|
configuration: CustomPageConfig;
|
|
@@ -1219,13 +1219,10 @@ declare namespace Components {
|
|
|
1219
1219
|
*/
|
|
1220
1220
|
name: string; // ^[a-z0-9][a-z0-9-]{0,63}$
|
|
1221
1221
|
/**
|
|
1222
|
-
* Where the function can be used. `workflow` functions are
|
|
1222
|
+
* Where the function can be used. `workflow` functions are referenced by CUSTOM_FLOW_ACTION components (type `function`) and run with entity context. `scheduled` functions run automatically per installation on their cron schedule.
|
|
1223
1223
|
*
|
|
1224
1224
|
*/
|
|
1225
1225
|
type: "workflow" | "scheduled";
|
|
1226
|
-
/**
|
|
1227
|
-
* Human-readable display name, e.g. shown in the flow builder action picker
|
|
1228
|
-
*/
|
|
1229
1226
|
label?: {
|
|
1230
1227
|
/**
|
|
1231
1228
|
* English translation
|
|
@@ -1274,17 +1271,26 @@ declare namespace Components {
|
|
|
1274
1271
|
*
|
|
1275
1272
|
*/
|
|
1276
1273
|
secrets?: string[];
|
|
1274
|
+
}
|
|
1275
|
+
export interface FunctionRefCustomActionConfig {
|
|
1277
1276
|
/**
|
|
1278
|
-
*
|
|
1279
|
-
|
|
1277
|
+
* Name of the custom action
|
|
1278
|
+
*/
|
|
1279
|
+
name?: string;
|
|
1280
|
+
/**
|
|
1281
|
+
* Description of the custom action
|
|
1282
|
+
*/
|
|
1283
|
+
description?: string;
|
|
1284
|
+
/**
|
|
1285
|
+
* Wait for callback_url to be called before completing the action
|
|
1280
1286
|
*/
|
|
1281
1287
|
wait_for_callback?: boolean;
|
|
1288
|
+
type: "function";
|
|
1282
1289
|
/**
|
|
1283
|
-
*
|
|
1290
|
+
* Name of a `workflow`-type function of the same app version. The component provides the org-facing contract (name, options, config surface); the referenced function provides the code.
|
|
1291
|
+
*
|
|
1284
1292
|
*/
|
|
1285
|
-
|
|
1286
|
-
flow_action_config?: AppBridgeSurfaceConfig;
|
|
1287
|
-
};
|
|
1293
|
+
function_name: string;
|
|
1288
1294
|
}
|
|
1289
1295
|
/**
|
|
1290
1296
|
* Required grants for the app in order to call APIs for the installing tenant
|
|
@@ -4356,6 +4362,7 @@ type ExternalProductCatalogConfig = Components.Schemas.ExternalProductCatalogCon
|
|
|
4356
4362
|
type ExternalProductCatalogHookProductRecommendations = Components.Schemas.ExternalProductCatalogHookProductRecommendations;
|
|
4357
4363
|
type ExternalProductCatalogHookProducts = Components.Schemas.ExternalProductCatalogHookProducts;
|
|
4358
4364
|
type FunctionDefinition = Components.Schemas.FunctionDefinition;
|
|
4365
|
+
type FunctionRefCustomActionConfig = Components.Schemas.FunctionRefCustomActionConfig;
|
|
4359
4366
|
type Grants = Components.Schemas.Grants;
|
|
4360
4367
|
type Installation = Components.Schemas.Installation;
|
|
4361
4368
|
type InternalReview = Components.Schemas.InternalReview;
|
|
@@ -4397,4 +4404,4 @@ type S3Reference = Components.Schemas.S3Reference;
|
|
|
4397
4404
|
type TextArg = Components.Schemas.TextArg;
|
|
4398
4405
|
type TranslatedString = Components.Schemas.TranslatedString;
|
|
4399
4406
|
|
|
4400
|
-
export { type
|
|
4407
|
+
export { type Options as $, type Actor as A, type BaseComponent as B, type Client as C, type ErpInformToolkitComponent as D, type EnumArg as E, type EventsQuery as F, type EventsQueryResponse as G, type ExternalIntegrationCustomActionConfig as H, type ExternalProductCatalogAuthBlock as I, type ExternalProductCatalogComponent as J, type ExternalProductCatalogConfig as K, type ExternalProductCatalogHookProductRecommendations as L, type ExternalProductCatalogHookProducts as M, type FunctionDefinition as N, type OperationMethods as O, Paths as P, type FunctionRefCustomActionConfig as Q, type Grants as R, type Installation as S, type InternalReview as T, type JourneyBlockComponent as U, type JourneyBlockComponentArgs as V, type JourneyBlockConfig as W, type NotificationConfig as X, type NotificationEvent as Y, type ObjectField as Z, type Option as _, Components as a, type OptionsRef as a0, type OverrideDevMode as a1, type PortalBlockComponent as a2, type PortalBlockConfig as a3, type PortalBlockSurfaceConfig as a4, type PortalExtensionAuthBlock as a5, type PortalExtensionComponent as a6, type PortalExtensionConfig as a7, type PortalExtensionHookChangeEmail as a8, type PortalExtensionHookChangePassword as a9, type PortalExtensionHookConsumptionDataRetrieval as aa, type PortalExtensionHookContractIdentification as ab, type PortalExtensionHookCostDataRetrieval as ac, type PortalExtensionHookDataExport as ad, type PortalExtensionHookDeleteAccount as ae, type PortalExtensionHookMeterReadingPlausibilityCheck as af, type PortalExtensionHookPriceDataRetrieval as ag, type PortalExtensionHookRegistrationIdentifiersCheck as ah, type PortalExtensionHookVisualizationMetadata as ai, type PortalExtensionSeamlessLink as aj, type PortalExtensionSecureProxy as ak, type Pricing as al, type PublicConfiguration as am, type RawEvents as an, type Review as ao, type Role as ap, type S3Reference as aq, type TextArg as ar, type TranslatedString as as, type PathsDictionary as b, type AggregatedEvents as c, type ApiProxyComponent as d, type ApiProxyConfig as e, type AppBridgeSurfaceConfig as f, type AppEventData as g, type Audit as h, type Author as i, type BaseComponentCommon as j, type BaseCustomActionConfig as k, type BatchEventRequest as l, type BillingFrequency as m, type BlockReferenceArg as n, type BlueprintRef as o, type BooleanArg as p, type CallerIdentity as q, type ComponentType as r, type Configuration as s, type ConfigurationMetadata as t, type ConfigurationVersion as u, type CustomCapabilityComponent as v, type CustomFlowActionComponent as w, type CustomFlowConfig as x, type CustomPageComponent as y, type CustomPageConfig as z };
|
|
@@ -891,7 +891,7 @@ declare namespace Components {
|
|
|
891
891
|
export interface CustomFlowActionComponent {
|
|
892
892
|
component_type: "CUSTOM_FLOW_ACTION";
|
|
893
893
|
configuration: /**
|
|
894
|
-
* Configuration of
|
|
894
|
+
* Configuration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.
|
|
895
895
|
*
|
|
896
896
|
*/
|
|
897
897
|
CustomFlowConfig;
|
|
@@ -900,14 +900,14 @@ declare namespace Components {
|
|
|
900
900
|
};
|
|
901
901
|
}
|
|
902
902
|
/**
|
|
903
|
-
* Configuration of
|
|
903
|
+
* Configuration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.
|
|
904
904
|
*
|
|
905
905
|
*/
|
|
906
906
|
export type CustomFlowConfig = /**
|
|
907
|
-
* Configuration of
|
|
907
|
+
* Configuration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.
|
|
908
908
|
*
|
|
909
909
|
*/
|
|
910
|
-
ExternalIntegrationCustomActionConfig;
|
|
910
|
+
ExternalIntegrationCustomActionConfig | FunctionRefCustomActionConfig;
|
|
911
911
|
export interface CustomPageComponent {
|
|
912
912
|
component_type: "CUSTOM_PAGE";
|
|
913
913
|
configuration: CustomPageConfig;
|
|
@@ -1219,13 +1219,10 @@ declare namespace Components {
|
|
|
1219
1219
|
*/
|
|
1220
1220
|
name: string; // ^[a-z0-9][a-z0-9-]{0,63}$
|
|
1221
1221
|
/**
|
|
1222
|
-
* Where the function can be used. `workflow` functions are
|
|
1222
|
+
* Where the function can be used. `workflow` functions are referenced by CUSTOM_FLOW_ACTION components (type `function`) and run with entity context. `scheduled` functions run automatically per installation on their cron schedule.
|
|
1223
1223
|
*
|
|
1224
1224
|
*/
|
|
1225
1225
|
type: "workflow" | "scheduled";
|
|
1226
|
-
/**
|
|
1227
|
-
* Human-readable display name, e.g. shown in the flow builder action picker
|
|
1228
|
-
*/
|
|
1229
1226
|
label?: {
|
|
1230
1227
|
/**
|
|
1231
1228
|
* English translation
|
|
@@ -1274,17 +1271,26 @@ declare namespace Components {
|
|
|
1274
1271
|
*
|
|
1275
1272
|
*/
|
|
1276
1273
|
secrets?: string[];
|
|
1274
|
+
}
|
|
1275
|
+
export interface FunctionRefCustomActionConfig {
|
|
1277
1276
|
/**
|
|
1278
|
-
*
|
|
1279
|
-
|
|
1277
|
+
* Name of the custom action
|
|
1278
|
+
*/
|
|
1279
|
+
name?: string;
|
|
1280
|
+
/**
|
|
1281
|
+
* Description of the custom action
|
|
1282
|
+
*/
|
|
1283
|
+
description?: string;
|
|
1284
|
+
/**
|
|
1285
|
+
* Wait for callback_url to be called before completing the action
|
|
1280
1286
|
*/
|
|
1281
1287
|
wait_for_callback?: boolean;
|
|
1288
|
+
type: "function";
|
|
1282
1289
|
/**
|
|
1283
|
-
*
|
|
1290
|
+
* Name of a `workflow`-type function of the same app version. The component provides the org-facing contract (name, options, config surface); the referenced function provides the code.
|
|
1291
|
+
*
|
|
1284
1292
|
*/
|
|
1285
|
-
|
|
1286
|
-
flow_action_config?: AppBridgeSurfaceConfig;
|
|
1287
|
-
};
|
|
1293
|
+
function_name: string;
|
|
1288
1294
|
}
|
|
1289
1295
|
/**
|
|
1290
1296
|
* Required grants for the app in order to call APIs for the installing tenant
|
|
@@ -4356,6 +4362,7 @@ type ExternalProductCatalogConfig = Components.Schemas.ExternalProductCatalogCon
|
|
|
4356
4362
|
type ExternalProductCatalogHookProductRecommendations = Components.Schemas.ExternalProductCatalogHookProductRecommendations;
|
|
4357
4363
|
type ExternalProductCatalogHookProducts = Components.Schemas.ExternalProductCatalogHookProducts;
|
|
4358
4364
|
type FunctionDefinition = Components.Schemas.FunctionDefinition;
|
|
4365
|
+
type FunctionRefCustomActionConfig = Components.Schemas.FunctionRefCustomActionConfig;
|
|
4359
4366
|
type Grants = Components.Schemas.Grants;
|
|
4360
4367
|
type Installation = Components.Schemas.Installation;
|
|
4361
4368
|
type InternalReview = Components.Schemas.InternalReview;
|
|
@@ -4397,4 +4404,4 @@ type S3Reference = Components.Schemas.S3Reference;
|
|
|
4397
4404
|
type TextArg = Components.Schemas.TextArg;
|
|
4398
4405
|
type TranslatedString = Components.Schemas.TranslatedString;
|
|
4399
4406
|
|
|
4400
|
-
export { type
|
|
4407
|
+
export { type Options as $, type Actor as A, type BaseComponent as B, type Client as C, type ErpInformToolkitComponent as D, type EnumArg as E, type EventsQuery as F, type EventsQueryResponse as G, type ExternalIntegrationCustomActionConfig as H, type ExternalProductCatalogAuthBlock as I, type ExternalProductCatalogComponent as J, type ExternalProductCatalogConfig as K, type ExternalProductCatalogHookProductRecommendations as L, type ExternalProductCatalogHookProducts as M, type FunctionDefinition as N, type OperationMethods as O, Paths as P, type FunctionRefCustomActionConfig as Q, type Grants as R, type Installation as S, type InternalReview as T, type JourneyBlockComponent as U, type JourneyBlockComponentArgs as V, type JourneyBlockConfig as W, type NotificationConfig as X, type NotificationEvent as Y, type ObjectField as Z, type Option as _, Components as a, type OptionsRef as a0, type OverrideDevMode as a1, type PortalBlockComponent as a2, type PortalBlockConfig as a3, type PortalBlockSurfaceConfig as a4, type PortalExtensionAuthBlock as a5, type PortalExtensionComponent as a6, type PortalExtensionConfig as a7, type PortalExtensionHookChangeEmail as a8, type PortalExtensionHookChangePassword as a9, type PortalExtensionHookConsumptionDataRetrieval as aa, type PortalExtensionHookContractIdentification as ab, type PortalExtensionHookCostDataRetrieval as ac, type PortalExtensionHookDataExport as ad, type PortalExtensionHookDeleteAccount as ae, type PortalExtensionHookMeterReadingPlausibilityCheck as af, type PortalExtensionHookPriceDataRetrieval as ag, type PortalExtensionHookRegistrationIdentifiersCheck as ah, type PortalExtensionHookVisualizationMetadata as ai, type PortalExtensionSeamlessLink as aj, type PortalExtensionSecureProxy as ak, type Pricing as al, type PublicConfiguration as am, type RawEvents as an, type Review as ao, type Role as ap, type S3Reference as aq, type TextArg as ar, type TranslatedString as as, type PathsDictionary as b, type AggregatedEvents as c, type ApiProxyComponent as d, type ApiProxyConfig as e, type AppBridgeSurfaceConfig as f, type AppEventData as g, type Audit as h, type Author as i, type BaseComponentCommon as j, type BaseCustomActionConfig as k, type BatchEventRequest as l, type BillingFrequency as m, type BlockReferenceArg as n, type BlueprintRef as o, type BooleanArg as p, type CallerIdentity as q, type ComponentType as r, type Configuration as s, type ConfigurationMetadata as t, type ConfigurationVersion as u, type CustomCapabilityComponent as v, type CustomFlowActionComponent as w, type CustomFlowConfig as x, type CustomPageComponent as y, type CustomPageConfig as z };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "./chunk-YPSWSI3M.js";
|
|
2
|
+
|
|
3
|
+
// src/docs/calendar.json
|
|
4
|
+
var calendar_default = '# Calendar API\n\n- **Base URL:** `https://calendar.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/calendar](https://docs.epilot.io/api/calendar)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.calendar.listUsersAbsence(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/calendar\'\n\nconst calendarClient = getClient()\nauthorize(calendarClient, () => \'<token>\')\nconst { data } = await calendarClient.listUsersAbsence(...)\n```\n\n## Operations\n\n**Absence**\n- [`listUsersAbsence`](#listusersabsence)\n- [`searchAbsence`](#searchabsence)\n- [`searchNowAbsence`](#searchnowabsence)\n- [`listAbsenceAdjustments`](#listabsenceadjustments)\n- [`createAbsenceAdjustment`](#createabsenceadjustment)\n- [`getAbsenceAdjustment`](#getabsenceadjustment)\n- [`patchAbsenceAdjustment`](#patchabsenceadjustment)\n- [`deleteAbsenceAdjustment`](#deleteabsenceadjustment)\n- [`getUserAbsence`](#getuserabsence)\n\n**Working Hours**\n- [`getWorkingHours`](#getworkinghours)\n- [`putWorkingHours`](#putworkinghours)\n- [`deleteWorkingHours`](#deleteworkinghours)\n\n**Calendars**\n- [`listCalendars`](#listcalendars)\n- [`createCalendar`](#createcalendar)\n- [`addOutlookCalendar`](#addoutlookcalendar)\n- [`listOutlookCalendars`](#listoutlookcalendars)\n- [`deleteOutlookCalendar`](#deleteoutlookcalendar)\n- [`outlookWebhook`](#outlookwebhook)\n- [`getCalendar`](#getcalendar)\n- [`updateCalendar`](#updatecalendar)\n- [`deleteCalendar`](#deletecalendar)\n\n**Calendar Events**\n- [`listEvents`](#listevents)\n- [`createEvent`](#createevent)\n- [`getEvent`](#getevent)\n- [`updateEvent`](#updateevent)\n- [`deleteEvent`](#deleteevent)\n- [`shareEvent`](#shareevent)\n- [`unshareEvent`](#unshareevent)\n\n**Schemas**\n- [`AbsenceInterval`](#absenceinterval)\n- [`AbsenceIntervalSource`](#absenceintervalsource)\n- [`Error`](#error)\n- [`SearchAbsenceBody`](#searchabsencebody)\n- [`SearchNowAbsenceBody`](#searchnowabsencebody)\n- [`AbsenceAdjustment`](#absenceadjustment)\n- [`AbsenceStatus`](#absencestatus)\n- [`AbsenceType`](#absencetype)\n- [`CreateAbsenceAdjustmentBody`](#createabsenceadjustmentbody)\n- [`PatchAbsenceAdjustmentBody`](#patchabsenceadjustmentbody)\n- [`ExternalCalendar`](#externalcalendar)\n- [`WorkingHours`](#workinghours)\n- [`UpsertWorkingHoursBody`](#upsertworkinghoursbody)\n- [`TimeWindow`](#timewindow)\n- [`Calendar`](#calendar)\n- [`CalendarSource`](#calendarsource)\n- [`Provider`](#provider)\n- [`CalendarCreateBody`](#calendarcreatebody)\n- [`AddOutlookCalendarRequest`](#addoutlookcalendarrequest)\n- [`AvailableOutlookCalendar`](#availableoutlookcalendar)\n- [`CalendarPatchBody`](#calendarpatchbody)\n- [`CalendarEvent`](#calendarevent)\n- [`EventType`](#eventtype)\n- [`EventStatus`](#eventstatus)\n- [`Sensitivity`](#sensitivity)\n- [`Importance`](#importance)\n- [`ResponseStatus`](#responsestatus)\n- [`Attendee`](#attendee)\n- [`EventSource`](#eventsource)\n- [`CalendarEventCreateBody`](#calendareventcreatebody)\n- [`CalendarEventPatchBody`](#calendareventpatchbody)\n- [`ShareEventBody`](#shareeventbody)\n\n### `listUsersAbsence`\n\nList organization users with known absence metadata in the requested time window.\n\n`GET /v1/calendar/absence/users`\n\n```ts\nconst { data } = await client.listUsersAbsence({\n from: \'example\',\n to: \'example\',\n include_busy: true,\n working_hours_granularity: \'example\',\n query: \'example\',\n limit: 1,\n offset: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "hits": 0,\n "results": [\n {\n "absent": true,\n "absence_intervals": [\n {\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "original_from": "1970-01-01T00:00:00.000Z",\n "original_to": "1970-01-01T00:00:00.000Z",\n "absent": true,\n "source": "calendar_event",\n "calendar_event_id": "string",\n "absence_adjustment_id": "string",\n "reason": "string"\n }\n ],\n "user_id": "string",\n "display_name": "string",\n "email": "user@example.com",\n "status": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `searchAbsence`\n\nSearch known absence for candidate users in the requested time window.\n\n`POST /v1/calendar/absence:search`\n\n```ts\nconst { data } = await client.searchAbsence(\n null,\n {\n from: \'1970-01-01T00:00:00.000Z\',\n to: \'1970-01-01T00:00:00.000Z\',\n user_ids: [\'string\'],\n include_busy: false,\n working_hours_granularity: \'time\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "users": {}\n}\n```\n\n</details>\n\n---\n\n### `searchNowAbsence`\n\nSearch known absence for candidate users at the current server time.\n\n`POST /v1/calendar/absence:search-now`\n\n```ts\nconst { data } = await client.searchNowAbsence(\n null,\n {\n user_ids: [\'string\'],\n include_busy: false,\n working_hours_granularity: \'time\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "users": {}\n}\n```\n\n</details>\n\n---\n\n### `listAbsenceAdjustments`\n\nList absence adjustments for a user in a time window.\n\n`GET /v1/calendar/absence/users/{user_id}/adjustments`\n\n```ts\nconst { data } = await client.listAbsenceAdjustments({\n user_id: \'example\',\n from: \'example\',\n to: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "results": [\n {\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "absent": true,\n "status": "oof",\n "type": "string",\n "reason": "string",\n "adjustment_id": "string",\n "user_id": "string",\n "created_by": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createAbsenceAdjustment`\n\nCreate a time-bound absence adjustment for a user in the caller organization.\n\n`POST /v1/calendar/absence/users/{user_id}/adjustments`\n\n```ts\nconst { data } = await client.createAbsenceAdjustment(\n {\n user_id: \'example\',\n },\n {\n from: \'1970-01-01T00:00:00.000Z\',\n to: \'1970-01-01T00:00:00.000Z\',\n absent: true,\n status: \'oof\',\n type: \'string\',\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "absent": true,\n "status": "oof",\n "type": "string",\n "reason": "string",\n "adjustment_id": "string",\n "user_id": "string",\n "created_by": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `getAbsenceAdjustment`\n\nGet an absence adjustment by ID.\n\n`GET /v1/calendar/absence/users/{user_id}/adjustments/{adjustment_id}`\n\n```ts\nconst { data } = await client.getAbsenceAdjustment({\n user_id: \'example\',\n adjustment_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "absent": true,\n "status": "oof",\n "type": "string",\n "reason": "string",\n "adjustment_id": "string",\n "user_id": "string",\n "created_by": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `patchAbsenceAdjustment`\n\nUpdate an absence adjustment in the caller organization.\n\n`PATCH /v1/calendar/absence/users/{user_id}/adjustments/{adjustment_id}`\n\n```ts\nconst { data } = await client.patchAbsenceAdjustment(\n {\n user_id: \'example\',\n adjustment_id: \'example\',\n },\n {\n from: \'1970-01-01T00:00:00.000Z\',\n to: \'1970-01-01T00:00:00.000Z\',\n absent: true,\n status: \'oof\',\n type: \'string\',\n reason: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "absent": true,\n "status": "oof",\n "type": "string",\n "reason": "string",\n "adjustment_id": "string",\n "user_id": "string",\n "created_by": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteAbsenceAdjustment`\n\nDelete an absence adjustment.\n\n`DELETE /v1/calendar/absence/users/{user_id}/adjustments/{adjustment_id}`\n\n```ts\nconst { data } = await client.deleteAbsenceAdjustment({\n user_id: \'example\',\n adjustment_id: \'example\',\n})\n```\n\n---\n\n### `getUserAbsence`\n\nGet known absence for a user in a time window. absent=false means no known absence, not guaranteed availability.\n\n`GET /v1/calendar/absence/users/{user_id}`\n\n```ts\nconst { data } = await client.getUserAbsence({\n user_id: \'example\',\n from: \'example\',\n to: \'example\',\n include_busy: true,\n working_hours_granularity: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "absent": true,\n "absence_intervals": [\n {\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "original_from": "1970-01-01T00:00:00.000Z",\n "original_to": "1970-01-01T00:00:00.000Z",\n "absent": true,\n "source": "calendar_event",\n "calendar_event_id": "string",\n "absence_adjustment_id": "string",\n "reason": "string"\n }\n ],\n "from": "1970-01-01T00:00:00.000Z",\n "to": "1970-01-01T00:00:00.000Z",\n "user_id": "string",\n "external_calendars": [\n {\n "provider": "outlook",\n "last_synced_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getWorkingHours`\n\nGet the recurring weekly working hours of a user. 404 means no record exists and the user is treated as always available.\n\n`GET /v1/calendar/working-hours/users/{user_id}`\n\n```ts\nconst { data } = await client.getWorkingHours({\n user_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "monday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "tuesday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "wednesday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "thursday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "friday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "saturday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "sunday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "timezone": "string",\n "user_id": "string",\n "updated_by": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `putWorkingHours`\n\nCreate or fully replace the working hours of a user in the caller organization. This is a full replace, not a merge.\n\n`PUT /v1/calendar/working-hours/users/{user_id}`\n\n```ts\nconst { data } = await client.putWorkingHours(\n {\n user_id: \'example\',\n },\n {\n monday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n tuesday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n wednesday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n thursday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n friday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n saturday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n sunday: [\n {\n start: \'string\',\n end: \'string\'\n }\n ],\n timezone: \'Europe/Berlin\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "monday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "tuesday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "wednesday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "thursday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "friday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "saturday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "sunday": [\n {\n "start": "string",\n "end": "string"\n }\n ],\n "timezone": "string",\n "user_id": "string",\n "updated_by": "string",\n "created_at": "1970-01-01T00:00:00.000Z",\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteWorkingHours`\n\nDelete the working hours of a user. The user is then treated as always available again.\n\n`DELETE /v1/calendar/working-hours/users/{user_id}`\n\n```ts\nconst { data } = await client.deleteWorkingHours({\n user_id: \'example\',\n})\n```\n\n---\n\n### `listCalendars`\n\nList calendars visible to the caller.\n\n`GET /v1/calendar`\n\n```ts\nconst { data } = await client.listCalendars({\n size: 1,\n cursor: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "_id": "string",\n "_schema": "calendar",\n "_org": "string",\n "_title": "string",\n "name": "string",\n "description": "string",\n "color": "string",\n "is_default": true,\n "is_epilot_default": true,\n "read_only": true,\n "owner_email": "user@example.com",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_calendar_id": "string",\n "last_synced_at": "1970-01-01T00:00:00.000Z"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "next_cursor": "string"\n}\n```\n\n</details>\n\n---\n\n### `createCalendar`\n\nCreate a native epilot calendar.\n\n`POST /v1/calendar`\n\n```ts\nconst { data } = await client.createCalendar(\n null,\n {\n name: \'string\',\n description: \'string\',\n color: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar",\n "_org": "string",\n "_title": "string",\n "name": "string",\n "description": "string",\n "color": "string",\n "is_default": true,\n "is_epilot_default": true,\n "read_only": true,\n "owner_email": "user@example.com",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_calendar_id": "string",\n "last_synced_at": "1970-01-01T00:00:00.000Z"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `addOutlookCalendar`\n\nRegisters one of the caller\'s Outlook calendars as an epilot calendar.\n\n`POST /v1/calendar/sources/outlook`\n\n```ts\nconst { data } = await client.addOutlookCalendar(\n null,\n {\n provider_calendar_id: \'string\',\n name: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar",\n "_org": "string",\n "_title": "string",\n "name": "string",\n "description": "string",\n "color": "string",\n "is_default": true,\n "is_epilot_default": true,\n "read_only": true,\n "owner_email": "user@example.com",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_calendar_id": "string",\n "last_synced_at": "1970-01-01T00:00:00.000Z"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `listOutlookCalendars`\n\nLists the calling user\'s Outlook calendars available to import as epilot calendars.\n\n`GET /v1/calendar/sources/outlook/available`\n\n```ts\nconst { data } = await client.listOutlookCalendars()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "calendars": [\n {\n "provider_calendar_id": "string",\n "name": "string",\n "color": "string",\n "is_default": true,\n "can_edit": true,\n "owner": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `deleteOutlookCalendar`\n\nDisconnects a previously registered Outlook calendar.\n\n`DELETE /v1/calendar/sources/outlook/{calendar_id}`\n\n```ts\nconst { data } = await client.deleteOutlookCalendar({\n calendar_id: \'example\',\n})\n```\n\n---\n\n### `outlookWebhook`\n\nPublic Microsoft Graph webhook receiver for per-user Outlook calendar\nsubscriptions. Unauthenticated by design (API Gateway `Authorizer: NONE`):\nGraph calls it with no epilot token.\n\n`POST /v1/calendar/outlook/webhook`\n\n```ts\nconst { data } = await client.outlookWebhook({\n validationToken: \'example\',\n})\n```\n\n---\n\n### `getCalendar`\n\nGet a single calendar by its epilot ID.\n\n`GET /v1/calendar/{calendar_id}`\n\n```ts\nconst { data } = await client.getCalendar({\n calendar_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar",\n "_org": "string",\n "_title": "string",\n "name": "string",\n "description": "string",\n "color": "string",\n "is_default": true,\n "is_epilot_default": true,\n "read_only": true,\n "owner_email": "user@example.com",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_calendar_id": "string",\n "last_synced_at": "1970-01-01T00:00:00.000Z"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateCalendar`\n\nUpdate local calendar details. Changes to synced calendars do not modify the provider calendar.\n\n`PATCH /v1/calendar/{calendar_id}`\n\n```ts\nconst { data } = await client.updateCalendar(\n {\n calendar_id: \'example\',\n },\n {\n name: \'string\',\n description: \'string\',\n color: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar",\n "_org": "string",\n "_title": "string",\n "name": "string",\n "description": "string",\n "color": "string",\n "is_default": true,\n "is_epilot_default": true,\n "read_only": true,\n "owner_email": "user@example.com",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_calendar_id": "string",\n "last_synced_at": "1970-01-01T00:00:00.000Z"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteCalendar`\n\nDelete a native epilot calendar or disconnect a synced calendar, including its locally stored events.\n\n`DELETE /v1/calendar/{calendar_id}`\n\n```ts\nconst { data } = await client.deleteCalendar({\n calendar_id: \'example\',\n})\n```\n\n---\n\n### `listEvents`\n\nList events in a time window. Recurring events are returned as expanded occurrences \u2013 each instance appears as its own event.\n\n`GET /v1/calendar/events`\n\n```ts\nconst { data } = await client.listEvents({\n from: \'example\',\n to: \'example\',\n calendar_id: \'example\',\n size: 1,\n cursor: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "_id": "string",\n "_schema": "calendar_event",\n "_org": "string",\n "_title": "string",\n "_tags": ["string"],\n "calendar_id": "string",\n "event_type": "singleInstance",\n "description": "string",\n "start_time": "1970-01-01T00:00:00.000Z",\n "end_time": "1970-01-01T00:00:00.000Z",\n "timezone": "string",\n "is_all_day": true,\n "location": "string",\n "status": "free",\n "busy": true,\n "is_cancelled": true,\n "is_draft": true,\n "sensitivity": "normal",\n "importance": "low",\n "is_online_meeting": true,\n "online_meeting_url": "https://example.com/path",\n "web_link": "https://example.com/path",\n "response_status": "none",\n "organizer_email": "user@example.com",\n "attendees": [\n {\n "email": "user@example.com",\n "name": "string",\n "response": "none",\n "type": "required"\n }\n ],\n "metadata": {},\n "is_recurring": true,\n "series_master_id": "string",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_event_id": "string",\n "provider_event_url": "https://example.com/path",\n "last_synced_at": "1970-01-01T00:00:00.000Z",\n "etag": "string"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "next_cursor": "string"\n}\n```\n\n</details>\n\n---\n\n### `createEvent`\n\nCreate a native epilot calendar event. Omit `calendar_id` to use the caller\u2019s epilot default calendar.\n\n`POST /v1/calendar/events`\n\n```ts\nconst { data } = await client.createEvent(\n null,\n {\n calendar_id: \'string\',\n description: \'string\',\n start_time: \'1970-01-01T00:00:00.000Z\',\n end_time: \'1970-01-01T00:00:00.000Z\',\n timezone: \'string\',\n is_all_day: true,\n location: \'string\',\n status: \'free\',\n sensitivity: \'normal\',\n metadata: {},\n _title: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar_event",\n "_org": "string",\n "_title": "string",\n "_tags": ["string"],\n "calendar_id": "string",\n "event_type": "singleInstance",\n "description": "string",\n "start_time": "1970-01-01T00:00:00.000Z",\n "end_time": "1970-01-01T00:00:00.000Z",\n "timezone": "string",\n "is_all_day": true,\n "location": "string",\n "status": "free",\n "busy": true,\n "is_cancelled": true,\n "is_draft": true,\n "sensitivity": "normal",\n "importance": "low",\n "is_online_meeting": true,\n "online_meeting_url": "https://example.com/path",\n "web_link": "https://example.com/path",\n "response_status": "none",\n "organizer_email": "user@example.com",\n "attendees": [\n {\n "email": "user@example.com",\n "name": "string",\n "response": "none",\n "type": "required"\n }\n ],\n "metadata": {},\n "is_recurring": true,\n "series_master_id": "string",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_event_id": "string",\n "provider_event_url": "https://example.com/path",\n "last_synced_at": "1970-01-01T00:00:00.000Z",\n "etag": "string"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `getEvent`\n\nGet a single event by its epilot ID.\n\n`GET /v1/calendar/events/{event_id}`\n\n```ts\nconst { data } = await client.getEvent({\n event_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar_event",\n "_org": "string",\n "_title": "string",\n "_tags": ["string"],\n "calendar_id": "string",\n "event_type": "singleInstance",\n "description": "string",\n "start_time": "1970-01-01T00:00:00.000Z",\n "end_time": "1970-01-01T00:00:00.000Z",\n "timezone": "string",\n "is_all_day": true,\n "location": "string",\n "status": "free",\n "busy": true,\n "is_cancelled": true,\n "is_draft": true,\n "sensitivity": "normal",\n "importance": "low",\n "is_online_meeting": true,\n "online_meeting_url": "https://example.com/path",\n "web_link": "https://example.com/path",\n "response_status": "none",\n "organizer_email": "user@example.com",\n "attendees": [\n {\n "email": "user@example.com",\n "name": "string",\n "response": "none",\n "type": "required"\n }\n ],\n "metadata": {},\n "is_recurring": true,\n "series_master_id": "string",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_event_id": "string",\n "provider_event_url": "https://example.com/path",\n "last_synced_at": "1970-01-01T00:00:00.000Z",\n "etag": "string"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateEvent`\n\nUpdate a native epilot calendar event.\n\n`PATCH /v1/calendar/events/{event_id}`\n\n```ts\nconst { data } = await client.updateEvent(\n {\n event_id: \'example\',\n },\n {\n description: \'string\',\n start_time: \'1970-01-01T00:00:00.000Z\',\n end_time: \'1970-01-01T00:00:00.000Z\',\n timezone: \'string\',\n is_all_day: true,\n location: \'string\',\n status: \'free\',\n is_cancelled: true,\n sensitivity: \'normal\',\n _title: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "_id": "string",\n "_schema": "calendar_event",\n "_org": "string",\n "_title": "string",\n "_tags": ["string"],\n "calendar_id": "string",\n "event_type": "singleInstance",\n "description": "string",\n "start_time": "1970-01-01T00:00:00.000Z",\n "end_time": "1970-01-01T00:00:00.000Z",\n "timezone": "string",\n "is_all_day": true,\n "location": "string",\n "status": "free",\n "busy": true,\n "is_cancelled": true,\n "is_draft": true,\n "sensitivity": "normal",\n "importance": "low",\n "is_online_meeting": true,\n "online_meeting_url": "https://example.com/path",\n "web_link": "https://example.com/path",\n "response_status": "none",\n "organizer_email": "user@example.com",\n "attendees": [\n {\n "email": "user@example.com",\n "name": "string",\n "response": "none",\n "type": "required"\n }\n ],\n "metadata": {},\n "is_recurring": true,\n "series_master_id": "string",\n "source": {\n "type": "native",\n "provider": "outlook",\n "provider_event_id": "string",\n "provider_event_url": "https://example.com/path",\n "last_synced_at": "1970-01-01T00:00:00.000Z",\n "etag": "string"\n },\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteEvent`\n\nDelete a native epilot calendar event.\n\n`DELETE /v1/calendar/events/{event_id}`\n\n```ts\nconst { data } = await client.deleteEvent({\n event_id: \'example\',\n})\n```\n\n---\n\n### `shareEvent`\n\nShare a calendar event with another user of the same organization, view-only. Owner-only: recipients of a share cannot re-share. Sharing an already-shared event is a no-op.\n\n`POST /v1/calendar/events/{event_id}/share`\n\n```ts\nconst { data } = await client.shareEvent(\n {\n event_id: \'example\',\n },\n {\n user_id: \'string\'\n },\n)\n```\n\n---\n\n### `unshareEvent`\n\nRevoke a per-event share. The recipient loses access immediately. Owner-only.\n\n`DELETE /v1/calendar/events/{event_id}/share/{user_id}`\n\n```ts\nconst { data } = await client.unshareEvent({\n event_id: \'example\',\n user_id: \'example\',\n})\n```\n\n---\n\n## Schemas\n\n### `AbsenceInterval`\n\n```ts\ntype AbsenceInterval = {\n from: string // date-time\n to: string // date-time\n original_from: string // date-time\n original_to: string // date-time\n absent: boolean\n source: "calendar_event" | "absence_adjustment" | "working_hours"\n calendar_event_id?: string\n absence_adjustment_id?: string\n reason?: string\n}\n```\n\n### `AbsenceIntervalSource`\n\n```ts\ntype AbsenceIntervalSource = "calendar_event" | "absence_adjustment" | "working_hours"\n```\n\n### `Error`\n\n```ts\ntype Error = {\n status: number\n error: string | unknown[]\n}\n```\n\n### `SearchAbsenceBody`\n\n```ts\ntype SearchAbsenceBody = {\n from: string // date-time\n to: string // date-time\n user_ids: string[]\n include_busy?: boolean\n working_hours_granularity?: "time" | "day"\n}\n```\n\n### `SearchNowAbsenceBody`\n\n```ts\ntype SearchNowAbsenceBody = {\n user_ids: string[]\n include_busy?: boolean\n working_hours_granularity?: "time" | "day"\n}\n```\n\n### `AbsenceAdjustment`\n\n```ts\ntype AbsenceAdjustment = {\n from: string // date-time\n to: string // date-time\n absent: boolean\n status: "oof" | "busy"\n type?: string\n reason?: string\n adjustment_id: string\n user_id: string\n created_by: string\n created_at: string // date-time\n updated_at: string // date-time\n}\n```\n\n### `AbsenceStatus`\n\nCalendar status targeted by the absence adjustment.\n\n```ts\ntype AbsenceStatus = "oof" | "busy"\n```\n\n### `AbsenceType`\n\nOptional producer-defined reference stored with an absence adjustment.\n\n```ts\ntype AbsenceType = string\n```\n\n### `CreateAbsenceAdjustmentBody`\n\n```ts\ntype CreateAbsenceAdjustmentBody = {\n from: string // date-time\n to: string // date-time\n absent: boolean\n status: "oof" | "busy"\n type?: string\n reason?: string\n}\n```\n\n### `PatchAbsenceAdjustmentBody`\n\n```ts\ntype PatchAbsenceAdjustmentBody = {\n from?: string // date-time\n to?: string // date-time\n absent?: boolean\n status?: "oof" | "busy"\n type?: string\n reason?: string\n}\n```\n\n### `ExternalCalendar`\n\n```ts\ntype ExternalCalendar = {\n provider: "outlook" | "google"\n last_synced_at: string // date-time\n}\n```\n\n### `WorkingHours`\n\nRecurring weekly working hours of a user. The absence of a record means the user is treated as always available.\n\n```ts\ntype WorkingHours = {\n monday: Array<{\n start: string\n end: string\n }>\n tuesday: Array<{\n start: string\n end: string\n }>\n wednesday: Array<{\n start: string\n end: string\n }>\n thursday: Array<{\n start: string\n end: string\n }>\n friday: Array<{\n start: string\n end: string\n }>\n saturday: Array<{\n start: string\n end: string\n }>\n sunday: Array<{\n start: string\n end: string\n }>\n timezone: string\n user_id: string\n updated_by: string\n created_at: string // date-time\n updated_at: string // date-time\n}\n```\n\n### `UpsertWorkingHoursBody`\n\nFull replacement of the working-hours record. All weekdays are required; an empty array means a day off. Users without a working-hours record are treated as always available.\n\n```ts\ntype UpsertWorkingHoursBody = {\n monday: Array<{\n start: string\n end: string\n }>\n tuesday: Array<{\n start: string\n end: string\n }>\n wednesday: Array<{\n start: string\n end: string\n }>\n thursday: Array<{\n start: string\n end: string\n }>\n friday: Array<{\n start: string\n end: string\n }>\n saturday: Array<{\n start: string\n end: string\n }>\n sunday: Array<{\n start: string\n end: string\n }>\n timezone?: string\n}\n```\n\n### `TimeWindow`\n\nA wall-clock working window within a single day.\n\n```ts\ntype TimeWindow = {\n start: string\n end: string\n}\n```\n\n### `Calendar`\n\n```ts\ntype Calendar = {\n _id: string\n _schema: "calendar"\n _org: string\n _title?: string\n name: string\n description?: string\n color?: string\n is_default: boolean\n is_epilot_default: boolean\n read_only: boolean\n owner_email?: string // email\n source: {\n type: "native" | "synced"\n provider?: "outlook" | "google" | null\n provider_calendar_id?: string\n last_synced_at?: string // date-time\n }\n _created_at?: string // date-time\n _updated_at?: string // date-time\n}\n```\n\n### `CalendarSource`\n\n```ts\ntype CalendarSource = {\n type: "native" | "synced"\n provider?: "outlook" | "google" | null\n provider_calendar_id?: string\n last_synced_at?: string // date-time\n}\n```\n\n### `Provider`\n\nNull for native epilot calendars\n\n```ts\ntype Provider = "outlook" | "google" | null\n```\n\n### `CalendarCreateBody`\n\n```ts\ntype CalendarCreateBody = {\n name: string\n description?: string\n color?: string\n}\n```\n\n### `AddOutlookCalendarRequest`\n\n```ts\ntype AddOutlookCalendarRequest = {\n provider_calendar_id: string\n name?: string\n}\n```\n\n### `AvailableOutlookCalendar`\n\n```ts\ntype AvailableOutlookCalendar = {\n provider_calendar_id: string\n name: string\n color?: string\n is_default?: boolean\n can_edit?: boolean\n owner?: string\n}\n```\n\n### `CalendarPatchBody`\n\n```ts\ntype CalendarPatchBody = {\n name?: string\n description?: string\n color?: string\n}\n```\n\n### `CalendarEvent`\n\n```ts\ntype CalendarEvent = {\n _id: string\n _schema: "calendar_event"\n _org: string\n _title?: string\n _tags?: string[]\n calendar_id: string\n event_type: "singleInstance" | "occurrence" | "exception" | "seriesMaster"\n description?: string\n start_time: string // date-time\n end_time: string // date-time\n timezone: string\n is_all_day: boolean\n location?: string\n status: "free" | "tentative" | "busy" | "oof" | "workingElsewhere" | "unknown"\n busy: boolean\n is_cancelled: boolean\n is_draft: boolean\n sensitivity: "normal" | "personal" | "private" | "confidential"\n importance: "low" | "normal" | "high"\n is_online_meeting: boolean\n online_meeting_url?: string // uri\n web_link?: string // uri\n response_status: "none" | "organizer" | "tentativelyAccepted" | "accepted" | "declined" | "notResponded"\n organizer_email?: string // email\n attendees?: Array<{\n email: string // email\n name?: string\n response: "none" | "organizer" | "tentativelyAccepted" | "accepted" | "declined" | "notResponded"\n type: "required" | "optional" | "resource"\n }>\n metadata?: Record<string, unknown>\n is_recurring: boolean\n series_master_id?: string\n source: {\n type: "native" | "synced"\n provider?: "outlook" | "google" | null\n provider_event_id?: string\n provider_event_url?: string // uri\n last_synced_at?: string // date-time\n etag?: string\n }\n _created_at?: string // date-time\n _updated_at?: string // date-time\n}\n```\n\n### `EventType`\n\n```ts\ntype EventType = "singleInstance" | "occurrence" | "exception" | "seriesMaster"\n```\n\n### `EventStatus`\n\nFree/busy state derived from provider `showAs`\n\n```ts\ntype EventStatus = "free" | "tentative" | "busy" | "oof" | "workingElsewhere" | "unknown"\n```\n\n### `Sensitivity`\n\n```ts\ntype Sensitivity = "normal" | "personal" | "private" | "confidential"\n```\n\n### `Importance`\n\n```ts\ntype Importance = "low" | "normal" | "high"\n```\n\n### `ResponseStatus`\n\nCaller\'s response to the invite\n\n```ts\ntype ResponseStatus = "none" | "organizer" | "tentativelyAccepted" | "accepted" | "declined" | "notResponded"\n```\n\n### `Attendee`\n\n```ts\ntype Attendee = {\n email: string // email\n name?: string\n response: "none" | "organizer" | "tentativelyAccepted" | "accepted" | "declined" | "notResponded"\n type: "required" | "optional" | "resource"\n}\n```\n\n### `EventSource`\n\n```ts\ntype EventSource = {\n type: "native" | "synced"\n provider?: "outlook" | "google" | null\n provider_event_id?: string\n provider_event_url?: string // uri\n last_synced_at?: string // date-time\n etag?: string\n}\n```\n\n### `CalendarEventCreateBody`\n\n```ts\ntype CalendarEventCreateBody = {\n calendar_id?: string\n description?: string\n start_time: string // date-time\n end_time: string // date-time\n timezone: string\n is_all_day: boolean\n location?: string\n status: "free" | "tentative" | "busy" | "oof" | "workingElsewhere" | "unknown"\n sensitivity: "normal" | "personal" | "private" | "confidential"\n metadata?: Record<string, unknown>\n _title: string\n}\n```\n\n### `CalendarEventPatchBody`\n\n```ts\ntype CalendarEventPatchBody = {\n description?: string\n start_time?: string // date-time\n end_time?: string // date-time\n timezone?: string\n is_all_day?: boolean\n location?: string\n status?: "free" | "tentative" | "busy" | "oof" | "workingElsewhere" | "unknown"\n is_cancelled?: boolean\n sensitivity?: "normal" | "personal" | "private" | "confidential"\n _title?: string\n}\n```\n\n### `ShareEventBody`\n\n```ts\ntype ShareEventBody = {\n user_id: string\n}\n```\n';
|
|
5
|
+
export {
|
|
6
|
+
calendar_default as default
|
|
7
|
+
};
|