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