@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,139 @@
1
+ import { decodeCursor, encodeCursor } from '../../../storage/core/storageValidation.js';
2
+ import { logger } from '../../../utils/internal/logger.js';
3
+ const DEFAULT_LIST_LIMIT = 1000;
4
+ export class InMemoryProvider {
5
+ store = new Map();
6
+ getTenantStore(tenantId) {
7
+ let tenantStore = this.store.get(tenantId);
8
+ if (!tenantStore) {
9
+ tenantStore = new Map();
10
+ this.store.set(tenantId, tenantStore);
11
+ }
12
+ return tenantStore;
13
+ }
14
+ get(tenantId, key, context) {
15
+ logger.debug(`[InMemoryProvider] Getting key: ${key} for tenant: ${tenantId}`, context);
16
+ const tenantStore = this.getTenantStore(tenantId);
17
+ const entry = tenantStore.get(key);
18
+ if (!entry) {
19
+ return Promise.resolve(null);
20
+ }
21
+ if (entry.expiresAt && Date.now() > entry.expiresAt) {
22
+ tenantStore.delete(key);
23
+ logger.debug(`[InMemoryProvider] Key expired and removed: ${key} for tenant: ${tenantId}`, context);
24
+ return Promise.resolve(null);
25
+ }
26
+ return Promise.resolve(entry.value);
27
+ }
28
+ set(tenantId, key, value, context, options) {
29
+ logger.debug(`[InMemoryProvider] Setting key: ${key} for tenant: ${tenantId}`, context);
30
+ const tenantStore = this.getTenantStore(tenantId);
31
+ // Fix: Check for undefined instead of truthy to handle ttl=0 correctly
32
+ const expiresAt = options?.ttl !== undefined ? Date.now() + options.ttl * 1000 : undefined;
33
+ tenantStore.set(key, {
34
+ value,
35
+ ...(expiresAt !== undefined && { expiresAt }),
36
+ });
37
+ return Promise.resolve();
38
+ }
39
+ delete(tenantId, key, context) {
40
+ logger.debug(`[InMemoryProvider] Deleting key: ${key} for tenant: ${tenantId}`, context);
41
+ const tenantStore = this.getTenantStore(tenantId);
42
+ return Promise.resolve(tenantStore.delete(key));
43
+ }
44
+ list(tenantId, prefix, context, options) {
45
+ logger.debug(`[InMemoryProvider] Listing keys with prefix: ${prefix} for tenant: ${tenantId}`, {
46
+ ...context,
47
+ options,
48
+ });
49
+ const tenantStore = this.getTenantStore(tenantId);
50
+ const now = Date.now();
51
+ const allKeys = [];
52
+ // Collect all matching non-expired keys
53
+ for (const [key, entry] of tenantStore.entries()) {
54
+ if (key.startsWith(prefix)) {
55
+ if (entry.expiresAt && now > entry.expiresAt) {
56
+ tenantStore.delete(key); // Lazy cleanup
57
+ }
58
+ else {
59
+ allKeys.push(key);
60
+ }
61
+ }
62
+ }
63
+ // Sort for consistent pagination
64
+ allKeys.sort();
65
+ // Apply pagination with opaque cursors
66
+ const limit = options?.limit ?? DEFAULT_LIST_LIMIT;
67
+ let startIndex = 0;
68
+ if (options?.cursor) {
69
+ // Decode and validate cursor
70
+ const lastKey = decodeCursor(options.cursor, tenantId, context);
71
+ const cursorIndex = allKeys.indexOf(lastKey);
72
+ if (cursorIndex !== -1) {
73
+ startIndex = cursorIndex + 1;
74
+ }
75
+ else {
76
+ // Key was deleted between pages; resume from the next key after it
77
+ const insertionPoint = allKeys.findIndex((k) => k > lastKey);
78
+ startIndex = insertionPoint === -1 ? allKeys.length : insertionPoint;
79
+ }
80
+ }
81
+ const paginatedKeys = allKeys.slice(startIndex, startIndex + limit);
82
+ const nextCursor = startIndex + limit < allKeys.length && paginatedKeys.length > 0
83
+ ? encodeCursor(paginatedKeys[paginatedKeys.length - 1], tenantId)
84
+ : undefined;
85
+ return Promise.resolve({
86
+ keys: paginatedKeys,
87
+ nextCursor,
88
+ });
89
+ }
90
+ async getMany(tenantId, keys, context) {
91
+ if (keys.length === 0) {
92
+ return new Map();
93
+ }
94
+ logger.debug(`[InMemoryProvider] Getting ${keys.length} keys for tenant: ${tenantId}`, context);
95
+ // Parallel fetch for better performance
96
+ const promises = keys.map((key) => this.get(tenantId, key, context));
97
+ const values = await Promise.all(promises);
98
+ const results = new Map();
99
+ keys.forEach((key, i) => {
100
+ const value = values[i];
101
+ if (value !== null) {
102
+ results.set(key, value);
103
+ }
104
+ });
105
+ logger.debug(`[InMemoryProvider] Retrieved ${results.size}/${keys.length} keys for tenant: ${tenantId}`, context);
106
+ return results;
107
+ }
108
+ async setMany(tenantId, entries, context, options) {
109
+ if (entries.size === 0) {
110
+ return;
111
+ }
112
+ logger.debug(`[InMemoryProvider] Setting ${entries.size} keys for tenant: ${tenantId}`, context);
113
+ // Parallel set for better performance
114
+ const promises = Array.from(entries.entries()).map(([key, value]) => this.set(tenantId, key, value, context, options));
115
+ await Promise.all(promises);
116
+ logger.debug(`[InMemoryProvider] Successfully set ${entries.size} keys for tenant: ${tenantId}`, context);
117
+ }
118
+ async deleteMany(tenantId, keys, context) {
119
+ if (keys.length === 0) {
120
+ return 0;
121
+ }
122
+ logger.debug(`[InMemoryProvider] Deleting ${keys.length} keys for tenant: ${tenantId}`, context);
123
+ // Parallel delete for better performance
124
+ const promises = keys.map((key) => this.delete(tenantId, key, context));
125
+ const results = await Promise.all(promises);
126
+ const deletedCount = results.filter((deleted) => deleted).length;
127
+ logger.debug(`[InMemoryProvider] Deleted ${deletedCount}/${keys.length} keys for tenant: ${tenantId}`, context);
128
+ return deletedCount;
129
+ }
130
+ clear(tenantId, context) {
131
+ logger.debug(`[InMemoryProvider] Clearing all keys for tenant: ${tenantId}`, context);
132
+ const tenantStore = this.getTenantStore(tenantId);
133
+ const count = tenantStore.size;
134
+ tenantStore.clear();
135
+ logger.info(`[InMemoryProvider] Cleared ${count} keys for tenant: ${tenantId}`, context);
136
+ return Promise.resolve(count);
137
+ }
138
+ }
139
+ //# sourceMappingURL=inMemoryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemoryProvider.js","sourceRoot":"","sources":["../../../../src/storage/providers/inMemory/inMemoryProvider.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAOhC,MAAM,OAAO,gBAAgB;IACV,KAAK,GAAG,IAAI,GAAG,EAA2C,CAAC;IAEpE,cAAc,CAAC,QAAgB;QACrC,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,GAAG,CAAI,QAAgB,EAAE,GAAW,EAAE,OAAuB;QAC3D,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,gBAAgB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACxF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACpD,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CACV,+CAA+C,GAAG,gBAAgB,QAAQ,EAAE,EAC5E,OAAO,CACR,CAAC;YACF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAU,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CACD,QAAgB,EAChB,GAAW,EACX,KAAc,EACd,OAAuB,EACvB,OAAwB;QAExB,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,gBAAgB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACxF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,uEAAuE;QACvE,MAAM,SAAS,GAAG,OAAO,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB,KAAK;YACL,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,QAAgB,EAAE,GAAW,EAAE,OAAuB;QAC3D,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,gBAAgB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CACF,QAAgB,EAChB,MAAc,EACd,OAAuB,EACvB,OAAqB;QAErB,MAAM,CAAC,KAAK,CAAC,gDAAgD,MAAM,gBAAgB,QAAQ,EAAE,EAAE;YAC7F,GAAG,OAAO;YACV,OAAO;SACR,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,wCAAwC;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC7C,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;gBAC1C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,uCAAuC;QACvC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,kBAAkB,CAAC;QACnD,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,6BAA6B;YAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,mEAAmE;gBACnE,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC7D,UAAU,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;YACvE,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QACpE,MAAM,UAAU,GACd,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAC7D,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAW,EAAE,QAAQ,CAAC;YAC3E,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,aAAa;YACnB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,IAAc,EACd,OAAuB;QAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,GAAG,EAAa,CAAC;QAC9B,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,qBAAqB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhG,wCAAwC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAI,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAU,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CACV,gCAAgC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,qBAAqB,QAAQ,EAAE,EAC1F,OAAO,CACR,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,OAA6B,EAC7B,OAAuB,EACvB,OAAwB;QAExB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,CACV,8BAA8B,OAAO,CAAC,IAAI,qBAAqB,QAAQ,EAAE,EACzE,OAAO,CACR,CAAC;QAEF,sCAAsC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAClE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CACjD,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,MAAM,CAAC,KAAK,CACV,uCAAuC,OAAO,CAAC,IAAI,qBAAqB,QAAQ,EAAE,EAClF,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,IAAc,EAAE,OAAuB;QACxE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,CAAC,KAAK,CACV,+BAA+B,IAAI,CAAC,MAAM,qBAAqB,QAAQ,EAAE,EACzE,OAAO,CACR,CAAC;QAEF,yCAAyC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEjE,MAAM,CAAC,KAAK,CACV,8BAA8B,YAAY,IAAI,IAAI,CAAC,MAAM,qBAAqB,QAAQ,EAAE,EACxF,OAAO,CACR,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAgB,EAAE,OAAuB;QAC7C,MAAM,CAAC,KAAK,CAAC,oDAAoD,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACtF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;QAC/B,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,8BAA8B,KAAK,qBAAqB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACzF,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview This file defines the TypeScript types for the Supabase database schema.
3
+ * It is used to provide strong typing for the Supabase client.
4
+ * This could be auto-generated from the database schema in the future.
5
+ * @module src/storage/providers/supabase/supabase.types
6
+ */
7
+ export type Json = string | number | boolean | null | {
8
+ [key: string]: Json | undefined;
9
+ } | Json[];
10
+ export type Database = {
11
+ public: {
12
+ Tables: {
13
+ kv_store: {
14
+ Row: {
15
+ key: string;
16
+ value: Json | null;
17
+ expires_at: string | null;
18
+ tenant_id: string;
19
+ };
20
+ Insert: {
21
+ key: string;
22
+ value: Json | null;
23
+ expires_at?: string | null;
24
+ tenant_id: string;
25
+ };
26
+ Update: {
27
+ key?: string;
28
+ value?: Json | null;
29
+ expires_at?: string | null;
30
+ tenant_id?: string;
31
+ };
32
+ Relationships: [];
33
+ };
34
+ };
35
+ Views: {
36
+ [_ in never]: never;
37
+ };
38
+ Functions: {
39
+ [_ in never]: never;
40
+ };
41
+ Enums: {
42
+ [_ in never]: never;
43
+ };
44
+ CompositeTypes: {
45
+ [_ in never]: never;
46
+ };
47
+ };
48
+ };
49
+ //# sourceMappingURL=supabase.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.types.d.ts","sourceRoot":"","sources":["../../../../src/storage/providers/supabase/supabase.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAAG,IAAI,EAAE,CAAC;AAEnG,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE;QACN,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,GAAG,EAAE,MAAM,CAAC;oBACZ,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;oBACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;oBAC1B,SAAS,EAAE,MAAM,CAAC;iBACnB,CAAC;gBACF,MAAM,EAAE;oBACN,GAAG,EAAE,MAAM,CAAC;oBACZ,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;oBACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;oBAC3B,SAAS,EAAE,MAAM,CAAC;iBACnB,CAAC;gBACF,MAAM,EAAE;oBACN,GAAG,CAAC,EAAE,MAAM,CAAC;oBACb,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;oBACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;oBAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;iBACpB,CAAC;gBACF,aAAa,EAAE,EAAE,CAAC;aACnB,CAAC;SACH,CAAC;QACF,KAAK,EAAE;aACJ,CAAC,IAAI,KAAK,GAAG,KAAK;SACpB,CAAC;QACF,SAAS,EAAE;aACR,CAAC,IAAI,KAAK,GAAG,KAAK;SACpB,CAAC;QACF,KAAK,EAAE;aACJ,CAAC,IAAI,KAAK,GAAG,KAAK;SACpB,CAAC;QACF,cAAc,EAAE;aACb,CAAC,IAAI,KAAK,GAAG,KAAK;SACpB,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview This file defines the TypeScript types for the Supabase database schema.
3
+ * It is used to provide strong typing for the Supabase client.
4
+ * This could be auto-generated from the database schema in the future.
5
+ * @module src/storage/providers/supabase/supabase.types
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=supabase.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.types.js","sourceRoot":"","sources":["../../../../src/storage/providers/supabase/supabase.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview A Supabase-based storage provider.
3
+ * Persists data to a specified table in a Supabase PostgreSQL database.
4
+ * Assumes a table with columns: `key` (text), `value` (jsonb), and `expires_at` (timestamptz).
5
+ * @module src/storage/providers/supabase/supabaseProvider
6
+ */
7
+ import type { SupabaseClient } from '@supabase/supabase-js';
8
+ import type { IStorageProvider, ListOptions, ListResult, StorageOptions } from '../../../storage/core/IStorageProvider.js';
9
+ import type { Database } from '../../../storage/providers/supabase/supabase.types.js';
10
+ import type { RequestContext } from '../../../utils/internal/requestContext.js';
11
+ export declare class SupabaseProvider implements IStorageProvider {
12
+ private readonly client;
13
+ constructor(client: SupabaseClient<Database>);
14
+ private getClient;
15
+ get<T>(tenantId: string, key: string, context: RequestContext): Promise<T | null>;
16
+ set(tenantId: string, key: string, value: unknown, context: RequestContext, options?: StorageOptions): Promise<void>;
17
+ delete(tenantId: string, key: string, context: RequestContext): Promise<boolean>;
18
+ list(tenantId: string, prefix: string, context: RequestContext, options?: ListOptions): Promise<ListResult>;
19
+ getMany<T>(tenantId: string, keys: string[], context: RequestContext): Promise<Map<string, T>>;
20
+ setMany(tenantId: string, entries: Map<string, unknown>, context: RequestContext, options?: StorageOptions): Promise<void>;
21
+ deleteMany(tenantId: string, keys: string[], context: RequestContext): Promise<number>;
22
+ clear(tenantId: string, context: RequestContext): Promise<number>;
23
+ }
24
+ //# sourceMappingURL=supabaseProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabaseProvider.d.ts","sourceRoot":"","sources":["../../../../src/storage/providers/supabase/supabaseProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,cAAc,EACf,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAQ,MAAM,gDAAgD,CAAC;AAGrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAUzE,qBAAa,gBAAiB,YAAW,gBAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;IAE7D,OAAO,CAAC,SAAS;IAIX,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAqCjF,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IA4BV,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBhF,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC;IA+ChB,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAmCpB,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAgCV,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAsBxE"}
@@ -0,0 +1,209 @@
1
+ import { decodeCursor, encodeCursor } from '../../../storage/core/storageValidation.js';
2
+ import { ErrorHandler } from '../../../utils/internal/error-handler/errorHandler.js';
3
+ import { logger } from '../../../utils/internal/logger.js';
4
+ const TABLE_NAME = 'kv_store';
5
+ const DEFAULT_LIST_LIMIT = 1000;
6
+ /** Escapes SQL LIKE wildcard characters (`%` and `_`) in a prefix string. */
7
+ function escapeLikePattern(prefix) {
8
+ return prefix.replace(/[%_\\]/g, '\\$&');
9
+ }
10
+ export class SupabaseProvider {
11
+ client;
12
+ constructor(client) {
13
+ this.client = client;
14
+ }
15
+ getClient() {
16
+ return this.client;
17
+ }
18
+ async get(tenantId, key, context) {
19
+ return await ErrorHandler.tryCatch(async () => {
20
+ const { data, error } = await this.getClient()
21
+ .from(TABLE_NAME)
22
+ .select('value, expires_at')
23
+ .eq('tenant_id', tenantId)
24
+ .eq('key', key)
25
+ .single();
26
+ if (error) {
27
+ if (error.code === 'PGRST116') {
28
+ // "Not found" error code from PostgREST
29
+ return null;
30
+ }
31
+ throw error;
32
+ }
33
+ if (data.expires_at && new Date(data.expires_at).getTime() < Date.now()) {
34
+ await this.delete(tenantId, key, context);
35
+ logger.debug(`[SupabaseProvider] Key expired and removed: ${key} for tenant: ${tenantId}`, context);
36
+ return null;
37
+ }
38
+ return data.value;
39
+ }, {
40
+ operation: 'SupabaseProvider.get',
41
+ context,
42
+ input: { tenantId, key },
43
+ });
44
+ }
45
+ async set(tenantId, key, value, context, options) {
46
+ return await ErrorHandler.tryCatch(async () => {
47
+ // Fix: Check for undefined instead of truthy to handle ttl=0 correctly
48
+ const expires_at = options?.ttl !== undefined
49
+ ? new Date(Date.now() + options.ttl * 1000).toISOString()
50
+ : null;
51
+ const { error } = await this.getClient()
52
+ .from(TABLE_NAME)
53
+ .upsert({
54
+ tenant_id: tenantId,
55
+ key,
56
+ value: value,
57
+ expires_at,
58
+ });
59
+ if (error)
60
+ throw error;
61
+ }, {
62
+ operation: 'SupabaseProvider.set',
63
+ context,
64
+ input: { tenantId, key },
65
+ });
66
+ }
67
+ async delete(tenantId, key, context) {
68
+ return await ErrorHandler.tryCatch(async () => {
69
+ const { error, count } = await this.getClient()
70
+ .from(TABLE_NAME)
71
+ .delete({ count: 'exact' })
72
+ .eq('tenant_id', tenantId)
73
+ .eq('key', key);
74
+ if (error)
75
+ throw error;
76
+ return (count ?? 0) > 0;
77
+ }, {
78
+ operation: 'SupabaseProvider.delete',
79
+ context,
80
+ input: { tenantId, key },
81
+ });
82
+ }
83
+ async list(tenantId, prefix, context, options) {
84
+ return await ErrorHandler.tryCatch(async () => {
85
+ const now = new Date().toISOString();
86
+ const limit = options?.limit ?? DEFAULT_LIST_LIMIT;
87
+ let query = this.getClient()
88
+ .from(TABLE_NAME)
89
+ .select('key')
90
+ .eq('tenant_id', tenantId)
91
+ .like('key', `${escapeLikePattern(prefix)}%`)
92
+ .or(`expires_at.is.null,expires_at.gt.${now}`)
93
+ .order('key', { ascending: true })
94
+ .limit(limit + 1); // Fetch one extra to determine if there are more results
95
+ // Apply cursor-based pagination with opaque cursors
96
+ if (options?.cursor) {
97
+ // Decode and validate cursor
98
+ const lastKey = decodeCursor(options.cursor, tenantId, context);
99
+ query = query.gt('key', lastKey);
100
+ }
101
+ const { data, error } = await query;
102
+ if (error)
103
+ throw error;
104
+ const keys = data?.map((item) => item.key) ?? [];
105
+ const hasMore = keys.length > limit;
106
+ const resultKeys = hasMore ? keys.slice(0, limit) : keys;
107
+ const nextCursor = hasMore && resultKeys.length > 0
108
+ ? encodeCursor(resultKeys[resultKeys.length - 1], tenantId)
109
+ : undefined;
110
+ return {
111
+ keys: resultKeys,
112
+ nextCursor,
113
+ };
114
+ }, {
115
+ operation: 'SupabaseProvider.list',
116
+ context,
117
+ input: { tenantId, prefix, options },
118
+ });
119
+ }
120
+ async getMany(tenantId, keys, context) {
121
+ return await ErrorHandler.tryCatch(async () => {
122
+ if (keys.length === 0) {
123
+ return new Map();
124
+ }
125
+ const { data, error } = await this.getClient()
126
+ .from(TABLE_NAME)
127
+ .select('key, value, expires_at')
128
+ .eq('tenant_id', tenantId)
129
+ .in('key', keys);
130
+ if (error)
131
+ throw error;
132
+ const results = new Map();
133
+ for (const row of data ?? []) {
134
+ if (!row.expires_at || new Date(row.expires_at).getTime() >= Date.now()) {
135
+ results.set(row.key, row.value);
136
+ }
137
+ else {
138
+ // Clean up expired entries
139
+ await this.delete(tenantId, row.key, context);
140
+ }
141
+ }
142
+ return results;
143
+ }, {
144
+ operation: 'SupabaseProvider.getMany',
145
+ context,
146
+ input: { tenantId, keyCount: keys.length },
147
+ });
148
+ }
149
+ async setMany(tenantId, entries, context, options) {
150
+ return await ErrorHandler.tryCatch(async () => {
151
+ if (entries.size === 0) {
152
+ return;
153
+ }
154
+ // Fix: Check for undefined instead of truthy to handle ttl=0 correctly
155
+ const expires_at = options?.ttl !== undefined
156
+ ? new Date(Date.now() + options.ttl * 1000).toISOString()
157
+ : null;
158
+ const rows = Array.from(entries.entries()).map(([key, value]) => ({
159
+ tenant_id: tenantId,
160
+ key,
161
+ value: value,
162
+ expires_at,
163
+ }));
164
+ const { error } = await this.getClient().from(TABLE_NAME).upsert(rows);
165
+ if (error)
166
+ throw error;
167
+ }, {
168
+ operation: 'SupabaseProvider.setMany',
169
+ context,
170
+ input: { tenantId, entryCount: entries.size },
171
+ });
172
+ }
173
+ async deleteMany(tenantId, keys, context) {
174
+ return await ErrorHandler.tryCatch(async () => {
175
+ if (keys.length === 0) {
176
+ return 0;
177
+ }
178
+ const { error, count } = await this.getClient()
179
+ .from(TABLE_NAME)
180
+ .delete({ count: 'exact' })
181
+ .eq('tenant_id', tenantId)
182
+ .in('key', keys);
183
+ if (error)
184
+ throw error;
185
+ return count ?? 0;
186
+ }, {
187
+ operation: 'SupabaseProvider.deleteMany',
188
+ context,
189
+ input: { tenantId, keyCount: keys.length },
190
+ });
191
+ }
192
+ async clear(tenantId, context) {
193
+ return await ErrorHandler.tryCatch(async () => {
194
+ const { error, count } = await this.getClient()
195
+ .from(TABLE_NAME)
196
+ .delete({ count: 'exact' })
197
+ .eq('tenant_id', tenantId);
198
+ if (error)
199
+ throw error;
200
+ logger.info(`[SupabaseProvider] Cleared ${count ?? 0} keys for tenant: ${tenantId}`, context);
201
+ return count ?? 0;
202
+ }, {
203
+ operation: 'SupabaseProvider.clear',
204
+ context,
205
+ input: { tenantId },
206
+ });
207
+ }
208
+ }
209
+ //# sourceMappingURL=supabaseProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabaseProvider.js","sourceRoot":"","sources":["../../../../src/storage/providers/supabase/supabaseProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @fileoverview Test utilities for MCP server development.
3
+ * Provides `createMockContext()` for testing tool and resource handlers
4
+ * against the unified Context interface.
5
+ * @module src/testing/index
6
+ */
7
+ import type { CreateMessageResult, ElicitResult, SamplingMessage } from '@modelcontextprotocol/sdk/types.js';
8
+ import type { z } from 'zod';
9
+ import type { AuthContext, Context, SamplingOpts } from '../context.js';
10
+ export interface MockContextOptions {
11
+ /** Auth context. */
12
+ auth?: AuthContext;
13
+ /** Mock elicitation handler. */
14
+ elicit?: (message: string, schema: z.ZodObject<z.ZodRawShape>) => Promise<ElicitResult>;
15
+ /** Enable task progress (creates a mock ContextProgress). */
16
+ progress?: boolean;
17
+ /** Request ID override. Defaults to 'test-request-id'. */
18
+ requestId?: string;
19
+ /** Mock sampling handler. */
20
+ sample?: (messages: SamplingMessage[], opts?: SamplingOpts) => Promise<CreateMessageResult>;
21
+ /** Custom AbortSignal. Defaults to a fresh AbortController's signal. */
22
+ signal?: AbortSignal;
23
+ /** Tenant ID. Enables ctx.state operations when provided. */
24
+ tenantId?: string;
25
+ /** Resource URI for resource handler testing. */
26
+ uri?: URL;
27
+ }
28
+ /**
29
+ * Creates a mock Context for testing tool and resource handlers.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * // Minimal — works for most tests
34
+ * const ctx = createMockContext();
35
+ *
36
+ * // With tenant (for tools that use ctx.state)
37
+ * const ctx = createMockContext({ tenantId: 'test-tenant' });
38
+ *
39
+ * // With sampling capability
40
+ * const ctx = createMockContext({
41
+ * sample: vi.fn().mockResolvedValue({
42
+ * role: 'assistant',
43
+ * content: { type: 'text', text: 'Response' },
44
+ * model: 'test',
45
+ * }),
46
+ * });
47
+ *
48
+ * // With task progress
49
+ * const ctx = createMockContext({ progress: true });
50
+ * ```
51
+ */
52
+ export declare function createMockContext(options?: MockContextOptions): Context;
53
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EAIP,YAAY,EACb,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,gCAAgC;IAChC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5F,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAwGD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAkB3E"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @fileoverview Test utilities for MCP server development.
3
+ * Provides `createMockContext()` for testing tool and resource handlers
4
+ * against the unified Context interface.
5
+ * @module src/testing/index
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Mock implementations
9
+ // ---------------------------------------------------------------------------
10
+ function createMockLogger() {
11
+ const calls = [];
12
+ const logFn = (level) => (msg, data) => {
13
+ calls.push({ level, msg, data });
14
+ };
15
+ return {
16
+ calls,
17
+ debug: logFn('debug'),
18
+ info: logFn('info'),
19
+ notice: logFn('notice'),
20
+ warning: logFn('warning'),
21
+ error: (msg, _error, data) => {
22
+ calls.push({ level: 'error', msg, data });
23
+ },
24
+ };
25
+ }
26
+ function createMockState(tenantId) {
27
+ const store = new Map();
28
+ const requireTenant = () => {
29
+ if (!tenantId) {
30
+ throw new Error('tenantId required for state operations');
31
+ }
32
+ };
33
+ return {
34
+ get(key) {
35
+ requireTenant();
36
+ return Promise.resolve(store.get(key) ?? null);
37
+ },
38
+ set(key, value) {
39
+ requireTenant();
40
+ store.set(key, value);
41
+ return Promise.resolve();
42
+ },
43
+ delete(key) {
44
+ requireTenant();
45
+ store.delete(key);
46
+ return Promise.resolve();
47
+ },
48
+ list(prefix) {
49
+ requireTenant();
50
+ const items = [];
51
+ for (const [key, value] of store) {
52
+ if (!prefix || key.startsWith(prefix)) {
53
+ items.push({ key, value });
54
+ }
55
+ }
56
+ return Promise.resolve({ items });
57
+ },
58
+ };
59
+ }
60
+ function createMockProgress() {
61
+ const state = { _total: 0, _completed: 0, _messages: [] };
62
+ return {
63
+ get _total() {
64
+ return state._total;
65
+ },
66
+ get _completed() {
67
+ return state._completed;
68
+ },
69
+ get _messages() {
70
+ return state._messages;
71
+ },
72
+ setTotal(n) {
73
+ state._total = n;
74
+ state._completed = 0;
75
+ return Promise.resolve();
76
+ },
77
+ increment(amount = 1) {
78
+ state._completed = Math.min(state._completed + amount, state._total || state._completed + amount);
79
+ return Promise.resolve();
80
+ },
81
+ update(message) {
82
+ state._messages.push(message);
83
+ return Promise.resolve();
84
+ },
85
+ };
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Factory
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Creates a mock Context for testing tool and resource handlers.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * // Minimal — works for most tests
96
+ * const ctx = createMockContext();
97
+ *
98
+ * // With tenant (for tools that use ctx.state)
99
+ * const ctx = createMockContext({ tenantId: 'test-tenant' });
100
+ *
101
+ * // With sampling capability
102
+ * const ctx = createMockContext({
103
+ * sample: vi.fn().mockResolvedValue({
104
+ * role: 'assistant',
105
+ * content: { type: 'text', text: 'Response' },
106
+ * model: 'test',
107
+ * }),
108
+ * });
109
+ *
110
+ * // With task progress
111
+ * const ctx = createMockContext({ progress: true });
112
+ * ```
113
+ */
114
+ export function createMockContext(options = {}) {
115
+ const log = createMockLogger();
116
+ const state = createMockState(options.tenantId);
117
+ const progress = options.progress ? createMockProgress() : undefined;
118
+ return {
119
+ requestId: options.requestId ?? 'test-request-id',
120
+ timestamp: new Date().toISOString(),
121
+ log,
122
+ state,
123
+ signal: options.signal ?? new AbortController().signal,
124
+ tenantId: options.tenantId,
125
+ auth: options.auth,
126
+ elicit: options.elicit,
127
+ sample: options.sample,
128
+ progress,
129
+ uri: options.uri,
130
+ };
131
+ }
132
+ //# sourceMappingURL=index.js.map