@mitralab.io/sdk-core 0.1.0 → 0.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2563 @@
1
+ {
2
+ "contract": "SDK-PARITY-001",
3
+ "version": "0.2.0-beta.0",
4
+ "description": "Canonical semantic and HTTP contract fixtures for the Mitra runtime SDKs.",
5
+ "sources": {
6
+ "mcp": {
7
+ "repository": "mitralab-dev/mitra-mcp-server",
8
+ "ref": "origin/alpha",
9
+ "commit": "4034ae9086d7599ff1767af0845803f616132b9d",
10
+ "paths": [
11
+ "src/main/java/io/mitralab/mcp/tools/datamanager/DataManagerRecordTools.java",
12
+ "src/main/java/io/mitralab/mcp/tools/datamanager/DataManagerCustomQueryTools.java",
13
+ "src/main/java/io/mitralab/mcp/tools/functions/FunctionTools.java",
14
+ "src/main/java/io/mitralab/mcp/tools/iam/IamTools.java",
15
+ "src/main/java/io/mitralab/mcp/tools/integration/IntegrationProxyTools.java",
16
+ "src/main/java/io/mitralab/mcp/tools/integration/IntegrationResourceTools.java"
17
+ ]
18
+ },
19
+ "dataManagerAlpha": {
20
+ "repository": "mitralab-dev/mitra-data-manager",
21
+ "ref": "origin/alpha",
22
+ "commit": "50dac9514c6b79b0da34280955e4afeaa24f9f84",
23
+ "request": "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/CustomQueryExecuteRequest.java",
24
+ "controller": "api/src/main/java/io/mitralab/datamanager/infrastructure/api/CustomQueryController.java",
25
+ "response": "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/QueryExecuteResponse.java",
26
+ "errorHandler": "api/src/main/java/io/mitralab/datamanager/infrastructure/api/exception/GlobalExceptionHandler.java",
27
+ "controllerTest": "api/src/test/java/io/mitralab/datamanager/api/CustomQueryControllerTest.java"
28
+ },
29
+ "dataManagerBuilder": {
30
+ "repository": "mitralab-dev/mitra-data-manager",
31
+ "ref": "origin/alpha",
32
+ "commit": "50dac9514c6b79b0da34280955e4afeaa24f9f84",
33
+ "paths": [
34
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/SqlBatchController.java",
35
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/BatchExecuteResponse.java",
36
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/BatchItemResponse.java",
37
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/DdlBatchStatementRequest.java",
38
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/DmlBatchStatementRequest.java",
39
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/SchemaController.java",
40
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/DataSourceController.java",
41
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/DataSourceBulkResponse.java",
42
+ "api/src/main/java/io/mitralab/datamanager/infrastructure/api/dto/DataSourceBulkUpdateItemRequest.java"
43
+ ]
44
+ },
45
+ "functionsBuilder": {
46
+ "repository": "mitralab-dev/mitra-functions",
47
+ "ref": "origin/alpha",
48
+ "commit": "d9921f620afff62ea8a047d2f301b41c725b35cb",
49
+ "paths": [
50
+ "src/main/java/io/mitralab/functions/infrastructure/api/FunctionController.java",
51
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionCreateRequest.java",
52
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionPatchRequest.java",
53
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionResponse.java",
54
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionShortResponse.java",
55
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionBulkCreateRequest.java",
56
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionBulkUpdateRequest.java",
57
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionBulkPatchRequest.java",
58
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionBulkDeleteRequest.java",
59
+ "src/main/java/io/mitralab/functions/infrastructure/api/dto/FunctionBulkDeleteResponse.java"
60
+ ]
61
+ },
62
+ "integrationBuilder": {
63
+ "repository": "mitralab-dev/mitra-integration",
64
+ "ref": "origin/alpha",
65
+ "commit": "cfd4b1ce6e36c07b88de7e67e0fa3b9adb9f158b",
66
+ "paths": [
67
+ "src/main/java/io/mitralab/integration/infrastructure/api/TemplateConfigController.java",
68
+ "src/main/java/io/mitralab/integration/infrastructure/api/dto/BulkCreateTemplateConfigsRequest.java",
69
+ "src/main/java/io/mitralab/integration/infrastructure/api/dto/BulkUpdateTemplateConfigsRequest.java",
70
+ "src/main/java/io/mitralab/integration/infrastructure/api/dto/BulkDeleteTemplateConfigsRequest.java",
71
+ "src/main/java/io/mitralab/integration/infrastructure/api/dto/TemplateConfigBulkResponse.java",
72
+ "src/main/java/io/mitralab/integration/infrastructure/api/dto/TestConnectionResponse.java"
73
+ ]
74
+ },
75
+ "iamBuilder": {
76
+ "repository": "mitralab-dev/mitra-iam",
77
+ "ref": "origin/alpha",
78
+ "commit": "6337ced228bfd0c2244a23a09142a34ac7e87aad",
79
+ "paths": [
80
+ "src/main/java/io/mitralab/iam/domain/entity/ClusterType.java",
81
+ "src/main/java/io/mitralab/iam/infrastructure/api/AuthController.java",
82
+ "src/main/java/io/mitralab/iam/infrastructure/api/MemberController.java",
83
+ "src/main/java/io/mitralab/iam/infrastructure/api/dto/CurrentUserResponse.java",
84
+ "src/main/java/io/mitralab/iam/infrastructure/api/dto/TenantResponse.java",
85
+ "src/main/java/io/mitralab/iam/infrastructure/api/dto/EffectiveAppUserResponse.java"
86
+ ]
87
+ },
88
+ "mcpBuilder": {
89
+ "repository": "mitralab-dev/mitra-mcp-server",
90
+ "ref": "origin/alpha",
91
+ "commit": "4034ae9086d7599ff1767af0845803f616132b9d",
92
+ "paths": [
93
+ "src/main/java/io/mitralab/mcp/tools/datamanager/DataManagerQueryTools.java",
94
+ "src/main/java/io/mitralab/mcp/tools/datamanager/DataManagerSchemaTools.java",
95
+ "src/main/java/io/mitralab/mcp/tools/datamanager/DataManagerDataSourceTools.java",
96
+ "src/main/java/io/mitralab/mcp/tools/functions/FunctionTools.java",
97
+ "src/main/java/io/mitralab/mcp/tools/integration/IntegrationProxyTools.java"
98
+ ]
99
+ }
100
+ },
101
+ "matrix": [
102
+ {
103
+ "operation": "auth.me",
104
+ "mcpTool": "getMe",
105
+ "javascript": "auth.me()",
106
+ "python": "auth.me()",
107
+ "endpoint": "GET /iam/api/v1/auth/me",
108
+ "mcpTransportParity": "exact"
109
+ },
110
+ {
111
+ "operation": "entities.list",
112
+ "mcpTool": "listRecords",
113
+ "javascript": "entities.getTable(table).list(options)",
114
+ "python": "entities.table(table).list(**options)",
115
+ "endpoint": "GET /data-manager/api/v1/tables/{table}/records",
116
+ "mcpTransportParity": "semantic-only"
117
+ },
118
+ {
119
+ "operation": "entities.filter",
120
+ "mcpTool": "listRecords",
121
+ "javascript": "entities.getTable(table).filter(query, sort, limit, skip, fields)",
122
+ "python": "entities.table(table).filter(query, sort=sort, limit=limit, skip=skip, fields=fields)",
123
+ "endpoint": "GET /data-manager/api/v1/tables/{table}/records",
124
+ "mcpTransportParity": "semantic-only"
125
+ },
126
+ {
127
+ "operation": "entities.get",
128
+ "mcpTool": "getRecord",
129
+ "javascript": "entities.getTable(table).get(id)",
130
+ "python": "entities.table(table).get(id)",
131
+ "endpoint": "GET /data-manager/api/v1/tables/{table}/records/{id}",
132
+ "mcpTransportParity": "semantic-only"
133
+ },
134
+ {
135
+ "operation": "entities.create",
136
+ "mcpTool": "createRecord",
137
+ "javascript": "entities.getTable(table).create(data)",
138
+ "python": "entities.table(table).create(data)",
139
+ "endpoint": "POST /data-manager/api/v1/tables/{table}/records",
140
+ "mcpTransportParity": "semantic-only"
141
+ },
142
+ {
143
+ "operation": "entities.bulkCreate",
144
+ "mcpTool": "bulkCreateRecords",
145
+ "javascript": "entities.getTable(table).bulkCreate(data)",
146
+ "python": "entities.table(table).bulk_create(data)",
147
+ "endpoint": "POST /data-manager/api/v1/tables/{table}/records/bulk",
148
+ "mcpTransportParity": "semantic-only"
149
+ },
150
+ {
151
+ "operation": "entities.update",
152
+ "mcpTool": "updateRecord",
153
+ "javascript": "entities.getTable(table).update(id, data)",
154
+ "python": "entities.table(table).update(id, data)",
155
+ "endpoint": "PUT /data-manager/api/v1/tables/{table}/records/{id}",
156
+ "mcpTransportParity": "semantic-only"
157
+ },
158
+ {
159
+ "operation": "entities.delete",
160
+ "mcpTool": "deleteRecord",
161
+ "javascript": "entities.getTable(table).delete(id)",
162
+ "python": "entities.table(table).delete(id)",
163
+ "endpoint": "DELETE /data-manager/api/v1/tables/{table}/records/{id}",
164
+ "mcpTransportParity": "semantic-only"
165
+ },
166
+ {
167
+ "operation": "entities.deleteMany",
168
+ "mcpTool": "deleteManyRecords",
169
+ "javascript": "entities.getTable(table).deleteMany(query)",
170
+ "python": "entities.table(table).delete_many(query)",
171
+ "endpoint": "DELETE /data-manager/api/v1/tables/{table}/records",
172
+ "mcpTransportParity": "semantic-only"
173
+ },
174
+ {
175
+ "operation": "queries.execute",
176
+ "mcpTool": "executeCustomQuery",
177
+ "javascript": "queries.execute(id, parameters)",
178
+ "python": "queries.execute(id, parameters)",
179
+ "endpoint": "POST /data-manager/api/v1/custom-queries/{id}/execute",
180
+ "mcpTransportParity": "exact"
181
+ },
182
+ {
183
+ "operation": "functions.execute",
184
+ "mcpTool": "executeFunction",
185
+ "javascript": "functions.execute(id, input)",
186
+ "python": "functions.execute(id, input)",
187
+ "endpoint": "POST /functions/api/v1/functions/{id}/execute",
188
+ "mcpTransportParity": "exact"
189
+ },
190
+ {
191
+ "operation": "functions.executeAsync",
192
+ "mcpTool": null,
193
+ "javascript": "functions.executeAsync(id, input)",
194
+ "python": "functions.execute_async(id, input)",
195
+ "endpoint": "POST /functions/api/v1/functions/{id}/execute",
196
+ "mcpTransportParity": "sdk-only"
197
+ },
198
+ {
199
+ "operation": "functions.getExecution",
200
+ "mcpTool": "getExecution",
201
+ "javascript": "functions.getExecution(id)",
202
+ "python": "functions.get_execution(id)",
203
+ "endpoint": "GET /functions/api/v1/executions/{id}",
204
+ "mcpTransportParity": "semantic-only"
205
+ },
206
+ {
207
+ "operation": "functions.cancelExecution",
208
+ "mcpTool": null,
209
+ "javascript": "functions.cancelExecution(id)",
210
+ "python": "functions.cancel_execution(id)",
211
+ "endpoint": "POST /functions/api/v1/executions/{id}/cancel",
212
+ "mcpTransportParity": "sdk-only"
213
+ },
214
+ {
215
+ "operation": "integration.execute",
216
+ "mcpTool": "executeIntegrationTemplateConfig",
217
+ "javascript": "integration.execute(configId, request)",
218
+ "python": "integration.execute(config_id, request)",
219
+ "endpoint": "POST /integration/api/v1/proxy/template-configs/{id}/execute",
220
+ "mcpTransportParity": "semantic-only"
221
+ },
222
+ {
223
+ "operation": "integration.executeResource",
224
+ "mcpTool": "executeIntegrationResource",
225
+ "javascript": "integration.executeResource(resourceId, parameters)",
226
+ "python": "integration.execute_resource(resource_id, parameters)",
227
+ "endpoint": "POST /integration/api/v1/proxy/resources/{id}/execute",
228
+ "mcpTransportParity": "exact"
229
+ },
230
+ {
231
+ "operation": "sql.executeDdl",
232
+ "mcpTool": "executeDdlBatch",
233
+ "javascript": "sql.executeDdl(statements)",
234
+ "python": "sql.execute_ddl(statements)",
235
+ "endpoint": "POST /data-manager/api/v1/sql/ddl/execute",
236
+ "mcpTransportParity": "exact"
237
+ },
238
+ {
239
+ "operation": "sql.executeDml",
240
+ "mcpTool": "executeDmlBatch",
241
+ "javascript": "sql.executeDml(statements)",
242
+ "python": "sql.execute_dml(statements)",
243
+ "endpoint": "POST /data-manager/api/v1/sql/dml/execute",
244
+ "mcpTransportParity": "exact"
245
+ },
246
+ {
247
+ "operation": "sql.listTables",
248
+ "mcpTool": "listTables",
249
+ "javascript": "sql.listTables(options)",
250
+ "python": "sql.list_tables(**options)",
251
+ "endpoint": "GET /data-manager/api/v1/tables",
252
+ "mcpTransportParity": "semantic-only"
253
+ },
254
+ {
255
+ "operation": "dataSources.bulkCreate",
256
+ "mcpTool": "bulkCreateDataSources",
257
+ "javascript": "dataSources.bulkCreate(dataSources)",
258
+ "python": "data_sources.bulk_create(data_sources)",
259
+ "endpoint": "POST /data-manager/api/v1/data-sources",
260
+ "mcpTransportParity": "semantic-only"
261
+ },
262
+ {
263
+ "operation": "dataSources.bulkUpdate",
264
+ "mcpTool": "bulkUpdateDataSources",
265
+ "javascript": "dataSources.bulkUpdate(dataSources)",
266
+ "python": "data_sources.bulk_update(data_sources)",
267
+ "endpoint": "PUT /data-manager/api/v1/data-sources/{id}",
268
+ "mcpTransportParity": "semantic-only"
269
+ },
270
+ {
271
+ "operation": "dataSources.bulkDelete",
272
+ "mcpTool": "bulkDeleteDataSources",
273
+ "javascript": "dataSources.bulkDelete(dataSourceIds)",
274
+ "python": "data_sources.bulk_delete(data_source_ids)",
275
+ "endpoint": "DELETE /data-manager/api/v1/data-sources/{id}",
276
+ "mcpTransportParity": "semantic-only"
277
+ },
278
+ {
279
+ "operation": "functionsAdmin.bulkCreate",
280
+ "mcpTool": "bulkCreateFunctions",
281
+ "javascript": "functionsAdmin.bulkCreate(functions)",
282
+ "python": "functions_admin.bulk_create(functions)",
283
+ "endpoint": "POST /functions/api/v1/functions/bulk",
284
+ "mcpTransportParity": "exact"
285
+ },
286
+ {
287
+ "operation": "functionsAdmin.bulkUpdate",
288
+ "mcpTool": null,
289
+ "javascript": "functionsAdmin.bulkUpdate(functions)",
290
+ "python": "functions_admin.bulk_update(functions)",
291
+ "endpoint": "PUT /functions/api/v1/functions/bulk",
292
+ "mcpTransportParity": "sdk-only"
293
+ },
294
+ {
295
+ "operation": "functionsAdmin.bulkPatch",
296
+ "mcpTool": "bulkUpdateFunctions",
297
+ "javascript": "functionsAdmin.bulkPatch(functions)",
298
+ "python": "functions_admin.bulk_patch(functions)",
299
+ "endpoint": "PATCH /functions/api/v1/functions/bulk",
300
+ "mcpTransportParity": "exact"
301
+ },
302
+ {
303
+ "operation": "functionsAdmin.bulkDelete",
304
+ "mcpTool": "bulkDeleteFunctions",
305
+ "javascript": "functionsAdmin.bulkDelete(selector)",
306
+ "python": "functions_admin.bulk_delete(selector)",
307
+ "endpoint": "POST /functions/api/v1/functions/bulk-delete",
308
+ "mcpTransportParity": "exact"
309
+ },
310
+ {
311
+ "operation": "integrationAdmin.bulkCreate",
312
+ "mcpTool": "bulkCreateIntegrationConfigs",
313
+ "javascript": "integrationAdmin.bulkCreate(configs)",
314
+ "python": "integration_admin.bulk_create(configs)",
315
+ "endpoint": "POST /integration/api/v1/template-configs/bulk",
316
+ "mcpTransportParity": "exact"
317
+ },
318
+ {
319
+ "operation": "integrationAdmin.bulkUpdate",
320
+ "mcpTool": "bulkUpdateIntegrationConfigs",
321
+ "javascript": "integrationAdmin.bulkUpdate(configs)",
322
+ "python": "integration_admin.bulk_update(configs)",
323
+ "endpoint": "PUT /integration/api/v1/template-configs/bulk",
324
+ "mcpTransportParity": "exact"
325
+ },
326
+ {
327
+ "operation": "integrationAdmin.bulkDelete",
328
+ "mcpTool": "bulkDeleteIntegrationConfigs",
329
+ "javascript": "integrationAdmin.bulkDelete(configIds)",
330
+ "python": "integration_admin.bulk_delete(config_ids)",
331
+ "endpoint": "POST /integration/api/v1/template-configs/bulk-delete",
332
+ "mcpTransportParity": "exact"
333
+ },
334
+ {
335
+ "operation": "integrationAdmin.testCredentials",
336
+ "mcpTool": "testIntegrationCredentials",
337
+ "javascript": "integrationAdmin.testCredentials(request)",
338
+ "python": "integration_admin.test_credentials(request)",
339
+ "endpoint": "POST /integration/api/v1/template-configs/test",
340
+ "mcpTransportParity": "exact"
341
+ },
342
+ {
343
+ "operation": "integrationAdmin.testConfig",
344
+ "mcpTool": "testIntegrationConfig",
345
+ "javascript": "integrationAdmin.testConfig(configId)",
346
+ "python": "integration_admin.test_config(config_id)",
347
+ "endpoint": "POST /integration/api/v1/template-configs/{id}/test",
348
+ "mcpTransportParity": "exact"
349
+ },
350
+ {
351
+ "operation": "integrationAdmin.list",
352
+ "mcpTool": null,
353
+ "javascript": "integrationAdmin.list(options)",
354
+ "python": "integration_admin.list(**options)",
355
+ "endpoint": "GET /integration/api/v1/template-configs",
356
+ "mcpTransportParity": "sdk-only"
357
+ },
358
+ {
359
+ "operation": "members.list",
360
+ "mcpTool": null,
361
+ "javascript": "members.list()",
362
+ "python": "members.list()",
363
+ "endpoint": "GET /iam/api/v1/members/current-app",
364
+ "mcpTransportParity": "sdk-only"
365
+ }
366
+ ],
367
+ "customQueryExecution": {
368
+ "sdkTarget": "alpha",
369
+ "requestBody": {
370
+ "parameters": {
371
+ "status": "active"
372
+ }
373
+ },
374
+ "dataSourceResolution": "authenticated-app",
375
+ "declaresDataSourceId": false,
376
+ "adapterRequirement": "Use the app-scoped JWT so Data Manager resolves the current app Data Source."
377
+ },
378
+ "consumerRequirements": {
379
+ "@mitralab.io/sdk-core": {
380
+ "successCases": "all",
381
+ "responseValidationCases": "all"
382
+ },
383
+ "@mitralab.io/functions-sdk": {
384
+ "httpAdapterCases": "all"
385
+ },
386
+ "mitra-functions-sdk": {
387
+ "successCases": "all",
388
+ "responseValidationCases": "all",
389
+ "httpAdapterCases": "all"
390
+ }
391
+ },
392
+ "cases": [
393
+ {
394
+ "id": "auth.me.success",
395
+ "kind": "success",
396
+ "operation": "auth.me",
397
+ "input": {},
398
+ "request": {
399
+ "service": "auth",
400
+ "method": "GET",
401
+ "path": "/api/v1/auth/me"
402
+ },
403
+ "response": {
404
+ "status": 200,
405
+ "body": {
406
+ "id": "user-1",
407
+ "tenant": {
408
+ "id": "tenant-1",
409
+ "shortId": "AAAAAAAAAAAAAAAAAAAAEA",
410
+ "legacyId": null,
411
+ "slug": "tenant-one",
412
+ "clusterType": "SHARED",
413
+ "name": "Tenant One",
414
+ "description": null,
415
+ "hexColor": null,
416
+ "icon": null,
417
+ "infraStatus": "ACTIVE",
418
+ "active": true
419
+ },
420
+ "name": "Test User",
421
+ "email": "user@example.com",
422
+ "imageUrl": null,
423
+ "planId": "plan-1",
424
+ "onboardingCompleted": false,
425
+ "language": "pt-BR"
426
+ }
427
+ },
428
+ "expectedResult": {
429
+ "id": "user-1",
430
+ "tenant": {
431
+ "id": "tenant-1",
432
+ "shortId": "AAAAAAAAAAAAAAAAAAAAEA",
433
+ "legacyId": null,
434
+ "slug": "tenant-one",
435
+ "clusterType": "SHARED",
436
+ "name": "Tenant One",
437
+ "description": null,
438
+ "hexColor": null,
439
+ "icon": null,
440
+ "infraStatus": "ACTIVE",
441
+ "active": true
442
+ },
443
+ "name": "Test User",
444
+ "email": "user@example.com",
445
+ "imageUrl": null,
446
+ "planId": "plan-1",
447
+ "onboardingCompleted": false,
448
+ "language": "pt-BR"
449
+ }
450
+ },
451
+ {
452
+ "id": "entities.list.success",
453
+ "kind": "success",
454
+ "operation": "entities.list",
455
+ "input": {
456
+ "table": "Order items",
457
+ "options": {
458
+ "sort": "-created_at",
459
+ "limit": 2,
460
+ "skip": 4,
461
+ "fields": ["id", "status"]
462
+ }
463
+ },
464
+ "request": {
465
+ "service": "dataManager",
466
+ "method": "GET",
467
+ "path": "/api/v1/tables/Order%20items/records",
468
+ "params": {
469
+ "sort": "-created_at",
470
+ "limit": 2,
471
+ "skip": 4,
472
+ "fields": "id,status"
473
+ }
474
+ },
475
+ "response": {
476
+ "status": 200,
477
+ "body": {
478
+ "data": [
479
+ {
480
+ "id": "order-5",
481
+ "status": "active"
482
+ },
483
+ {
484
+ "id": "order-6",
485
+ "status": "pending"
486
+ }
487
+ ],
488
+ "limit": 2,
489
+ "skip": 4,
490
+ "total": 8,
491
+ "hasMore": true
492
+ }
493
+ },
494
+ "expectedResult": {
495
+ "data": [
496
+ {
497
+ "id": "order-5",
498
+ "status": "active"
499
+ },
500
+ {
501
+ "id": "order-6",
502
+ "status": "pending"
503
+ }
504
+ ],
505
+ "limit": 2,
506
+ "skip": 4,
507
+ "total": 8,
508
+ "hasMore": true
509
+ }
510
+ },
511
+ {
512
+ "id": "entities.filter.success",
513
+ "kind": "success",
514
+ "operation": "entities.filter",
515
+ "input": {
516
+ "table": "Orders",
517
+ "query": {
518
+ "status": "active"
519
+ },
520
+ "sort": "name",
521
+ "limit": 5,
522
+ "skip": 0,
523
+ "fields": ["id", "status"]
524
+ },
525
+ "request": {
526
+ "service": "dataManager",
527
+ "method": "GET",
528
+ "path": "/api/v1/tables/Orders/records",
529
+ "params": {
530
+ "q": "{\"status\":\"active\"}",
531
+ "sort": "name",
532
+ "limit": 5,
533
+ "skip": 0,
534
+ "fields": "id,status"
535
+ }
536
+ },
537
+ "response": {
538
+ "status": 200,
539
+ "body": {
540
+ "data": [
541
+ {
542
+ "id": "order-1",
543
+ "status": "active"
544
+ }
545
+ ],
546
+ "limit": 5,
547
+ "skip": 0,
548
+ "total": 1,
549
+ "hasMore": false
550
+ }
551
+ },
552
+ "expectedResult": {
553
+ "data": [
554
+ {
555
+ "id": "order-1",
556
+ "status": "active"
557
+ }
558
+ ],
559
+ "limit": 5,
560
+ "skip": 0,
561
+ "total": 1,
562
+ "hasMore": false
563
+ }
564
+ },
565
+ {
566
+ "id": "entities.get.success",
567
+ "kind": "success",
568
+ "operation": "entities.get",
569
+ "input": {
570
+ "table": "Orders",
571
+ "id": "order/1"
572
+ },
573
+ "request": {
574
+ "service": "dataManager",
575
+ "method": "GET",
576
+ "path": "/api/v1/tables/Orders/records/order%2F1"
577
+ },
578
+ "response": {
579
+ "status": 200,
580
+ "body": {
581
+ "id": "order/1",
582
+ "status": "active"
583
+ }
584
+ },
585
+ "expectedResult": {
586
+ "id": "order/1",
587
+ "status": "active"
588
+ }
589
+ },
590
+ {
591
+ "id": "entities.create.success",
592
+ "kind": "success",
593
+ "operation": "entities.create",
594
+ "input": {
595
+ "table": "Orders",
596
+ "data": {
597
+ "status": "draft"
598
+ }
599
+ },
600
+ "request": {
601
+ "service": "dataManager",
602
+ "method": "POST",
603
+ "path": "/api/v1/tables/Orders/records",
604
+ "body": {
605
+ "status": "draft"
606
+ }
607
+ },
608
+ "response": {
609
+ "status": 201,
610
+ "body": {
611
+ "id": "order-2",
612
+ "status": "draft"
613
+ }
614
+ },
615
+ "expectedResult": {
616
+ "id": "order-2",
617
+ "status": "draft"
618
+ }
619
+ },
620
+ {
621
+ "id": "entities.bulk-create.success",
622
+ "kind": "success",
623
+ "operation": "entities.bulkCreate",
624
+ "input": {
625
+ "table": "Orders",
626
+ "data": [
627
+ {
628
+ "status": "draft"
629
+ },
630
+ {
631
+ "status": "active"
632
+ }
633
+ ]
634
+ },
635
+ "request": {
636
+ "service": "dataManager",
637
+ "method": "POST",
638
+ "path": "/api/v1/tables/Orders/records/bulk",
639
+ "body": [
640
+ {
641
+ "status": "draft"
642
+ },
643
+ {
644
+ "status": "active"
645
+ }
646
+ ]
647
+ },
648
+ "response": {
649
+ "status": 201,
650
+ "body": [
651
+ {
652
+ "id": "order-3",
653
+ "status": "draft"
654
+ },
655
+ {
656
+ "id": "order-4",
657
+ "status": "active"
658
+ }
659
+ ]
660
+ },
661
+ "expectedResult": [
662
+ {
663
+ "id": "order-3",
664
+ "status": "draft"
665
+ },
666
+ {
667
+ "id": "order-4",
668
+ "status": "active"
669
+ }
670
+ ]
671
+ },
672
+ {
673
+ "id": "entities.update.success",
674
+ "kind": "success",
675
+ "operation": "entities.update",
676
+ "input": {
677
+ "table": "Orders",
678
+ "id": "order-2",
679
+ "data": {
680
+ "status": "active"
681
+ }
682
+ },
683
+ "request": {
684
+ "service": "dataManager",
685
+ "method": "PUT",
686
+ "path": "/api/v1/tables/Orders/records/order-2",
687
+ "body": {
688
+ "status": "active"
689
+ }
690
+ },
691
+ "response": {
692
+ "status": 200,
693
+ "body": {
694
+ "id": "order-2",
695
+ "status": "active"
696
+ }
697
+ },
698
+ "expectedResult": {
699
+ "id": "order-2",
700
+ "status": "active"
701
+ }
702
+ },
703
+ {
704
+ "id": "entities.delete.success",
705
+ "kind": "success",
706
+ "operation": "entities.delete",
707
+ "input": {
708
+ "table": "Orders",
709
+ "id": "order-2"
710
+ },
711
+ "request": {
712
+ "service": "dataManager",
713
+ "method": "DELETE",
714
+ "path": "/api/v1/tables/Orders/records/order-2"
715
+ },
716
+ "response": {
717
+ "status": 204,
718
+ "empty": true
719
+ }
720
+ },
721
+ {
722
+ "id": "entities.delete-many.success",
723
+ "kind": "success",
724
+ "operation": "entities.deleteMany",
725
+ "input": {
726
+ "table": "Orders",
727
+ "query": {
728
+ "status": "archived"
729
+ }
730
+ },
731
+ "request": {
732
+ "service": "dataManager",
733
+ "method": "DELETE",
734
+ "path": "/api/v1/tables/Orders/records",
735
+ "params": {
736
+ "q": "{\"status\":\"archived\"}"
737
+ }
738
+ },
739
+ "response": {
740
+ "status": 200,
741
+ "body": {
742
+ "deleted": 2
743
+ }
744
+ },
745
+ "expectedResult": {
746
+ "deleted": 2
747
+ }
748
+ },
749
+ {
750
+ "id": "queries.execute.success",
751
+ "kind": "success",
752
+ "operation": "queries.execute",
753
+ "input": {
754
+ "id": "00000000-0000-4000-8000-000000000101",
755
+ "parameters": {
756
+ "status": "active"
757
+ }
758
+ },
759
+ "request": {
760
+ "service": "dataManager",
761
+ "method": "POST",
762
+ "path": "/api/v1/custom-queries/00000000-0000-4000-8000-000000000101/execute",
763
+ "body": {
764
+ "parameters": {
765
+ "status": "active"
766
+ }
767
+ }
768
+ },
769
+ "response": {
770
+ "status": 200,
771
+ "body": {
772
+ "rows": [
773
+ {
774
+ "total": 2
775
+ }
776
+ ],
777
+ "durationMs": 7
778
+ }
779
+ },
780
+ "expectedResult": {
781
+ "rows": [
782
+ {
783
+ "total": 2
784
+ }
785
+ ],
786
+ "durationMs": 7
787
+ }
788
+ },
789
+ {
790
+ "id": "functions.execute.success",
791
+ "kind": "success",
792
+ "operation": "functions.execute",
793
+ "input": {
794
+ "id": "00000000-0000-4000-8000-000000000201",
795
+ "body": {
796
+ "orderId": "order-1"
797
+ }
798
+ },
799
+ "request": {
800
+ "service": "functions",
801
+ "method": "POST",
802
+ "path": "/api/v1/functions/00000000-0000-4000-8000-000000000201/execute",
803
+ "headers": {
804
+ "X-Invocation-Type": "sync"
805
+ },
806
+ "body": {
807
+ "input": {
808
+ "orderId": "order-1"
809
+ }
810
+ }
811
+ },
812
+ "response": {
813
+ "status": 200,
814
+ "body": {
815
+ "id": "00000000-0000-4000-8000-000000000301",
816
+ "functionId": "00000000-0000-4000-8000-000000000201",
817
+ "functionVersionId": "00000000-0000-4000-8000-000000000211",
818
+ "status": "SUCCESS",
819
+ "input": {
820
+ "orderId": "order-1"
821
+ },
822
+ "output": {
823
+ "ok": true
824
+ },
825
+ "errorMessage": null,
826
+ "logs": null,
827
+ "durationMs": 10,
828
+ "startedAt": "2026-08-14T20:00:00Z",
829
+ "finishedAt": "2026-08-14T20:00:01Z",
830
+ "createdAt": "2026-08-14T20:00:00Z"
831
+ }
832
+ },
833
+ "expectedResult": {
834
+ "id": "00000000-0000-4000-8000-000000000301",
835
+ "functionId": "00000000-0000-4000-8000-000000000201",
836
+ "functionVersionId": "00000000-0000-4000-8000-000000000211",
837
+ "status": "SUCCESS",
838
+ "input": {
839
+ "orderId": "order-1"
840
+ },
841
+ "output": {
842
+ "ok": true
843
+ },
844
+ "errorMessage": null,
845
+ "logs": null,
846
+ "durationMs": 10,
847
+ "startedAt": "2026-08-14T20:00:00Z",
848
+ "finishedAt": "2026-08-14T20:00:01Z",
849
+ "createdAt": "2026-08-14T20:00:00Z"
850
+ }
851
+ },
852
+ {
853
+ "id": "functions.execute-async.success",
854
+ "kind": "success",
855
+ "operation": "functions.executeAsync",
856
+ "input": {
857
+ "id": "00000000-0000-4000-8000-000000000201",
858
+ "body": {
859
+ "orderId": "order-2"
860
+ }
861
+ },
862
+ "request": {
863
+ "service": "functions",
864
+ "method": "POST",
865
+ "path": "/api/v1/functions/00000000-0000-4000-8000-000000000201/execute",
866
+ "headers": {
867
+ "X-Invocation-Type": "async"
868
+ },
869
+ "body": {
870
+ "input": {
871
+ "orderId": "order-2"
872
+ }
873
+ }
874
+ },
875
+ "response": {
876
+ "status": 202,
877
+ "body": {
878
+ "id": "00000000-0000-4000-8000-000000000302",
879
+ "functionId": "00000000-0000-4000-8000-000000000201",
880
+ "functionVersionId": "00000000-0000-4000-8000-000000000211",
881
+ "status": "PENDING",
882
+ "input": {
883
+ "orderId": "order-2"
884
+ },
885
+ "output": null,
886
+ "errorMessage": null,
887
+ "logs": null,
888
+ "durationMs": null,
889
+ "startedAt": null,
890
+ "finishedAt": null,
891
+ "createdAt": "2026-08-14T20:01:00Z"
892
+ }
893
+ },
894
+ "expectedResult": {
895
+ "id": "00000000-0000-4000-8000-000000000302",
896
+ "functionId": "00000000-0000-4000-8000-000000000201",
897
+ "functionVersionId": "00000000-0000-4000-8000-000000000211",
898
+ "status": "PENDING",
899
+ "input": {
900
+ "orderId": "order-2"
901
+ },
902
+ "output": null,
903
+ "errorMessage": null,
904
+ "logs": null,
905
+ "durationMs": null,
906
+ "startedAt": null,
907
+ "finishedAt": null,
908
+ "createdAt": "2026-08-14T20:01:00Z"
909
+ }
910
+ },
911
+ {
912
+ "id": "functions.get-execution.success",
913
+ "kind": "success",
914
+ "operation": "functions.getExecution",
915
+ "input": {
916
+ "id": "00000000-0000-4000-8000-000000000302"
917
+ },
918
+ "request": {
919
+ "service": "functions",
920
+ "method": "GET",
921
+ "path": "/api/v1/executions/00000000-0000-4000-8000-000000000302"
922
+ },
923
+ "response": {
924
+ "status": 200,
925
+ "body": {
926
+ "id": "00000000-0000-4000-8000-000000000302",
927
+ "functionId": "00000000-0000-4000-8000-000000000201",
928
+ "functionVersionId": "00000000-0000-4000-8000-000000000211",
929
+ "status": "SUCCESS",
930
+ "input": {
931
+ "orderId": "order-2"
932
+ },
933
+ "output": {
934
+ "ok": true
935
+ },
936
+ "errorMessage": null,
937
+ "logs": "done",
938
+ "durationMs": 12,
939
+ "startedAt": "2026-08-14T20:01:00Z",
940
+ "finishedAt": "2026-08-14T20:01:01Z",
941
+ "createdAt": "2026-08-14T20:01:00Z"
942
+ }
943
+ },
944
+ "expectedResult": {
945
+ "id": "00000000-0000-4000-8000-000000000302",
946
+ "functionId": "00000000-0000-4000-8000-000000000201",
947
+ "functionVersionId": "00000000-0000-4000-8000-000000000211",
948
+ "status": "SUCCESS",
949
+ "input": {
950
+ "orderId": "order-2"
951
+ },
952
+ "output": {
953
+ "ok": true
954
+ },
955
+ "errorMessage": null,
956
+ "logs": "done",
957
+ "durationMs": 12,
958
+ "startedAt": "2026-08-14T20:01:00Z",
959
+ "finishedAt": "2026-08-14T20:01:01Z",
960
+ "createdAt": "2026-08-14T20:01:00Z"
961
+ }
962
+ },
963
+ {
964
+ "id": "functions.cancel-execution.success",
965
+ "kind": "success",
966
+ "operation": "functions.cancelExecution",
967
+ "input": {
968
+ "id": "00000000-0000-4000-8000-000000000302"
969
+ },
970
+ "request": {
971
+ "service": "functions",
972
+ "method": "POST",
973
+ "path": "/api/v1/executions/00000000-0000-4000-8000-000000000302/cancel"
974
+ },
975
+ "response": {
976
+ "status": 204,
977
+ "empty": true
978
+ }
979
+ },
980
+ {
981
+ "id": "integration.execute.success",
982
+ "kind": "success",
983
+ "operation": "integration.execute",
984
+ "input": {
985
+ "id": "00000000-0000-4000-8000-000000000401",
986
+ "proxyRequest": {
987
+ "method": "POST",
988
+ "endpoint": "/orders",
989
+ "headers": {
990
+ "x-client": "sdk"
991
+ },
992
+ "body": {
993
+ "id": "order-1"
994
+ },
995
+ "queryParams": {
996
+ "dryRun": true
997
+ }
998
+ }
999
+ },
1000
+ "request": {
1001
+ "service": "integration",
1002
+ "method": "POST",
1003
+ "path": "/api/v1/proxy/template-configs/00000000-0000-4000-8000-000000000401/execute",
1004
+ "body": {
1005
+ "method": "POST",
1006
+ "endpoint": "/orders",
1007
+ "headers": {
1008
+ "x-client": "sdk"
1009
+ },
1010
+ "body": {
1011
+ "id": "order-1"
1012
+ },
1013
+ "queryParams": {
1014
+ "dryRun": true
1015
+ },
1016
+ "source": "SDK"
1017
+ }
1018
+ },
1019
+ "response": {
1020
+ "status": 200,
1021
+ "body": {
1022
+ "status": 201,
1023
+ "headers": {
1024
+ "content-type": "application/json"
1025
+ },
1026
+ "body": {
1027
+ "id": "remote-order-1"
1028
+ },
1029
+ "durationMs": 18,
1030
+ "executionId": "integration-execution-1"
1031
+ }
1032
+ },
1033
+ "expectedResult": {
1034
+ "status": 201,
1035
+ "headers": {
1036
+ "content-type": "application/json"
1037
+ },
1038
+ "body": {
1039
+ "id": "remote-order-1"
1040
+ },
1041
+ "durationMs": 18,
1042
+ "executionId": "integration-execution-1"
1043
+ }
1044
+ },
1045
+ {
1046
+ "id": "integration.execute-resource.success",
1047
+ "kind": "success",
1048
+ "operation": "integration.executeResource",
1049
+ "input": {
1050
+ "id": "00000000-0000-4000-8000-000000000402",
1051
+ "parameters": {
1052
+ "limit": 10
1053
+ }
1054
+ },
1055
+ "request": {
1056
+ "service": "integration",
1057
+ "method": "POST",
1058
+ "path": "/api/v1/proxy/resources/00000000-0000-4000-8000-000000000402/execute",
1059
+ "body": {
1060
+ "params": {
1061
+ "limit": 10
1062
+ }
1063
+ }
1064
+ },
1065
+ "response": {
1066
+ "status": 200,
1067
+ "body": {
1068
+ "status": 200,
1069
+ "headers": {
1070
+ "content-type": "application/json"
1071
+ },
1072
+ "body": {
1073
+ "ok": true
1074
+ },
1075
+ "durationMs": 20,
1076
+ "executionId": "integration-execution-2"
1077
+ }
1078
+ },
1079
+ "expectedResult": {
1080
+ "status": 200,
1081
+ "headers": {
1082
+ "content-type": "application/json"
1083
+ },
1084
+ "body": {
1085
+ "ok": true
1086
+ },
1087
+ "durationMs": 20,
1088
+ "executionId": "integration-execution-2"
1089
+ }
1090
+ },
1091
+ {
1092
+ "id": "sql.execute-ddl.success",
1093
+ "kind": "success",
1094
+ "operation": "sql.executeDdl",
1095
+ "input": {
1096
+ "statements": [
1097
+ {
1098
+ "sql": "CREATE TABLE reports (id INT PRIMARY KEY)"
1099
+ }
1100
+ ]
1101
+ },
1102
+ "request": {
1103
+ "service": "dataManager",
1104
+ "method": "POST",
1105
+ "path": "/api/v1/sql/ddl/execute",
1106
+ "body": {
1107
+ "statements": [
1108
+ {
1109
+ "sql": "CREATE TABLE reports (id INT PRIMARY KEY)"
1110
+ }
1111
+ ]
1112
+ }
1113
+ },
1114
+ "response": {
1115
+ "status": 200,
1116
+ "body": {
1117
+ "results": [
1118
+ {
1119
+ "index": 0,
1120
+ "durationMs": 12
1121
+ }
1122
+ ],
1123
+ "executedCount": 1,
1124
+ "totalDurationMs": 14
1125
+ }
1126
+ },
1127
+ "expectedResult": {
1128
+ "results": [
1129
+ {
1130
+ "index": 0,
1131
+ "durationMs": 12
1132
+ }
1133
+ ],
1134
+ "executedCount": 1,
1135
+ "totalDurationMs": 14
1136
+ }
1137
+ },
1138
+ {
1139
+ "id": "sql.execute-dml.success",
1140
+ "kind": "success",
1141
+ "operation": "sql.executeDml",
1142
+ "input": {
1143
+ "statements": [
1144
+ {
1145
+ "sql": "INSERT INTO reports (id, name) VALUES (:id, :name)",
1146
+ "parameters": {
1147
+ "id": 1,
1148
+ "name": "Monthly"
1149
+ }
1150
+ }
1151
+ ]
1152
+ },
1153
+ "request": {
1154
+ "service": "dataManager",
1155
+ "method": "POST",
1156
+ "path": "/api/v1/sql/dml/execute",
1157
+ "body": {
1158
+ "statements": [
1159
+ {
1160
+ "sql": "INSERT INTO reports (id, name) VALUES (:id, :name)",
1161
+ "parameters": {
1162
+ "id": 1,
1163
+ "name": "Monthly"
1164
+ }
1165
+ }
1166
+ ]
1167
+ }
1168
+ },
1169
+ "response": {
1170
+ "status": 200,
1171
+ "body": {
1172
+ "results": [
1173
+ {
1174
+ "index": 0,
1175
+ "affectedRows": 1,
1176
+ "durationMs": 8
1177
+ }
1178
+ ],
1179
+ "executedCount": 1,
1180
+ "totalDurationMs": 9
1181
+ }
1182
+ },
1183
+ "expectedResult": {
1184
+ "results": [
1185
+ {
1186
+ "index": 0,
1187
+ "affectedRows": 1,
1188
+ "durationMs": 8
1189
+ }
1190
+ ],
1191
+ "executedCount": 1,
1192
+ "totalDurationMs": 9
1193
+ }
1194
+ },
1195
+ {
1196
+ "id": "sql.list-tables.success",
1197
+ "kind": "success",
1198
+ "operation": "sql.listTables",
1199
+ "input": {
1200
+ "listTablesOptions": {
1201
+ "scope": "APP",
1202
+ "includeColumns": true
1203
+ }
1204
+ },
1205
+ "request": {
1206
+ "service": "dataManager",
1207
+ "method": "GET",
1208
+ "path": "/api/v1/tables",
1209
+ "params": {
1210
+ "scope": "APP",
1211
+ "includeColumns": true
1212
+ }
1213
+ },
1214
+ "response": {
1215
+ "status": 200,
1216
+ "body": [
1217
+ {
1218
+ "schema": "app_schema",
1219
+ "tables": [
1220
+ {
1221
+ "tableName": "reports",
1222
+ "columns": [
1223
+ {
1224
+ "name": "id",
1225
+ "type": "INTEGER",
1226
+ "primaryKey": true,
1227
+ "nullable": false,
1228
+ "defaultValue": null
1229
+ }
1230
+ ],
1231
+ "foreignKeys": [
1232
+ {
1233
+ "columns": ["owner_id"],
1234
+ "referencedTable": "owners",
1235
+ "referencedColumns": ["id"]
1236
+ }
1237
+ ]
1238
+ }
1239
+ ]
1240
+ }
1241
+ ]
1242
+ },
1243
+ "expectedResult": [
1244
+ {
1245
+ "schema": "app_schema",
1246
+ "tables": [
1247
+ {
1248
+ "tableName": "reports",
1249
+ "columns": [
1250
+ {
1251
+ "name": "id",
1252
+ "type": "INTEGER",
1253
+ "primaryKey": true,
1254
+ "nullable": false,
1255
+ "defaultValue": null
1256
+ }
1257
+ ],
1258
+ "foreignKeys": [
1259
+ {
1260
+ "columns": ["owner_id"],
1261
+ "referencedTable": "owners",
1262
+ "referencedColumns": ["id"]
1263
+ }
1264
+ ]
1265
+ }
1266
+ ]
1267
+ }
1268
+ ]
1269
+ },
1270
+ {
1271
+ "id": "data-sources.bulk-create.success",
1272
+ "kind": "success",
1273
+ "operation": "dataSources.bulkCreate",
1274
+ "input": {
1275
+ "dataSources": [
1276
+ {
1277
+ "name": "Reporting",
1278
+ "instanceType": "EXTERNAL",
1279
+ "dbType": "POSTGRES",
1280
+ "writeConnectionConfig": {
1281
+ "host": "db.example.com",
1282
+ "port": 5432,
1283
+ "databaseName": "reporting",
1284
+ "username": "reader",
1285
+ "credential": "write-only-credential"
1286
+ }
1287
+ }
1288
+ ]
1289
+ },
1290
+ "request": {
1291
+ "service": "dataManager",
1292
+ "method": "POST",
1293
+ "path": "/api/v1/data-sources",
1294
+ "body": {
1295
+ "name": "Reporting",
1296
+ "instanceType": "EXTERNAL",
1297
+ "dbType": "POSTGRES",
1298
+ "writeConnectionConfig": {
1299
+ "host": "db.example.com",
1300
+ "port": 5432,
1301
+ "databaseName": "reporting",
1302
+ "username": "reader",
1303
+ "credential": "write-only-credential"
1304
+ }
1305
+ }
1306
+ },
1307
+ "response": {
1308
+ "status": 201,
1309
+ "body": {
1310
+ "id": "00000000-0000-4000-8000-000000000501",
1311
+ "legacyId": null,
1312
+ "appId": "00000000-0000-4000-8000-000000000500",
1313
+ "name": "Reporting",
1314
+ "instanceType": "EXTERNAL",
1315
+ "dbType": "POSTGRES",
1316
+ "writeConnectionConfig": {
1317
+ "host": "db.example.com",
1318
+ "port": 5432,
1319
+ "schema": null,
1320
+ "databaseName": "reporting",
1321
+ "username": "reader",
1322
+ "credential": null,
1323
+ "maxPoolSize": null,
1324
+ "connectionTimeoutMs": null,
1325
+ "idleTimeoutMs": null,
1326
+ "minimumIdle": null,
1327
+ "maxLifetimeMs": null,
1328
+ "additionalParams": null
1329
+ },
1330
+ "readConnectionConfig": null,
1331
+ "connectionStatus": null,
1332
+ "lastCheckedAt": null,
1333
+ "storageQuota": null
1334
+ }
1335
+ },
1336
+ "expectedResult": {
1337
+ "results": [
1338
+ {
1339
+ "index": 0,
1340
+ "success": true,
1341
+ "dataSourceId": "00000000-0000-4000-8000-000000000501",
1342
+ "errorCode": null,
1343
+ "message": null
1344
+ }
1345
+ ],
1346
+ "processedCount": 1,
1347
+ "succeededCount": 1,
1348
+ "failedCount": 0
1349
+ }
1350
+ },
1351
+ {
1352
+ "id": "data-sources.bulk-update.success",
1353
+ "kind": "success",
1354
+ "operation": "dataSources.bulkUpdate",
1355
+ "input": {
1356
+ "dataSources": [
1357
+ {
1358
+ "dataSourceId": "00000000-0000-4000-8000-000000000501",
1359
+ "name": "Reporting",
1360
+ "instanceType": "EXTERNAL",
1361
+ "dbType": "POSTGRES",
1362
+ "writeConnectionConfig": {
1363
+ "host": "db.example.com",
1364
+ "port": 5432,
1365
+ "databaseName": "reporting",
1366
+ "username": "reader"
1367
+ }
1368
+ }
1369
+ ]
1370
+ },
1371
+ "request": {
1372
+ "service": "dataManager",
1373
+ "method": "PUT",
1374
+ "path": "/api/v1/data-sources/00000000-0000-4000-8000-000000000501",
1375
+ "body": {
1376
+ "name": "Reporting",
1377
+ "instanceType": "EXTERNAL",
1378
+ "dbType": "POSTGRES",
1379
+ "writeConnectionConfig": {
1380
+ "host": "db.example.com",
1381
+ "port": 5432,
1382
+ "databaseName": "reporting",
1383
+ "username": "reader"
1384
+ }
1385
+ }
1386
+ },
1387
+ "response": {
1388
+ "status": 200,
1389
+ "body": {
1390
+ "id": "00000000-0000-4000-8000-000000000501",
1391
+ "legacyId": null,
1392
+ "appId": "00000000-0000-4000-8000-000000000500",
1393
+ "name": "Reporting",
1394
+ "instanceType": "EXTERNAL",
1395
+ "dbType": "POSTGRES",
1396
+ "writeConnectionConfig": {
1397
+ "host": "db.example.com",
1398
+ "port": 5432,
1399
+ "schema": null,
1400
+ "databaseName": "reporting",
1401
+ "username": "reader",
1402
+ "credential": null,
1403
+ "maxPoolSize": null,
1404
+ "connectionTimeoutMs": null,
1405
+ "idleTimeoutMs": null,
1406
+ "minimumIdle": null,
1407
+ "maxLifetimeMs": null,
1408
+ "additionalParams": null
1409
+ },
1410
+ "readConnectionConfig": null,
1411
+ "connectionStatus": null,
1412
+ "lastCheckedAt": null,
1413
+ "storageQuota": null
1414
+ }
1415
+ },
1416
+ "expectedResult": {
1417
+ "results": [
1418
+ {
1419
+ "index": 0,
1420
+ "success": true,
1421
+ "dataSourceId": "00000000-0000-4000-8000-000000000501",
1422
+ "errorCode": null,
1423
+ "message": null
1424
+ }
1425
+ ],
1426
+ "processedCount": 1,
1427
+ "succeededCount": 1,
1428
+ "failedCount": 0
1429
+ }
1430
+ },
1431
+ {
1432
+ "id": "data-sources.bulk-delete.success",
1433
+ "kind": "success",
1434
+ "operation": "dataSources.bulkDelete",
1435
+ "input": {
1436
+ "dataSourceIds": ["00000000-0000-4000-8000-000000000502"]
1437
+ },
1438
+ "request": {
1439
+ "service": "dataManager",
1440
+ "method": "DELETE",
1441
+ "path": "/api/v1/data-sources/00000000-0000-4000-8000-000000000502"
1442
+ },
1443
+ "response": {
1444
+ "status": 200,
1445
+ "empty": true
1446
+ },
1447
+ "expectedResult": {
1448
+ "results": [
1449
+ {
1450
+ "index": 0,
1451
+ "success": true,
1452
+ "dataSourceId": "00000000-0000-4000-8000-000000000502",
1453
+ "errorCode": null,
1454
+ "message": null
1455
+ }
1456
+ ],
1457
+ "processedCount": 1,
1458
+ "succeededCount": 1,
1459
+ "failedCount": 0
1460
+ }
1461
+ },
1462
+ {
1463
+ "id": "functions-admin.bulk-create.success",
1464
+ "kind": "success",
1465
+ "operation": "functionsAdmin.bulkCreate",
1466
+ "input": {
1467
+ "functions": [
1468
+ {
1469
+ "name": "sync orders",
1470
+ "description": "Pushes orders downstream",
1471
+ "runtime": "JAVASCRIPT",
1472
+ "code": "export default async () => ({ ok: true })",
1473
+ "inputSchema": {
1474
+ "type": "object"
1475
+ },
1476
+ "outputSchema": {
1477
+ "type": "object"
1478
+ },
1479
+ "secrets": ["ORDERS_TOKEN"]
1480
+ }
1481
+ ]
1482
+ },
1483
+ "request": {
1484
+ "service": "functions",
1485
+ "method": "POST",
1486
+ "path": "/api/v1/functions/bulk",
1487
+ "body": {
1488
+ "functions": [
1489
+ {
1490
+ "name": "sync orders",
1491
+ "description": "Pushes orders downstream",
1492
+ "runtime": "JAVASCRIPT",
1493
+ "code": "export default async () => ({ ok: true })",
1494
+ "inputSchema": {
1495
+ "type": "object"
1496
+ },
1497
+ "outputSchema": {
1498
+ "type": "object"
1499
+ },
1500
+ "secrets": ["ORDERS_TOKEN"]
1501
+ }
1502
+ ]
1503
+ }
1504
+ },
1505
+ "response": {
1506
+ "status": 201,
1507
+ "body": [
1508
+ {
1509
+ "id": "00000000-0000-4000-8000-000000000601",
1510
+ "tenantId": "00000000-0000-4000-8000-000000000011",
1511
+ "appId": "00000000-0000-4000-8000-000000000012",
1512
+ "legacyId": null,
1513
+ "name": "sync orders",
1514
+ "description": "Pushes orders downstream",
1515
+ "runtime": "JAVASCRIPT",
1516
+ "dataSourceId": null,
1517
+ "visibility": "PRIVATE",
1518
+ "currentVersion": {
1519
+ "id": "00000000-0000-4000-8000-000000000611",
1520
+ "functionId": "00000000-0000-4000-8000-000000000601",
1521
+ "status": "DRAFT",
1522
+ "code": "export default async () => ({ ok: true })",
1523
+ "inputSchema": {
1524
+ "type": "object"
1525
+ },
1526
+ "outputSchema": {
1527
+ "type": "object"
1528
+ },
1529
+ "secrets": ["ORDERS_TOKEN"],
1530
+ "createdAt": "2026-08-18T12:00:00Z"
1531
+ },
1532
+ "cronExpression": null,
1533
+ "cronInputJson": null,
1534
+ "cronEnabled": null,
1535
+ "createdAt": "2026-08-18T12:00:00Z",
1536
+ "updatedAt": "2026-08-18T12:00:00Z"
1537
+ }
1538
+ ]
1539
+ },
1540
+ "expectedResult": [
1541
+ {
1542
+ "id": "00000000-0000-4000-8000-000000000601",
1543
+ "tenantId": "00000000-0000-4000-8000-000000000011",
1544
+ "appId": "00000000-0000-4000-8000-000000000012",
1545
+ "legacyId": null,
1546
+ "name": "sync orders",
1547
+ "description": "Pushes orders downstream",
1548
+ "runtime": "JAVASCRIPT",
1549
+ "dataSourceId": null,
1550
+ "visibility": "PRIVATE",
1551
+ "currentVersion": {
1552
+ "id": "00000000-0000-4000-8000-000000000611",
1553
+ "functionId": "00000000-0000-4000-8000-000000000601",
1554
+ "status": "DRAFT",
1555
+ "code": "export default async () => ({ ok: true })",
1556
+ "inputSchema": {
1557
+ "type": "object"
1558
+ },
1559
+ "outputSchema": {
1560
+ "type": "object"
1561
+ },
1562
+ "secrets": ["ORDERS_TOKEN"],
1563
+ "createdAt": "2026-08-18T12:00:00Z"
1564
+ },
1565
+ "cronExpression": null,
1566
+ "cronInputJson": null,
1567
+ "cronEnabled": null,
1568
+ "createdAt": "2026-08-18T12:00:00Z",
1569
+ "updatedAt": "2026-08-18T12:00:00Z"
1570
+ }
1571
+ ]
1572
+ },
1573
+ {
1574
+ "id": "functions-admin.bulk-update.success",
1575
+ "kind": "success",
1576
+ "operation": "functionsAdmin.bulkUpdate",
1577
+ "input": {
1578
+ "functionUpdates": [
1579
+ {
1580
+ "id": "00000000-0000-4000-8000-000000000601",
1581
+ "update": {
1582
+ "name": "sync orders",
1583
+ "code": "export default async () => ({ ok: false })"
1584
+ }
1585
+ }
1586
+ ]
1587
+ },
1588
+ "request": {
1589
+ "service": "functions",
1590
+ "method": "PUT",
1591
+ "path": "/api/v1/functions/bulk",
1592
+ "body": {
1593
+ "functions": [
1594
+ {
1595
+ "id": "00000000-0000-4000-8000-000000000601",
1596
+ "update": {
1597
+ "name": "sync orders",
1598
+ "code": "export default async () => ({ ok: false })"
1599
+ }
1600
+ }
1601
+ ]
1602
+ }
1603
+ },
1604
+ "response": {
1605
+ "status": 200,
1606
+ "body": [
1607
+ {
1608
+ "id": "00000000-0000-4000-8000-000000000601",
1609
+ "tenantId": "00000000-0000-4000-8000-000000000011",
1610
+ "appId": "00000000-0000-4000-8000-000000000012",
1611
+ "legacyId": null,
1612
+ "name": "sync orders",
1613
+ "description": null,
1614
+ "runtime": "JAVASCRIPT",
1615
+ "dataSourceId": null,
1616
+ "visibility": "PRIVATE",
1617
+ "currentVersion": {
1618
+ "id": "00000000-0000-4000-8000-000000000611",
1619
+ "functionId": "00000000-0000-4000-8000-000000000601",
1620
+ "status": "DRAFT",
1621
+ "code": "export default async () => ({ ok: false })",
1622
+ "inputSchema": null,
1623
+ "outputSchema": null,
1624
+ "secrets": null,
1625
+ "createdAt": "2026-08-18T12:05:00Z"
1626
+ },
1627
+ "cronExpression": null,
1628
+ "cronInputJson": null,
1629
+ "cronEnabled": null,
1630
+ "createdAt": "2026-08-18T12:00:00Z",
1631
+ "updatedAt": "2026-08-18T12:05:00Z"
1632
+ }
1633
+ ]
1634
+ },
1635
+ "expectedResult": [
1636
+ {
1637
+ "id": "00000000-0000-4000-8000-000000000601",
1638
+ "tenantId": "00000000-0000-4000-8000-000000000011",
1639
+ "appId": "00000000-0000-4000-8000-000000000012",
1640
+ "legacyId": null,
1641
+ "name": "sync orders",
1642
+ "description": null,
1643
+ "runtime": "JAVASCRIPT",
1644
+ "dataSourceId": null,
1645
+ "visibility": "PRIVATE",
1646
+ "currentVersion": {
1647
+ "id": "00000000-0000-4000-8000-000000000611",
1648
+ "functionId": "00000000-0000-4000-8000-000000000601",
1649
+ "status": "DRAFT",
1650
+ "code": "export default async () => ({ ok: false })",
1651
+ "inputSchema": null,
1652
+ "outputSchema": null,
1653
+ "secrets": null,
1654
+ "createdAt": "2026-08-18T12:05:00Z"
1655
+ },
1656
+ "cronExpression": null,
1657
+ "cronInputJson": null,
1658
+ "cronEnabled": null,
1659
+ "createdAt": "2026-08-18T12:00:00Z",
1660
+ "updatedAt": "2026-08-18T12:05:00Z"
1661
+ }
1662
+ ]
1663
+ },
1664
+ {
1665
+ "id": "functions-admin.bulk-patch.success",
1666
+ "kind": "success",
1667
+ "operation": "functionsAdmin.bulkPatch",
1668
+ "input": {
1669
+ "functionPatches": [
1670
+ {
1671
+ "id": "00000000-0000-4000-8000-000000000601",
1672
+ "update": {
1673
+ "description": "Preserved patch semantics",
1674
+ "secrets": []
1675
+ }
1676
+ }
1677
+ ]
1678
+ },
1679
+ "request": {
1680
+ "service": "functions",
1681
+ "method": "PATCH",
1682
+ "path": "/api/v1/functions/bulk",
1683
+ "body": {
1684
+ "functions": [
1685
+ {
1686
+ "id": "00000000-0000-4000-8000-000000000601",
1687
+ "update": {
1688
+ "description": "Preserved patch semantics",
1689
+ "secrets": []
1690
+ }
1691
+ }
1692
+ ]
1693
+ }
1694
+ },
1695
+ "response": {
1696
+ "status": 200,
1697
+ "body": [
1698
+ {
1699
+ "id": "00000000-0000-4000-8000-000000000601",
1700
+ "tenantId": "00000000-0000-4000-8000-000000000011",
1701
+ "appId": "00000000-0000-4000-8000-000000000012",
1702
+ "legacyId": null,
1703
+ "name": "sync orders",
1704
+ "description": "Preserved patch semantics",
1705
+ "runtime": "JAVASCRIPT",
1706
+ "dataSourceId": null,
1707
+ "visibility": "PRIVATE",
1708
+ "currentVersion": null,
1709
+ "cronExpression": null,
1710
+ "cronInputJson": null,
1711
+ "cronEnabled": null,
1712
+ "createdAt": "2026-08-18T12:00:00Z",
1713
+ "updatedAt": "2026-08-18T12:06:00Z"
1714
+ }
1715
+ ]
1716
+ },
1717
+ "expectedResult": [
1718
+ {
1719
+ "id": "00000000-0000-4000-8000-000000000601",
1720
+ "tenantId": "00000000-0000-4000-8000-000000000011",
1721
+ "appId": "00000000-0000-4000-8000-000000000012",
1722
+ "legacyId": null,
1723
+ "name": "sync orders",
1724
+ "description": "Preserved patch semantics",
1725
+ "runtime": "JAVASCRIPT",
1726
+ "dataSourceId": null,
1727
+ "visibility": "PRIVATE",
1728
+ "currentVersion": null,
1729
+ "cronExpression": null,
1730
+ "cronInputJson": null,
1731
+ "cronEnabled": null,
1732
+ "createdAt": "2026-08-18T12:00:00Z",
1733
+ "updatedAt": "2026-08-18T12:06:00Z"
1734
+ }
1735
+ ]
1736
+ },
1737
+ {
1738
+ "id": "functions-admin.bulk-delete.success",
1739
+ "kind": "success",
1740
+ "operation": "functionsAdmin.bulkDelete",
1741
+ "input": {
1742
+ "functionDeleteSelector": {
1743
+ "ids": ["00000000-0000-4000-8000-000000000602"]
1744
+ }
1745
+ },
1746
+ "request": {
1747
+ "service": "functions",
1748
+ "method": "POST",
1749
+ "path": "/api/v1/functions/bulk-delete",
1750
+ "body": {
1751
+ "ids": ["00000000-0000-4000-8000-000000000602"]
1752
+ }
1753
+ },
1754
+ "response": {
1755
+ "status": 200,
1756
+ "body": {
1757
+ "deleted": ["00000000-0000-4000-8000-000000000602"],
1758
+ "notFound": [],
1759
+ "deletedCount": 1
1760
+ }
1761
+ },
1762
+ "expectedResult": {
1763
+ "deleted": ["00000000-0000-4000-8000-000000000602"],
1764
+ "notFound": [],
1765
+ "deletedCount": 1
1766
+ }
1767
+ },
1768
+ {
1769
+ "id": "integration-admin.bulk-create.success",
1770
+ "kind": "success",
1771
+ "operation": "integrationAdmin.bulkCreate",
1772
+ "input": {
1773
+ "configs": [
1774
+ {
1775
+ "templateId": "00000000-0000-4000-8000-000000000801",
1776
+ "alias": "crm",
1777
+ "values": {
1778
+ "token": "write-only-value"
1779
+ }
1780
+ }
1781
+ ]
1782
+ },
1783
+ "request": {
1784
+ "service": "integration",
1785
+ "method": "POST",
1786
+ "path": "/api/v1/template-configs/bulk",
1787
+ "body": {
1788
+ "configs": [
1789
+ {
1790
+ "templateId": "00000000-0000-4000-8000-000000000801",
1791
+ "alias": "crm",
1792
+ "values": {
1793
+ "token": "write-only-value"
1794
+ }
1795
+ }
1796
+ ]
1797
+ }
1798
+ },
1799
+ "response": {
1800
+ "status": 200,
1801
+ "body": {
1802
+ "results": [
1803
+ {
1804
+ "index": 0,
1805
+ "success": true,
1806
+ "configId": "00000000-0000-4000-8000-000000000701",
1807
+ "errorCode": null,
1808
+ "message": null
1809
+ }
1810
+ ],
1811
+ "processedCount": 1,
1812
+ "succeededCount": 1,
1813
+ "failedCount": 0
1814
+ }
1815
+ },
1816
+ "expectedResult": {
1817
+ "results": [
1818
+ {
1819
+ "index": 0,
1820
+ "success": true,
1821
+ "configId": "00000000-0000-4000-8000-000000000701",
1822
+ "errorCode": null,
1823
+ "message": null
1824
+ }
1825
+ ],
1826
+ "processedCount": 1,
1827
+ "succeededCount": 1,
1828
+ "failedCount": 0
1829
+ }
1830
+ },
1831
+ {
1832
+ "id": "integration-admin.bulk-update.success",
1833
+ "kind": "success",
1834
+ "operation": "integrationAdmin.bulkUpdate",
1835
+ "input": {
1836
+ "configs": [
1837
+ {
1838
+ "configId": "00000000-0000-4000-8000-000000000701",
1839
+ "alias": "crm-production"
1840
+ }
1841
+ ]
1842
+ },
1843
+ "request": {
1844
+ "service": "integration",
1845
+ "method": "PUT",
1846
+ "path": "/api/v1/template-configs/bulk",
1847
+ "body": {
1848
+ "configs": [
1849
+ {
1850
+ "configId": "00000000-0000-4000-8000-000000000701",
1851
+ "alias": "crm-production"
1852
+ }
1853
+ ]
1854
+ }
1855
+ },
1856
+ "response": {
1857
+ "status": 200,
1858
+ "body": {
1859
+ "results": [
1860
+ {
1861
+ "index": 0,
1862
+ "success": true,
1863
+ "configId": "00000000-0000-4000-8000-000000000701",
1864
+ "errorCode": null,
1865
+ "message": null
1866
+ }
1867
+ ],
1868
+ "processedCount": 1,
1869
+ "succeededCount": 1,
1870
+ "failedCount": 0
1871
+ }
1872
+ },
1873
+ "expectedResult": {
1874
+ "results": [
1875
+ {
1876
+ "index": 0,
1877
+ "success": true,
1878
+ "configId": "00000000-0000-4000-8000-000000000701",
1879
+ "errorCode": null,
1880
+ "message": null
1881
+ }
1882
+ ],
1883
+ "processedCount": 1,
1884
+ "succeededCount": 1,
1885
+ "failedCount": 0
1886
+ }
1887
+ },
1888
+ {
1889
+ "id": "integration-admin.bulk-delete.success",
1890
+ "kind": "success",
1891
+ "operation": "integrationAdmin.bulkDelete",
1892
+ "input": {
1893
+ "configIds": ["00000000-0000-4000-8000-000000000702"]
1894
+ },
1895
+ "request": {
1896
+ "service": "integration",
1897
+ "method": "POST",
1898
+ "path": "/api/v1/template-configs/bulk-delete",
1899
+ "body": {
1900
+ "configIds": ["00000000-0000-4000-8000-000000000702"]
1901
+ }
1902
+ },
1903
+ "response": {
1904
+ "status": 200,
1905
+ "body": {
1906
+ "results": [
1907
+ {
1908
+ "index": 0,
1909
+ "success": true,
1910
+ "configId": "00000000-0000-4000-8000-000000000702",
1911
+ "errorCode": null,
1912
+ "message": null
1913
+ }
1914
+ ],
1915
+ "processedCount": 1,
1916
+ "succeededCount": 1,
1917
+ "failedCount": 0
1918
+ }
1919
+ },
1920
+ "expectedResult": {
1921
+ "results": [
1922
+ {
1923
+ "index": 0,
1924
+ "success": true,
1925
+ "configId": "00000000-0000-4000-8000-000000000702",
1926
+ "errorCode": null,
1927
+ "message": null
1928
+ }
1929
+ ],
1930
+ "processedCount": 1,
1931
+ "succeededCount": 1,
1932
+ "failedCount": 0
1933
+ }
1934
+ },
1935
+ {
1936
+ "id": "integration-admin.test-credentials.success",
1937
+ "kind": "success",
1938
+ "operation": "integrationAdmin.testCredentials",
1939
+ "input": {
1940
+ "testCredentials": {
1941
+ "templateId": "00000000-0000-4000-8000-000000000801",
1942
+ "values": {
1943
+ "token": "write-only-value"
1944
+ }
1945
+ }
1946
+ },
1947
+ "request": {
1948
+ "service": "integration",
1949
+ "method": "POST",
1950
+ "path": "/api/v1/template-configs/test",
1951
+ "body": {
1952
+ "templateId": "00000000-0000-4000-8000-000000000801",
1953
+ "values": {
1954
+ "token": "write-only-value"
1955
+ }
1956
+ }
1957
+ },
1958
+ "response": {
1959
+ "status": 200,
1960
+ "body": {
1961
+ "status": "connected",
1962
+ "durationMs": 120,
1963
+ "checkedAt": "2026-08-18T12:00:00Z",
1964
+ "message": null
1965
+ }
1966
+ },
1967
+ "expectedResult": {
1968
+ "status": "connected",
1969
+ "durationMs": 120,
1970
+ "checkedAt": "2026-08-18T12:00:00Z",
1971
+ "message": null
1972
+ }
1973
+ },
1974
+ {
1975
+ "id": "integration-admin.test-config.success",
1976
+ "kind": "success",
1977
+ "operation": "integrationAdmin.testConfig",
1978
+ "input": {
1979
+ "id": "00000000-0000-4000-8000-000000000701"
1980
+ },
1981
+ "request": {
1982
+ "service": "integration",
1983
+ "method": "POST",
1984
+ "path": "/api/v1/template-configs/00000000-0000-4000-8000-000000000701/test"
1985
+ },
1986
+ "response": {
1987
+ "status": 200,
1988
+ "body": {
1989
+ "status": "error",
1990
+ "durationMs": 250,
1991
+ "checkedAt": "2026-08-18T12:01:00Z",
1992
+ "message": "Connection test failed"
1993
+ }
1994
+ },
1995
+ "expectedResult": {
1996
+ "status": "error",
1997
+ "durationMs": 250,
1998
+ "checkedAt": "2026-08-18T12:01:00Z",
1999
+ "message": "Connection test failed"
2000
+ }
2001
+ },
2002
+ {
2003
+ "id": "integration-admin.list.success",
2004
+ "kind": "success",
2005
+ "operation": "integrationAdmin.list",
2006
+ "input": {
2007
+ "listConfigsOptions": {
2008
+ "page": 0,
2009
+ "size": 20,
2010
+ "sort": "alias"
2011
+ }
2012
+ },
2013
+ "request": {
2014
+ "service": "integration",
2015
+ "method": "GET",
2016
+ "path": "/api/v1/template-configs",
2017
+ "params": {
2018
+ "page": 0,
2019
+ "size": 20,
2020
+ "sort": "alias"
2021
+ }
2022
+ },
2023
+ "response": {
2024
+ "status": 200,
2025
+ "body": {
2026
+ "content": [
2027
+ {
2028
+ "id": "00000000-0000-4000-8000-000000000701",
2029
+ "appId": "00000000-0000-4000-8000-000000000012",
2030
+ "legacyId": null,
2031
+ "templateId": "00000000-0000-4000-8000-000000000801",
2032
+ "alias": "crm-production",
2033
+ "status": "connected",
2034
+ "lastCheckedAt": "2026-08-18T12:00:00Z"
2035
+ }
2036
+ ],
2037
+ "totalElements": 1
2038
+ }
2039
+ },
2040
+ "expectedResult": {
2041
+ "content": [
2042
+ {
2043
+ "id": "00000000-0000-4000-8000-000000000701",
2044
+ "appId": "00000000-0000-4000-8000-000000000012",
2045
+ "legacyId": null,
2046
+ "templateId": "00000000-0000-4000-8000-000000000801",
2047
+ "alias": "crm-production",
2048
+ "status": "connected",
2049
+ "lastCheckedAt": "2026-08-18T12:00:00Z"
2050
+ }
2051
+ ],
2052
+ "totalElements": 1
2053
+ }
2054
+ },
2055
+ {
2056
+ "id": "members.list.success",
2057
+ "kind": "success",
2058
+ "operation": "members.list",
2059
+ "input": {},
2060
+ "request": {
2061
+ "service": "auth",
2062
+ "method": "GET",
2063
+ "path": "/api/v1/members/current-app"
2064
+ },
2065
+ "response": {
2066
+ "status": 200,
2067
+ "body": [
2068
+ {
2069
+ "userId": "00000000-0000-4000-8000-000000000901",
2070
+ "name": "Test User",
2071
+ "email": "user@example.com",
2072
+ "accessLevel": "EDIT",
2073
+ "accessSource": "DERIVED"
2074
+ }
2075
+ ]
2076
+ },
2077
+ "expectedResult": [
2078
+ {
2079
+ "userId": "00000000-0000-4000-8000-000000000901",
2080
+ "name": "Test User",
2081
+ "email": "user@example.com",
2082
+ "accessLevel": "EDIT",
2083
+ "accessSource": "DERIVED"
2084
+ }
2085
+ ]
2086
+ }
2087
+ ],
2088
+ "responseValidationCases": [
2089
+ {
2090
+ "id": "auth.me.invalid-cluster-type",
2091
+ "kind": "invalid-payload",
2092
+ "operation": "auth.me",
2093
+ "input": {},
2094
+ "request": {
2095
+ "service": "auth",
2096
+ "method": "GET",
2097
+ "path": "/api/v1/auth/me"
2098
+ },
2099
+ "response": {
2100
+ "status": 200,
2101
+ "body": {
2102
+ "id": "user-1",
2103
+ "tenant": {
2104
+ "id": "tenant-1",
2105
+ "shortId": "AAAAAAAAAAAAAAAAAAAAEA",
2106
+ "legacyId": null,
2107
+ "slug": "tenant-one",
2108
+ "clusterType": "UNKNOWN",
2109
+ "name": "Tenant One",
2110
+ "description": null,
2111
+ "hexColor": null,
2112
+ "icon": null,
2113
+ "infraStatus": "ACTIVE",
2114
+ "active": true
2115
+ },
2116
+ "name": "Test User",
2117
+ "email": "user@example.com",
2118
+ "imageUrl": null,
2119
+ "planId": "plan-1",
2120
+ "onboardingCompleted": false,
2121
+ "language": "pt-BR"
2122
+ }
2123
+ },
2124
+ "expectedError": {
2125
+ "type": "response",
2126
+ "status": 200,
2127
+ "code": "INVALID_RESPONSE",
2128
+ "message": "Current user response tenant has an invalid clusterType field",
2129
+ "details": null,
2130
+ "requestId": null,
2131
+ "retryable": false
2132
+ }
2133
+ },
2134
+ {
2135
+ "id": "queries.execute.invalid-payload",
2136
+ "kind": "invalid-payload",
2137
+ "operation": "queries.execute",
2138
+ "input": {
2139
+ "id": "00000000-0000-4000-8000-000000000101",
2140
+ "parameters": {}
2141
+ },
2142
+ "request": {
2143
+ "service": "dataManager",
2144
+ "method": "POST",
2145
+ "path": "/api/v1/custom-queries/00000000-0000-4000-8000-000000000101/execute",
2146
+ "body": {
2147
+ "parameters": {}
2148
+ }
2149
+ },
2150
+ "response": {
2151
+ "status": 200,
2152
+ "body": {
2153
+ "rows": [
2154
+ {
2155
+ "total": 2
2156
+ }
2157
+ ],
2158
+ "durationMs": "7"
2159
+ }
2160
+ },
2161
+ "expectedError": {
2162
+ "type": "response",
2163
+ "status": 200,
2164
+ "code": "INVALID_RESPONSE",
2165
+ "message": "Query execution response has an invalid durationMs field",
2166
+ "details": null,
2167
+ "requestId": null,
2168
+ "retryable": false
2169
+ }
2170
+ },
2171
+ {
2172
+ "id": "sql.execute-dml.invalid-payload",
2173
+ "kind": "invalid-payload",
2174
+ "operation": "sql.executeDml",
2175
+ "input": {
2176
+ "statements": [
2177
+ {
2178
+ "sql": "INSERT INTO reports (id, name) VALUES (:id, :name)",
2179
+ "parameters": {
2180
+ "id": 1,
2181
+ "name": "Monthly"
2182
+ }
2183
+ }
2184
+ ]
2185
+ },
2186
+ "request": {
2187
+ "service": "dataManager",
2188
+ "method": "POST",
2189
+ "path": "/api/v1/sql/dml/execute",
2190
+ "body": {
2191
+ "statements": [
2192
+ {
2193
+ "sql": "INSERT INTO reports (id, name) VALUES (:id, :name)",
2194
+ "parameters": {
2195
+ "id": 1,
2196
+ "name": "Monthly"
2197
+ }
2198
+ }
2199
+ ]
2200
+ }
2201
+ },
2202
+ "response": {
2203
+ "status": 200,
2204
+ "body": {
2205
+ "results": [
2206
+ {
2207
+ "index": 0,
2208
+ "affectedRows": 1,
2209
+ "durationMs": "8"
2210
+ }
2211
+ ],
2212
+ "executedCount": 1,
2213
+ "totalDurationMs": 9
2214
+ }
2215
+ },
2216
+ "expectedError": {
2217
+ "type": "response",
2218
+ "status": 200,
2219
+ "code": "INVALID_RESPONSE",
2220
+ "message": "DML batch response result 0 has an invalid durationMs field",
2221
+ "details": null,
2222
+ "requestId": null,
2223
+ "retryable": false
2224
+ }
2225
+ },
2226
+ {
2227
+ "id": "sql.list-tables.invalid-payload",
2228
+ "kind": "invalid-payload",
2229
+ "operation": "sql.listTables",
2230
+ "input": {
2231
+ "listTablesOptions": {
2232
+ "scope": "APP",
2233
+ "includeColumns": true
2234
+ }
2235
+ },
2236
+ "request": {
2237
+ "service": "dataManager",
2238
+ "method": "GET",
2239
+ "path": "/api/v1/tables",
2240
+ "params": {
2241
+ "scope": "APP",
2242
+ "includeColumns": true
2243
+ }
2244
+ },
2245
+ "response": {
2246
+ "status": 200,
2247
+ "body": [
2248
+ {
2249
+ "schema": "app_schema",
2250
+ "tables": [
2251
+ {
2252
+ "tableName": "reports",
2253
+ "columns": [
2254
+ {
2255
+ "name": "id",
2256
+ "type": "INTEGER",
2257
+ "primaryKey": "true",
2258
+ "nullable": false,
2259
+ "defaultValue": null
2260
+ }
2261
+ ],
2262
+ "foreignKeys": []
2263
+ }
2264
+ ]
2265
+ }
2266
+ ]
2267
+ },
2268
+ "expectedError": {
2269
+ "type": "response",
2270
+ "status": 200,
2271
+ "code": "INVALID_RESPONSE",
2272
+ "message": "Schema tables response group 0 table 0 column 0 has an invalid primaryKey field",
2273
+ "details": null,
2274
+ "requestId": null,
2275
+ "retryable": false
2276
+ }
2277
+ },
2278
+ {
2279
+ "id": "functions-admin.bulk-create.invalid-payload",
2280
+ "kind": "invalid-payload",
2281
+ "operation": "functionsAdmin.bulkCreate",
2282
+ "input": {
2283
+ "functions": [
2284
+ {
2285
+ "name": "sync orders",
2286
+ "description": "Pushes orders downstream",
2287
+ "runtime": "JAVASCRIPT",
2288
+ "code": "export default async () => ({ ok: true })",
2289
+ "inputSchema": {
2290
+ "type": "object"
2291
+ },
2292
+ "outputSchema": {
2293
+ "type": "object"
2294
+ },
2295
+ "secrets": ["ORDERS_TOKEN"]
2296
+ }
2297
+ ]
2298
+ },
2299
+ "request": {
2300
+ "service": "functions",
2301
+ "method": "POST",
2302
+ "path": "/api/v1/functions/bulk",
2303
+ "body": {
2304
+ "functions": [
2305
+ {
2306
+ "name": "sync orders",
2307
+ "description": "Pushes orders downstream",
2308
+ "runtime": "JAVASCRIPT",
2309
+ "code": "export default async () => ({ ok: true })",
2310
+ "inputSchema": {
2311
+ "type": "object"
2312
+ },
2313
+ "outputSchema": {
2314
+ "type": "object"
2315
+ },
2316
+ "secrets": ["ORDERS_TOKEN"]
2317
+ }
2318
+ ]
2319
+ }
2320
+ },
2321
+ "response": {
2322
+ "status": 201,
2323
+ "body": [
2324
+ {
2325
+ "id": "00000000-0000-4000-8000-000000000601",
2326
+ "tenantId": "00000000-0000-4000-8000-000000000011",
2327
+ "appId": "00000000-0000-4000-8000-000000000012",
2328
+ "legacyId": null,
2329
+ "name": "sync orders",
2330
+ "description": "Pushes orders downstream",
2331
+ "runtime": "JAVASCRIPT",
2332
+ "dataSourceId": null,
2333
+ "visibility": 2,
2334
+ "currentVersion": {
2335
+ "id": "00000000-0000-4000-8000-000000000611",
2336
+ "functionId": "00000000-0000-4000-8000-000000000601",
2337
+ "status": "DRAFT",
2338
+ "code": "export default async () => ({ ok: true })",
2339
+ "inputSchema": {
2340
+ "type": "object"
2341
+ },
2342
+ "outputSchema": {
2343
+ "type": "object"
2344
+ },
2345
+ "secrets": ["ORDERS_TOKEN"],
2346
+ "createdAt": "2026-08-18T12:00:00Z"
2347
+ },
2348
+ "createdAt": "2026-08-18T12:00:00Z",
2349
+ "updatedAt": "2026-08-18T12:00:00Z"
2350
+ }
2351
+ ]
2352
+ },
2353
+ "expectedError": {
2354
+ "type": "response",
2355
+ "status": 201,
2356
+ "code": "INVALID_RESPONSE",
2357
+ "message": "Function bulk create response item 0 has an invalid visibility field",
2358
+ "details": null,
2359
+ "requestId": null,
2360
+ "retryable": false
2361
+ }
2362
+ },
2363
+ {
2364
+ "id": "integration-admin.list.invalid-payload",
2365
+ "kind": "invalid-payload",
2366
+ "operation": "integrationAdmin.list",
2367
+ "input": {
2368
+ "listConfigsOptions": {
2369
+ "page": 0,
2370
+ "size": 20,
2371
+ "sort": "alias"
2372
+ }
2373
+ },
2374
+ "request": {
2375
+ "service": "integration",
2376
+ "method": "GET",
2377
+ "path": "/api/v1/template-configs",
2378
+ "params": {
2379
+ "page": 0,
2380
+ "size": 20,
2381
+ "sort": "alias"
2382
+ }
2383
+ },
2384
+ "response": {
2385
+ "status": 200,
2386
+ "body": {
2387
+ "content": [
2388
+ {
2389
+ "id": "00000000-0000-4000-8000-000000000701",
2390
+ "appId": "00000000-0000-4000-8000-000000000012",
2391
+ "legacyId": null,
2392
+ "templateId": "00000000-0000-4000-8000-000000000801",
2393
+ "alias": "crm-production",
2394
+ "status": "connected",
2395
+ "lastCheckedAt": 0
2396
+ }
2397
+ ],
2398
+ "totalElements": 1
2399
+ }
2400
+ },
2401
+ "expectedError": {
2402
+ "type": "response",
2403
+ "status": 200,
2404
+ "code": "INVALID_RESPONSE",
2405
+ "message": "Template config page response item 0 has an invalid lastCheckedAt field",
2406
+ "details": null,
2407
+ "requestId": null,
2408
+ "retryable": false
2409
+ }
2410
+ },
2411
+ {
2412
+ "id": "members.list.invalid-payload",
2413
+ "kind": "invalid-payload",
2414
+ "operation": "members.list",
2415
+ "input": {},
2416
+ "request": {
2417
+ "service": "auth",
2418
+ "method": "GET",
2419
+ "path": "/api/v1/members/current-app"
2420
+ },
2421
+ "response": {
2422
+ "status": 200,
2423
+ "body": [
2424
+ {
2425
+ "userId": "00000000-0000-4000-8000-000000000901",
2426
+ "name": "Test User",
2427
+ "email": "user@example.com",
2428
+ "accessLevel": "EDIT",
2429
+ "accessSource": 5
2430
+ }
2431
+ ]
2432
+ },
2433
+ "expectedError": {
2434
+ "type": "response",
2435
+ "status": 200,
2436
+ "code": "INVALID_RESPONSE",
2437
+ "message": "App members response member 0 has an invalid accessSource field",
2438
+ "details": null,
2439
+ "requestId": null,
2440
+ "retryable": false
2441
+ }
2442
+ }
2443
+ ],
2444
+ "httpAdapterCases": [
2445
+ {
2446
+ "id": "queries.execute.data-source-not-found",
2447
+ "kind": "api-4xx",
2448
+ "operation": "queries.execute",
2449
+ "input": {
2450
+ "id": "00000000-0000-4000-8000-000000000103",
2451
+ "parameters": {}
2452
+ },
2453
+ "verification": {
2454
+ "owner": "concrete-sdk-http-adapter",
2455
+ "coreExecutable": false,
2456
+ "requiredConsumers": ["@mitralab.io/functions-sdk", "mitra-functions-sdk"]
2457
+ },
2458
+ "source": {
2459
+ "service": "mitra-data-manager",
2460
+ "commit": "50dac9514c6b79b0da34280955e4afeaa24f9f84",
2461
+ "handler": "GlobalExceptionHandler.handleNotFound",
2462
+ "useCase": "ExecuteSqlUseCase.execute",
2463
+ "integrationTest": "CustomQueryControllerTest.Execute.execute_withDataSourceAssociatedToAnotherApp_shouldFailClosed"
2464
+ },
2465
+ "request": {
2466
+ "service": "dataManager",
2467
+ "method": "POST",
2468
+ "path": "/api/v1/custom-queries/00000000-0000-4000-8000-000000000103/execute",
2469
+ "body": {
2470
+ "parameters": {}
2471
+ }
2472
+ },
2473
+ "response": {
2474
+ "status": 404,
2475
+ "body": {
2476
+ "error_code": "NOT_FOUND",
2477
+ "message": "The Custom Query data source was not found for the authenticated app"
2478
+ }
2479
+ },
2480
+ "expectedError": {
2481
+ "type": "api",
2482
+ "status": 404,
2483
+ "code": "NOT_FOUND",
2484
+ "message": "The Custom Query data source was not found for the authenticated app",
2485
+ "details": null,
2486
+ "requestId": null,
2487
+ "retryable": false
2488
+ }
2489
+ },
2490
+ {
2491
+ "id": "queries.execute.database-unavailable",
2492
+ "kind": "api-5xx",
2493
+ "operation": "queries.execute",
2494
+ "input": {
2495
+ "id": "00000000-0000-4000-8000-000000000101",
2496
+ "parameters": {}
2497
+ },
2498
+ "verification": {
2499
+ "owner": "concrete-sdk-http-adapter",
2500
+ "coreExecutable": false,
2501
+ "requiredConsumers": ["@mitralab.io/functions-sdk", "mitra-functions-sdk"]
2502
+ },
2503
+ "source": {
2504
+ "service": "mitra-data-manager",
2505
+ "commit": "50dac9514c6b79b0da34280955e4afeaa24f9f84",
2506
+ "handler": "GlobalExceptionHandler.handleDatabaseException"
2507
+ },
2508
+ "request": {
2509
+ "service": "dataManager",
2510
+ "method": "POST",
2511
+ "path": "/api/v1/custom-queries/00000000-0000-4000-8000-000000000101/execute",
2512
+ "body": {
2513
+ "parameters": {}
2514
+ }
2515
+ },
2516
+ "response": {
2517
+ "status": 503,
2518
+ "body": {
2519
+ "error_code": "DATABASE_ERROR",
2520
+ "message": "Failed to connect to database. Please check your connection settings.",
2521
+ "details": "Connection refused"
2522
+ }
2523
+ },
2524
+ "expectedError": {
2525
+ "type": "api",
2526
+ "status": 503,
2527
+ "code": "DATABASE_ERROR",
2528
+ "message": "Failed to connect to database. Please check your connection settings.",
2529
+ "details": "Connection refused",
2530
+ "requestId": null,
2531
+ "retryable": true
2532
+ }
2533
+ },
2534
+ {
2535
+ "id": "auth.me.timeout",
2536
+ "kind": "timeout",
2537
+ "operation": "auth.me",
2538
+ "input": {},
2539
+ "verification": {
2540
+ "owner": "concrete-sdk-http-adapter",
2541
+ "coreExecutable": false,
2542
+ "requiredConsumers": ["@mitralab.io/functions-sdk", "mitra-functions-sdk"]
2543
+ },
2544
+ "request": {
2545
+ "service": "auth",
2546
+ "method": "GET",
2547
+ "path": "/api/v1/auth/me"
2548
+ },
2549
+ "failure": {
2550
+ "type": "timeout"
2551
+ },
2552
+ "expectedError": {
2553
+ "type": "network",
2554
+ "status": 0,
2555
+ "code": "REQUEST_TIMEOUT",
2556
+ "message": "Mitra request timed out",
2557
+ "details": null,
2558
+ "requestId": null,
2559
+ "retryable": true
2560
+ }
2561
+ }
2562
+ ]
2563
+ }