@sentry/core 10.51.0 → 10.53.0

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 (361) hide show
  1. package/browser.js +3 -0
  2. package/build/cjs/browser.js +529 -0
  3. package/build/cjs/browser.js.map +1 -0
  4. package/build/cjs/client.js +15 -2
  5. package/build/cjs/client.js.map +1 -1
  6. package/build/cjs/fetch.js +7 -4
  7. package/build/cjs/fetch.js.map +1 -1
  8. package/build/cjs/index.js +82 -62
  9. package/build/cjs/index.js.map +1 -1
  10. package/build/cjs/instrument/console.js +43 -3
  11. package/build/cjs/instrument/console.js.map +1 -1
  12. package/build/cjs/integrations/captureconsole.js +2 -2
  13. package/build/cjs/integrations/captureconsole.js.map +1 -1
  14. package/build/cjs/integrations/console.js +5 -1
  15. package/build/cjs/integrations/console.js.map +1 -1
  16. package/build/cjs/integrations/express/index.js +4 -6
  17. package/build/cjs/integrations/express/index.js.map +1 -1
  18. package/build/cjs/integrations/express/utils.js +0 -7
  19. package/build/cjs/integrations/express/utils.js.map +1 -1
  20. package/build/cjs/integrations/http/add-outgoing-request-breadcrumb.js +43 -0
  21. package/build/cjs/integrations/http/add-outgoing-request-breadcrumb.js.map +1 -0
  22. package/build/cjs/integrations/http/client-patch.js +113 -0
  23. package/build/cjs/integrations/http/client-patch.js.map +1 -0
  24. package/build/cjs/integrations/http/client-subscriptions.js +166 -0
  25. package/build/cjs/integrations/http/client-subscriptions.js.map +1 -0
  26. package/build/cjs/integrations/http/constants.js +10 -0
  27. package/build/cjs/integrations/http/constants.js.map +1 -0
  28. package/build/cjs/integrations/http/double-wrap-warning.js +29 -0
  29. package/build/cjs/integrations/http/double-wrap-warning.js.map +1 -0
  30. package/build/cjs/integrations/http/get-outgoing-span-data.js +88 -0
  31. package/build/cjs/integrations/http/get-outgoing-span-data.js.map +1 -0
  32. package/build/cjs/integrations/http/get-request-url.js +54 -0
  33. package/build/cjs/integrations/http/get-request-url.js.map +1 -0
  34. package/build/cjs/integrations/http/inject-trace-propagation-headers.js +81 -0
  35. package/build/cjs/integrations/http/inject-trace-propagation-headers.js.map +1 -0
  36. package/build/cjs/integrations/mcp-server/errorCapture.js +2 -2
  37. package/build/cjs/integrations/mcp-server/errorCapture.js.map +1 -1
  38. package/build/cjs/integrations/mcp-server/handlers.js +72 -0
  39. package/build/cjs/integrations/mcp-server/handlers.js.map +1 -1
  40. package/build/cjs/integrations/mcp-server/index.js +10 -1
  41. package/build/cjs/integrations/mcp-server/index.js.map +1 -1
  42. package/build/cjs/integrations/requestdata.js +85 -3
  43. package/build/cjs/integrations/requestdata.js.map +1 -1
  44. package/build/cjs/integrations/supabase.js +4 -4
  45. package/build/cjs/integrations/supabase.js.map +1 -1
  46. package/build/cjs/logs/envelope.js +12 -2
  47. package/build/cjs/logs/envelope.js.map +1 -1
  48. package/build/cjs/logs/internal.js +7 -1
  49. package/build/cjs/logs/internal.js.map +1 -1
  50. package/build/cjs/metrics/envelope.js +15 -2
  51. package/build/cjs/metrics/envelope.js.map +1 -1
  52. package/build/cjs/metrics/internal.js +7 -1
  53. package/build/cjs/metrics/internal.js.map +1 -1
  54. package/build/cjs/server.js +563 -0
  55. package/build/cjs/server.js.map +1 -0
  56. package/build/cjs/tracing/ai/utils.js +2 -2
  57. package/build/cjs/tracing/ai/utils.js.map +1 -1
  58. package/build/cjs/tracing/anthropic-ai/index.js +3 -3
  59. package/build/cjs/tracing/anthropic-ai/index.js.map +1 -1
  60. package/build/cjs/tracing/anthropic-ai/streaming.js +3 -3
  61. package/build/cjs/tracing/anthropic-ai/streaming.js.map +1 -1
  62. package/build/cjs/tracing/anthropic-ai/utils.js +2 -2
  63. package/build/cjs/tracing/anthropic-ai/utils.js.map +1 -1
  64. package/build/cjs/tracing/google-genai/index.js +3 -3
  65. package/build/cjs/tracing/google-genai/index.js.map +1 -1
  66. package/build/cjs/tracing/google-genai/streaming.js +2 -2
  67. package/build/cjs/tracing/google-genai/streaming.js.map +1 -1
  68. package/build/cjs/tracing/langchain/embeddings.js +2 -2
  69. package/build/cjs/tracing/langchain/embeddings.js.map +1 -1
  70. package/build/cjs/tracing/langchain/index.js +4 -4
  71. package/build/cjs/tracing/langchain/index.js.map +1 -1
  72. package/build/cjs/tracing/langgraph/index.js +3 -3
  73. package/build/cjs/tracing/langgraph/index.js.map +1 -1
  74. package/build/cjs/tracing/langgraph/utils.js +2 -2
  75. package/build/cjs/tracing/langgraph/utils.js.map +1 -1
  76. package/build/cjs/tracing/openai/index.js +3 -3
  77. package/build/cjs/tracing/openai/index.js.map +1 -1
  78. package/build/cjs/tracing/openai/streaming.js +2 -2
  79. package/build/cjs/tracing/openai/streaming.js.map +1 -1
  80. package/build/cjs/tracing/sentrySpan.js +5 -0
  81. package/build/cjs/tracing/sentrySpan.js.map +1 -1
  82. package/build/cjs/tracing/spans/captureSpan.js +58 -23
  83. package/build/cjs/tracing/spans/captureSpan.js.map +1 -1
  84. package/build/cjs/tracing/spans/extractGenAiSpans.js +60 -0
  85. package/build/cjs/tracing/spans/extractGenAiSpans.js.map +1 -0
  86. package/build/cjs/tracing/spans/spanJsonToStreamedSpan.js +26 -0
  87. package/build/cjs/tracing/spans/spanJsonToStreamedSpan.js.map +1 -0
  88. package/build/cjs/tracing/trace.js +1 -0
  89. package/build/cjs/tracing/trace.js.map +1 -1
  90. package/build/cjs/tracing/vercel-ai/constants.js +8 -0
  91. package/build/cjs/tracing/vercel-ai/constants.js.map +1 -1
  92. package/build/cjs/tracing/vercel-ai/index.js +99 -15
  93. package/build/cjs/tracing/vercel-ai/index.js.map +1 -1
  94. package/build/cjs/trpc.js +3 -3
  95. package/build/cjs/trpc.js.map +1 -1
  96. package/build/cjs/utils/baggage.js +73 -0
  97. package/build/cjs/utils/baggage.js.map +1 -1
  98. package/build/cjs/utils/chain-and-copy-promiselike.js +1 -0
  99. package/build/cjs/utils/chain-and-copy-promiselike.js.map +1 -1
  100. package/build/cjs/utils/exports.js +7 -7
  101. package/build/cjs/utils/exports.js.map +1 -1
  102. package/build/cjs/utils/flushIfServerless.js +2 -2
  103. package/build/cjs/utils/flushIfServerless.js.map +1 -1
  104. package/build/cjs/utils/get-default-export.js +32 -0
  105. package/build/cjs/utils/get-default-export.js.map +1 -0
  106. package/build/cjs/utils/request.js +129 -0
  107. package/build/cjs/utils/request.js.map +1 -1
  108. package/build/cjs/utils/spanUtils.js +1 -1
  109. package/build/cjs/utils/spanUtils.js.map +1 -1
  110. package/build/cjs/utils/string.js +9 -2
  111. package/build/cjs/utils/string.js.map +1 -1
  112. package/build/cjs/utils/traceData.js +2 -2
  113. package/build/cjs/utils/traceData.js.map +1 -1
  114. package/build/cjs/utils/version.js +1 -1
  115. package/build/esm/browser.js +142 -0
  116. package/build/esm/browser.js.map +1 -0
  117. package/build/esm/client.js +15 -2
  118. package/build/esm/client.js.map +1 -1
  119. package/build/esm/fetch.js +7 -4
  120. package/build/esm/fetch.js.map +1 -1
  121. package/build/esm/index.js +20 -15
  122. package/build/esm/index.js.map +1 -1
  123. package/build/esm/instrument/console.js +44 -5
  124. package/build/esm/instrument/console.js.map +1 -1
  125. package/build/esm/integrations/console.js +6 -2
  126. package/build/esm/integrations/console.js.map +1 -1
  127. package/build/esm/integrations/express/index.js +3 -5
  128. package/build/esm/integrations/express/index.js.map +1 -1
  129. package/build/esm/integrations/express/utils.js +1 -7
  130. package/build/esm/integrations/express/utils.js.map +1 -1
  131. package/build/esm/integrations/http/add-outgoing-request-breadcrumb.js +41 -0
  132. package/build/esm/integrations/http/add-outgoing-request-breadcrumb.js.map +1 -0
  133. package/build/esm/integrations/http/client-patch.js +111 -0
  134. package/build/esm/integrations/http/client-patch.js.map +1 -0
  135. package/build/esm/integrations/http/client-subscriptions.js +164 -0
  136. package/build/esm/integrations/http/client-subscriptions.js.map +1 -0
  137. package/build/esm/integrations/http/constants.js +6 -0
  138. package/build/esm/integrations/http/constants.js.map +1 -0
  139. package/build/esm/integrations/http/double-wrap-warning.js +26 -0
  140. package/build/esm/integrations/http/double-wrap-warning.js.map +1 -0
  141. package/build/esm/integrations/http/get-outgoing-span-data.js +85 -0
  142. package/build/esm/integrations/http/get-outgoing-span-data.js.map +1 -0
  143. package/build/esm/integrations/http/get-request-url.js +49 -0
  144. package/build/esm/integrations/http/get-request-url.js.map +1 -0
  145. package/build/esm/integrations/http/inject-trace-propagation-headers.js +79 -0
  146. package/build/esm/integrations/http/inject-trace-propagation-headers.js.map +1 -0
  147. package/build/esm/integrations/mcp-server/handlers.js +72 -1
  148. package/build/esm/integrations/mcp-server/handlers.js.map +1 -1
  149. package/build/esm/integrations/mcp-server/index.js +11 -2
  150. package/build/esm/integrations/mcp-server/index.js.map +1 -1
  151. package/build/esm/integrations/requestdata.js +85 -3
  152. package/build/esm/integrations/requestdata.js.map +1 -1
  153. package/build/esm/logs/envelope.js +12 -2
  154. package/build/esm/logs/envelope.js.map +1 -1
  155. package/build/esm/logs/internal.js +7 -1
  156. package/build/esm/logs/internal.js.map +1 -1
  157. package/build/esm/metrics/envelope.js +15 -2
  158. package/build/esm/metrics/envelope.js.map +1 -1
  159. package/build/esm/metrics/internal.js +7 -1
  160. package/build/esm/metrics/internal.js.map +1 -1
  161. package/build/esm/package.json +1 -1
  162. package/build/esm/server.js +157 -0
  163. package/build/esm/server.js.map +1 -0
  164. package/build/esm/tracing/sentrySpan.js +5 -0
  165. package/build/esm/tracing/sentrySpan.js.map +1 -1
  166. package/build/esm/tracing/spans/captureSpan.js +58 -23
  167. package/build/esm/tracing/spans/captureSpan.js.map +1 -1
  168. package/build/esm/tracing/spans/extractGenAiSpans.js +58 -0
  169. package/build/esm/tracing/spans/extractGenAiSpans.js.map +1 -0
  170. package/build/esm/tracing/spans/spanJsonToStreamedSpan.js +24 -0
  171. package/build/esm/tracing/spans/spanJsonToStreamedSpan.js.map +1 -0
  172. package/build/esm/tracing/trace.js +1 -1
  173. package/build/esm/tracing/trace.js.map +1 -1
  174. package/build/esm/tracing/vercel-ai/constants.js +8 -1
  175. package/build/esm/tracing/vercel-ai/constants.js.map +1 -1
  176. package/build/esm/tracing/vercel-ai/index.js +101 -18
  177. package/build/esm/tracing/vercel-ai/index.js.map +1 -1
  178. package/build/esm/utils/baggage.js +73 -1
  179. package/build/esm/utils/baggage.js.map +1 -1
  180. package/build/esm/utils/chain-and-copy-promiselike.js +1 -0
  181. package/build/esm/utils/chain-and-copy-promiselike.js.map +1 -1
  182. package/build/esm/utils/exports.js +7 -7
  183. package/build/esm/utils/exports.js.map +1 -1
  184. package/build/esm/utils/get-default-export.js +30 -0
  185. package/build/esm/utils/get-default-export.js.map +1 -0
  186. package/build/esm/utils/request.js +127 -1
  187. package/build/esm/utils/request.js.map +1 -1
  188. package/build/esm/utils/spanUtils.js +1 -1
  189. package/build/esm/utils/spanUtils.js.map +1 -1
  190. package/build/esm/utils/string.js +9 -2
  191. package/build/esm/utils/string.js.map +1 -1
  192. package/build/esm/utils/version.js +1 -1
  193. package/build/types/browser-exports.d.ts +11 -0
  194. package/build/types/browser-exports.d.ts.map +1 -0
  195. package/build/types/browser.d.ts +3 -0
  196. package/build/types/browser.d.ts.map +1 -0
  197. package/build/types/build-time-plugins/buildTimeOptionsBase.d.ts +8 -0
  198. package/build/types/build-time-plugins/buildTimeOptionsBase.d.ts.map +1 -1
  199. package/build/types/carrier.d.ts +1 -1
  200. package/build/types/carrier.d.ts.map +1 -1
  201. package/build/types/client.d.ts.map +1 -1
  202. package/build/types/fetch.d.ts.map +1 -1
  203. package/build/types/index.d.ts +3 -223
  204. package/build/types/index.d.ts.map +1 -1
  205. package/build/types/instrument/console.d.ts +7 -0
  206. package/build/types/instrument/console.d.ts.map +1 -1
  207. package/build/types/integrations/captureconsole.d.ts +1 -1
  208. package/build/types/integrations/captureconsole.d.ts.map +1 -1
  209. package/build/types/integrations/console.d.ts +5 -0
  210. package/build/types/integrations/console.d.ts.map +1 -1
  211. package/build/types/integrations/conversationId.d.ts +1 -1
  212. package/build/types/integrations/conversationId.d.ts.map +1 -1
  213. package/build/types/integrations/dedupe.d.ts +1 -1
  214. package/build/types/integrations/dedupe.d.ts.map +1 -1
  215. package/build/types/integrations/eventFilters.d.ts +2 -2
  216. package/build/types/integrations/eventFilters.d.ts.map +1 -1
  217. package/build/types/integrations/express/index.d.ts.map +1 -1
  218. package/build/types/integrations/express/utils.d.ts +1 -5
  219. package/build/types/integrations/express/utils.d.ts.map +1 -1
  220. package/build/types/integrations/extraerrordata.d.ts +1 -1
  221. package/build/types/integrations/extraerrordata.d.ts.map +1 -1
  222. package/build/types/integrations/functiontostring.d.ts +1 -1
  223. package/build/types/integrations/functiontostring.d.ts.map +1 -1
  224. package/build/types/integrations/http/add-outgoing-request-breadcrumb.d.ts +6 -0
  225. package/build/types/integrations/http/add-outgoing-request-breadcrumb.d.ts.map +1 -0
  226. package/build/types/integrations/http/client-patch.d.ts +46 -0
  227. package/build/types/integrations/http/client-patch.d.ts.map +1 -0
  228. package/build/types/integrations/http/client-subscriptions.d.ts +21 -0
  229. package/build/types/integrations/http/client-subscriptions.d.ts.map +1 -0
  230. package/build/types/integrations/http/constants.d.ts +6 -0
  231. package/build/types/integrations/http/constants.d.ts.map +1 -0
  232. package/build/types/integrations/http/double-wrap-warning.d.ts +4 -0
  233. package/build/types/integrations/http/double-wrap-warning.d.ts.map +1 -0
  234. package/build/types/integrations/http/get-outgoing-span-data.d.ts +13 -0
  235. package/build/types/integrations/http/get-outgoing-span-data.d.ts.map +1 -0
  236. package/build/types/integrations/http/get-request-url.d.ts +10 -0
  237. package/build/types/integrations/http/get-request-url.d.ts.map +1 -0
  238. package/build/types/integrations/http/index.d.ts +4 -0
  239. package/build/types/integrations/http/index.d.ts.map +1 -0
  240. package/build/types/integrations/http/inject-trace-propagation-headers.d.ts +12 -0
  241. package/build/types/integrations/http/inject-trace-propagation-headers.d.ts.map +1 -0
  242. package/build/types/integrations/http/types.d.ts +249 -0
  243. package/build/types/integrations/http/types.d.ts.map +1 -0
  244. package/build/types/integrations/linkederrors.d.ts +1 -1
  245. package/build/types/integrations/linkederrors.d.ts.map +1 -1
  246. package/build/types/integrations/mcp-server/handlers.d.ts +18 -0
  247. package/build/types/integrations/mcp-server/handlers.d.ts.map +1 -1
  248. package/build/types/integrations/mcp-server/index.d.ts +8 -1
  249. package/build/types/integrations/mcp-server/index.d.ts.map +1 -1
  250. package/build/types/integrations/requestdata.d.ts +1 -1
  251. package/build/types/integrations/requestdata.d.ts.map +1 -1
  252. package/build/types/integrations/spanStreaming.d.ts +1 -1
  253. package/build/types/integrations/spanStreaming.d.ts.map +1 -1
  254. package/build/types/integrations/supabase.d.ts +1 -1
  255. package/build/types/integrations/supabase.d.ts.map +1 -1
  256. package/build/types/integrations/zoderrors.d.ts +1 -1
  257. package/build/types/integrations/zoderrors.d.ts.map +1 -1
  258. package/build/types/logs/console-integration.d.ts +1 -1
  259. package/build/types/logs/console-integration.d.ts.map +1 -1
  260. package/build/types/logs/envelope.d.ts +5 -2
  261. package/build/types/logs/envelope.d.ts.map +1 -1
  262. package/build/types/logs/internal.d.ts.map +1 -1
  263. package/build/types/metrics/envelope.d.ts +5 -2
  264. package/build/types/metrics/envelope.d.ts.map +1 -1
  265. package/build/types/metrics/internal.d.ts.map +1 -1
  266. package/build/types/server-exports.d.ts +26 -0
  267. package/build/types/server-exports.d.ts.map +1 -0
  268. package/build/types/server.d.ts +10 -0
  269. package/build/types/server.d.ts.map +1 -0
  270. package/build/types/shared-exports.d.ts +215 -0
  271. package/build/types/shared-exports.d.ts.map +1 -0
  272. package/build/types/tracing/index.d.ts +1 -1
  273. package/build/types/tracing/index.d.ts.map +1 -1
  274. package/build/types/tracing/sentrySpan.d.ts.map +1 -1
  275. package/build/types/tracing/spans/captureSpan.d.ts +4 -4
  276. package/build/types/tracing/spans/captureSpan.d.ts.map +1 -1
  277. package/build/types/tracing/spans/extractGenAiSpans.d.ts +15 -0
  278. package/build/types/tracing/spans/extractGenAiSpans.d.ts.map +1 -0
  279. package/build/types/tracing/spans/spanJsonToStreamedSpan.d.ts +6 -0
  280. package/build/types/tracing/spans/spanJsonToStreamedSpan.d.ts.map +1 -0
  281. package/build/types/tracing/trace.d.ts +1 -0
  282. package/build/types/tracing/trace.d.ts.map +1 -1
  283. package/build/types/tracing/vercel-ai/constants.d.ts +1 -0
  284. package/build/types/tracing/vercel-ai/constants.d.ts.map +1 -1
  285. package/build/types/tracing/vercel-ai/index.d.ts +9 -0
  286. package/build/types/tracing/vercel-ai/index.d.ts.map +1 -1
  287. package/build/types/types-hoist/envelope.d.ts +1 -1
  288. package/build/types/types-hoist/envelope.d.ts.map +1 -1
  289. package/build/types/types-hoist/log.d.ts +5 -0
  290. package/build/types/types-hoist/log.d.ts.map +1 -1
  291. package/build/types/types-hoist/metric.d.ts +5 -0
  292. package/build/types/types-hoist/metric.d.ts.map +1 -1
  293. package/build/types/types-hoist/options.d.ts +8 -0
  294. package/build/types/types-hoist/options.d.ts.map +1 -1
  295. package/build/types/types-hoist/webfetchapi.d.ts +2 -0
  296. package/build/types/types-hoist/webfetchapi.d.ts.map +1 -1
  297. package/build/types/utils/baggage.d.ts +13 -0
  298. package/build/types/utils/baggage.d.ts.map +1 -1
  299. package/build/types/utils/get-default-export.d.ts +22 -0
  300. package/build/types/utils/get-default-export.d.ts.map +1 -0
  301. package/build/types/utils/request.d.ts +30 -0
  302. package/build/types/utils/request.d.ts.map +1 -1
  303. package/build/types/utils/spanUtils.d.ts +1 -1
  304. package/build/types/utils/string.d.ts +1 -1
  305. package/build/types/utils/string.d.ts.map +1 -1
  306. package/build/types-ts3.8/browser-exports.d.ts +11 -0
  307. package/build/types-ts3.8/browser.d.ts +3 -0
  308. package/build/types-ts3.8/build-time-plugins/buildTimeOptionsBase.d.ts +8 -0
  309. package/build/types-ts3.8/carrier.d.ts +1 -1
  310. package/build/types-ts3.8/index.d.ts +3 -225
  311. package/build/types-ts3.8/instrument/console.d.ts +7 -0
  312. package/build/types-ts3.8/integrations/captureconsole.d.ts +1 -1
  313. package/build/types-ts3.8/integrations/console.d.ts +5 -0
  314. package/build/types-ts3.8/integrations/conversationId.d.ts +1 -1
  315. package/build/types-ts3.8/integrations/dedupe.d.ts +1 -1
  316. package/build/types-ts3.8/integrations/eventFilters.d.ts +2 -2
  317. package/build/types-ts3.8/integrations/express/utils.d.ts +1 -5
  318. package/build/types-ts3.8/integrations/extraerrordata.d.ts +1 -1
  319. package/build/types-ts3.8/integrations/functiontostring.d.ts +1 -1
  320. package/build/types-ts3.8/integrations/http/add-outgoing-request-breadcrumb.d.ts +6 -0
  321. package/build/types-ts3.8/integrations/http/client-patch.d.ts +46 -0
  322. package/build/types-ts3.8/integrations/http/client-subscriptions.d.ts +21 -0
  323. package/build/types-ts3.8/integrations/http/constants.d.ts +6 -0
  324. package/build/types-ts3.8/integrations/http/double-wrap-warning.d.ts +4 -0
  325. package/build/types-ts3.8/integrations/http/get-outgoing-span-data.d.ts +13 -0
  326. package/build/types-ts3.8/integrations/http/get-request-url.d.ts +10 -0
  327. package/build/types-ts3.8/integrations/http/index.d.ts +4 -0
  328. package/build/types-ts3.8/integrations/http/inject-trace-propagation-headers.d.ts +12 -0
  329. package/build/types-ts3.8/integrations/http/types.d.ts +252 -0
  330. package/build/types-ts3.8/integrations/linkederrors.d.ts +1 -1
  331. package/build/types-ts3.8/integrations/mcp-server/handlers.d.ts +18 -0
  332. package/build/types-ts3.8/integrations/mcp-server/index.d.ts +8 -1
  333. package/build/types-ts3.8/integrations/requestdata.d.ts +1 -1
  334. package/build/types-ts3.8/integrations/spanStreaming.d.ts +1 -1
  335. package/build/types-ts3.8/integrations/supabase.d.ts +1 -1
  336. package/build/types-ts3.8/integrations/zoderrors.d.ts +1 -1
  337. package/build/types-ts3.8/logs/console-integration.d.ts +1 -1
  338. package/build/types-ts3.8/logs/envelope.d.ts +5 -2
  339. package/build/types-ts3.8/metrics/envelope.d.ts +5 -2
  340. package/build/types-ts3.8/server-exports.d.ts +21 -0
  341. package/build/types-ts3.8/server.d.ts +10 -0
  342. package/build/types-ts3.8/shared-exports.d.ts +214 -0
  343. package/build/types-ts3.8/tracing/index.d.ts +1 -1
  344. package/build/types-ts3.8/tracing/spans/captureSpan.d.ts +4 -4
  345. package/build/types-ts3.8/tracing/spans/extractGenAiSpans.d.ts +15 -0
  346. package/build/types-ts3.8/tracing/spans/spanJsonToStreamedSpan.d.ts +6 -0
  347. package/build/types-ts3.8/tracing/trace.d.ts +1 -0
  348. package/build/types-ts3.8/tracing/vercel-ai/constants.d.ts +1 -0
  349. package/build/types-ts3.8/tracing/vercel-ai/index.d.ts +9 -0
  350. package/build/types-ts3.8/types-hoist/envelope.d.ts +1 -1
  351. package/build/types-ts3.8/types-hoist/log.d.ts +5 -0
  352. package/build/types-ts3.8/types-hoist/metric.d.ts +5 -0
  353. package/build/types-ts3.8/types-hoist/options.d.ts +8 -0
  354. package/build/types-ts3.8/types-hoist/webfetchapi.d.ts +2 -0
  355. package/build/types-ts3.8/utils/baggage.d.ts +13 -0
  356. package/build/types-ts3.8/utils/get-default-export.d.ts +22 -0
  357. package/build/types-ts3.8/utils/request.d.ts +30 -0
  358. package/build/types-ts3.8/utils/spanUtils.d.ts +1 -1
  359. package/build/types-ts3.8/utils/string.d.ts +1 -1
  360. package/package.json +24 -2
  361. package/server.js +3 -0
@@ -0,0 +1,29 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const debugBuild = require('../../debug-build.js');
4
+ const debugLogger = require('../../utils/debug-logger.js');
5
+
6
+ const isOtelWrapped = (fn) =>
7
+ typeof fn.__unwrap === 'function';
8
+
9
+ // exported for tess
10
+ const warning =
11
+ 'Double-wrapped http.client detected. Either disable spans in Sentry.httpIntegration, or disable the OpenTelemetry HTTP instrumentation.';
12
+
13
+ let didDoubleWrapWarning = false;
14
+ // no-op in non-debug builds
15
+ const doubleWrapWarning = debugBuild.DEBUG_BUILD
16
+ ? (http) => {
17
+ if (!didDoubleWrapWarning) {
18
+ if (isOtelWrapped(http.request) || isOtelWrapped(http.get)) {
19
+ // TODO: add link to documentation
20
+ didDoubleWrapWarning = true;
21
+ debugLogger.debug.warn(warning);
22
+ }
23
+ }
24
+ }
25
+ : () => {};
26
+
27
+ exports.doubleWrapWarning = doubleWrapWarning;
28
+ exports.warning = warning;
29
+ //# sourceMappingURL=double-wrap-warning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-wrap-warning.js","sources":["../../../../src/integrations/http/double-wrap-warning.ts"],"sourcesContent":["import { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport type { HttpModuleExport } from './types';\n\nconst isOtelWrapped = (fn: Function & { __unwrap?: Function }): fn is Function & { __unwrap: Function } =>\n typeof fn.__unwrap === 'function';\n\n// exported for tess\nexport const warning =\n 'Double-wrapped http.client detected. Either disable spans in Sentry.httpIntegration, or disable the OpenTelemetry HTTP instrumentation.';\n\nlet didDoubleWrapWarning = false;\n// no-op in non-debug builds\nexport const doubleWrapWarning = DEBUG_BUILD\n ? (http: HttpModuleExport) => {\n if (!didDoubleWrapWarning) {\n if (isOtelWrapped(http.request) || isOtelWrapped(http.get)) {\n // TODO: add link to documentation\n didDoubleWrapWarning = true;\n debug.warn(warning);\n }\n }\n }\n : () => {};\n"],"names":["DEBUG_BUILD","debug"],"mappings":";;;;;AAIA,MAAM,aAAA,GAAgB,CAAC,EAAE;AACzB,EAAE,OAAO,EAAE,CAAC,QAAA,KAAa,UAAU;;AAEnC;MACa,OAAA;AACb,EAAE;;AAEF,IAAI,oBAAA,GAAuB,KAAK;AAChC;AACO,MAAM,oBAAoBA;AACjC,IAAI,CAAC,IAAI,KAAuB;AAChC,MAAM,IAAI,CAAC,oBAAoB,EAAE;AACjC,QAAQ,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAA,IAAK,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACpE;AACA,UAAU,oBAAA,GAAuB,IAAI;AACrC,UAAUC,iBAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAQ;AACR,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,CAAC;;;;;"}
@@ -0,0 +1,88 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const semanticAttributes = require('../../semanticAttributes.js');
4
+ const url = require('../../utils/url.js');
5
+ const getRequestUrl = require('./get-request-url.js');
6
+
7
+ /**
8
+ * Build the initial span name and attributes for an outgoing HTTP request.
9
+ * This is called before the span is created, to get the initial details.
10
+ */
11
+ function getOutgoingRequestSpanData(request) {
12
+ const url$1 = getRequestUrl.getRequestUrlFromClientRequest(request);
13
+ const [name, attributes] = url.getHttpSpanDetailsFromUrlObject(
14
+ url.parseStringToURLObject(url$1),
15
+ 'client',
16
+ 'auto.http.client',
17
+ request,
18
+ );
19
+
20
+ const userAgent = request.getHeader('user-agent');
21
+
22
+ return {
23
+ name,
24
+ attributes: {
25
+ // TODO(v11): Update these to the Sentry semantic attributes for urls.
26
+ // https://getsentry.github.io/sentry-conventions/attributes/
27
+ [semanticAttributes.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',
28
+ 'otel.kind': 'CLIENT',
29
+ 'http.url': url$1,
30
+ 'http.method': request.method,
31
+ 'http.target': request.path || '/',
32
+ 'net.peer.name': request.host,
33
+ 'http.host': request.getHeader('host') ,
34
+ ...(userAgent ? { 'user_agent.original': userAgent } : {}),
35
+ ...attributes,
36
+ },
37
+ onlyIfParent: true,
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Add span attributes once the response is received.
43
+ */
44
+ function setIncomingResponseSpanData(response, span) {
45
+ const { statusCode, statusMessage, httpVersion, socket } = response;
46
+ const transport = httpVersion?.toUpperCase() !== 'QUIC' ? 'ip_tcp' : 'ip_udp';
47
+
48
+ span.setAttributes({
49
+ 'http.response.status_code': statusCode,
50
+ 'network.protocol.version': httpVersion,
51
+ // TODO(v11): Update these to the Sentry semantic attributes for urls.
52
+ // https://getsentry.github.io/sentry-conventions/attributes/
53
+ 'http.flavor': httpVersion,
54
+ 'network.transport': transport,
55
+ 'net.transport': transport,
56
+ 'http.status_text': statusMessage?.toUpperCase(),
57
+ 'http.status_code': statusCode,
58
+ ...getResponseContentLengthAttributes(response),
59
+ ...getSocketAttrs(socket),
60
+ });
61
+ }
62
+
63
+ function getSocketAttrs(socket) {
64
+ if (!socket) return {};
65
+ const { remoteAddress, remotePort } = socket;
66
+ return {
67
+ 'network.peer.address': remoteAddress,
68
+ 'network.peer.port': remotePort,
69
+ 'net.peer.ip': remoteAddress,
70
+ 'net.peer.port': remotePort,
71
+ };
72
+ }
73
+
74
+ function getResponseContentLengthAttributes(response) {
75
+ const { headers } = response;
76
+ const contentLengthHeader = headers['content-length'];
77
+ const length = contentLengthHeader ? parseInt(String(contentLengthHeader), 10) : -1;
78
+ const encoding = headers['content-encoding'];
79
+ return length >= 0
80
+ ? encoding && encoding !== 'identity'
81
+ ? { 'http.response_content_length': length }
82
+ : { 'http.response_content_length_uncompressed': length }
83
+ : {};
84
+ }
85
+
86
+ exports.getOutgoingRequestSpanData = getOutgoingRequestSpanData;
87
+ exports.setIncomingResponseSpanData = setIncomingResponseSpanData;
88
+ //# sourceMappingURL=get-outgoing-span-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-outgoing-span-data.js","sources":["../../../../src/integrations/http/get-outgoing-span-data.ts"],"sourcesContent":["import type { Span, SpanAttributes } from '../../types-hoist/span';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '../../semanticAttributes';\nimport { getHttpSpanDetailsFromUrlObject, parseStringToURLObject } from '../../utils/url';\nimport type { HttpClientRequest, HttpIncomingMessage } from './types';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport type { StartSpanOptions } from '../../types-hoist/startSpanOptions';\n\n/**\n * Build the initial span name and attributes for an outgoing HTTP request.\n * This is called before the span is created, to get the initial details.\n */\nexport function getOutgoingRequestSpanData(request: HttpClientRequest): StartSpanOptions {\n const url = getRequestUrlFromClientRequest(request);\n const [name, attributes] = getHttpSpanDetailsFromUrlObject(\n parseStringToURLObject(url),\n 'client',\n 'auto.http.client',\n request,\n );\n\n const userAgent = request.getHeader('user-agent');\n\n return {\n name,\n attributes: {\n // TODO(v11): Update these to the Sentry semantic attributes for urls.\n // https://getsentry.github.io/sentry-conventions/attributes/\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n 'otel.kind': 'CLIENT',\n 'http.url': url,\n 'http.method': request.method,\n 'http.target': request.path || '/',\n 'net.peer.name': request.host,\n 'http.host': request.getHeader('host') as string | undefined,\n ...(userAgent ? { 'user_agent.original': userAgent as string } : {}),\n ...attributes,\n },\n onlyIfParent: true,\n };\n}\n\n/**\n * Add span attributes once the response is received.\n */\nexport function setIncomingResponseSpanData(response: HttpIncomingMessage, span: Span): void {\n const { statusCode, statusMessage, httpVersion, socket } = response;\n const transport = httpVersion?.toUpperCase() !== 'QUIC' ? 'ip_tcp' : 'ip_udp';\n\n span.setAttributes({\n 'http.response.status_code': statusCode,\n 'network.protocol.version': httpVersion,\n // TODO(v11): Update these to the Sentry semantic attributes for urls.\n // https://getsentry.github.io/sentry-conventions/attributes/\n 'http.flavor': httpVersion,\n 'network.transport': transport,\n 'net.transport': transport,\n 'http.status_text': statusMessage?.toUpperCase(),\n 'http.status_code': statusCode,\n ...getResponseContentLengthAttributes(response),\n ...getSocketAttrs(socket),\n });\n}\n\nfunction getSocketAttrs(socket: HttpIncomingMessage['socket']): SpanAttributes {\n if (!socket) return {};\n const { remoteAddress, remotePort } = socket;\n return {\n 'network.peer.address': remoteAddress,\n 'network.peer.port': remotePort,\n 'net.peer.ip': remoteAddress,\n 'net.peer.port': remotePort,\n };\n}\n\nfunction getResponseContentLengthAttributes(response: HttpIncomingMessage): SpanAttributes {\n const { headers } = response;\n const contentLengthHeader = headers['content-length'];\n const length = contentLengthHeader ? parseInt(String(contentLengthHeader), 10) : -1;\n const encoding = headers['content-encoding'];\n return length >= 0\n ? encoding && encoding !== 'identity'\n ? { 'http.response_content_length': length }\n : { 'http.response_content_length_uncompressed': length }\n : {};\n}\n"],"names":["url","getRequestUrlFromClientRequest","getHttpSpanDetailsFromUrlObject","parseStringToURLObject","SEMANTIC_ATTRIBUTE_SENTRY_OP"],"mappings":";;;;;;AAOA;AACA;AACA;AACA;AACO,SAAS,0BAA0B,CAAC,OAAO,EAAuC;AACzF,EAAE,MAAMA,KAAA,GAAMC,4CAA8B,CAAC,OAAO,CAAC;AACrD,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAA,GAAIC,mCAA+B;AAC5D,IAAIC,0BAAsB,CAACH,KAAG,CAAC;AAC/B,IAAI,QAAQ;AACZ,IAAI,kBAAkB;AACtB,IAAI,OAAO;AACX,GAAG;;AAEH,EAAE,MAAM,YAAY,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;;AAEnD,EAAE,OAAO;AACT,IAAI,IAAI;AACR,IAAI,UAAU,EAAE;AAChB;AACA;AACA,MAAM,CAACI,+CAA4B,GAAG,aAAa;AACnD,MAAM,WAAW,EAAE,QAAQ;AAC3B,MAAM,UAAU,EAAEJ,KAAG;AACrB,MAAM,aAAa,EAAE,OAAO,CAAC,MAAM;AACnC,MAAM,aAAa,EAAE,OAAO,CAAC,IAAA,IAAQ,GAAG;AACxC,MAAM,eAAe,EAAE,OAAO,CAAC,IAAI;AACnC,MAAM,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAA;AAC3C,MAAM,IAAI,SAAA,GAAY,EAAE,qBAAqB,EAAE,SAAA,GAAoB,GAAI,EAAE,CAAC;AAC1E,MAAM,GAAG,UAAU;AACnB,KAAK;AACL,IAAI,YAAY,EAAE,IAAI;AACtB,GAAG;AACH;;AAEA;AACA;AACA;AACO,SAAS,2BAA2B,CAAC,QAAQ,EAAuB,IAAI,EAAc;AAC7F,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAA,EAAO,GAAI,QAAQ;AACrE,EAAE,MAAM,SAAA,GAAY,WAAW,EAAE,WAAW,EAAC,KAAM,MAAA,GAAS,QAAA,GAAW,QAAQ;;AAE/E,EAAE,IAAI,CAAC,aAAa,CAAC;AACrB,IAAI,2BAA2B,EAAE,UAAU;AAC3C,IAAI,0BAA0B,EAAE,WAAW;AAC3C;AACA;AACA,IAAI,aAAa,EAAE,WAAW;AAC9B,IAAI,mBAAmB,EAAE,SAAS;AAClC,IAAI,eAAe,EAAE,SAAS;AAC9B,IAAI,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE;AACpD,IAAI,kBAAkB,EAAE,UAAU;AAClC,IAAI,GAAG,kCAAkC,CAAC,QAAQ,CAAC;AACnD,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC;AAC7B,GAAG,CAAC;AACJ;;AAEA,SAAS,cAAc,CAAC,MAAM,EAAiD;AAC/E,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACxB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAA,EAAW,GAAI,MAAM;AAC9C,EAAE,OAAO;AACT,IAAI,sBAAsB,EAAE,aAAa;AACzC,IAAI,mBAAmB,EAAE,UAAU;AACnC,IAAI,aAAa,EAAE,aAAa;AAChC,IAAI,eAAe,EAAE,UAAU;AAC/B,GAAG;AACH;;AAEA,SAAS,kCAAkC,CAAC,QAAQ,EAAuC;AAC3F,EAAE,MAAM,EAAE,OAAA,EAAQ,GAAI,QAAQ;AAC9B,EAAE,MAAM,mBAAA,GAAsB,OAAO,CAAC,gBAAgB,CAAC;AACvD,EAAE,MAAM,MAAA,GAAS,mBAAA,GAAsB,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAA,GAAI,EAAE;AACrF,EAAE,MAAM,QAAA,GAAW,OAAO,CAAC,kBAAkB,CAAC;AAC9C,EAAE,OAAO,UAAU;AACnB,MAAM,QAAA,IAAY,QAAA,KAAa;AAC/B,QAAQ,EAAE,8BAA8B,EAAE,MAAA;AAC1C,QAAQ,EAAE,2CAA2C,EAAE,MAAA;AACvD,MAAM,EAAE;AACR;;;;;"}
@@ -0,0 +1,54 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ /** Convert an outgoing request to request options. */
4
+ function getRequestOptions(request) {
5
+ // request.host may be 'hostname:port' when the caller passed
6
+ // { host: 'hostname:port' } to http.request(). Split it so that
7
+ // `hostname` is always port-free (matching the http.RequestOptions contract)
8
+ // and the port is not lost when request.port is undefined.
9
+ const hostWithPort = request.host || '';
10
+ const portInHost = /^(.*):(\d+)$/.exec(hostWithPort);
11
+ const hostname = portInHost ? portInHost[1] : hostWithPort;
12
+ const port = request.port ?? (portInHost ? Number(portInHost[2]) : undefined);
13
+
14
+ return {
15
+ method: request.method,
16
+ port,
17
+ protocol: request.protocol,
18
+ host: request.host,
19
+ hostname,
20
+ path: request.path,
21
+ headers: request.getHeaders(),
22
+ };
23
+ }
24
+
25
+ function getRequestUrl(requestOptions) {
26
+ return String(getRequestUrlObject(requestOptions));
27
+ }
28
+
29
+ function getRequestUrlObject(requestOptions) {
30
+ const protocol = requestOptions.protocol || 'http:';
31
+ const hostHeader = requestOptions.headers?.host && String(requestOptions.headers?.host);
32
+ const hostname = hostHeader || requestOptions.hostname || requestOptions.host || '';
33
+ // Don't log standard :80 (http) and :443 (https) ports to reduce the noise
34
+ // Also don't add port if the hostname already includes a port
35
+ const port =
36
+ !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 || /^(.*):(\d+)$/.test(hostname)
37
+ ? ''
38
+ : `:${requestOptions.port}`;
39
+ const path = requestOptions.path ? requestOptions.path : '/';
40
+ return new URL(path, `${protocol}//${hostname}${port}`);
41
+ }
42
+
43
+ /**
44
+ * Build the full URL string from a Node.js ClientRequest.
45
+ */
46
+ function getRequestUrlFromClientRequest(request) {
47
+ return String(getRequestUrl(getRequestOptions(request)));
48
+ }
49
+
50
+ exports.getRequestOptions = getRequestOptions;
51
+ exports.getRequestUrl = getRequestUrl;
52
+ exports.getRequestUrlFromClientRequest = getRequestUrlFromClientRequest;
53
+ exports.getRequestUrlObject = getRequestUrlObject;
54
+ //# sourceMappingURL=get-request-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-request-url.js","sources":["../../../../src/integrations/http/get-request-url.ts"],"sourcesContent":["import type { HttpClientRequest, HttpRequestOptions } from './types';\n\n/** Convert an outgoing request to request options. */\nexport function getRequestOptions(request: HttpClientRequest): HttpRequestOptions {\n // request.host may be 'hostname:port' when the caller passed\n // { host: 'hostname:port' } to http.request(). Split it so that\n // `hostname` is always port-free (matching the http.RequestOptions contract)\n // and the port is not lost when request.port is undefined.\n const hostWithPort = request.host || '';\n const portInHost = /^(.*):(\\d+)$/.exec(hostWithPort);\n const hostname = portInHost ? portInHost[1] : hostWithPort;\n const port = request.port ?? (portInHost ? Number(portInHost[2]) : undefined);\n\n return {\n method: request.method,\n port,\n protocol: request.protocol,\n host: request.host,\n hostname,\n path: request.path,\n headers: request.getHeaders(),\n };\n}\n\nexport function getRequestUrl(requestOptions: HttpRequestOptions): string {\n return String(getRequestUrlObject(requestOptions));\n}\n\nexport function getRequestUrlObject(requestOptions: HttpRequestOptions): URL {\n const protocol = requestOptions.protocol || 'http:';\n const hostHeader = requestOptions.headers?.host && String(requestOptions.headers?.host);\n const hostname = hostHeader || requestOptions.hostname || requestOptions.host || '';\n // Don't log standard :80 (http) and :443 (https) ports to reduce the noise\n // Also don't add port if the hostname already includes a port\n const port =\n !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 || /^(.*):(\\d+)$/.test(hostname)\n ? ''\n : `:${requestOptions.port}`;\n const path = requestOptions.path ? requestOptions.path : '/';\n return new URL(path, `${protocol}//${hostname}${port}`);\n}\n\n/**\n * Build the full URL string from a Node.js ClientRequest.\n */\nexport function getRequestUrlFromClientRequest(request: HttpClientRequest): string {\n return String(getRequestUrl(getRequestOptions(request)));\n}\n"],"names":[],"mappings":";;AAEA;AACO,SAAS,iBAAiB,CAAC,OAAO,EAAyC;AAClF;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAA,GAAe,OAAO,CAAC,IAAA,IAAQ,EAAE;AACzC,EAAE,MAAM,aAAa,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;AACtD,EAAE,MAAM,QAAA,GAAW,UAAA,GAAa,UAAU,CAAC,CAAC,CAAA,GAAI,YAAY;AAC5D,EAAE,MAAM,IAAA,GAAO,OAAO,CAAC,IAAA,KAAS,UAAA,GAAa,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,GAAI,SAAS,CAAC;;AAE/E,EAAE,OAAO;AACT,IAAI,MAAM,EAAE,OAAO,CAAC,MAAM;AAC1B,IAAI,IAAI;AACR,IAAI,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC9B,IAAI,IAAI,EAAE,OAAO,CAAC,IAAI;AACtB,IAAI,QAAQ;AACZ,IAAI,IAAI,EAAE,OAAO,CAAC,IAAI;AACtB,IAAI,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;AACjC,GAAG;AACH;;AAEO,SAAS,aAAa,CAAC,cAAc,EAA8B;AAC1E,EAAE,OAAO,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AACpD;;AAEO,SAAS,mBAAmB,CAAC,cAAc,EAA2B;AAC7E,EAAE,MAAM,QAAA,GAAW,cAAc,CAAC,QAAA,IAAY,OAAO;AACrD,EAAE,MAAM,UAAA,GAAa,cAAc,CAAC,OAAO,EAAE,IAAA,IAAQ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;AACzF,EAAE,MAAM,QAAA,GAAW,UAAA,IAAc,cAAc,CAAC,QAAA,IAAY,cAAc,CAAC,IAAA,IAAQ,EAAE;AACrF;AACA;AACA,EAAE,MAAM,IAAA;AACR,IAAI,CAAC,cAAc,CAAC,IAAA,IAAQ,cAAc,CAAC,SAAS,EAAA,IAAM,cAAc,CAAC,SAAS,GAAA,IAAO,cAAc,CAAC,IAAI,CAAC,QAAQ;AACrH,QAAQ;AACR,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAA;AACA,EAAA,MAAA,IAAA,GAAA,cAAA,CAAA,IAAA,GAAA,cAAA,CAAA,IAAA,GAAA,GAAA;AACA,EAAA,OAAA,IAAA,GAAA,CAAA,IAAA,EAAA,CAAA,EAAA,QAAA,CAAA,EAAA,EAAA,QAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AACA;;AAEA;AACA;AACA;AACA,SAAA,8BAAA,CAAA,OAAA,EAAA;AACA,EAAA,OAAA,MAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,CAAA;AACA;;;;;;;"}
@@ -0,0 +1,81 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const currentScopes = require('../../currentScopes.js');
4
+ const debugBuild = require('../../debug-build.js');
5
+ const debugLogger = require('../../utils/debug-logger.js');
6
+ const is = require('../../utils/is.js');
7
+ const traceData = require('../../utils/traceData.js');
8
+ const tracePropagationTargets = require('../../utils/tracePropagationTargets.js');
9
+ const constants = require('./constants.js');
10
+ const getRequestUrl = require('./get-request-url.js');
11
+ const baggage = require('../../utils/baggage.js');
12
+
13
+ /**
14
+ * Inject Sentry trace-propagation headers into an outgoing request if the
15
+ * target URL matches the configured `tracePropagationTargets`.
16
+ *
17
+ * Note: this must be called *before* calling `request.end()` (or firing the
18
+ * `http.client.request.start` diagnostics channel), because at that point,
19
+ * the headers have already been sent, and cannot be modified.
20
+ */
21
+ function injectTracePropagationHeaders(
22
+ request,
23
+ propagationDecisionMap,
24
+ ) {
25
+ const url = getRequestUrl.getRequestUrlFromClientRequest(request);
26
+ const clientOptions = currentScopes.getClient()?.getOptions();
27
+ const { tracePropagationTargets: tracePropagationTargets$1, propagateTraceparent } = clientOptions ?? {};
28
+
29
+ if (!tracePropagationTargets.shouldPropagateTraceForUrl(url, tracePropagationTargets$1, propagationDecisionMap)) {
30
+ return;
31
+ }
32
+
33
+ const hasExistingSentryTraceHeader = !!request.getHeader('sentry-trace');
34
+
35
+ if (hasExistingSentryTraceHeader) {
36
+ // add nothing if there's already a sentry-trace header,
37
+ // or else baggage can be sent twice.
38
+ return;
39
+ }
40
+
41
+ const traceData$1 = traceData.getTraceData({ propagateTraceparent });
42
+ if (!traceData$1) return;
43
+
44
+ const { 'sentry-trace': sentryTrace, baggage: baggage$1, traceparent } = traceData$1;
45
+
46
+ if (sentryTrace) {
47
+ try {
48
+ request.setHeader('sentry-trace', sentryTrace);
49
+ debugBuild.DEBUG_BUILD && debugLogger.debug.log(constants.LOG_PREFIX, 'Added sentry-trace header');
50
+ } catch (e) {
51
+ debugBuild.DEBUG_BUILD &&
52
+ debugLogger.debug.error(constants.LOG_PREFIX, 'Failed to set sentry-trace header:', is.isError(e) ? e.message : 'Unknown error');
53
+ }
54
+ }
55
+
56
+ if (traceparent && !request.getHeader('traceparent')) {
57
+ try {
58
+ request.setHeader('traceparent', traceparent);
59
+ debugBuild.DEBUG_BUILD && debugLogger.debug.log(constants.LOG_PREFIX, 'Added traceparent header');
60
+ } catch (e) {
61
+ debugBuild.DEBUG_BUILD &&
62
+ debugLogger.debug.error(constants.LOG_PREFIX, 'Failed to set traceparent header:', is.isError(e) ? e.message : 'Unknown error');
63
+ }
64
+ }
65
+
66
+ if (baggage$1) {
67
+ const merged = baggage.mergeBaggageHeaders(request.getHeader('baggage'), baggage$1);
68
+ if (merged) {
69
+ try {
70
+ request.setHeader('baggage', merged);
71
+ debugBuild.DEBUG_BUILD && debugLogger.debug.log(constants.LOG_PREFIX, 'Added baggage header');
72
+ } catch (e) {
73
+ debugBuild.DEBUG_BUILD &&
74
+ debugLogger.debug.error(constants.LOG_PREFIX, 'Failed to set baggage header:', is.isError(e) ? e.message : 'Unknown error');
75
+ }
76
+ }
77
+ }
78
+ }
79
+
80
+ exports.injectTracePropagationHeaders = injectTracePropagationHeaders;
81
+ //# sourceMappingURL=inject-trace-propagation-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-trace-propagation-headers.js","sources":["../../../../src/integrations/http/inject-trace-propagation-headers.ts"],"sourcesContent":["import type { LRUMap } from '../../utils/lru';\nimport { getClient } from '../../currentScopes';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport { isError } from '../../utils/is';\nimport { getTraceData } from '../../utils/traceData';\nimport { shouldPropagateTraceForUrl } from '../../utils/tracePropagationTargets';\nimport { LOG_PREFIX } from './constants';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport type { HttpClientRequest } from './types';\nimport { mergeBaggageHeaders } from '../../utils/baggage';\n\n/**\n * Inject Sentry trace-propagation headers into an outgoing request if the\n * target URL matches the configured `tracePropagationTargets`.\n *\n * Note: this must be called *before* calling `request.end()` (or firing the\n * `http.client.request.start` diagnostics channel), because at that point,\n * the headers have already been sent, and cannot be modified.\n */\nexport function injectTracePropagationHeaders(\n request: HttpClientRequest,\n propagationDecisionMap: LRUMap<string, boolean>,\n): void {\n const url = getRequestUrlFromClientRequest(request);\n const clientOptions = getClient()?.getOptions();\n const { tracePropagationTargets, propagateTraceparent } = clientOptions ?? {};\n\n if (!shouldPropagateTraceForUrl(url, tracePropagationTargets, propagationDecisionMap)) {\n return;\n }\n\n const hasExistingSentryTraceHeader = !!request.getHeader('sentry-trace');\n\n if (hasExistingSentryTraceHeader) {\n // add nothing if there's already a sentry-trace header,\n // or else baggage can be sent twice.\n return;\n }\n\n const traceData = getTraceData({ propagateTraceparent });\n if (!traceData) return;\n\n const { 'sentry-trace': sentryTrace, baggage, traceparent } = traceData;\n\n if (sentryTrace) {\n try {\n request.setHeader('sentry-trace', sentryTrace);\n DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added sentry-trace header');\n } catch (e) {\n DEBUG_BUILD &&\n debug.error(LOG_PREFIX, 'Failed to set sentry-trace header:', isError(e) ? e.message : 'Unknown error');\n }\n }\n\n if (traceparent && !request.getHeader('traceparent')) {\n try {\n request.setHeader('traceparent', traceparent);\n DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added traceparent header');\n } catch (e) {\n DEBUG_BUILD &&\n debug.error(LOG_PREFIX, 'Failed to set traceparent header:', isError(e) ? e.message : 'Unknown error');\n }\n }\n\n if (baggage) {\n const merged = mergeBaggageHeaders(request.getHeader('baggage'), baggage);\n if (merged) {\n try {\n request.setHeader('baggage', merged);\n DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added baggage header');\n } catch (e) {\n DEBUG_BUILD &&\n debug.error(LOG_PREFIX, 'Failed to set baggage header:', isError(e) ? e.message : 'Unknown error');\n }\n }\n }\n}\n"],"names":["getRequestUrlFromClientRequest","getClient","tracePropagationTargets","shouldPropagateTraceForUrl","traceData","getTraceData","baggage","DEBUG_BUILD","debug","LOG_PREFIX","isError","mergeBaggageHeaders"],"mappings":";;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,6BAA6B;AAC7C,EAAE,OAAO;AACT,EAAE,sBAAsB;AACxB,EAAQ;AACR,EAAE,MAAM,GAAA,GAAMA,4CAA8B,CAAC,OAAO,CAAC;AACrD,EAAE,MAAM,gBAAgBC,uBAAS,EAAE,EAAE,UAAU,EAAE;AACjD,EAAE,MAAM,2BAAEC,yBAAuB,EAAE,oBAAA,KAAyB,aAAA,IAAiB,EAAE;;AAE/E,EAAE,IAAI,CAACC,kDAA0B,CAAC,GAAG,EAAED,yBAAuB,EAAE,sBAAsB,CAAC,EAAE;AACzF,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,4BAAA,GAA+B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;;AAE1E,EAAE,IAAI,4BAA4B,EAAE;AACpC;AACA;AACA,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAME,cAAYC,sBAAY,CAAC,EAAE,oBAAA,EAAsB,CAAC;AAC1D,EAAE,IAAI,CAACD,WAAS,EAAE;;AAElB,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,WAAEE,SAAO,EAAE,WAAA,EAAY,GAAIF,WAAS;;AAEzE,EAAE,IAAI,WAAW,EAAE;AACnB,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC;AACpD,MAAMG,sBAAA,IAAeC,iBAAK,CAAC,GAAG,CAACC,oBAAU,EAAE,2BAA2B,CAAC;AACvE,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAMF,sBAAA;AACN,QAAQC,iBAAK,CAAC,KAAK,CAACC,oBAAU,EAAE,oCAAoC,EAAEC,UAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAA,GAAU,eAAe,CAAC;AAC/G,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,WAAA,IAAe,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;AACxD,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC;AACnD,MAAMH,sBAAA,IAAeC,iBAAK,CAAC,GAAG,CAACC,oBAAU,EAAE,0BAA0B,CAAC;AACtE,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAMF,sBAAA;AACN,QAAQC,iBAAK,CAAC,KAAK,CAACC,oBAAU,EAAE,mCAAmC,EAAEC,UAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAA,GAAU,eAAe,CAAC;AAC9G,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAIJ,SAAO,EAAE;AACf,IAAI,MAAM,MAAA,GAASK,2BAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAEL,SAAO,CAAC;AAC7E,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAI;AACV,QAAQ,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;AAC5C,QAAQC,sBAAA,IAAeC,iBAAK,CAAC,GAAG,CAACC,oBAAU,EAAE,sBAAsB,CAAC;AACpE,MAAM,CAAA,CAAE,OAAO,CAAC,EAAE;AAClB,QAAQF,sBAAA;AACR,UAAUC,iBAAK,CAAC,KAAK,CAACC,oBAAU,EAAE,+BAA+B,EAAEC,UAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAA,GAAU,eAAe,CAAC;AAC5G,MAAM;AACN,IAAI;AACJ,EAAE;AACF;;;;"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const currentScopes = require('../../currentScopes.js');
4
- const _exports = require('../../exports.js');
4
+ const exports$1 = require('../../exports.js');
5
5
  const spanUtils = require('../../utils/spanUtils.js');
6
6
  const spanstatus = require('../../tracing/spanstatus.js');
7
7
 
@@ -36,7 +36,7 @@ function captureError(error, errorType, extraData) {
36
36
  });
37
37
  }
38
38
 
39
- _exports.captureException(error, {
39
+ exports$1.captureException(error, {
40
40
  mechanism: {
41
41
  type: 'auto.ai.mcp_server',
42
42
  handled: false,
@@ -1 +1 @@
1
- {"version":3,"file":"errorCapture.js","sources":["../../../../src/integrations/mcp-server/errorCapture.ts"],"sourcesContent":["/**\n * Safe error capture utilities for MCP server instrumentation\n *\n * Ensures error reporting never interferes with MCP server operation.\n * All capture operations are wrapped in try-catch to prevent side effects.\n */\n\nimport { getClient } from '../../currentScopes';\nimport { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport { getActiveSpan } from '../../utils/spanUtils';\nimport type { McpErrorType } from './types';\n\n/**\n * Captures an error without affecting MCP server operation.\n *\n * The active span already contains all MCP context (method, tool, arguments, etc.)\n * @param error - Error to capture\n * @param errorType - Classification of error type for filtering\n * @param extraData - Additional context data to include\n */\nexport function captureError(error: Error, errorType?: McpErrorType, extraData?: Record<string, unknown>): void {\n try {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const activeSpan = getActiveSpan();\n if (activeSpan?.isRecording()) {\n activeSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: 'internal_error',\n });\n }\n\n captureException(error, {\n mechanism: {\n type: 'auto.ai.mcp_server',\n handled: false,\n data: {\n error_type: errorType || 'handler_execution',\n ...extraData,\n },\n },\n });\n } catch {\n // noop\n }\n}\n"],"names":["getClient","getActiveSpan","SPAN_STATUS_ERROR","captureException"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAS,SAAS,EAAiB,SAAS,EAAkC;AAChH,EAAE,IAAI;AACN,IAAI,MAAM,MAAA,GAASA,uBAAS,EAAE;AAC9B,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,UAAA,GAAaC,uBAAa,EAAE;AACtC,IAAI,IAAI,UAAU,EAAE,WAAW,EAAE,EAAE;AACnC,MAAM,UAAU,CAAC,SAAS,CAAC;AAC3B,QAAQ,IAAI,EAAEC,4BAAiB;AAC/B,QAAQ,OAAO,EAAE,gBAAgB;AACjC,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAIC,yBAAgB,CAAC,KAAK,EAAE;AAC5B,MAAM,SAAS,EAAE;AACjB,QAAQ,IAAI,EAAE,oBAAoB;AAClC,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,IAAI,EAAE;AACd,UAAU,UAAU,EAAE,SAAA,IAAa,mBAAmB;AACtD,UAAU,GAAG,SAAS;AACtB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,EAAE,EAAE,MAAM;AACV;AACA,EAAE;AACF;;;;"}
1
+ {"version":3,"file":"errorCapture.js","sources":["../../../../src/integrations/mcp-server/errorCapture.ts"],"sourcesContent":["/**\n * Safe error capture utilities for MCP server instrumentation\n *\n * Ensures error reporting never interferes with MCP server operation.\n * All capture operations are wrapped in try-catch to prevent side effects.\n */\n\nimport { getClient } from '../../currentScopes';\nimport { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport { getActiveSpan } from '../../utils/spanUtils';\nimport type { McpErrorType } from './types';\n\n/**\n * Captures an error without affecting MCP server operation.\n *\n * The active span already contains all MCP context (method, tool, arguments, etc.)\n * @param error - Error to capture\n * @param errorType - Classification of error type for filtering\n * @param extraData - Additional context data to include\n */\nexport function captureError(error: Error, errorType?: McpErrorType, extraData?: Record<string, unknown>): void {\n try {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const activeSpan = getActiveSpan();\n if (activeSpan?.isRecording()) {\n activeSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: 'internal_error',\n });\n }\n\n captureException(error, {\n mechanism: {\n type: 'auto.ai.mcp_server',\n handled: false,\n data: {\n error_type: errorType || 'handler_execution',\n ...extraData,\n },\n },\n });\n } catch {\n // noop\n }\n}\n"],"names":["getClient","getActiveSpan","SPAN_STATUS_ERROR","captureException"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAS,SAAS,EAAiB,SAAS,EAAkC;AAChH,EAAE,IAAI;AACN,IAAI,MAAM,MAAA,GAASA,uBAAS,EAAE;AAC9B,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,UAAA,GAAaC,uBAAa,EAAE;AACtC,IAAI,IAAI,UAAU,EAAE,WAAW,EAAE,EAAE;AACnC,MAAM,UAAU,CAAC,SAAS,CAAC;AAC3B,QAAQ,IAAI,EAAEC,4BAAiB;AAC/B,QAAQ,OAAO,EAAE,gBAAgB;AACjC,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAIC,0BAAgB,CAAC,KAAK,EAAE;AAC5B,MAAM,SAAS,EAAE;AACjB,QAAQ,IAAI,EAAE,oBAAoB;AAClC,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,IAAI,EAAE;AACd,UAAU,UAAU,EAAE,SAAA,IAAa,mBAAmB;AACtD,UAAU,GAAG,SAAS;AACtB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,EAAE,EAAE,MAAM;AACV;AACA,EAAE;AACF;;;;"}
@@ -170,7 +170,79 @@ function wrapAllMCPHandlers(serverInstance) {
170
170
  wrapPromptHandlers(serverInstance);
171
171
  }
172
172
 
173
+ /**
174
+ * Retroactively wraps handlers on tools, resources, and prompts that were registered
175
+ * before `wrapMcpServerWithSentry` was called.
176
+ *
177
+ * The MCP SDK stores registered entries in private maps and invokes them via the entry's
178
+ * own property at call time — `executor` for tools, `readCallback` for resources, and
179
+ * `handler` for prompts. Replacing those properties
180
+ * in-place is therefore equivalent to having wrapped the original registration call.
181
+ *
182
+ * NOTE: This intentionally accesses private MCP SDK internals (`_registeredTools` etc.).
183
+ * The properties and their shapes are verified against @modelcontextprotocol/sdk source:
184
+ * https://github.com/modelcontextprotocol/typescript-sdk/blob/2c0c481cb9dbfd15c8613f765c940a5f5bace94d/packages/server/src/server/mcp.ts#L304
185
+ * When upgrading the MCP SDK, re-verify that these internal maps and their callable
186
+ * properties still exist and are invoked directly (not captured by closure at registration).
187
+ * All access is defensive — if a property is absent or not a function we skip silently.
188
+ * @internal
189
+ */
190
+ function wrapExistingHandlers(serverInstance) {
191
+ const server = serverInstance ;
192
+
193
+ // Tools: MCP SDK calls registeredTool.executor (generated from handler at registration time)
194
+ const registeredTools = server['_registeredTools'];
195
+ if (registeredTools && typeof registeredTools === 'object') {
196
+ for (const [name, tool] of Object.entries(registeredTools )) {
197
+ if (typeof tool['executor'] === 'function') {
198
+ tool['executor'] = createWrappedHandler(tool['executor'] , 'registerTool', name);
199
+ }
200
+ }
201
+ }
202
+
203
+ // Resources: MCP SDK calls registeredResource.readCallback
204
+ const registeredResources = server['_registeredResources'];
205
+ if (registeredResources && typeof registeredResources === 'object') {
206
+ for (const [name, resource] of Object.entries(registeredResources )) {
207
+ if (typeof resource['readCallback'] === 'function') {
208
+ resource['readCallback'] = createWrappedHandler(
209
+ resource['readCallback'] ,
210
+ 'registerResource',
211
+ name,
212
+ );
213
+ }
214
+ }
215
+ }
216
+
217
+ // Resource templates: MCP SDK calls registeredResourceTemplate.readCallback
218
+ const registeredResourceTemplates = server['_registeredResourceTemplates'];
219
+ if (registeredResourceTemplates && typeof registeredResourceTemplates === 'object') {
220
+ for (const [name, template] of Object.entries(
221
+ registeredResourceTemplates ,
222
+ )) {
223
+ if (typeof template['readCallback'] === 'function') {
224
+ template['readCallback'] = createWrappedHandler(
225
+ template['readCallback'] ,
226
+ 'registerResource',
227
+ name,
228
+ );
229
+ }
230
+ }
231
+ }
232
+
233
+ // Prompts: MCP SDK calls registeredPrompt.handler
234
+ const registeredPrompts = server['_registeredPrompts'];
235
+ if (registeredPrompts && typeof registeredPrompts === 'object') {
236
+ for (const [name, prompt] of Object.entries(registeredPrompts )) {
237
+ if (typeof prompt['handler'] === 'function') {
238
+ prompt['handler'] = createWrappedHandler(prompt['handler'] , 'registerPrompt', name);
239
+ }
240
+ }
241
+ }
242
+ }
243
+
173
244
  exports.wrapAllMCPHandlers = wrapAllMCPHandlers;
245
+ exports.wrapExistingHandlers = wrapExistingHandlers;
174
246
  exports.wrapPromptHandlers = wrapPromptHandlers;
175
247
  exports.wrapResourceHandlers = wrapResourceHandlers;
176
248
  exports.wrapToolHandlers = wrapToolHandlers;
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sources":["../../../../src/integrations/mcp-server/handlers.ts"],"sourcesContent":["/**\n * Handler method wrapping for MCP server instrumentation\n *\n * Provides automatic error capture and span correlation for tool, resource,\n * and prompt handlers.\n */\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport { fill } from '../../utils/object';\nimport { captureError } from './errorCapture';\nimport type { MCPHandler, MCPServerInstance } from './types';\n\n/**\n * Generic function to wrap MCP server method handlers\n * @internal\n * @param serverInstance - MCP server instance\n * @param methodName - Method name to wrap (tool, resource, prompt)\n */\nfunction wrapMethodHandler(serverInstance: MCPServerInstance, methodName: keyof MCPServerInstance): void {\n fill(serverInstance, methodName, originalMethod => {\n return function (this: MCPServerInstance, name: string, ...args: unknown[]) {\n const handler = args[args.length - 1];\n\n if (typeof handler !== 'function') {\n return (originalMethod as (...args: unknown[]) => unknown).call(this, name, ...args);\n }\n\n const wrappedHandler = createWrappedHandler(handler as MCPHandler, methodName, name);\n return (originalMethod as (...args: unknown[]) => unknown).call(this, name, ...args.slice(0, -1), wrappedHandler);\n };\n });\n}\n\n/**\n * Creates a wrapped handler with span correlation and error capture\n * @internal\n * @param originalHandler - Original handler function\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n * @returns Wrapped handler function\n */\nfunction createWrappedHandler(originalHandler: MCPHandler, methodName: keyof MCPServerInstance, handlerName: string) {\n return function (this: unknown, ...handlerArgs: unknown[]): unknown {\n try {\n return createErrorCapturingHandler.call(this, originalHandler, methodName, handlerName, handlerArgs);\n } catch (error) {\n DEBUG_BUILD && debug.warn('MCP handler wrapping failed:', error);\n return originalHandler.apply(this, handlerArgs);\n }\n };\n}\n\n/**\n * Creates an error-capturing wrapper for handler execution\n * @internal\n * @param originalHandler - Original handler function\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n * @param handlerArgs - Handler arguments\n * @param extraHandlerData - Additional handler context\n * @returns Handler execution result\n */\nfunction createErrorCapturingHandler(\n this: MCPServerInstance,\n originalHandler: MCPHandler,\n methodName: keyof MCPServerInstance,\n handlerName: string,\n handlerArgs: unknown[],\n): unknown {\n try {\n const result = originalHandler.apply(this, handlerArgs);\n\n if (result && typeof result === 'object' && typeof (result as { then?: unknown }).then === 'function') {\n return Promise.resolve(result).catch(error => {\n captureHandlerError(error, methodName, handlerName);\n throw error;\n });\n }\n\n return result;\n } catch (error) {\n captureHandlerError(error as Error, methodName, handlerName);\n throw error;\n }\n}\n\n/**\n * Captures handler execution errors based on handler type\n * @internal\n * @param error - Error to capture\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n */\nfunction captureHandlerError(error: Error, methodName: keyof MCPServerInstance, handlerName: string): void {\n try {\n const extraData: Record<string, unknown> = {};\n\n if (methodName === 'tool' || methodName === 'registerTool') {\n extraData.tool_name = handlerName;\n\n if (\n error.name === 'ProtocolValidationError' ||\n error.message.includes('validation') ||\n error.message.includes('protocol')\n ) {\n captureError(error, 'validation', extraData);\n } else if (\n error.name === 'ServerTimeoutError' ||\n error.message.includes('timed out') ||\n error.message.includes('timeout')\n ) {\n captureError(error, 'timeout', extraData);\n } else {\n captureError(error, 'tool_execution', extraData);\n }\n } else if (methodName === 'resource' || methodName === 'registerResource') {\n extraData.resource_uri = handlerName;\n captureError(error, 'resource_execution', extraData);\n } else if (methodName === 'prompt' || methodName === 'registerPrompt') {\n extraData.prompt_name = handlerName;\n captureError(error, 'prompt_execution', extraData);\n }\n } catch (_captureErr) {\n // noop\n }\n}\n\n/**\n * Wraps tool handlers to associate them with request spans.\n * Instruments both `tool` (legacy API) and `registerTool` (new API) if present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapToolHandlers(serverInstance: MCPServerInstance): void {\n if (typeof serverInstance.tool === 'function') wrapMethodHandler(serverInstance, 'tool');\n if (typeof serverInstance.registerTool === 'function') wrapMethodHandler(serverInstance, 'registerTool');\n}\n\n/**\n * Wraps resource handlers to associate them with request spans.\n * Instruments both `resource` (legacy API) and `registerResource` (new API) if present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapResourceHandlers(serverInstance: MCPServerInstance): void {\n if (typeof serverInstance.resource === 'function') wrapMethodHandler(serverInstance, 'resource');\n if (typeof serverInstance.registerResource === 'function') wrapMethodHandler(serverInstance, 'registerResource');\n}\n\n/**\n * Wraps prompt handlers to associate them with request spans.\n * Instruments both `prompt` (legacy API) and `registerPrompt` (new API) if present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapPromptHandlers(serverInstance: MCPServerInstance): void {\n if (typeof serverInstance.prompt === 'function') wrapMethodHandler(serverInstance, 'prompt');\n if (typeof serverInstance.registerPrompt === 'function') wrapMethodHandler(serverInstance, 'registerPrompt');\n}\n\n/**\n * Wraps all MCP handler types for span correlation.\n * Supports both the legacy API (`tool`, `resource`, `prompt`) and the newer API\n * (`registerTool`, `registerResource`, `registerPrompt`), instrumenting whichever methods are present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapAllMCPHandlers(serverInstance: MCPServerInstance): void {\n wrapToolHandlers(serverInstance);\n wrapResourceHandlers(serverInstance);\n wrapPromptHandlers(serverInstance);\n}\n"],"names":["fill","DEBUG_BUILD","debug","captureError"],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sources":["../../../../src/integrations/mcp-server/handlers.ts"],"sourcesContent":["/**\n * Handler method wrapping for MCP server instrumentation\n *\n * Provides automatic error capture and span correlation for tool, resource,\n * and prompt handlers.\n */\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport { fill } from '../../utils/object';\nimport { captureError } from './errorCapture';\nimport type { MCPHandler, MCPServerInstance } from './types';\n\n/**\n * Generic function to wrap MCP server method handlers\n * @internal\n * @param serverInstance - MCP server instance\n * @param methodName - Method name to wrap (tool, resource, prompt)\n */\nfunction wrapMethodHandler(serverInstance: MCPServerInstance, methodName: keyof MCPServerInstance): void {\n fill(serverInstance, methodName, originalMethod => {\n return function (this: MCPServerInstance, name: string, ...args: unknown[]) {\n const handler = args[args.length - 1];\n\n if (typeof handler !== 'function') {\n return (originalMethod as (...args: unknown[]) => unknown).call(this, name, ...args);\n }\n\n const wrappedHandler = createWrappedHandler(handler as MCPHandler, methodName, name);\n return (originalMethod as (...args: unknown[]) => unknown).call(this, name, ...args.slice(0, -1), wrappedHandler);\n };\n });\n}\n\n/**\n * Creates a wrapped handler with span correlation and error capture\n * @internal\n * @param originalHandler - Original handler function\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n * @returns Wrapped handler function\n */\nfunction createWrappedHandler(originalHandler: MCPHandler, methodName: keyof MCPServerInstance, handlerName: string) {\n return function (this: unknown, ...handlerArgs: unknown[]): unknown {\n try {\n return createErrorCapturingHandler.call(this, originalHandler, methodName, handlerName, handlerArgs);\n } catch (error) {\n DEBUG_BUILD && debug.warn('MCP handler wrapping failed:', error);\n return originalHandler.apply(this, handlerArgs);\n }\n };\n}\n\n/**\n * Creates an error-capturing wrapper for handler execution\n * @internal\n * @param originalHandler - Original handler function\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n * @param handlerArgs - Handler arguments\n * @param extraHandlerData - Additional handler context\n * @returns Handler execution result\n */\nfunction createErrorCapturingHandler(\n this: MCPServerInstance,\n originalHandler: MCPHandler,\n methodName: keyof MCPServerInstance,\n handlerName: string,\n handlerArgs: unknown[],\n): unknown {\n try {\n const result = originalHandler.apply(this, handlerArgs);\n\n if (result && typeof result === 'object' && typeof (result as { then?: unknown }).then === 'function') {\n return Promise.resolve(result).catch(error => {\n captureHandlerError(error, methodName, handlerName);\n throw error;\n });\n }\n\n return result;\n } catch (error) {\n captureHandlerError(error as Error, methodName, handlerName);\n throw error;\n }\n}\n\n/**\n * Captures handler execution errors based on handler type\n * @internal\n * @param error - Error to capture\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n */\nfunction captureHandlerError(error: Error, methodName: keyof MCPServerInstance, handlerName: string): void {\n try {\n const extraData: Record<string, unknown> = {};\n\n if (methodName === 'tool' || methodName === 'registerTool') {\n extraData.tool_name = handlerName;\n\n if (\n error.name === 'ProtocolValidationError' ||\n error.message.includes('validation') ||\n error.message.includes('protocol')\n ) {\n captureError(error, 'validation', extraData);\n } else if (\n error.name === 'ServerTimeoutError' ||\n error.message.includes('timed out') ||\n error.message.includes('timeout')\n ) {\n captureError(error, 'timeout', extraData);\n } else {\n captureError(error, 'tool_execution', extraData);\n }\n } else if (methodName === 'resource' || methodName === 'registerResource') {\n extraData.resource_uri = handlerName;\n captureError(error, 'resource_execution', extraData);\n } else if (methodName === 'prompt' || methodName === 'registerPrompt') {\n extraData.prompt_name = handlerName;\n captureError(error, 'prompt_execution', extraData);\n }\n } catch (_captureErr) {\n // noop\n }\n}\n\n/**\n * Wraps tool handlers to associate them with request spans.\n * Instruments both `tool` (legacy API) and `registerTool` (new API) if present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapToolHandlers(serverInstance: MCPServerInstance): void {\n if (typeof serverInstance.tool === 'function') wrapMethodHandler(serverInstance, 'tool');\n if (typeof serverInstance.registerTool === 'function') wrapMethodHandler(serverInstance, 'registerTool');\n}\n\n/**\n * Wraps resource handlers to associate them with request spans.\n * Instruments both `resource` (legacy API) and `registerResource` (new API) if present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapResourceHandlers(serverInstance: MCPServerInstance): void {\n if (typeof serverInstance.resource === 'function') wrapMethodHandler(serverInstance, 'resource');\n if (typeof serverInstance.registerResource === 'function') wrapMethodHandler(serverInstance, 'registerResource');\n}\n\n/**\n * Wraps prompt handlers to associate them with request spans.\n * Instruments both `prompt` (legacy API) and `registerPrompt` (new API) if present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapPromptHandlers(serverInstance: MCPServerInstance): void {\n if (typeof serverInstance.prompt === 'function') wrapMethodHandler(serverInstance, 'prompt');\n if (typeof serverInstance.registerPrompt === 'function') wrapMethodHandler(serverInstance, 'registerPrompt');\n}\n\n/**\n * Wraps all MCP handler types for span correlation.\n * Supports both the legacy API (`tool`, `resource`, `prompt`) and the newer API\n * (`registerTool`, `registerResource`, `registerPrompt`), instrumenting whichever methods are present.\n * @param serverInstance - MCP server instance\n */\nexport function wrapAllMCPHandlers(serverInstance: MCPServerInstance): void {\n wrapToolHandlers(serverInstance);\n wrapResourceHandlers(serverInstance);\n wrapPromptHandlers(serverInstance);\n}\n\n/**\n * Retroactively wraps handlers on tools, resources, and prompts that were registered\n * before `wrapMcpServerWithSentry` was called.\n *\n * The MCP SDK stores registered entries in private maps and invokes them via the entry's\n * own property at call time — `executor` for tools, `readCallback` for resources, and\n * `handler` for prompts. Replacing those properties\n * in-place is therefore equivalent to having wrapped the original registration call.\n *\n * NOTE: This intentionally accesses private MCP SDK internals (`_registeredTools` etc.).\n * The properties and their shapes are verified against @modelcontextprotocol/sdk source:\n * https://github.com/modelcontextprotocol/typescript-sdk/blob/2c0c481cb9dbfd15c8613f765c940a5f5bace94d/packages/server/src/server/mcp.ts#L304\n * When upgrading the MCP SDK, re-verify that these internal maps and their callable\n * properties still exist and are invoked directly (not captured by closure at registration).\n * All access is defensive — if a property is absent or not a function we skip silently.\n * @internal\n */\nexport function wrapExistingHandlers(serverInstance: MCPServerInstance): void {\n const server = serverInstance as unknown as Record<string, unknown>;\n\n // Tools: MCP SDK calls registeredTool.executor (generated from handler at registration time)\n const registeredTools = server['_registeredTools'];\n if (registeredTools && typeof registeredTools === 'object') {\n for (const [name, tool] of Object.entries(registeredTools as Record<string, Record<string, unknown>>)) {\n if (typeof tool['executor'] === 'function') {\n tool['executor'] = createWrappedHandler(tool['executor'] as MCPHandler, 'registerTool', name);\n }\n }\n }\n\n // Resources: MCP SDK calls registeredResource.readCallback\n const registeredResources = server['_registeredResources'];\n if (registeredResources && typeof registeredResources === 'object') {\n for (const [name, resource] of Object.entries(registeredResources as Record<string, Record<string, unknown>>)) {\n if (typeof resource['readCallback'] === 'function') {\n resource['readCallback'] = createWrappedHandler(\n resource['readCallback'] as MCPHandler,\n 'registerResource',\n name,\n );\n }\n }\n }\n\n // Resource templates: MCP SDK calls registeredResourceTemplate.readCallback\n const registeredResourceTemplates = server['_registeredResourceTemplates'];\n if (registeredResourceTemplates && typeof registeredResourceTemplates === 'object') {\n for (const [name, template] of Object.entries(\n registeredResourceTemplates as Record<string, Record<string, unknown>>,\n )) {\n if (typeof template['readCallback'] === 'function') {\n template['readCallback'] = createWrappedHandler(\n template['readCallback'] as MCPHandler,\n 'registerResource',\n name,\n );\n }\n }\n }\n\n // Prompts: MCP SDK calls registeredPrompt.handler\n const registeredPrompts = server['_registeredPrompts'];\n if (registeredPrompts && typeof registeredPrompts === 'object') {\n for (const [name, prompt] of Object.entries(registeredPrompts as Record<string, Record<string, unknown>>)) {\n if (typeof prompt['handler'] === 'function') {\n prompt['handler'] = createWrappedHandler(prompt['handler'] as MCPHandler, 'registerPrompt', name);\n }\n }\n }\n}\n"],"names":["fill","DEBUG_BUILD","debug","captureError"],"mappings":"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"}
@@ -19,17 +19,24 @@ const wrappedMcpServerInstances = new WeakSet();
19
19
  * and versions that expose the newer `registerTool`/`registerResource`/`registerPrompt` API (introduced in 1.x, sole API in 2.x).
20
20
  * Automatically instruments transport methods and handler functions for comprehensive monitoring.
21
21
  *
22
+ * Both call orderings are supported: wrapping before or after registering tools, resources,
23
+ * and prompts. Sentry patches the registration methods for future handlers and retroactively
24
+ * wraps any already-registered ones. Wrapping at construction time is recommended by
25
+ * convention (consistent with other SDK integrations), but is not required.
26
+ *
22
27
  * @example
23
28
  * ```typescript
24
29
  * import * as Sentry from '@sentry/core';
25
30
  * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
26
31
  * import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
27
32
  *
28
- * // Default: inputs/outputs captured based on sendDefaultPii option
33
+ * // Wrap first, then register tools this is the correct order
29
34
  * const server = Sentry.wrapMcpServerWithSentry(
30
35
  * new McpServer({ name: "my-server", version: "1.0.0" })
31
36
  * );
32
37
  *
38
+ * server.registerTool('my-tool', schema, handler);
39
+ *
33
40
  * // Explicitly control input/output capture
34
41
  * const server = Sentry.wrapMcpServerWithSentry(
35
42
  * new McpServer({ name: "my-server", version: "1.0.0" }),
@@ -81,6 +88,8 @@ function wrapMcpServerWithSentry(mcpServerInstance, options) {
81
88
 
82
89
  handlers.wrapAllMCPHandlers(serverInstance);
83
90
 
91
+ handlers.wrapExistingHandlers(serverInstance);
92
+
84
93
  wrappedMcpServerInstances.add(mcpServerInstance);
85
94
  return mcpServerInstance;
86
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/integrations/mcp-server/index.ts"],"sourcesContent":["import { getClient } from '../../currentScopes';\nimport { fill } from '../../utils/object';\nimport { wrapAllMCPHandlers } from './handlers';\nimport { wrapTransportError, wrapTransportOnClose, wrapTransportOnMessage, wrapTransportSend } from './transport';\nimport type { MCPServerInstance, McpServerWrapperOptions, MCPTransport, ResolvedMcpOptions } from './types';\nimport { validateMcpServerInstance } from './validation';\n\n/**\n * Tracks wrapped MCP server instances to prevent double-wrapping\n * @internal\n */\nconst wrappedMcpServerInstances = new WeakSet();\n\n/**\n * Wraps a MCP Server instance from the `@modelcontextprotocol/sdk` package with Sentry instrumentation.\n *\n * Compatible with versions `^1.9.0` of the `@modelcontextprotocol/sdk` package (legacy `tool`/`resource`/`prompt` API)\n * and versions that expose the newer `registerTool`/`registerResource`/`registerPrompt` API (introduced in 1.x, sole API in 2.x).\n * Automatically instruments transport methods and handler functions for comprehensive monitoring.\n *\n * @example\n * ```typescript\n * import * as Sentry from '@sentry/core';\n * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n * import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\n *\n * // Default: inputs/outputs captured based on sendDefaultPii option\n * const server = Sentry.wrapMcpServerWithSentry(\n * new McpServer({ name: \"my-server\", version: \"1.0.0\" })\n * );\n *\n * // Explicitly control input/output capture\n * const server = Sentry.wrapMcpServerWithSentry(\n * new McpServer({ name: \"my-server\", version: \"1.0.0\" }),\n * { recordInputs: true, recordOutputs: false }\n * );\n *\n * const transport = new StreamableHTTPServerTransport();\n * await server.connect(transport);\n * ```\n *\n * @param mcpServerInstance - MCP server instance to instrument\n * @param options - Optional configuration for recording inputs and outputs\n * @returns Instrumented server instance (same reference)\n */\nexport function wrapMcpServerWithSentry<S extends object>(mcpServerInstance: S, options?: McpServerWrapperOptions): S {\n if (wrappedMcpServerInstances.has(mcpServerInstance)) {\n return mcpServerInstance;\n }\n\n if (!validateMcpServerInstance(mcpServerInstance)) {\n return mcpServerInstance;\n }\n\n const serverInstance = mcpServerInstance as MCPServerInstance;\n const client = getClient();\n const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n\n const resolvedOptions: ResolvedMcpOptions = {\n recordInputs: options?.recordInputs ?? sendDefaultPii,\n recordOutputs: options?.recordOutputs ?? sendDefaultPii,\n };\n\n fill(serverInstance, 'connect', originalConnect => {\n return async function (this: MCPServerInstance, transport: MCPTransport, ...restArgs: unknown[]) {\n const result = await (originalConnect as (...args: unknown[]) => Promise<unknown>).call(\n this,\n transport,\n ...restArgs,\n );\n\n wrapTransportOnMessage(transport, resolvedOptions);\n wrapTransportSend(transport, resolvedOptions);\n wrapTransportOnClose(transport);\n wrapTransportError(transport);\n\n return result;\n };\n });\n\n wrapAllMCPHandlers(serverInstance);\n\n wrappedMcpServerInstances.add(mcpServerInstance);\n return mcpServerInstance;\n}\n"],"names":["validateMcpServerInstance","getClient","fill","transport","wrapTransportOnMessage","wrapTransportSend","wrapTransportOnClose","wrapTransportError","wrapAllMCPHandlers"],"mappings":";;;;;;;;AAOA;AACA;AACA;AACA;AACA,MAAM,yBAAA,GAA4B,IAAI,OAAO,EAAE;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAmB,iBAAiB,EAAK,OAAO,EAA+B;AACtH,EAAE,IAAI,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;AACxD,IAAI,OAAO,iBAAiB;AAC5B,EAAE;;AAEF,EAAE,IAAI,CAACA,oCAAyB,CAAC,iBAAiB,CAAC,EAAE;AACrD,IAAI,OAAO,iBAAiB;AAC5B,EAAE;;AAEF,EAAE,MAAM,cAAA,GAAiB,iBAAA;AACzB,EAAE,MAAM,MAAA,GAASC,uBAAS,EAAE;AAC5B,EAAE,MAAM,cAAA,GAAiB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC;;AAErE,EAAE,MAAM,eAAe,GAAuB;AAC9C,IAAI,YAAY,EAAE,OAAO,EAAE,YAAA,IAAgB,cAAc;AACzD,IAAI,aAAa,EAAE,OAAO,EAAE,aAAA,IAAiB,cAAc;AAC3D,GAAG;;AAEH,EAAEC,WAAI,CAAC,cAAc,EAAE,SAAS,EAAE,mBAAmB;AACrD,IAAI,OAAO,iBAAyCC,WAAS,EAAgB,GAAG,QAAQ,EAAa;AACrG,MAAM,MAAM,SAAS,MAAM,CAAC,eAAA,GAA6D,IAAI;AAC7F,QAAQ,IAAI;AACZ,QAAQA,WAAS;AACjB,QAAQ,GAAG,QAAQ;AACnB,OAAO;;AAEP,MAAMC,gCAAsB,CAACD,WAAS,EAAE,eAAe,CAAC;AACxD,MAAME,2BAAiB,CAACF,WAAS,EAAE,eAAe,CAAC;AACnD,MAAMG,8BAAoB,CAACH,WAAS,CAAC;AACrC,MAAMI,4BAAkB,CAACJ,WAAS,CAAC;;AAEnC,MAAM,OAAO,MAAM;AACnB,IAAI,CAAC;AACL,EAAE,CAAC,CAAC;;AAEJ,EAAEK,2BAAkB,CAAC,cAAc,CAAC;;AAEpC,EAAE,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAClD,EAAE,OAAO,iBAAiB;AAC1B;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/integrations/mcp-server/index.ts"],"sourcesContent":["import { getClient } from '../../currentScopes';\nimport { fill } from '../../utils/object';\nimport { wrapAllMCPHandlers, wrapExistingHandlers } from './handlers';\nimport { wrapTransportError, wrapTransportOnClose, wrapTransportOnMessage, wrapTransportSend } from './transport';\nimport type { MCPServerInstance, McpServerWrapperOptions, MCPTransport, ResolvedMcpOptions } from './types';\nimport { validateMcpServerInstance } from './validation';\n\n/**\n * Tracks wrapped MCP server instances to prevent double-wrapping\n * @internal\n */\nconst wrappedMcpServerInstances = new WeakSet();\n\n/**\n * Wraps a MCP Server instance from the `@modelcontextprotocol/sdk` package with Sentry instrumentation.\n *\n * Compatible with versions `^1.9.0` of the `@modelcontextprotocol/sdk` package (legacy `tool`/`resource`/`prompt` API)\n * and versions that expose the newer `registerTool`/`registerResource`/`registerPrompt` API (introduced in 1.x, sole API in 2.x).\n * Automatically instruments transport methods and handler functions for comprehensive monitoring.\n *\n * Both call orderings are supported: wrapping before or after registering tools, resources,\n * and prompts. Sentry patches the registration methods for future handlers and retroactively\n * wraps any already-registered ones. Wrapping at construction time is recommended by\n * convention (consistent with other SDK integrations), but is not required.\n *\n * @example\n * ```typescript\n * import * as Sentry from '@sentry/core';\n * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n * import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\n *\n * // Wrap first, then register tools this is the correct order\n * const server = Sentry.wrapMcpServerWithSentry(\n * new McpServer({ name: \"my-server\", version: \"1.0.0\" })\n * );\n *\n * server.registerTool('my-tool', schema, handler);\n *\n * // Explicitly control input/output capture\n * const server = Sentry.wrapMcpServerWithSentry(\n * new McpServer({ name: \"my-server\", version: \"1.0.0\" }),\n * { recordInputs: true, recordOutputs: false }\n * );\n *\n * const transport = new StreamableHTTPServerTransport();\n * await server.connect(transport);\n * ```\n *\n * @param mcpServerInstance - MCP server instance to instrument\n * @param options - Optional configuration for recording inputs and outputs\n * @returns Instrumented server instance (same reference)\n */\nexport function wrapMcpServerWithSentry<S extends object>(mcpServerInstance: S, options?: McpServerWrapperOptions): S {\n if (wrappedMcpServerInstances.has(mcpServerInstance)) {\n return mcpServerInstance;\n }\n\n if (!validateMcpServerInstance(mcpServerInstance)) {\n return mcpServerInstance;\n }\n\n const serverInstance = mcpServerInstance as MCPServerInstance;\n const client = getClient();\n const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n\n const resolvedOptions: ResolvedMcpOptions = {\n recordInputs: options?.recordInputs ?? sendDefaultPii,\n recordOutputs: options?.recordOutputs ?? sendDefaultPii,\n };\n\n fill(serverInstance, 'connect', originalConnect => {\n return async function (this: MCPServerInstance, transport: MCPTransport, ...restArgs: unknown[]) {\n const result = await (originalConnect as (...args: unknown[]) => Promise<unknown>).call(\n this,\n transport,\n ...restArgs,\n );\n\n wrapTransportOnMessage(transport, resolvedOptions);\n wrapTransportSend(transport, resolvedOptions);\n wrapTransportOnClose(transport);\n wrapTransportError(transport);\n\n return result;\n };\n });\n\n wrapAllMCPHandlers(serverInstance);\n\n wrapExistingHandlers(serverInstance);\n\n wrappedMcpServerInstances.add(mcpServerInstance);\n return mcpServerInstance;\n}\n"],"names":["validateMcpServerInstance","getClient","fill","transport","wrapTransportOnMessage","wrapTransportSend","wrapTransportOnClose","wrapTransportError","wrapAllMCPHandlers","wrapExistingHandlers"],"mappings":";;;;;;;;AAOA;AACA;AACA;AACA;AACA,MAAM,yBAAA,GAA4B,IAAI,OAAO,EAAE;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAmB,iBAAiB,EAAK,OAAO,EAA+B;AACtH,EAAE,IAAI,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;AACxD,IAAI,OAAO,iBAAiB;AAC5B,EAAE;;AAEF,EAAE,IAAI,CAACA,oCAAyB,CAAC,iBAAiB,CAAC,EAAE;AACrD,IAAI,OAAO,iBAAiB;AAC5B,EAAE;;AAEF,EAAE,MAAM,cAAA,GAAiB,iBAAA;AACzB,EAAE,MAAM,MAAA,GAASC,uBAAS,EAAE;AAC5B,EAAE,MAAM,cAAA,GAAiB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC;;AAErE,EAAE,MAAM,eAAe,GAAuB;AAC9C,IAAI,YAAY,EAAE,OAAO,EAAE,YAAA,IAAgB,cAAc;AACzD,IAAI,aAAa,EAAE,OAAO,EAAE,aAAA,IAAiB,cAAc;AAC3D,GAAG;;AAEH,EAAEC,WAAI,CAAC,cAAc,EAAE,SAAS,EAAE,mBAAmB;AACrD,IAAI,OAAO,iBAAyCC,WAAS,EAAgB,GAAG,QAAQ,EAAa;AACrG,MAAM,MAAM,SAAS,MAAM,CAAC,eAAA,GAA6D,IAAI;AAC7F,QAAQ,IAAI;AACZ,QAAQA,WAAS;AACjB,QAAQ,GAAG,QAAQ;AACnB,OAAO;;AAEP,MAAMC,gCAAsB,CAACD,WAAS,EAAE,eAAe,CAAC;AACxD,MAAME,2BAAiB,CAACF,WAAS,EAAE,eAAe,CAAC;AACnD,MAAMG,8BAAoB,CAACH,WAAS,CAAC;AACrC,MAAMI,4BAAkB,CAACJ,WAAS,CAAC;;AAEnC,MAAM,OAAO,MAAM;AACnB,IAAI,CAAC;AACL,EAAE,CAAC,CAAC;;AAEJ,EAAEK,2BAAkB,CAAC,cAAc,CAAC;;AAEpC,EAAEC,6BAAoB,CAAC,cAAc,CAAC;;AAEtC,EAAE,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAClD,EAAE,OAAO,iBAAiB;AAC1B;;;;"}