@ibm/ibmi-mcp-server 0.1.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 +88 -0
- package/dist/config/index.d.ts +100 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +463 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/resolver.d.ts +32 -0
- package/dist/config/resolver.d.ts.map +1 -0
- package/dist/config/resolver.js +60 -0
- package/dist/config/resolver.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/crypto.d.ts +11 -0
- package/dist/ibmi-mcp-server/auth/crypto.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/crypto.js +100 -0
- package/dist/ibmi-mcp-server/auth/crypto.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts +28 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js +243 -0
- package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/index.d.ts +9 -0
- package/dist/ibmi-mcp-server/auth/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/index.js +8 -0
- package/dist/ibmi-mcp-server/auth/index.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.d.ts +86 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.js +214 -0
- package/dist/ibmi-mcp-server/auth/tokenManager.js.map +1 -0
- package/dist/ibmi-mcp-server/auth/types.d.ts +31 -0
- package/dist/ibmi-mcp-server/auth/types.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/auth/types.js +5 -0
- package/dist/ibmi-mcp-server/auth/types.js.map +1 -0
- package/dist/ibmi-mcp-server/index.d.ts +8 -0
- package/dist/ibmi-mcp-server/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/index.js +126 -0
- package/dist/ibmi-mcp-server/index.js.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts +7 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js +7 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts +106 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js +145 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts +16 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js +110 -0
- package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/common.d.ts +174 -0
- package/dist/ibmi-mcp-server/schemas/common.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/common.js +119 -0
- package/dist/ibmi-mcp-server/schemas/common.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/config.d.ts +858 -0
- package/dist/ibmi-mcp-server/schemas/config.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/config.js +248 -0
- package/dist/ibmi-mcp-server/schemas/config.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/index.d.ts +12 -0
- package/dist/ibmi-mcp-server/schemas/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/index.js +20 -0
- package/dist/ibmi-mcp-server/schemas/index.js.map +1 -0
- package/dist/ibmi-mcp-server/schemas/tools.d.ts +287 -0
- package/dist/ibmi-mcp-server/schemas/tools.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/schemas/tools.js +167 -0
- package/dist/ibmi-mcp-server/schemas/tools.js.map +1 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts +82 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js +262 -0
- package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js.map +1 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts +130 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.js +431 -0
- package/dist/ibmi-mcp-server/services/baseConnectionPool.js.map +1 -0
- package/dist/ibmi-mcp-server/services/connectionPool.d.ts +60 -0
- package/dist/ibmi-mcp-server/services/connectionPool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/connectionPool.js +153 -0
- package/dist/ibmi-mcp-server/services/connectionPool.js.map +1 -0
- package/dist/ibmi-mcp-server/services/securityValidation.d.ts +35 -0
- package/dist/ibmi-mcp-server/services/securityValidation.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/securityValidation.js +93 -0
- package/dist/ibmi-mcp-server/services/securityValidation.js.map +1 -0
- package/dist/ibmi-mcp-server/services/sourceManager.d.ts +82 -0
- package/dist/ibmi-mcp-server/services/sourceManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/services/sourceManager.js +151 -0
- package/dist/ibmi-mcp-server/services/sourceManager.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts +9 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.js +9 -0
- package/dist/ibmi-mcp-server/tools/executeSql/index.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts +51 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.js +179 -0
- package/dist/ibmi-mcp-server/tools/executeSql/logic.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts +52 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.js +161 -0
- package/dist/ibmi-mcp-server/tools/executeSql/registration.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts +13 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.js +13 -0
- package/dist/ibmi-mcp-server/tools/generateSql/index.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts +64 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.js +190 -0
- package/dist/ibmi-mcp-server/tools/generateSql/logic.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts +18 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.js +64 -0
- package/dist/ibmi-mcp-server/tools/generateSql/registration.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts +42 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.js +156 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/index.d.ts +6 -0
- package/dist/ibmi-mcp-server/utils/cli/index.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/index.js +6 -0
- package/dist/ibmi-mcp-server/utils/cli/index.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.d.ts +77 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.js +309 -0
- package/dist/ibmi-mcp-server/utils/config/configParser.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts +143 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +665 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts +71 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js +158 -0
- package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts +206 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js +236 -0
- package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +65 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.js +236 -0
- package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts +175 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.js +460 -0
- package/dist/ibmi-mcp-server/utils/config/toolProcessor.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts +126 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.js +240 -0
- package/dist/ibmi-mcp-server/utils/config/toolsetManager.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/types.d.ts +74 -0
- package/dist/ibmi-mcp-server/utils/config/types.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/config/types.js +8 -0
- package/dist/ibmi-mcp-server/utils/config/types.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts +116 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +426 -0
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts +182 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js +726 -0
- package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts +90 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js +187 -0
- package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +270 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/constants.d.ts +13 -0
- package/dist/mcp-server/constants.d.ts.map +1 -0
- package/dist/mcp-server/constants.js +13 -0
- package/dist/mcp-server/constants.js.map +1 -0
- package/dist/mcp-server/logging/index.d.ts +8 -0
- package/dist/mcp-server/logging/index.d.ts.map +1 -0
- package/dist/mcp-server/logging/index.js +8 -0
- package/dist/mcp-server/logging/index.js.map +1 -0
- package/dist/mcp-server/logging/setLevelHandler.d.ts +38 -0
- package/dist/mcp-server/logging/setLevelHandler.d.ts.map +1 -0
- package/dist/mcp-server/logging/setLevelHandler.js +83 -0
- package/dist/mcp-server/logging/setLevelHandler.js.map +1 -0
- package/dist/mcp-server/resources/echoResource/index.d.ts +14 -0
- package/dist/mcp-server/resources/echoResource/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/echoResource/index.js +14 -0
- package/dist/mcp-server/resources/echoResource/index.js.map +1 -0
- package/dist/mcp-server/resources/echoResource/logic.d.ts +37 -0
- package/dist/mcp-server/resources/echoResource/logic.d.ts.map +1 -0
- package/dist/mcp-server/resources/echoResource/logic.js +46 -0
- package/dist/mcp-server/resources/echoResource/logic.js.map +1 -0
- package/dist/mcp-server/resources/echoResource/registration.d.ts +7 -0
- package/dist/mcp-server/resources/echoResource/registration.d.ts.map +1 -0
- package/dist/mcp-server/resources/echoResource/registration.js +51 -0
- package/dist/mcp-server/resources/echoResource/registration.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +10 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +19 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/resources/utils/resource-utils.d.ts +43 -0
- package/dist/mcp-server/resources/utils/resource-utils.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resource-utils.js +44 -0
- package/dist/mcp-server/resources/utils/resource-utils.js.map +1 -0
- package/dist/mcp-server/server.d.ts +23 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +114 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/index.d.ts +8 -0
- package/dist/mcp-server/tools/catFactFetcher/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/index.js +8 -0
- package/dist/mcp-server/tools/catFactFetcher/index.js.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.d.ts +52 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.d.ts.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.js +95 -0
- package/dist/mcp-server/tools/catFactFetcher/logic.js.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.d.ts +9 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.js +43 -0
- package/dist/mcp-server/tools/catFactFetcher/registration.js.map +1 -0
- package/dist/mcp-server/tools/echoTool/index.d.ts +13 -0
- package/dist/mcp-server/tools/echoTool/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/echoTool/index.js +13 -0
- package/dist/mcp-server/tools/echoTool/index.js.map +1 -0
- package/dist/mcp-server/tools/echoTool/logic.d.ts +69 -0
- package/dist/mcp-server/tools/echoTool/logic.d.ts.map +1 -0
- package/dist/mcp-server/tools/echoTool/logic.js +119 -0
- package/dist/mcp-server/tools/echoTool/logic.js.map +1 -0
- package/dist/mcp-server/tools/echoTool/registration.d.ts +9 -0
- package/dist/mcp-server/tools/echoTool/registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/echoTool/registration.js +45 -0
- package/dist/mcp-server/tools/echoTool/registration.js.map +1 -0
- package/dist/mcp-server/tools/imageTest/index.d.ts +7 -0
- package/dist/mcp-server/tools/imageTest/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/imageTest/index.js +7 -0
- package/dist/mcp-server/tools/imageTest/index.js.map +1 -0
- package/dist/mcp-server/tools/imageTest/logic.d.ts +27 -0
- package/dist/mcp-server/tools/imageTest/logic.d.ts.map +1 -0
- package/dist/mcp-server/tools/imageTest/logic.js +44 -0
- package/dist/mcp-server/tools/imageTest/logic.js.map +1 -0
- package/dist/mcp-server/tools/imageTest/registration.d.ts +9 -0
- package/dist/mcp-server/tools/imageTest/registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/imageTest/registration.js +49 -0
- package/dist/mcp-server/tools/imageTest/registration.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +4 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +13 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/tool-utils.d.ts +43 -0
- package/dist/mcp-server/tools/utils/tool-utils.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/tool-utils.js +44 -0
- package/dist/mcp-server/tools/utils/tool-utils.js.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.js +46 -0
- package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts +20 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js +58 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
- package/dist/mcp-server/transports/auth/index.d.ts +14 -0
- package/dist/mcp-server/transports/auth/index.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/index.js +12 -0
- package/dist/mcp-server/transports/auth/index.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +15 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js +9 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +19 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js +53 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts +21 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js +64 -0
- package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +8 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +118 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +8 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +118 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
- package/dist/mcp-server/transports/core/autoTransportManager.d.ts +48 -0
- package/dist/mcp-server/transports/core/autoTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/autoTransportManager.js +57 -0
- package/dist/mcp-server/transports/core/autoTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/baseTransportManager.d.ts +17 -0
- package/dist/mcp-server/transports/core/baseTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/baseTransportManager.js +20 -0
- package/dist/mcp-server/transports/core/baseTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/headerUtils.d.ts +27 -0
- package/dist/mcp-server/transports/core/headerUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/headerUtils.js +53 -0
- package/dist/mcp-server/transports/core/headerUtils.js.map +1 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.d.ts +77 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.js +150 -0
- package/dist/mcp-server/transports/core/honoNodeBridge.js.map +1 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.d.ts +81 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.js +326 -0
- package/dist/mcp-server/transports/core/statefulTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.d.ts +57 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.js +151 -0
- package/dist/mcp-server/transports/core/statelessTransportManager.js.map +1 -0
- package/dist/mcp-server/transports/core/transportRequest.d.ts +9 -0
- package/dist/mcp-server/transports/core/transportRequest.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/transportRequest.js +2 -0
- package/dist/mcp-server/transports/core/transportRequest.js.map +1 -0
- package/dist/mcp-server/transports/core/transportTypes.d.ts +112 -0
- package/dist/mcp-server/transports/core/transportTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/core/transportTypes.js +15 -0
- package/dist/mcp-server/transports/core/transportTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js +86 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts +27 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.js +407 -0
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.js +6 -0
- package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/index.d.ts +8 -0
- package/dist/mcp-server/transports/http/index.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/index.js +7 -0
- package/dist/mcp-server/transports/http/index.js.map +1 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts +21 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.js +54 -0
- package/dist/mcp-server/transports/http/mcpTransportMiddleware.js.map +1 -0
- package/dist/mcp-server/transports/stdio/index.d.ts +6 -0
- package/dist/mcp-server/transports/stdio/index.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/index.js +6 -0
- package/dist/mcp-server/transports/stdio/index.js.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +43 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js +71 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
- package/dist/services/duck-db/duckDBConnectionManager.d.ts +55 -0
- package/dist/services/duck-db/duckDBConnectionManager.d.ts.map +1 -0
- package/dist/services/duck-db/duckDBConnectionManager.js +184 -0
- package/dist/services/duck-db/duckDBConnectionManager.js.map +1 -0
- package/dist/services/duck-db/duckDBQueryExecutor.d.ts +18 -0
- package/dist/services/duck-db/duckDBQueryExecutor.d.ts.map +1 -0
- package/dist/services/duck-db/duckDBQueryExecutor.js +115 -0
- package/dist/services/duck-db/duckDBQueryExecutor.js.map +1 -0
- package/dist/services/duck-db/duckDBService.d.ts +27 -0
- package/dist/services/duck-db/duckDBService.d.ts.map +1 -0
- package/dist/services/duck-db/duckDBService.js +151 -0
- package/dist/services/duck-db/duckDBService.js.map +1 -0
- package/dist/services/duck-db/types.d.ts +135 -0
- package/dist/services/duck-db/types.d.ts.map +1 -0
- package/dist/services/duck-db/types.js +6 -0
- package/dist/services/duck-db/types.js.map +1 -0
- package/dist/services/llm-providers/openRouterProvider.d.ts +36 -0
- package/dist/services/llm-providers/openRouterProvider.d.ts.map +1 -0
- package/dist/services/llm-providers/openRouterProvider.js +235 -0
- package/dist/services/llm-providers/openRouterProvider.js.map +1 -0
- package/dist/services/supabase/supabaseClient.d.ts +25 -0
- package/dist/services/supabase/supabaseClient.d.ts.map +1 -0
- package/dist/services/supabase/supabaseClient.js +68 -0
- package/dist/services/supabase/supabaseClient.js.map +1 -0
- package/dist/storage/duckdbExample.d.ts +8 -0
- package/dist/storage/duckdbExample.d.ts.map +1 -0
- package/dist/storage/duckdbExample.js +197 -0
- package/dist/storage/duckdbExample.js.map +1 -0
- package/dist/types-global/errors.d.ts +101 -0
- package/dist/types-global/errors.d.ts.map +1 -0
- package/dist/types-global/errors.js +109 -0
- package/dist/types-global/errors.js.map +1 -0
- package/dist/utils/formatting/index.d.ts +10 -0
- package/dist/utils/formatting/index.d.ts.map +1 -0
- package/dist/utils/formatting/index.js +10 -0
- package/dist/utils/formatting/index.js.map +1 -0
- package/dist/utils/formatting/markdownBuilder.d.ts +348 -0
- package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
- package/dist/utils/formatting/markdownBuilder.js +501 -0
- package/dist/utils/formatting/markdownBuilder.js.map +1 -0
- package/dist/utils/formatting/sqlFormattingUtils.d.ts +69 -0
- package/dist/utils/formatting/sqlFormattingUtils.d.ts.map +1 -0
- package/dist/utils/formatting/sqlFormattingUtils.js +131 -0
- package/dist/utils/formatting/sqlFormattingUtils.js.map +1 -0
- package/dist/utils/formatting/tableFormatter.d.ts +268 -0
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/tableFormatter.js +550 -0
- package/dist/utils/formatting/tableFormatter.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/internal/asyncContext.d.ts +35 -0
- package/dist/utils/internal/asyncContext.d.ts.map +1 -0
- package/dist/utils/internal/asyncContext.js +38 -0
- package/dist/utils/internal/asyncContext.js.map +1 -0
- package/dist/utils/internal/errorHandler.d.ts +95 -0
- package/dist/utils/internal/errorHandler.d.ts.map +1 -0
- package/dist/utils/internal/errorHandler.js +210 -0
- package/dist/utils/internal/errorHandler.js.map +1 -0
- package/dist/utils/internal/index.d.ts +12 -0
- package/dist/utils/internal/index.d.ts.map +1 -0
- package/dist/utils/internal/index.js +12 -0
- package/dist/utils/internal/index.js.map +1 -0
- package/dist/utils/internal/logger.d.ts +30 -0
- package/dist/utils/internal/logger.d.ts.map +1 -0
- package/dist/utils/internal/logger.js +228 -0
- package/dist/utils/internal/logger.js.map +1 -0
- package/dist/utils/internal/logging-helpers.d.ts +49 -0
- package/dist/utils/internal/logging-helpers.d.ts.map +1 -0
- package/dist/utils/internal/logging-helpers.js +60 -0
- package/dist/utils/internal/logging-helpers.js.map +1 -0
- package/dist/utils/internal/performance.d.ts +19 -0
- package/dist/utils/internal/performance.d.ts.map +1 -0
- package/dist/utils/internal/performance.js +110 -0
- package/dist/utils/internal/performance.js.map +1 -0
- package/dist/utils/internal/requestContext.d.ts +41 -0
- package/dist/utils/internal/requestContext.d.ts.map +1 -0
- package/dist/utils/internal/requestContext.js +47 -0
- package/dist/utils/internal/requestContext.js.map +1 -0
- package/dist/utils/metrics/index.d.ts +8 -0
- package/dist/utils/metrics/index.d.ts.map +1 -0
- package/dist/utils/metrics/index.js +8 -0
- package/dist/utils/metrics/index.js.map +1 -0
- package/dist/utils/metrics/tokenCounter.d.ts +36 -0
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
- package/dist/utils/metrics/tokenCounter.js +115 -0
- package/dist/utils/metrics/tokenCounter.js.map +1 -0
- package/dist/utils/network/fetchWithTimeout.d.ts +22 -0
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/network/fetchWithTimeout.js +78 -0
- package/dist/utils/network/fetchWithTimeout.js.map +1 -0
- package/dist/utils/network/index.d.ts +7 -0
- package/dist/utils/network/index.d.ts.map +1 -0
- package/dist/utils/network/index.js +6 -0
- package/dist/utils/network/index.js.map +1 -0
- package/dist/utils/parsing/dateParser.d.ts +73 -0
- package/dist/utils/parsing/dateParser.d.ts.map +1 -0
- package/dist/utils/parsing/dateParser.js +108 -0
- package/dist/utils/parsing/dateParser.js.map +1 -0
- package/dist/utils/parsing/index.d.ts +9 -0
- package/dist/utils/parsing/index.d.ts.map +1 -0
- package/dist/utils/parsing/index.js +9 -0
- package/dist/utils/parsing/index.js.map +1 -0
- package/dist/utils/parsing/jsonParser.d.ts +83 -0
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
- package/dist/utils/parsing/jsonParser.js +128 -0
- package/dist/utils/parsing/jsonParser.js.map +1 -0
- package/dist/utils/scheduling/index.d.ts +7 -0
- package/dist/utils/scheduling/index.d.ts.map +1 -0
- package/dist/utils/scheduling/index.js +7 -0
- package/dist/utils/scheduling/index.js.map +1 -0
- package/dist/utils/scheduling/scheduler.d.ts +73 -0
- package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
- package/dist/utils/scheduling/scheduler.js +155 -0
- package/dist/utils/scheduling/scheduler.js.map +1 -0
- package/dist/utils/security/idGenerator.d.ts +144 -0
- package/dist/utils/security/idGenerator.d.ts.map +1 -0
- package/dist/utils/security/idGenerator.js +232 -0
- package/dist/utils/security/idGenerator.js.map +1 -0
- package/dist/utils/security/index.d.ts +10 -0
- package/dist/utils/security/index.d.ts.map +1 -0
- package/dist/utils/security/index.js +10 -0
- package/dist/utils/security/index.js.map +1 -0
- package/dist/utils/security/rateLimiter.d.ts +109 -0
- package/dist/utils/security/rateLimiter.d.ts.map +1 -0
- package/dist/utils/security/rateLimiter.js +202 -0
- package/dist/utils/security/rateLimiter.js.map +1 -0
- package/dist/utils/security/sanitization.d.ts +185 -0
- package/dist/utils/security/sanitization.d.ts.map +1 -0
- package/dist/utils/security/sanitization.js +472 -0
- package/dist/utils/security/sanitization.js.map +1 -0
- package/dist/utils/telemetry/instrumentation.d.ts +8 -0
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
- package/dist/utils/telemetry/instrumentation.js +121 -0
- package/dist/utils/telemetry/instrumentation.js.map +1 -0
- package/dist/utils/telemetry/semconv.d.ts +16 -0
- package/dist/utils/telemetry/semconv.d.ts.map +1 -0
- package/dist/utils/telemetry/semconv.js +16 -0
- package/dist/utils/telemetry/semconv.js.map +1 -0
- package/package.json +161 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Base connection pool abstraction for IBM i connections
|
|
3
|
+
* Provides shared connection pool logic that can be extended by specific implementations
|
|
4
|
+
*
|
|
5
|
+
* @module src/services/baseConnectionPool
|
|
6
|
+
*/
|
|
7
|
+
import pkg from "@ibm/mapepire-js";
|
|
8
|
+
const { Pool, getCertificate } = pkg;
|
|
9
|
+
import { ErrorHandler, logger } from "../../utils/internal/index.js";
|
|
10
|
+
import { requestContextService, } from "../../utils/internal/requestContext.js";
|
|
11
|
+
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
12
|
+
import { SqlSecurityValidator } from "../utils/security/sqlSecurityValidator.js";
|
|
13
|
+
/**
|
|
14
|
+
* Base connection pool manager that provides shared functionality
|
|
15
|
+
* for all IBM i connection pools in the application
|
|
16
|
+
*/
|
|
17
|
+
export class BaseConnectionPool {
|
|
18
|
+
pools = new Map();
|
|
19
|
+
initializationPromises = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* Create a daemon server configuration from connection config
|
|
22
|
+
* @param config - Connection configuration
|
|
23
|
+
* @param context - Request context for logging
|
|
24
|
+
*/
|
|
25
|
+
async createDaemonServer(config, context) {
|
|
26
|
+
const server = {
|
|
27
|
+
host: config.host,
|
|
28
|
+
user: config.user,
|
|
29
|
+
password: config.password,
|
|
30
|
+
rejectUnauthorized: !(config.ignoreUnauthorized ?? true),
|
|
31
|
+
};
|
|
32
|
+
// Get SSL certificate if needed
|
|
33
|
+
if (!(config.ignoreUnauthorized ?? true)) {
|
|
34
|
+
logger.debug(context, "Fetching SSL certificate for secure connection");
|
|
35
|
+
const ca = await getCertificate(server);
|
|
36
|
+
server.ca = ca.raw;
|
|
37
|
+
}
|
|
38
|
+
return server;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialize a connection pool for the given identifier
|
|
42
|
+
* @param poolId - Unique identifier for the pool
|
|
43
|
+
* @param config - Connection configuration
|
|
44
|
+
* @param context - Request context for logging
|
|
45
|
+
*/
|
|
46
|
+
async initializePool(poolId, config, context) {
|
|
47
|
+
// Check if there's already an initialization in progress
|
|
48
|
+
const existingPromise = this.initializationPromises.get(poolId);
|
|
49
|
+
if (existingPromise) {
|
|
50
|
+
logger.debug(context, `Waiting for existing initialization of pool: ${String(poolId)}`);
|
|
51
|
+
return existingPromise;
|
|
52
|
+
}
|
|
53
|
+
let poolState = this.pools.get(poolId);
|
|
54
|
+
if (!poolState) {
|
|
55
|
+
poolState = {
|
|
56
|
+
pool: null,
|
|
57
|
+
isInitialized: false,
|
|
58
|
+
isConnecting: false,
|
|
59
|
+
healthStatus: "unknown",
|
|
60
|
+
config,
|
|
61
|
+
};
|
|
62
|
+
this.pools.set(poolId, poolState);
|
|
63
|
+
}
|
|
64
|
+
// Check if already initialized
|
|
65
|
+
if (poolState.isInitialized && poolState.pool) {
|
|
66
|
+
logger.debug(context, `Pool '${String(poolId)}' already initialized`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Create initialization promise and store it
|
|
70
|
+
const initPromise = this.performInitialization(poolId, poolState, context);
|
|
71
|
+
this.initializationPromises.set(poolId, initPromise);
|
|
72
|
+
try {
|
|
73
|
+
await initPromise;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
// Clean up the promise from the map
|
|
77
|
+
this.initializationPromises.delete(poolId);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Perform the actual initialization of a pool
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
async performInitialization(poolId, poolState, context) {
|
|
85
|
+
// Double-check if already initialized (in case another thread completed it)
|
|
86
|
+
if (poolState.isInitialized && poolState.pool) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (poolState.isConnecting) {
|
|
90
|
+
logger.debug(context, `Pool '${String(poolId)}' is already connecting, waiting...`);
|
|
91
|
+
// Wait a bit and check again
|
|
92
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
93
|
+
if (poolState.isInitialized && poolState.pool) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
poolState.isConnecting = true;
|
|
98
|
+
try {
|
|
99
|
+
logger.info({
|
|
100
|
+
...context,
|
|
101
|
+
host: poolState.config.host,
|
|
102
|
+
port: poolState.config.port || 8471,
|
|
103
|
+
user: poolState.config.user.substring(0, 3) + "***",
|
|
104
|
+
ignoreUnauthorized: poolState.config.ignoreUnauthorized ?? true,
|
|
105
|
+
}, `Initializing connection pool: ${String(poolId).substring(0, 7)}***`);
|
|
106
|
+
// Create daemon server configuration
|
|
107
|
+
const server = await this.createDaemonServer(poolState.config, context);
|
|
108
|
+
// Create and initialize connection pool
|
|
109
|
+
poolState.pool = new Pool({
|
|
110
|
+
creds: server,
|
|
111
|
+
maxSize: poolState.config.maxSize || 10,
|
|
112
|
+
startingSize: poolState.config.startingSize || 2,
|
|
113
|
+
});
|
|
114
|
+
await poolState.pool.init();
|
|
115
|
+
poolState.isInitialized = true;
|
|
116
|
+
poolState.healthStatus = "healthy";
|
|
117
|
+
poolState.lastHealthCheck = new Date();
|
|
118
|
+
logger.info(context, `Connection pool initialized successfully: ${String(poolId).substring(0, 7)}***`);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
poolState.isInitialized = false;
|
|
122
|
+
poolState.healthStatus = "unhealthy";
|
|
123
|
+
poolState.pool = null;
|
|
124
|
+
const handledError = ErrorHandler.handleError(error, {
|
|
125
|
+
operation: "performInitialization",
|
|
126
|
+
context,
|
|
127
|
+
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
128
|
+
critical: true,
|
|
129
|
+
});
|
|
130
|
+
throw handledError;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
poolState.isConnecting = false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Execute a SQL query on a specific pool
|
|
138
|
+
* @param poolId - Pool identifier
|
|
139
|
+
* @param query - SQL query string
|
|
140
|
+
* @param params - Query parameters
|
|
141
|
+
* @param context - Request context for logging
|
|
142
|
+
*/
|
|
143
|
+
async executeQuery(poolId, query, params, context, securityConfig) {
|
|
144
|
+
const operationContext = context ||
|
|
145
|
+
requestContextService.createRequestContext({
|
|
146
|
+
operation: "ExecuteQuery",
|
|
147
|
+
poolId: String(poolId),
|
|
148
|
+
});
|
|
149
|
+
return ErrorHandler.tryCatch(async () => {
|
|
150
|
+
const poolState = this.pools.get(poolId);
|
|
151
|
+
if (!poolState) {
|
|
152
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, `Pool '${String(poolId)}' not found. Please register the pool first.`, { poolId: String(poolId) });
|
|
153
|
+
}
|
|
154
|
+
// Ensure pool is initialized
|
|
155
|
+
await this.initializePool(poolId, poolState.config, operationContext);
|
|
156
|
+
if (!poolState.pool) {
|
|
157
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `Connection pool '${String(poolId)}' is not available`, { poolId: String(poolId) });
|
|
158
|
+
}
|
|
159
|
+
// Additional check to ensure pool is properly initialized
|
|
160
|
+
if (!poolState.isInitialized) {
|
|
161
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `Connection pool '${String(poolId)}' is not fully initialized`, {
|
|
162
|
+
poolId: String(poolId),
|
|
163
|
+
isInitialized: poolState.isInitialized,
|
|
164
|
+
isConnecting: poolState.isConnecting,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
logger.debug({
|
|
168
|
+
...operationContext,
|
|
169
|
+
query: query,
|
|
170
|
+
queryLength: query.length,
|
|
171
|
+
hasParameters: !!params && params.length > 0,
|
|
172
|
+
paramCount: params?.length || 0,
|
|
173
|
+
}, `Executing SQL query on pool: ${String(poolId)}`);
|
|
174
|
+
// Validate parameter types for mapepire compatibility
|
|
175
|
+
if (params && params.length > 0) {
|
|
176
|
+
for (let i = 0; i < params.length; i++) {
|
|
177
|
+
const param = params[i];
|
|
178
|
+
if (param !== null && param !== undefined) {
|
|
179
|
+
const isValidType = typeof param === "string" ||
|
|
180
|
+
typeof param === "number" ||
|
|
181
|
+
(Array.isArray(param) &&
|
|
182
|
+
param.every((item) => typeof item === "string" || typeof item === "number"));
|
|
183
|
+
if (!isValidType) {
|
|
184
|
+
logger.warning({
|
|
185
|
+
...operationContext,
|
|
186
|
+
paramIndex: i,
|
|
187
|
+
paramType: typeof param,
|
|
188
|
+
paramValue: param,
|
|
189
|
+
}, `Parameter ${i} has invalid type for mapepire binding`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Apply security validation if config is provided
|
|
195
|
+
if (securityConfig) {
|
|
196
|
+
SqlSecurityValidator.validateQuery(query, securityConfig, operationContext);
|
|
197
|
+
}
|
|
198
|
+
const result = await poolState.pool.execute(query, {
|
|
199
|
+
parameters: params,
|
|
200
|
+
});
|
|
201
|
+
logger.debug({
|
|
202
|
+
...operationContext,
|
|
203
|
+
rowCount: result.data?.length || 0,
|
|
204
|
+
success: result.success,
|
|
205
|
+
sqlReturnCode: result.sql_rc,
|
|
206
|
+
executionTime: result.execution_time,
|
|
207
|
+
}, `Query executed successfully on pool: ${String(poolId)}`);
|
|
208
|
+
// Update health status on successful query
|
|
209
|
+
poolState.healthStatus = "healthy";
|
|
210
|
+
poolState.lastHealthCheck = new Date();
|
|
211
|
+
return result;
|
|
212
|
+
}, {
|
|
213
|
+
operation: "ExecuteQuery",
|
|
214
|
+
context: operationContext,
|
|
215
|
+
errorCode: JsonRpcErrorCode.DatabaseError,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Execute a SQL query with automatic pagination
|
|
220
|
+
* @param poolId - Pool identifier
|
|
221
|
+
* @param query - SQL query string
|
|
222
|
+
* @param params - Query parameters
|
|
223
|
+
* @param context - Request context for logging
|
|
224
|
+
* @param fetchSize - Number of records per fetch
|
|
225
|
+
*/
|
|
226
|
+
async executeQueryWithPagination(poolId, query, params, context, fetchSize = 300, securityConfig) {
|
|
227
|
+
const operationContext = context ||
|
|
228
|
+
requestContextService.createRequestContext({
|
|
229
|
+
operation: "ExecuteQueryWithPagination",
|
|
230
|
+
poolId: String(poolId),
|
|
231
|
+
});
|
|
232
|
+
return ErrorHandler.tryCatch(async () => {
|
|
233
|
+
const poolState = this.pools.get(poolId);
|
|
234
|
+
if (!poolState) {
|
|
235
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, `Pool '${String(poolId)}' not found`, { poolId: String(poolId) });
|
|
236
|
+
}
|
|
237
|
+
// Ensure pool is initialized
|
|
238
|
+
await this.initializePool(poolId, poolState.config, operationContext);
|
|
239
|
+
if (!poolState.pool) {
|
|
240
|
+
throw new McpError(JsonRpcErrorCode.InternalError, "Connection pool is not available");
|
|
241
|
+
}
|
|
242
|
+
// Apply security validation if config is provided
|
|
243
|
+
if (securityConfig) {
|
|
244
|
+
SqlSecurityValidator.validateQuery(query, securityConfig, operationContext);
|
|
245
|
+
}
|
|
246
|
+
logger.debug({
|
|
247
|
+
...operationContext,
|
|
248
|
+
queryLength: query.length,
|
|
249
|
+
hasParameters: !!params && params.length > 0,
|
|
250
|
+
paramCount: params?.length || 0,
|
|
251
|
+
fetchSize,
|
|
252
|
+
}, "Executing SQL query with pagination");
|
|
253
|
+
// Create query object with parameters
|
|
254
|
+
const queryObj = poolState.pool.query(query, { parameters: params });
|
|
255
|
+
// Execute initial query
|
|
256
|
+
let result = await queryObj.execute();
|
|
257
|
+
const allData = [];
|
|
258
|
+
if (result.success && result.data) {
|
|
259
|
+
allData.push(...result.data);
|
|
260
|
+
}
|
|
261
|
+
// Fetch more results until done
|
|
262
|
+
let fetchCount = 1;
|
|
263
|
+
while (!result.is_done && fetchCount < 100) {
|
|
264
|
+
// Safety limit
|
|
265
|
+
logger.debug({
|
|
266
|
+
...operationContext,
|
|
267
|
+
fetchCount,
|
|
268
|
+
currentDataLength: allData.length,
|
|
269
|
+
}, "Fetching more results");
|
|
270
|
+
result = await queryObj.fetchMore(fetchSize);
|
|
271
|
+
if (result.success && result.data) {
|
|
272
|
+
allData.push(...result.data);
|
|
273
|
+
}
|
|
274
|
+
fetchCount++;
|
|
275
|
+
}
|
|
276
|
+
// Close the query
|
|
277
|
+
await queryObj.close();
|
|
278
|
+
logger.debug({
|
|
279
|
+
...operationContext,
|
|
280
|
+
totalRows: allData.length,
|
|
281
|
+
fetchCount,
|
|
282
|
+
success: result.success,
|
|
283
|
+
sqlReturnCode: result.sql_rc,
|
|
284
|
+
executionTime: result.execution_time,
|
|
285
|
+
}, "Paginated query completed");
|
|
286
|
+
return {
|
|
287
|
+
data: allData,
|
|
288
|
+
success: result.success,
|
|
289
|
+
sql_rc: result.sql_rc,
|
|
290
|
+
execution_time: result.execution_time,
|
|
291
|
+
};
|
|
292
|
+
}, {
|
|
293
|
+
operation: "ExecuteQueryWithPagination",
|
|
294
|
+
context: operationContext,
|
|
295
|
+
errorCode: JsonRpcErrorCode.DatabaseError,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Check the health of a specific pool
|
|
300
|
+
* @param poolId - Pool identifier
|
|
301
|
+
* @param context - Request context for logging
|
|
302
|
+
*/
|
|
303
|
+
async checkPoolHealth(poolId, context) {
|
|
304
|
+
const operationContext = context ||
|
|
305
|
+
requestContextService.createRequestContext({
|
|
306
|
+
operation: "CheckPoolHealth",
|
|
307
|
+
poolId: String(poolId),
|
|
308
|
+
});
|
|
309
|
+
const poolState = this.pools.get(poolId);
|
|
310
|
+
if (!poolState) {
|
|
311
|
+
return {
|
|
312
|
+
status: "unknown",
|
|
313
|
+
initialized: false,
|
|
314
|
+
connecting: false,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
if (!poolState.isInitialized || !poolState.pool) {
|
|
319
|
+
return {
|
|
320
|
+
status: "unknown",
|
|
321
|
+
initialized: false,
|
|
322
|
+
connecting: poolState.isConnecting,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// Execute a simple query to test connection
|
|
326
|
+
await this.executeQuery(poolId, "SELECT 1 FROM SYSIBM.SYSDUMMY1", [], operationContext);
|
|
327
|
+
poolState.healthStatus = "healthy";
|
|
328
|
+
poolState.lastHealthCheck = new Date();
|
|
329
|
+
logger.debug(operationContext, `Health check passed for pool: ${String(poolId)}`);
|
|
330
|
+
return {
|
|
331
|
+
status: "healthy",
|
|
332
|
+
lastCheck: poolState.lastHealthCheck,
|
|
333
|
+
initialized: true,
|
|
334
|
+
connecting: false,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
poolState.healthStatus = "unhealthy";
|
|
339
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
340
|
+
logger.error({
|
|
341
|
+
...operationContext,
|
|
342
|
+
error: errorMessage,
|
|
343
|
+
}, `Health check failed for pool: ${String(poolId)}`);
|
|
344
|
+
return {
|
|
345
|
+
status: "unhealthy",
|
|
346
|
+
lastError: errorMessage,
|
|
347
|
+
lastCheck: new Date(),
|
|
348
|
+
initialized: poolState.isInitialized,
|
|
349
|
+
connecting: poolState.isConnecting,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Close a specific pool's connections
|
|
355
|
+
* @param poolId - Pool identifier
|
|
356
|
+
* @param context - Request context for logging
|
|
357
|
+
*/
|
|
358
|
+
async closePool(poolId, context) {
|
|
359
|
+
const operationContext = context ||
|
|
360
|
+
requestContextService.createRequestContext({
|
|
361
|
+
operation: "ClosePool",
|
|
362
|
+
poolId: String(poolId),
|
|
363
|
+
});
|
|
364
|
+
const poolState = this.pools.get(poolId);
|
|
365
|
+
if (!poolState || !poolState.pool) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
try {
|
|
369
|
+
logger.info(operationContext, `Closing connection pool: ${String(poolId)}`);
|
|
370
|
+
await poolState.pool.end();
|
|
371
|
+
poolState.pool = null;
|
|
372
|
+
poolState.isInitialized = false;
|
|
373
|
+
poolState.healthStatus = "unknown";
|
|
374
|
+
logger.info(operationContext, `Connection pool closed successfully: ${String(poolId)}`);
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
logger.error({
|
|
378
|
+
...operationContext,
|
|
379
|
+
error: error instanceof Error ? error.message : String(error),
|
|
380
|
+
}, `Error closing connection pool: ${String(poolId)}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Close all connection pools gracefully
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Close all connection pools gracefully
|
|
388
|
+
* @param context - Request context for logging
|
|
389
|
+
*/
|
|
390
|
+
async closeAllPools(context) {
|
|
391
|
+
const operationContext = context ||
|
|
392
|
+
requestContextService.createRequestContext({
|
|
393
|
+
operation: "CloseAllPools",
|
|
394
|
+
});
|
|
395
|
+
const closePromises = Array.from(this.pools.keys()).map((poolId) => this.closePool(poolId, operationContext));
|
|
396
|
+
const results = await Promise.allSettled(closePromises);
|
|
397
|
+
logger.info({
|
|
398
|
+
...operationContext,
|
|
399
|
+
closedCount: results.length,
|
|
400
|
+
}, "All connection pools closed");
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Get status of a specific pool
|
|
404
|
+
* @param poolId - Pool identifier
|
|
405
|
+
*/
|
|
406
|
+
getPoolStatus(poolId) {
|
|
407
|
+
const poolState = this.pools.get(poolId);
|
|
408
|
+
if (!poolState) {
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
return {
|
|
412
|
+
initialized: poolState.isInitialized,
|
|
413
|
+
connecting: poolState.isConnecting,
|
|
414
|
+
healthStatus: poolState.healthStatus,
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Get list of registered pool identifiers
|
|
419
|
+
*/
|
|
420
|
+
getRegisteredPools() {
|
|
421
|
+
return Array.from(this.pools.keys());
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Clear all pools (for testing)
|
|
425
|
+
*/
|
|
426
|
+
clearAllPools() {
|
|
427
|
+
this.pools.clear();
|
|
428
|
+
this.initializationPromises.clear();
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=baseConnectionPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseConnectionPool.js","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/services/baseConnectionPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview IBM i connection pool management using mapepire-js
|
|
3
|
+
* This module provides a singleton connection pool for IBM i DB2 database operations.
|
|
4
|
+
* Credentials are provided by the MCP client via environment variables.
|
|
5
|
+
*
|
|
6
|
+
* @module src/services/mapepire/connectionPool
|
|
7
|
+
*/
|
|
8
|
+
import { BindingValue, QueryResult } from "@ibm/mapepire-js";
|
|
9
|
+
import { RequestContext } from "../../utils/internal/requestContext.js";
|
|
10
|
+
import { BaseConnectionPool } from "./baseConnectionPool.js";
|
|
11
|
+
declare const IBM_I_POOL_ID: unique symbol;
|
|
12
|
+
/**
|
|
13
|
+
* IBM i connection pool manager with lazy initialization
|
|
14
|
+
* Credentials are provided by MCP client via environment variables
|
|
15
|
+
*/
|
|
16
|
+
export declare class IBMiConnectionPool extends BaseConnectionPool<typeof IBM_I_POOL_ID> {
|
|
17
|
+
private static instance;
|
|
18
|
+
/**
|
|
19
|
+
* Get the singleton instance
|
|
20
|
+
*/
|
|
21
|
+
private static getInstance;
|
|
22
|
+
/**
|
|
23
|
+
* Initialize the connection pool using credentials from config
|
|
24
|
+
* Called automatically on first query if not already initialized
|
|
25
|
+
*/
|
|
26
|
+
private static ensureInitialized;
|
|
27
|
+
/**
|
|
28
|
+
* Execute a SQL query with automatic pagination to fetch all results
|
|
29
|
+
* Uses the query/execute/fetchMore pattern for large result sets
|
|
30
|
+
*/
|
|
31
|
+
static executeQueryWithPagination(query: string, params?: BindingValue[], context?: RequestContext, fetchSize?: number): Promise<{
|
|
32
|
+
data: unknown[];
|
|
33
|
+
success: boolean;
|
|
34
|
+
sql_rc?: unknown;
|
|
35
|
+
execution_time?: number;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Execute a SQL query against the IBM i database
|
|
39
|
+
* Automatically initializes the pool if not already done
|
|
40
|
+
*/
|
|
41
|
+
static executeQuery(query: string, params?: BindingValue[], context?: RequestContext): Promise<QueryResult<unknown>>;
|
|
42
|
+
/**
|
|
43
|
+
* Check the health of the connection pool
|
|
44
|
+
*/
|
|
45
|
+
static healthCheck(): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* Close the connection pool gracefully
|
|
48
|
+
*/
|
|
49
|
+
static close(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Get connection pool status for monitoring
|
|
52
|
+
*/
|
|
53
|
+
static getStatus(): {
|
|
54
|
+
initialized: boolean;
|
|
55
|
+
connecting: boolean;
|
|
56
|
+
poolExists: boolean;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=connectionPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionPool.d.ts","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/services/connectionPool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,EAEL,cAAc,EACf,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAGjC,QAAA,MAAM,aAAa,eAAgC,CAAC;AAEpD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,aAAa,CACrB;IACC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAO1B;;;OAGG;mBACkB,iBAAiB;IA0DtC;;;OAGG;WACU,0BAA0B,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC;QACT,IAAI,EAAE,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAkBF;;;OAGG;WACU,YAAY,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAiBhC;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB5C;;OAEG;WACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;KACrB;CAUF"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview IBM i connection pool management using mapepire-js
|
|
3
|
+
* This module provides a singleton connection pool for IBM i DB2 database operations.
|
|
4
|
+
* Credentials are provided by the MCP client via environment variables.
|
|
5
|
+
*
|
|
6
|
+
* @module src/services/mapepire/connectionPool
|
|
7
|
+
*/
|
|
8
|
+
import { config } from "../../config/index.js";
|
|
9
|
+
import { logger } from "../../utils/internal/logger.js";
|
|
10
|
+
import { ErrorHandler } from "../../utils/internal/errorHandler.js";
|
|
11
|
+
import { requestContextService, } from "../../utils/internal/requestContext.js";
|
|
12
|
+
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
13
|
+
import { BaseConnectionPool, } from "./baseConnectionPool.js";
|
|
14
|
+
// Singleton identifier for the IBM i connection pool
|
|
15
|
+
const IBM_I_POOL_ID = Symbol("ibmi-singleton-pool");
|
|
16
|
+
/**
|
|
17
|
+
* IBM i connection pool manager with lazy initialization
|
|
18
|
+
* Credentials are provided by MCP client via environment variables
|
|
19
|
+
*/
|
|
20
|
+
export class IBMiConnectionPool extends BaseConnectionPool {
|
|
21
|
+
static instance;
|
|
22
|
+
/**
|
|
23
|
+
* Get the singleton instance
|
|
24
|
+
*/
|
|
25
|
+
static getInstance() {
|
|
26
|
+
if (!this.instance) {
|
|
27
|
+
this.instance = new IBMiConnectionPool();
|
|
28
|
+
}
|
|
29
|
+
return this.instance;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the connection pool using credentials from config
|
|
33
|
+
* Called automatically on first query if not already initialized
|
|
34
|
+
*/
|
|
35
|
+
static async ensureInitialized() {
|
|
36
|
+
const instance = this.getInstance();
|
|
37
|
+
const poolState = instance.pools.get(IBM_I_POOL_ID);
|
|
38
|
+
if (poolState && poolState.isInitialized) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const context = requestContextService.createRequestContext({
|
|
42
|
+
operation: "InitializeIBMiConnectionPool",
|
|
43
|
+
});
|
|
44
|
+
try {
|
|
45
|
+
// Check if DB2i configuration is available
|
|
46
|
+
if (!config.db2i) {
|
|
47
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, "DB2i configuration not found. Please ensure DB2i_HOST, DB2i_USER, and DB2i_PASS environment variables are set.", { configSection: "db2i" });
|
|
48
|
+
}
|
|
49
|
+
const { host, user, password, ignoreUnauthorized } = config.db2i;
|
|
50
|
+
logger.info({
|
|
51
|
+
...context,
|
|
52
|
+
host,
|
|
53
|
+
user: user.substring(0, 3) + "***", // Mask username for security
|
|
54
|
+
ignoreUnauthorized,
|
|
55
|
+
}, "Initializing IBM i connection pool");
|
|
56
|
+
// Convert config to pool connection config
|
|
57
|
+
const poolConfig = {
|
|
58
|
+
host,
|
|
59
|
+
user,
|
|
60
|
+
password,
|
|
61
|
+
ignoreUnauthorized,
|
|
62
|
+
};
|
|
63
|
+
// Initialize the pool using base class
|
|
64
|
+
await instance.initializePool(IBM_I_POOL_ID, poolConfig, context);
|
|
65
|
+
logger.info(context, "IBM i connection pool initialized successfully");
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const handledError = ErrorHandler.handleError(error, {
|
|
69
|
+
operation: "InitializeIBMiConnectionPool",
|
|
70
|
+
context,
|
|
71
|
+
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
72
|
+
critical: true,
|
|
73
|
+
});
|
|
74
|
+
throw handledError;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute a SQL query with automatic pagination to fetch all results
|
|
79
|
+
* Uses the query/execute/fetchMore pattern for large result sets
|
|
80
|
+
*/
|
|
81
|
+
static async executeQueryWithPagination(query, params, context, fetchSize = 300) {
|
|
82
|
+
const operationContext = context ||
|
|
83
|
+
requestContextService.createRequestContext({
|
|
84
|
+
operation: "ExecuteQueryWithPagination",
|
|
85
|
+
});
|
|
86
|
+
await this.ensureInitialized();
|
|
87
|
+
const instance = this.getInstance();
|
|
88
|
+
return instance.executeQueryWithPagination(IBM_I_POOL_ID, query, params, operationContext, fetchSize);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Execute a SQL query against the IBM i database
|
|
92
|
+
* Automatically initializes the pool if not already done
|
|
93
|
+
*/
|
|
94
|
+
static async executeQuery(query, params, context) {
|
|
95
|
+
const operationContext = context ||
|
|
96
|
+
requestContextService.createRequestContext({
|
|
97
|
+
operation: "ExecuteQuery",
|
|
98
|
+
});
|
|
99
|
+
await this.ensureInitialized();
|
|
100
|
+
const instance = this.getInstance();
|
|
101
|
+
return instance.executeQuery(IBM_I_POOL_ID, query, params, operationContext);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check the health of the connection pool
|
|
105
|
+
*/
|
|
106
|
+
static async healthCheck() {
|
|
107
|
+
const context = requestContextService.createRequestContext({
|
|
108
|
+
operation: "ConnectionHealthCheck",
|
|
109
|
+
});
|
|
110
|
+
try {
|
|
111
|
+
await this.ensureInitialized();
|
|
112
|
+
const instance = this.getInstance();
|
|
113
|
+
const health = await instance.checkPoolHealth(IBM_I_POOL_ID, context);
|
|
114
|
+
logger.debug(context, "Connection health check passed");
|
|
115
|
+
return health.status === "healthy";
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
logger.error({
|
|
119
|
+
...context,
|
|
120
|
+
error: error instanceof Error ? error.message : String(error),
|
|
121
|
+
}, "Connection health check failed");
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Close the connection pool gracefully
|
|
127
|
+
*/
|
|
128
|
+
static async close() {
|
|
129
|
+
const context = requestContextService.createRequestContext({
|
|
130
|
+
operation: "CloseConnectionPool",
|
|
131
|
+
});
|
|
132
|
+
const instance = this.getInstance();
|
|
133
|
+
const poolState = instance.pools.get(IBM_I_POOL_ID);
|
|
134
|
+
if (poolState && poolState.pool) {
|
|
135
|
+
logger.info(context, "Closing IBM i connection pool");
|
|
136
|
+
await instance.closePool(IBM_I_POOL_ID, context);
|
|
137
|
+
logger.info(context, "IBM i connection pool closed successfully");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get connection pool status for monitoring
|
|
142
|
+
*/
|
|
143
|
+
static getStatus() {
|
|
144
|
+
const instance = this.getInstance();
|
|
145
|
+
const poolStatus = instance.getPoolStatus(IBM_I_POOL_ID);
|
|
146
|
+
return {
|
|
147
|
+
initialized: poolStatus?.initialized ?? false,
|
|
148
|
+
connecting: poolStatus?.connecting ?? false,
|
|
149
|
+
poolExists: poolStatus !== null,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=connectionPool.js.map
|