@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
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Manages DuckDB instance and connection lifecycle.
|
|
3
|
-
* @module services/duck-db/duckDBConnectionManager
|
|
4
|
-
*/
|
|
5
|
-
import * as duckdb from "@duckdb/node-api";
|
|
6
|
-
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
7
|
-
import { ErrorHandler, logger, requestContextService, } from "../../utils/index.js";
|
|
8
|
-
const DEFAULT_DB_PATH = ":memory:";
|
|
9
|
-
export class DuckDBConnectionManager {
|
|
10
|
-
dbInstance = null;
|
|
11
|
-
dbConnection = null;
|
|
12
|
-
isInitialized = false;
|
|
13
|
-
currentConfig = null;
|
|
14
|
-
/**
|
|
15
|
-
* Initializes the DuckDB instance and connection.
|
|
16
|
-
* @param {DuckDBServiceConfig} [config] - Configuration for the service.
|
|
17
|
-
* @returns {Promise<void>}
|
|
18
|
-
*/
|
|
19
|
-
async initialize(config) {
|
|
20
|
-
const context = requestContextService.createRequestContext({
|
|
21
|
-
operation: "DuckDBConnectionManager.initialize",
|
|
22
|
-
initialData: config,
|
|
23
|
-
});
|
|
24
|
-
if (this.isInitialized) {
|
|
25
|
-
logger.warning(context, "DuckDBConnectionManager already initialized. Close first to re-initialize.");
|
|
26
|
-
// Potentially compare new config with old config if re-init with changes is desired
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
this.currentConfig = config || {};
|
|
30
|
-
return ErrorHandler.tryCatch(async () => {
|
|
31
|
-
const dbPath = this.currentConfig?.dbPath || DEFAULT_DB_PATH;
|
|
32
|
-
const launchConfig = this.currentConfig?.launchConfig;
|
|
33
|
-
logger.info(context, `Initializing DuckDB instance with path: ${dbPath}`);
|
|
34
|
-
// Pass launchConfig directly to the create method
|
|
35
|
-
// The exact structure for launchConfig might need verification against @duckdb/node-api docs
|
|
36
|
-
// Assuming it takes an object similar to what's in DuckDBServiceConfig
|
|
37
|
-
this.dbInstance = await duckdb.DuckDBInstance.create(dbPath, launchConfig || {});
|
|
38
|
-
this.dbConnection = await this.dbInstance.connect();
|
|
39
|
-
logger.info(context, "DuckDB instance and connection created.");
|
|
40
|
-
// Set isInitialized to true now that core components are ready
|
|
41
|
-
this.isInitialized = true;
|
|
42
|
-
// If launchConfig was successfully passed to create(), this block might no longer be needed
|
|
43
|
-
// or might be adjusted for settings that *can* be applied post-connection.
|
|
44
|
-
// For now, let's comment it out to avoid the original error.
|
|
45
|
-
// if (launchConfig) {
|
|
46
|
-
// for (const [key, value] of Object.entries(launchConfig)) {
|
|
47
|
-
// // Ensure connection is available for run
|
|
48
|
-
// if (!this.dbConnection) {
|
|
49
|
-
// throw new McpError(
|
|
50
|
-
// BaseErrorCode.INTERNAL_ERROR,
|
|
51
|
-
// "Connection not available for applying launch config",
|
|
52
|
-
// context,
|
|
53
|
-
// );
|
|
54
|
-
// }
|
|
55
|
-
// await this.dbConnection.run(
|
|
56
|
-
// `SET ${key}='${String(value).replace(/'/g, "''")}';`,
|
|
57
|
-
// );
|
|
58
|
-
// }
|
|
59
|
-
// logger.info({
|
|
60
|
-
// ...context,
|
|
61
|
-
// launchConfig,
|
|
62
|
-
// }, "Applied launch configuration via SET commands.");
|
|
63
|
-
// }
|
|
64
|
-
if (this.currentConfig?.extensions &&
|
|
65
|
-
this.currentConfig.extensions.length > 0) {
|
|
66
|
-
logger.info({
|
|
67
|
-
...context,
|
|
68
|
-
extensions: this.currentConfig.extensions,
|
|
69
|
-
}, "Loading extensions...");
|
|
70
|
-
for (const extName of this.currentConfig.extensions) {
|
|
71
|
-
await this.loadExtension(extName, context);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// this.isInitialized = true; // Moved earlier
|
|
75
|
-
logger.info(context, "DuckDBConnectionManager initialized successfully.");
|
|
76
|
-
}, {
|
|
77
|
-
operation: "DuckDBConnectionManager.initialize",
|
|
78
|
-
context,
|
|
79
|
-
input: config,
|
|
80
|
-
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
81
|
-
critical: true,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Installs and loads a DuckDB extension.
|
|
86
|
-
* @param {string} extensionName - The name of the extension.
|
|
87
|
-
* @param {RequestContext} parentContext - The parent request context.
|
|
88
|
-
* @returns {Promise<void>}
|
|
89
|
-
*/
|
|
90
|
-
async loadExtension(extensionName, parentContext) {
|
|
91
|
-
this.ensureInitialized(parentContext);
|
|
92
|
-
const context = requestContextService.createRequestContext({
|
|
93
|
-
operation: "DuckDBConnectionManager.loadExtension",
|
|
94
|
-
initialData: { extensionName },
|
|
95
|
-
parentContext,
|
|
96
|
-
});
|
|
97
|
-
return ErrorHandler.tryCatch(async () => {
|
|
98
|
-
logger.info(context, `Installing extension: ${extensionName}`);
|
|
99
|
-
await this.dbConnection.run(`INSTALL '${extensionName.replace(/'/g, "''")}'`);
|
|
100
|
-
logger.info(context, `Loading extension: ${extensionName}`);
|
|
101
|
-
await this.dbConnection.run(`LOAD '${extensionName.replace(/'/g, "''")}'`);
|
|
102
|
-
logger.info(context, `Extension ${extensionName} installed and loaded.`);
|
|
103
|
-
}, {
|
|
104
|
-
operation: "DuckDBConnectionManager.loadExtension",
|
|
105
|
-
context,
|
|
106
|
-
input: { extensionName },
|
|
107
|
-
errorCode: JsonRpcErrorCode.InternalError,
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Closes the DuckDB connection and instance.
|
|
112
|
-
* @returns {Promise<void>}
|
|
113
|
-
*/
|
|
114
|
-
async close() {
|
|
115
|
-
const context = requestContextService.createRequestContext({
|
|
116
|
-
operation: "DuckDBConnectionManager.close",
|
|
117
|
-
});
|
|
118
|
-
if (!this.isInitialized) {
|
|
119
|
-
logger.warning(context, "DuckDBConnectionManager not initialized, nothing to close.");
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
return ErrorHandler.tryCatch(async () => {
|
|
123
|
-
if (this.dbConnection) {
|
|
124
|
-
this.dbConnection.closeSync(); // Use synchronous closeSync
|
|
125
|
-
this.dbConnection = null;
|
|
126
|
-
logger.info(context, "DuckDB connection closed.");
|
|
127
|
-
}
|
|
128
|
-
if (this.dbInstance) {
|
|
129
|
-
this.dbInstance.closeSync(); // Use synchronous closeSync
|
|
130
|
-
this.dbInstance = null;
|
|
131
|
-
logger.info(context, "DuckDB instance closed.");
|
|
132
|
-
}
|
|
133
|
-
this.isInitialized = false;
|
|
134
|
-
this.currentConfig = null;
|
|
135
|
-
logger.info(context, "DuckDBConnectionManager closed successfully.");
|
|
136
|
-
}, {
|
|
137
|
-
operation: "DuckDBConnectionManager.close",
|
|
138
|
-
context,
|
|
139
|
-
errorCode: JsonRpcErrorCode.InternalError,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Ensures that the service is initialized.
|
|
144
|
-
* @param {RequestContext} context - The request context for error reporting.
|
|
145
|
-
* @throws {McpError} If the service is not initialized.
|
|
146
|
-
*/
|
|
147
|
-
ensureInitialized(context) {
|
|
148
|
-
if (!this.isInitialized || !this.dbConnection || !this.dbInstance) {
|
|
149
|
-
throw new McpError(JsonRpcErrorCode.ServiceUnavailable, "DuckDBConnectionManager is not initialized. Call initialize() first.", context);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Gets the underlying DuckDB connection object.
|
|
154
|
-
* @returns {duckdb.DuckDBConnection}
|
|
155
|
-
* @throws {McpError} If the service is not initialized.
|
|
156
|
-
*/
|
|
157
|
-
getConnection() {
|
|
158
|
-
const context = requestContextService.createRequestContext({
|
|
159
|
-
operation: "DuckDBConnectionManager.getConnection",
|
|
160
|
-
});
|
|
161
|
-
this.ensureInitialized(context);
|
|
162
|
-
return this.dbConnection;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Gets the underlying DuckDB instance object.
|
|
166
|
-
* @returns {duckdb.DuckDBInstance}
|
|
167
|
-
* @throws {McpError} If the service is not initialized.
|
|
168
|
-
*/
|
|
169
|
-
getInstance() {
|
|
170
|
-
const context = requestContextService.createRequestContext({
|
|
171
|
-
operation: "DuckDBConnectionManager.getInstance",
|
|
172
|
-
});
|
|
173
|
-
this.ensureInitialized(context);
|
|
174
|
-
return this.dbInstance;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Checks if the service is currently initialized.
|
|
178
|
-
* @returns {boolean} True if initialized, false otherwise.
|
|
179
|
-
*/
|
|
180
|
-
get isServiceInitialized() {
|
|
181
|
-
return this.isInitialized;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=duckDBConnectionManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duckDBConnectionManager.js","sourceRoot":"","sources":["../../../src/services/duck-db/duckDBConnectionManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,MAAM,EAEN,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,eAAe,GAAG,UAAU,CAAC;AAEnC,MAAM,OAAO,uBAAuB;IAC1B,UAAU,GAAiC,IAAI,CAAC;IAChD,YAAY,GAAmC,IAAI,CAAC;IACpD,aAAa,GAAG,KAAK,CAAC;IACtB,aAAa,GAA+B,IAAI,CAAC;IAEzD;;;;OAIG;IACI,KAAK,CAAC,UAAU,CAAC,MAA4B;QAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,oCAAoC;YAC/C,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CACZ,OAAO,EACP,4EAA4E,CAC7E,CAAC;YACF,oFAAoF;YACpF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,EAAE,CAAC;QAElC,OAAO,YAAY,CAAC,QAAQ,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,IAAI,eAAe,CAAC;YAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;YAEtD,MAAM,CAAC,IAAI,CACT,OAAO,EACP,2CAA2C,MAAM,EAAE,CACpD,CAAC;YAEF,kDAAkD;YAClD,6FAA6F;YAC7F,uEAAuE;YACvE,IAAI,CAAC,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAClD,MAAM,EACN,YAAY,IAAI,EAAE,CACnB,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAC;YAEhE,+DAA+D;YAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,4FAA4F;YAC5F,2EAA2E;YAC3E,6DAA6D;YAC7D,sBAAsB;YACtB,+DAA+D;YAC/D,gDAAgD;YAChD,gCAAgC;YAChC,4BAA4B;YAC5B,wCAAwC;YACxC,iEAAiE;YACjE,mBAAmB;YACnB,WAAW;YACX,QAAQ;YACR,mCAAmC;YACnC,8DAA8D;YAC9D,SAAS;YACT,MAAM;YACN,kBAAkB;YAClB,kBAAkB;YAClB,oBAAoB;YACpB,0DAA0D;YAC1D,IAAI;YAEJ,IACE,IAAI,CAAC,aAAa,EAAE,UAAU;gBAC9B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;gBACD,MAAM,CAAC,IAAI,CACT;oBACE,GAAG,OAAO;oBACV,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;iBAC1C,EACD,uBAAuB,CACxB,CAAC;gBACF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;oBACpD,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,MAAM,CAAC,IAAI,CACT,OAAO,EACP,mDAAmD,CACpD,CAAC;QACJ,CAAC,EACD;YACE,SAAS,EAAE,oCAAoC;YAC/C,OAAO;YACP,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,gBAAgB,CAAC,oBAAoB;YAChD,QAAQ,EAAE,IAAI;SACf,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CACxB,aAAqB,EACrB,aAA6B;QAE7B,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,uCAAuC;YAClD,WAAW,EAAE,EAAE,aAAa,EAAE;YAC9B,aAAa;SACd,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC,QAAQ,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,aAAa,EAAE,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,YAAa,CAAC,GAAG,CAC1B,YAAY,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CACjD,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,aAAa,EAAE,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,YAAa,CAAC,GAAG,CAC1B,SAAS,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAC9C,CAAC;YACF,MAAM,CAAC,IAAI,CACT,OAAO,EACP,aAAa,aAAa,wBAAwB,CACnD,CAAC;QACJ,CAAC,EACD;YACE,SAAS,EAAE,uCAAuC;YAClD,OAAO;YACP,KAAK,EAAE,EAAE,aAAa,EAAE;YACxB,SAAS,EAAE,gBAAgB,CAAC,aAAa;SAC1C,CACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAK;QAChB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,+BAA+B;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,CACZ,OAAO,EACP,4DAA4D,CAC7D,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,YAAY,CAAC,QAAQ,CAC1B,KAAK,IAAI,EAAE;YACT,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,4BAA4B;gBAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,4BAA4B;gBACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;QACvE,CAAC,EACD;YACE,SAAS,EAAE,+BAA+B;YAC1C,OAAO;YACP,SAAS,EAAE,gBAAgB,CAAC,aAAa;SAC1C,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,OAAuB;QAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClE,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,kBAAkB,EACnC,sEAAsE,EACtE,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,aAAa;QAClB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,uCAAuC;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,YAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,WAAW;QAChB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,qCAAqC;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,UAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAW,oBAAoB;QAC7B,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Executes SQL queries and manages transactions for DuckDB.
|
|
3
|
-
* @module services/duck-db/duckDBQueryExecutor
|
|
4
|
-
*/
|
|
5
|
-
import * as duckdb from "@duckdb/node-api";
|
|
6
|
-
import { DuckDBQueryResult } from "./types.js";
|
|
7
|
-
export declare class DuckDBQueryExecutor {
|
|
8
|
-
private dbConnection;
|
|
9
|
-
constructor(connection: duckdb.DuckDBConnection);
|
|
10
|
-
run(sql: string, params?: duckdb.DuckDBValue[]): Promise<void>;
|
|
11
|
-
query<T = Record<string, unknown>>(sql: string, params?: duckdb.DuckDBValue[]): Promise<DuckDBQueryResult<T>>;
|
|
12
|
-
stream(sql: string, params?: duckdb.DuckDBValue[]): Promise<duckdb.DuckDBResult>;
|
|
13
|
-
prepare(sql: string): Promise<duckdb.DuckDBPreparedStatement>;
|
|
14
|
-
beginTransaction(): Promise<void>;
|
|
15
|
-
commitTransaction(): Promise<void>;
|
|
16
|
-
rollbackTransaction(): Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=duckDBQueryExecutor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duckDBQueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/services/duck-db/duckDBQueryExecutor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAA0B;gBAElC,UAAU,EAAE,MAAM,CAAC,gBAAgB;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9D,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAoCnB,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,GAC5B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;IAwBlB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAoB7D,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;CAOlD"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Executes SQL queries and manages transactions for DuckDB.
|
|
3
|
-
* @module services/duck-db/duckDBQueryExecutor
|
|
4
|
-
*/
|
|
5
|
-
import { JsonRpcErrorCode } from "../../types-global/errors.js";
|
|
6
|
-
import { ErrorHandler, logger, requestContextService } from "../../utils/index.js";
|
|
7
|
-
export class DuckDBQueryExecutor {
|
|
8
|
-
dbConnection;
|
|
9
|
-
constructor(connection) {
|
|
10
|
-
this.dbConnection = connection;
|
|
11
|
-
}
|
|
12
|
-
async run(sql, params) {
|
|
13
|
-
const context = requestContextService.createRequestContext({
|
|
14
|
-
operation: "DuckDBQueryExecutor.run",
|
|
15
|
-
initialData: { sql, params },
|
|
16
|
-
});
|
|
17
|
-
return ErrorHandler.tryCatch(async () => {
|
|
18
|
-
logger.debug({ ...context, params }, `Executing SQL (run): ${sql}`);
|
|
19
|
-
if (params === undefined) {
|
|
20
|
-
await this.dbConnection.run(sql);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
await this.dbConnection.run(sql, params);
|
|
24
|
-
}
|
|
25
|
-
}, {
|
|
26
|
-
operation: "DuckDBQueryExecutor.run",
|
|
27
|
-
context,
|
|
28
|
-
input: { sql, params },
|
|
29
|
-
errorCode: JsonRpcErrorCode.DatabaseError,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
async query(sql, params) {
|
|
33
|
-
const context = requestContextService.createRequestContext({
|
|
34
|
-
operation: "DuckDBQueryExecutor.query",
|
|
35
|
-
initialData: { sql, params },
|
|
36
|
-
});
|
|
37
|
-
return ErrorHandler.tryCatch(async () => {
|
|
38
|
-
logger.debug({ ...context, params }, `Executing SQL (query): ${sql}`);
|
|
39
|
-
const resultObject = await this.stream(sql, params);
|
|
40
|
-
const rows = (await resultObject.getRows());
|
|
41
|
-
const columnNames = resultObject.columnNames();
|
|
42
|
-
const columnTypes = resultObject
|
|
43
|
-
.columnTypes()
|
|
44
|
-
.map((ct) => ct.typeId);
|
|
45
|
-
return {
|
|
46
|
-
rows: rows,
|
|
47
|
-
columnNames: columnNames,
|
|
48
|
-
columnTypes: columnTypes,
|
|
49
|
-
rowCount: rows.length,
|
|
50
|
-
};
|
|
51
|
-
}, {
|
|
52
|
-
operation: "DuckDBQueryExecutor.query",
|
|
53
|
-
context,
|
|
54
|
-
input: { sql, params },
|
|
55
|
-
errorCode: JsonRpcErrorCode.DatabaseError,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
async stream(sql, params) {
|
|
59
|
-
const context = requestContextService.createRequestContext({
|
|
60
|
-
operation: "DuckDBQueryExecutor.stream",
|
|
61
|
-
initialData: { sql, params },
|
|
62
|
-
});
|
|
63
|
-
return ErrorHandler.tryCatch(async () => {
|
|
64
|
-
logger.debug({ ...context, params }, `Executing SQL (stream): ${sql}`);
|
|
65
|
-
if (params === undefined) {
|
|
66
|
-
return this.dbConnection.stream(sql);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
return this.dbConnection.stream(sql, params);
|
|
70
|
-
}
|
|
71
|
-
}, {
|
|
72
|
-
operation: "DuckDBQueryExecutor.stream",
|
|
73
|
-
context,
|
|
74
|
-
input: { sql, params },
|
|
75
|
-
errorCode: JsonRpcErrorCode.DatabaseError,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
async prepare(sql) {
|
|
79
|
-
const context = requestContextService.createRequestContext({
|
|
80
|
-
operation: "DuckDBQueryExecutor.prepare",
|
|
81
|
-
initialData: { sql },
|
|
82
|
-
});
|
|
83
|
-
return ErrorHandler.tryCatch(async () => {
|
|
84
|
-
logger.debug(context, `Preparing SQL: ${sql}`);
|
|
85
|
-
return this.dbConnection.prepare(sql);
|
|
86
|
-
}, {
|
|
87
|
-
operation: "DuckDBQueryExecutor.prepare",
|
|
88
|
-
context,
|
|
89
|
-
input: { sql },
|
|
90
|
-
errorCode: JsonRpcErrorCode.DatabaseError,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
async beginTransaction() {
|
|
94
|
-
const context = requestContextService.createRequestContext({
|
|
95
|
-
operation: "DuckDBQueryExecutor.beginTransaction",
|
|
96
|
-
});
|
|
97
|
-
await this.run("BEGIN TRANSACTION");
|
|
98
|
-
logger.info(context, "Transaction started.");
|
|
99
|
-
}
|
|
100
|
-
async commitTransaction() {
|
|
101
|
-
const context = requestContextService.createRequestContext({
|
|
102
|
-
operation: "DuckDBQueryExecutor.commitTransaction",
|
|
103
|
-
});
|
|
104
|
-
await this.run("COMMIT");
|
|
105
|
-
logger.info(context, "Transaction committed.");
|
|
106
|
-
}
|
|
107
|
-
async rollbackTransaction() {
|
|
108
|
-
const context = requestContextService.createRequestContext({
|
|
109
|
-
operation: "DuckDBQueryExecutor.rollbackTransaction",
|
|
110
|
-
});
|
|
111
|
-
await this.run("ROLLBACK");
|
|
112
|
-
logger.info(context, "Transaction rolled back.");
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=duckDBQueryExecutor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duckDBQueryExecutor.js","sourceRoot":"","sources":["../../../src/services/duck-db/duckDBQueryExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Implements the DuckDB service for interacting with a DuckDB database.
|
|
3
|
-
* @module services/duck-db/duckDBService
|
|
4
|
-
*/
|
|
5
|
-
import * as duckdb from "@duckdb/node-api";
|
|
6
|
-
import { DuckDBQueryResult, DuckDBServiceConfig, IDuckDBService } from "./types.js";
|
|
7
|
-
export declare class DuckDBService implements IDuckDBService {
|
|
8
|
-
private connectionManager;
|
|
9
|
-
private queryExecutor;
|
|
10
|
-
private isInitialized;
|
|
11
|
-
constructor();
|
|
12
|
-
initialize(config?: DuckDBServiceConfig): Promise<void>;
|
|
13
|
-
private ensureInitialized;
|
|
14
|
-
private validateParams;
|
|
15
|
-
run(sql: string, params?: unknown[]): Promise<void>;
|
|
16
|
-
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<DuckDBQueryResult<T>>;
|
|
17
|
-
stream(sql: string, params?: unknown[]): Promise<duckdb.DuckDBResult>;
|
|
18
|
-
prepare(sql: string): Promise<duckdb.DuckDBPreparedStatement>;
|
|
19
|
-
beginTransaction(): Promise<void>;
|
|
20
|
-
commitTransaction(): Promise<void>;
|
|
21
|
-
rollbackTransaction(): Promise<void>;
|
|
22
|
-
loadExtension(extensionName: string): Promise<void>;
|
|
23
|
-
close(): Promise<void>;
|
|
24
|
-
getRawConnection(): duckdb.DuckDBConnection | null;
|
|
25
|
-
getRawInstance(): duckdb.DuckDBInstance | null;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=duckDBService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duckDBService.d.ts","sourceRoot":"","sources":["../../../src/services/duck-db/duckDBService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAU3C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,aAAa,CAAS;;IAMxB,UAAU,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC7D,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,cAAc;IAiBhB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAU1B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;IAUrE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAS7D,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,GAAG,IAAI;IAOlD,cAAc,IAAI,MAAM,CAAC,cAAc,GAAG,IAAI;CAM/C"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Implements the DuckDB service for interacting with a DuckDB database.
|
|
3
|
-
* @module services/duck-db/duckDBService
|
|
4
|
-
*/
|
|
5
|
-
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
6
|
-
import { ErrorHandler, logger, requestContextService, } from "../../utils/index.js";
|
|
7
|
-
import { DuckDBConnectionManager } from "./duckDBConnectionManager.js";
|
|
8
|
-
import { DuckDBQueryExecutor } from "./duckDBQueryExecutor.js";
|
|
9
|
-
export class DuckDBService {
|
|
10
|
-
connectionManager;
|
|
11
|
-
queryExecutor = null;
|
|
12
|
-
isInitialized = false;
|
|
13
|
-
constructor() {
|
|
14
|
-
this.connectionManager = new DuckDBConnectionManager();
|
|
15
|
-
}
|
|
16
|
-
async initialize(config) {
|
|
17
|
-
const context = requestContextService.createRequestContext({
|
|
18
|
-
operation: "DuckDBService.initialize",
|
|
19
|
-
initialData: config,
|
|
20
|
-
});
|
|
21
|
-
if (this.isInitialized) {
|
|
22
|
-
logger.warning(context, "DuckDBService already initialized. Close first to re-initialize.");
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
return ErrorHandler.tryCatch(async () => {
|
|
26
|
-
await this.connectionManager.initialize(config);
|
|
27
|
-
const connection = this.connectionManager.getConnection();
|
|
28
|
-
this.queryExecutor = new DuckDBQueryExecutor(connection);
|
|
29
|
-
this.isInitialized = true;
|
|
30
|
-
logger.info(context, "DuckDBService initialized successfully.");
|
|
31
|
-
}, {
|
|
32
|
-
operation: "DuckDBService.initialize",
|
|
33
|
-
context,
|
|
34
|
-
input: config,
|
|
35
|
-
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
36
|
-
critical: true,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
ensureInitialized(context) {
|
|
40
|
-
this.connectionManager.ensureInitialized(context); // Delegate to manager
|
|
41
|
-
if (!this.queryExecutor) {
|
|
42
|
-
// This check is mostly for type safety, as connectionManager.ensureInitialized should cover it
|
|
43
|
-
throw new McpError(JsonRpcErrorCode.ServiceUnavailable, "DuckDBQueryExecutor not available. DuckDBService may not be fully initialized.", context);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
validateParams(params, context) {
|
|
47
|
-
if (params === undefined) {
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
if (Array.isArray(params)) {
|
|
51
|
-
return params;
|
|
52
|
-
}
|
|
53
|
-
throw new McpError(JsonRpcErrorCode.InvalidParams, "DuckDB service only supports array-style parameters, not named objects.", context);
|
|
54
|
-
}
|
|
55
|
-
async run(sql, params) {
|
|
56
|
-
const context = requestContextService.createRequestContext({
|
|
57
|
-
operation: "DuckDBService.run",
|
|
58
|
-
initialData: { sql, params },
|
|
59
|
-
});
|
|
60
|
-
this.ensureInitialized(context);
|
|
61
|
-
const validatedParams = this.validateParams(params, context);
|
|
62
|
-
return this.queryExecutor.run(sql, validatedParams);
|
|
63
|
-
}
|
|
64
|
-
async query(sql, params) {
|
|
65
|
-
const context = requestContextService.createRequestContext({
|
|
66
|
-
operation: "DuckDBService.query",
|
|
67
|
-
initialData: { sql, params },
|
|
68
|
-
});
|
|
69
|
-
this.ensureInitialized(context);
|
|
70
|
-
const validatedParams = this.validateParams(params, context);
|
|
71
|
-
return this.queryExecutor.query(sql, validatedParams);
|
|
72
|
-
}
|
|
73
|
-
async stream(sql, params) {
|
|
74
|
-
const context = requestContextService.createRequestContext({
|
|
75
|
-
operation: "DuckDBService.stream",
|
|
76
|
-
initialData: { sql, params },
|
|
77
|
-
});
|
|
78
|
-
this.ensureInitialized(context);
|
|
79
|
-
const validatedParams = this.validateParams(params, context);
|
|
80
|
-
return this.queryExecutor.stream(sql, validatedParams);
|
|
81
|
-
}
|
|
82
|
-
async prepare(sql) {
|
|
83
|
-
const context = requestContextService.createRequestContext({
|
|
84
|
-
operation: "DuckDBService.prepare",
|
|
85
|
-
initialData: { sql },
|
|
86
|
-
});
|
|
87
|
-
this.ensureInitialized(context);
|
|
88
|
-
return this.queryExecutor.prepare(sql);
|
|
89
|
-
}
|
|
90
|
-
async beginTransaction() {
|
|
91
|
-
const context = requestContextService.createRequestContext({
|
|
92
|
-
operation: "DuckDBService.beginTransaction",
|
|
93
|
-
});
|
|
94
|
-
this.ensureInitialized(context);
|
|
95
|
-
return this.queryExecutor.beginTransaction();
|
|
96
|
-
}
|
|
97
|
-
async commitTransaction() {
|
|
98
|
-
const context = requestContextService.createRequestContext({
|
|
99
|
-
operation: "DuckDBService.commitTransaction",
|
|
100
|
-
});
|
|
101
|
-
this.ensureInitialized(context);
|
|
102
|
-
return this.queryExecutor.commitTransaction();
|
|
103
|
-
}
|
|
104
|
-
async rollbackTransaction() {
|
|
105
|
-
const context = requestContextService.createRequestContext({
|
|
106
|
-
operation: "DuckDBService.rollbackTransaction",
|
|
107
|
-
});
|
|
108
|
-
this.ensureInitialized(context);
|
|
109
|
-
return this.queryExecutor.rollbackTransaction();
|
|
110
|
-
}
|
|
111
|
-
async loadExtension(extensionName) {
|
|
112
|
-
const context = requestContextService.createRequestContext({
|
|
113
|
-
operation: "DuckDBService.loadExtension",
|
|
114
|
-
initialData: { extensionName },
|
|
115
|
-
});
|
|
116
|
-
// ensureInitialized is implicitly called by connectionManager.loadExtension
|
|
117
|
-
// if we call ensureInitialized here, it uses the service's context,
|
|
118
|
-
// but loadExtension in manager will create its own.
|
|
119
|
-
// It's better to let the manager handle its own initialization checks.
|
|
120
|
-
return this.connectionManager.loadExtension(extensionName, context);
|
|
121
|
-
}
|
|
122
|
-
async close() {
|
|
123
|
-
const context = requestContextService.createRequestContext({
|
|
124
|
-
operation: "DuckDBService.close",
|
|
125
|
-
});
|
|
126
|
-
// No need to check this.isInitialized here, connectionManager.close() handles it.
|
|
127
|
-
return ErrorHandler.tryCatch(async () => {
|
|
128
|
-
await this.connectionManager.close();
|
|
129
|
-
this.queryExecutor = null;
|
|
130
|
-
this.isInitialized = false;
|
|
131
|
-
logger.info(context, "DuckDBService closed successfully.");
|
|
132
|
-
}, {
|
|
133
|
-
operation: "DuckDBService.close",
|
|
134
|
-
context,
|
|
135
|
-
errorCode: JsonRpcErrorCode.InternalError,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
getRawConnection() {
|
|
139
|
-
if (this.connectionManager.isServiceInitialized) {
|
|
140
|
-
return this.connectionManager.getConnection();
|
|
141
|
-
}
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
getRawInstance() {
|
|
145
|
-
if (this.connectionManager.isServiceInitialized) {
|
|
146
|
-
return this.connectionManager.getInstance();
|
|
147
|
-
}
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=duckDBService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duckDBService.js","sourceRoot":"","sources":["../../../src/services/duck-db/duckDBService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,MAAM,EAEN,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAO/D,MAAM,OAAO,aAAa;IAChB,iBAAiB,CAA0B;IAC3C,aAAa,GAA+B,IAAI,CAAC;IACjD,aAAa,GAAG,KAAK,CAAC;IAE9B;QACE,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAA4B;QAC3C,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,0BAA0B;YACrC,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CACZ,OAAO,EACP,kEAAkE,CACnE,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,YAAY,CAAC,QAAQ,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;YAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAC;QAClE,CAAC,EACD;YACE,SAAS,EAAE,0BAA0B;YACrC,OAAO;YACP,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,gBAAgB,CAAC,oBAAoB;YAChD,QAAQ,EAAE,IAAI;SACf,CACF,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,OAAuB;QAC/C,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;QACzE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,+FAA+F;YAC/F,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,kBAAkB,EACnC,gFAAgF,EAChF,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,MAAe,EACf,OAAuB;QAEvB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAA8B,CAAC;QACxC,CAAC;QACD,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,aAAa,EAC9B,yEAAyE,EACzE,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,MAAkB;QACvC,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,mBAAmB;YAC9B,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,aAAc,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,KAAK,CACT,GAAW,EACX,MAAkB;QAElB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,qBAAqB;YAChC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,aAAc,CAAC,KAAK,CAAI,GAAG,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,MAAkB;QAC1C,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,sBAAsB;YACjC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,aAAc,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,uBAAuB;YAClC,WAAW,EAAE,EAAE,GAAG,EAAE;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,aAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,gCAAgC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,aAAc,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,iCAAiC;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,aAAc,CAAC,iBAAiB,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,mCAAmC;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,aAAc,CAAC,mBAAmB,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,aAAqB;QACvC,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,6BAA6B;YACxC,WAAW,EAAE,EAAE,aAAa,EAAE;SAC/B,CAAC,CAAC;QACH,4EAA4E;QAC5E,oEAAoE;QACpE,oDAAoD;QACpD,uEAAuE;QACvE,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YACzD,SAAS,EAAE,qBAAqB;SACjC,CAAC,CAAC;QAEH,kFAAkF;QAClF,OAAO,YAAY,CAAC,QAAQ,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;QAC7D,CAAC,EACD;YACE,SAAS,EAAE,qBAAqB;YAChC,OAAO;YACP,SAAS,EAAE,gBAAgB,CAAC,aAAa;SAC1C,CACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|