@cyanheads/mcp-ts-core 0.1.0-beta.12
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/CLAUDE.md +583 -0
- package/LICENSE +201 -0
- package/README.md +287 -0
- package/biome.json +103 -0
- package/dist/app.d.ts +82 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +222 -0
- package/dist/app.js.map +1 -0
- package/dist/cli/init.d.ts +8 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +161 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/config/index.d.ts +349 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +464 -0
- package/dist/config/index.js.map +1 -0
- package/dist/context.d.ts +119 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +144 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/prompt-registration.d.ts +33 -0
- package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -0
- package/dist/mcp-server/prompts/prompt-registration.js +91 -0
- package/dist/mcp-server/prompts/prompt-registration.js.map +1 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts +49 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts.map +1 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.js +39 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.js.map +1 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +37 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.js +2 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.js.map +1 -0
- package/dist/mcp-server/resources/resource-registration.d.ts +27 -0
- package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -0
- package/dist/mcp-server/resources/resource-registration.js +85 -0
- package/dist/mcp-server/resources/resource-registration.js.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts +84 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.js +40 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.js.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts +32 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js +103 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +94 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.js +2 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +14 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +111 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -0
- package/dist/mcp-server/roots/roots-registration.d.ts +22 -0
- package/dist/mcp-server/roots/roots-registration.d.ts.map +1 -0
- package/dist/mcp-server/roots/roots-registration.js +25 -0
- package/dist/mcp-server/roots/roots-registration.js.map +1 -0
- package/dist/mcp-server/server.d.ts +34 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +62 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +42 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +70 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +1 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +109 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +209 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +1 -0
- package/dist/mcp-server/tasks/core/taskManager.d.ts +103 -0
- package/dist/mcp-server/tasks/core/taskManager.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/taskManager.js +144 -0
- package/dist/mcp-server/tasks/core/taskManager.js.map +1 -0
- package/dist/mcp-server/tasks/core/taskTypes.d.ts +11 -0
- package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/taskTypes.js +13 -0
- package/dist/mcp-server/tasks/core/taskTypes.js.map +1 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +108 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js +14 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/tool-registration.d.ts +49 -0
- package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/tool-registration.js +269 -0
- package/dist/mcp-server/tools/tool-registration.js.map +1 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.d.ts +73 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.js +45 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts +33 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.js +107 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.js.map +1 -0
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts +118 -0
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/toolDefinition.js +2 -0
- package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +34 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +68 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -0
- package/dist/mcp-server/transports/ITransport.d.ts +15 -0
- package/dist/mcp-server/transports/ITransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/ITransport.js +2 -0
- package/dist/mcp-server/transports/ITransport.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 +43 -0
- package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts +24 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js +69 -0
- package/dist/mcp-server/transports/auth/authMiddleware.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 +19 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js +2 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +18 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js +64 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts +25 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.js +34 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.js +58 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.d.ts +25 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.js +30 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.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/jwtStrategy.d.ts +14 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +86 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +14 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +113 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.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 +112 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts +47 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.js +396 -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 +2 -0
- package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts +21 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js +44 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.d.ts +33 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.js +54 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.js.map +1 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts +87 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/sessionStore.js +209 -0
- package/dist/mcp-server/transports/http/sessionStore.js.map +1 -0
- package/dist/mcp-server/transports/manager.d.ts +22 -0
- package/dist/mcp-server/transports/manager.d.ts.map +1 -0
- package/dist/mcp-server/transports/manager.js +62 -0
- package/dist/mcp-server/transports/manager.js.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +44 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js +63 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
- package/dist/services/graph/core/GraphService.d.ts +205 -0
- package/dist/services/graph/core/GraphService.d.ts.map +1 -0
- package/dist/services/graph/core/GraphService.js +231 -0
- package/dist/services/graph/core/GraphService.js.map +1 -0
- package/dist/services/graph/core/IGraphProvider.d.ts +295 -0
- package/dist/services/graph/core/IGraphProvider.d.ts.map +1 -0
- package/dist/services/graph/core/IGraphProvider.js +8 -0
- package/dist/services/graph/core/IGraphProvider.js.map +1 -0
- package/dist/services/graph/types.d.ts +107 -0
- package/dist/services/graph/types.d.ts.map +1 -0
- package/dist/services/graph/types.js +8 -0
- package/dist/services/graph/types.js.map +1 -0
- package/dist/services/llm/core/ILlmProvider.d.ts +86 -0
- package/dist/services/llm/core/ILlmProvider.d.ts.map +1 -0
- package/dist/services/llm/core/ILlmProvider.js +2 -0
- package/dist/services/llm/core/ILlmProvider.js.map +1 -0
- package/dist/services/llm/providers/openrouter.provider.d.ts +187 -0
- package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -0
- package/dist/services/llm/providers/openrouter.provider.js +302 -0
- package/dist/services/llm/providers/openrouter.provider.js.map +1 -0
- package/dist/services/llm/types.d.ts +16 -0
- package/dist/services/llm/types.d.ts.map +1 -0
- package/dist/services/llm/types.js +9 -0
- package/dist/services/llm/types.js.map +1 -0
- package/dist/services/speech/core/ISpeechProvider.d.ts +92 -0
- package/dist/services/speech/core/ISpeechProvider.d.ts.map +1 -0
- package/dist/services/speech/core/ISpeechProvider.js +34 -0
- package/dist/services/speech/core/ISpeechProvider.js.map +1 -0
- package/dist/services/speech/core/SpeechService.d.ts +87 -0
- package/dist/services/speech/core/SpeechService.d.ts.map +1 -0
- package/dist/services/speech/core/SpeechService.js +135 -0
- package/dist/services/speech/core/SpeechService.js.map +1 -0
- package/dist/services/speech/providers/elevenlabs.provider.d.ts +77 -0
- package/dist/services/speech/providers/elevenlabs.provider.d.ts.map +1 -0
- package/dist/services/speech/providers/elevenlabs.provider.js +199 -0
- package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -0
- package/dist/services/speech/providers/whisper.provider.d.ts +94 -0
- package/dist/services/speech/providers/whisper.provider.d.ts.map +1 -0
- package/dist/services/speech/providers/whisper.provider.js +240 -0
- package/dist/services/speech/providers/whisper.provider.js.map +1 -0
- package/dist/services/speech/types.d.ts +173 -0
- package/dist/services/speech/types.d.ts.map +1 -0
- package/dist/services/speech/types.js +8 -0
- package/dist/services/speech/types.js.map +1 -0
- package/dist/storage/core/IStorageProvider.d.ts +159 -0
- package/dist/storage/core/IStorageProvider.d.ts.map +1 -0
- package/dist/storage/core/IStorageProvider.js +2 -0
- package/dist/storage/core/IStorageProvider.js.map +1 -0
- package/dist/storage/core/StorageService.d.ts +22 -0
- package/dist/storage/core/StorageService.d.ts.map +1 -0
- package/dist/storage/core/StorageService.js +151 -0
- package/dist/storage/core/StorageService.js.map +1 -0
- package/dist/storage/core/storageFactory.d.ts +66 -0
- package/dist/storage/core/storageFactory.d.ts.map +1 -0
- package/dist/storage/core/storageFactory.js +122 -0
- package/dist/storage/core/storageFactory.js.map +1 -0
- package/dist/storage/core/storageValidation.d.ts +77 -0
- package/dist/storage/core/storageValidation.d.ts.map +1 -0
- package/dist/storage/core/storageValidation.js +303 -0
- package/dist/storage/core/storageValidation.js.map +1 -0
- package/dist/storage/providers/cloudflare/d1Provider.d.ts +94 -0
- package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/d1Provider.js +347 -0
- package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts +21 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/kvProvider.js +183 -0
- package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -0
- package/dist/storage/providers/cloudflare/r2Provider.d.ts +28 -0
- package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/r2Provider.js +222 -0
- package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +20 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.js +282 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +21 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.js +139 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -0
- package/dist/storage/providers/supabase/supabase.types.d.ts +49 -0
- package/dist/storage/providers/supabase/supabase.types.d.ts.map +1 -0
- package/dist/storage/providers/supabase/supabase.types.js +8 -0
- package/dist/storage/providers/supabase/supabase.types.js.map +1 -0
- package/dist/storage/providers/supabase/supabaseProvider.d.ts +24 -0
- package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -0
- package/dist/storage/providers/supabase/supabaseProvider.js +209 -0
- package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -0
- package/dist/testing/index.d.ts +53 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +132 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types-global/errors.d.ts +83 -0
- package/dist/types-global/errors.d.ts.map +1 -0
- package/dist/types-global/errors.js +113 -0
- package/dist/types-global/errors.js.map +1 -0
- package/dist/utils/formatting/diffFormatter.d.ts +227 -0
- package/dist/utils/formatting/diffFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/diffFormatter.js +369 -0
- package/dist/utils/formatting/diffFormatter.js.map +1 -0
- package/dist/utils/formatting/index.d.ts +9 -0
- package/dist/utils/formatting/index.d.ts.map +1 -0
- package/dist/utils/formatting/index.js +9 -0
- package/dist/utils/formatting/index.js.map +1 -0
- package/dist/utils/formatting/markdownBuilder.d.ts +543 -0
- package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
- package/dist/utils/formatting/markdownBuilder.js +674 -0
- package/dist/utils/formatting/markdownBuilder.js.map +1 -0
- package/dist/utils/formatting/tableFormatter.d.ts +261 -0
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/tableFormatter.js +456 -0
- package/dist/utils/formatting/tableFormatter.js.map +1 -0
- package/dist/utils/formatting/treeFormatter.d.ts +344 -0
- package/dist/utils/formatting/treeFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/treeFormatter.js +400 -0
- package/dist/utils/formatting/treeFormatter.js.map +1 -0
- package/dist/utils/internal/encoding.d.ts +42 -0
- package/dist/utils/internal/encoding.d.ts.map +1 -0
- package/dist/utils/internal/encoding.js +87 -0
- package/dist/utils/internal/encoding.js.map +1 -0
- package/dist/utils/internal/error-handler/errorHandler.d.ts +140 -0
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/errorHandler.js +318 -0
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -0
- package/dist/utils/internal/error-handler/helpers.d.ts +98 -0
- package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/helpers.js +214 -0
- package/dist/utils/internal/error-handler/helpers.js.map +1 -0
- package/dist/utils/internal/error-handler/mappings.d.ts +85 -0
- package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/mappings.js +234 -0
- package/dist/utils/internal/error-handler/mappings.js.map +1 -0
- package/dist/utils/internal/error-handler/types.d.ts +160 -0
- package/dist/utils/internal/error-handler/types.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/types.js +6 -0
- package/dist/utils/internal/error-handler/types.js.map +1 -0
- package/dist/utils/internal/health.d.ts +60 -0
- package/dist/utils/internal/health.d.ts.map +1 -0
- package/dist/utils/internal/health.js +46 -0
- package/dist/utils/internal/health.js.map +1 -0
- package/dist/utils/internal/logger.d.ts +300 -0
- package/dist/utils/internal/logger.d.ts.map +1 -0
- package/dist/utils/internal/logger.js +573 -0
- package/dist/utils/internal/logger.js.map +1 -0
- package/dist/utils/internal/performance.d.ts +78 -0
- package/dist/utils/internal/performance.d.ts.map +1 -0
- package/dist/utils/internal/performance.js +227 -0
- package/dist/utils/internal/performance.js.map +1 -0
- package/dist/utils/internal/requestContext.d.ts +200 -0
- package/dist/utils/internal/requestContext.d.ts.map +1 -0
- package/dist/utils/internal/requestContext.js +163 -0
- package/dist/utils/internal/requestContext.js.map +1 -0
- package/dist/utils/internal/runtime.d.ts +49 -0
- package/dist/utils/internal/runtime.d.ts.map +1 -0
- package/dist/utils/internal/runtime.js +90 -0
- package/dist/utils/internal/runtime.js.map +1 -0
- package/dist/utils/internal/startupBanner.d.ts +23 -0
- package/dist/utils/internal/startupBanner.d.ts.map +1 -0
- package/dist/utils/internal/startupBanner.js +34 -0
- package/dist/utils/internal/startupBanner.js.map +1 -0
- package/dist/utils/metrics/tokenCounter.d.ts +97 -0
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
- package/dist/utils/metrics/tokenCounter.js +162 -0
- package/dist/utils/metrics/tokenCounter.js.map +1 -0
- package/dist/utils/network/fetchWithTimeout.d.ts +91 -0
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/network/fetchWithTimeout.js +305 -0
- package/dist/utils/network/fetchWithTimeout.js.map +1 -0
- package/dist/utils/pagination/pagination.d.ts +157 -0
- package/dist/utils/pagination/pagination.d.ts.map +1 -0
- package/dist/utils/pagination/pagination.js +191 -0
- package/dist/utils/pagination/pagination.js.map +1 -0
- package/dist/utils/parsing/csvParser.d.ts +84 -0
- package/dist/utils/parsing/csvParser.d.ts.map +1 -0
- package/dist/utils/parsing/csvParser.js +132 -0
- package/dist/utils/parsing/csvParser.js.map +1 -0
- package/dist/utils/parsing/dateParser.d.ts +103 -0
- package/dist/utils/parsing/dateParser.d.ts.map +1 -0
- package/dist/utils/parsing/dateParser.js +142 -0
- package/dist/utils/parsing/dateParser.js.map +1 -0
- package/dist/utils/parsing/frontmatterParser.d.ts +91 -0
- package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -0
- package/dist/utils/parsing/frontmatterParser.js +163 -0
- package/dist/utils/parsing/frontmatterParser.js.map +1 -0
- package/dist/utils/parsing/index.d.ts +15 -0
- package/dist/utils/parsing/index.d.ts.map +1 -0
- package/dist/utils/parsing/index.js +15 -0
- package/dist/utils/parsing/index.js.map +1 -0
- package/dist/utils/parsing/jsonParser.d.ts +115 -0
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
- package/dist/utils/parsing/jsonParser.js +177 -0
- package/dist/utils/parsing/jsonParser.js.map +1 -0
- package/dist/utils/parsing/pdfParser.d.ts +563 -0
- package/dist/utils/parsing/pdfParser.d.ts.map +1 -0
- package/dist/utils/parsing/pdfParser.js +775 -0
- package/dist/utils/parsing/pdfParser.js.map +1 -0
- package/dist/utils/parsing/thinkBlock.d.ts +31 -0
- package/dist/utils/parsing/thinkBlock.d.ts.map +1 -0
- package/dist/utils/parsing/thinkBlock.js +31 -0
- package/dist/utils/parsing/thinkBlock.js.map +1 -0
- package/dist/utils/parsing/xmlParser.d.ts +69 -0
- package/dist/utils/parsing/xmlParser.d.ts.map +1 -0
- package/dist/utils/parsing/xmlParser.js +140 -0
- package/dist/utils/parsing/xmlParser.js.map +1 -0
- package/dist/utils/parsing/yamlParser.d.ts +64 -0
- package/dist/utils/parsing/yamlParser.d.ts.map +1 -0
- package/dist/utils/parsing/yamlParser.js +129 -0
- package/dist/utils/parsing/yamlParser.js.map +1 -0
- package/dist/utils/scheduling/scheduler.d.ts +174 -0
- package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
- package/dist/utils/scheduling/scheduler.js +248 -0
- package/dist/utils/scheduling/scheduler.js.map +1 -0
- package/dist/utils/security/idGenerator.d.ts +189 -0
- package/dist/utils/security/idGenerator.d.ts.map +1 -0
- package/dist/utils/security/idGenerator.js +301 -0
- package/dist/utils/security/idGenerator.js.map +1 -0
- package/dist/utils/security/index.d.ts +8 -0
- package/dist/utils/security/index.d.ts.map +1 -0
- package/dist/utils/security/index.js +8 -0
- package/dist/utils/security/index.js.map +1 -0
- package/dist/utils/security/rateLimiter.d.ts +171 -0
- package/dist/utils/security/rateLimiter.d.ts.map +1 -0
- package/dist/utils/security/rateLimiter.js +294 -0
- package/dist/utils/security/rateLimiter.js.map +1 -0
- package/dist/utils/security/sanitization.d.ts +430 -0
- package/dist/utils/security/sanitization.d.ts.map +1 -0
- package/dist/utils/security/sanitization.js +759 -0
- package/dist/utils/security/sanitization.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +12 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +12 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/instrumentation.d.ts +62 -0
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
- package/dist/utils/telemetry/instrumentation.js +223 -0
- package/dist/utils/telemetry/instrumentation.js.map +1 -0
- package/dist/utils/telemetry/metrics.d.ts +170 -0
- package/dist/utils/telemetry/metrics.d.ts.map +1 -0
- package/dist/utils/telemetry/metrics.js +205 -0
- package/dist/utils/telemetry/metrics.js.map +1 -0
- package/dist/utils/telemetry/semconv.d.ts +147 -0
- package/dist/utils/telemetry/semconv.d.ts.map +1 -0
- package/dist/utils/telemetry/semconv.js +159 -0
- package/dist/utils/telemetry/semconv.js.map +1 -0
- package/dist/utils/telemetry/trace.d.ts +141 -0
- package/dist/utils/telemetry/trace.d.ts.map +1 -0
- package/dist/utils/telemetry/trace.js +193 -0
- package/dist/utils/telemetry/trace.js.map +1 -0
- package/dist/utils/types/guards.d.ts +209 -0
- package/dist/utils/types/guards.d.ts.map +1 -0
- package/dist/utils/types/guards.js +229 -0
- package/dist/utils/types/guards.js.map +1 -0
- package/dist/utils/types/index.d.ts +6 -0
- package/dist/utils/types/index.d.ts.map +1 -0
- package/dist/utils/types/index.js +6 -0
- package/dist/utils/types/index.js.map +1 -0
- package/dist/worker.d.ts +59 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +216 -0
- package/dist/worker.js.map +1 -0
- package/package.json +377 -0
- package/skills/README.md +38 -0
- package/skills/add-export/SKILL.md +49 -0
- package/skills/add-prompt/SKILL.md +97 -0
- package/skills/add-provider/SKILL.md +53 -0
- package/skills/add-resource/SKILL.md +107 -0
- package/skills/add-service/SKILL.md +113 -0
- package/skills/add-tool/SKILL.md +110 -0
- package/skills/api-auth/SKILL.md +173 -0
- package/skills/api-config/SKILL.md +68 -0
- package/skills/api-context/SKILL.md +321 -0
- package/skills/api-errors/SKILL.md +146 -0
- package/skills/api-services/SKILL.md +24 -0
- package/skills/api-services/references/graph.md +124 -0
- package/skills/api-services/references/llm.md +46 -0
- package/skills/api-services/references/speech.md +72 -0
- package/skills/api-testing/SKILL.md +263 -0
- package/skills/api-utils/SKILL.md +106 -0
- package/skills/api-utils/references/formatting.md +237 -0
- package/skills/api-utils/references/parsing.md +263 -0
- package/skills/api-utils/references/security.md +226 -0
- package/skills/api-workers/SKILL.md +165 -0
- package/skills/devcheck/SKILL.md +31 -0
- package/skills/maintenance/SKILL.md +52 -0
- package/skills/migrate-mcp-ts-template/SKILL.md +131 -0
- package/skills/release/SKILL.md +67 -0
- package/skills/setup/SKILL.md +89 -0
- package/skills/walkthrough-init/SKILL.md +50 -0
- package/templates/.env.example +17 -0
- package/templates/AGENTS.md +113 -0
- package/templates/CLAUDE.md +113 -0
- package/templates/_tsconfig.json +33 -0
- package/templates/biome.template.json +43 -0
- package/templates/package.json +26 -0
- package/templates/src/index.ts +16 -0
- package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +19 -0
- package/templates/src/mcp-server/resources/definitions/echo.resource.ts +30 -0
- package/templates/src/mcp-server/tools/definitions/echo.tool.ts +24 -0
- package/templates/vitest.config.ts +12 -0
- package/tsconfig.base.json +44 -0
- package/vitest.config.base.ts +38 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Main ErrorHandler implementation with logging and telemetry integration.
|
|
3
|
+
* Provides error classification, formatting, and consistent error handling patterns.
|
|
4
|
+
* @module src/utils/internal/error-handler/errorHandler
|
|
5
|
+
*/
|
|
6
|
+
import { JsonRpcErrorCode } from '../../../types-global/errors.js';
|
|
7
|
+
import type { ErrorHandlerOptions, ErrorMapping } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* A utility class providing static methods for comprehensive error handling.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ErrorHandler {
|
|
12
|
+
/**
|
|
13
|
+
* Determines an appropriate `JsonRpcErrorCode` for a given error.
|
|
14
|
+
*
|
|
15
|
+
* Resolution order:
|
|
16
|
+
* 1. `McpError` instances — returns `error.code` directly.
|
|
17
|
+
* 2. Standard JS error constructor names via `ERROR_TYPE_MAPPINGS` (e.g. `TypeError` → `ValidationError`).
|
|
18
|
+
* 3. Provider-specific patterns (AWS, HTTP status codes, Supabase, OpenRouter) — checked before common patterns for specificity.
|
|
19
|
+
* 4. Common message/name patterns (auth, not-found, rate-limit, etc.).
|
|
20
|
+
* 5. `AbortError` name — mapped to `Timeout`.
|
|
21
|
+
* 6. Falls back to `JsonRpcErrorCode.InternalError`.
|
|
22
|
+
*
|
|
23
|
+
* @param error - The error instance or value to classify.
|
|
24
|
+
* @returns The most specific `JsonRpcErrorCode` that fits the error.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* ErrorHandler.determineErrorCode(new McpError(JsonRpcErrorCode.NotFound, 'missing'));
|
|
29
|
+
* // → JsonRpcErrorCode.NotFound
|
|
30
|
+
*
|
|
31
|
+
* ErrorHandler.determineErrorCode(new TypeError('bad input'));
|
|
32
|
+
* // → JsonRpcErrorCode.ValidationError
|
|
33
|
+
*
|
|
34
|
+
* ErrorHandler.determineErrorCode(new Error('status code 429'));
|
|
35
|
+
* // → JsonRpcErrorCode.RateLimited
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
static determineErrorCode(error: unknown): JsonRpcErrorCode;
|
|
39
|
+
/**
|
|
40
|
+
* Handles an error with consistent logging, OpenTelemetry integration, and optional transformation.
|
|
41
|
+
*
|
|
42
|
+
* Steps performed:
|
|
43
|
+
* 1. Records the exception on the active OTel span and sets span status to ERROR.
|
|
44
|
+
* 2. Sanitizes `options.input` via `sanitizeInputForLogging` before including in logs.
|
|
45
|
+
* 3. Extracts and consolidates error data, original stack, and the full cause chain.
|
|
46
|
+
* 4. Wraps non-`McpError` errors in a new `McpError` (or delegates to `options.errorMapper`).
|
|
47
|
+
* 5. Logs the result at `error` level via the global logger with full structured context.
|
|
48
|
+
* 6. Returns the processed error, or rethrows it if `options.rethrow` is `true`.
|
|
49
|
+
*
|
|
50
|
+
* @param error - The error instance or value that occurred.
|
|
51
|
+
* @param options - Configuration controlling transformation, logging, and rethrow behavior.
|
|
52
|
+
* @returns The processed `Error` instance (a `McpError` unless `errorMapper` returns something else).
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* // Log and return without rethrowing
|
|
57
|
+
* const handled = ErrorHandler.handleError(err, { operation: 'fetchUser', context: { requestId } });
|
|
58
|
+
*
|
|
59
|
+
* // Log and rethrow
|
|
60
|
+
* ErrorHandler.handleError(err, { operation: 'fetchUser', rethrow: true });
|
|
61
|
+
*
|
|
62
|
+
* // Custom error transformation
|
|
63
|
+
* ErrorHandler.handleError(err, {
|
|
64
|
+
* operation: 'fetchUser',
|
|
65
|
+
* errorMapper: (e) => new MyDomainError(getErrorMessage(e)),
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
static handleError(error: unknown, options: ErrorHandlerOptions): Error;
|
|
70
|
+
/**
|
|
71
|
+
* Maps an error to a specific error type `T` by testing it against an ordered list of `ErrorMapping` rules.
|
|
72
|
+
*
|
|
73
|
+
* Each mapping's `pattern` is tested (case-insensitively) against both the error message and error name.
|
|
74
|
+
* The first matching rule's `factory` is called with the original error and the mapping's `additionalContext`.
|
|
75
|
+
* If no rule matches and `defaultFactory` is provided, it is called instead.
|
|
76
|
+
* If neither matches, returns the original `Error` or wraps non-Error values in a plain `Error`.
|
|
77
|
+
*
|
|
78
|
+
* @template T The target error type, extending `Error`.
|
|
79
|
+
* @param error - The error instance or value to map.
|
|
80
|
+
* @param mappings - An ordered array of mapping rules; first match wins.
|
|
81
|
+
* @param defaultFactory - Optional factory invoked when no mapping rule matches.
|
|
82
|
+
* @returns The mapped error of type `T`, or the original/wrapped error if no rule matched.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* const mapped = ErrorHandler.mapError(err, [
|
|
87
|
+
* {
|
|
88
|
+
* pattern: /not found/i,
|
|
89
|
+
* errorCode: JsonRpcErrorCode.NotFound,
|
|
90
|
+
* factory: (e) => new McpError(JsonRpcErrorCode.NotFound, getErrorMessage(e)),
|
|
91
|
+
* },
|
|
92
|
+
* ]);
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
static mapError<T extends Error>(error: unknown, mappings: ReadonlyArray<ErrorMapping<T>>, defaultFactory?: (error: unknown, context?: Record<string, unknown>) => T): T | Error;
|
|
96
|
+
/**
|
|
97
|
+
* Formats an error into a consistent `{ code, message, data }` structure for API responses or structured logging.
|
|
98
|
+
*
|
|
99
|
+
* - `McpError` → `{ code: error.code, message: error.message, data: error.data ?? {} }`
|
|
100
|
+
* - `Error` → `{ code: determineErrorCode(error), message: error.message, data: { errorType: error.name } }`
|
|
101
|
+
* - Other values → `{ code: JsonRpcErrorCode.UnknownError, message: getErrorMessage(value), data: { errorType: getErrorName(value) } }`
|
|
102
|
+
*
|
|
103
|
+
* @param error - The error instance or value to format.
|
|
104
|
+
* @returns A plain object with `code` (numeric `JsonRpcErrorCode`), `message` (string), and `data` (object).
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const formatted = ErrorHandler.formatError(new McpError(JsonRpcErrorCode.NotFound, 'Item missing'));
|
|
109
|
+
* // → { code: -32001, message: 'Item missing', data: {} }
|
|
110
|
+
*
|
|
111
|
+
* const formatted2 = ErrorHandler.formatError(new TypeError('bad arg'));
|
|
112
|
+
* // → { code: -32007, message: 'bad arg', data: { errorType: 'TypeError' } }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
static formatError(error: unknown): Record<string, unknown>;
|
|
116
|
+
/**
|
|
117
|
+
* Safely executes a synchronous or asynchronous function, logging and rethrowing any error.
|
|
118
|
+
*
|
|
119
|
+
* Equivalent to wrapping `fn` in a try/catch that calls `ErrorHandler.handleError` with `rethrow: true`.
|
|
120
|
+
* The processed `McpError` (or custom-mapped error) is always thrown — this method never swallows errors.
|
|
121
|
+
* Use this in service code where you want structured logging and OTel integration without duplicating
|
|
122
|
+
* error-handling boilerplate.
|
|
123
|
+
*
|
|
124
|
+
* @template T The expected return type of `fn`.
|
|
125
|
+
* @param fn - The function to execute. May be synchronous or return a `Promise`.
|
|
126
|
+
* @param options - Error handling options passed to `handleError` (`rethrow` is always `true` and cannot be overridden).
|
|
127
|
+
* @returns A promise that resolves with the return value of `fn` on success.
|
|
128
|
+
* @throws {McpError | Error} The processed error from `ErrorHandler.handleError` on failure.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* const user = await ErrorHandler.tryCatch(
|
|
133
|
+
* () => db.findUser(id),
|
|
134
|
+
* { operation: 'findUser', context: { requestId, userId: id } },
|
|
135
|
+
* );
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
static tryCatch<T>(fn: () => Promise<T> | T, options: Omit<ErrorHandlerOptions, 'rethrow'>): Promise<T>;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=errorHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../../src/utils/internal/error-handler/errorHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAY,MAAM,0BAA0B,CAAC;AAYtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpE;;GAEG;AAEH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;WACW,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAuClE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;WACW,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,KAAK;IAmI9E;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;WACW,QAAQ,CAAC,CAAC,SAAS,KAAK,EACpC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EACxC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GACxE,CAAC,GAAG,KAAK;IAkBZ;;;;;;;;;;;;;;;;;;OAkBG;WACW,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAwBlE;;;;;;;;;;;;;;;;;;;;;OAqBG;WACiB,QAAQ,CAAC,CAAC,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAC5C,OAAO,CAAC,CAAC,CAAC;CAWd"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Main ErrorHandler implementation with logging and telemetry integration.
|
|
3
|
+
* Provides error classification, formatting, and consistent error handling patterns.
|
|
4
|
+
* @module src/utils/internal/error-handler/errorHandler
|
|
5
|
+
*/
|
|
6
|
+
import { SpanStatusCode, trace } from '@opentelemetry/api';
|
|
7
|
+
import { JsonRpcErrorCode, McpError } from '../../../types-global/errors.js';
|
|
8
|
+
import { logger } from '../../../utils/internal/logger.js';
|
|
9
|
+
import { generateUUID } from '../../../utils/security/idGenerator.js';
|
|
10
|
+
import { sanitizeInputForLogging } from '../../../utils/security/sanitization.js';
|
|
11
|
+
import { extractErrorCauseChain, getErrorMessage, getErrorName } from './helpers.js';
|
|
12
|
+
import { COMPILED_ERROR_PATTERNS, COMPILED_PROVIDER_PATTERNS, ERROR_TYPE_MAPPINGS, getCompiledPattern, } from './mappings.js';
|
|
13
|
+
/**
|
|
14
|
+
* A utility class providing static methods for comprehensive error handling.
|
|
15
|
+
*/
|
|
16
|
+
// biome-ignore lint/complexity/noStaticOnlyClass: public API surface — preserving class for namespace semantics
|
|
17
|
+
export class ErrorHandler {
|
|
18
|
+
/**
|
|
19
|
+
* Determines an appropriate `JsonRpcErrorCode` for a given error.
|
|
20
|
+
*
|
|
21
|
+
* Resolution order:
|
|
22
|
+
* 1. `McpError` instances — returns `error.code` directly.
|
|
23
|
+
* 2. Standard JS error constructor names via `ERROR_TYPE_MAPPINGS` (e.g. `TypeError` → `ValidationError`).
|
|
24
|
+
* 3. Provider-specific patterns (AWS, HTTP status codes, Supabase, OpenRouter) — checked before common patterns for specificity.
|
|
25
|
+
* 4. Common message/name patterns (auth, not-found, rate-limit, etc.).
|
|
26
|
+
* 5. `AbortError` name — mapped to `Timeout`.
|
|
27
|
+
* 6. Falls back to `JsonRpcErrorCode.InternalError`.
|
|
28
|
+
*
|
|
29
|
+
* @param error - The error instance or value to classify.
|
|
30
|
+
* @returns The most specific `JsonRpcErrorCode` that fits the error.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* ErrorHandler.determineErrorCode(new McpError(JsonRpcErrorCode.NotFound, 'missing'));
|
|
35
|
+
* // → JsonRpcErrorCode.NotFound
|
|
36
|
+
*
|
|
37
|
+
* ErrorHandler.determineErrorCode(new TypeError('bad input'));
|
|
38
|
+
* // → JsonRpcErrorCode.ValidationError
|
|
39
|
+
*
|
|
40
|
+
* ErrorHandler.determineErrorCode(new Error('status code 429'));
|
|
41
|
+
* // → JsonRpcErrorCode.RateLimited
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
static determineErrorCode(error) {
|
|
45
|
+
if (error instanceof McpError) {
|
|
46
|
+
return error.code;
|
|
47
|
+
}
|
|
48
|
+
const errorName = getErrorName(error);
|
|
49
|
+
const errorMessage = getErrorMessage(error);
|
|
50
|
+
// Check against standard JavaScript error types
|
|
51
|
+
const mappedFromType = ERROR_TYPE_MAPPINGS[errorName];
|
|
52
|
+
if (mappedFromType) {
|
|
53
|
+
return mappedFromType;
|
|
54
|
+
}
|
|
55
|
+
// Check provider-specific patterns first (more specific)
|
|
56
|
+
for (const mapping of COMPILED_PROVIDER_PATTERNS) {
|
|
57
|
+
if (mapping.compiledPattern.test(errorMessage) || mapping.compiledPattern.test(errorName)) {
|
|
58
|
+
return mapping.errorCode;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Then check common error patterns (using pre-compiled patterns for performance)
|
|
62
|
+
for (const mapping of COMPILED_ERROR_PATTERNS) {
|
|
63
|
+
if (mapping.compiledPattern.test(errorMessage) || mapping.compiledPattern.test(errorName)) {
|
|
64
|
+
return mapping.errorCode;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Special-case common platform errors
|
|
68
|
+
if (typeof error === 'object' &&
|
|
69
|
+
error !== null &&
|
|
70
|
+
'name' in error &&
|
|
71
|
+
error.name === 'AbortError') {
|
|
72
|
+
return JsonRpcErrorCode.Timeout;
|
|
73
|
+
}
|
|
74
|
+
return JsonRpcErrorCode.InternalError;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Handles an error with consistent logging, OpenTelemetry integration, and optional transformation.
|
|
78
|
+
*
|
|
79
|
+
* Steps performed:
|
|
80
|
+
* 1. Records the exception on the active OTel span and sets span status to ERROR.
|
|
81
|
+
* 2. Sanitizes `options.input` via `sanitizeInputForLogging` before including in logs.
|
|
82
|
+
* 3. Extracts and consolidates error data, original stack, and the full cause chain.
|
|
83
|
+
* 4. Wraps non-`McpError` errors in a new `McpError` (or delegates to `options.errorMapper`).
|
|
84
|
+
* 5. Logs the result at `error` level via the global logger with full structured context.
|
|
85
|
+
* 6. Returns the processed error, or rethrows it if `options.rethrow` is `true`.
|
|
86
|
+
*
|
|
87
|
+
* @param error - The error instance or value that occurred.
|
|
88
|
+
* @param options - Configuration controlling transformation, logging, and rethrow behavior.
|
|
89
|
+
* @returns The processed `Error` instance (a `McpError` unless `errorMapper` returns something else).
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* // Log and return without rethrowing
|
|
94
|
+
* const handled = ErrorHandler.handleError(err, { operation: 'fetchUser', context: { requestId } });
|
|
95
|
+
*
|
|
96
|
+
* // Log and rethrow
|
|
97
|
+
* ErrorHandler.handleError(err, { operation: 'fetchUser', rethrow: true });
|
|
98
|
+
*
|
|
99
|
+
* // Custom error transformation
|
|
100
|
+
* ErrorHandler.handleError(err, {
|
|
101
|
+
* operation: 'fetchUser',
|
|
102
|
+
* errorMapper: (e) => new MyDomainError(getErrorMessage(e)),
|
|
103
|
+
* });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
static handleError(error, options) {
|
|
107
|
+
// --- OpenTelemetry Integration ---
|
|
108
|
+
const activeSpan = trace.getActiveSpan();
|
|
109
|
+
if (activeSpan) {
|
|
110
|
+
if (error instanceof Error) {
|
|
111
|
+
activeSpan.recordException(error);
|
|
112
|
+
}
|
|
113
|
+
activeSpan.setStatus({
|
|
114
|
+
code: SpanStatusCode.ERROR,
|
|
115
|
+
message: error instanceof Error ? error.message : String(error),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// --- End OpenTelemetry Integration ---
|
|
119
|
+
const { context = {}, operation, input, rethrow = false, errorCode: explicitErrorCode, includeStack = true, critical = false, errorMapper, } = options;
|
|
120
|
+
const sanitizedInput = input !== undefined ? sanitizeInputForLogging(input) : undefined;
|
|
121
|
+
const originalErrorName = getErrorName(error);
|
|
122
|
+
const originalErrorMessage = getErrorMessage(error);
|
|
123
|
+
const originalStack = error instanceof Error ? error.stack : undefined;
|
|
124
|
+
let finalError;
|
|
125
|
+
let loggedErrorCode;
|
|
126
|
+
const errorDataSeed = error instanceof McpError && typeof error.data === 'object' && error.data !== null
|
|
127
|
+
? { ...error.data }
|
|
128
|
+
: {};
|
|
129
|
+
const consolidatedData = {
|
|
130
|
+
...errorDataSeed,
|
|
131
|
+
...context,
|
|
132
|
+
originalErrorName,
|
|
133
|
+
originalMessage: originalErrorMessage,
|
|
134
|
+
};
|
|
135
|
+
if (originalStack && !(error instanceof McpError && error.data?.originalStack)) {
|
|
136
|
+
consolidatedData.originalStack = originalStack;
|
|
137
|
+
}
|
|
138
|
+
const cause = error instanceof Error ? error : undefined;
|
|
139
|
+
// Extract cause chain only when the error actually has a cause
|
|
140
|
+
if (error instanceof Error && error.cause) {
|
|
141
|
+
const causeChain = extractErrorCauseChain(error);
|
|
142
|
+
if (causeChain.length > 0) {
|
|
143
|
+
const rootCause = causeChain[causeChain.length - 1];
|
|
144
|
+
if (rootCause) {
|
|
145
|
+
consolidatedData.rootCause = {
|
|
146
|
+
name: rootCause.name,
|
|
147
|
+
message: rootCause.message,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
consolidatedData.causeChain = causeChain;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (error instanceof McpError) {
|
|
154
|
+
loggedErrorCode = error.code;
|
|
155
|
+
finalError = errorMapper
|
|
156
|
+
? errorMapper(error)
|
|
157
|
+
: new McpError(error.code, error.message, consolidatedData, {
|
|
158
|
+
cause,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
loggedErrorCode = explicitErrorCode || ErrorHandler.determineErrorCode(error);
|
|
163
|
+
const message = `Error in ${operation}: ${originalErrorMessage}`;
|
|
164
|
+
finalError = errorMapper
|
|
165
|
+
? errorMapper(error)
|
|
166
|
+
: new McpError(loggedErrorCode, message, consolidatedData, {
|
|
167
|
+
cause,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (finalError !== error &&
|
|
171
|
+
error instanceof Error &&
|
|
172
|
+
finalError instanceof Error &&
|
|
173
|
+
!finalError.stack &&
|
|
174
|
+
error.stack) {
|
|
175
|
+
finalError.stack = error.stack;
|
|
176
|
+
}
|
|
177
|
+
const logRequestId = typeof context.requestId === 'string' && context.requestId
|
|
178
|
+
? context.requestId
|
|
179
|
+
: generateUUID();
|
|
180
|
+
const logTimestamp = typeof context.timestamp === 'string' && context.timestamp
|
|
181
|
+
? context.timestamp
|
|
182
|
+
: new Date().toISOString();
|
|
183
|
+
const stack = finalError instanceof Error ? finalError.stack : originalStack;
|
|
184
|
+
const logContext = {
|
|
185
|
+
requestId: logRequestId,
|
|
186
|
+
timestamp: logTimestamp,
|
|
187
|
+
operation,
|
|
188
|
+
input: sanitizedInput,
|
|
189
|
+
critical,
|
|
190
|
+
errorCode: loggedErrorCode,
|
|
191
|
+
originalErrorType: originalErrorName,
|
|
192
|
+
finalErrorType: getErrorName(finalError),
|
|
193
|
+
...Object.fromEntries(Object.entries(context).filter(([key]) => key !== 'requestId' && key !== 'timestamp')),
|
|
194
|
+
errorData: finalError instanceof McpError && finalError.data ? finalError.data : consolidatedData,
|
|
195
|
+
...(includeStack && stack ? { stack } : {}),
|
|
196
|
+
};
|
|
197
|
+
logger.error(`Error in ${operation}: ${finalError.message || originalErrorMessage}`, logContext);
|
|
198
|
+
if (rethrow) {
|
|
199
|
+
throw finalError;
|
|
200
|
+
}
|
|
201
|
+
return finalError;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Maps an error to a specific error type `T` by testing it against an ordered list of `ErrorMapping` rules.
|
|
205
|
+
*
|
|
206
|
+
* Each mapping's `pattern` is tested (case-insensitively) against both the error message and error name.
|
|
207
|
+
* The first matching rule's `factory` is called with the original error and the mapping's `additionalContext`.
|
|
208
|
+
* If no rule matches and `defaultFactory` is provided, it is called instead.
|
|
209
|
+
* If neither matches, returns the original `Error` or wraps non-Error values in a plain `Error`.
|
|
210
|
+
*
|
|
211
|
+
* @template T The target error type, extending `Error`.
|
|
212
|
+
* @param error - The error instance or value to map.
|
|
213
|
+
* @param mappings - An ordered array of mapping rules; first match wins.
|
|
214
|
+
* @param defaultFactory - Optional factory invoked when no mapping rule matches.
|
|
215
|
+
* @returns The mapped error of type `T`, or the original/wrapped error if no rule matched.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```ts
|
|
219
|
+
* const mapped = ErrorHandler.mapError(err, [
|
|
220
|
+
* {
|
|
221
|
+
* pattern: /not found/i,
|
|
222
|
+
* errorCode: JsonRpcErrorCode.NotFound,
|
|
223
|
+
* factory: (e) => new McpError(JsonRpcErrorCode.NotFound, getErrorMessage(e)),
|
|
224
|
+
* },
|
|
225
|
+
* ]);
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
static mapError(error, mappings, defaultFactory) {
|
|
229
|
+
const errorMessage = getErrorMessage(error);
|
|
230
|
+
const errorName = getErrorName(error);
|
|
231
|
+
for (const mapping of mappings) {
|
|
232
|
+
const regex = getCompiledPattern(mapping.pattern);
|
|
233
|
+
if (regex.test(errorMessage) || regex.test(errorName)) {
|
|
234
|
+
// c8 ignore next
|
|
235
|
+
return mapping.factory(error, mapping.additionalContext);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (defaultFactory) {
|
|
239
|
+
return defaultFactory(error);
|
|
240
|
+
}
|
|
241
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Formats an error into a consistent `{ code, message, data }` structure for API responses or structured logging.
|
|
245
|
+
*
|
|
246
|
+
* - `McpError` → `{ code: error.code, message: error.message, data: error.data ?? {} }`
|
|
247
|
+
* - `Error` → `{ code: determineErrorCode(error), message: error.message, data: { errorType: error.name } }`
|
|
248
|
+
* - Other values → `{ code: JsonRpcErrorCode.UnknownError, message: getErrorMessage(value), data: { errorType: getErrorName(value) } }`
|
|
249
|
+
*
|
|
250
|
+
* @param error - The error instance or value to format.
|
|
251
|
+
* @returns A plain object with `code` (numeric `JsonRpcErrorCode`), `message` (string), and `data` (object).
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```ts
|
|
255
|
+
* const formatted = ErrorHandler.formatError(new McpError(JsonRpcErrorCode.NotFound, 'Item missing'));
|
|
256
|
+
* // → { code: -32001, message: 'Item missing', data: {} }
|
|
257
|
+
*
|
|
258
|
+
* const formatted2 = ErrorHandler.formatError(new TypeError('bad arg'));
|
|
259
|
+
* // → { code: -32007, message: 'bad arg', data: { errorType: 'TypeError' } }
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
static formatError(error) {
|
|
263
|
+
if (error instanceof McpError) {
|
|
264
|
+
return {
|
|
265
|
+
code: error.code,
|
|
266
|
+
message: error.message,
|
|
267
|
+
data: typeof error.data === 'object' && error.data !== null ? error.data : {},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
if (error instanceof Error) {
|
|
271
|
+
return {
|
|
272
|
+
code: ErrorHandler.determineErrorCode(error),
|
|
273
|
+
message: error.message,
|
|
274
|
+
data: { errorType: error.name || 'Error' },
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
code: JsonRpcErrorCode.UnknownError,
|
|
279
|
+
message: getErrorMessage(error),
|
|
280
|
+
data: { errorType: getErrorName(error) },
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Safely executes a synchronous or asynchronous function, logging and rethrowing any error.
|
|
285
|
+
*
|
|
286
|
+
* Equivalent to wrapping `fn` in a try/catch that calls `ErrorHandler.handleError` with `rethrow: true`.
|
|
287
|
+
* The processed `McpError` (or custom-mapped error) is always thrown — this method never swallows errors.
|
|
288
|
+
* Use this in service code where you want structured logging and OTel integration without duplicating
|
|
289
|
+
* error-handling boilerplate.
|
|
290
|
+
*
|
|
291
|
+
* @template T The expected return type of `fn`.
|
|
292
|
+
* @param fn - The function to execute. May be synchronous or return a `Promise`.
|
|
293
|
+
* @param options - Error handling options passed to `handleError` (`rethrow` is always `true` and cannot be overridden).
|
|
294
|
+
* @returns A promise that resolves with the return value of `fn` on success.
|
|
295
|
+
* @throws {McpError | Error} The processed error from `ErrorHandler.handleError` on failure.
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* ```ts
|
|
299
|
+
* const user = await ErrorHandler.tryCatch(
|
|
300
|
+
* () => db.findUser(id),
|
|
301
|
+
* { operation: 'findUser', context: { requestId, userId: id } },
|
|
302
|
+
* );
|
|
303
|
+
* ```
|
|
304
|
+
*/
|
|
305
|
+
static async tryCatch(fn, options) {
|
|
306
|
+
try {
|
|
307
|
+
return await Promise.resolve(fn());
|
|
308
|
+
}
|
|
309
|
+
catch (caughtError) {
|
|
310
|
+
const handled = ErrorHandler.handleError(caughtError, {
|
|
311
|
+
...options,
|
|
312
|
+
rethrow: false,
|
|
313
|
+
});
|
|
314
|
+
throw handled;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=errorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../src/utils/internal/error-handler/errorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Helper utilities for error inspection and normalization.
|
|
3
|
+
* Enhanced with cause chain extraction and circular reference detection.
|
|
4
|
+
* @module src/utils/internal/error-handler/helpers
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Retrieves a descriptive name for an error object or value.
|
|
8
|
+
*
|
|
9
|
+
* - `Error` instances → `error.name` (e.g. `'TypeError'`), falling back to `'Error'`.
|
|
10
|
+
* - `null` → `'NullValueEncountered'`
|
|
11
|
+
* - `undefined` → `'UndefinedValueEncountered'`
|
|
12
|
+
* - Non-plain objects with a named constructor → `'<ConstructorName>Encountered'`
|
|
13
|
+
* - Everything else → `'<typeof value>Encountered'` (e.g. `'stringEncountered'`)
|
|
14
|
+
*
|
|
15
|
+
* @param error - The error object or value.
|
|
16
|
+
* @returns A stable, human-readable string identifying the error's type.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* getErrorName(new TypeError('bad')); // → 'TypeError'
|
|
21
|
+
* getErrorName('oops'); // → 'stringEncountered'
|
|
22
|
+
* getErrorName(null); // → 'NullValueEncountered'
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function getErrorName(error: unknown): string;
|
|
26
|
+
/**
|
|
27
|
+
* Extracts a human-readable message string from any thrown value.
|
|
28
|
+
*
|
|
29
|
+
* Handles every JavaScript type so that `catch (e)` blocks never produce `[object Object]`:
|
|
30
|
+
* - `AggregateError` → combines up to 3 inner error messages after the outer message.
|
|
31
|
+
* - `Error` → `error.message`
|
|
32
|
+
* - `null` / `undefined` → descriptive literal strings.
|
|
33
|
+
* - Primitives (`string`, `number`, `boolean`, `bigint`, `symbol`) → string-coerced value.
|
|
34
|
+
* - Functions → `[function <name>]`
|
|
35
|
+
* - Objects → JSON-serialized if possible; otherwise constructor name fallback.
|
|
36
|
+
* - If conversion itself throws, returns a safe fallback describing the conversion error.
|
|
37
|
+
*
|
|
38
|
+
* @param error - The thrown value to extract a message from.
|
|
39
|
+
* @returns A non-empty string describing the error.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* getErrorMessage(new Error('oops')); // → 'oops'
|
|
44
|
+
* getErrorMessage('string thrown'); // → 'string thrown'
|
|
45
|
+
* getErrorMessage(42); // → '42'
|
|
46
|
+
* getErrorMessage(null); // → 'Null value encountered as error'
|
|
47
|
+
* getErrorMessage(new AggregateError([new Error('a'), new Error('b')], 'multi'));
|
|
48
|
+
* // → 'multi: a; b'
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
52
|
+
/**
|
|
53
|
+
* Represents a single node in an error cause chain produced by `extractErrorCauseChain`.
|
|
54
|
+
* Each node captures the identity, message, and optional metadata of one error in the chain,
|
|
55
|
+
* with `depth: 0` being the original (outermost) error and increasing depth tracking nested causes.
|
|
56
|
+
*/
|
|
57
|
+
export interface ErrorCauseNode {
|
|
58
|
+
/** Additional data from McpError instances */
|
|
59
|
+
data?: Record<string, unknown>;
|
|
60
|
+
/** Depth in the cause chain (0 = original error) */
|
|
61
|
+
depth: number;
|
|
62
|
+
/** Error message */
|
|
63
|
+
message: string;
|
|
64
|
+
/** Error name/type */
|
|
65
|
+
name: string;
|
|
66
|
+
/** Stack trace if available */
|
|
67
|
+
stack?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extracts the complete error cause chain into a flat array of `ErrorCauseNode` objects.
|
|
71
|
+
*
|
|
72
|
+
* Starts at `error` (depth 0) and follows `error.cause` links until:
|
|
73
|
+
* - a non-Error value is encountered (appended as the terminal node, then stops),
|
|
74
|
+
* - a circular reference is detected (sentinel node appended, then stops),
|
|
75
|
+
* - or `maxDepth` is reached (sentinel node appended, then stops).
|
|
76
|
+
*
|
|
77
|
+
* String causes are treated as terminal `StringError` nodes.
|
|
78
|
+
* `McpError` nodes include the `data` property when present.
|
|
79
|
+
* Circular references are detected via `WeakSet` identity tracking.
|
|
80
|
+
*
|
|
81
|
+
* @param error - The outermost error to start traversal from.
|
|
82
|
+
* @param maxDepth - Maximum number of nodes to traverse before stopping. Defaults to `20`.
|
|
83
|
+
* @returns An array of `ErrorCauseNode` objects ordered from outermost (depth 0) to deepest cause.
|
|
84
|
+
* An empty array is returned if `error` itself is falsy.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const inner = new Error('db connection failed');
|
|
89
|
+
* const outer = new Error('user lookup failed', { cause: inner });
|
|
90
|
+
* const chain = extractErrorCauseChain(outer);
|
|
91
|
+
* // → [
|
|
92
|
+
* // { name: 'Error', message: 'user lookup failed', depth: 0, stack: '...' },
|
|
93
|
+
* // { name: 'Error', message: 'db connection failed', depth: 1, stack: '...' },
|
|
94
|
+
* // ]
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export declare function extractErrorCauseChain(error: unknown, maxDepth?: number): ErrorCauseNode[];
|
|
98
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/internal/error-handler/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAoBnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkDtD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAK,GAAG,cAAc,EAAE,CAkEtF"}
|