@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,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Provides a singleton service for scheduling and managing cron jobs.
|
|
3
|
+
* This service wraps the 'node-cron' library to offer a unified interface for
|
|
4
|
+
* defining, starting, stopping, and listing recurring tasks within the application.
|
|
5
|
+
* @module src/utils/scheduling/scheduler
|
|
6
|
+
*/
|
|
7
|
+
import cron, { createTask } from "node-cron";
|
|
8
|
+
import { logger } from "../internal/index.js";
|
|
9
|
+
import { requestContextService } from "../internal/requestContext.js";
|
|
10
|
+
/**
|
|
11
|
+
* A singleton service for scheduling and managing cron jobs.
|
|
12
|
+
*/
|
|
13
|
+
export class SchedulerService {
|
|
14
|
+
static instance;
|
|
15
|
+
jobs = new Map();
|
|
16
|
+
/** @private */
|
|
17
|
+
constructor() {
|
|
18
|
+
logger.info({
|
|
19
|
+
requestId: "scheduler-init",
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
}, "SchedulerService initialized.");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Gets the singleton instance of the SchedulerService.
|
|
25
|
+
* @returns The singleton SchedulerService instance.
|
|
26
|
+
*/
|
|
27
|
+
static getInstance() {
|
|
28
|
+
if (!SchedulerService.instance) {
|
|
29
|
+
SchedulerService.instance = new SchedulerService();
|
|
30
|
+
}
|
|
31
|
+
return SchedulerService.instance;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Schedules a new job.
|
|
35
|
+
*
|
|
36
|
+
* @param id - A unique identifier for the job.
|
|
37
|
+
* @param schedule - The cron pattern for the schedule (e.g., '* * * * *').
|
|
38
|
+
* @param taskFunction - The function to execute on schedule. It receives a RequestContext.
|
|
39
|
+
* @param description - A description of the job.
|
|
40
|
+
* @returns The newly created Job object.
|
|
41
|
+
*/
|
|
42
|
+
schedule(id, schedule, taskFunction, description) {
|
|
43
|
+
if (this.jobs.has(id)) {
|
|
44
|
+
throw new Error(`Job with ID '${id}' already exists.`);
|
|
45
|
+
}
|
|
46
|
+
if (!cron.validate(schedule)) {
|
|
47
|
+
throw new Error(`Invalid cron schedule: ${schedule}`);
|
|
48
|
+
}
|
|
49
|
+
const task = createTask(schedule, async () => {
|
|
50
|
+
const job = this.jobs.get(id);
|
|
51
|
+
if (job && job.isRunning) {
|
|
52
|
+
logger.warning({
|
|
53
|
+
requestId: `job-skip-${id}`,
|
|
54
|
+
timestamp: new Date().toISOString(),
|
|
55
|
+
}, `Job '${id}' is already running. Skipping this execution.`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (job) {
|
|
59
|
+
job.isRunning = true;
|
|
60
|
+
}
|
|
61
|
+
const context = requestContextService.createRequestContext({
|
|
62
|
+
jobId: id,
|
|
63
|
+
schedule,
|
|
64
|
+
});
|
|
65
|
+
logger.info(context, `Starting job '${id}'...`);
|
|
66
|
+
try {
|
|
67
|
+
await Promise.resolve(taskFunction(context));
|
|
68
|
+
logger.info(context, `Job '${id}' completed successfully.`);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger.error({
|
|
72
|
+
error: error,
|
|
73
|
+
...context,
|
|
74
|
+
}, `Job '${id}' failed.`);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (job) {
|
|
78
|
+
job.isRunning = false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const newJob = {
|
|
83
|
+
id,
|
|
84
|
+
schedule,
|
|
85
|
+
description,
|
|
86
|
+
task,
|
|
87
|
+
isRunning: false,
|
|
88
|
+
};
|
|
89
|
+
this.jobs.set(id, newJob);
|
|
90
|
+
logger.info({
|
|
91
|
+
requestId: `job-schedule-${id}`,
|
|
92
|
+
timestamp: new Date().toISOString(),
|
|
93
|
+
}, `Job '${id}' scheduled: ${description}`);
|
|
94
|
+
return newJob;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Starts a scheduled job.
|
|
98
|
+
* @param id - The ID of the job to start.
|
|
99
|
+
*/
|
|
100
|
+
start(id) {
|
|
101
|
+
const job = this.jobs.get(id);
|
|
102
|
+
if (!job) {
|
|
103
|
+
throw new Error(`Job with ID '${id}' not found.`);
|
|
104
|
+
}
|
|
105
|
+
job.task.start();
|
|
106
|
+
logger.info({
|
|
107
|
+
requestId: `job-start-${id}`,
|
|
108
|
+
timestamp: new Date().toISOString(),
|
|
109
|
+
}, `Job '${id}' started.`);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stops a scheduled job.
|
|
113
|
+
* @param id - The ID of the job to stop.
|
|
114
|
+
*/
|
|
115
|
+
stop(id) {
|
|
116
|
+
const job = this.jobs.get(id);
|
|
117
|
+
if (!job) {
|
|
118
|
+
throw new Error(`Job with ID '${id}' not found.`);
|
|
119
|
+
}
|
|
120
|
+
job.task.stop();
|
|
121
|
+
logger.info({
|
|
122
|
+
requestId: `job-stop-${id}`,
|
|
123
|
+
timestamp: new Date().toISOString(),
|
|
124
|
+
}, `Job '${id}' stopped.`);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Removes a job from the scheduler. The job is stopped before being removed.
|
|
128
|
+
* @param id - The ID of the job to remove.
|
|
129
|
+
*/
|
|
130
|
+
remove(id) {
|
|
131
|
+
const job = this.jobs.get(id);
|
|
132
|
+
if (!job) {
|
|
133
|
+
throw new Error(`Job with ID '${id}' not found.`);
|
|
134
|
+
}
|
|
135
|
+
job.task.stop();
|
|
136
|
+
this.jobs.delete(id);
|
|
137
|
+
logger.info({
|
|
138
|
+
requestId: `job-remove-${id}`,
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
}, `Job '${id}' removed.`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Gets a list of all scheduled jobs.
|
|
144
|
+
* @returns An array of all Job objects.
|
|
145
|
+
*/
|
|
146
|
+
listJobs() {
|
|
147
|
+
return Array.from(this.jobs.values());
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* The singleton instance of the SchedulerService.
|
|
152
|
+
* Use this instance for all job scheduling operations.
|
|
153
|
+
*/
|
|
154
|
+
export const schedulerService = SchedulerService.getInstance();
|
|
155
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/utils/scheduling/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines the structure for configuring entity prefixes.
|
|
3
|
+
* Keys are entity type names (e.g., "project", "task"), and values are their corresponding ID prefixes (e.g., "PROJ", "TASK").
|
|
4
|
+
*/
|
|
5
|
+
export interface EntityPrefixConfig {
|
|
6
|
+
[key: string]: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Defines options for customizing ID generation.
|
|
10
|
+
*/
|
|
11
|
+
export interface IdGenerationOptions {
|
|
12
|
+
length?: number;
|
|
13
|
+
separator?: string;
|
|
14
|
+
charset?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A generic ID Generator class for creating and managing unique, prefixed identifiers.
|
|
18
|
+
* Allows defining custom prefixes, generating random strings, and validating/normalizing IDs.
|
|
19
|
+
*/
|
|
20
|
+
export declare class IdGenerator {
|
|
21
|
+
/**
|
|
22
|
+
* Default character set for the random part of the ID.
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
private static DEFAULT_CHARSET;
|
|
26
|
+
/**
|
|
27
|
+
* Default separator character between prefix and random part.
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
private static DEFAULT_SEPARATOR;
|
|
31
|
+
/**
|
|
32
|
+
* Default length for the random part of the ID.
|
|
33
|
+
* @private
|
|
34
|
+
*/
|
|
35
|
+
private static DEFAULT_LENGTH;
|
|
36
|
+
/**
|
|
37
|
+
* Stores the mapping of entity types to their prefixes.
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
private entityPrefixes;
|
|
41
|
+
/**
|
|
42
|
+
* Stores a reverse mapping from prefixes (case-insensitive) to entity types.
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
private prefixToEntityType;
|
|
46
|
+
/**
|
|
47
|
+
* Constructs an `IdGenerator` instance.
|
|
48
|
+
* @param entityPrefixes - An initial map of entity types to their prefixes.
|
|
49
|
+
*/
|
|
50
|
+
constructor(entityPrefixes?: EntityPrefixConfig);
|
|
51
|
+
/**
|
|
52
|
+
* Sets or updates the entity prefix configuration and rebuilds the internal reverse lookup map.
|
|
53
|
+
* @param entityPrefixes - A map where keys are entity type names and values are their desired ID prefixes.
|
|
54
|
+
*/
|
|
55
|
+
setEntityPrefixes(entityPrefixes: EntityPrefixConfig): void;
|
|
56
|
+
/**
|
|
57
|
+
* Retrieves a copy of the current entity prefix configuration.
|
|
58
|
+
* @returns The current entity prefix configuration.
|
|
59
|
+
*/
|
|
60
|
+
getEntityPrefixes(): EntityPrefixConfig;
|
|
61
|
+
/**
|
|
62
|
+
* Generates a cryptographically secure random string.
|
|
63
|
+
* @param length - The desired length of the random string. Defaults to `IdGenerator.DEFAULT_LENGTH`.
|
|
64
|
+
* @param charset - The character set to use. Defaults to `IdGenerator.DEFAULT_CHARSET`.
|
|
65
|
+
* @returns The generated random string.
|
|
66
|
+
*/
|
|
67
|
+
generateRandomString(length?: number, charset?: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Generates a unique ID, optionally prepended with a prefix.
|
|
70
|
+
* @param prefix - An optional prefix for the ID.
|
|
71
|
+
* @param options - Optional parameters for ID generation (length, separator, charset).
|
|
72
|
+
* @returns A unique identifier string.
|
|
73
|
+
*/
|
|
74
|
+
generate(prefix?: string, options?: IdGenerationOptions): string;
|
|
75
|
+
/**
|
|
76
|
+
* Generates a unique ID for a specified entity type, using its configured prefix.
|
|
77
|
+
* @param entityType - The type of entity (must be registered).
|
|
78
|
+
* @param options - Optional parameters for ID generation.
|
|
79
|
+
* @returns A unique identifier string for the entity (e.g., "PROJ_A6B3J0").
|
|
80
|
+
* @throws {McpError} If the `entityType` is not registered.
|
|
81
|
+
*/
|
|
82
|
+
generateForEntity(entityType: string, options?: IdGenerationOptions): string;
|
|
83
|
+
/**
|
|
84
|
+
* Validates if an ID conforms to the expected format for a specific entity type.
|
|
85
|
+
* @param id - The ID string to validate.
|
|
86
|
+
* @param entityType - The expected entity type of the ID.
|
|
87
|
+
* @param options - Optional parameters used during generation for validation consistency.
|
|
88
|
+
* The `charset` from these options will be used for validation.
|
|
89
|
+
* @returns `true` if the ID is valid, `false` otherwise.
|
|
90
|
+
*/
|
|
91
|
+
isValid(id: string, entityType: string, options?: IdGenerationOptions): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Escapes special characters in a string for use in a regular expression.
|
|
94
|
+
* @param str - The string to escape.
|
|
95
|
+
* @returns The escaped string.
|
|
96
|
+
* @private
|
|
97
|
+
*/
|
|
98
|
+
private escapeRegex;
|
|
99
|
+
/**
|
|
100
|
+
* Strips the prefix and separator from an ID string.
|
|
101
|
+
* @param id - The ID string (e.g., "PROJ_A6B3J0").
|
|
102
|
+
* @param separator - The separator used in the ID. Defaults to `IdGenerator.DEFAULT_SEPARATOR`.
|
|
103
|
+
* @returns The ID part without the prefix, or the original ID if separator not found.
|
|
104
|
+
*/
|
|
105
|
+
stripPrefix(id: string, separator?: string): string;
|
|
106
|
+
/**
|
|
107
|
+
* Determines the entity type from an ID string by its prefix (case-insensitive).
|
|
108
|
+
* @param id - The ID string (e.g., "PROJ_A6B3J0").
|
|
109
|
+
* @param separator - The separator used in the ID. Defaults to `IdGenerator.DEFAULT_SEPARATOR`.
|
|
110
|
+
* @returns The determined entity type.
|
|
111
|
+
* @throws {McpError} If ID format is invalid or prefix is unknown.
|
|
112
|
+
*/
|
|
113
|
+
getEntityType(id: string, separator?: string): string;
|
|
114
|
+
/**
|
|
115
|
+
* Normalizes an entity ID to ensure the prefix matches the registered case
|
|
116
|
+
* and the random part is uppercase. Note: This assumes the charset characters
|
|
117
|
+
* have a meaningful uppercase version if case-insensitivity is desired for the random part.
|
|
118
|
+
* For default charset (A-Z0-9), this is fine. For custom charsets, behavior might vary.
|
|
119
|
+
* @param id - The ID to normalize (e.g., "proj_a6b3j0").
|
|
120
|
+
* @param separator - The separator used in the ID. Defaults to `IdGenerator.DEFAULT_SEPARATOR`.
|
|
121
|
+
* @returns The normalized ID (e.g., "PROJ_A6B3J0").
|
|
122
|
+
* @throws {McpError} If the entity type cannot be determined from the ID.
|
|
123
|
+
*/
|
|
124
|
+
normalize(id: string, separator?: string): string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Default singleton instance of the `IdGenerator`.
|
|
128
|
+
* Initialize with `idGenerator.setEntityPrefixes({})` to configure.
|
|
129
|
+
*/
|
|
130
|
+
export declare const idGenerator: IdGenerator;
|
|
131
|
+
/**
|
|
132
|
+
* Generates a standard Version 4 UUID (Universally Unique Identifier).
|
|
133
|
+
* Uses the Node.js `crypto` module. This function is independent of the IdGenerator instance
|
|
134
|
+
* to prevent circular dependencies when used by other utilities like requestContextService.
|
|
135
|
+
* @returns A new UUID string.
|
|
136
|
+
*/
|
|
137
|
+
export declare const generateUUID: () => string;
|
|
138
|
+
/**
|
|
139
|
+
* Generates a short, 8-character alphanumeric identifier using the default IdGenerator instance.
|
|
140
|
+
* This is suitable for non-colliding IDs within a reasonable scope, like request IDs.
|
|
141
|
+
* @returns A new 8-character alphanumeric ID string.
|
|
142
|
+
*/
|
|
143
|
+
export declare const generateShortAlphanumericId: () => string;
|
|
144
|
+
//# sourceMappingURL=idGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idGenerator.d.ts","sourceRoot":"","sources":["../../../src/utils/security/idGenerator.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0C;IACxE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAO;IACvC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc,CAAK;IAElC;;;OAGG;IACH,OAAO,CAAC,cAAc,CAA0B;IAChD;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAA8B;IAExD;;;OAGG;gBACS,cAAc,GAAE,kBAAuB;IAKnD;;;OAGG;IACI,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,GAAG,IAAI;IAalE;;;OAGG;IACI,iBAAiB,IAAI,kBAAkB;IAI9C;;;;;OAKG;IACI,oBAAoB,CACzB,MAAM,GAAE,MAAmC,EAC3C,OAAO,GAAE,MAAoC,GAC5C,MAAM;IAuBT;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM;IAe3E;;;;;;OAMG;IACI,iBAAiB,CACtB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,GAChC,MAAM;IAWT;;;;;;;OAOG;IACI,OAAO,CACZ,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO;IAuBV;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;OAKG;IACI,WAAW,CAChB,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,MAAsC,GAChD,MAAM;IAKT;;;;;;OAMG;IACI,aAAa,CAClB,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,MAAsC,GAChD,MAAM;IAqBT;;;;;;;;;OASG;IACI,SAAS,CACd,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,MAAsC,GAChD,MAAM;CAUV;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAAO,MAE/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAO,MAM9C,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Provides a utility class `IdGenerator` for creating customizable, prefixed unique identifiers,
|
|
3
|
+
* and a standalone `generateUUID` function for generating standard UUIDs.
|
|
4
|
+
* The `IdGenerator` supports entity-specific prefixes, custom character sets, and lengths.
|
|
5
|
+
*
|
|
6
|
+
* Note: Logging has been removed from this module to prevent circular dependencies
|
|
7
|
+
* with the `requestContextService`, which itself uses `generateUUID` from this module.
|
|
8
|
+
* This was causing `ReferenceError: Cannot access 'generateUUID' before initialization`
|
|
9
|
+
* during application startup.
|
|
10
|
+
* @module src/utils/security/idGenerator
|
|
11
|
+
*/
|
|
12
|
+
import { randomUUID as cryptoRandomUUID, randomBytes } from "crypto";
|
|
13
|
+
import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
|
|
14
|
+
/**
|
|
15
|
+
* A generic ID Generator class for creating and managing unique, prefixed identifiers.
|
|
16
|
+
* Allows defining custom prefixes, generating random strings, and validating/normalizing IDs.
|
|
17
|
+
*/
|
|
18
|
+
export class IdGenerator {
|
|
19
|
+
/**
|
|
20
|
+
* Default character set for the random part of the ID.
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
static DEFAULT_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
24
|
+
/**
|
|
25
|
+
* Default separator character between prefix and random part.
|
|
26
|
+
* @private
|
|
27
|
+
*/
|
|
28
|
+
static DEFAULT_SEPARATOR = "_";
|
|
29
|
+
/**
|
|
30
|
+
* Default length for the random part of the ID.
|
|
31
|
+
* @private
|
|
32
|
+
*/
|
|
33
|
+
static DEFAULT_LENGTH = 6;
|
|
34
|
+
/**
|
|
35
|
+
* Stores the mapping of entity types to their prefixes.
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
entityPrefixes = {};
|
|
39
|
+
/**
|
|
40
|
+
* Stores a reverse mapping from prefixes (case-insensitive) to entity types.
|
|
41
|
+
* @private
|
|
42
|
+
*/
|
|
43
|
+
prefixToEntityType = {};
|
|
44
|
+
/**
|
|
45
|
+
* Constructs an `IdGenerator` instance.
|
|
46
|
+
* @param entityPrefixes - An initial map of entity types to their prefixes.
|
|
47
|
+
*/
|
|
48
|
+
constructor(entityPrefixes = {}) {
|
|
49
|
+
// Logging removed to prevent circular dependency with requestContextService.
|
|
50
|
+
this.setEntityPrefixes(entityPrefixes);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sets or updates the entity prefix configuration and rebuilds the internal reverse lookup map.
|
|
54
|
+
* @param entityPrefixes - A map where keys are entity type names and values are their desired ID prefixes.
|
|
55
|
+
*/
|
|
56
|
+
setEntityPrefixes(entityPrefixes) {
|
|
57
|
+
// Logging removed.
|
|
58
|
+
this.entityPrefixes = { ...entityPrefixes };
|
|
59
|
+
this.prefixToEntityType = Object.entries(this.entityPrefixes).reduce((acc, [type, prefix]) => {
|
|
60
|
+
acc[prefix.toLowerCase()] = type; // Store lowercase for case-insensitive lookup
|
|
61
|
+
return acc;
|
|
62
|
+
}, {});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Retrieves a copy of the current entity prefix configuration.
|
|
66
|
+
* @returns The current entity prefix configuration.
|
|
67
|
+
*/
|
|
68
|
+
getEntityPrefixes() {
|
|
69
|
+
return { ...this.entityPrefixes };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generates a cryptographically secure random string.
|
|
73
|
+
* @param length - The desired length of the random string. Defaults to `IdGenerator.DEFAULT_LENGTH`.
|
|
74
|
+
* @param charset - The character set to use. Defaults to `IdGenerator.DEFAULT_CHARSET`.
|
|
75
|
+
* @returns The generated random string.
|
|
76
|
+
*/
|
|
77
|
+
generateRandomString(length = IdGenerator.DEFAULT_LENGTH, charset = IdGenerator.DEFAULT_CHARSET) {
|
|
78
|
+
let result = "";
|
|
79
|
+
// Determine the largest multiple of charset.length that is less than or equal to 256
|
|
80
|
+
// This is the threshold for rejection sampling to avoid bias.
|
|
81
|
+
const maxValidByteValue = Math.floor(256 / charset.length) * charset.length;
|
|
82
|
+
while (result.length < length) {
|
|
83
|
+
const byteBuffer = randomBytes(1); // Get one random byte
|
|
84
|
+
const byte = byteBuffer[0];
|
|
85
|
+
// If the byte is within the valid range (i.e., it won't introduce bias),
|
|
86
|
+
// use it to select a character from the charset. Otherwise, discard and try again.
|
|
87
|
+
if (byte !== undefined && byte < maxValidByteValue) {
|
|
88
|
+
const charIndex = byte % charset.length;
|
|
89
|
+
const char = charset[charIndex];
|
|
90
|
+
if (char) {
|
|
91
|
+
result += char;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generates a unique ID, optionally prepended with a prefix.
|
|
99
|
+
* @param prefix - An optional prefix for the ID.
|
|
100
|
+
* @param options - Optional parameters for ID generation (length, separator, charset).
|
|
101
|
+
* @returns A unique identifier string.
|
|
102
|
+
*/
|
|
103
|
+
generate(prefix, options = {}) {
|
|
104
|
+
// Logging removed.
|
|
105
|
+
const { length = IdGenerator.DEFAULT_LENGTH, separator = IdGenerator.DEFAULT_SEPARATOR, charset = IdGenerator.DEFAULT_CHARSET, } = options;
|
|
106
|
+
const randomPart = this.generateRandomString(length, charset);
|
|
107
|
+
const generatedId = prefix
|
|
108
|
+
? `${prefix}${separator}${randomPart}`
|
|
109
|
+
: randomPart;
|
|
110
|
+
return generatedId;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Generates a unique ID for a specified entity type, using its configured prefix.
|
|
114
|
+
* @param entityType - The type of entity (must be registered).
|
|
115
|
+
* @param options - Optional parameters for ID generation.
|
|
116
|
+
* @returns A unique identifier string for the entity (e.g., "PROJ_A6B3J0").
|
|
117
|
+
* @throws {McpError} If the `entityType` is not registered.
|
|
118
|
+
*/
|
|
119
|
+
generateForEntity(entityType, options = {}) {
|
|
120
|
+
const prefix = this.entityPrefixes[entityType];
|
|
121
|
+
if (!prefix) {
|
|
122
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Unknown entity type: ${entityType}. No prefix registered.`);
|
|
123
|
+
}
|
|
124
|
+
return this.generate(prefix, options);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validates if an ID conforms to the expected format for a specific entity type.
|
|
128
|
+
* @param id - The ID string to validate.
|
|
129
|
+
* @param entityType - The expected entity type of the ID.
|
|
130
|
+
* @param options - Optional parameters used during generation for validation consistency.
|
|
131
|
+
* The `charset` from these options will be used for validation.
|
|
132
|
+
* @returns `true` if the ID is valid, `false` otherwise.
|
|
133
|
+
*/
|
|
134
|
+
isValid(id, entityType, options = {}) {
|
|
135
|
+
const prefix = this.entityPrefixes[entityType];
|
|
136
|
+
const { length = IdGenerator.DEFAULT_LENGTH, separator = IdGenerator.DEFAULT_SEPARATOR, charset = IdGenerator.DEFAULT_CHARSET, // Use charset from options or default
|
|
137
|
+
} = options;
|
|
138
|
+
if (!prefix) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
// Build regex character class from the charset
|
|
142
|
+
// Escape characters that have special meaning inside a regex character class `[]`
|
|
143
|
+
const escapedCharsetForClass = charset.replace(/[[\]\\^-]/g, "\\$&");
|
|
144
|
+
const charsetRegexPart = `[${escapedCharsetForClass}]`;
|
|
145
|
+
const pattern = new RegExp(`^${this.escapeRegex(prefix)}${this.escapeRegex(separator)}${charsetRegexPart}{${length}}$`);
|
|
146
|
+
return pattern.test(id);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Escapes special characters in a string for use in a regular expression.
|
|
150
|
+
* @param str - The string to escape.
|
|
151
|
+
* @returns The escaped string.
|
|
152
|
+
* @private
|
|
153
|
+
*/
|
|
154
|
+
escapeRegex(str) {
|
|
155
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Strips the prefix and separator from an ID string.
|
|
159
|
+
* @param id - The ID string (e.g., "PROJ_A6B3J0").
|
|
160
|
+
* @param separator - The separator used in the ID. Defaults to `IdGenerator.DEFAULT_SEPARATOR`.
|
|
161
|
+
* @returns The ID part without the prefix, or the original ID if separator not found.
|
|
162
|
+
*/
|
|
163
|
+
stripPrefix(id, separator = IdGenerator.DEFAULT_SEPARATOR) {
|
|
164
|
+
const parts = id.split(separator);
|
|
165
|
+
return parts.length > 1 ? parts.slice(1).join(separator) : id; // Handle separators in random part
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Determines the entity type from an ID string by its prefix (case-insensitive).
|
|
169
|
+
* @param id - The ID string (e.g., "PROJ_A6B3J0").
|
|
170
|
+
* @param separator - The separator used in the ID. Defaults to `IdGenerator.DEFAULT_SEPARATOR`.
|
|
171
|
+
* @returns The determined entity type.
|
|
172
|
+
* @throws {McpError} If ID format is invalid or prefix is unknown.
|
|
173
|
+
*/
|
|
174
|
+
getEntityType(id, separator = IdGenerator.DEFAULT_SEPARATOR) {
|
|
175
|
+
const parts = id.split(separator);
|
|
176
|
+
if (parts.length < 2 || !parts[0]) {
|
|
177
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Invalid ID format: ${id}. Expected format like: PREFIX${separator}RANDOMLPART`);
|
|
178
|
+
}
|
|
179
|
+
const prefix = parts[0];
|
|
180
|
+
const entityType = this.prefixToEntityType[prefix.toLowerCase()];
|
|
181
|
+
if (!entityType) {
|
|
182
|
+
throw new McpError(JsonRpcErrorCode.ValidationError, `Unknown entity type for prefix: ${prefix}`);
|
|
183
|
+
}
|
|
184
|
+
return entityType;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Normalizes an entity ID to ensure the prefix matches the registered case
|
|
188
|
+
* and the random part is uppercase. Note: This assumes the charset characters
|
|
189
|
+
* have a meaningful uppercase version if case-insensitivity is desired for the random part.
|
|
190
|
+
* For default charset (A-Z0-9), this is fine. For custom charsets, behavior might vary.
|
|
191
|
+
* @param id - The ID to normalize (e.g., "proj_a6b3j0").
|
|
192
|
+
* @param separator - The separator used in the ID. Defaults to `IdGenerator.DEFAULT_SEPARATOR`.
|
|
193
|
+
* @returns The normalized ID (e.g., "PROJ_A6B3J0").
|
|
194
|
+
* @throws {McpError} If the entity type cannot be determined from the ID.
|
|
195
|
+
*/
|
|
196
|
+
normalize(id, separator = IdGenerator.DEFAULT_SEPARATOR) {
|
|
197
|
+
const entityType = this.getEntityType(id, separator);
|
|
198
|
+
const registeredPrefix = this.entityPrefixes[entityType];
|
|
199
|
+
const idParts = id.split(separator);
|
|
200
|
+
const randomPart = idParts.slice(1).join(separator);
|
|
201
|
+
// Consider if randomPart.toUpperCase() is always correct for custom charsets.
|
|
202
|
+
// For now, maintaining existing behavior.
|
|
203
|
+
return `${registeredPrefix}${separator}${randomPart.toUpperCase()}`;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Default singleton instance of the `IdGenerator`.
|
|
208
|
+
* Initialize with `idGenerator.setEntityPrefixes({})` to configure.
|
|
209
|
+
*/
|
|
210
|
+
export const idGenerator = new IdGenerator();
|
|
211
|
+
/**
|
|
212
|
+
* Generates a standard Version 4 UUID (Universally Unique Identifier).
|
|
213
|
+
* Uses the Node.js `crypto` module. This function is independent of the IdGenerator instance
|
|
214
|
+
* to prevent circular dependencies when used by other utilities like requestContextService.
|
|
215
|
+
* @returns A new UUID string.
|
|
216
|
+
*/
|
|
217
|
+
export const generateUUID = () => {
|
|
218
|
+
return cryptoRandomUUID();
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Generates a short, 8-character alphanumeric identifier using the default IdGenerator instance.
|
|
222
|
+
* This is suitable for non-colliding IDs within a reasonable scope, like request IDs.
|
|
223
|
+
* @returns A new 8-character alphanumeric ID string.
|
|
224
|
+
*/
|
|
225
|
+
export const generateShortAlphanumericId = () => {
|
|
226
|
+
// Use the default instance and its generate method without a prefix.
|
|
227
|
+
return idGenerator.generate(undefined, {
|
|
228
|
+
length: 8,
|
|
229
|
+
separator: "", // No separator needed for a simple random string
|
|
230
|
+
});
|
|
231
|
+
};
|
|
232
|
+
//# sourceMappingURL=idGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idGenerator.js","sourceRoot":"","sources":["../../../src/utils/security/idGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Barrel file for security-related utility modules.
|
|
3
|
+
* This file re-exports utilities for input sanitization, rate limiting,
|
|
4
|
+
* and ID generation.
|
|
5
|
+
* @module src/utils/security
|
|
6
|
+
*/
|
|
7
|
+
export * from "./idGenerator.js";
|
|
8
|
+
export * from "./rateLimiter.js";
|
|
9
|
+
export * from "./sanitization.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/security/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Barrel file for security-related utility modules.
|
|
3
|
+
* This file re-exports utilities for input sanitization, rate limiting,
|
|
4
|
+
* and ID generation.
|
|
5
|
+
* @module src/utils/security
|
|
6
|
+
*/
|
|
7
|
+
export * from "./idGenerator.js";
|
|
8
|
+
export * from "./rateLimiter.js";
|
|
9
|
+
export * from "./sanitization.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/security/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|