@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,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Token management system for IBM i HTTP authentication.
|
|
3
|
+
* Handles secure token generation, validation, and lifecycle management.
|
|
4
|
+
*
|
|
5
|
+
* @module src/ibmi-mcp-server/auth/tokenManager
|
|
6
|
+
*/
|
|
7
|
+
import { RequestContext } from "../../utils/index.js";
|
|
8
|
+
import type { DaemonServer } from "@ibm/mapepire-js";
|
|
9
|
+
/**
|
|
10
|
+
* IBM i credentials for authenticated sessions - using DaemonServer interface
|
|
11
|
+
*/
|
|
12
|
+
export type IBMiCredentials = DaemonServer;
|
|
13
|
+
/**
|
|
14
|
+
* Token session metadata
|
|
15
|
+
*/
|
|
16
|
+
export interface TokenSession {
|
|
17
|
+
token: string;
|
|
18
|
+
credentials: IBMiCredentials;
|
|
19
|
+
createdAt: Date;
|
|
20
|
+
expiresAt: Date;
|
|
21
|
+
lastUsed: Date;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Token generation and validation result
|
|
25
|
+
*/
|
|
26
|
+
export interface TokenValidationResult {
|
|
27
|
+
valid: boolean;
|
|
28
|
+
session?: TokenSession;
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Token manager for secure token generation and session management
|
|
33
|
+
*/
|
|
34
|
+
export declare class TokenManager {
|
|
35
|
+
private static instance;
|
|
36
|
+
private sessions;
|
|
37
|
+
private cleanupTimer;
|
|
38
|
+
private constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Get singleton instance of TokenManager
|
|
41
|
+
*/
|
|
42
|
+
static getInstance(): TokenManager;
|
|
43
|
+
/**
|
|
44
|
+
* Generate a cryptographically secure bearer token (1024+ bytes)
|
|
45
|
+
* @param credentials - IBM i credentials for this session
|
|
46
|
+
* @param expirySeconds - Token lifetime in seconds (optional)
|
|
47
|
+
* @returns Generated token string
|
|
48
|
+
*/
|
|
49
|
+
generateToken(credentials: IBMiCredentials, expirySeconds?: number, context?: RequestContext): string;
|
|
50
|
+
/**
|
|
51
|
+
* Validate a bearer token and return session info
|
|
52
|
+
* @param token - Bearer token to validate
|
|
53
|
+
* @returns Validation result with session info if valid
|
|
54
|
+
*/
|
|
55
|
+
validateToken(token: string, context?: RequestContext): TokenValidationResult;
|
|
56
|
+
/**
|
|
57
|
+
* Revoke a specific token
|
|
58
|
+
* @param token - Token to revoke
|
|
59
|
+
*/
|
|
60
|
+
revokeToken(token: string, context?: RequestContext): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get current session statistics
|
|
63
|
+
*/
|
|
64
|
+
getSessionStats(): {
|
|
65
|
+
totalSessions: number;
|
|
66
|
+
activeSessions: number;
|
|
67
|
+
expiredSessions: number;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Clean up expired tokens
|
|
71
|
+
*/
|
|
72
|
+
private cleanupExpiredTokens;
|
|
73
|
+
/**
|
|
74
|
+
* Start the cleanup timer
|
|
75
|
+
*/
|
|
76
|
+
private startCleanupTimer;
|
|
77
|
+
/**
|
|
78
|
+
* Stop the cleanup timer and clear all sessions
|
|
79
|
+
*/
|
|
80
|
+
shutdown(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Check if max concurrent sessions limit would be exceeded
|
|
83
|
+
*/
|
|
84
|
+
canCreateNewSession(): boolean;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=tokenManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenManager.d.ts","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/auth/tokenManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAEL,cAAc,EAEf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,eAAe,CAAC;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,YAAY,CAA+B;IAEnD,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;;;;OAKG;IACH,aAAa,CACX,WAAW,EAAE,eAAe,EAC5B,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM;IAyCT;;;;OAIG;IACH,aAAa,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,cAAc,GACvB,qBAAqB;IAsDxB;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;IA2B7D;;OAEG;IACH,eAAe,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB;IAoBD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAsBhB;;OAEG;IACH,mBAAmB,IAAI,OAAO;CAG/B"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Token management system for IBM i HTTP authentication.
|
|
3
|
+
* Handles secure token generation, validation, and lifecycle management.
|
|
4
|
+
*
|
|
5
|
+
* @module src/ibmi-mcp-server/auth/tokenManager
|
|
6
|
+
*/
|
|
7
|
+
import crypto from "crypto";
|
|
8
|
+
import { config } from "../../config/index.js";
|
|
9
|
+
import { logger, requestContextService, } from "../../utils/index.js";
|
|
10
|
+
/**
|
|
11
|
+
* Token manager for secure token generation and session management
|
|
12
|
+
*/
|
|
13
|
+
export class TokenManager {
|
|
14
|
+
static instance;
|
|
15
|
+
sessions = new Map();
|
|
16
|
+
cleanupTimer = null;
|
|
17
|
+
constructor() {
|
|
18
|
+
this.startCleanupTimer();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get singleton instance of TokenManager
|
|
22
|
+
*/
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!TokenManager.instance) {
|
|
25
|
+
TokenManager.instance = new TokenManager();
|
|
26
|
+
}
|
|
27
|
+
return TokenManager.instance;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate a cryptographically secure bearer token (1024+ bytes)
|
|
31
|
+
* @param credentials - IBM i credentials for this session
|
|
32
|
+
* @param expirySeconds - Token lifetime in seconds (optional)
|
|
33
|
+
* @returns Generated token string
|
|
34
|
+
*/
|
|
35
|
+
generateToken(credentials, expirySeconds, context) {
|
|
36
|
+
const operationContext = context ||
|
|
37
|
+
requestContextService.createRequestContext({
|
|
38
|
+
operation: "generateToken",
|
|
39
|
+
});
|
|
40
|
+
const expiry = expirySeconds || config.ibmiHttpAuth.tokenExpirySeconds;
|
|
41
|
+
// Generate 1024+ bytes of secure random data
|
|
42
|
+
const tokenBytes = crypto.randomBytes(256);
|
|
43
|
+
const token = tokenBytes.toString("base64url");
|
|
44
|
+
const now = new Date();
|
|
45
|
+
const expiresAt = new Date(now.getTime() + expiry * 1000);
|
|
46
|
+
const session = {
|
|
47
|
+
token,
|
|
48
|
+
credentials,
|
|
49
|
+
createdAt: now,
|
|
50
|
+
expiresAt,
|
|
51
|
+
lastUsed: now,
|
|
52
|
+
};
|
|
53
|
+
this.sessions.set(token, session);
|
|
54
|
+
logger.info({
|
|
55
|
+
...operationContext,
|
|
56
|
+
user: credentials.user,
|
|
57
|
+
host: credentials.host,
|
|
58
|
+
expirySeconds: expiry,
|
|
59
|
+
expiresAt: expiresAt.toISOString(),
|
|
60
|
+
sessionCount: this.sessions.size,
|
|
61
|
+
}, "Generated new authentication token");
|
|
62
|
+
return token;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate a bearer token and return session info
|
|
66
|
+
* @param token - Bearer token to validate
|
|
67
|
+
* @returns Validation result with session info if valid
|
|
68
|
+
*/
|
|
69
|
+
validateToken(token, context) {
|
|
70
|
+
const operationContext = context ||
|
|
71
|
+
requestContextService.createRequestContext({
|
|
72
|
+
operation: "validateToken",
|
|
73
|
+
});
|
|
74
|
+
if (!token || typeof token !== "string") {
|
|
75
|
+
logger.debug({ ...operationContext }, "Invalid token format");
|
|
76
|
+
return { valid: false, error: "Invalid token format" };
|
|
77
|
+
}
|
|
78
|
+
const session = this.sessions.get(token);
|
|
79
|
+
if (!session) {
|
|
80
|
+
logger.debug({
|
|
81
|
+
...operationContext,
|
|
82
|
+
tokenPrefix: token.substring(0, 10) + "...",
|
|
83
|
+
}, "Token not found in session store");
|
|
84
|
+
return { valid: false, error: "Token not found" };
|
|
85
|
+
}
|
|
86
|
+
// Check if token has expired
|
|
87
|
+
if (new Date() > session.expiresAt) {
|
|
88
|
+
logger.info({
|
|
89
|
+
...operationContext,
|
|
90
|
+
user: session.credentials.user,
|
|
91
|
+
expiredAt: session.expiresAt.toISOString(),
|
|
92
|
+
}, "Token has expired");
|
|
93
|
+
this.sessions.delete(token);
|
|
94
|
+
return { valid: false, error: "Token expired" };
|
|
95
|
+
}
|
|
96
|
+
// Update last used timestamp
|
|
97
|
+
session.lastUsed = new Date();
|
|
98
|
+
logger.debug({
|
|
99
|
+
...operationContext,
|
|
100
|
+
user: session.credentials.user,
|
|
101
|
+
lastUsed: session.lastUsed.toISOString(),
|
|
102
|
+
}, "Token validated successfully");
|
|
103
|
+
return { valid: true, session };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Revoke a specific token
|
|
107
|
+
* @param token - Token to revoke
|
|
108
|
+
*/
|
|
109
|
+
revokeToken(token, context) {
|
|
110
|
+
const operationContext = context ||
|
|
111
|
+
requestContextService.createRequestContext({
|
|
112
|
+
operation: "revokeToken",
|
|
113
|
+
});
|
|
114
|
+
const session = this.sessions.get(token);
|
|
115
|
+
if (!session) {
|
|
116
|
+
logger.debug({ ...operationContext }, "Token not found for revocation");
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
this.sessions.delete(token);
|
|
120
|
+
logger.info({
|
|
121
|
+
...operationContext,
|
|
122
|
+
user: session.credentials.user,
|
|
123
|
+
sessionCount: this.sessions.size,
|
|
124
|
+
}, "Token revoked successfully");
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get current session statistics
|
|
129
|
+
*/
|
|
130
|
+
getSessionStats() {
|
|
131
|
+
const now = new Date();
|
|
132
|
+
let activeSessions = 0;
|
|
133
|
+
let expiredSessions = 0;
|
|
134
|
+
for (const session of this.sessions.values()) {
|
|
135
|
+
if (now <= session.expiresAt) {
|
|
136
|
+
activeSessions++;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
expiredSessions++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
totalSessions: this.sessions.size,
|
|
144
|
+
activeSessions,
|
|
145
|
+
expiredSessions,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Clean up expired tokens
|
|
150
|
+
*/
|
|
151
|
+
cleanupExpiredTokens() {
|
|
152
|
+
const context = requestContextService.createRequestContext({
|
|
153
|
+
operation: "cleanupExpiredTokens",
|
|
154
|
+
});
|
|
155
|
+
const now = new Date();
|
|
156
|
+
const expiredTokens = [];
|
|
157
|
+
for (const [token, session] of this.sessions.entries()) {
|
|
158
|
+
if (now > session.expiresAt) {
|
|
159
|
+
expiredTokens.push(token);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
for (const token of expiredTokens) {
|
|
163
|
+
this.sessions.delete(token);
|
|
164
|
+
}
|
|
165
|
+
if (expiredTokens.length > 0) {
|
|
166
|
+
logger.info({
|
|
167
|
+
...context,
|
|
168
|
+
expiredCount: expiredTokens.length,
|
|
169
|
+
remainingCount: this.sessions.size,
|
|
170
|
+
}, "Cleaned up expired tokens");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Start the cleanup timer
|
|
175
|
+
*/
|
|
176
|
+
startCleanupTimer() {
|
|
177
|
+
if (!config.ibmiHttpAuth.enabled) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const intervalMs = config.ibmiHttpAuth.cleanupIntervalSeconds * 1000;
|
|
181
|
+
this.cleanupTimer = setInterval(() => {
|
|
182
|
+
this.cleanupExpiredTokens();
|
|
183
|
+
}, intervalMs);
|
|
184
|
+
logger.info({
|
|
185
|
+
operation: "startCleanupTimer",
|
|
186
|
+
intervalSeconds: config.ibmiHttpAuth.cleanupIntervalSeconds,
|
|
187
|
+
}, "Started token cleanup timer");
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Stop the cleanup timer and clear all sessions
|
|
191
|
+
*/
|
|
192
|
+
shutdown() {
|
|
193
|
+
const context = requestContextService.createRequestContext({
|
|
194
|
+
operation: "tokenManagerShutdown",
|
|
195
|
+
});
|
|
196
|
+
if (this.cleanupTimer) {
|
|
197
|
+
clearInterval(this.cleanupTimer);
|
|
198
|
+
this.cleanupTimer = null;
|
|
199
|
+
}
|
|
200
|
+
const sessionCount = this.sessions.size;
|
|
201
|
+
this.sessions.clear();
|
|
202
|
+
logger.info({
|
|
203
|
+
...context,
|
|
204
|
+
clearedSessions: sessionCount,
|
|
205
|
+
}, "Token manager shutdown completed");
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Check if max concurrent sessions limit would be exceeded
|
|
209
|
+
*/
|
|
210
|
+
canCreateNewSession() {
|
|
211
|
+
return this.sessions.size < config.ibmiHttpAuth.maxConcurrentSessions;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=tokenManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenManager.js","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/auth/tokenManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared types for IBM i HTTP authentication flow.
|
|
3
|
+
*/
|
|
4
|
+
export interface AuthRequest {
|
|
5
|
+
host: string;
|
|
6
|
+
duration?: number;
|
|
7
|
+
poolstart?: number;
|
|
8
|
+
poolmax?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AuthResponse {
|
|
11
|
+
access_token: string;
|
|
12
|
+
token_type: "Bearer";
|
|
13
|
+
expires_in: number;
|
|
14
|
+
expires_at: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AuthCredentials {
|
|
17
|
+
username: string;
|
|
18
|
+
password: string;
|
|
19
|
+
}
|
|
20
|
+
export interface EncryptedAuthEnvelope {
|
|
21
|
+
keyId: string;
|
|
22
|
+
encryptedSessionKey: string;
|
|
23
|
+
iv: string;
|
|
24
|
+
authTag: string;
|
|
25
|
+
ciphertext: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DecryptedAuthPayload {
|
|
28
|
+
credentials: AuthCredentials;
|
|
29
|
+
request: unknown;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* Set the server replacement callback for auto-reload functionality
|
|
4
|
+
* This should be called by transport managers that support server replacement
|
|
5
|
+
*/
|
|
6
|
+
export declare const setServerReplacementCallback: (callback: (newServer: McpServer) => void) => void;
|
|
7
|
+
export declare const registerSQLTools: (server: McpServer) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ibmi-mcp-server/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBpE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,KACvC,IAMF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,QAAQ,SAAS,KAAG,OAAO,CAAC,IAAI,CA2FtE,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { config } from "../config/index.js";
|
|
2
|
+
import { ToolProcessor } from "./utils/config/toolProcessor.js";
|
|
3
|
+
import { ToolConfigCache } from "./utils/config/toolConfigCache.js";
|
|
4
|
+
import { logger, requestContextService, } from "../utils/internal/index.js";
|
|
5
|
+
// Store server replacement callback for auto-reload
|
|
6
|
+
let serverReplacementCallback = null;
|
|
7
|
+
// Global cache for YAML tool configurations
|
|
8
|
+
let cachedToolConfigs = null;
|
|
9
|
+
// Global tool processor instance
|
|
10
|
+
let toolProcessor = null;
|
|
11
|
+
/**
|
|
12
|
+
* Set the server replacement callback for auto-reload functionality
|
|
13
|
+
* This should be called by transport managers that support server replacement
|
|
14
|
+
*/
|
|
15
|
+
export const setServerReplacementCallback = (callback) => {
|
|
16
|
+
serverReplacementCallback = callback;
|
|
17
|
+
logger.debug({}, "Server replacement callback registered for YAML auto-reload");
|
|
18
|
+
};
|
|
19
|
+
export const registerSQLTools = async (server) => {
|
|
20
|
+
// Load YAML tools if configured
|
|
21
|
+
if (config.toolsYamlPath) {
|
|
22
|
+
const context = requestContextService.createRequestContext({
|
|
23
|
+
operation: "registerSQLTools",
|
|
24
|
+
yamlPath: config.toolsYamlPath,
|
|
25
|
+
});
|
|
26
|
+
// Check if we have cached tool configs
|
|
27
|
+
if (cachedToolConfigs && !cachedToolConfigs.isEmpty()) {
|
|
28
|
+
logger.info(context, `Registering ${cachedToolConfigs.getStats().toolCount} cached YAML tools (cache hit)`);
|
|
29
|
+
// Register tools from cache - this is extremely fast
|
|
30
|
+
await cachedToolConfigs.registerCachedTools(server, context);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
logger.info(context, `Processing YAML tools from configuration: ${config.toolsYamlPath} (auto-reload: ${config.yamlAutoReload})`);
|
|
34
|
+
// Initialize processor if needed
|
|
35
|
+
if (!toolProcessor) {
|
|
36
|
+
toolProcessor = new ToolProcessor();
|
|
37
|
+
}
|
|
38
|
+
// Initialize cache if needed
|
|
39
|
+
if (!cachedToolConfigs) {
|
|
40
|
+
cachedToolConfigs = ToolConfigCache.getInstance();
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// Simple 3-step workflow: initialize → process → register
|
|
44
|
+
await toolProcessor.initialize(context);
|
|
45
|
+
const processingResult = await toolProcessor.processTools(context);
|
|
46
|
+
if (processingResult.success) {
|
|
47
|
+
// Cache the processed tool configurations
|
|
48
|
+
const toolConfigs = toolProcessor.getToolConfigurations();
|
|
49
|
+
const cacheResult = cachedToolConfigs.cacheToolConfigs(toolConfigs, context);
|
|
50
|
+
if (cacheResult.success) {
|
|
51
|
+
logger.info(context, `YAML tools processed and cached: ${cacheResult.toolCount} tools, ${cacheResult.toolsetCount} toolsets`);
|
|
52
|
+
// Register with server
|
|
53
|
+
await toolProcessor.registerWithServer(server, context);
|
|
54
|
+
// Setup auto-reload if enabled
|
|
55
|
+
if (config.yamlAutoReload) {
|
|
56
|
+
await setupAutoReload(server, context);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
logger.error(context, `Failed to cache tool configurations: ${cacheResult.error}`);
|
|
61
|
+
throw new Error(`Tool caching failed: ${cacheResult.error}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
logger.error(context, `Failed to process YAML tools: ${processingResult.error}`);
|
|
66
|
+
throw new Error(`YAML tools processing failed: ${processingResult.error}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
logger.error(context, `Error processing YAML tools: ${error instanceof Error ? error.message : String(error)}`);
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
logger.debug({}, "No YAML tools configuration found, skipping YAML tools loading");
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Setup auto-reload functionality for YAML configuration changes
|
|
80
|
+
* @param server - MCP server instance
|
|
81
|
+
* @param context - Request context
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
async function setupAutoReload(server, context) {
|
|
85
|
+
const { ToolProcessor } = await import("./utils/config/toolProcessor.js");
|
|
86
|
+
ToolProcessor.registerChangeCallback(async (filePath, eventType, changeContext) => {
|
|
87
|
+
const rebuildContext = changeContext ||
|
|
88
|
+
requestContextService.createRequestContext({
|
|
89
|
+
operation: "AutoReloadOnFileChange",
|
|
90
|
+
filePath,
|
|
91
|
+
eventType,
|
|
92
|
+
});
|
|
93
|
+
logger.info(rebuildContext, `YAML file changed (${eventType}): ${filePath} - rebuilding tools`);
|
|
94
|
+
try {
|
|
95
|
+
// Create new processor for rebuild
|
|
96
|
+
const newProcessor = new ToolProcessor();
|
|
97
|
+
await newProcessor.initialize(rebuildContext);
|
|
98
|
+
const result = await newProcessor.processTools(rebuildContext);
|
|
99
|
+
if (result.success) {
|
|
100
|
+
// Update cache with new configurations
|
|
101
|
+
const toolConfigs = newProcessor.getToolConfigurations();
|
|
102
|
+
const cacheResult = cachedToolConfigs.cacheToolConfigs(toolConfigs, rebuildContext);
|
|
103
|
+
if (cacheResult.success) {
|
|
104
|
+
logger.info(rebuildContext, `Tools rebuilt successfully: ${cacheResult.toolCount} tools, ${cacheResult.toolsetCount} toolsets`);
|
|
105
|
+
// Update global processor reference
|
|
106
|
+
toolProcessor = newProcessor;
|
|
107
|
+
// Call server replacement callback if available
|
|
108
|
+
if (serverReplacementCallback) {
|
|
109
|
+
serverReplacementCallback(server);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
logger.error(rebuildContext, `Failed to cache rebuilt tools: ${cacheResult.error}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
logger.error(rebuildContext, `Failed to rebuild tools: ${result.error}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error(rebuildContext, `Error during auto-reload: ${error instanceof Error ? error.message : String(error)}`);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
logger.info(context, "YAML auto-reload functionality enabled");
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ibmi-mcp-server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Barrel export file for the toolsets resource.
|
|
3
|
+
* This module exposes the registration function for the toolsets resource.
|
|
4
|
+
* @module src/mcp-server/resources/toolsetsResource/index
|
|
5
|
+
*/
|
|
6
|
+
export { registerToolsetsResource } from "./registration.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/resources/toolsetsResource/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Barrel export file for the toolsets resource.
|
|
3
|
+
* This module exposes the registration function for the toolsets resource.
|
|
4
|
+
* @module src/mcp-server/resources/toolsetsResource/index
|
|
5
|
+
*/
|
|
6
|
+
export { registerToolsetsResource } from "./registration.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/resources/toolsetsResource/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Defines the core logic, schemas, and types for the `toolsets` resource.
|
|
3
|
+
* This module provides access to all available toolsets on the server, including
|
|
4
|
+
* their metadata, tool counts, and organization details.
|
|
5
|
+
* @module src/mcp-server/resources/toolsetsResource/logic
|
|
6
|
+
* @see {@link src/mcp-server/resources/toolsetsResource/registration.ts} for the handler and registration logic.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { type RequestContext } from "../../../utils/index.js";
|
|
10
|
+
export declare const ToolsetInfoSchema: z.ZodObject<{
|
|
11
|
+
name: z.ZodString;
|
|
12
|
+
description: z.ZodString;
|
|
13
|
+
tools: z.ZodArray<z.ZodString, "many">;
|
|
14
|
+
toolCount: z.ZodNumber;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
tools: string[];
|
|
19
|
+
toolCount: number;
|
|
20
|
+
}, {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
tools: string[];
|
|
24
|
+
toolCount: number;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const ToolsetsResourceParamsSchema: z.ZodObject<{
|
|
27
|
+
toolsetName: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
toolsetName?: string | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
toolsetName?: string | undefined;
|
|
32
|
+
}>;
|
|
33
|
+
export declare const ToolsetsResourceResponseSchema: z.ZodObject<{
|
|
34
|
+
totalToolsets: z.ZodNumber;
|
|
35
|
+
totalTools: z.ZodNumber;
|
|
36
|
+
toolsets: z.ZodArray<z.ZodObject<{
|
|
37
|
+
name: z.ZodString;
|
|
38
|
+
description: z.ZodString;
|
|
39
|
+
tools: z.ZodArray<z.ZodString, "many">;
|
|
40
|
+
toolCount: z.ZodNumber;
|
|
41
|
+
}, "strip", z.ZodTypeAny, {
|
|
42
|
+
name: string;
|
|
43
|
+
description: string;
|
|
44
|
+
tools: string[];
|
|
45
|
+
toolCount: number;
|
|
46
|
+
}, {
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
tools: string[];
|
|
50
|
+
toolCount: number;
|
|
51
|
+
}>, "many">;
|
|
52
|
+
statistics: z.ZodObject<{
|
|
53
|
+
multiToolsetTools: z.ZodArray<z.ZodString, "many">;
|
|
54
|
+
toolsetCounts: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
multiToolsetTools: string[];
|
|
57
|
+
toolsetCounts: Record<string, number>;
|
|
58
|
+
}, {
|
|
59
|
+
multiToolsetTools: string[];
|
|
60
|
+
toolsetCounts: Record<string, number>;
|
|
61
|
+
}>;
|
|
62
|
+
timestamp: z.ZodString;
|
|
63
|
+
}, "strip", z.ZodTypeAny, {
|
|
64
|
+
timestamp: string;
|
|
65
|
+
toolsets: {
|
|
66
|
+
name: string;
|
|
67
|
+
description: string;
|
|
68
|
+
tools: string[];
|
|
69
|
+
toolCount: number;
|
|
70
|
+
}[];
|
|
71
|
+
totalToolsets: number;
|
|
72
|
+
totalTools: number;
|
|
73
|
+
statistics: {
|
|
74
|
+
multiToolsetTools: string[];
|
|
75
|
+
toolsetCounts: Record<string, number>;
|
|
76
|
+
};
|
|
77
|
+
}, {
|
|
78
|
+
timestamp: string;
|
|
79
|
+
toolsets: {
|
|
80
|
+
name: string;
|
|
81
|
+
description: string;
|
|
82
|
+
tools: string[];
|
|
83
|
+
toolCount: number;
|
|
84
|
+
}[];
|
|
85
|
+
totalToolsets: number;
|
|
86
|
+
totalTools: number;
|
|
87
|
+
statistics: {
|
|
88
|
+
multiToolsetTools: string[];
|
|
89
|
+
toolsetCounts: Record<string, number>;
|
|
90
|
+
};
|
|
91
|
+
}>;
|
|
92
|
+
export type ToolsetsResourceParams = z.infer<typeof ToolsetsResourceParamsSchema>;
|
|
93
|
+
export type ToolsetInfo = z.infer<typeof ToolsetInfoSchema>;
|
|
94
|
+
export type ToolsetsResourceResponse = z.infer<typeof ToolsetsResourceResponseSchema>;
|
|
95
|
+
/**
|
|
96
|
+
* Processes the core logic for the `toolsets` resource.
|
|
97
|
+
* Retrieves toolset information from the ToolsetManager and formats it for MCP clients.
|
|
98
|
+
*
|
|
99
|
+
* @param uri - The resource URI, which may contain a specific toolset name
|
|
100
|
+
* @param params - The validated resource parameters
|
|
101
|
+
* @param context - The request context for logging and tracing
|
|
102
|
+
* @returns A promise resolving with the structured toolsets data
|
|
103
|
+
* @throws {McpError} If the toolset system is not initialized or toolset not found
|
|
104
|
+
*/
|
|
105
|
+
export declare function toolsetsResourceLogic(uri: URL, params: ToolsetsResourceParams, context: RequestContext): Promise<ToolsetsResourceResponse>;
|
|
106
|
+
//# sourceMappingURL=logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/resources/toolsetsResource/logic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAItE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAS5B,CAAC;AAGH,eAAO,MAAM,4BAA4B;;;;;;EAKvC,CAAC;AAGH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BzC,CAAC;AAGH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAC5C,OAAO,8BAA8B,CACtC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,wBAAwB,CAAC,CAmHnC"}
|