@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,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Provides a singleton service for interacting with the application's storage layer.
|
|
3
|
+
* This service acts as a proxy to the configured storage provider, ensuring a consistent
|
|
4
|
+
* interface for all storage operations throughout the application. It receives its concrete
|
|
5
|
+
* provider via dependency injection.
|
|
6
|
+
* @module src/storage/core/StorageService
|
|
7
|
+
*/
|
|
8
|
+
import { validateKey, validateListOptions, validatePrefix, validateStorageOptions, validateTenantId, } from '../../storage/core/storageValidation.js';
|
|
9
|
+
import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
|
|
10
|
+
import { logger } from '../../utils/internal/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Validates and returns the tenant ID from the request context.
|
|
13
|
+
*
|
|
14
|
+
* This helper ensures the tenant ID is present in the context and passes
|
|
15
|
+
* validation rules defined in {@link validateTenantId}. All StorageService
|
|
16
|
+
* operations require a valid tenant ID for multi-tenancy isolation.
|
|
17
|
+
*
|
|
18
|
+
* @param context - The request context containing the tenant ID
|
|
19
|
+
* @returns The validated tenant ID (trimmed of whitespace)
|
|
20
|
+
* @throws {McpError} JsonRpcErrorCode.InternalError - If tenant ID is missing (undefined or null)
|
|
21
|
+
* @throws {McpError} JsonRpcErrorCode.InvalidParams - If tenant ID fails validation (from validateTenantId)
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
function requireTenantId(context) {
|
|
25
|
+
const tenantId = context.tenantId;
|
|
26
|
+
// Check if tenant ID is missing (undefined or null)
|
|
27
|
+
if (tenantId === undefined || tenantId === null) {
|
|
28
|
+
throw new McpError(JsonRpcErrorCode.InternalError, 'Tenant ID is required for storage operations but was not found in the request context.', {
|
|
29
|
+
operation: context.operation || 'StorageService.requireTenantId',
|
|
30
|
+
requestId: context.requestId,
|
|
31
|
+
// Include call stack hint for debugging
|
|
32
|
+
calledFrom: 'StorageService',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Delegate validation to shared utility
|
|
36
|
+
validateTenantId(tenantId, context);
|
|
37
|
+
return tenantId.trim();
|
|
38
|
+
}
|
|
39
|
+
export class StorageService {
|
|
40
|
+
provider;
|
|
41
|
+
constructor(provider) {
|
|
42
|
+
this.provider = provider;
|
|
43
|
+
// Note: Cannot use structured logging in constructor as we don't have RequestContext yet
|
|
44
|
+
// This is logged when the service is first instantiated by the DI container
|
|
45
|
+
}
|
|
46
|
+
get(key, context) {
|
|
47
|
+
const tenantId = requireTenantId(context);
|
|
48
|
+
validateKey(key, context);
|
|
49
|
+
logger.debug('[StorageService] get operation', {
|
|
50
|
+
...context,
|
|
51
|
+
operation: 'StorageService.get',
|
|
52
|
+
tenantId,
|
|
53
|
+
key,
|
|
54
|
+
});
|
|
55
|
+
return this.provider.get(tenantId, key, context);
|
|
56
|
+
}
|
|
57
|
+
set(key, value, context, options) {
|
|
58
|
+
const tenantId = requireTenantId(context);
|
|
59
|
+
validateKey(key, context);
|
|
60
|
+
validateStorageOptions(options, context);
|
|
61
|
+
logger.debug('[StorageService] set operation', {
|
|
62
|
+
...context,
|
|
63
|
+
operation: 'StorageService.set',
|
|
64
|
+
tenantId,
|
|
65
|
+
key,
|
|
66
|
+
hasTTL: options?.ttl !== undefined,
|
|
67
|
+
ttl: options?.ttl,
|
|
68
|
+
});
|
|
69
|
+
return this.provider.set(tenantId, key, value, context, options);
|
|
70
|
+
}
|
|
71
|
+
delete(key, context) {
|
|
72
|
+
const tenantId = requireTenantId(context);
|
|
73
|
+
validateKey(key, context);
|
|
74
|
+
logger.debug('[StorageService] delete operation', {
|
|
75
|
+
...context,
|
|
76
|
+
operation: 'StorageService.delete',
|
|
77
|
+
tenantId,
|
|
78
|
+
key,
|
|
79
|
+
});
|
|
80
|
+
return this.provider.delete(tenantId, key, context);
|
|
81
|
+
}
|
|
82
|
+
list(prefix, context, options) {
|
|
83
|
+
const tenantId = requireTenantId(context);
|
|
84
|
+
validatePrefix(prefix, context);
|
|
85
|
+
validateListOptions(options, context);
|
|
86
|
+
logger.debug('[StorageService] list operation', {
|
|
87
|
+
...context,
|
|
88
|
+
operation: 'StorageService.list',
|
|
89
|
+
tenantId,
|
|
90
|
+
prefix,
|
|
91
|
+
limit: options?.limit,
|
|
92
|
+
hasCursor: !!options?.cursor,
|
|
93
|
+
});
|
|
94
|
+
return this.provider.list(tenantId, prefix, context, options);
|
|
95
|
+
}
|
|
96
|
+
getMany(keys, context) {
|
|
97
|
+
const tenantId = requireTenantId(context);
|
|
98
|
+
// Validate all keys
|
|
99
|
+
for (const key of keys) {
|
|
100
|
+
validateKey(key, context);
|
|
101
|
+
}
|
|
102
|
+
logger.debug('[StorageService] getMany operation', {
|
|
103
|
+
...context,
|
|
104
|
+
operation: 'StorageService.getMany',
|
|
105
|
+
tenantId,
|
|
106
|
+
keyCount: keys.length,
|
|
107
|
+
});
|
|
108
|
+
return this.provider.getMany(tenantId, keys, context);
|
|
109
|
+
}
|
|
110
|
+
setMany(entries, context, options) {
|
|
111
|
+
const tenantId = requireTenantId(context);
|
|
112
|
+
validateStorageOptions(options, context);
|
|
113
|
+
// Validate all keys
|
|
114
|
+
for (const key of entries.keys()) {
|
|
115
|
+
validateKey(key, context);
|
|
116
|
+
}
|
|
117
|
+
logger.debug('[StorageService] setMany operation', {
|
|
118
|
+
...context,
|
|
119
|
+
operation: 'StorageService.setMany',
|
|
120
|
+
tenantId,
|
|
121
|
+
entryCount: entries.size,
|
|
122
|
+
hasTTL: options?.ttl !== undefined,
|
|
123
|
+
ttl: options?.ttl,
|
|
124
|
+
});
|
|
125
|
+
return this.provider.setMany(tenantId, entries, context, options);
|
|
126
|
+
}
|
|
127
|
+
deleteMany(keys, context) {
|
|
128
|
+
const tenantId = requireTenantId(context);
|
|
129
|
+
// Validate all keys
|
|
130
|
+
for (const key of keys) {
|
|
131
|
+
validateKey(key, context);
|
|
132
|
+
}
|
|
133
|
+
logger.debug('[StorageService] deleteMany operation', {
|
|
134
|
+
...context,
|
|
135
|
+
operation: 'StorageService.deleteMany',
|
|
136
|
+
tenantId,
|
|
137
|
+
keyCount: keys.length,
|
|
138
|
+
});
|
|
139
|
+
return this.provider.deleteMany(tenantId, keys, context);
|
|
140
|
+
}
|
|
141
|
+
clear(context) {
|
|
142
|
+
const tenantId = requireTenantId(context);
|
|
143
|
+
logger.info('[StorageService] clear operation', {
|
|
144
|
+
...context,
|
|
145
|
+
operation: 'StorageService.clear',
|
|
146
|
+
tenantId,
|
|
147
|
+
});
|
|
148
|
+
return this.provider.clear(tenantId, context);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=StorageService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageService.js","sourceRoot":"","sources":["../../../src/storage/core/StorageService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Factory function for creating a storage provider based on application configuration.
|
|
3
|
+
* This module decouples the application from concrete storage implementations, allowing the
|
|
4
|
+
* storage backend to be selected via environment variables. In a serverless environment,
|
|
5
|
+
* it defaults to `in-memory` to ensure compatibility.
|
|
6
|
+
* @module src/storage/core/storageFactory
|
|
7
|
+
*/
|
|
8
|
+
import type { D1Database, KVNamespace, R2Bucket } from '@cloudflare/workers-types';
|
|
9
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
10
|
+
import type { AppConfig } from '../../config/index.js';
|
|
11
|
+
import type { IStorageProvider } from '../../storage/core/IStorageProvider.js';
|
|
12
|
+
import type { Database } from '../../storage/providers/supabase/supabase.types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Optional dependencies for storage provider creation.
|
|
15
|
+
* Allows pre-resolved dependencies to be passed in, useful for testing
|
|
16
|
+
* and Worker environments where DI container may not be available.
|
|
17
|
+
*/
|
|
18
|
+
export interface StorageFactoryDeps {
|
|
19
|
+
/** Cloudflare D1 database binding */
|
|
20
|
+
readonly d1Database?: D1Database;
|
|
21
|
+
/** Cloudflare KV namespace binding */
|
|
22
|
+
readonly kvNamespace?: KVNamespace;
|
|
23
|
+
/** Cloudflare R2 bucket binding */
|
|
24
|
+
readonly r2Bucket?: R2Bucket;
|
|
25
|
+
/** Pre-configured Supabase client */
|
|
26
|
+
readonly supabaseClient?: SupabaseClient<Database>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates and returns a storage provider instance based on the provided configuration.
|
|
30
|
+
*
|
|
31
|
+
* This factory decouples the application from concrete storage implementations,
|
|
32
|
+
* allowing the backend to be selected via environment configuration. In serverless
|
|
33
|
+
* environments, automatically falls back to in-memory storage for non-compatible providers.
|
|
34
|
+
*
|
|
35
|
+
* Provider Selection Logic:
|
|
36
|
+
* - Serverless environment: Only `in-memory`, `cloudflare-r2`, `cloudflare-kv` allowed
|
|
37
|
+
* - Node environment: All providers available
|
|
38
|
+
* - Missing config: Throws ConfigurationError
|
|
39
|
+
*
|
|
40
|
+
* @param config - The application configuration object, typically resolved from DI container.
|
|
41
|
+
* @param deps - Optional pre-resolved dependencies for providers (useful for testing/Workers).
|
|
42
|
+
* @returns An instance of a class that implements the IStorageProvider interface.
|
|
43
|
+
*
|
|
44
|
+
* @throws {McpError} JsonRpcErrorCode.ConfigurationError - If:
|
|
45
|
+
* - filesystem provider selected but STORAGE_FILESYSTEM_PATH not set
|
|
46
|
+
* - supabase provider selected but SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY not set
|
|
47
|
+
* - cloudflare-r2 provider selected in non-serverless environment
|
|
48
|
+
* - cloudflare-kv provider selected in non-serverless environment
|
|
49
|
+
* - unknown provider type specified
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* // Standard usage — DI container resolves clients and passes via deps
|
|
54
|
+
* const provider = createStorageProvider(config, {
|
|
55
|
+
* supabaseClient: resolvedSupabaseClient,
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* // Worker usage with Cloudflare bindings
|
|
59
|
+
* const provider = createStorageProvider(config, {
|
|
60
|
+
* r2Bucket: env.R2_BUCKET,
|
|
61
|
+
* kvNamespace: env.KV_NAMESPACE,
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function createStorageProvider(config: AppConfig, deps?: StorageFactoryDeps): IStorageProvider;
|
|
66
|
+
//# sourceMappingURL=storageFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageFactory.d.ts","sourceRoot":"","sources":["../../../src/storage/core/storageFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAM3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAW/E;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,sCAAsC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;CACpD;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,kBAAuB,GAC5B,gBAAgB,CAgGlB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { D1Provider } from '../../storage/providers/cloudflare/d1Provider.js';
|
|
2
|
+
import { KvProvider } from '../../storage/providers/cloudflare/kvProvider.js';
|
|
3
|
+
import { R2Provider } from '../../storage/providers/cloudflare/r2Provider.js';
|
|
4
|
+
import { FileSystemProvider } from '../../storage/providers/fileSystem/fileSystemProvider.js';
|
|
5
|
+
import { InMemoryProvider } from '../../storage/providers/inMemory/inMemoryProvider.js';
|
|
6
|
+
import { SupabaseProvider } from '../../storage/providers/supabase/supabaseProvider.js';
|
|
7
|
+
import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
|
|
8
|
+
import { logger } from '../../utils/internal/logger.js';
|
|
9
|
+
import { requestContextService } from '../../utils/internal/requestContext.js';
|
|
10
|
+
/** Evaluated at call time (not module load) so worker.ts can set IS_SERVERLESS before first use. */
|
|
11
|
+
function isServerless() {
|
|
12
|
+
return typeof process === 'undefined' || process.env.IS_SERVERLESS === 'true';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves a Cloudflare binding from globalThis by key.
|
|
16
|
+
* Throws a ConfigurationError if the binding is not present.
|
|
17
|
+
*/
|
|
18
|
+
function getGlobalBinding(key, context) {
|
|
19
|
+
const g = globalThis;
|
|
20
|
+
if (!(key in g) || g[key] == null) {
|
|
21
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, `${key} binding not available in globalThis. Ensure wrangler.toml is configured correctly.`, context);
|
|
22
|
+
}
|
|
23
|
+
return g[key];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates and returns a storage provider instance based on the provided configuration.
|
|
27
|
+
*
|
|
28
|
+
* This factory decouples the application from concrete storage implementations,
|
|
29
|
+
* allowing the backend to be selected via environment configuration. In serverless
|
|
30
|
+
* environments, automatically falls back to in-memory storage for non-compatible providers.
|
|
31
|
+
*
|
|
32
|
+
* Provider Selection Logic:
|
|
33
|
+
* - Serverless environment: Only `in-memory`, `cloudflare-r2`, `cloudflare-kv` allowed
|
|
34
|
+
* - Node environment: All providers available
|
|
35
|
+
* - Missing config: Throws ConfigurationError
|
|
36
|
+
*
|
|
37
|
+
* @param config - The application configuration object, typically resolved from DI container.
|
|
38
|
+
* @param deps - Optional pre-resolved dependencies for providers (useful for testing/Workers).
|
|
39
|
+
* @returns An instance of a class that implements the IStorageProvider interface.
|
|
40
|
+
*
|
|
41
|
+
* @throws {McpError} JsonRpcErrorCode.ConfigurationError - If:
|
|
42
|
+
* - filesystem provider selected but STORAGE_FILESYSTEM_PATH not set
|
|
43
|
+
* - supabase provider selected but SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY not set
|
|
44
|
+
* - cloudflare-r2 provider selected in non-serverless environment
|
|
45
|
+
* - cloudflare-kv provider selected in non-serverless environment
|
|
46
|
+
* - unknown provider type specified
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* // Standard usage — DI container resolves clients and passes via deps
|
|
51
|
+
* const provider = createStorageProvider(config, {
|
|
52
|
+
* supabaseClient: resolvedSupabaseClient,
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* // Worker usage with Cloudflare bindings
|
|
56
|
+
* const provider = createStorageProvider(config, {
|
|
57
|
+
* r2Bucket: env.R2_BUCKET,
|
|
58
|
+
* kvNamespace: env.KV_NAMESPACE,
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export function createStorageProvider(config, deps = {}) {
|
|
63
|
+
const context = requestContextService.createRequestContext({
|
|
64
|
+
operation: 'createStorageProvider',
|
|
65
|
+
});
|
|
66
|
+
const providerType = config.storage.providerType;
|
|
67
|
+
if (isServerless() &&
|
|
68
|
+
!['in-memory', 'cloudflare-r2', 'cloudflare-kv', 'cloudflare-d1'].includes(providerType)) {
|
|
69
|
+
logger.warning(`Forcing 'in-memory' storage provider in serverless environment (configured: ${providerType}).`, context);
|
|
70
|
+
return new InMemoryProvider();
|
|
71
|
+
}
|
|
72
|
+
logger.info(`Creating storage provider of type: ${providerType}`, context);
|
|
73
|
+
switch (providerType) {
|
|
74
|
+
case 'in-memory':
|
|
75
|
+
return new InMemoryProvider();
|
|
76
|
+
case 'filesystem':
|
|
77
|
+
if (!config.storage.filesystemPath) {
|
|
78
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, 'STORAGE_FILESYSTEM_PATH must be set for the filesystem storage provider.', context);
|
|
79
|
+
}
|
|
80
|
+
return new FileSystemProvider(config.storage.filesystemPath);
|
|
81
|
+
case 'supabase':
|
|
82
|
+
if (!config.supabase?.url || !config.supabase?.serviceRoleKey) {
|
|
83
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, 'SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY must be set for the supabase storage provider.', context);
|
|
84
|
+
}
|
|
85
|
+
if (!deps.supabaseClient) {
|
|
86
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Supabase client must be provided via deps for the supabase storage provider.', context);
|
|
87
|
+
}
|
|
88
|
+
return new SupabaseProvider(deps.supabaseClient);
|
|
89
|
+
case 'cloudflare-r2':
|
|
90
|
+
if (isServerless()) {
|
|
91
|
+
if (deps.r2Bucket) {
|
|
92
|
+
return new R2Provider(deps.r2Bucket);
|
|
93
|
+
}
|
|
94
|
+
const r2Binding = getGlobalBinding('R2_BUCKET', context);
|
|
95
|
+
return new R2Provider(r2Binding);
|
|
96
|
+
}
|
|
97
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Cloudflare R2 storage is only available in a Cloudflare Worker environment.', context);
|
|
98
|
+
case 'cloudflare-kv':
|
|
99
|
+
if (isServerless()) {
|
|
100
|
+
if (deps.kvNamespace) {
|
|
101
|
+
return new KvProvider(deps.kvNamespace);
|
|
102
|
+
}
|
|
103
|
+
const kvBinding = getGlobalBinding('KV_NAMESPACE', context);
|
|
104
|
+
return new KvProvider(kvBinding);
|
|
105
|
+
}
|
|
106
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Cloudflare KV storage is only available in a Cloudflare Worker environment.', context);
|
|
107
|
+
case 'cloudflare-d1':
|
|
108
|
+
if (isServerless()) {
|
|
109
|
+
if (deps.d1Database) {
|
|
110
|
+
return new D1Provider(deps.d1Database);
|
|
111
|
+
}
|
|
112
|
+
const d1Binding = getGlobalBinding('DB', context);
|
|
113
|
+
return new D1Provider(d1Binding);
|
|
114
|
+
}
|
|
115
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Cloudflare D1 storage is only available in a Cloudflare Worker environment.', context);
|
|
116
|
+
default: {
|
|
117
|
+
const exhaustiveCheck = providerType;
|
|
118
|
+
throw new McpError(JsonRpcErrorCode.ConfigurationError, `Unhandled storage provider type: ${String(exhaustiveCheck)}`, context);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=storageFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageFactory.js","sourceRoot":"","sources":["../../../src/storage/core/storageFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { RequestContext } from '../../utils/internal/requestContext.js';
|
|
2
|
+
import type { ListOptions, StorageOptions } from './IStorageProvider.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validates a tenant ID for storage operations.
|
|
5
|
+
*
|
|
6
|
+
* Security constraints:
|
|
7
|
+
* - Must be non-empty string
|
|
8
|
+
* - Maximum length: 128 characters
|
|
9
|
+
* - Allowed characters: alphanumeric, hyphens, underscores, dots
|
|
10
|
+
* - Cannot contain slashes or path traversal sequences
|
|
11
|
+
* - Cannot start or end with special characters
|
|
12
|
+
*
|
|
13
|
+
* @param tenantId The tenant ID to validate.
|
|
14
|
+
* @param context The request context for error reporting.
|
|
15
|
+
* @throws {McpError} JsonRpcErrorCode.InvalidParams - If tenant ID is not a string, empty, too long, contains invalid characters, or has path traversal sequences.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateTenantId(tenantId: string, context: RequestContext): void;
|
|
18
|
+
/**
|
|
19
|
+
* Validates a storage key.
|
|
20
|
+
* @param key The key to validate.
|
|
21
|
+
* @param context The request context for error reporting.
|
|
22
|
+
* @throws {McpError} JsonRpcErrorCode.ValidationError - If key is not a non-empty string, too long, contains invalid characters, or has path traversal sequences.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateKey(key: string, context: RequestContext): void;
|
|
25
|
+
/**
|
|
26
|
+
* Validates a prefix for list operations.
|
|
27
|
+
*
|
|
28
|
+
* Security constraints:
|
|
29
|
+
* - Can be empty string (matches all keys within tenant)
|
|
30
|
+
* - Maximum length: 512 characters
|
|
31
|
+
* - No path traversal sequences allowed
|
|
32
|
+
* - Only valid path characters allowed
|
|
33
|
+
*
|
|
34
|
+
* @param prefix The prefix to validate (empty string is valid).
|
|
35
|
+
* @param context The request context for error reporting.
|
|
36
|
+
* @throws {McpError} JsonRpcErrorCode.ValidationError - If prefix is not a string, too long, contains invalid characters, or has path traversal sequences.
|
|
37
|
+
*/
|
|
38
|
+
export declare function validatePrefix(prefix: string, context: RequestContext): void;
|
|
39
|
+
/**
|
|
40
|
+
* Validates storage options.
|
|
41
|
+
* @param options The storage options to validate.
|
|
42
|
+
* @param context The request context for error reporting.
|
|
43
|
+
* @throws {McpError} JsonRpcErrorCode.ValidationError - If TTL is not a number, negative, or not finite.
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateStorageOptions(options: StorageOptions | undefined, context: RequestContext): void;
|
|
46
|
+
/**
|
|
47
|
+
* Validates list operation options.
|
|
48
|
+
*
|
|
49
|
+
* Security constraints:
|
|
50
|
+
* - Limit must be positive integer between 1 and 10000
|
|
51
|
+
* - Cursor must be valid base64 string if provided
|
|
52
|
+
* - Prevents memory exhaustion via oversized page requests
|
|
53
|
+
*
|
|
54
|
+
* @param options The list options to validate.
|
|
55
|
+
* @param context The request context for error reporting.
|
|
56
|
+
* @throws {McpError} If the options are invalid.
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateListOptions(options: ListOptions | undefined, context: RequestContext): void;
|
|
59
|
+
/**
|
|
60
|
+
* Encodes pagination cursor data into an opaque string.
|
|
61
|
+
* Uses runtime-agnostic base64 encoding for Worker compatibility.
|
|
62
|
+
* @param lastKey The last key from the current page.
|
|
63
|
+
* @param tenantId The tenant ID for validation.
|
|
64
|
+
* @returns An opaque cursor string.
|
|
65
|
+
*/
|
|
66
|
+
export declare function encodeCursor(lastKey: string, tenantId: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Decodes and validates an opaque cursor string.
|
|
69
|
+
* Uses runtime-agnostic base64 decoding for Worker compatibility.
|
|
70
|
+
* @param cursor The cursor string to decode.
|
|
71
|
+
* @param tenantId The expected tenant ID for validation.
|
|
72
|
+
* @param context The request context for error reporting.
|
|
73
|
+
* @returns The last key from the cursor.
|
|
74
|
+
* @throws {McpError} If the cursor is invalid or tampered with.
|
|
75
|
+
*/
|
|
76
|
+
export declare function decodeCursor(cursor: string, tenantId: string, context: RequestContext): string;
|
|
77
|
+
//# sourceMappingURL=storageValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageValidation.d.ts","sourceRoot":"","sources":["../../../src/storage/core/storageValidation.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAoCzE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAgDhF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CA+BtE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CA8C5E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,OAAO,EAAE,cAAc,GACtB,IAAI,CA4BN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,OAAO,EAAE,cAAc,GACtB,IAAI,CAuEN;AAcD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAmC9F"}
|