@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,109 @@
|
|
|
1
|
+
import { RequestContext } from "../index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Defines configuration options for the {@link RateLimiter}.
|
|
4
|
+
*/
|
|
5
|
+
export interface RateLimitConfig {
|
|
6
|
+
/** Time window in milliseconds. */
|
|
7
|
+
windowMs: number;
|
|
8
|
+
/** Maximum number of requests allowed in the window. */
|
|
9
|
+
maxRequests: number;
|
|
10
|
+
/** Custom error message template. Can include `{waitTime}` placeholder. */
|
|
11
|
+
errorMessage?: string;
|
|
12
|
+
/** If true, skip rate limiting in development. */
|
|
13
|
+
skipInDevelopment?: boolean;
|
|
14
|
+
/** Optional function to generate a custom key for rate limiting. */
|
|
15
|
+
keyGenerator?: (identifier: string, context?: RequestContext) => string;
|
|
16
|
+
/** How often, in milliseconds, to clean up expired entries. */
|
|
17
|
+
cleanupInterval?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Represents an individual entry for tracking requests against a rate limit key.
|
|
21
|
+
*/
|
|
22
|
+
export interface RateLimitEntry {
|
|
23
|
+
/** Current request count. */
|
|
24
|
+
count: number;
|
|
25
|
+
/** When the window resets (timestamp in milliseconds). */
|
|
26
|
+
resetTime: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A generic rate limiter class using an in-memory store.
|
|
30
|
+
* Controls frequency of operations based on unique keys.
|
|
31
|
+
*/
|
|
32
|
+
export declare class RateLimiter {
|
|
33
|
+
private config;
|
|
34
|
+
/**
|
|
35
|
+
* Stores current request counts and reset times for each key.
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
private limits;
|
|
39
|
+
/**
|
|
40
|
+
* Timer ID for periodic cleanup.
|
|
41
|
+
* @private
|
|
42
|
+
*/
|
|
43
|
+
private cleanupTimer;
|
|
44
|
+
/**
|
|
45
|
+
* Default configuration values.
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
private static DEFAULT_CONFIG;
|
|
49
|
+
/**
|
|
50
|
+
* Creates a new `RateLimiter` instance.
|
|
51
|
+
* @param config - Configuration options, merged with defaults.
|
|
52
|
+
*/
|
|
53
|
+
constructor(config: RateLimitConfig);
|
|
54
|
+
/**
|
|
55
|
+
* Starts the periodic timer to clean up expired rate limit entries.
|
|
56
|
+
* @private
|
|
57
|
+
*/
|
|
58
|
+
private startCleanupTimer;
|
|
59
|
+
/**
|
|
60
|
+
* Removes expired rate limit entries from the store.
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
private cleanupExpiredEntries;
|
|
64
|
+
/**
|
|
65
|
+
* Updates the configuration of the rate limiter instance.
|
|
66
|
+
* @param config - New configuration options to merge.
|
|
67
|
+
*/
|
|
68
|
+
configure(config: Partial<RateLimitConfig>): void;
|
|
69
|
+
/**
|
|
70
|
+
* Retrieves a copy of the current rate limiter configuration.
|
|
71
|
+
* @returns The current configuration.
|
|
72
|
+
*/
|
|
73
|
+
getConfig(): RateLimitConfig;
|
|
74
|
+
/**
|
|
75
|
+
* Resets all rate limits by clearing the internal store.
|
|
76
|
+
*/
|
|
77
|
+
reset(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Checks if a request exceeds the configured rate limit.
|
|
80
|
+
* Throws an `McpError` if the limit is exceeded.
|
|
81
|
+
*
|
|
82
|
+
* @param key - A unique identifier for the request source.
|
|
83
|
+
* @param context - Optional request context for custom key generation.
|
|
84
|
+
* @throws {McpError} If the rate limit is exceeded.
|
|
85
|
+
*/
|
|
86
|
+
check(key: string, context?: RequestContext): void;
|
|
87
|
+
/**
|
|
88
|
+
* Retrieves the current rate limit status for a specific key.
|
|
89
|
+
* @param key - The rate limit key.
|
|
90
|
+
* @returns Status object or `null` if no entry exists.
|
|
91
|
+
*/
|
|
92
|
+
getStatus(key: string): {
|
|
93
|
+
current: number;
|
|
94
|
+
limit: number;
|
|
95
|
+
remaining: number;
|
|
96
|
+
resetTime: number;
|
|
97
|
+
} | null;
|
|
98
|
+
/**
|
|
99
|
+
* Stops the cleanup timer and clears all rate limit entries.
|
|
100
|
+
* Call when the rate limiter is no longer needed.
|
|
101
|
+
*/
|
|
102
|
+
dispose(): void;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Default singleton instance of the `RateLimiter`.
|
|
106
|
+
* Initialized with default configuration. Use `rateLimiter.configure({})` to customize.
|
|
107
|
+
*/
|
|
108
|
+
export declare const rateLimiter: RateLimiter;
|
|
109
|
+
//# sourceMappingURL=rateLimiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../src/utils/security/rateLimiter.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,cAAc,EAEf,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,MAAM,CAAC;IACxE,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,WAAW;IA6BV,OAAO,CAAC,MAAM;IA5B1B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAA8B;IAC5C;;;OAGG;IACH,OAAO,CAAC,YAAY,CAA+B;IAEnD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc,CAO3B;IAEF;;;OAGG;gBACiB,MAAM,EAAE,eAAe;IAM3C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAOxD;;;OAGG;IACI,SAAS,IAAI,eAAe;IAInC;;OAEG;IACI,KAAK,IAAI,IAAI;IAQpB;;;;;;;OAOG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAqDzD;;;;OAIG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAaR;;;OAGG;IACI,OAAO,IAAI,IAAI;CAOvB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,aAGtB,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Provides a generic `RateLimiter` class for implementing rate limiting logic.
|
|
3
|
+
* It supports configurable time windows, request limits, and automatic cleanup of expired entries.
|
|
4
|
+
* @module src/utils/security/rateLimiter
|
|
5
|
+
*/
|
|
6
|
+
import { trace } from "@opentelemetry/api";
|
|
7
|
+
import { environment } from "../../config/index.js";
|
|
8
|
+
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
9
|
+
import { logger, requestContextService, } from "../index.js";
|
|
10
|
+
/**
|
|
11
|
+
* A generic rate limiter class using an in-memory store.
|
|
12
|
+
* Controls frequency of operations based on unique keys.
|
|
13
|
+
*/
|
|
14
|
+
export class RateLimiter {
|
|
15
|
+
config;
|
|
16
|
+
/**
|
|
17
|
+
* Stores current request counts and reset times for each key.
|
|
18
|
+
* @private
|
|
19
|
+
*/
|
|
20
|
+
limits;
|
|
21
|
+
/**
|
|
22
|
+
* Timer ID for periodic cleanup.
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
cleanupTimer = null;
|
|
26
|
+
/**
|
|
27
|
+
* Default configuration values.
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
static DEFAULT_CONFIG = {
|
|
31
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
32
|
+
maxRequests: 100,
|
|
33
|
+
errorMessage: "Rate limit exceeded. Please try again in {waitTime} seconds.",
|
|
34
|
+
skipInDevelopment: false,
|
|
35
|
+
cleanupInterval: 5 * 60 * 1000, // 5 minutes
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new `RateLimiter` instance.
|
|
39
|
+
* @param config - Configuration options, merged with defaults.
|
|
40
|
+
*/
|
|
41
|
+
constructor(config) {
|
|
42
|
+
this.config = config;
|
|
43
|
+
this.config = { ...RateLimiter.DEFAULT_CONFIG, ...config };
|
|
44
|
+
this.limits = new Map();
|
|
45
|
+
this.startCleanupTimer();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Starts the periodic timer to clean up expired rate limit entries.
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
startCleanupTimer() {
|
|
52
|
+
if (this.cleanupTimer) {
|
|
53
|
+
clearInterval(this.cleanupTimer);
|
|
54
|
+
}
|
|
55
|
+
const interval = this.config.cleanupInterval ?? RateLimiter.DEFAULT_CONFIG.cleanupInterval;
|
|
56
|
+
if (interval && interval > 0) {
|
|
57
|
+
this.cleanupTimer = setInterval(() => {
|
|
58
|
+
this.cleanupExpiredEntries();
|
|
59
|
+
}, interval);
|
|
60
|
+
if (this.cleanupTimer.unref) {
|
|
61
|
+
this.cleanupTimer.unref(); // Allow Node.js process to exit if only timer active
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Removes expired rate limit entries from the store.
|
|
67
|
+
* @private
|
|
68
|
+
*/
|
|
69
|
+
cleanupExpiredEntries() {
|
|
70
|
+
const now = Date.now();
|
|
71
|
+
let expiredCount = 0;
|
|
72
|
+
for (const [key, entry] of this.limits.entries()) {
|
|
73
|
+
if (now >= entry.resetTime) {
|
|
74
|
+
this.limits.delete(key);
|
|
75
|
+
expiredCount++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (expiredCount > 0) {
|
|
79
|
+
const logContext = requestContextService.createRequestContext({
|
|
80
|
+
operation: "RateLimiter.cleanupExpiredEntries",
|
|
81
|
+
cleanedCount: expiredCount,
|
|
82
|
+
totalRemainingAfterClean: this.limits.size,
|
|
83
|
+
});
|
|
84
|
+
logger.debug(logContext, `Cleaned up ${expiredCount} expired rate limit entries`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Updates the configuration of the rate limiter instance.
|
|
89
|
+
* @param config - New configuration options to merge.
|
|
90
|
+
*/
|
|
91
|
+
configure(config) {
|
|
92
|
+
this.config = { ...this.config, ...config };
|
|
93
|
+
if (config.cleanupInterval !== undefined) {
|
|
94
|
+
this.startCleanupTimer();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Retrieves a copy of the current rate limiter configuration.
|
|
99
|
+
* @returns The current configuration.
|
|
100
|
+
*/
|
|
101
|
+
getConfig() {
|
|
102
|
+
return { ...this.config };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resets all rate limits by clearing the internal store.
|
|
106
|
+
*/
|
|
107
|
+
reset() {
|
|
108
|
+
this.limits.clear();
|
|
109
|
+
const logContext = requestContextService.createRequestContext({
|
|
110
|
+
operation: "RateLimiter.reset",
|
|
111
|
+
});
|
|
112
|
+
logger.debug(logContext, "Rate limiter reset, all limits cleared");
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Checks if a request exceeds the configured rate limit.
|
|
116
|
+
* Throws an `McpError` if the limit is exceeded.
|
|
117
|
+
*
|
|
118
|
+
* @param key - A unique identifier for the request source.
|
|
119
|
+
* @param context - Optional request context for custom key generation.
|
|
120
|
+
* @throws {McpError} If the rate limit is exceeded.
|
|
121
|
+
*/
|
|
122
|
+
check(key, context) {
|
|
123
|
+
const activeSpan = trace.getActiveSpan();
|
|
124
|
+
activeSpan?.setAttribute("mcp.rate_limit.checked", true);
|
|
125
|
+
if (this.config.skipInDevelopment && environment === "development") {
|
|
126
|
+
activeSpan?.setAttribute("mcp.rate_limit.skipped", "development");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const limitKey = this.config.keyGenerator
|
|
130
|
+
? this.config.keyGenerator(key, context)
|
|
131
|
+
: key;
|
|
132
|
+
activeSpan?.setAttribute("mcp.rate_limit.key", limitKey);
|
|
133
|
+
const now = Date.now();
|
|
134
|
+
let entry = this.limits.get(limitKey);
|
|
135
|
+
if (!entry || now >= entry.resetTime) {
|
|
136
|
+
entry = {
|
|
137
|
+
count: 1,
|
|
138
|
+
resetTime: now + this.config.windowMs,
|
|
139
|
+
};
|
|
140
|
+
this.limits.set(limitKey, entry);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
entry.count++;
|
|
144
|
+
}
|
|
145
|
+
const remaining = Math.max(0, this.config.maxRequests - entry.count);
|
|
146
|
+
activeSpan?.setAttributes({
|
|
147
|
+
"mcp.rate_limit.limit": this.config.maxRequests,
|
|
148
|
+
"mcp.rate_limit.count": entry.count,
|
|
149
|
+
"mcp.rate_limit.remaining": remaining,
|
|
150
|
+
});
|
|
151
|
+
if (entry.count > this.config.maxRequests) {
|
|
152
|
+
const waitTime = Math.ceil((entry.resetTime - now) / 1000);
|
|
153
|
+
const errorMessage = (this.config.errorMessage || RateLimiter.DEFAULT_CONFIG.errorMessage).replace("{waitTime}", waitTime.toString());
|
|
154
|
+
activeSpan?.addEvent("rate_limit_exceeded", {
|
|
155
|
+
"mcp.rate_limit.wait_time_seconds": waitTime,
|
|
156
|
+
});
|
|
157
|
+
throw new McpError(JsonRpcErrorCode.RateLimited, errorMessage, {
|
|
158
|
+
waitTimeSeconds: waitTime,
|
|
159
|
+
key: limitKey,
|
|
160
|
+
limit: this.config.maxRequests,
|
|
161
|
+
windowMs: this.config.windowMs,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Retrieves the current rate limit status for a specific key.
|
|
167
|
+
* @param key - The rate limit key.
|
|
168
|
+
* @returns Status object or `null` if no entry exists.
|
|
169
|
+
*/
|
|
170
|
+
getStatus(key) {
|
|
171
|
+
const entry = this.limits.get(key);
|
|
172
|
+
if (!entry) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
current: entry.count,
|
|
177
|
+
limit: this.config.maxRequests,
|
|
178
|
+
remaining: Math.max(0, this.config.maxRequests - entry.count),
|
|
179
|
+
resetTime: entry.resetTime,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Stops the cleanup timer and clears all rate limit entries.
|
|
184
|
+
* Call when the rate limiter is no longer needed.
|
|
185
|
+
*/
|
|
186
|
+
dispose() {
|
|
187
|
+
if (this.cleanupTimer) {
|
|
188
|
+
clearInterval(this.cleanupTimer);
|
|
189
|
+
this.cleanupTimer = null;
|
|
190
|
+
}
|
|
191
|
+
this.limits.clear();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Default singleton instance of the `RateLimiter`.
|
|
196
|
+
* Initialized with default configuration. Use `rateLimiter.configure({})` to customize.
|
|
197
|
+
*/
|
|
198
|
+
export const rateLimiter = new RateLimiter({
|
|
199
|
+
windowMs: 15 * 60 * 1000, // Default: 15 minutes
|
|
200
|
+
maxRequests: 100, // Default: 100 requests per window
|
|
201
|
+
});
|
|
202
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/utils/security/rateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EACL,MAAM,EAEN,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AA8B1B;;;GAGG;AACH,MAAM,OAAO,WAAW;IA6BF;IA5BpB;;;OAGG;IACK,MAAM,CAA8B;IAC5C;;;OAGG;IACK,YAAY,GAA0B,IAAI,CAAC;IAEnD;;;OAGG;IACK,MAAM,CAAC,cAAc,GAAoB;QAC/C,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QACvC,WAAW,EAAE,GAAG;QAChB,YAAY,EACV,8DAA8D;QAChE,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;KAC7C,CAAC;IAEF;;;OAGG;IACH,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QACzC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,WAAW,CAAC,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC;QAE5E,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;gBACnC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC,EAAE,QAAQ,CAAC,CAAC;YAEb,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,qDAAqD;YAClF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,qBAAqB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;gBAC5D,SAAS,EAAE,mCAAmC;gBAC9C,YAAY,EAAE,YAAY;gBAC1B,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CACV,UAAU,EACV,cAAc,YAAY,6BAA6B,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,MAAgC;QAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS;QACd,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;YAC5D,SAAS,EAAE,mBAAmB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,GAAW,EAAE,OAAwB;QAChD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACzC,UAAU,EAAE,YAAY,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QAEzD,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;YACnE,UAAU,EAAE,YAAY,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;YACvC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;YACxC,CAAC,CAAC,GAAG,CAAC;QACR,UAAU,EAAE,YAAY,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrC,KAAK,GAAG;gBACN,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;aACtC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACrE,UAAU,EAAE,aAAa,CAAC;YACxB,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YAC/C,sBAAsB,EAAE,KAAK,CAAC,KAAK;YACnC,0BAA0B,EAAE,SAAS;SACtC,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,CACnB,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,WAAW,CAAC,cAAc,CAAC,YAAa,CACrE,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE7C,UAAU,EAAE,QAAQ,CAAC,qBAAqB,EAAE;gBAC1C,kCAAkC,EAAE,QAAQ;aAC7C,CAAC,CAAC;YAEH,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE;gBAC7D,eAAe,EAAE,QAAQ;gBACzB,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,GAAW;QAM1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7D,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;IACzC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,sBAAsB;IAChD,WAAW,EAAE,GAAG,EAAE,mCAAmC;CACtD,CAAC,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import sanitizeHtml from "sanitize-html";
|
|
2
|
+
/**
|
|
3
|
+
* Defines options for path sanitization to control how file paths are processed and validated.
|
|
4
|
+
*/
|
|
5
|
+
export interface PathSanitizeOptions {
|
|
6
|
+
/** If provided, restricts sanitized paths to be relative to this directory. */
|
|
7
|
+
rootDir?: string;
|
|
8
|
+
/** If true, normalizes Windows backslashes to POSIX forward slashes. */
|
|
9
|
+
toPosix?: boolean;
|
|
10
|
+
/** If true, absolute paths are permitted (subject to `rootDir`). Default: false. */
|
|
11
|
+
allowAbsolute?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Contains information about a path sanitization operation.
|
|
15
|
+
*/
|
|
16
|
+
export interface SanitizedPathInfo {
|
|
17
|
+
/** The final sanitized and normalized path string. */
|
|
18
|
+
sanitizedPath: string;
|
|
19
|
+
/** The original path string before any processing. */
|
|
20
|
+
originalInput: string;
|
|
21
|
+
/** True if the input path was absolute after initial normalization. */
|
|
22
|
+
wasAbsolute: boolean;
|
|
23
|
+
/** True if an absolute path was converted to relative due to `allowAbsolute: false`. */
|
|
24
|
+
convertedToRelative: boolean;
|
|
25
|
+
/** The effective options used for sanitization, including defaults. */
|
|
26
|
+
optionsUsed: PathSanitizeOptions;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Defines options for context-specific string sanitization.
|
|
30
|
+
*/
|
|
31
|
+
export interface SanitizeStringOptions {
|
|
32
|
+
/** The context in which the string will be used. 'javascript' is disallowed. */
|
|
33
|
+
context?: "text" | "html" | "attribute" | "url" | "javascript";
|
|
34
|
+
/** Custom allowed HTML tags if `context` is 'html'. */
|
|
35
|
+
allowedTags?: string[];
|
|
36
|
+
/** Custom allowed HTML attributes if `context` is 'html'. */
|
|
37
|
+
allowedAttributes?: Record<string, string[]>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Configuration options for HTML sanitization, mirroring `sanitize-html` library options.
|
|
41
|
+
*/
|
|
42
|
+
export interface HtmlSanitizeConfig {
|
|
43
|
+
/** An array of allowed HTML tag names. */
|
|
44
|
+
allowedTags?: string[];
|
|
45
|
+
/** Specifies allowed attributes, either globally or per tag. */
|
|
46
|
+
allowedAttributes?: sanitizeHtml.IOptions["allowedAttributes"];
|
|
47
|
+
/** If true, HTML comments are preserved. */
|
|
48
|
+
preserveComments?: boolean;
|
|
49
|
+
/** Custom functions to transform tags during sanitization. */
|
|
50
|
+
transformTags?: sanitizeHtml.IOptions["transformTags"];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A singleton class providing various methods for input sanitization.
|
|
54
|
+
* Aims to protect against common vulnerabilities like XSS and path traversal.
|
|
55
|
+
*/
|
|
56
|
+
export declare class Sanitization {
|
|
57
|
+
/** @private */
|
|
58
|
+
private static instance;
|
|
59
|
+
/**
|
|
60
|
+
* Default list of field names considered sensitive for log redaction.
|
|
61
|
+
* Case-insensitive matching is applied.
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
private sensitiveFields;
|
|
65
|
+
/**
|
|
66
|
+
* Default configuration for HTML sanitization.
|
|
67
|
+
* @private
|
|
68
|
+
*/
|
|
69
|
+
private defaultHtmlSanitizeConfig;
|
|
70
|
+
/** @private */
|
|
71
|
+
private constructor();
|
|
72
|
+
/**
|
|
73
|
+
* Retrieves the singleton instance of the `Sanitization` class.
|
|
74
|
+
* @returns The singleton `Sanitization` instance.
|
|
75
|
+
*/
|
|
76
|
+
static getInstance(): Sanitization;
|
|
77
|
+
/**
|
|
78
|
+
* Sets or extends the list of sensitive field names for log sanitization.
|
|
79
|
+
* @param fields - An array of field names to add to the sensitive list.
|
|
80
|
+
*/
|
|
81
|
+
setSensitiveFields(fields: string[]): void;
|
|
82
|
+
/**
|
|
83
|
+
* Gets a copy of the current list of sensitive field names.
|
|
84
|
+
* @returns An array of sensitive field names.
|
|
85
|
+
*/
|
|
86
|
+
getSensitiveFields(): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Sanitizes an HTML string by removing potentially malicious tags and attributes.
|
|
89
|
+
* @param input - The HTML string to sanitize.
|
|
90
|
+
* @param config - Optional custom configuration for `sanitize-html`.
|
|
91
|
+
* @returns The sanitized HTML string. Returns an empty string if input is falsy.
|
|
92
|
+
*/
|
|
93
|
+
sanitizeHtml(input: string, config?: HtmlSanitizeConfig): string;
|
|
94
|
+
/**
|
|
95
|
+
* Sanitizes a string based on its intended context (e.g., HTML, URL, text).
|
|
96
|
+
* **Important:** `context: 'javascript'` is disallowed due to security risks.
|
|
97
|
+
*
|
|
98
|
+
* @param input - The string to sanitize.
|
|
99
|
+
* @param options - Options specifying the sanitization context.
|
|
100
|
+
* @returns The sanitized string. Returns an empty string if input is falsy.
|
|
101
|
+
* @throws {McpError} If `options.context` is 'javascript', or URL validation fails.
|
|
102
|
+
*/
|
|
103
|
+
sanitizeString(input: string, options?: SanitizeStringOptions): string;
|
|
104
|
+
/**
|
|
105
|
+
* Converts attribute format for `sanitizeHtml`.
|
|
106
|
+
* @param attrs - Attributes in `{ tagName: ['attr1'] }` format.
|
|
107
|
+
* @returns Attributes in `sanitize-html` expected format.
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
private convertAttributesFormat;
|
|
111
|
+
/**
|
|
112
|
+
* Sanitizes a URL string by validating its format and protocol.
|
|
113
|
+
* @param input - The URL string to sanitize.
|
|
114
|
+
* @param allowedProtocols - Array of allowed URL protocols. Default: `['http', 'https']`.
|
|
115
|
+
* @returns The sanitized and trimmed URL string.
|
|
116
|
+
* @throws {McpError} If the URL is invalid or uses a disallowed protocol.
|
|
117
|
+
*/
|
|
118
|
+
sanitizeUrl(input: string, allowedProtocols?: string[]): string;
|
|
119
|
+
/**
|
|
120
|
+
* Sanitizes a file path to prevent path traversal and normalize format.
|
|
121
|
+
* @param input - The file path string to sanitize.
|
|
122
|
+
* @param options - Options to control sanitization behavior.
|
|
123
|
+
* @returns An object with the sanitized path and sanitization metadata.
|
|
124
|
+
* @throws {McpError} If the path is invalid or unsafe.
|
|
125
|
+
*/
|
|
126
|
+
sanitizePath(input: string, options?: PathSanitizeOptions): SanitizedPathInfo;
|
|
127
|
+
/**
|
|
128
|
+
* Sanitizes a JSON string by parsing it to validate its format.
|
|
129
|
+
* Optionally checks if the JSON string exceeds a maximum allowed size.
|
|
130
|
+
* @template T The expected type of the parsed JSON object. Defaults to `unknown`.
|
|
131
|
+
* @param input - The JSON string to sanitize/validate.
|
|
132
|
+
* @param maxSize - Optional maximum allowed size of the JSON string in bytes.
|
|
133
|
+
* @returns The parsed JavaScript object.
|
|
134
|
+
* @throws {McpError} If input is not a string, too large, or invalid JSON.
|
|
135
|
+
*/
|
|
136
|
+
sanitizeJson<T = unknown>(input: string, maxSize?: number): T;
|
|
137
|
+
/**
|
|
138
|
+
* Validates and sanitizes a numeric input, converting strings to numbers.
|
|
139
|
+
* Clamps the number to `min`/`max` if provided.
|
|
140
|
+
* @param input - The number or string to validate and sanitize.
|
|
141
|
+
* @param min - Minimum allowed value (inclusive).
|
|
142
|
+
* @param max - Maximum allowed value (inclusive).
|
|
143
|
+
* @returns The sanitized (and potentially clamped) number.
|
|
144
|
+
* @throws {McpError} If input is not a valid number, NaN, or Infinity.
|
|
145
|
+
*/
|
|
146
|
+
sanitizeNumber(input: number | string, min?: number, max?: number): number;
|
|
147
|
+
/**
|
|
148
|
+
* Sanitizes input for logging by redacting sensitive fields.
|
|
149
|
+
* Creates a deep clone and replaces values of fields matching `this.sensitiveFields`
|
|
150
|
+
* (case-insensitive substring match) with "[REDACTED]".
|
|
151
|
+
*
|
|
152
|
+
* It uses `structuredClone` if available for a high-fidelity deep clone.
|
|
153
|
+
* If `structuredClone` is not available (e.g., in older Node.js environments),
|
|
154
|
+
* it falls back to `JSON.parse(JSON.stringify(input))`. This fallback has limitations:
|
|
155
|
+
* - `Date` objects are converted to ISO date strings.
|
|
156
|
+
* - `undefined` values within objects are removed.
|
|
157
|
+
* - `Map`, `Set`, `RegExp` objects are converted to empty objects (`{}`).
|
|
158
|
+
* - Functions are removed.
|
|
159
|
+
* - `BigInt` values will throw an error during `JSON.stringify` unless a `toJSON` method is provided.
|
|
160
|
+
* - Circular references will cause `JSON.stringify` to throw an error.
|
|
161
|
+
*
|
|
162
|
+
* @param input - The input data to sanitize for logging.
|
|
163
|
+
* @returns A sanitized (deep cloned) version of the input, safe for logging.
|
|
164
|
+
* Returns original input if not object/array, or "[Log Sanitization Failed]" on error.
|
|
165
|
+
*/
|
|
166
|
+
sanitizeForLogging(input: unknown): unknown;
|
|
167
|
+
/**
|
|
168
|
+
* Recursively redacts sensitive fields in an object or array in place.
|
|
169
|
+
* @param obj - The object or array to redact.
|
|
170
|
+
* @private
|
|
171
|
+
*/
|
|
172
|
+
private redactSensitiveFields;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Singleton instance of the `Sanitization` class.
|
|
176
|
+
* Use this for all input sanitization tasks.
|
|
177
|
+
*/
|
|
178
|
+
export declare const sanitization: Sanitization;
|
|
179
|
+
/**
|
|
180
|
+
* Convenience function calling `sanitization.sanitizeForLogging`.
|
|
181
|
+
* @param input - The input data to sanitize.
|
|
182
|
+
* @returns A sanitized version of the input, safe for logging.
|
|
183
|
+
*/
|
|
184
|
+
export declare const sanitizeInputForLogging: (input: unknown) => unknown;
|
|
185
|
+
//# sourceMappingURL=sanitization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../../src/utils/security/sanitization.ts"],"names":[],"mappings":"AAOA,OAAO,YAAY,MAAM,eAAe,CAAC;AAKzC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAC;IACrB,wFAAwF;IACxF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uEAAuE;IACvE,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;IAC/D,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC/D,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;CACxD;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,eAAe;IACf,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IAEtC;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAcrB;IAEF;;;OAGG;IACH,OAAO,CAAC,yBAAyB,CAoC/B;IAEF,eAAe;IACf,OAAO;IAEP;;;OAGG;WACW,WAAW,IAAI,YAAY;IAOzC;;;OAGG;IACI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAiBjD;;;OAGG;IACI,kBAAkB,IAAI,MAAM,EAAE;IAIrC;;;;;OAKG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,MAAM;IA8BvE;;;;;;;;OAQG;IACI,cAAc,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,qBAA0B,GAClC,MAAM;IAwDT;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;;;;;OAMG;IACI,WAAW,CAChB,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,MAAM,EAAsB,GAC7C,MAAM;IAkCT;;;;;;OAMG;IACI,YAAY,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,iBAAiB;IAoGpB;;;;;;;;OAQG;IACI,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC;IAyBpE;;;;;;;;OAQG;IACI,cAAc,CACnB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,MAAM;IAwDT;;;;;;;;;;;;;;;;;;OAkBG;IACI,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAsBlD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;CA8B9B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,cAA6B,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,OACjB,CAAC"}
|