@epilot/cli 0.1.24 → 0.1.25

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/README.md CHANGED
@@ -29,7 +29,7 @@ npm install -g @epilot/cli
29
29
 
30
30
  <!-- usage-help -->
31
31
  ```
32
- epilot v0.1.24 — CLI for epilot APIs
32
+ epilot v0.1.25 — CLI for epilot APIs
33
33
 
34
34
  USAGE
35
35
  epilot <api> <operationId> [params...] [flags]
@@ -70,6 +70,7 @@ APIs
70
70
  automation Automation API
71
71
  billing Billing API
72
72
  blueprint-manifest Blueprint Manifest API
73
+ calendar Calendar API
73
74
  configuration-hub Configuration Hub API
74
75
  consent Consent API
75
76
  customer-portal Portal API
@@ -325,6 +326,7 @@ Full documentation with sample calls and responses for all APIs:
325
326
  | Automation API | `epilot automation` | [docs](./docs/automation.md) |
326
327
  | Billing API | `epilot billing` | [docs](./docs/billing.md) |
327
328
  | Blueprint Manifest API | `epilot blueprint-manifest` | [docs](./docs/blueprint-manifest.md) |
329
+ | Calendar API | `epilot calendar` | [docs](./docs/calendar.md) |
328
330
  | Configuration Hub API | `epilot configuration-hub` | [docs](./docs/configuration-hub.md) |
329
331
  | Consent API | `epilot consent` | [docs](./docs/consent.md) |
330
332
  | Portal API | `epilot customer-portal` | [docs](./docs/customer-portal.md) |
@@ -17,6 +17,10 @@
17
17
  {
18
18
  "name": "App Analytics",
19
19
  "description": "Analytics for installed apps"
20
+ },
21
+ {
22
+ "name": "App Proxy",
23
+ "description": "Forward requests to external APIs via registered proxy targets"
20
24
  }
21
25
  ],
22
26
  "servers": [
@@ -1468,6 +1472,100 @@
1468
1472
  }
1469
1473
  }
1470
1474
  }
1475
+ },
1476
+ "/v1/public/app/{appId}/proxy/{proxyName}/{path}": {
1477
+ "parameters": [
1478
+ {
1479
+ "name": "appId",
1480
+ "in": "path",
1481
+ "required": true,
1482
+ "schema": {
1483
+ "type": "string"
1484
+ },
1485
+ "description": "ID of the installed app"
1486
+ },
1487
+ {
1488
+ "name": "proxyName",
1489
+ "in": "path",
1490
+ "required": true,
1491
+ "schema": {
1492
+ "type": "string"
1493
+ },
1494
+ "description": "Name of the proxy target as defined in the app manifest"
1495
+ },
1496
+ {
1497
+ "name": "path",
1498
+ "in": "path",
1499
+ "required": true,
1500
+ "schema": {
1501
+ "type": "string"
1502
+ },
1503
+ "description": "Path to forward to the proxy target"
1504
+ }
1505
+ ],
1506
+ "get": {
1507
+ "summary": "publicProxyGet",
1508
+ "operationId": "publicProxyGet",
1509
+ "description": "Forward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)",
1510
+ "tags": [
1511
+ "App Proxy"
1512
+ ],
1513
+ "security": [
1514
+ {
1515
+ "EpilotAuth": []
1516
+ }
1517
+ ],
1518
+ "responses": {
1519
+ "200": {
1520
+ "description": "Proxied response from the target API"
1521
+ },
1522
+ "403": {
1523
+ "description": "Forbidden - app not installed or no public component uses this proxy"
1524
+ },
1525
+ "404": {
1526
+ "description": "Proxy target not found"
1527
+ },
1528
+ "502": {
1529
+ "description": "Bad gateway - proxy target unreachable or error"
1530
+ }
1531
+ }
1532
+ },
1533
+ "post": {
1534
+ "summary": "publicProxyPost",
1535
+ "operationId": "publicProxyPost",
1536
+ "description": "Forward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)",
1537
+ "tags": [
1538
+ "App Proxy"
1539
+ ],
1540
+ "security": [
1541
+ {
1542
+ "EpilotAuth": []
1543
+ }
1544
+ ],
1545
+ "requestBody": {
1546
+ "content": {
1547
+ "application/json": {
1548
+ "schema": {
1549
+ "type": "object"
1550
+ }
1551
+ }
1552
+ }
1553
+ },
1554
+ "responses": {
1555
+ "200": {
1556
+ "description": "Proxied response from the target API"
1557
+ },
1558
+ "403": {
1559
+ "description": "Forbidden - app not installed or no public component uses this proxy"
1560
+ },
1561
+ "404": {
1562
+ "description": "Proxy target not found"
1563
+ },
1564
+ "502": {
1565
+ "description": "Bad gateway - proxy target unreachable or error"
1566
+ }
1567
+ }
1568
+ }
1471
1569
  }
1472
1570
  },
1473
1571
  "components": {
@@ -1832,7 +1930,8 @@
1832
1930
  "ERP_INFORM_TOOLKIT",
1833
1931
  "CUSTOM_CAPABILITY",
1834
1932
  "EXTERNAL_PRODUCT_CATALOG",
1835
- "CUSTOM_PAGE"
1933
+ "CUSTOM_PAGE",
1934
+ "API_PROXY"
1836
1935
  ],
1837
1936
  "description": "Type of app component"
1838
1937
  },
@@ -1944,7 +2043,8 @@
1944
2043
  "ERP_INFORM_TOOLKIT": "#/components/schemas/ErpInformToolkitComponent",
1945
2044
  "CUSTOM_CAPABILITY": "#/components/schemas/CustomCapabilityComponent",
1946
2045
  "EXTERNAL_PRODUCT_CATALOG": "#/components/schemas/ExternalProductCatalogComponent",
1947
- "CUSTOM_PAGE": "#/components/schemas/CustomPageComponent"
2046
+ "CUSTOM_PAGE": "#/components/schemas/CustomPageComponent",
2047
+ "API_PROXY": "#/components/schemas/ApiProxyComponent"
1948
2048
  }
1949
2049
  },
1950
2050
  "oneOf": [
@@ -1971,11 +2071,32 @@
1971
2071
  },
1972
2072
  {
1973
2073
  "$ref": "#/components/schemas/CustomPageComponent"
2074
+ },
2075
+ {
2076
+ "$ref": "#/components/schemas/ApiProxyComponent"
1974
2077
  }
1975
2078
  ]
1976
2079
  }
1977
2080
  ]
1978
2081
  },
2082
+ "ApiProxyComponent": {
2083
+ "type": "object",
2084
+ "required": [
2085
+ "component_type",
2086
+ "configuration"
2087
+ ],
2088
+ "properties": {
2089
+ "component_type": {
2090
+ "type": "string",
2091
+ "enum": [
2092
+ "API_PROXY"
2093
+ ]
2094
+ },
2095
+ "configuration": {
2096
+ "$ref": "#/components/schemas/ApiProxyConfig"
2097
+ }
2098
+ }
2099
+ },
1979
2100
  "CustomCapabilityComponent": {
1980
2101
  "type": "object",
1981
2102
  "required": [
@@ -2488,8 +2609,10 @@
2488
2609
  "contractIdentification": "#/components/schemas/PortalExtensionHookContractIdentification",
2489
2610
  "priceDataRetrieval": "#/components/schemas/PortalExtensionHookPriceDataRetrieval",
2490
2611
  "consumptionDataRetrieval": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval",
2612
+ "dataExport": "#/components/schemas/PortalExtensionHookDataExport",
2491
2613
  "costDataRetrieval": "#/components/schemas/PortalExtensionHookCostDataRetrieval",
2492
- "meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck"
2614
+ "meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck",
2615
+ "visualizationMetadata": "#/components/schemas/PortalExtensionHookVisualizationMetadata"
2493
2616
  }
2494
2617
  },
2495
2618
  "oneOf": [
@@ -2505,11 +2628,17 @@
2505
2628
  {
2506
2629
  "$ref": "#/components/schemas/PortalExtensionHookConsumptionDataRetrieval"
2507
2630
  },
2631
+ {
2632
+ "$ref": "#/components/schemas/PortalExtensionHookDataExport"
2633
+ },
2508
2634
  {
2509
2635
  "$ref": "#/components/schemas/PortalExtensionHookCostDataRetrieval"
2510
2636
  },
2511
2637
  {
2512
2638
  "$ref": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck"
2639
+ },
2640
+ {
2641
+ "$ref": "#/components/schemas/PortalExtensionHookVisualizationMetadata"
2513
2642
  }
2514
2643
  ]
2515
2644
  }
@@ -2594,7 +2723,8 @@
2594
2723
  },
2595
2724
  "use_static_ips": {
2596
2725
  "type": "boolean",
2597
- "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
2726
+ "deprecated": true,
2727
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
2598
2728
  "default": false
2599
2729
  },
2600
2730
  "secure_proxy": {
@@ -2707,7 +2837,8 @@
2707
2837
  },
2708
2838
  "use_static_ips": {
2709
2839
  "type": "boolean",
2710
- "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
2840
+ "deprecated": true,
2841
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
2711
2842
  "default": false
2712
2843
  },
2713
2844
  "secure_proxy": {
@@ -2818,7 +2949,8 @@
2818
2949
  },
2819
2950
  "use_static_ips": {
2820
2951
  "type": "boolean",
2821
- "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
2952
+ "deprecated": true,
2953
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
2822
2954
  "default": false
2823
2955
  },
2824
2956
  "secure_proxy": {
@@ -2853,7 +2985,8 @@
2853
2985
  },
2854
2986
  "intervals": {
2855
2987
  "type": "array",
2856
- "description": "Intervals supported by the API. If omitted, it is assumed that all intervals are supported.",
2988
+ "deprecated": true,
2989
+ "description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
2857
2990
  "items": {
2858
2991
  "type": "string",
2859
2992
  "enum": [
@@ -2918,7 +3051,8 @@
2918
3051
  },
2919
3052
  "use_static_ips": {
2920
3053
  "type": "boolean",
2921
- "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
3054
+ "deprecated": true,
3055
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
2922
3056
  "default": false
2923
3057
  },
2924
3058
  "secure_proxy": {
@@ -2952,7 +3086,8 @@
2952
3086
  },
2953
3087
  "intervals": {
2954
3088
  "type": "array",
2955
- "description": "Intervals supported by the API. If omitted, it is assumed that all intervals are supported.",
3089
+ "deprecated": true,
3090
+ "description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
2956
3091
  "items": {
2957
3092
  "type": "string",
2958
3093
  "enum": [
@@ -3017,7 +3152,179 @@
3017
3152
  },
3018
3153
  "use_static_ips": {
3019
3154
  "type": "boolean",
3020
- "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
3155
+ "deprecated": true,
3156
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
3157
+ "default": false
3158
+ },
3159
+ "secure_proxy": {
3160
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3161
+ }
3162
+ },
3163
+ "required": [
3164
+ "id",
3165
+ "type",
3166
+ "call"
3167
+ ],
3168
+ "additionalProperties": false
3169
+ },
3170
+ "PortalExtensionHookDataExport": {
3171
+ "description": "Generic data export hook. When configured on blocks that support it, the portal delegates the export action (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the file itself. Can be used by any block that supports export — consumption charts, dynamic tariff charts, etc. The expected response to the call is:\n - 200 with a JSON body describing the exported file (download_url, optional filename, content_type, expires_at)\n",
3172
+ "type": "object",
3173
+ "properties": {
3174
+ "id": {
3175
+ "type": "string",
3176
+ "pattern": "^[a-zA-Z0-9_-]+$",
3177
+ "description": "Identifier of the hook. Should not change between updates."
3178
+ },
3179
+ "name": {
3180
+ "$ref": "#/components/schemas/TranslatedString"
3181
+ },
3182
+ "type": {
3183
+ "type": "string",
3184
+ "enum": [
3185
+ "dataExport"
3186
+ ]
3187
+ },
3188
+ "block_types": {
3189
+ "type": "array",
3190
+ "description": "Optional list of portal block types this hook supports. If omitted,\nthe hook is usable on any export-capable block. Allowed values match\nthe block type identifiers used by the portal builder\n(e.g. `consumption_visualization`, `dynamic_tariff`).\n",
3191
+ "items": {
3192
+ "type": "string"
3193
+ }
3194
+ },
3195
+ "auth": {
3196
+ "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3197
+ },
3198
+ "call": {
3199
+ "type": "object",
3200
+ "properties": {
3201
+ "method": {
3202
+ "type": "string",
3203
+ "description": "HTTP method to use for the call",
3204
+ "default": "GET"
3205
+ },
3206
+ "url": {
3207
+ "type": "string",
3208
+ "description": "URL to call. Supports variable interpolation."
3209
+ },
3210
+ "params": {
3211
+ "type": "object",
3212
+ "description": "Parameters to append to the URL. Supports variable interpolation.",
3213
+ "additionalProperties": {
3214
+ "type": "string"
3215
+ },
3216
+ "default": {}
3217
+ },
3218
+ "headers": {
3219
+ "type": "object",
3220
+ "description": "Headers to use. Supports variable interpolation.",
3221
+ "additionalProperties": {
3222
+ "type": "string"
3223
+ },
3224
+ "default": {}
3225
+ },
3226
+ "body": {
3227
+ "type": "object",
3228
+ "description": "Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.",
3229
+ "additionalProperties": true
3230
+ }
3231
+ },
3232
+ "required": [
3233
+ "url"
3234
+ ],
3235
+ "additionalProperties": false
3236
+ },
3237
+ "use_static_ips": {
3238
+ "type": "boolean",
3239
+ "deprecated": true,
3240
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
3241
+ "default": false
3242
+ },
3243
+ "secure_proxy": {
3244
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3245
+ }
3246
+ },
3247
+ "required": [
3248
+ "id",
3249
+ "type",
3250
+ "call"
3251
+ ],
3252
+ "additionalProperties": false
3253
+ },
3254
+ "PortalExtensionHookVisualizationMetadata": {
3255
+ "description": "Hook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape can vary per meter/contract. The expected response to the call is:\n - 200 with a JSON body of shape:\n {\n \"type_options\": [{ \"id\": \"ht\", \"label\": { \"en\": \"High tariff\" }, \"aggregation_group\": \"consumption\", \"unit\": \"kWh\" }, ...],\n \"intervals\": [\"PT15M\", \"PT1H\", \"P1D\", \"P1M\"],\n \"data_range\": { \"from\": \"2024-01-01T00:00:00Z\", \"to\": \"2026-05-01T00:00:00Z\" }\n }\n All fields are optional; the consumer falls back to its defaults for whatever the hook does not return.\nThe portal looks up this hook implicitly per extension (one `visualizationMetadata` hook per extension) — there is no need for a data-retrieval hook to reference it explicitly.\n",
3256
+ "type": "object",
3257
+ "properties": {
3258
+ "id": {
3259
+ "type": "string",
3260
+ "pattern": "^[a-zA-Z0-9_-]+$",
3261
+ "description": "Identifier of the hook. Should not change between updates."
3262
+ },
3263
+ "name": {
3264
+ "$ref": "#/components/schemas/TranslatedString"
3265
+ },
3266
+ "type": {
3267
+ "type": "string",
3268
+ "enum": [
3269
+ "visualizationMetadata"
3270
+ ]
3271
+ },
3272
+ "auth": {
3273
+ "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3274
+ },
3275
+ "call": {
3276
+ "type": "object",
3277
+ "properties": {
3278
+ "method": {
3279
+ "type": "string",
3280
+ "description": "HTTP method to use for the call",
3281
+ "default": "GET"
3282
+ },
3283
+ "url": {
3284
+ "type": "string",
3285
+ "description": "URL to call. Supports variable interpolation."
3286
+ },
3287
+ "params": {
3288
+ "type": "object",
3289
+ "description": "Parameters to append to the URL. Supports variable interpolation.",
3290
+ "additionalProperties": {
3291
+ "type": "string"
3292
+ },
3293
+ "default": {}
3294
+ },
3295
+ "headers": {
3296
+ "type": "object",
3297
+ "description": "Headers to use. Supports variable interpolation.",
3298
+ "additionalProperties": {
3299
+ "type": "string"
3300
+ },
3301
+ "default": {}
3302
+ },
3303
+ "body": {
3304
+ "type": "object",
3305
+ "description": "Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.",
3306
+ "additionalProperties": true
3307
+ }
3308
+ },
3309
+ "required": [
3310
+ "url"
3311
+ ],
3312
+ "additionalProperties": false
3313
+ },
3314
+ "resolved": {
3315
+ "type": "object",
3316
+ "properties": {
3317
+ "dataPath": {
3318
+ "type": "string",
3319
+ "description": "Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level."
3320
+ }
3321
+ },
3322
+ "additionalProperties": false
3323
+ },
3324
+ "use_static_ips": {
3325
+ "type": "boolean",
3326
+ "deprecated": true,
3327
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
3021
3328
  "default": false
3022
3329
  },
3023
3330
  "secure_proxy": {
@@ -3051,7 +3358,8 @@
3051
3358
  },
3052
3359
  "intervals": {
3053
3360
  "type": "array",
3054
- "description": "Intervals supported by the API. If omitted, it is assumed that all intervals are supported.",
3361
+ "deprecated": true,
3362
+ "description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
3055
3363
  "items": {
3056
3364
  "type": "string",
3057
3365
  "enum": [
@@ -3116,7 +3424,8 @@
3116
3424
  },
3117
3425
  "use_static_ips": {
3118
3426
  "type": "boolean",
3119
- "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
3427
+ "deprecated": true,
3428
+ "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
3120
3429
  "default": false
3121
3430
  },
3122
3431
  "secure_proxy": {
@@ -3430,7 +3739,8 @@
3430
3739
  "enum": [
3431
3740
  "text",
3432
3741
  "boolean",
3433
- "enum"
3742
+ "enum",
3743
+ "block_reference"
3434
3744
  ]
3435
3745
  },
3436
3746
  "required": {
@@ -3467,7 +3777,8 @@
3467
3777
  "mapping": {
3468
3778
  "text": "#/components/schemas/TextArg",
3469
3779
  "boolean": "#/components/schemas/BooleanArg",
3470
- "enum": "#/components/schemas/EnumArg"
3780
+ "enum": "#/components/schemas/EnumArg",
3781
+ "block_reference": "#/components/schemas/BlockReferenceArg"
3471
3782
  }
3472
3783
  },
3473
3784
  "oneOf": [
@@ -3479,6 +3790,9 @@
3479
3790
  },
3480
3791
  {
3481
3792
  "$ref": "#/components/schemas/EnumArg"
3793
+ },
3794
+ {
3795
+ "$ref": "#/components/schemas/BlockReferenceArg"
3482
3796
  }
3483
3797
  ]
3484
3798
  }
@@ -3506,6 +3820,25 @@
3506
3820
  }
3507
3821
  }
3508
3822
  },
3823
+ "BlockReferenceArg": {
3824
+ "type": "object",
3825
+ "description": "References another journey block by its ID. The configuring user picks\na block from the journey via a dropdown in the journey-builder; the\nchosen block's ID is stored as the arg value (a string). The bundle can\nthen call `subscribe(blockId, cb)` / `getValue(blockId)` against that ID.\n",
3826
+ "properties": {
3827
+ "type": {
3828
+ "type": "string",
3829
+ "enum": [
3830
+ "block_reference"
3831
+ ]
3832
+ },
3833
+ "allowed_types": {
3834
+ "type": "array",
3835
+ "description": "Restrict the picker to blocks of these journey block types\n(e.g. [\"availability-check\", \"address\"]). Omit to allow any type.\n",
3836
+ "items": {
3837
+ "type": "string"
3838
+ }
3839
+ }
3840
+ }
3841
+ },
3509
3842
  "EnumArg": {
3510
3843
  "type": "object",
3511
3844
  "required": [
@@ -3876,6 +4209,49 @@
3876
4209
  }
3877
4210
  }
3878
4211
  },
4212
+ "ApiProxyConfig": {
4213
+ "type": "object",
4214
+ "description": "Configuration for an API proxy component",
4215
+ "required": [
4216
+ "name",
4217
+ "target",
4218
+ "auth_type"
4219
+ ],
4220
+ "properties": {
4221
+ "name": {
4222
+ "type": "string",
4223
+ "description": "Human-friendly proxy name used in SDK calls",
4224
+ "pattern": "^[a-zA-Z0-9_-]+$",
4225
+ "maxLength": 64
4226
+ },
4227
+ "target": {
4228
+ "type": "string",
4229
+ "format": "uri",
4230
+ "description": "Base URL of the target API. Must be HTTPS.",
4231
+ "pattern": "^https://"
4232
+ },
4233
+ "auth_type": {
4234
+ "type": "string",
4235
+ "enum": [
4236
+ "header",
4237
+ "bearer",
4238
+ "oauth2",
4239
+ "none"
4240
+ ],
4241
+ "description": "Authentication strategy"
4242
+ },
4243
+ "auth_header": {
4244
+ "type": "string",
4245
+ "description": "Header name for 'header' auth type"
4246
+ },
4247
+ "token_url": {
4248
+ "type": "string",
4249
+ "format": "uri",
4250
+ "description": "OAuth2 token endpoint URL",
4251
+ "pattern": "^https://"
4252
+ }
4253
+ }
4254
+ },
3879
4255
  "Grants": {
3880
4256
  "type": "array",
3881
4257
  "description": "Required grants for the app in order to call APIs for the installing tenant",