@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,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview SQL Security Validator for validating SQL queries against security policies
|
|
3
|
+
* Provides both AST-based and regex-based validation with comprehensive security checks
|
|
4
|
+
*
|
|
5
|
+
* @module src/utils/security/sqlSecurityValidator
|
|
6
|
+
*/
|
|
7
|
+
import pkg from "node-sql-parser";
|
|
8
|
+
const { Parser } = pkg;
|
|
9
|
+
import { logger } from "../../../utils/internal/logger.js";
|
|
10
|
+
import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
|
|
11
|
+
/**
|
|
12
|
+
* Dangerous SQL operations that should be blocked in read-only mode
|
|
13
|
+
*/
|
|
14
|
+
export const DANGEROUS_OPERATIONS = [
|
|
15
|
+
// Data manipulation
|
|
16
|
+
"INSERT",
|
|
17
|
+
"UPDATE",
|
|
18
|
+
"DELETE",
|
|
19
|
+
"REPLACE",
|
|
20
|
+
"MERGE",
|
|
21
|
+
"TRUNCATE",
|
|
22
|
+
// Schema operations
|
|
23
|
+
"DROP",
|
|
24
|
+
"CREATE",
|
|
25
|
+
"ALTER",
|
|
26
|
+
"RENAME",
|
|
27
|
+
// System operations
|
|
28
|
+
"CALL",
|
|
29
|
+
"EXEC",
|
|
30
|
+
"EXECUTE",
|
|
31
|
+
"SET",
|
|
32
|
+
"DECLARE",
|
|
33
|
+
// Security operations
|
|
34
|
+
"GRANT",
|
|
35
|
+
"REVOKE",
|
|
36
|
+
"DENY",
|
|
37
|
+
// Data transfer
|
|
38
|
+
"LOAD",
|
|
39
|
+
"IMPORT",
|
|
40
|
+
"EXPORT",
|
|
41
|
+
"BULK",
|
|
42
|
+
// System control
|
|
43
|
+
"SHUTDOWN",
|
|
44
|
+
"RESTART",
|
|
45
|
+
"KILL",
|
|
46
|
+
"STOP",
|
|
47
|
+
"START",
|
|
48
|
+
// Backup/restore
|
|
49
|
+
"BACKUP",
|
|
50
|
+
"RESTORE",
|
|
51
|
+
"DUMP",
|
|
52
|
+
// Locking
|
|
53
|
+
"LOCK",
|
|
54
|
+
"UNLOCK",
|
|
55
|
+
// Transaction control (in some contexts dangerous)
|
|
56
|
+
"COMMIT",
|
|
57
|
+
"ROLLBACK",
|
|
58
|
+
"SAVEPOINT",
|
|
59
|
+
// IBM i specific
|
|
60
|
+
"QCMDEXC",
|
|
61
|
+
"SQL_EXECUTE_IMMEDIATE",
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* Dangerous SQL functions that should be monitored/blocked
|
|
65
|
+
*/
|
|
66
|
+
export const DANGEROUS_FUNCTIONS = [
|
|
67
|
+
"SYSTEM",
|
|
68
|
+
"QCMDEXC",
|
|
69
|
+
"SQL_EXECUTE_IMMEDIATE",
|
|
70
|
+
"SQLCMD",
|
|
71
|
+
"LOAD_EXTENSION",
|
|
72
|
+
"EXEC",
|
|
73
|
+
"EXECUTE_IMMEDIATE",
|
|
74
|
+
"EVAL",
|
|
75
|
+
"CONCAT",
|
|
76
|
+
"CHAR",
|
|
77
|
+
"VARCHAR", // Can be used for dynamic SQL construction
|
|
78
|
+
];
|
|
79
|
+
/**
|
|
80
|
+
* Dangerous SQL patterns that should be detected
|
|
81
|
+
*/
|
|
82
|
+
export const DANGEROUS_PATTERNS = [
|
|
83
|
+
// Dynamic SQL patterns
|
|
84
|
+
/\bCONCAT\s*\(/i,
|
|
85
|
+
/\b(CHAR|VARCHAR|CLOB)\s*\(/i,
|
|
86
|
+
// System function patterns
|
|
87
|
+
/\bSYSTEM\s*\(/i,
|
|
88
|
+
/\bLOAD_EXTENSION\s*\(/i,
|
|
89
|
+
/\bQCMDEXC\s*\(/i,
|
|
90
|
+
// Comment-based bypass attempts
|
|
91
|
+
/\/\*.*?(DROP|DELETE|INSERT|UPDATE).*?\*\//i,
|
|
92
|
+
// Multiple statement patterns
|
|
93
|
+
/;\s*(DROP|DELETE|INSERT|UPDATE|CREATE|ALTER)/i,
|
|
94
|
+
// Union-based attacks
|
|
95
|
+
/\bUNION\s+(ALL\s+)?\s*\(\s*(DROP|DELETE|INSERT|UPDATE)/i,
|
|
96
|
+
];
|
|
97
|
+
/**
|
|
98
|
+
* SQL Security Validator class for comprehensive SQL security validation
|
|
99
|
+
*/
|
|
100
|
+
export class SqlSecurityValidator {
|
|
101
|
+
static parser = new Parser();
|
|
102
|
+
/**
|
|
103
|
+
* Validate SQL query against security configuration
|
|
104
|
+
* @param query - SQL query to validate
|
|
105
|
+
* @param securityConfig - Security configuration
|
|
106
|
+
* @param context - Request context for logging
|
|
107
|
+
* @throws {McpError} If validation fails
|
|
108
|
+
*/
|
|
109
|
+
static validateQuery(query, securityConfig, context) {
|
|
110
|
+
logger.debug({
|
|
111
|
+
...context,
|
|
112
|
+
queryLength: query.length,
|
|
113
|
+
readOnly: securityConfig.readOnly,
|
|
114
|
+
maxQueryLength: securityConfig.maxQueryLength,
|
|
115
|
+
}, "Starting SQL security validation");
|
|
116
|
+
// 1. Check query length limit
|
|
117
|
+
this.validateQueryLength(query, securityConfig);
|
|
118
|
+
// 2. Always validate forbidden keywords (regardless of read-only setting)
|
|
119
|
+
this.validateForbiddenKeywords(query, securityConfig, context);
|
|
120
|
+
// 3. If in read-only mode, perform comprehensive write operation validation
|
|
121
|
+
if (securityConfig.readOnly !== false) {
|
|
122
|
+
this.validateReadOnlyRestrictions(query, context);
|
|
123
|
+
}
|
|
124
|
+
logger.debug({
|
|
125
|
+
...context,
|
|
126
|
+
}, "SQL security validation passed");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate query length against configured limits
|
|
130
|
+
* @param query - SQL query to validate
|
|
131
|
+
* @param securityConfig - Security configuration
|
|
132
|
+
* @private
|
|
133
|
+
*/
|
|
134
|
+
static validateQueryLength(query, securityConfig) {
|
|
135
|
+
const maxLength = securityConfig.maxQueryLength ?? 10000;
|
|
136
|
+
if (query.length > maxLength) {
|
|
137
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Query exceeds maximum length of ${maxLength} characters`, {
|
|
138
|
+
queryLength: query.length,
|
|
139
|
+
maxLength,
|
|
140
|
+
query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validate forbidden keywords using both AST and regex approaches
|
|
146
|
+
* @param query - SQL query to validate
|
|
147
|
+
* @param securityConfig - Security configuration
|
|
148
|
+
* @param context - Request context for logging
|
|
149
|
+
* @private
|
|
150
|
+
*/
|
|
151
|
+
static validateForbiddenKeywords(query, securityConfig, context) {
|
|
152
|
+
if (!securityConfig.forbiddenKeywords ||
|
|
153
|
+
securityConfig.forbiddenKeywords.length === 0) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Try AST-based validation first
|
|
157
|
+
const astResult = this.validateForbiddenKeywordsAST(query, securityConfig.forbiddenKeywords, context);
|
|
158
|
+
if (!astResult.isValid) {
|
|
159
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Forbidden keywords detected: ${astResult.violations.join(", ")}`, {
|
|
160
|
+
violations: astResult.violations,
|
|
161
|
+
forbiddenKeywords: securityConfig.forbiddenKeywords,
|
|
162
|
+
query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Fallback to regex validation
|
|
166
|
+
const regexResult = this.validateForbiddenKeywordsRegex(query, securityConfig.forbiddenKeywords);
|
|
167
|
+
if (!regexResult.isValid) {
|
|
168
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Forbidden keywords detected: ${regexResult.violations.join(", ")}`, {
|
|
169
|
+
violations: regexResult.violations,
|
|
170
|
+
forbiddenKeywords: securityConfig.forbiddenKeywords,
|
|
171
|
+
query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Validate read-only restrictions using comprehensive validation
|
|
177
|
+
* @param query - SQL query to validate
|
|
178
|
+
* @param context - Request context for logging
|
|
179
|
+
* @private
|
|
180
|
+
*/
|
|
181
|
+
static validateReadOnlyRestrictions(query, context) {
|
|
182
|
+
// Try AST-based validation first (more reliable)
|
|
183
|
+
const astResult = this.validateQueryAST(query, context);
|
|
184
|
+
if (!astResult.isValid) {
|
|
185
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Write operations detected: ${astResult.violations.join(", ")}`, {
|
|
186
|
+
violations: astResult.violations,
|
|
187
|
+
readOnly: true,
|
|
188
|
+
query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// Fallback to regex validation for additional coverage
|
|
192
|
+
const regexResult = this.validateQueryRegex(query, context);
|
|
193
|
+
if (!regexResult.isValid) {
|
|
194
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Write operations detected: ${regexResult.violations.join(", ")}`, {
|
|
195
|
+
violations: regexResult.violations,
|
|
196
|
+
readOnly: true,
|
|
197
|
+
query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Validate SQL query using AST parsing
|
|
203
|
+
* @param query - SQL query to validate
|
|
204
|
+
* @param context - Request context for logging
|
|
205
|
+
* @private
|
|
206
|
+
*/
|
|
207
|
+
static validateQueryAST(query, context) {
|
|
208
|
+
const violations = [];
|
|
209
|
+
try {
|
|
210
|
+
const ast = this.parser.astify(query, { database: "mysql" });
|
|
211
|
+
logger.debug({
|
|
212
|
+
...context,
|
|
213
|
+
astType: Array.isArray(ast) ? "multiple" : "single",
|
|
214
|
+
statementCount: Array.isArray(ast) ? ast.length : 1,
|
|
215
|
+
}, "SQL AST parsed successfully");
|
|
216
|
+
const statements = Array.isArray(ast) ? ast : [ast];
|
|
217
|
+
for (const statement of statements) {
|
|
218
|
+
if (!statement || typeof statement !== "object")
|
|
219
|
+
continue;
|
|
220
|
+
const objStmt = statement;
|
|
221
|
+
const stmtType = String(objStmt.type || "").toUpperCase();
|
|
222
|
+
// 1. Check top-level statement type
|
|
223
|
+
if (stmtType &&
|
|
224
|
+
DANGEROUS_OPERATIONS.includes(stmtType)) {
|
|
225
|
+
violations.push(`Dangerous statement type: ${stmtType}`);
|
|
226
|
+
}
|
|
227
|
+
// 2. Check for dangerous functions anywhere in the AST
|
|
228
|
+
const dangerousFunctions = this.findDangerousFunctionsInAST(statement);
|
|
229
|
+
if (dangerousFunctions.length > 0) {
|
|
230
|
+
violations.push(...dangerousFunctions.map((f) => `Dangerous function: ${f}`));
|
|
231
|
+
}
|
|
232
|
+
// 3. Check for UNION-based attacks
|
|
233
|
+
if (this.hasUnionWithDangerousStatements(statement)) {
|
|
234
|
+
violations.push("UNION with dangerous statements detected");
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
isValid: violations.length === 0,
|
|
239
|
+
violations,
|
|
240
|
+
validationMethod: "ast",
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch (parseError) {
|
|
244
|
+
logger.warning({
|
|
245
|
+
...context,
|
|
246
|
+
error: parseError instanceof Error
|
|
247
|
+
? parseError.message
|
|
248
|
+
: String(parseError),
|
|
249
|
+
queryLength: query.length,
|
|
250
|
+
}, "SQL AST parsing failed, will use regex validation only");
|
|
251
|
+
return {
|
|
252
|
+
isValid: true, // Let regex validation handle it
|
|
253
|
+
violations: [],
|
|
254
|
+
validationMethod: "ast",
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Validate SQL query using regex patterns
|
|
260
|
+
* @param query - SQL query to validate
|
|
261
|
+
* @param _context - Request context for logging (unused but kept for consistency)
|
|
262
|
+
* @private
|
|
263
|
+
*/
|
|
264
|
+
static validateQueryRegex(query, _context) {
|
|
265
|
+
const violations = [];
|
|
266
|
+
// Check for dangerous operations
|
|
267
|
+
for (const operation of DANGEROUS_OPERATIONS) {
|
|
268
|
+
const pattern = new RegExp(`\\b${operation}\\b`, "i");
|
|
269
|
+
if (pattern.test(query)) {
|
|
270
|
+
violations.push(`Write operation '${operation}' detected`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Check for dangerous patterns
|
|
274
|
+
for (const pattern of DANGEROUS_PATTERNS) {
|
|
275
|
+
if (pattern.test(query)) {
|
|
276
|
+
violations.push(`Dangerous pattern detected: ${pattern.source}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Check for suspicious function calls
|
|
280
|
+
for (const func of DANGEROUS_FUNCTIONS) {
|
|
281
|
+
const pattern = new RegExp(`\\b${func}\\s*\\(`, "i");
|
|
282
|
+
if (pattern.test(query)) {
|
|
283
|
+
violations.push(`Suspicious function '${func}' detected`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
isValid: violations.length === 0,
|
|
288
|
+
violations,
|
|
289
|
+
validationMethod: "regex",
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Validate forbidden keywords using AST parsing
|
|
294
|
+
* @param query - SQL query to validate
|
|
295
|
+
* @param forbiddenKeywords - List of forbidden keywords
|
|
296
|
+
* @param context - Request context for logging
|
|
297
|
+
* @private
|
|
298
|
+
*/
|
|
299
|
+
static validateForbiddenKeywordsAST(query, forbiddenKeywords, context) {
|
|
300
|
+
const violations = [];
|
|
301
|
+
try {
|
|
302
|
+
const ast = this.parser.astify(query, { database: "mysql" });
|
|
303
|
+
const statements = Array.isArray(ast) ? ast : [ast];
|
|
304
|
+
for (const statement of statements) {
|
|
305
|
+
const foundKeywords = this.findForbiddenKeywordsInAST(statement, forbiddenKeywords);
|
|
306
|
+
violations.push(...foundKeywords.map((k) => `Forbidden keyword: ${k}`));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch (parseError) {
|
|
310
|
+
logger.debug({
|
|
311
|
+
...context,
|
|
312
|
+
error: parseError instanceof Error
|
|
313
|
+
? parseError.message
|
|
314
|
+
: String(parseError),
|
|
315
|
+
}, "AST parsing failed for forbidden keyword validation");
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
isValid: violations.length === 0,
|
|
319
|
+
violations,
|
|
320
|
+
validationMethod: "ast",
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Validate forbidden keywords using regex patterns
|
|
325
|
+
* @param query - SQL query to validate
|
|
326
|
+
* @param forbiddenKeywords - List of forbidden keywords
|
|
327
|
+
* @private
|
|
328
|
+
*/
|
|
329
|
+
static validateForbiddenKeywordsRegex(query, forbiddenKeywords) {
|
|
330
|
+
const violations = [];
|
|
331
|
+
for (const keyword of forbiddenKeywords) {
|
|
332
|
+
const pattern = new RegExp(`\\b${keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
|
|
333
|
+
if (pattern.test(query)) {
|
|
334
|
+
violations.push(`Forbidden keyword: ${keyword}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
isValid: violations.length === 0,
|
|
339
|
+
violations,
|
|
340
|
+
validationMethod: "regex",
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Find dangerous functions anywhere in the AST
|
|
345
|
+
* @param node - AST node to analyze
|
|
346
|
+
* @private
|
|
347
|
+
*/
|
|
348
|
+
static findDangerousFunctionsInAST(node) {
|
|
349
|
+
const violations = [];
|
|
350
|
+
if (!node || typeof node !== "object")
|
|
351
|
+
return violations;
|
|
352
|
+
const objNode = node;
|
|
353
|
+
// Check if this node is a function call
|
|
354
|
+
if (objNode.type === "function" && objNode.name) {
|
|
355
|
+
const funcName = String(objNode.name).toUpperCase();
|
|
356
|
+
if (DANGEROUS_FUNCTIONS.includes(funcName)) {
|
|
357
|
+
violations.push(funcName);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Recursively check all properties
|
|
361
|
+
for (const key in objNode) {
|
|
362
|
+
const value = objNode[key];
|
|
363
|
+
if (Array.isArray(value)) {
|
|
364
|
+
value.forEach((item) => violations.push(...this.findDangerousFunctionsInAST(item)));
|
|
365
|
+
}
|
|
366
|
+
else if (typeof value === "object") {
|
|
367
|
+
violations.push(...this.findDangerousFunctionsInAST(value));
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return violations;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Find forbidden keywords anywhere in the AST
|
|
374
|
+
* @param node - AST node to analyze
|
|
375
|
+
* @param forbiddenKeywords - List of forbidden keywords
|
|
376
|
+
* @private
|
|
377
|
+
*/
|
|
378
|
+
static findForbiddenKeywordsInAST(node, forbiddenKeywords) {
|
|
379
|
+
const violations = [];
|
|
380
|
+
if (!node || typeof node !== "object")
|
|
381
|
+
return violations;
|
|
382
|
+
const objNode = node;
|
|
383
|
+
// Check string values for forbidden keywords
|
|
384
|
+
for (const key in objNode) {
|
|
385
|
+
const value = objNode[key];
|
|
386
|
+
if (typeof value === "string") {
|
|
387
|
+
for (const keyword of forbiddenKeywords) {
|
|
388
|
+
const pattern = new RegExp(`\\b${keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
|
|
389
|
+
if (pattern.test(value)) {
|
|
390
|
+
violations.push(keyword);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
else if (Array.isArray(value)) {
|
|
395
|
+
value.forEach((item) => violations.push(...this.findForbiddenKeywordsInAST(item, forbiddenKeywords)));
|
|
396
|
+
}
|
|
397
|
+
else if (typeof value === "object") {
|
|
398
|
+
violations.push(...this.findForbiddenKeywordsInAST(value, forbiddenKeywords));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return violations;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Check for UNION with dangerous statements
|
|
405
|
+
* @param statement - AST statement to check
|
|
406
|
+
* @private
|
|
407
|
+
*/
|
|
408
|
+
static hasUnionWithDangerousStatements(statement) {
|
|
409
|
+
if (!statement || typeof statement !== "object")
|
|
410
|
+
return false;
|
|
411
|
+
const stmt = statement;
|
|
412
|
+
// Check if this is a UNION statement
|
|
413
|
+
if (stmt.type === "select" && stmt.union) {
|
|
414
|
+
// Check each part of the union
|
|
415
|
+
const unionParts = Array.isArray(stmt.union) ? stmt.union : [stmt.union];
|
|
416
|
+
for (const part of unionParts) {
|
|
417
|
+
const partObj = part;
|
|
418
|
+
if (partObj.type && String(partObj.type).toUpperCase() !== "SELECT") {
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=sqlSecurityValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlSecurityValidator.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unified parameter processor for SQL parameter validation and binding
|
|
3
|
+
* Combines validation, type conversion, and SQL parameter binding in a single streamlined interface
|
|
4
|
+
*
|
|
5
|
+
* @module src/utils/sql/parameterProcessor
|
|
6
|
+
*/
|
|
7
|
+
import { BindingValue } from "@ibm/mapepire-js";
|
|
8
|
+
import { RequestContext } from "../../../utils/internal/requestContext.js";
|
|
9
|
+
import { SqlToolParameter } from "../../schemas/index.js";
|
|
10
|
+
/**
|
|
11
|
+
* Parameter processing mode
|
|
12
|
+
*/
|
|
13
|
+
export type ParameterMode = "named" | "positional" | "template" | "hybrid";
|
|
14
|
+
/**
|
|
15
|
+
* Parameter processing options
|
|
16
|
+
*/
|
|
17
|
+
export interface ParameterProcessingOptions {
|
|
18
|
+
/** Whether to include detailed logging */
|
|
19
|
+
detailedLogging?: boolean;
|
|
20
|
+
/** Whether to validate parameter syntax */
|
|
21
|
+
validateSyntax?: boolean;
|
|
22
|
+
/** Custom context for logging */
|
|
23
|
+
context?: RequestContext;
|
|
24
|
+
/** Strict type validation */
|
|
25
|
+
strictTypeValidation?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parameter processing result
|
|
29
|
+
*/
|
|
30
|
+
export interface ParameterProcessingResult {
|
|
31
|
+
/** Processed SQL string with ? placeholders */
|
|
32
|
+
sql: string;
|
|
33
|
+
/** Parameters in order for binding */
|
|
34
|
+
parameters: BindingValue[];
|
|
35
|
+
/** Parameter names that were found */
|
|
36
|
+
parameterNames: string[];
|
|
37
|
+
/** Parameters that were missing */
|
|
38
|
+
missingParameters: string[];
|
|
39
|
+
/** Detected parameter mode */
|
|
40
|
+
mode: ParameterMode;
|
|
41
|
+
/** Processing statistics */
|
|
42
|
+
stats: {
|
|
43
|
+
originalLength: number;
|
|
44
|
+
processedLength: number;
|
|
45
|
+
namedParametersFound: number;
|
|
46
|
+
positionalParametersFound: number;
|
|
47
|
+
parametersConverted: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parameter validation result
|
|
52
|
+
*/
|
|
53
|
+
export interface ValidationResult {
|
|
54
|
+
/** Whether validation passed */
|
|
55
|
+
valid: boolean;
|
|
56
|
+
/** Converted value (if valid) */
|
|
57
|
+
value?: BindingValue;
|
|
58
|
+
/** Validation errors */
|
|
59
|
+
errors: string[];
|
|
60
|
+
/** Validation warnings */
|
|
61
|
+
warnings: string[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Unified parameter processor for SQL parameter validation and binding
|
|
65
|
+
* Handles validation, type conversion, and SQL parameter binding in one streamlined interface
|
|
66
|
+
*/
|
|
67
|
+
export declare class ParameterProcessor {
|
|
68
|
+
/**
|
|
69
|
+
* Process SQL statement with parameter validation and binding
|
|
70
|
+
* @param sql - SQL statement with parameter placeholders
|
|
71
|
+
* @param parameterValues - Parameter values by name
|
|
72
|
+
* @param parameterDefinitions - YAML parameter definitions for validation
|
|
73
|
+
* @param options - Processing options
|
|
74
|
+
* @returns Processed SQL and parameter array with validation results
|
|
75
|
+
*/
|
|
76
|
+
static process(sql: string, parameterValues: Record<string, unknown>, parameterDefinitions?: SqlToolParameter[], options?: ParameterProcessingOptions): Promise<ParameterProcessingResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Validate parameters and apply defaults according to YAML definitions
|
|
79
|
+
* @param parameterValues - Raw parameter values
|
|
80
|
+
* @param parameterDefinitions - YAML parameter definitions
|
|
81
|
+
* @param context - Request context
|
|
82
|
+
* @returns Validated and processed parameters
|
|
83
|
+
*/
|
|
84
|
+
private static validateAndProcessParameters;
|
|
85
|
+
/**
|
|
86
|
+
* Validate and convert parameter value according to YAML definition
|
|
87
|
+
* @param value - Input value to validate
|
|
88
|
+
* @param definition - YAML parameter definition
|
|
89
|
+
* @returns Validation result with converted value
|
|
90
|
+
*/
|
|
91
|
+
private static validateParameter;
|
|
92
|
+
/**
|
|
93
|
+
* Validate string parameter
|
|
94
|
+
*/
|
|
95
|
+
private static validateStringParameter;
|
|
96
|
+
/**
|
|
97
|
+
* Validate integer parameter
|
|
98
|
+
*/
|
|
99
|
+
private static validateIntegerParameter;
|
|
100
|
+
/**
|
|
101
|
+
* Validate float parameter
|
|
102
|
+
*/
|
|
103
|
+
private static validateFloatParameter;
|
|
104
|
+
/**
|
|
105
|
+
* Validate boolean parameter
|
|
106
|
+
*/
|
|
107
|
+
private static validateBooleanParameter;
|
|
108
|
+
/**
|
|
109
|
+
* Validate array parameter
|
|
110
|
+
*/
|
|
111
|
+
private static validateArrayParameter;
|
|
112
|
+
/**
|
|
113
|
+
* Validate enum constraint
|
|
114
|
+
*/
|
|
115
|
+
private static validateEnumConstraint;
|
|
116
|
+
/**
|
|
117
|
+
* Detect the parameter mode used in the SQL statement
|
|
118
|
+
* @param sql - SQL statement to analyze
|
|
119
|
+
* @returns Detected parameter mode
|
|
120
|
+
*/
|
|
121
|
+
private static detectParameterMode;
|
|
122
|
+
/**
|
|
123
|
+
* Process named parameters (:param)
|
|
124
|
+
* @param sql - SQL statement with named parameters
|
|
125
|
+
* @param parameterValues - Parameter values by name
|
|
126
|
+
* @param context - Request context
|
|
127
|
+
* @param strictTypeValidation - Whether to enforce strict type validation
|
|
128
|
+
* @returns Processing result
|
|
129
|
+
*/
|
|
130
|
+
private static processNamedParameters;
|
|
131
|
+
/**
|
|
132
|
+
* Process positional parameters (?)
|
|
133
|
+
* @param sql - SQL statement with positional parameters
|
|
134
|
+
* @param parameterValues - Parameter values by name or index
|
|
135
|
+
* @param context - Request context
|
|
136
|
+
* @param strictTypeValidation - Whether to enforce strict type validation
|
|
137
|
+
* @returns Processing result
|
|
138
|
+
*/
|
|
139
|
+
private static processPositionalParameters;
|
|
140
|
+
/**
|
|
141
|
+
* Process hybrid parameters (mix of named and positional)
|
|
142
|
+
* @param sql - SQL statement with mixed parameters
|
|
143
|
+
* @param parameterValues - Parameter values by name
|
|
144
|
+
* @param context - Request context
|
|
145
|
+
* @param strictTypeValidation - Whether to enforce strict type validation
|
|
146
|
+
* @returns Processing result
|
|
147
|
+
*/
|
|
148
|
+
private static processHybridParameters;
|
|
149
|
+
/**
|
|
150
|
+
* Convert a parameter value to BindingValue
|
|
151
|
+
* @param value - Parameter value to convert
|
|
152
|
+
* @param paramName - Parameter name for error messages
|
|
153
|
+
* @param strictTypeValidation - Whether to enforce strict type validation
|
|
154
|
+
* @returns Converted BindingValue
|
|
155
|
+
*/
|
|
156
|
+
private static convertToBindingValue;
|
|
157
|
+
/**
|
|
158
|
+
* Validate SQL statement syntax for parameter processing
|
|
159
|
+
* @param sql - SQL statement to validate
|
|
160
|
+
* @throws McpError if syntax is invalid
|
|
161
|
+
*/
|
|
162
|
+
private static validateSqlSyntax;
|
|
163
|
+
/**
|
|
164
|
+
* Extract parameter names from SQL statement
|
|
165
|
+
* @param sql - SQL statement to analyze
|
|
166
|
+
* @returns Array of unique parameter names
|
|
167
|
+
*/
|
|
168
|
+
static extractParameterNames(sql: string): string[];
|
|
169
|
+
/**
|
|
170
|
+
* Count positional parameters in SQL statement
|
|
171
|
+
* @param sql - SQL statement to analyze
|
|
172
|
+
* @returns Number of ? placeholders
|
|
173
|
+
*/
|
|
174
|
+
static countPositionalParameters(sql: string): number;
|
|
175
|
+
/**
|
|
176
|
+
* Check if SQL statement has any parameters
|
|
177
|
+
* @param sql - SQL statement to check
|
|
178
|
+
* @returns True if statement contains parameters
|
|
179
|
+
*/
|
|
180
|
+
static hasParameters(sql: string): boolean;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=parameterProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameterProcessor.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/sql/parameterProcessor.ts"],"names":[],"mappings":"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"}
|