@aifabrix/builder 2.39.1 → 2.39.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,420 +1,420 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://raw.githubusercontent.com/esystemsdev/aifabrix-builder/refs/heads/main/lib/schema/external-system.schema.json",
4
- "title": "AI Fabrix External System Configuration Schema",
5
- "description": "Schema for configuring an external system connected to the AI Fabrix Dataplane. This defines authentication, OpenAPI/MCP bindings, field mappings defaults, metadata handling and portal inputs.",
6
- "metadata": {
7
- "key": "external-system-schema",
8
- "name": "External System Configuration Schema",
9
- "description": "JSON schema for validating ExternalSystem configuration files",
10
- "version": "1.2.0",
11
- "type": "schema",
12
- "category": "integration",
13
- "author": "AI Fabrix Team",
14
- "createdAt": "2024-01-01T00:00:00Z",
15
- "updatedAt": "2025-12-01T00:00:00Z",
16
- "compatibility": {
17
- "minVersion": "1.0.0",
18
- "maxVersion": "2.0.0",
19
- "deprecated": false
20
- },
21
- "tags": [
22
- "schema",
23
- "external-system",
24
- "dataplane",
25
- "integration",
26
- "validation"
27
- ],
28
- "dependencies": [],
29
- "changelog": [
30
- {
31
- "version": "1.2.0",
32
- "date": "2025-02-01T00:00:00Z",
33
- "changes": [
34
- "Added generateMcpContract (boolean, default true): config-only control for MCP contract generation on publish",
35
- "Added generateOpenApiContract (boolean, default true): reserved for future use"
36
- ],
37
- "breaking": false
38
- },
39
- {
40
- "version": "1.1.0",
41
- "date": "2025-12-01T00:00:00Z",
42
- "changes": [
43
- "Added RBAC roles and permissions support",
44
- "RBAC roles/permissions are registered with miso-controller during deployment",
45
- "Roles support Azure AD group mapping via Groups property",
46
- "Permissions reference roles and are used for access control"
47
- ],
48
- "breaking": false
49
- },
50
- {
51
- "version": "1.0.0",
52
- "date": "2024-01-01T00:00:00Z",
53
- "changes": [
54
- "Initial schema for External Systems",
55
- "Added OpenAPI and MCP contract configuration",
56
- "Added authentication and environment variables",
57
- "Added portalInput for UI-driven onboarding",
58
- "Compatible with field-mappings.schema and security-model.schema"
59
- ],
60
- "breaking": false
61
- }
62
- ]
63
- },
64
- "type": "object",
65
- "required": [
66
- "key",
67
- "displayName",
68
- "description",
69
- "type",
70
- "authentication"
71
- ],
72
- "properties": {
73
- "key": {
74
- "type": "string",
75
- "description": "Unique external system identifier (cannot be changed after creation). Example: 'hubspot', 'salesforce', 'teams'.",
76
- "pattern": "^[a-z0-9-]+$",
77
- "minLength": 3,
78
- "maxLength": 40
79
- },
80
- "displayName": {
81
- "type": "string",
82
- "description": "Human-readable name for the external system",
83
- "minLength": 1,
84
- "maxLength": 100
85
- },
86
- "description": {
87
- "type": "string",
88
- "description": "Description of this external system integration",
89
- "minLength": 1,
90
- "maxLength": 500
91
- },
92
- "type": {
93
- "type": "string",
94
- "enum": [
95
- "openapi",
96
- "mcp",
97
- "custom"
98
- ],
99
- "description": "Integration type: OpenAPI-driven, MCP-driven, or custom Python connector."
100
- },
101
- "enabled": {
102
- "type": "boolean",
103
- "default": true
104
- },
105
- "authentication": {
106
- "type": "object",
107
- "description": "Authentication configuration for external system",
108
- "required": [
109
- "type"
110
- ],
111
- "properties": {
112
- "type": {
113
- "type": "string",
114
- "enum": [
115
- "oauth2",
116
- "apikey",
117
- "basic",
118
- "aad",
119
- "none"
120
- ],
121
- "description": "Authentication type"
122
- },
123
- "oauth2": {
124
- "type": "object",
125
- "description": "OAuth2 authentication configuration",
126
- "additionalProperties": true
127
- },
128
- "apikey": {
129
- "type": "object",
130
- "description": "API key authentication configuration",
131
- "additionalProperties": true
132
- },
133
- "basic": {
134
- "type": "object",
135
- "description": "Basic authentication configuration",
136
- "additionalProperties": true
137
- },
138
- "aad": {
139
- "type": "object",
140
- "description": "Azure AD authentication configuration",
141
- "additionalProperties": true
142
- }
143
- },
144
- "additionalProperties": true
145
- },
146
- "openapi": {
147
- "type": "object",
148
- "description": "OpenAPI integration configuration",
149
- "properties": {
150
- "documentKey": {
151
- "type": "string",
152
- "description": "Key of the OpenAPI document in the registry"
153
- },
154
- "specUrl": {
155
- "type": "string",
156
- "description": "URL to the OpenAPI specification",
157
- "pattern": "^(http|https)://.*$"
158
- }
159
- },
160
- "additionalProperties": true
161
- },
162
- "mcp": {
163
- "type": "object",
164
- "description": "Model Context Protocol integration configuration",
165
- "properties": {
166
- "serverUrl": {
167
- "type": "string",
168
- "description": "MCP server URL",
169
- "pattern": "^(http|https)://.*$"
170
- },
171
- "toolPrefix": {
172
- "type": "string",
173
- "description": "Prefix for MCP tool names",
174
- "pattern": "^[a-zA-Z0-9_-]+$"
175
- }
176
- },
177
- "additionalProperties": true
178
- },
179
- "dataSources": {
180
- "type": "array",
181
- "description": "List of data source keys belonging to this external system. Each must match external-datasource.schema.json.",
182
- "items": {
183
- "type": "string",
184
- "pattern": "^[a-z0-9-]+$"
185
- },
186
- "uniqueItems": true
187
- },
188
- "configuration": {
189
- "type": "array",
190
- "description": "External system configuration variables (same pattern as application-schema).",
191
- "items": {
192
- "type": "object",
193
- "required": [
194
- "name",
195
- "value",
196
- "location",
197
- "required"
198
- ],
199
- "properties": {
200
- "name": {
201
- "type": "string",
202
- "pattern": "^[A-Z_][A-Z0-9_]*$"
203
- },
204
- "value": {
205
- "type": "string",
206
- "description": "Literal value or parameter reference ({{parameter}})"
207
- },
208
- "location": {
209
- "type": "string",
210
- "enum": [
211
- "variable",
212
- "keyvault"
213
- ]
214
- },
215
- "required": {
216
- "type": "boolean"
217
- },
218
- "portalInput": {
219
- "type": "object",
220
- "required": [
221
- "field",
222
- "label"
223
- ],
224
- "properties": {
225
- "field": {
226
- "type": "string",
227
- "enum": [
228
- "password",
229
- "text",
230
- "textarea",
231
- "select",
232
- "json"
233
- ]
234
- },
235
- "label": {
236
- "type": "string"
237
- },
238
- "placeholder": {
239
- "type": "string"
240
- },
241
- "options": {
242
- "type": "array",
243
- "items": {
244
- "type": "string"
245
- }
246
- },
247
- "masked": {
248
- "type": "boolean"
249
- },
250
- "validation": {
251
- "type": "object",
252
- "properties": {
253
- "minLength": {
254
- "type": "integer"
255
- },
256
- "maxLength": {
257
- "type": "integer"
258
- },
259
- "pattern": {
260
- "type": "string"
261
- },
262
- "required": {
263
- "type": "boolean"
264
- }
265
- },
266
- "additionalProperties": false
267
- }
268
- },
269
- "additionalProperties": false
270
- }
271
- },
272
- "additionalProperties": false
273
- }
274
- },
275
- "tags": {
276
- "type": "array",
277
- "description": "Optional tags for search / filtering",
278
- "items": {
279
- "type": "string"
280
- }
281
- },
282
- "roles": {
283
- "type": "array",
284
- "description": "External system roles for Azure AD group mapping",
285
- "items": {
286
- "type": "object",
287
- "required": [
288
- "name",
289
- "value",
290
- "description"
291
- ],
292
- "properties": {
293
- "name": {
294
- "type": "string",
295
- "description": "Human-readable role name",
296
- "minLength": 1,
297
- "maxLength": 100
298
- },
299
- "value": {
300
- "type": "string",
301
- "description": "Role identifier (used in JWT and ACL)",
302
- "pattern": "^[a-z-]+$"
303
- },
304
- "description": {
305
- "type": "string",
306
- "description": "Role description",
307
- "minLength": 1,
308
- "maxLength": 500
309
- },
310
- "groups": {
311
- "type": "array",
312
- "description": "Azure AD groups mapped to this role",
313
- "items": {
314
- "type": "string",
315
- "minLength": 1,
316
- "maxLength": 100
317
- }
318
- }
319
- },
320
- "additionalProperties": false
321
- }
322
- },
323
- "permissions": {
324
- "type": "array",
325
- "description": "External system permissions with role mappings for access control",
326
- "items": {
327
- "type": "object",
328
- "required": [
329
- "name",
330
- "roles",
331
- "description"
332
- ],
333
- "properties": {
334
- "name": {
335
- "type": "string",
336
- "description": "Permission identifier (e.g., 'documentstore:read', 'flowise:dev:access')",
337
- "pattern": "^[a-z0-9-:]+$",
338
- "minLength": 1,
339
- "maxLength": 100
340
- },
341
- "roles": {
342
- "type": "array",
343
- "description": "Roles that have this permission",
344
- "items": {
345
- "type": "string",
346
- "pattern": "^[a-z-]+$",
347
- "minLength": 1,
348
- "maxLength": 50
349
- },
350
- "minItems": 1
351
- },
352
- "description": {
353
- "type": "string",
354
- "description": "Permission description",
355
- "minLength": 1,
356
- "maxLength": 500
357
- }
358
- },
359
- "additionalProperties": false
360
- }
361
- },
362
- "endpoints": {
363
- "type": "array",
364
- "description": "API endpoint configurations for this external system. Used for dynamic endpoint registration at application startup.",
365
- "items": {
366
- "type": "object",
367
- "required": [
368
- "type",
369
- "path"
370
- ],
371
- "properties": {
372
- "type": {
373
- "type": "string",
374
- "description": "Endpoint type identifier (e.g., 'commands', 'events', 'notifications')",
375
- "pattern": "^[a-z0-9-]+$"
376
- },
377
- "path": {
378
- "type": "string",
379
- "description": "URL path for this endpoint (e.g., '/commands', '/events')",
380
- "pattern": "^/[a-z0-9/-]*$"
381
- },
382
- "description": {
383
- "type": "string",
384
- "description": "Human-readable description of the endpoint"
385
- },
386
- "active": {
387
- "type": "boolean",
388
- "description": "Whether this endpoint should be registered (defaults to true)",
389
- "default": true
390
- },
391
- "router": {
392
- "type": "string",
393
- "description": "Custom router module path override (defaults to auto-discovery based on naming convention)"
394
- }
395
- },
396
- "additionalProperties": false
397
- }
398
- },
399
- "endpointsActive": {
400
- "type": "boolean",
401
- "description": "Master switch for all endpoints in this system. If false, no endpoints are registered regardless of individual endpoint active flags.",
402
- "default": true
403
- },
404
- "credentialIdOrKey": {
405
- "type": "string",
406
- "description": "Credential identifier (ID or key) to use for authenticating with this external system."
407
- },
408
- "generateMcpContract": {
409
- "type": "boolean",
410
- "description": "Whether to generate MCP contract on publish. Config only (no query parameter); default true when absent.",
411
- "default": true
412
- },
413
- "generateOpenApiContract": {
414
- "type": "boolean",
415
- "description": "Reserved: whether to generate or expose OpenAPI contract on publish. Not yet implemented.",
416
- "default": true
417
- }
418
- },
419
- "additionalProperties": false
420
- }
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/esystemsdev/aifabrix-builder/refs/heads/main/lib/schema/external-system.schema.json",
4
+ "title": "AI Fabrix External System Configuration Schema",
5
+ "description": "Schema for configuring an external system connected to the AI Fabrix Dataplane. This defines authentication, OpenAPI/MCP bindings, field mappings defaults, metadata handling and portal inputs.",
6
+ "metadata": {
7
+ "key": "external-system-schema",
8
+ "name": "External System Configuration Schema",
9
+ "description": "JSON schema for validating ExternalSystem configuration files",
10
+ "version": "1.2.0",
11
+ "type": "schema",
12
+ "category": "integration",
13
+ "author": "AI Fabrix Team",
14
+ "createdAt": "2024-01-01T00:00:00Z",
15
+ "updatedAt": "2025-12-01T00:00:00Z",
16
+ "compatibility": {
17
+ "minVersion": "1.0.0",
18
+ "maxVersion": "2.0.0",
19
+ "deprecated": false
20
+ },
21
+ "tags": [
22
+ "schema",
23
+ "external-system",
24
+ "dataplane",
25
+ "integration",
26
+ "validation"
27
+ ],
28
+ "dependencies": [],
29
+ "changelog": [
30
+ {
31
+ "version": "1.2.0",
32
+ "date": "2025-02-01T00:00:00Z",
33
+ "changes": [
34
+ "Added generateMcpContract (boolean, default true): config-only control for MCP contract generation on publish",
35
+ "Added generateOpenApiContract (boolean, default true): reserved for future use"
36
+ ],
37
+ "breaking": false
38
+ },
39
+ {
40
+ "version": "1.1.0",
41
+ "date": "2025-12-01T00:00:00Z",
42
+ "changes": [
43
+ "Added RBAC roles and permissions support",
44
+ "RBAC roles/permissions are registered with miso-controller during deployment",
45
+ "Roles support Azure AD group mapping via Groups property",
46
+ "Permissions reference roles and are used for access control"
47
+ ],
48
+ "breaking": false
49
+ },
50
+ {
51
+ "version": "1.0.0",
52
+ "date": "2024-01-01T00:00:00Z",
53
+ "changes": [
54
+ "Initial schema for External Systems",
55
+ "Added OpenAPI and MCP contract configuration",
56
+ "Added authentication and environment variables",
57
+ "Added portalInput for UI-driven onboarding",
58
+ "Compatible with field-mappings.schema and security-model.schema"
59
+ ],
60
+ "breaking": false
61
+ }
62
+ ]
63
+ },
64
+ "type": "object",
65
+ "required": [
66
+ "key",
67
+ "displayName",
68
+ "description",
69
+ "type",
70
+ "authentication"
71
+ ],
72
+ "properties": {
73
+ "key": {
74
+ "type": "string",
75
+ "description": "Unique external system identifier (cannot be changed after creation). Example: 'hubspot', 'salesforce', 'teams'.",
76
+ "pattern": "^[a-z0-9-]+$",
77
+ "minLength": 3,
78
+ "maxLength": 40
79
+ },
80
+ "displayName": {
81
+ "type": "string",
82
+ "description": "Human-readable name for the external system",
83
+ "minLength": 1,
84
+ "maxLength": 100
85
+ },
86
+ "description": {
87
+ "type": "string",
88
+ "description": "Description of this external system integration",
89
+ "minLength": 1,
90
+ "maxLength": 500
91
+ },
92
+ "type": {
93
+ "type": "string",
94
+ "enum": [
95
+ "openapi",
96
+ "mcp",
97
+ "custom"
98
+ ],
99
+ "description": "Integration type: OpenAPI-driven, MCP-driven, or custom Python connector."
100
+ },
101
+ "enabled": {
102
+ "type": "boolean",
103
+ "default": true
104
+ },
105
+ "authentication": {
106
+ "type": "object",
107
+ "description": "Authentication configuration for external system",
108
+ "required": [
109
+ "type"
110
+ ],
111
+ "properties": {
112
+ "type": {
113
+ "type": "string",
114
+ "enum": [
115
+ "oauth2",
116
+ "apikey",
117
+ "basic",
118
+ "aad",
119
+ "none"
120
+ ],
121
+ "description": "Authentication type"
122
+ },
123
+ "oauth2": {
124
+ "type": "object",
125
+ "description": "OAuth2 authentication configuration",
126
+ "additionalProperties": true
127
+ },
128
+ "apikey": {
129
+ "type": "object",
130
+ "description": "API key authentication configuration",
131
+ "additionalProperties": true
132
+ },
133
+ "basic": {
134
+ "type": "object",
135
+ "description": "Basic authentication configuration",
136
+ "additionalProperties": true
137
+ },
138
+ "aad": {
139
+ "type": "object",
140
+ "description": "Azure AD authentication configuration",
141
+ "additionalProperties": true
142
+ }
143
+ },
144
+ "additionalProperties": true
145
+ },
146
+ "openapi": {
147
+ "type": "object",
148
+ "description": "OpenAPI integration configuration",
149
+ "properties": {
150
+ "documentKey": {
151
+ "type": "string",
152
+ "description": "Key of the OpenAPI document in the registry"
153
+ },
154
+ "specUrl": {
155
+ "type": "string",
156
+ "description": "URL to the OpenAPI specification",
157
+ "pattern": "^(http|https)://.*$"
158
+ }
159
+ },
160
+ "additionalProperties": true
161
+ },
162
+ "mcp": {
163
+ "type": "object",
164
+ "description": "Model Context Protocol integration configuration",
165
+ "properties": {
166
+ "serverUrl": {
167
+ "type": "string",
168
+ "description": "MCP server URL",
169
+ "pattern": "^(http|https)://.*$"
170
+ },
171
+ "toolPrefix": {
172
+ "type": "string",
173
+ "description": "Prefix for MCP tool names",
174
+ "pattern": "^[a-zA-Z0-9_-]+$"
175
+ }
176
+ },
177
+ "additionalProperties": true
178
+ },
179
+ "dataSources": {
180
+ "type": "array",
181
+ "description": "List of data source keys belonging to this external system. Each must match external-datasource.schema.json.",
182
+ "items": {
183
+ "type": "string",
184
+ "pattern": "^[a-z0-9-]+$"
185
+ },
186
+ "uniqueItems": true
187
+ },
188
+ "configuration": {
189
+ "type": "array",
190
+ "description": "External system configuration variables (same pattern as application-schema).",
191
+ "items": {
192
+ "type": "object",
193
+ "required": [
194
+ "name",
195
+ "value",
196
+ "location",
197
+ "required"
198
+ ],
199
+ "properties": {
200
+ "name": {
201
+ "type": "string",
202
+ "pattern": "^[A-Z_][A-Z0-9_]*$"
203
+ },
204
+ "value": {
205
+ "type": "string",
206
+ "description": "Literal value or parameter reference ({{parameter}})"
207
+ },
208
+ "location": {
209
+ "type": "string",
210
+ "enum": [
211
+ "variable",
212
+ "keyvault"
213
+ ]
214
+ },
215
+ "required": {
216
+ "type": "boolean"
217
+ },
218
+ "portalInput": {
219
+ "type": "object",
220
+ "required": [
221
+ "field",
222
+ "label"
223
+ ],
224
+ "properties": {
225
+ "field": {
226
+ "type": "string",
227
+ "enum": [
228
+ "password",
229
+ "text",
230
+ "textarea",
231
+ "select",
232
+ "json"
233
+ ]
234
+ },
235
+ "label": {
236
+ "type": "string"
237
+ },
238
+ "placeholder": {
239
+ "type": "string"
240
+ },
241
+ "options": {
242
+ "type": "array",
243
+ "items": {
244
+ "type": "string"
245
+ }
246
+ },
247
+ "masked": {
248
+ "type": "boolean"
249
+ },
250
+ "validation": {
251
+ "type": "object",
252
+ "properties": {
253
+ "minLength": {
254
+ "type": "integer"
255
+ },
256
+ "maxLength": {
257
+ "type": "integer"
258
+ },
259
+ "pattern": {
260
+ "type": "string"
261
+ },
262
+ "required": {
263
+ "type": "boolean"
264
+ }
265
+ },
266
+ "additionalProperties": false
267
+ }
268
+ },
269
+ "additionalProperties": false
270
+ }
271
+ },
272
+ "additionalProperties": false
273
+ }
274
+ },
275
+ "tags": {
276
+ "type": "array",
277
+ "description": "Optional tags for search / filtering",
278
+ "items": {
279
+ "type": "string"
280
+ }
281
+ },
282
+ "roles": {
283
+ "type": "array",
284
+ "description": "External system roles for Azure AD group mapping",
285
+ "items": {
286
+ "type": "object",
287
+ "required": [
288
+ "name",
289
+ "value",
290
+ "description"
291
+ ],
292
+ "properties": {
293
+ "name": {
294
+ "type": "string",
295
+ "description": "Human-readable role name",
296
+ "minLength": 1,
297
+ "maxLength": 100
298
+ },
299
+ "value": {
300
+ "type": "string",
301
+ "description": "Role identifier (used in JWT and ACL)",
302
+ "pattern": "^[a-z-]+$"
303
+ },
304
+ "description": {
305
+ "type": "string",
306
+ "description": "Role description",
307
+ "minLength": 1,
308
+ "maxLength": 500
309
+ },
310
+ "groups": {
311
+ "type": "array",
312
+ "description": "Azure AD groups mapped to this role",
313
+ "items": {
314
+ "type": "string",
315
+ "minLength": 1,
316
+ "maxLength": 100
317
+ }
318
+ }
319
+ },
320
+ "additionalProperties": false
321
+ }
322
+ },
323
+ "permissions": {
324
+ "type": "array",
325
+ "description": "External system permissions with role mappings for access control",
326
+ "items": {
327
+ "type": "object",
328
+ "required": [
329
+ "name",
330
+ "roles",
331
+ "description"
332
+ ],
333
+ "properties": {
334
+ "name": {
335
+ "type": "string",
336
+ "description": "Permission identifier (e.g., 'documentstore:read', 'flowise:dev:access')",
337
+ "pattern": "^[a-z0-9-:]+$",
338
+ "minLength": 1,
339
+ "maxLength": 100
340
+ },
341
+ "roles": {
342
+ "type": "array",
343
+ "description": "Roles that have this permission",
344
+ "items": {
345
+ "type": "string",
346
+ "pattern": "^[a-z-]+$",
347
+ "minLength": 1,
348
+ "maxLength": 50
349
+ },
350
+ "minItems": 1
351
+ },
352
+ "description": {
353
+ "type": "string",
354
+ "description": "Permission description",
355
+ "minLength": 1,
356
+ "maxLength": 500
357
+ }
358
+ },
359
+ "additionalProperties": false
360
+ }
361
+ },
362
+ "endpoints": {
363
+ "type": "array",
364
+ "description": "API endpoint configurations for this external system. Used for dynamic endpoint registration at application startup.",
365
+ "items": {
366
+ "type": "object",
367
+ "required": [
368
+ "type",
369
+ "path"
370
+ ],
371
+ "properties": {
372
+ "type": {
373
+ "type": "string",
374
+ "description": "Endpoint type identifier (e.g., 'commands', 'events', 'notifications')",
375
+ "pattern": "^[a-z0-9-]+$"
376
+ },
377
+ "path": {
378
+ "type": "string",
379
+ "description": "URL path for this endpoint (e.g., '/commands', '/events')",
380
+ "pattern": "^/[a-z0-9/-]*$"
381
+ },
382
+ "description": {
383
+ "type": "string",
384
+ "description": "Human-readable description of the endpoint"
385
+ },
386
+ "active": {
387
+ "type": "boolean",
388
+ "description": "Whether this endpoint should be registered (defaults to true)",
389
+ "default": true
390
+ },
391
+ "router": {
392
+ "type": "string",
393
+ "description": "Custom router module path override (defaults to auto-discovery based on naming convention)"
394
+ }
395
+ },
396
+ "additionalProperties": false
397
+ }
398
+ },
399
+ "endpointsActive": {
400
+ "type": "boolean",
401
+ "description": "Master switch for all endpoints in this system. If false, no endpoints are registered regardless of individual endpoint active flags.",
402
+ "default": true
403
+ },
404
+ "credentialIdOrKey": {
405
+ "type": "string",
406
+ "description": "Credential identifier (ID or key) to use for authenticating with this external system."
407
+ },
408
+ "generateMcpContract": {
409
+ "type": "boolean",
410
+ "description": "Whether to generate MCP contract on publish. Config only (no query parameter); default true when absent.",
411
+ "default": true
412
+ },
413
+ "generateOpenApiContract": {
414
+ "type": "boolean",
415
+ "description": "Reserved: whether to generate or expose OpenAPI contract on publish. Not yet implemented.",
416
+ "default": true
417
+ }
418
+ },
419
+ "additionalProperties": false
420
+ }