@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.
Files changed (485) hide show
  1. package/CLAUDE.md +583 -0
  2. package/LICENSE +201 -0
  3. package/README.md +287 -0
  4. package/biome.json +103 -0
  5. package/dist/app.d.ts +82 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +222 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/cli/init.d.ts +8 -0
  10. package/dist/cli/init.d.ts.map +1 -0
  11. package/dist/cli/init.js +161 -0
  12. package/dist/cli/init.js.map +1 -0
  13. package/dist/config/index.d.ts +349 -0
  14. package/dist/config/index.d.ts.map +1 -0
  15. package/dist/config/index.js +464 -0
  16. package/dist/config/index.js.map +1 -0
  17. package/dist/context.d.ts +119 -0
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +144 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/index.d.ts +8 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +9 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/mcp-server/prompts/prompt-registration.d.ts +33 -0
  26. package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -0
  27. package/dist/mcp-server/prompts/prompt-registration.js +91 -0
  28. package/dist/mcp-server/prompts/prompt-registration.js.map +1 -0
  29. package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts +49 -0
  30. package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts.map +1 -0
  31. package/dist/mcp-server/prompts/utils/newPromptDefinition.js +39 -0
  32. package/dist/mcp-server/prompts/utils/newPromptDefinition.js.map +1 -0
  33. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +37 -0
  34. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -0
  35. package/dist/mcp-server/prompts/utils/promptDefinition.js +2 -0
  36. package/dist/mcp-server/prompts/utils/promptDefinition.js.map +1 -0
  37. package/dist/mcp-server/resources/resource-registration.d.ts +27 -0
  38. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -0
  39. package/dist/mcp-server/resources/resource-registration.js +85 -0
  40. package/dist/mcp-server/resources/resource-registration.js.map +1 -0
  41. package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts +84 -0
  42. package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts.map +1 -0
  43. package/dist/mcp-server/resources/utils/newResourceDefinition.js +40 -0
  44. package/dist/mcp-server/resources/utils/newResourceDefinition.js.map +1 -0
  45. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts +32 -0
  46. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts.map +1 -0
  47. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js +103 -0
  48. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js.map +1 -0
  49. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +94 -0
  50. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -0
  51. package/dist/mcp-server/resources/utils/resourceDefinition.js +2 -0
  52. package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -0
  53. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +14 -0
  54. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -0
  55. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +111 -0
  56. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -0
  57. package/dist/mcp-server/roots/roots-registration.d.ts +22 -0
  58. package/dist/mcp-server/roots/roots-registration.d.ts.map +1 -0
  59. package/dist/mcp-server/roots/roots-registration.js +25 -0
  60. package/dist/mcp-server/roots/roots-registration.js.map +1 -0
  61. package/dist/mcp-server/server.d.ts +34 -0
  62. package/dist/mcp-server/server.d.ts.map +1 -0
  63. package/dist/mcp-server/server.js +62 -0
  64. package/dist/mcp-server/server.js.map +1 -0
  65. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +42 -0
  66. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +1 -0
  67. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +70 -0
  68. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +1 -0
  69. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +109 -0
  70. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +1 -0
  71. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +209 -0
  72. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +1 -0
  73. package/dist/mcp-server/tasks/core/taskManager.d.ts +103 -0
  74. package/dist/mcp-server/tasks/core/taskManager.d.ts.map +1 -0
  75. package/dist/mcp-server/tasks/core/taskManager.js +144 -0
  76. package/dist/mcp-server/tasks/core/taskManager.js.map +1 -0
  77. package/dist/mcp-server/tasks/core/taskTypes.d.ts +11 -0
  78. package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +1 -0
  79. package/dist/mcp-server/tasks/core/taskTypes.js +13 -0
  80. package/dist/mcp-server/tasks/core/taskTypes.js.map +1 -0
  81. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +108 -0
  82. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +1 -0
  83. package/dist/mcp-server/tasks/utils/taskToolDefinition.js +14 -0
  84. package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +1 -0
  85. package/dist/mcp-server/tools/tool-registration.d.ts +49 -0
  86. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -0
  87. package/dist/mcp-server/tools/tool-registration.js +269 -0
  88. package/dist/mcp-server/tools/tool-registration.js.map +1 -0
  89. package/dist/mcp-server/tools/utils/newToolDefinition.d.ts +73 -0
  90. package/dist/mcp-server/tools/utils/newToolDefinition.d.ts.map +1 -0
  91. package/dist/mcp-server/tools/utils/newToolDefinition.js +45 -0
  92. package/dist/mcp-server/tools/utils/newToolDefinition.js.map +1 -0
  93. package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts +33 -0
  94. package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts.map +1 -0
  95. package/dist/mcp-server/tools/utils/newToolHandlerFactory.js +107 -0
  96. package/dist/mcp-server/tools/utils/newToolHandlerFactory.js.map +1 -0
  97. package/dist/mcp-server/tools/utils/toolDefinition.d.ts +118 -0
  98. package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -0
  99. package/dist/mcp-server/tools/utils/toolDefinition.js +2 -0
  100. package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -0
  101. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +34 -0
  102. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -0
  103. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +68 -0
  104. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -0
  105. package/dist/mcp-server/transports/ITransport.d.ts +15 -0
  106. package/dist/mcp-server/transports/ITransport.d.ts.map +1 -0
  107. package/dist/mcp-server/transports/ITransport.js +2 -0
  108. package/dist/mcp-server/transports/ITransport.js.map +1 -0
  109. package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
  110. package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
  111. package/dist/mcp-server/transports/auth/authFactory.js +43 -0
  112. package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
  113. package/dist/mcp-server/transports/auth/authMiddleware.d.ts +24 -0
  114. package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
  115. package/dist/mcp-server/transports/auth/authMiddleware.js +69 -0
  116. package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
  117. package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
  118. package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
  119. package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
  120. package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
  121. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +19 -0
  122. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
  123. package/dist/mcp-server/transports/auth/lib/authTypes.js +2 -0
  124. package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
  125. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +18 -0
  126. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
  127. package/dist/mcp-server/transports/auth/lib/authUtils.js +64 -0
  128. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
  129. package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts +25 -0
  130. package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts.map +1 -0
  131. package/dist/mcp-server/transports/auth/lib/checkScopes.js +34 -0
  132. package/dist/mcp-server/transports/auth/lib/checkScopes.js.map +1 -0
  133. package/dist/mcp-server/transports/auth/lib/claimParser.d.ts +34 -0
  134. package/dist/mcp-server/transports/auth/lib/claimParser.d.ts.map +1 -0
  135. package/dist/mcp-server/transports/auth/lib/claimParser.js +58 -0
  136. package/dist/mcp-server/transports/auth/lib/claimParser.js.map +1 -0
  137. package/dist/mcp-server/transports/auth/lib/withAuth.d.ts +25 -0
  138. package/dist/mcp-server/transports/auth/lib/withAuth.d.ts.map +1 -0
  139. package/dist/mcp-server/transports/auth/lib/withAuth.js +30 -0
  140. package/dist/mcp-server/transports/auth/lib/withAuth.js.map +1 -0
  141. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
  142. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
  143. package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
  144. package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
  145. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +14 -0
  146. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
  147. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +86 -0
  148. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
  149. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +14 -0
  150. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
  151. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +113 -0
  152. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
  153. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
  154. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
  155. package/dist/mcp-server/transports/http/httpErrorHandler.js +112 -0
  156. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
  157. package/dist/mcp-server/transports/http/httpTransport.d.ts +47 -0
  158. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
  159. package/dist/mcp-server/transports/http/httpTransport.js +396 -0
  160. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
  161. package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
  162. package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
  163. package/dist/mcp-server/transports/http/httpTypes.js +2 -0
  164. package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
  165. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts +21 -0
  166. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -0
  167. package/dist/mcp-server/transports/http/protectedResourceMetadata.js +44 -0
  168. package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -0
  169. package/dist/mcp-server/transports/http/sessionIdUtils.d.ts +33 -0
  170. package/dist/mcp-server/transports/http/sessionIdUtils.d.ts.map +1 -0
  171. package/dist/mcp-server/transports/http/sessionIdUtils.js +54 -0
  172. package/dist/mcp-server/transports/http/sessionIdUtils.js.map +1 -0
  173. package/dist/mcp-server/transports/http/sessionStore.d.ts +87 -0
  174. package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -0
  175. package/dist/mcp-server/transports/http/sessionStore.js +209 -0
  176. package/dist/mcp-server/transports/http/sessionStore.js.map +1 -0
  177. package/dist/mcp-server/transports/manager.d.ts +22 -0
  178. package/dist/mcp-server/transports/manager.d.ts.map +1 -0
  179. package/dist/mcp-server/transports/manager.js +62 -0
  180. package/dist/mcp-server/transports/manager.js.map +1 -0
  181. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +44 -0
  182. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
  183. package/dist/mcp-server/transports/stdio/stdioTransport.js +63 -0
  184. package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
  185. package/dist/services/graph/core/GraphService.d.ts +205 -0
  186. package/dist/services/graph/core/GraphService.d.ts.map +1 -0
  187. package/dist/services/graph/core/GraphService.js +231 -0
  188. package/dist/services/graph/core/GraphService.js.map +1 -0
  189. package/dist/services/graph/core/IGraphProvider.d.ts +295 -0
  190. package/dist/services/graph/core/IGraphProvider.d.ts.map +1 -0
  191. package/dist/services/graph/core/IGraphProvider.js +8 -0
  192. package/dist/services/graph/core/IGraphProvider.js.map +1 -0
  193. package/dist/services/graph/types.d.ts +107 -0
  194. package/dist/services/graph/types.d.ts.map +1 -0
  195. package/dist/services/graph/types.js +8 -0
  196. package/dist/services/graph/types.js.map +1 -0
  197. package/dist/services/llm/core/ILlmProvider.d.ts +86 -0
  198. package/dist/services/llm/core/ILlmProvider.d.ts.map +1 -0
  199. package/dist/services/llm/core/ILlmProvider.js +2 -0
  200. package/dist/services/llm/core/ILlmProvider.js.map +1 -0
  201. package/dist/services/llm/providers/openrouter.provider.d.ts +187 -0
  202. package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -0
  203. package/dist/services/llm/providers/openrouter.provider.js +302 -0
  204. package/dist/services/llm/providers/openrouter.provider.js.map +1 -0
  205. package/dist/services/llm/types.d.ts +16 -0
  206. package/dist/services/llm/types.d.ts.map +1 -0
  207. package/dist/services/llm/types.js +9 -0
  208. package/dist/services/llm/types.js.map +1 -0
  209. package/dist/services/speech/core/ISpeechProvider.d.ts +92 -0
  210. package/dist/services/speech/core/ISpeechProvider.d.ts.map +1 -0
  211. package/dist/services/speech/core/ISpeechProvider.js +34 -0
  212. package/dist/services/speech/core/ISpeechProvider.js.map +1 -0
  213. package/dist/services/speech/core/SpeechService.d.ts +87 -0
  214. package/dist/services/speech/core/SpeechService.d.ts.map +1 -0
  215. package/dist/services/speech/core/SpeechService.js +135 -0
  216. package/dist/services/speech/core/SpeechService.js.map +1 -0
  217. package/dist/services/speech/providers/elevenlabs.provider.d.ts +77 -0
  218. package/dist/services/speech/providers/elevenlabs.provider.d.ts.map +1 -0
  219. package/dist/services/speech/providers/elevenlabs.provider.js +199 -0
  220. package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -0
  221. package/dist/services/speech/providers/whisper.provider.d.ts +94 -0
  222. package/dist/services/speech/providers/whisper.provider.d.ts.map +1 -0
  223. package/dist/services/speech/providers/whisper.provider.js +240 -0
  224. package/dist/services/speech/providers/whisper.provider.js.map +1 -0
  225. package/dist/services/speech/types.d.ts +173 -0
  226. package/dist/services/speech/types.d.ts.map +1 -0
  227. package/dist/services/speech/types.js +8 -0
  228. package/dist/services/speech/types.js.map +1 -0
  229. package/dist/storage/core/IStorageProvider.d.ts +159 -0
  230. package/dist/storage/core/IStorageProvider.d.ts.map +1 -0
  231. package/dist/storage/core/IStorageProvider.js +2 -0
  232. package/dist/storage/core/IStorageProvider.js.map +1 -0
  233. package/dist/storage/core/StorageService.d.ts +22 -0
  234. package/dist/storage/core/StorageService.d.ts.map +1 -0
  235. package/dist/storage/core/StorageService.js +151 -0
  236. package/dist/storage/core/StorageService.js.map +1 -0
  237. package/dist/storage/core/storageFactory.d.ts +66 -0
  238. package/dist/storage/core/storageFactory.d.ts.map +1 -0
  239. package/dist/storage/core/storageFactory.js +122 -0
  240. package/dist/storage/core/storageFactory.js.map +1 -0
  241. package/dist/storage/core/storageValidation.d.ts +77 -0
  242. package/dist/storage/core/storageValidation.d.ts.map +1 -0
  243. package/dist/storage/core/storageValidation.js +303 -0
  244. package/dist/storage/core/storageValidation.js.map +1 -0
  245. package/dist/storage/providers/cloudflare/d1Provider.d.ts +94 -0
  246. package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -0
  247. package/dist/storage/providers/cloudflare/d1Provider.js +347 -0
  248. package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -0
  249. package/dist/storage/providers/cloudflare/kvProvider.d.ts +21 -0
  250. package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -0
  251. package/dist/storage/providers/cloudflare/kvProvider.js +183 -0
  252. package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -0
  253. package/dist/storage/providers/cloudflare/r2Provider.d.ts +28 -0
  254. package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -0
  255. package/dist/storage/providers/cloudflare/r2Provider.js +222 -0
  256. package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -0
  257. package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +20 -0
  258. package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -0
  259. package/dist/storage/providers/fileSystem/fileSystemProvider.js +282 -0
  260. package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -0
  261. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +21 -0
  262. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -0
  263. package/dist/storage/providers/inMemory/inMemoryProvider.js +139 -0
  264. package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -0
  265. package/dist/storage/providers/supabase/supabase.types.d.ts +49 -0
  266. package/dist/storage/providers/supabase/supabase.types.d.ts.map +1 -0
  267. package/dist/storage/providers/supabase/supabase.types.js +8 -0
  268. package/dist/storage/providers/supabase/supabase.types.js.map +1 -0
  269. package/dist/storage/providers/supabase/supabaseProvider.d.ts +24 -0
  270. package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -0
  271. package/dist/storage/providers/supabase/supabaseProvider.js +209 -0
  272. package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -0
  273. package/dist/testing/index.d.ts +53 -0
  274. package/dist/testing/index.d.ts.map +1 -0
  275. package/dist/testing/index.js +132 -0
  276. package/dist/testing/index.js.map +1 -0
  277. package/dist/types-global/errors.d.ts +83 -0
  278. package/dist/types-global/errors.d.ts.map +1 -0
  279. package/dist/types-global/errors.js +113 -0
  280. package/dist/types-global/errors.js.map +1 -0
  281. package/dist/utils/formatting/diffFormatter.d.ts +227 -0
  282. package/dist/utils/formatting/diffFormatter.d.ts.map +1 -0
  283. package/dist/utils/formatting/diffFormatter.js +369 -0
  284. package/dist/utils/formatting/diffFormatter.js.map +1 -0
  285. package/dist/utils/formatting/index.d.ts +9 -0
  286. package/dist/utils/formatting/index.d.ts.map +1 -0
  287. package/dist/utils/formatting/index.js +9 -0
  288. package/dist/utils/formatting/index.js.map +1 -0
  289. package/dist/utils/formatting/markdownBuilder.d.ts +543 -0
  290. package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
  291. package/dist/utils/formatting/markdownBuilder.js +674 -0
  292. package/dist/utils/formatting/markdownBuilder.js.map +1 -0
  293. package/dist/utils/formatting/tableFormatter.d.ts +261 -0
  294. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
  295. package/dist/utils/formatting/tableFormatter.js +456 -0
  296. package/dist/utils/formatting/tableFormatter.js.map +1 -0
  297. package/dist/utils/formatting/treeFormatter.d.ts +344 -0
  298. package/dist/utils/formatting/treeFormatter.d.ts.map +1 -0
  299. package/dist/utils/formatting/treeFormatter.js +400 -0
  300. package/dist/utils/formatting/treeFormatter.js.map +1 -0
  301. package/dist/utils/internal/encoding.d.ts +42 -0
  302. package/dist/utils/internal/encoding.d.ts.map +1 -0
  303. package/dist/utils/internal/encoding.js +87 -0
  304. package/dist/utils/internal/encoding.js.map +1 -0
  305. package/dist/utils/internal/error-handler/errorHandler.d.ts +140 -0
  306. package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -0
  307. package/dist/utils/internal/error-handler/errorHandler.js +318 -0
  308. package/dist/utils/internal/error-handler/errorHandler.js.map +1 -0
  309. package/dist/utils/internal/error-handler/helpers.d.ts +98 -0
  310. package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -0
  311. package/dist/utils/internal/error-handler/helpers.js +214 -0
  312. package/dist/utils/internal/error-handler/helpers.js.map +1 -0
  313. package/dist/utils/internal/error-handler/mappings.d.ts +85 -0
  314. package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -0
  315. package/dist/utils/internal/error-handler/mappings.js +234 -0
  316. package/dist/utils/internal/error-handler/mappings.js.map +1 -0
  317. package/dist/utils/internal/error-handler/types.d.ts +160 -0
  318. package/dist/utils/internal/error-handler/types.d.ts.map +1 -0
  319. package/dist/utils/internal/error-handler/types.js +6 -0
  320. package/dist/utils/internal/error-handler/types.js.map +1 -0
  321. package/dist/utils/internal/health.d.ts +60 -0
  322. package/dist/utils/internal/health.d.ts.map +1 -0
  323. package/dist/utils/internal/health.js +46 -0
  324. package/dist/utils/internal/health.js.map +1 -0
  325. package/dist/utils/internal/logger.d.ts +300 -0
  326. package/dist/utils/internal/logger.d.ts.map +1 -0
  327. package/dist/utils/internal/logger.js +573 -0
  328. package/dist/utils/internal/logger.js.map +1 -0
  329. package/dist/utils/internal/performance.d.ts +78 -0
  330. package/dist/utils/internal/performance.d.ts.map +1 -0
  331. package/dist/utils/internal/performance.js +227 -0
  332. package/dist/utils/internal/performance.js.map +1 -0
  333. package/dist/utils/internal/requestContext.d.ts +200 -0
  334. package/dist/utils/internal/requestContext.d.ts.map +1 -0
  335. package/dist/utils/internal/requestContext.js +163 -0
  336. package/dist/utils/internal/requestContext.js.map +1 -0
  337. package/dist/utils/internal/runtime.d.ts +49 -0
  338. package/dist/utils/internal/runtime.d.ts.map +1 -0
  339. package/dist/utils/internal/runtime.js +90 -0
  340. package/dist/utils/internal/runtime.js.map +1 -0
  341. package/dist/utils/internal/startupBanner.d.ts +23 -0
  342. package/dist/utils/internal/startupBanner.d.ts.map +1 -0
  343. package/dist/utils/internal/startupBanner.js +34 -0
  344. package/dist/utils/internal/startupBanner.js.map +1 -0
  345. package/dist/utils/metrics/tokenCounter.d.ts +97 -0
  346. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
  347. package/dist/utils/metrics/tokenCounter.js +162 -0
  348. package/dist/utils/metrics/tokenCounter.js.map +1 -0
  349. package/dist/utils/network/fetchWithTimeout.d.ts +91 -0
  350. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
  351. package/dist/utils/network/fetchWithTimeout.js +305 -0
  352. package/dist/utils/network/fetchWithTimeout.js.map +1 -0
  353. package/dist/utils/pagination/pagination.d.ts +157 -0
  354. package/dist/utils/pagination/pagination.d.ts.map +1 -0
  355. package/dist/utils/pagination/pagination.js +191 -0
  356. package/dist/utils/pagination/pagination.js.map +1 -0
  357. package/dist/utils/parsing/csvParser.d.ts +84 -0
  358. package/dist/utils/parsing/csvParser.d.ts.map +1 -0
  359. package/dist/utils/parsing/csvParser.js +132 -0
  360. package/dist/utils/parsing/csvParser.js.map +1 -0
  361. package/dist/utils/parsing/dateParser.d.ts +103 -0
  362. package/dist/utils/parsing/dateParser.d.ts.map +1 -0
  363. package/dist/utils/parsing/dateParser.js +142 -0
  364. package/dist/utils/parsing/dateParser.js.map +1 -0
  365. package/dist/utils/parsing/frontmatterParser.d.ts +91 -0
  366. package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -0
  367. package/dist/utils/parsing/frontmatterParser.js +163 -0
  368. package/dist/utils/parsing/frontmatterParser.js.map +1 -0
  369. package/dist/utils/parsing/index.d.ts +15 -0
  370. package/dist/utils/parsing/index.d.ts.map +1 -0
  371. package/dist/utils/parsing/index.js +15 -0
  372. package/dist/utils/parsing/index.js.map +1 -0
  373. package/dist/utils/parsing/jsonParser.d.ts +115 -0
  374. package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
  375. package/dist/utils/parsing/jsonParser.js +177 -0
  376. package/dist/utils/parsing/jsonParser.js.map +1 -0
  377. package/dist/utils/parsing/pdfParser.d.ts +563 -0
  378. package/dist/utils/parsing/pdfParser.d.ts.map +1 -0
  379. package/dist/utils/parsing/pdfParser.js +775 -0
  380. package/dist/utils/parsing/pdfParser.js.map +1 -0
  381. package/dist/utils/parsing/thinkBlock.d.ts +31 -0
  382. package/dist/utils/parsing/thinkBlock.d.ts.map +1 -0
  383. package/dist/utils/parsing/thinkBlock.js +31 -0
  384. package/dist/utils/parsing/thinkBlock.js.map +1 -0
  385. package/dist/utils/parsing/xmlParser.d.ts +69 -0
  386. package/dist/utils/parsing/xmlParser.d.ts.map +1 -0
  387. package/dist/utils/parsing/xmlParser.js +140 -0
  388. package/dist/utils/parsing/xmlParser.js.map +1 -0
  389. package/dist/utils/parsing/yamlParser.d.ts +64 -0
  390. package/dist/utils/parsing/yamlParser.d.ts.map +1 -0
  391. package/dist/utils/parsing/yamlParser.js +129 -0
  392. package/dist/utils/parsing/yamlParser.js.map +1 -0
  393. package/dist/utils/scheduling/scheduler.d.ts +174 -0
  394. package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
  395. package/dist/utils/scheduling/scheduler.js +248 -0
  396. package/dist/utils/scheduling/scheduler.js.map +1 -0
  397. package/dist/utils/security/idGenerator.d.ts +189 -0
  398. package/dist/utils/security/idGenerator.d.ts.map +1 -0
  399. package/dist/utils/security/idGenerator.js +301 -0
  400. package/dist/utils/security/idGenerator.js.map +1 -0
  401. package/dist/utils/security/index.d.ts +8 -0
  402. package/dist/utils/security/index.d.ts.map +1 -0
  403. package/dist/utils/security/index.js +8 -0
  404. package/dist/utils/security/index.js.map +1 -0
  405. package/dist/utils/security/rateLimiter.d.ts +171 -0
  406. package/dist/utils/security/rateLimiter.d.ts.map +1 -0
  407. package/dist/utils/security/rateLimiter.js +294 -0
  408. package/dist/utils/security/rateLimiter.js.map +1 -0
  409. package/dist/utils/security/sanitization.d.ts +430 -0
  410. package/dist/utils/security/sanitization.d.ts.map +1 -0
  411. package/dist/utils/security/sanitization.js +759 -0
  412. package/dist/utils/security/sanitization.js.map +1 -0
  413. package/dist/utils/telemetry/index.d.ts +12 -0
  414. package/dist/utils/telemetry/index.d.ts.map +1 -0
  415. package/dist/utils/telemetry/index.js +12 -0
  416. package/dist/utils/telemetry/index.js.map +1 -0
  417. package/dist/utils/telemetry/instrumentation.d.ts +62 -0
  418. package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
  419. package/dist/utils/telemetry/instrumentation.js +223 -0
  420. package/dist/utils/telemetry/instrumentation.js.map +1 -0
  421. package/dist/utils/telemetry/metrics.d.ts +170 -0
  422. package/dist/utils/telemetry/metrics.d.ts.map +1 -0
  423. package/dist/utils/telemetry/metrics.js +205 -0
  424. package/dist/utils/telemetry/metrics.js.map +1 -0
  425. package/dist/utils/telemetry/semconv.d.ts +147 -0
  426. package/dist/utils/telemetry/semconv.d.ts.map +1 -0
  427. package/dist/utils/telemetry/semconv.js +159 -0
  428. package/dist/utils/telemetry/semconv.js.map +1 -0
  429. package/dist/utils/telemetry/trace.d.ts +141 -0
  430. package/dist/utils/telemetry/trace.d.ts.map +1 -0
  431. package/dist/utils/telemetry/trace.js +193 -0
  432. package/dist/utils/telemetry/trace.js.map +1 -0
  433. package/dist/utils/types/guards.d.ts +209 -0
  434. package/dist/utils/types/guards.d.ts.map +1 -0
  435. package/dist/utils/types/guards.js +229 -0
  436. package/dist/utils/types/guards.js.map +1 -0
  437. package/dist/utils/types/index.d.ts +6 -0
  438. package/dist/utils/types/index.d.ts.map +1 -0
  439. package/dist/utils/types/index.js +6 -0
  440. package/dist/utils/types/index.js.map +1 -0
  441. package/dist/worker.d.ts +59 -0
  442. package/dist/worker.d.ts.map +1 -0
  443. package/dist/worker.js +216 -0
  444. package/dist/worker.js.map +1 -0
  445. package/package.json +377 -0
  446. package/skills/README.md +38 -0
  447. package/skills/add-export/SKILL.md +49 -0
  448. package/skills/add-prompt/SKILL.md +97 -0
  449. package/skills/add-provider/SKILL.md +53 -0
  450. package/skills/add-resource/SKILL.md +107 -0
  451. package/skills/add-service/SKILL.md +113 -0
  452. package/skills/add-tool/SKILL.md +110 -0
  453. package/skills/api-auth/SKILL.md +173 -0
  454. package/skills/api-config/SKILL.md +68 -0
  455. package/skills/api-context/SKILL.md +321 -0
  456. package/skills/api-errors/SKILL.md +146 -0
  457. package/skills/api-services/SKILL.md +24 -0
  458. package/skills/api-services/references/graph.md +124 -0
  459. package/skills/api-services/references/llm.md +46 -0
  460. package/skills/api-services/references/speech.md +72 -0
  461. package/skills/api-testing/SKILL.md +263 -0
  462. package/skills/api-utils/SKILL.md +106 -0
  463. package/skills/api-utils/references/formatting.md +237 -0
  464. package/skills/api-utils/references/parsing.md +263 -0
  465. package/skills/api-utils/references/security.md +226 -0
  466. package/skills/api-workers/SKILL.md +165 -0
  467. package/skills/devcheck/SKILL.md +31 -0
  468. package/skills/maintenance/SKILL.md +52 -0
  469. package/skills/migrate-mcp-ts-template/SKILL.md +131 -0
  470. package/skills/release/SKILL.md +67 -0
  471. package/skills/setup/SKILL.md +89 -0
  472. package/skills/walkthrough-init/SKILL.md +50 -0
  473. package/templates/.env.example +17 -0
  474. package/templates/AGENTS.md +113 -0
  475. package/templates/CLAUDE.md +113 -0
  476. package/templates/_tsconfig.json +33 -0
  477. package/templates/biome.template.json +43 -0
  478. package/templates/package.json +26 -0
  479. package/templates/src/index.ts +16 -0
  480. package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +19 -0
  481. package/templates/src/mcp-server/resources/definitions/echo.resource.ts +30 -0
  482. package/templates/src/mcp-server/tools/definitions/echo.tool.ts +24 -0
  483. package/templates/vitest.config.ts +12 -0
  484. package/tsconfig.base.json +44 -0
  485. 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"}