@ibm/ibmi-mcp-server 0.1.2 → 0.3.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.
- package/README.md +2178 -46
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +57 -24
- package/dist/config/index.js.map +1 -1
- package/dist/config/resolver.d.ts.map +1 -1
- package/dist/config/resolver.js.map +1 -1
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js +1 -1
- package/dist/ibmi-mcp-server/services/connectionPool.js +2 -2
- package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts +80 -0
- package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql.tool.js +356 -0
- package/dist/ibmi-mcp-server/tools/executeSql.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql.tool.d.ts +36 -0
- package/dist/ibmi-mcp-server/tools/generateSql.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql.tool.js +281 -0
- package/dist/ibmi-mcp-server/tools/generateSql.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/index.d.ts +85 -0
- package/dist/ibmi-mcp-server/tools/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/index.js +21 -0
- package/dist/ibmi-mcp-server/tools/index.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.d.ts +9 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/configParser.js +58 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts +4 -4
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js +7 -8
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +0 -8
- package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolFactory.js +0 -31
- package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.js +2 -2
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/language/document.d.ts +26 -0
- package/dist/ibmi-mcp-server/utils/language/document.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/document.js +318 -0
- package/dist/ibmi-mcp-server/utils/language/document.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/statement.d.ts +43 -0
- package/dist/ibmi-mcp-server/utils/language/statement.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/statement.js +796 -0
- package/dist/ibmi-mcp-server/utils/language/statement.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/tokens.d.ts +32 -0
- package/dist/ibmi-mcp-server/utils/language/tokens.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/tokens.js +532 -0
- package/dist/ibmi-mcp-server/utils/language/tokens.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/types.d.ts +138 -0
- package/dist/ibmi-mcp-server/utils/language/types.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/language/types.js +93 -0
- package/dist/ibmi-mcp-server/utils/language/types.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.d.ts +48 -0
- package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.js +93 -0
- package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts +35 -59
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +108 -288
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.d.ts +54 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.js +91 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/index.d.ts +13 -2
- package/dist/mcp-server/tools/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/index.js +29 -9
- package/dist/mcp-server/tools/index.js.map +1 -1
- package/dist/mcp-server/tools/utils/index.d.ts +7 -0
- package/dist/mcp-server/tools/utils/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/index.js +7 -0
- package/dist/mcp-server/tools/utils/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/tool-factory.d.ts +129 -0
- package/dist/mcp-server/tools/utils/tool-factory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/tool-factory.js +179 -0
- package/dist/mcp-server/tools/utils/tool-factory.js.map +1 -0
- package/dist/mcp-server/tools/utils/types.d.ts +117 -0
- package/dist/mcp-server/tools/utils/types.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/types.js +11 -0
- package/dist/mcp-server/tools/utils/types.js.map +1 -0
- package/dist/mcp-server/transports/core/cleanupTransformStream.d.ts +26 -0
- package/dist/mcp-server/transports/core/cleanupTransformStream.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/cleanupTransformStream.js +60 -0
- package/dist/mcp-server/transports/core/cleanupTransformStream.js.map +1 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.d.ts +1 -1
- package/dist/mcp-server/transports/core/statefulTransportManager.d.ts.map +1 -1
- package/dist/mcp-server/transports/core/statefulTransportManager.js +50 -40
- package/dist/mcp-server/transports/core/statefulTransportManager.js.map +1 -1
- package/dist/mcp-server/transports/core/statelessTransportManager.d.ts +2 -13
- package/dist/mcp-server/transports/core/statelessTransportManager.d.ts.map +1 -1
- package/dist/mcp-server/transports/core/statelessTransportManager.js +35 -62
- package/dist/mcp-server/transports/core/statelessTransportManager.js.map +1 -1
- package/dist/mcp-server/transports/core/transportRequest.d.ts +1 -2
- package/dist/mcp-server/transports/core/transportRequest.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.js +1 -3
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.js.map +1 -1
- package/dist/utils/internal/logger.d.ts +5 -0
- package/dist/utils/internal/logger.d.ts.map +1 -1
- package/dist/utils/internal/logger.js +65 -36
- package/dist/utils/internal/logger.js.map +1 -1
- package/package.json +29 -23
- package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts +0 -9
- package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts.map +0 -1
- package/dist/ibmi-mcp-server/tools/executeSql/index.js +0 -9
- package/dist/ibmi-mcp-server/tools/executeSql/index.js.map +0 -1
- package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts +0 -51
- package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts.map +0 -1
- package/dist/ibmi-mcp-server/tools/executeSql/logic.js +0 -179
- package/dist/ibmi-mcp-server/tools/executeSql/logic.js.map +0 -1
- package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts +0 -52
- package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts.map +0 -1
- package/dist/ibmi-mcp-server/tools/executeSql/registration.js +0 -161
- package/dist/ibmi-mcp-server/tools/executeSql/registration.js.map +0 -1
- package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts +0 -13
- package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts.map +0 -1
- package/dist/ibmi-mcp-server/tools/generateSql/index.js +0 -13
- package/dist/ibmi-mcp-server/tools/generateSql/index.js.map +0 -1
- package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts +0 -64
- package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts.map +0 -1
- package/dist/ibmi-mcp-server/tools/generateSql/logic.js +0 -190
- package/dist/ibmi-mcp-server/tools/generateSql/logic.js.map +0 -1
- package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts +0 -18
- package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts.map +0 -1
- package/dist/ibmi-mcp-server/tools/generateSql/registration.js +0 -64
- package/dist/ibmi-mcp-server/tools/generateSql/registration.js.map +0 -1
- package/dist/mcp-server/tools/catFactFetcher/index.d.ts +0 -8
- package/dist/mcp-server/tools/catFactFetcher/index.d.ts.map +0 -1
- package/dist/mcp-server/tools/catFactFetcher/index.js +0 -8
- package/dist/mcp-server/tools/catFactFetcher/index.js.map +0 -1
- package/dist/mcp-server/tools/catFactFetcher/logic.d.ts +0 -52
- package/dist/mcp-server/tools/catFactFetcher/logic.d.ts.map +0 -1
- package/dist/mcp-server/tools/catFactFetcher/logic.js +0 -95
- package/dist/mcp-server/tools/catFactFetcher/logic.js.map +0 -1
- package/dist/mcp-server/tools/catFactFetcher/registration.d.ts +0 -9
- package/dist/mcp-server/tools/catFactFetcher/registration.d.ts.map +0 -1
- package/dist/mcp-server/tools/catFactFetcher/registration.js +0 -43
- package/dist/mcp-server/tools/catFactFetcher/registration.js.map +0 -1
- package/dist/mcp-server/tools/echoTool/index.d.ts +0 -13
- package/dist/mcp-server/tools/echoTool/index.d.ts.map +0 -1
- package/dist/mcp-server/tools/echoTool/index.js +0 -13
- package/dist/mcp-server/tools/echoTool/index.js.map +0 -1
- package/dist/mcp-server/tools/echoTool/logic.d.ts +0 -69
- package/dist/mcp-server/tools/echoTool/logic.d.ts.map +0 -1
- package/dist/mcp-server/tools/echoTool/logic.js +0 -119
- package/dist/mcp-server/tools/echoTool/logic.js.map +0 -1
- package/dist/mcp-server/tools/echoTool/registration.d.ts +0 -9
- package/dist/mcp-server/tools/echoTool/registration.d.ts.map +0 -1
- package/dist/mcp-server/tools/echoTool/registration.js +0 -45
- package/dist/mcp-server/tools/echoTool/registration.js.map +0 -1
- package/dist/mcp-server/tools/imageTest/index.d.ts +0 -7
- package/dist/mcp-server/tools/imageTest/index.d.ts.map +0 -1
- package/dist/mcp-server/tools/imageTest/index.js +0 -7
- package/dist/mcp-server/tools/imageTest/index.js.map +0 -1
- package/dist/mcp-server/tools/imageTest/logic.d.ts +0 -27
- package/dist/mcp-server/tools/imageTest/logic.d.ts.map +0 -1
- package/dist/mcp-server/tools/imageTest/logic.js +0 -44
- package/dist/mcp-server/tools/imageTest/logic.js.map +0 -1
- package/dist/mcp-server/tools/imageTest/registration.d.ts +0 -9
- package/dist/mcp-server/tools/imageTest/registration.d.ts.map +0 -1
- package/dist/mcp-server/tools/imageTest/registration.js +0 -49
- package/dist/mcp-server/tools/imageTest/registration.js.map +0 -1
- package/dist/mcp-server/tools/utils/tool-utils.d.ts +0 -43
- package/dist/mcp-server/tools/utils/tool-utils.d.ts.map +0 -1
- package/dist/mcp-server/tools/utils/tool-utils.js +0 -44
- package/dist/mcp-server/tools/utils/tool-utils.js.map +0 -1
- package/dist/mcp-server/transports/core/headerUtils.d.ts +0 -27
- package/dist/mcp-server/transports/core/headerUtils.d.ts.map +0 -1
- package/dist/mcp-server/transports/core/headerUtils.js +0 -53
- package/dist/mcp-server/transports/core/headerUtils.js.map +0 -1
- package/dist/mcp-server/transports/core/honoNodeBridge.d.ts +0 -77
- package/dist/mcp-server/transports/core/honoNodeBridge.d.ts.map +0 -1
- package/dist/mcp-server/transports/core/honoNodeBridge.js +0 -150
- package/dist/mcp-server/transports/core/honoNodeBridge.js.map +0 -1
- package/dist/services/duck-db/duckDBConnectionManager.d.ts +0 -55
- package/dist/services/duck-db/duckDBConnectionManager.d.ts.map +0 -1
- package/dist/services/duck-db/duckDBConnectionManager.js +0 -184
- package/dist/services/duck-db/duckDBConnectionManager.js.map +0 -1
- package/dist/services/duck-db/duckDBQueryExecutor.d.ts +0 -18
- package/dist/services/duck-db/duckDBQueryExecutor.d.ts.map +0 -1
- package/dist/services/duck-db/duckDBQueryExecutor.js +0 -115
- package/dist/services/duck-db/duckDBQueryExecutor.js.map +0 -1
- package/dist/services/duck-db/duckDBService.d.ts +0 -27
- package/dist/services/duck-db/duckDBService.d.ts.map +0 -1
- package/dist/services/duck-db/duckDBService.js +0 -151
- package/dist/services/duck-db/duckDBService.js.map +0 -1
- package/dist/services/duck-db/types.d.ts +0 -135
- package/dist/services/duck-db/types.d.ts.map +0 -1
- package/dist/services/duck-db/types.js +0 -6
- package/dist/services/duck-db/types.js.map +0 -1
- package/dist/services/llm-providers/openRouterProvider.d.ts +0 -36
- package/dist/services/llm-providers/openRouterProvider.d.ts.map +0 -1
- package/dist/services/llm-providers/openRouterProvider.js +0 -235
- package/dist/services/llm-providers/openRouterProvider.js.map +0 -1
- package/dist/services/supabase/supabaseClient.d.ts +0 -25
- package/dist/services/supabase/supabaseClient.d.ts.map +0 -1
- package/dist/services/supabase/supabaseClient.js +0 -68
- package/dist/services/supabase/supabaseClient.js.map +0 -1
- package/dist/storage/duckdbExample.d.ts +0 -8
- package/dist/storage/duckdbExample.d.ts.map +0 -1
- package/dist/storage/duckdbExample.js +0 -197
- package/dist/storage/duckdbExample.js.map +0 -1
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate SQL DDL Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates SQL DDL statements for IBM i database objects using the QSYS2.GENERATE_SQL procedure.
|
|
5
|
+
* Migrated from 3-file pattern to factory pattern.
|
|
6
|
+
*
|
|
7
|
+
* @module generateSql.tool
|
|
8
|
+
* @feature 001-tool-factory
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
12
|
+
import { logger } from "../../utils/internal/logger.js";
|
|
13
|
+
import { IBMiConnectionPool } from "../services/connectionPool.js";
|
|
14
|
+
import { defineTool } from "../../mcp-server/tools/utils/tool-factory.js";
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Constants & Types
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Supported IBM i database object types for DDL generation.
|
|
20
|
+
*/
|
|
21
|
+
const OBJECT_TYPES = [
|
|
22
|
+
"ALIAS",
|
|
23
|
+
"CONSTRAINT",
|
|
24
|
+
"FUNCTION",
|
|
25
|
+
"INDEX",
|
|
26
|
+
"MASK",
|
|
27
|
+
"PERMISSION",
|
|
28
|
+
"PROCEDURE",
|
|
29
|
+
"SCHEMA",
|
|
30
|
+
"SEQUENCE",
|
|
31
|
+
"TABLE",
|
|
32
|
+
"TRIGGER",
|
|
33
|
+
"TYPE",
|
|
34
|
+
"VARIABLE",
|
|
35
|
+
"VIEW",
|
|
36
|
+
"XSR",
|
|
37
|
+
];
|
|
38
|
+
// =============================================================================
|
|
39
|
+
// Schemas
|
|
40
|
+
// =============================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Input schema for generating SQL DDL.
|
|
43
|
+
*/
|
|
44
|
+
const GenerateSqlInputSchema = z.object({
|
|
45
|
+
object_name: z
|
|
46
|
+
.string()
|
|
47
|
+
.min(1, "Object name cannot be empty.")
|
|
48
|
+
.max(128, "Object name cannot exceed 128 characters.")
|
|
49
|
+
.describe("The name of the IBM i database object to generate DDL for."),
|
|
50
|
+
object_library: z
|
|
51
|
+
.string()
|
|
52
|
+
.min(1, "Library name cannot be empty.")
|
|
53
|
+
.max(128, "Library name cannot exceed 128 characters.")
|
|
54
|
+
.default("QSYS2")
|
|
55
|
+
.describe("The library where the database object is located. Defaults to QSYS2."),
|
|
56
|
+
object_type: z
|
|
57
|
+
.enum(OBJECT_TYPES)
|
|
58
|
+
.default("TABLE")
|
|
59
|
+
.describe("The type of database object to generate DDL for. Valid types include TABLE, VIEW, INDEX, PROCEDURE, FUNCTION, etc."),
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* Output schema for generated SQL DDL.
|
|
63
|
+
*/
|
|
64
|
+
const GenerateSqlOutputSchema = z.object({
|
|
65
|
+
success: z.boolean().describe("Whether the DDL generation was successful."),
|
|
66
|
+
sql: z
|
|
67
|
+
.string()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("The generated DDL SQL statements for the specified database object."),
|
|
70
|
+
object_name: z
|
|
71
|
+
.string()
|
|
72
|
+
.describe("The name of the object the DDL was generated for."),
|
|
73
|
+
object_library: z
|
|
74
|
+
.string()
|
|
75
|
+
.describe("The library of the object the DDL was generated for."),
|
|
76
|
+
object_type: z
|
|
77
|
+
.string()
|
|
78
|
+
.describe("The type of the object the DDL was generated for."),
|
|
79
|
+
executionTime: z
|
|
80
|
+
.number()
|
|
81
|
+
.optional()
|
|
82
|
+
.describe("DDL generation execution time in milliseconds."),
|
|
83
|
+
error: z
|
|
84
|
+
.object({
|
|
85
|
+
code: z.string().describe("Error code"),
|
|
86
|
+
message: z.string().describe("Error message"),
|
|
87
|
+
details: z.record(z.unknown()).optional().describe("Error details"),
|
|
88
|
+
})
|
|
89
|
+
.optional()
|
|
90
|
+
.describe("Error information if the DDL generation failed."),
|
|
91
|
+
});
|
|
92
|
+
// =============================================================================
|
|
93
|
+
// Business Logic
|
|
94
|
+
// =============================================================================
|
|
95
|
+
/**
|
|
96
|
+
* Core logic for generating SQL DDL.
|
|
97
|
+
* Calls the QSYS2.GENERATE_SQL procedure to generate DDL for IBM i database objects.
|
|
98
|
+
*/
|
|
99
|
+
async function generateSqlLogic(params, appContext, _sdkContext) {
|
|
100
|
+
logger.debug({ ...appContext, toolInput: params }, "Processing generate SQL DDL logic.");
|
|
101
|
+
const sql = `CALL QSYS2.GENERATE_SQL(
|
|
102
|
+
DATABASE_OBJECT_NAME => ?,
|
|
103
|
+
DATABASE_OBJECT_LIBRARY_NAME => ?,
|
|
104
|
+
DATABASE_OBJECT_TYPE => ?,
|
|
105
|
+
CREATE_OR_REPLACE_OPTION => '1',
|
|
106
|
+
PRIVILEGES_OPTION => '0',
|
|
107
|
+
STATEMENT_FORMATTING_OPTION => '0',
|
|
108
|
+
SOURCE_STREAM_FILE_END_OF_LINE => 'LF',
|
|
109
|
+
SOURCE_STREAM_FILE_CCSID => 1208
|
|
110
|
+
)`;
|
|
111
|
+
const startTime = Date.now();
|
|
112
|
+
try {
|
|
113
|
+
// Execute the GENERATE_SQL procedure using pagination to get all results
|
|
114
|
+
const result = await IBMiConnectionPool.executeQueryWithPagination(sql, [params.object_name, params.object_library, params.object_type], appContext, 500);
|
|
115
|
+
const executionTime = Date.now() - startTime;
|
|
116
|
+
if (!result.success) {
|
|
117
|
+
// Return error response that matches schema
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
object_name: params.object_name,
|
|
121
|
+
object_library: params.object_library,
|
|
122
|
+
object_type: params.object_type,
|
|
123
|
+
executionTime,
|
|
124
|
+
error: {
|
|
125
|
+
code: String(JsonRpcErrorCode.DatabaseError),
|
|
126
|
+
message: "SQL DDL generation failed",
|
|
127
|
+
details: {
|
|
128
|
+
sqlReturnCode: result.sql_rc,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Process the result data to extract the generated DDL
|
|
134
|
+
let generatedSql = "";
|
|
135
|
+
if (result.data && Array.isArray(result.data)) {
|
|
136
|
+
logger.debug({
|
|
137
|
+
...appContext,
|
|
138
|
+
totalRows: result.data.length,
|
|
139
|
+
firstRowKeys: result.data[0] ? Object.keys(result.data[0]) : [],
|
|
140
|
+
}, "Processing GENERATE_SQL result data.");
|
|
141
|
+
// Build the result string from the SRCDTA column
|
|
142
|
+
const resultStrings = [];
|
|
143
|
+
for (const res of result.data) {
|
|
144
|
+
if (res && typeof res === "object" && "SRCDTA" in res) {
|
|
145
|
+
const srcData = res.SRCDTA;
|
|
146
|
+
if (srcData && typeof srcData === "string") {
|
|
147
|
+
resultStrings.push(srcData);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
generatedSql = resultStrings.join("\n");
|
|
152
|
+
logger.debug({
|
|
153
|
+
...appContext,
|
|
154
|
+
processedRows: resultStrings.length,
|
|
155
|
+
totalDdlLength: generatedSql.length,
|
|
156
|
+
avgRowLength: resultStrings.length > 0
|
|
157
|
+
? Math.round(generatedSql.length / resultStrings.length)
|
|
158
|
+
: 0,
|
|
159
|
+
}, "DDL extraction completed.");
|
|
160
|
+
}
|
|
161
|
+
if (!generatedSql || generatedSql.trim().length === 0) {
|
|
162
|
+
// Return error response that matches schema
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
object_name: params.object_name,
|
|
166
|
+
object_library: params.object_library,
|
|
167
|
+
object_type: params.object_type,
|
|
168
|
+
executionTime,
|
|
169
|
+
error: {
|
|
170
|
+
code: String(JsonRpcErrorCode.DatabaseError),
|
|
171
|
+
message: "No SQL DDL generated for the specified object",
|
|
172
|
+
details: {
|
|
173
|
+
resultRowCount: result.data?.length || 0,
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const response = {
|
|
179
|
+
success: true,
|
|
180
|
+
sql: generatedSql.trim(),
|
|
181
|
+
object_name: params.object_name,
|
|
182
|
+
object_library: params.object_library,
|
|
183
|
+
object_type: params.object_type,
|
|
184
|
+
executionTime,
|
|
185
|
+
};
|
|
186
|
+
logger.debug({
|
|
187
|
+
...appContext,
|
|
188
|
+
objectName: params.object_name,
|
|
189
|
+
objectLibrary: params.object_library,
|
|
190
|
+
objectType: params.object_type,
|
|
191
|
+
sqlLength: response.sql?.length || 0,
|
|
192
|
+
executionTime,
|
|
193
|
+
rowCount: result.data?.length || 0,
|
|
194
|
+
}, "SQL DDL generated successfully.");
|
|
195
|
+
return response;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const executionTime = Date.now() - startTime;
|
|
199
|
+
logger.error({
|
|
200
|
+
...appContext,
|
|
201
|
+
error: error instanceof Error ? error.message : String(error),
|
|
202
|
+
objectName: params.object_name,
|
|
203
|
+
objectLibrary: params.object_library,
|
|
204
|
+
objectType: params.object_type,
|
|
205
|
+
executionTime,
|
|
206
|
+
}, "SQL DDL generation failed.");
|
|
207
|
+
// Return error response that matches schema instead of throwing
|
|
208
|
+
if (error instanceof McpError) {
|
|
209
|
+
return {
|
|
210
|
+
success: false,
|
|
211
|
+
object_name: params.object_name,
|
|
212
|
+
object_library: params.object_library,
|
|
213
|
+
object_type: params.object_type,
|
|
214
|
+
executionTime,
|
|
215
|
+
error: {
|
|
216
|
+
code: String(error.code),
|
|
217
|
+
message: error.message,
|
|
218
|
+
details: error.details,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Handle unexpected errors
|
|
223
|
+
return {
|
|
224
|
+
success: false,
|
|
225
|
+
object_name: params.object_name,
|
|
226
|
+
object_library: params.object_library,
|
|
227
|
+
object_type: params.object_type,
|
|
228
|
+
executionTime,
|
|
229
|
+
error: {
|
|
230
|
+
code: String(JsonRpcErrorCode.DatabaseError),
|
|
231
|
+
message: `SQL DDL generation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
232
|
+
details: {
|
|
233
|
+
originalError: error instanceof Error ? error.name : "Unknown",
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// =============================================================================
|
|
240
|
+
// Custom Response Formatter
|
|
241
|
+
// =============================================================================
|
|
242
|
+
const generateSqlResponseFormatter = (result) => {
|
|
243
|
+
if (!result.success) {
|
|
244
|
+
// Format error response
|
|
245
|
+
const errorMessage = result.error?.message || "SQL DDL generation failed";
|
|
246
|
+
const errorDetails = result.error?.details
|
|
247
|
+
? `\n\nDetails:\n${JSON.stringify(result.error.details, null, 2)}`
|
|
248
|
+
: "";
|
|
249
|
+
return [
|
|
250
|
+
{
|
|
251
|
+
type: "text",
|
|
252
|
+
text: `Error: ${errorMessage}${errorDetails}`,
|
|
253
|
+
},
|
|
254
|
+
];
|
|
255
|
+
}
|
|
256
|
+
// Format success response
|
|
257
|
+
return [
|
|
258
|
+
{
|
|
259
|
+
type: "text",
|
|
260
|
+
text: `Successfully generated SQL DDL for ${result.object_type} '${result.object_name}' in library '${result.object_library}':\n\n${result.sql}`,
|
|
261
|
+
},
|
|
262
|
+
];
|
|
263
|
+
};
|
|
264
|
+
// =============================================================================
|
|
265
|
+
// Tool Definition
|
|
266
|
+
// =============================================================================
|
|
267
|
+
export const generateSqlTool = defineTool({
|
|
268
|
+
name: "describe_sql_object",
|
|
269
|
+
title: "Generate SQL DDL",
|
|
270
|
+
description: "Describes IBM i database objects by generating their SQL DDL statements. Useful for understanding object structure and recreating objects.",
|
|
271
|
+
inputSchema: GenerateSqlInputSchema,
|
|
272
|
+
outputSchema: GenerateSqlOutputSchema,
|
|
273
|
+
logic: generateSqlLogic,
|
|
274
|
+
responseFormatter: generateSqlResponseFormatter,
|
|
275
|
+
annotations: {
|
|
276
|
+
readOnlyHint: true, // Generates DDL which is descriptive, not modifying
|
|
277
|
+
destructiveHint: false,
|
|
278
|
+
openWorldHint: false,
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
//# sourceMappingURL=generateSql.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSql.tool.js","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/tools/generateSql.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Definitions Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* Centralized export of all factory pattern tool definitions.
|
|
5
|
+
*
|
|
6
|
+
* @module tools/definitions
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Array of all tool definitions for automated registration.
|
|
10
|
+
*
|
|
11
|
+
* To add a new tool:
|
|
12
|
+
* 1. Create the tool definition file (e.g., myTool.tool.ts)
|
|
13
|
+
* 2. Import it above
|
|
14
|
+
* 3. Add it to this array
|
|
15
|
+
*
|
|
16
|
+
* The ToolRegistry will automatically register all tools in this array.
|
|
17
|
+
*/
|
|
18
|
+
export declare const allToolDefinitions: (import("../../mcp-server/tools/utils/types.js").ToolDefinition<{
|
|
19
|
+
object_name: import("zod").ZodString;
|
|
20
|
+
object_library: import("zod").ZodDefault<import("zod").ZodString>;
|
|
21
|
+
object_type: import("zod").ZodDefault<import("zod").ZodEnum<["ALIAS", "CONSTRAINT", "FUNCTION", "INDEX", "MASK", "PERMISSION", "PROCEDURE", "SCHEMA", "SEQUENCE", "TABLE", "TRIGGER", "TYPE", "VARIABLE", "VIEW", "XSR"]>>;
|
|
22
|
+
}, {
|
|
23
|
+
success: import("zod").ZodBoolean;
|
|
24
|
+
sql: import("zod").ZodOptional<import("zod").ZodString>;
|
|
25
|
+
object_name: import("zod").ZodString;
|
|
26
|
+
object_library: import("zod").ZodString;
|
|
27
|
+
object_type: import("zod").ZodString;
|
|
28
|
+
executionTime: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
29
|
+
error: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
30
|
+
code: import("zod").ZodString;
|
|
31
|
+
message: import("zod").ZodString;
|
|
32
|
+
details: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
33
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
34
|
+
code: string;
|
|
35
|
+
message: string;
|
|
36
|
+
details?: Record<string, unknown> | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
code: string;
|
|
39
|
+
message: string;
|
|
40
|
+
details?: Record<string, unknown> | undefined;
|
|
41
|
+
}>>;
|
|
42
|
+
}> | import("../../mcp-server/tools/utils/types.js").ToolDefinition<{
|
|
43
|
+
sql: import("zod").ZodString;
|
|
44
|
+
}, {
|
|
45
|
+
success: import("zod").ZodBoolean;
|
|
46
|
+
data: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>, "many">>;
|
|
47
|
+
rowCount: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
48
|
+
executionTime: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
49
|
+
metadata: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
50
|
+
columns: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
51
|
+
name: import("zod").ZodString;
|
|
52
|
+
type: import("zod").ZodString;
|
|
53
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
54
|
+
type: string;
|
|
55
|
+
name: string;
|
|
56
|
+
}, {
|
|
57
|
+
type: string;
|
|
58
|
+
name: string;
|
|
59
|
+
}>, "many">>;
|
|
60
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
61
|
+
columns?: {
|
|
62
|
+
type: string;
|
|
63
|
+
name: string;
|
|
64
|
+
}[] | undefined;
|
|
65
|
+
}, {
|
|
66
|
+
columns?: {
|
|
67
|
+
type: string;
|
|
68
|
+
name: string;
|
|
69
|
+
}[] | undefined;
|
|
70
|
+
}>>;
|
|
71
|
+
error: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
72
|
+
code: import("zod").ZodString;
|
|
73
|
+
message: import("zod").ZodString;
|
|
74
|
+
details: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
75
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
76
|
+
code: string;
|
|
77
|
+
message: string;
|
|
78
|
+
details?: Record<string, unknown> | undefined;
|
|
79
|
+
}, {
|
|
80
|
+
code: string;
|
|
81
|
+
message: string;
|
|
82
|
+
details?: Record<string, unknown> | undefined;
|
|
83
|
+
}>>;
|
|
84
|
+
}>)[];
|
|
85
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAAoC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Definitions Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* Centralized export of all factory pattern tool definitions.
|
|
5
|
+
*
|
|
6
|
+
* @module tools/definitions
|
|
7
|
+
*/
|
|
8
|
+
import { executeSqlTool } from "./executeSql.tool.js";
|
|
9
|
+
import { generateSqlTool } from "./generateSql.tool.js";
|
|
10
|
+
/**
|
|
11
|
+
* Array of all tool definitions for automated registration.
|
|
12
|
+
*
|
|
13
|
+
* To add a new tool:
|
|
14
|
+
* 1. Create the tool definition file (e.g., myTool.tool.ts)
|
|
15
|
+
* 2. Import it above
|
|
16
|
+
* 3. Add it to this array
|
|
17
|
+
*
|
|
18
|
+
* The ToolRegistry will automatically register all tools in this array.
|
|
19
|
+
*/
|
|
20
|
+
export const allToolDefinitions = [executeSqlTool, generateSqlTool];
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC"}
|
|
@@ -52,6 +52,15 @@ export declare class ConfigParser {
|
|
|
52
52
|
* @private
|
|
53
53
|
*/
|
|
54
54
|
private static validateToolRequirements;
|
|
55
|
+
/**
|
|
56
|
+
* Validate SQL statements for security at load time
|
|
57
|
+
* Fails server startup if security violations found
|
|
58
|
+
* @param config - Parsed YAML configuration
|
|
59
|
+
* @param context - Request context for logging
|
|
60
|
+
* @returns Array of validation errors
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
private static validateSqlSecurity;
|
|
55
64
|
/**
|
|
56
65
|
* Process tools from YAML configuration into runtime format
|
|
57
66
|
* @param config - Validated YAML configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configParser.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/config/configParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,aAAa,EAAkB,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAEL,cAAc,EACf,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"configParser.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/config/configParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,aAAa,EAAkB,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAEL,cAAc,EACf,MAAM,oCAAoC,CAAC;AAW5C;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;OAKG;WACU,aAAa,CACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC;IAqLzB;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;IA4B9C;;;;;;;;;OASG;IACH,MAAM,CAAC,qCAAqC,CAC1C,OAAO,EAAE,MAAM,EACf,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM;IA0CT;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAuB3C;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAkBvC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAyDlC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAwD3B;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG;QACrD,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IAWD;;;OAGG;IACH,MAAM,CAAC,0BAA0B,IAAI,MAAM,EAAE;CAG9C"}
|
|
@@ -12,6 +12,7 @@ import { requestContextService, } from "../../../utils/internal/requestContext.j
|
|
|
12
12
|
// Import schemas from centralized location
|
|
13
13
|
import { SqlToolsConfigSchema, SqlToolParameterSchema, } from "../../schemas/index.js";
|
|
14
14
|
import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
|
|
15
|
+
import { SqlSecurityValidator } from "../security/sqlSecurityValidator.js";
|
|
15
16
|
/**
|
|
16
17
|
* YAML configuration parser with validation and environment variable interpolation
|
|
17
18
|
*/
|
|
@@ -90,6 +91,18 @@ export class ConfigParser {
|
|
|
90
91
|
errors: toolValidationErrors,
|
|
91
92
|
};
|
|
92
93
|
}
|
|
94
|
+
// Validate SQL security at load time (fail-fast)
|
|
95
|
+
const securityValidationErrors = this.validateSqlSecurity(config, operationContext);
|
|
96
|
+
if (securityValidationErrors.length > 0) {
|
|
97
|
+
logger.error({
|
|
98
|
+
...operationContext,
|
|
99
|
+
errors: securityValidationErrors,
|
|
100
|
+
}, "SQL security validation failed at load time");
|
|
101
|
+
return {
|
|
102
|
+
success: false,
|
|
103
|
+
errors: securityValidationErrors,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
93
106
|
// Process tools
|
|
94
107
|
const processedTools = this.processTools(config);
|
|
95
108
|
// Count disabled tools
|
|
@@ -233,6 +246,51 @@ export class ConfigParser {
|
|
|
233
246
|
});
|
|
234
247
|
return errors;
|
|
235
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Validate SQL statements for security at load time
|
|
251
|
+
* Fails server startup if security violations found
|
|
252
|
+
* @param config - Parsed YAML configuration
|
|
253
|
+
* @param context - Request context for logging
|
|
254
|
+
* @returns Array of validation errors
|
|
255
|
+
* @private
|
|
256
|
+
*/
|
|
257
|
+
static validateSqlSecurity(config, context) {
|
|
258
|
+
const errors = [];
|
|
259
|
+
// Skip if no tools defined
|
|
260
|
+
if (!config.tools) {
|
|
261
|
+
return errors;
|
|
262
|
+
}
|
|
263
|
+
Object.entries(config.tools).forEach(([toolName, tool]) => {
|
|
264
|
+
// Skip disabled tools
|
|
265
|
+
if (tool.enabled === false) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// Skip tools without statements
|
|
269
|
+
if (!tool.statement?.trim()) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
try {
|
|
273
|
+
// Build security config from tool
|
|
274
|
+
const securityConfig = {
|
|
275
|
+
readOnly: tool.security?.readOnly ?? true,
|
|
276
|
+
maxQueryLength: tool.security?.maxQueryLength ?? 10000,
|
|
277
|
+
forbiddenKeywords: tool.security?.forbiddenKeywords,
|
|
278
|
+
};
|
|
279
|
+
// Validate SQL statement at load time
|
|
280
|
+
SqlSecurityValidator.validateQuery(tool.statement, securityConfig, context);
|
|
281
|
+
logger.debug({ ...context, toolName }, `SQL security validation passed at load time for tool: ${toolName}`);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
if (error instanceof McpError) {
|
|
285
|
+
errors.push(`Tool '${toolName}' has security violation: ${error.message}`);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
errors.push(`Tool '${toolName}' validation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
return errors;
|
|
293
|
+
}
|
|
236
294
|
/**
|
|
237
295
|
* Process tools from YAML configuration into runtime format
|
|
238
296
|
* @param config - Validated YAML configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configParser.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/config/configParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,qBAAqB,GAEtB,MAAM,oCAAoC,CAAC;AAE5C,2CAA2C;AAC3C,OAAO,EACL,oBAAoB,EACpB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"configParser.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/config/configParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -560,7 +560,7 @@ export class ToolConfigBuilder {
|
|
|
560
560
|
for (const [sourceName, sourceConfig] of Object.entries(source.sources)) {
|
|
561
561
|
if (target.sources[sourceName]) {
|
|
562
562
|
if (!options.allowDuplicateSources) {
|
|
563
|
-
throw new McpError(JsonRpcErrorCode.ConfigurationError, `Duplicate source name: ${sourceName}`);
|
|
563
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, `Duplicate source name: ${sourceName}. To allow duplicate source names, set YAML_ALLOW_DUPLICATE_SOURCES=true in server .env`);
|
|
564
564
|
}
|
|
565
565
|
logger.warning(context || {}, `Overriding existing source: ${sourceName}`);
|
|
566
566
|
}
|