@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.
- package/lib/app/readme.js +50 -8
- package/lib/commands/up-common.js +4 -0
- package/lib/external-system/generator.js +14 -3
- package/lib/schema/external-datasource.schema.json +1593 -1594
- package/lib/schema/external-system.schema.json +420 -420
- package/package.json +1 -1
- package/templates/applications/README.md.hbs +8 -8
- package/templates/applications/dataplane/env.template +3 -1
- package/templates/applications/dataplane/variables.yaml +1 -1
- package/templates/applications/keycloak/variables.yaml +1 -1
- package/templates/applications/miso-controller/env.template +14 -0
- package/templates/applications/miso-controller/variables.yaml +1 -1
- package/templates/external-system/external-system.json.hbs +20 -7
- package/templates/applications/dataplane/README.md +0 -219
- package/templates/applications/keycloak/README.md +0 -203
- package/templates/applications/miso-controller/README.md +0 -367
- package/templates/external-system/deploy.ps1.hbs +0 -34
- package/templates/external-system/deploy.sh.hbs +0 -34
|
@@ -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
|
+
}
|