@sentry/node 10.61.0 → 10.63.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 (385) hide show
  1. package/build/cjs/integrations/featureFlagShims/launchDarkly.js.map +1 -1
  2. package/build/cjs/integrations/featureFlagShims/openFeature.js.map +1 -1
  3. package/build/cjs/integrations/featureFlagShims/statsig.js.map +1 -1
  4. package/build/cjs/integrations/featureFlagShims/unleash.js.map +1 -1
  5. package/build/cjs/integrations/fs/index.js.map +1 -1
  6. package/build/cjs/integrations/http.js.map +1 -1
  7. package/build/cjs/integrations/node-fetch/index.js +7 -49
  8. package/build/cjs/integrations/node-fetch/index.js.map +1 -1
  9. package/build/cjs/integrations/node-fetch/undici-instrumentation.js +266 -0
  10. package/build/cjs/integrations/node-fetch/undici-instrumentation.js.map +1 -0
  11. package/build/cjs/integrations/tracing/amqplib/index.js +2 -10
  12. package/build/cjs/integrations/tracing/amqplib/index.js.map +1 -1
  13. package/build/cjs/integrations/tracing/amqplib/vendored/instrumentation.js +117 -0
  14. package/build/cjs/integrations/tracing/amqplib/vendored/instrumentation.js.map +1 -0
  15. package/build/cjs/integrations/tracing/amqplib/vendored/patches.js +185 -0
  16. package/build/cjs/integrations/tracing/amqplib/vendored/patches.js.map +1 -0
  17. package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js +21 -1
  18. package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
  19. package/build/cjs/integrations/tracing/amqplib/vendored/types.js +0 -6
  20. package/build/cjs/integrations/tracing/amqplib/vendored/types.js.map +1 -1
  21. package/build/cjs/integrations/tracing/amqplib/vendored/utils.js +71 -80
  22. package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  23. package/build/cjs/integrations/tracing/connect/index.js.map +1 -1
  24. package/build/cjs/integrations/tracing/dataloader/index.js.map +1 -1
  25. package/build/cjs/integrations/tracing/express.js.map +1 -1
  26. package/build/cjs/integrations/tracing/fastify/index.js +7 -103
  27. package/build/cjs/integrations/tracing/fastify/index.js.map +1 -1
  28. package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +2 -3
  29. package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  30. package/build/cjs/integrations/tracing/firebase/firebase.js +1 -24
  31. package/build/cjs/integrations/tracing/firebase/firebase.js.map +1 -1
  32. package/build/cjs/integrations/tracing/firebase/otel/firebaseInstrumentation.js +3 -11
  33. package/build/cjs/integrations/tracing/firebase/otel/firebaseInstrumentation.js.map +1 -1
  34. package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js +33 -72
  35. package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  36. package/build/cjs/integrations/tracing/firebase/otel/patches/functions.js +46 -105
  37. package/build/cjs/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
  38. package/build/cjs/integrations/tracing/genericPool/index.js.map +1 -1
  39. package/build/cjs/integrations/tracing/graphql/index.js.map +1 -1
  40. package/build/cjs/integrations/tracing/hapi/index.js.map +1 -1
  41. package/build/cjs/integrations/tracing/hono/index.js.map +1 -1
  42. package/build/cjs/integrations/tracing/index.js +0 -1
  43. package/build/cjs/integrations/tracing/index.js.map +1 -1
  44. package/build/cjs/integrations/tracing/kafka/index.js.map +1 -1
  45. package/build/cjs/integrations/tracing/knex/index.js.map +1 -1
  46. package/build/cjs/integrations/tracing/koa/index.js.map +1 -1
  47. package/build/cjs/integrations/tracing/lrumemoizer/index.js.map +1 -1
  48. package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js +4 -2
  49. package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
  50. package/build/cjs/integrations/tracing/mongo/index.js.map +1 -1
  51. package/build/cjs/integrations/tracing/mongoose/index.js.map +1 -1
  52. package/build/cjs/integrations/tracing/mysql/index.js.map +1 -1
  53. package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js +34 -128
  54. package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
  55. package/build/cjs/integrations/tracing/mysql/vendored/semconv.js +0 -2
  56. package/build/cjs/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
  57. package/build/cjs/integrations/tracing/mysql/vendored/utils.js +2 -27
  58. package/build/cjs/integrations/tracing/mysql/vendored/utils.js.map +1 -1
  59. package/build/cjs/integrations/tracing/mysql2/index.js.map +1 -1
  60. package/build/cjs/integrations/tracing/postgres/index.js.map +1 -1
  61. package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
  62. package/build/cjs/integrations/tracing/prisma/index.js +1 -10
  63. package/build/cjs/integrations/tracing/prisma/index.js.map +1 -1
  64. package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js +83 -57
  65. package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +1 -1
  66. package/build/cjs/integrations/tracing/prisma/vendored/constants.js.map +1 -1
  67. package/build/cjs/integrations/tracing/prisma/vendored/global.js +2 -2
  68. package/build/cjs/integrations/tracing/prisma/vendored/global.js.map +1 -1
  69. package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js +1 -6
  70. package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
  71. package/build/cjs/integrations/tracing/redis/index.js +5 -3
  72. package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
  73. package/build/cjs/integrations/tracing/tedious/index.js.map +1 -1
  74. package/build/cjs/integrations/tracing/vercelai/constants.js.map +1 -1
  75. package/build/cjs/integrations/tracing/vercelai/index.js +4 -3
  76. package/build/cjs/integrations/tracing/vercelai/index.js.map +1 -1
  77. package/build/cjs/sdk/diagnosticsChannelInjection.js.map +1 -1
  78. package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +8 -6
  79. package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
  80. package/build/esm/integrations/featureFlagShims/launchDarkly.js.map +1 -1
  81. package/build/esm/integrations/featureFlagShims/openFeature.js.map +1 -1
  82. package/build/esm/integrations/featureFlagShims/statsig.js.map +1 -1
  83. package/build/esm/integrations/featureFlagShims/unleash.js.map +1 -1
  84. package/build/esm/integrations/fs/index.js.map +1 -1
  85. package/build/esm/integrations/http.js.map +1 -1
  86. package/build/esm/integrations/node-fetch/index.js +9 -50
  87. package/build/esm/integrations/node-fetch/index.js.map +1 -1
  88. package/build/esm/integrations/node-fetch/undici-instrumentation.js +264 -0
  89. package/build/esm/integrations/node-fetch/undici-instrumentation.js.map +1 -0
  90. package/build/esm/integrations/tracing/amqplib/index.js +3 -11
  91. package/build/esm/integrations/tracing/amqplib/index.js.map +1 -1
  92. package/build/esm/integrations/tracing/amqplib/vendored/instrumentation.js +115 -0
  93. package/build/esm/integrations/tracing/amqplib/vendored/instrumentation.js.map +1 -0
  94. package/build/esm/integrations/tracing/amqplib/vendored/patches.js +177 -0
  95. package/build/esm/integrations/tracing/amqplib/vendored/patches.js.map +1 -0
  96. package/build/esm/integrations/tracing/amqplib/vendored/semconv.js +12 -2
  97. package/build/esm/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
  98. package/build/esm/integrations/tracing/amqplib/vendored/types.js +1 -6
  99. package/build/esm/integrations/tracing/amqplib/vendored/types.js.map +1 -1
  100. package/build/esm/integrations/tracing/amqplib/vendored/utils.js +68 -78
  101. package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  102. package/build/esm/integrations/tracing/connect/index.js.map +1 -1
  103. package/build/esm/integrations/tracing/dataloader/index.js.map +1 -1
  104. package/build/esm/integrations/tracing/express.js.map +1 -1
  105. package/build/esm/integrations/tracing/fastify/index.js +8 -103
  106. package/build/esm/integrations/tracing/fastify/index.js.map +1 -1
  107. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +3 -4
  108. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  109. package/build/esm/integrations/tracing/firebase/firebase.js +3 -26
  110. package/build/esm/integrations/tracing/firebase/firebase.js.map +1 -1
  111. package/build/esm/integrations/tracing/firebase/otel/firebaseInstrumentation.js +3 -11
  112. package/build/esm/integrations/tracing/firebase/otel/firebaseInstrumentation.js.map +1 -1
  113. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +34 -73
  114. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  115. package/build/esm/integrations/tracing/firebase/otel/patches/functions.js +47 -106
  116. package/build/esm/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
  117. package/build/esm/integrations/tracing/genericPool/index.js.map +1 -1
  118. package/build/esm/integrations/tracing/graphql/index.js.map +1 -1
  119. package/build/esm/integrations/tracing/hapi/index.js.map +1 -1
  120. package/build/esm/integrations/tracing/hono/index.js.map +1 -1
  121. package/build/esm/integrations/tracing/index.js +1 -2
  122. package/build/esm/integrations/tracing/index.js.map +1 -1
  123. package/build/esm/integrations/tracing/kafka/index.js.map +1 -1
  124. package/build/esm/integrations/tracing/knex/index.js.map +1 -1
  125. package/build/esm/integrations/tracing/koa/index.js.map +1 -1
  126. package/build/esm/integrations/tracing/lrumemoizer/index.js.map +1 -1
  127. package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js +5 -3
  128. package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
  129. package/build/esm/integrations/tracing/mongo/index.js.map +1 -1
  130. package/build/esm/integrations/tracing/mongoose/index.js.map +1 -1
  131. package/build/esm/integrations/tracing/mysql/index.js.map +1 -1
  132. package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js +37 -131
  133. package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
  134. package/build/esm/integrations/tracing/mysql/vendored/semconv.js +1 -2
  135. package/build/esm/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
  136. package/build/esm/integrations/tracing/mysql/vendored/utils.js +3 -25
  137. package/build/esm/integrations/tracing/mysql/vendored/utils.js.map +1 -1
  138. package/build/esm/integrations/tracing/mysql2/index.js.map +1 -1
  139. package/build/esm/integrations/tracing/postgres/index.js.map +1 -1
  140. package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
  141. package/build/esm/integrations/tracing/prisma/index.js +2 -11
  142. package/build/esm/integrations/tracing/prisma/index.js.map +1 -1
  143. package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js +83 -57
  144. package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +1 -1
  145. package/build/esm/integrations/tracing/prisma/vendored/constants.js.map +1 -1
  146. package/build/esm/integrations/tracing/prisma/vendored/global.js +2 -2
  147. package/build/esm/integrations/tracing/prisma/vendored/global.js.map +1 -1
  148. package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js +1 -6
  149. package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
  150. package/build/esm/integrations/tracing/redis/index.js +7 -5
  151. package/build/esm/integrations/tracing/redis/index.js.map +1 -1
  152. package/build/esm/integrations/tracing/tedious/index.js.map +1 -1
  153. package/build/esm/integrations/tracing/vercelai/constants.js.map +1 -1
  154. package/build/esm/integrations/tracing/vercelai/index.js +5 -4
  155. package/build/esm/integrations/tracing/vercelai/index.js.map +1 -1
  156. package/build/esm/package.json +1 -1
  157. package/build/esm/sdk/diagnosticsChannelInjection.js.map +1 -1
  158. package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +9 -7
  159. package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
  160. package/build/types/integrations/featureFlagShims/launchDarkly.d.ts +3 -1
  161. package/build/types/integrations/featureFlagShims/launchDarkly.d.ts.map +1 -1
  162. package/build/types/integrations/featureFlagShims/openFeature.d.ts +3 -1
  163. package/build/types/integrations/featureFlagShims/openFeature.d.ts.map +1 -1
  164. package/build/types/integrations/featureFlagShims/statsig.d.ts +3 -1
  165. package/build/types/integrations/featureFlagShims/statsig.d.ts.map +1 -1
  166. package/build/types/integrations/featureFlagShims/unleash.d.ts +3 -1
  167. package/build/types/integrations/featureFlagShims/unleash.d.ts.map +1 -1
  168. package/build/types/integrations/fs/index.d.ts +3 -1
  169. package/build/types/integrations/fs/index.d.ts.map +1 -1
  170. package/build/types/integrations/http.d.ts +3 -1
  171. package/build/types/integrations/http.d.ts.map +1 -1
  172. package/build/types/integrations/node-fetch/index.d.ts +4 -35
  173. package/build/types/integrations/node-fetch/index.d.ts.map +1 -1
  174. package/build/types/integrations/node-fetch/types.d.ts +96 -0
  175. package/build/types/integrations/node-fetch/types.d.ts.map +1 -0
  176. package/build/types/integrations/node-fetch/undici-instrumentation.d.ts +14 -0
  177. package/build/types/integrations/node-fetch/undici-instrumentation.d.ts.map +1 -0
  178. package/build/types/integrations/tracing/amqplib/index.d.ts +4 -2
  179. package/build/types/integrations/tracing/amqplib/index.d.ts.map +1 -1
  180. package/build/types/integrations/tracing/amqplib/vendored/instrumentation.d.ts +11 -0
  181. package/build/types/integrations/tracing/amqplib/vendored/instrumentation.d.ts.map +1 -0
  182. package/build/types/integrations/tracing/amqplib/vendored/patches.d.ts +11 -0
  183. package/build/types/integrations/tracing/amqplib/vendored/patches.d.ts.map +1 -0
  184. package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts +25 -37
  185. package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts.map +1 -1
  186. package/build/types/integrations/tracing/amqplib/vendored/types.d.ts +0 -81
  187. package/build/types/integrations/tracing/amqplib/vendored/types.d.ts.map +1 -1
  188. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts +16 -9
  189. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
  190. package/build/types/integrations/tracing/anthropic-ai/index.d.ts +3 -1
  191. package/build/types/integrations/tracing/anthropic-ai/index.d.ts.map +1 -1
  192. package/build/types/integrations/tracing/connect/index.d.ts +3 -1
  193. package/build/types/integrations/tracing/connect/index.d.ts.map +1 -1
  194. package/build/types/integrations/tracing/dataloader/index.d.ts +3 -1
  195. package/build/types/integrations/tracing/dataloader/index.d.ts.map +1 -1
  196. package/build/types/integrations/tracing/express.d.ts +3 -1
  197. package/build/types/integrations/tracing/express.d.ts.map +1 -1
  198. package/build/types/integrations/tracing/fastify/index.d.ts +6 -6
  199. package/build/types/integrations/tracing/fastify/index.d.ts.map +1 -1
  200. package/build/types/integrations/tracing/fastify/v3/instrumentation.d.ts.map +1 -1
  201. package/build/types/integrations/tracing/firebase/firebase.d.ts +3 -1
  202. package/build/types/integrations/tracing/firebase/firebase.d.ts.map +1 -1
  203. package/build/types/integrations/tracing/firebase/otel/firebaseInstrumentation.d.ts +4 -9
  204. package/build/types/integrations/tracing/firebase/otel/firebaseInstrumentation.d.ts.map +1 -1
  205. package/build/types/integrations/tracing/firebase/otel/patches/firestore.d.ts +2 -5
  206. package/build/types/integrations/tracing/firebase/otel/patches/firestore.d.ts.map +1 -1
  207. package/build/types/integrations/tracing/firebase/otel/patches/functions.d.ts +3 -8
  208. package/build/types/integrations/tracing/firebase/otel/patches/functions.d.ts.map +1 -1
  209. package/build/types/integrations/tracing/firebase/otel/types.d.ts +0 -20
  210. package/build/types/integrations/tracing/firebase/otel/types.d.ts.map +1 -1
  211. package/build/types/integrations/tracing/genericPool/index.d.ts +3 -1
  212. package/build/types/integrations/tracing/genericPool/index.d.ts.map +1 -1
  213. package/build/types/integrations/tracing/google-genai/index.d.ts +3 -1
  214. package/build/types/integrations/tracing/google-genai/index.d.ts.map +1 -1
  215. package/build/types/integrations/tracing/graphql/index.d.ts +3 -1
  216. package/build/types/integrations/tracing/graphql/index.d.ts.map +1 -1
  217. package/build/types/integrations/tracing/hapi/index.d.ts +3 -1
  218. package/build/types/integrations/tracing/hapi/index.d.ts.map +1 -1
  219. package/build/types/integrations/tracing/hono/index.d.ts +3 -1
  220. package/build/types/integrations/tracing/hono/index.d.ts.map +1 -1
  221. package/build/types/integrations/tracing/index.d.ts.map +1 -1
  222. package/build/types/integrations/tracing/kafka/index.d.ts +3 -1
  223. package/build/types/integrations/tracing/kafka/index.d.ts.map +1 -1
  224. package/build/types/integrations/tracing/knex/index.d.ts +3 -1
  225. package/build/types/integrations/tracing/knex/index.d.ts.map +1 -1
  226. package/build/types/integrations/tracing/koa/index.d.ts +3 -1
  227. package/build/types/integrations/tracing/koa/index.d.ts.map +1 -1
  228. package/build/types/integrations/tracing/langchain/index.d.ts +3 -1
  229. package/build/types/integrations/tracing/langchain/index.d.ts.map +1 -1
  230. package/build/types/integrations/tracing/langgraph/index.d.ts +3 -1
  231. package/build/types/integrations/tracing/langgraph/index.d.ts.map +1 -1
  232. package/build/types/integrations/tracing/lrumemoizer/index.d.ts +3 -1
  233. package/build/types/integrations/tracing/lrumemoizer/index.d.ts.map +1 -1
  234. package/build/types/integrations/tracing/lrumemoizer/vendored/instrumentation.d.ts.map +1 -1
  235. package/build/types/integrations/tracing/mongo/index.d.ts +3 -1
  236. package/build/types/integrations/tracing/mongo/index.d.ts.map +1 -1
  237. package/build/types/integrations/tracing/mongoose/index.d.ts +3 -1
  238. package/build/types/integrations/tracing/mongoose/index.d.ts.map +1 -1
  239. package/build/types/integrations/tracing/mysql/index.d.ts +3 -1
  240. package/build/types/integrations/tracing/mysql/index.d.ts.map +1 -1
  241. package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts +3 -17
  242. package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts.map +1 -1
  243. package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts +16 -16
  244. package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts.map +1 -1
  245. package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts +0 -8
  246. package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts.map +1 -1
  247. package/build/types/integrations/tracing/mysql/vendored/utils.d.ts +6 -9
  248. package/build/types/integrations/tracing/mysql/vendored/utils.d.ts.map +1 -1
  249. package/build/types/integrations/tracing/mysql2/index.d.ts +3 -1
  250. package/build/types/integrations/tracing/mysql2/index.d.ts.map +1 -1
  251. package/build/types/integrations/tracing/openai/index.d.ts +3 -1
  252. package/build/types/integrations/tracing/openai/index.d.ts.map +1 -1
  253. package/build/types/integrations/tracing/postgres/index.d.ts +3 -1
  254. package/build/types/integrations/tracing/postgres/index.d.ts.map +1 -1
  255. package/build/types/integrations/tracing/postgresjs.d.ts +3 -1
  256. package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
  257. package/build/types/integrations/tracing/prisma/index.d.ts +5 -21
  258. package/build/types/integrations/tracing/prisma/index.d.ts.map +1 -1
  259. package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +5 -7
  260. package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts.map +1 -1
  261. package/build/types/integrations/tracing/prisma/vendored/constants.d.ts.map +1 -1
  262. package/build/types/integrations/tracing/prisma/vendored/global.d.ts.map +1 -1
  263. package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts +2 -4
  264. package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts.map +1 -1
  265. package/build/types/integrations/tracing/prisma/vendored/types.d.ts +5 -23
  266. package/build/types/integrations/tracing/prisma/vendored/types.d.ts.map +1 -1
  267. package/build/types/integrations/tracing/redis/index.d.ts +4 -2
  268. package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
  269. package/build/types/integrations/tracing/tedious/index.d.ts +3 -1
  270. package/build/types/integrations/tracing/tedious/index.d.ts.map +1 -1
  271. package/build/types/integrations/tracing/vercelai/constants.d.ts +1 -1
  272. package/build/types/integrations/tracing/vercelai/constants.d.ts.map +1 -1
  273. package/build/types/integrations/tracing/vercelai/index.d.ts +3 -2
  274. package/build/types/integrations/tracing/vercelai/index.d.ts.map +1 -1
  275. package/build/types/sdk/diagnosticsChannelInjection.d.ts +1 -1
  276. package/build/types/sdk/diagnosticsChannelInjection.d.ts.map +1 -1
  277. package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -1
  278. package/build/types-ts3.8/integrations/featureFlagShims/launchDarkly.d.ts +3 -1
  279. package/build/types-ts3.8/integrations/featureFlagShims/openFeature.d.ts +3 -1
  280. package/build/types-ts3.8/integrations/featureFlagShims/statsig.d.ts +3 -1
  281. package/build/types-ts3.8/integrations/featureFlagShims/unleash.d.ts +3 -1
  282. package/build/types-ts3.8/integrations/fs/index.d.ts +3 -1
  283. package/build/types-ts3.8/integrations/http.d.ts +3 -1
  284. package/build/types-ts3.8/integrations/node-fetch/index.d.ts +4 -35
  285. package/build/types-ts3.8/integrations/node-fetch/types.d.ts +96 -0
  286. package/build/types-ts3.8/integrations/node-fetch/undici-instrumentation.d.ts +14 -0
  287. package/build/types-ts3.8/integrations/tracing/amqplib/index.d.ts +4 -2
  288. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/instrumentation.d.ts +11 -0
  289. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/patches.d.ts +11 -0
  290. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/semconv.d.ts +25 -37
  291. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/types.d.ts +0 -81
  292. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/utils.d.ts +16 -9
  293. package/build/types-ts3.8/integrations/tracing/anthropic-ai/index.d.ts +3 -1
  294. package/build/types-ts3.8/integrations/tracing/connect/index.d.ts +3 -1
  295. package/build/types-ts3.8/integrations/tracing/dataloader/index.d.ts +3 -1
  296. package/build/types-ts3.8/integrations/tracing/express.d.ts +3 -1
  297. package/build/types-ts3.8/integrations/tracing/fastify/index.d.ts +6 -6
  298. package/build/types-ts3.8/integrations/tracing/firebase/firebase.d.ts +3 -1
  299. package/build/types-ts3.8/integrations/tracing/firebase/otel/firebaseInstrumentation.d.ts +4 -9
  300. package/build/types-ts3.8/integrations/tracing/firebase/otel/patches/firestore.d.ts +2 -5
  301. package/build/types-ts3.8/integrations/tracing/firebase/otel/patches/functions.d.ts +3 -8
  302. package/build/types-ts3.8/integrations/tracing/firebase/otel/types.d.ts +0 -20
  303. package/build/types-ts3.8/integrations/tracing/genericPool/index.d.ts +3 -1
  304. package/build/types-ts3.8/integrations/tracing/google-genai/index.d.ts +3 -1
  305. package/build/types-ts3.8/integrations/tracing/graphql/index.d.ts +3 -1
  306. package/build/types-ts3.8/integrations/tracing/hapi/index.d.ts +3 -1
  307. package/build/types-ts3.8/integrations/tracing/hono/index.d.ts +3 -1
  308. package/build/types-ts3.8/integrations/tracing/kafka/index.d.ts +3 -1
  309. package/build/types-ts3.8/integrations/tracing/knex/index.d.ts +3 -1
  310. package/build/types-ts3.8/integrations/tracing/koa/index.d.ts +3 -1
  311. package/build/types-ts3.8/integrations/tracing/langchain/index.d.ts +3 -1
  312. package/build/types-ts3.8/integrations/tracing/langgraph/index.d.ts +3 -1
  313. package/build/types-ts3.8/integrations/tracing/lrumemoizer/index.d.ts +3 -1
  314. package/build/types-ts3.8/integrations/tracing/mongo/index.d.ts +3 -1
  315. package/build/types-ts3.8/integrations/tracing/mongoose/index.d.ts +3 -1
  316. package/build/types-ts3.8/integrations/tracing/mysql/index.d.ts +3 -1
  317. package/build/types-ts3.8/integrations/tracing/mysql/vendored/instrumentation.d.ts +3 -17
  318. package/build/types-ts3.8/integrations/tracing/mysql/vendored/mysql-types.d.ts +16 -16
  319. package/build/types-ts3.8/integrations/tracing/mysql/vendored/semconv.d.ts +0 -8
  320. package/build/types-ts3.8/integrations/tracing/mysql/vendored/utils.d.ts +6 -9
  321. package/build/types-ts3.8/integrations/tracing/mysql2/index.d.ts +3 -1
  322. package/build/types-ts3.8/integrations/tracing/openai/index.d.ts +3 -1
  323. package/build/types-ts3.8/integrations/tracing/postgres/index.d.ts +3 -1
  324. package/build/types-ts3.8/integrations/tracing/postgresjs.d.ts +3 -1
  325. package/build/types-ts3.8/integrations/tracing/prisma/index.d.ts +5 -21
  326. package/build/types-ts3.8/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +5 -7
  327. package/build/types-ts3.8/integrations/tracing/prisma/vendored/instrumentation.d.ts +2 -4
  328. package/build/types-ts3.8/integrations/tracing/prisma/vendored/types.d.ts +5 -23
  329. package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +4 -2
  330. package/build/types-ts3.8/integrations/tracing/tedious/index.d.ts +3 -1
  331. package/build/types-ts3.8/integrations/tracing/vercelai/constants.d.ts +1 -1
  332. package/build/types-ts3.8/integrations/tracing/vercelai/index.d.ts +3 -2
  333. package/build/types-ts3.8/sdk/diagnosticsChannelInjection.d.ts +1 -1
  334. package/package.json +6 -5
  335. package/build/cjs/integrations/node-fetch/vendored/semconv.js +0 -28
  336. package/build/cjs/integrations/node-fetch/vendored/semconv.js.map +0 -1
  337. package/build/cjs/integrations/node-fetch/vendored/undici.js +0 -302
  338. package/build/cjs/integrations/node-fetch/vendored/undici.js.map +0 -1
  339. package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js +0 -452
  340. package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js.map +0 -1
  341. package/build/cjs/integrations/tracing/amqplib/vendored/semconv-obsolete.js +0 -24
  342. package/build/cjs/integrations/tracing/amqplib/vendored/semconv-obsolete.js.map +0 -1
  343. package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js +0 -387
  344. package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js.map +0 -1
  345. package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js +0 -9
  346. package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js.map +0 -1
  347. package/build/esm/integrations/node-fetch/vendored/semconv.js +0 -15
  348. package/build/esm/integrations/node-fetch/vendored/semconv.js.map +0 -1
  349. package/build/esm/integrations/node-fetch/vendored/undici.js +0 -300
  350. package/build/esm/integrations/node-fetch/vendored/undici.js.map +0 -1
  351. package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js +0 -450
  352. package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js.map +0 -1
  353. package/build/esm/integrations/tracing/amqplib/vendored/semconv-obsolete.js +0 -13
  354. package/build/esm/integrations/tracing/amqplib/vendored/semconv-obsolete.js.map +0 -1
  355. package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js +0 -385
  356. package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +0 -1
  357. package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js +0 -7
  358. package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js.map +0 -1
  359. package/build/types/integrations/node-fetch/vendored/internal-types.d.ts +0 -25
  360. package/build/types/integrations/node-fetch/vendored/internal-types.d.ts.map +0 -1
  361. package/build/types/integrations/node-fetch/vendored/semconv.d.ts +0 -13
  362. package/build/types/integrations/node-fetch/vendored/semconv.d.ts.map +0 -1
  363. package/build/types/integrations/node-fetch/vendored/types.d.ts +0 -60
  364. package/build/types/integrations/node-fetch/vendored/types.d.ts.map +0 -1
  365. package/build/types/integrations/node-fetch/vendored/undici.d.ts +0 -21
  366. package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +0 -1
  367. package/build/types/integrations/tracing/amqplib/vendored/amqplib.d.ts +0 -26
  368. package/build/types/integrations/tracing/amqplib/vendored/amqplib.d.ts.map +0 -1
  369. package/build/types/integrations/tracing/amqplib/vendored/semconv-obsolete.d.ts +0 -63
  370. package/build/types/integrations/tracing/amqplib/vendored/semconv-obsolete.d.ts.map +0 -1
  371. package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts +0 -27
  372. package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +0 -1
  373. package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts +0 -4
  374. package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts.map +0 -1
  375. package/build/types/integrations/tracing/mysql/vendored/types.d.ts +0 -9
  376. package/build/types/integrations/tracing/mysql/vendored/types.d.ts.map +0 -1
  377. package/build/types-ts3.8/integrations/node-fetch/vendored/internal-types.d.ts +0 -25
  378. package/build/types-ts3.8/integrations/node-fetch/vendored/semconv.d.ts +0 -13
  379. package/build/types-ts3.8/integrations/node-fetch/vendored/types.d.ts +0 -60
  380. package/build/types-ts3.8/integrations/node-fetch/vendored/undici.d.ts +0 -21
  381. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/amqplib.d.ts +0 -26
  382. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/semconv-obsolete.d.ts +0 -63
  383. package/build/types-ts3.8/integrations/tracing/fastify/vendored/instrumentation.d.ts +0 -27
  384. package/build/types-ts3.8/integrations/tracing/mysql/vendored/AttributeNames.d.ts +0 -4
  385. package/build/types-ts3.8/integrations/tracing/mysql/vendored/types.d.ts +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/v3/instrumentation.ts"],"sourcesContent":["// Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type Attributes, context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport type { Span } from '@sentry/core';\nimport {\n getClient,\n getIsolationScope,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n spanToJSON,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type {\n FastifyErrorCodes,\n FastifyInstance,\n FastifyReply,\n FastifyRequest,\n HandlerOriginal,\n HookHandlerDoneFunction,\n} from '../types';\nimport { AttributeNames, FastifyNames, FastifyTypes } from './enums/AttributeNames';\nimport type { PluginFastifyReply } from './internal-types';\nimport type { FastifyInstrumentationConfig } from './types';\nimport { endSpan, safeExecuteInTheMiddleMaybePromise, startSpan } from './utils';\n/** @knipignore */\n\nconst PACKAGE_VERSION = '0.1.0';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify-v3';\nconst ANONYMOUS_NAME = 'anonymous';\n\n// The instrumentation creates a span for invocations of lifecycle hook handlers\n// that take `(request, reply, ...[, done])` arguments. Currently this is all\n// lifecycle hooks except `onRequestAbort`.\n// https://fastify.dev/docs/latest/Reference/Hooks\nconst hooksNamesToWrap = new Set([\n 'onTimeout',\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preSerialization',\n 'preHandler',\n 'onSend',\n 'onResponse',\n 'onError',\n]);\n\n/**\n * Fastify instrumentation for OpenTelemetry\n */\nexport class FastifyInstrumentationV3 extends InstrumentationBase<FastifyInstrumentationConfig> {\n public constructor(config: FastifyInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition('fastify', ['>=3.0.0 <4'], moduleExports => {\n return this._patchConstructor(moduleExports);\n }),\n ];\n }\n\n private _hookOnRequest() {\n const instrumentation = this;\n\n return function onRequest(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n instrumentation._wrap(reply, 'send', instrumentation._patchSend());\n\n const anyRequest = request as any;\n\n const routeName = anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath;\n if (routeName) {\n setHttpServerSpanRouteAttribute(routeName);\n }\n\n const method = request.method || 'GET';\n\n getIsolationScope().setTransactionName(`${method} ${routeName}`);\n done();\n };\n }\n\n private _wrapHandler(\n pluginName: string,\n hookName: string,\n original: HandlerOriginal,\n syncFunctionWithDone: boolean,\n ): () => Promise<unknown> {\n const instrumentation = this;\n this._diag.debug('Patching fastify route.handler function');\n\n return function (this: any, ...args: unknown[]): Promise<unknown> {\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n const name = original.name || pluginName || ANONYMOUS_NAME;\n const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`;\n\n const reply = args[1] as PluginFastifyReply;\n\n const span = startSpan(reply, instrumentation.tracer, spanName, {\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE,\n [AttributeNames.PLUGIN_NAME]: pluginName,\n [AttributeNames.HOOK_NAME]: hookName,\n });\n\n const origDone = syncFunctionWithDone && (args[args.length - 1] as HookHandlerDoneFunction);\n if (origDone) {\n args[args.length - 1] = function (...doneArgs: Parameters<HookHandlerDoneFunction>) {\n endSpan(reply);\n origDone.apply(this, doneArgs);\n };\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddleMaybePromise(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (err instanceof Error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n span.recordException(err);\n }\n // async hooks should end the span as soon as the promise is resolved\n if (!syncFunctionWithDone) {\n endSpan(reply);\n }\n },\n );\n });\n };\n }\n\n private _wrapAddHook(): (original: FastifyInstance['addHook']) => () => FastifyInstance {\n const instrumentation = this;\n this._diag.debug('Patching fastify server.addHook function');\n\n // biome-ignore lint/complexity/useArrowFunction: <explanation>\n return function (original: FastifyInstance['addHook']): () => FastifyInstance {\n return function wrappedAddHook(this: any, ...args: any) {\n const name = args[0] as string;\n const handler = args[1] as HandlerOriginal;\n const pluginName = this.pluginName;\n if (!hooksNamesToWrap.has(name)) {\n return original.apply(this, args);\n }\n\n const syncFunctionWithDone =\n typeof args[args.length - 1] === 'function' && handler.constructor.name !== 'AsyncFunction';\n\n return original.apply(this, [\n name,\n instrumentation._wrapHandler(pluginName, name, handler, syncFunctionWithDone),\n ] as never);\n };\n };\n }\n\n private _patchConstructor(moduleExports: {\n fastify: () => FastifyInstance;\n errorCodes: FastifyErrorCodes | undefined;\n }): () => FastifyInstance {\n const instrumentation = this;\n\n function fastify(this: FastifyInstance, ...args: any) {\n const app: FastifyInstance = moduleExports.fastify.apply(this, args);\n app.addHook('onRequest', instrumentation._hookOnRequest());\n app.addHook('preHandler', instrumentation._hookPreHandler());\n\n instrumentClient();\n\n instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook());\n\n return app;\n }\n\n if (moduleExports.errorCodes !== undefined) {\n fastify.errorCodes = moduleExports.errorCodes;\n }\n fastify.fastify = fastify;\n fastify.default = fastify;\n return fastify;\n }\n\n private _patchSend() {\n const instrumentation = this;\n this._diag.debug('Patching fastify reply.send function');\n\n return function patchSend(original: () => FastifyReply): () => FastifyReply {\n return function send(this: FastifyReply, ...args: any) {\n const maybeError: any = args[0];\n\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n return safeExecuteInTheMiddle<FastifyReply>(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (!err && maybeError instanceof Error) {\n // eslint-disable-next-line no-param-reassign\n err = maybeError;\n }\n endSpan(this, err);\n },\n );\n };\n };\n }\n\n private _hookPreHandler() {\n const instrumentation = this;\n this._diag.debug('Patching fastify preHandler function');\n\n return function preHandler(this: any, request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n const anyRequest = request as any;\n\n const handler = anyRequest.routeOptions?.handler || anyRequest.context?.handler;\n const handlerName = handler?.name.startsWith('bound ') ? handler.name.substring(6) : handler?.name;\n const spanName = `${FastifyNames.REQUEST_HANDLER} - ${handlerName || this.pluginName || ANONYMOUS_NAME}`;\n\n const spanAttributes: Attributes = {\n [AttributeNames.PLUGIN_NAME]: this.pluginName,\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,\n // eslint-disable-next-line typescript/no-deprecated\n [SEMATTRS_HTTP_ROUTE]: anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath,\n };\n if (handlerName) {\n spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName;\n }\n const span = startSpan(reply, instrumentation.tracer, spanName, spanAttributes);\n\n addFastifyV3SpanAttributes(span);\n\n const { requestHook } = instrumentation.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { request }),\n e => {\n if (e) {\n instrumentation._diag.error('request hook failed', e);\n }\n },\n true,\n );\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n done();\n });\n };\n }\n}\n\nfunction instrumentClient(): void {\n const client = getClient();\n if (client) {\n client.on('spanStart', (span: Span) => {\n addFastifyV3SpanAttributes(span);\n });\n }\n}\n\nfunction addFastifyV3SpanAttributes(span: Span): void {\n const attributes = spanToJSON(span).data;\n\n // this is one of: middleware, request_handler\n const type = attributes['fastify.type'];\n\n // If this is already set, or we have no fastify span, no need to process again...\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n return;\n }\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.fastify',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.fastify`,\n });\n\n // Also update the name, we don't need to \"middleware - \" prefix\n const name = attributes['fastify.name'] || attributes['plugin.name'] || attributes['hook.name'];\n if (typeof name === 'string') {\n // Try removing `fastify -> ` and `@fastify/otel -> ` prefixes\n // This is a bit of a hack, and not always working for all spans\n // But it's the best we can do without a proper API\n const updatedName = name.replace(/^fastify -> /, '').replace(/^@fastify\\/otel -> /, '');\n\n span.updateName(updatedName);\n }\n}\n"],"names":["InstrumentationBase","InstrumentationNodeModuleDefinition","setHttpServerSpanRouteAttribute","getIsolationScope","FastifyNames","startSpan","AttributeNames","FastifyTypes","endSpan","context","trace","safeExecuteInTheMiddleMaybePromise","SpanStatusCode","instrumentation","safeExecuteInTheMiddle","SEMATTRS_HTTP_ROUTE","getClient","spanToJSON","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/v3/instrumentation.ts"],"sourcesContent":["// Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type Attributes, context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport type { Span } from '@sentry/core';\nimport {\n getClient,\n getIsolationScope,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n spanToJSON,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type {\n FastifyErrorCodes,\n FastifyInstance,\n FastifyReply,\n FastifyRequest,\n HandlerOriginal,\n HookHandlerDoneFunction,\n} from '../types';\nimport { AttributeNames, FastifyNames, FastifyTypes } from './enums/AttributeNames';\nimport type { PluginFastifyReply } from './internal-types';\nimport type { FastifyInstrumentationConfig } from './types';\nimport { endSpan, safeExecuteInTheMiddleMaybePromise, startSpan } from './utils';\n/** @knipignore */\n\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify-v3';\nconst ANONYMOUS_NAME = 'anonymous';\n\n// The instrumentation creates a span for invocations of lifecycle hook handlers\n// that take `(request, reply, ...[, done])` arguments. Currently this is all\n// lifecycle hooks except `onRequestAbort`.\n// https://fastify.dev/docs/latest/Reference/Hooks\nconst hooksNamesToWrap = new Set([\n 'onTimeout',\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preSerialization',\n 'preHandler',\n 'onSend',\n 'onResponse',\n 'onError',\n]);\n\n/**\n * Fastify instrumentation for OpenTelemetry\n */\nexport class FastifyInstrumentationV3 extends InstrumentationBase<FastifyInstrumentationConfig> {\n public constructor(config: FastifyInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition('fastify', ['>=3.0.0 <3.21.0'], moduleExports => {\n return this._patchConstructor(moduleExports);\n }),\n ];\n }\n\n private _hookOnRequest() {\n const instrumentation = this;\n\n return function onRequest(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n instrumentation._wrap(reply, 'send', instrumentation._patchSend());\n\n const anyRequest = request as any;\n\n const routeName = anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath;\n if (routeName) {\n setHttpServerSpanRouteAttribute(routeName);\n }\n\n const method = request.method || 'GET';\n\n getIsolationScope().setTransactionName(`${method} ${routeName}`);\n done();\n };\n }\n\n private _wrapHandler(\n pluginName: string,\n hookName: string,\n original: HandlerOriginal,\n syncFunctionWithDone: boolean,\n ): () => Promise<unknown> {\n const instrumentation = this;\n this._diag.debug('Patching fastify route.handler function');\n\n return function (this: any, ...args: unknown[]): Promise<unknown> {\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n const name = original.name || pluginName || ANONYMOUS_NAME;\n const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`;\n\n const reply = args[1] as PluginFastifyReply;\n\n const span = startSpan(reply, instrumentation.tracer, spanName, {\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE,\n [AttributeNames.PLUGIN_NAME]: pluginName,\n [AttributeNames.HOOK_NAME]: hookName,\n });\n\n const origDone = syncFunctionWithDone && (args[args.length - 1] as HookHandlerDoneFunction);\n if (origDone) {\n args[args.length - 1] = function (...doneArgs: Parameters<HookHandlerDoneFunction>) {\n endSpan(reply);\n origDone.apply(this, doneArgs);\n };\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddleMaybePromise(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (err instanceof Error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n span.recordException(err);\n }\n // async hooks should end the span as soon as the promise is resolved\n if (!syncFunctionWithDone) {\n endSpan(reply);\n }\n },\n );\n });\n };\n }\n\n private _wrapAddHook(): (original: FastifyInstance['addHook']) => () => FastifyInstance {\n const instrumentation = this;\n this._diag.debug('Patching fastify server.addHook function');\n\n // biome-ignore lint/complexity/useArrowFunction: <explanation>\n return function (original: FastifyInstance['addHook']): () => FastifyInstance {\n return function wrappedAddHook(this: any, ...args: any) {\n const name = args[0] as string;\n const handler = args[1] as HandlerOriginal;\n const pluginName = this.pluginName;\n if (!hooksNamesToWrap.has(name)) {\n return original.apply(this, args);\n }\n\n const syncFunctionWithDone =\n typeof args[args.length - 1] === 'function' && handler.constructor.name !== 'AsyncFunction';\n\n return original.apply(this, [\n name,\n instrumentation._wrapHandler(pluginName, name, handler, syncFunctionWithDone),\n ] as never);\n };\n };\n }\n\n private _patchConstructor(moduleExports: {\n fastify: () => FastifyInstance;\n errorCodes: FastifyErrorCodes | undefined;\n }): () => FastifyInstance {\n const instrumentation = this;\n\n function fastify(this: FastifyInstance, ...args: any) {\n const app: FastifyInstance = moduleExports.fastify.apply(this, args);\n app.addHook('onRequest', instrumentation._hookOnRequest());\n app.addHook('preHandler', instrumentation._hookPreHandler());\n\n instrumentClient();\n\n instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook());\n\n return app;\n }\n\n if (moduleExports.errorCodes !== undefined) {\n fastify.errorCodes = moduleExports.errorCodes;\n }\n fastify.fastify = fastify;\n fastify.default = fastify;\n return fastify;\n }\n\n private _patchSend() {\n const instrumentation = this;\n this._diag.debug('Patching fastify reply.send function');\n\n return function patchSend(original: () => FastifyReply): () => FastifyReply {\n return function send(this: FastifyReply, ...args: any) {\n const maybeError: any = args[0];\n\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n return safeExecuteInTheMiddle<FastifyReply>(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (!err && maybeError instanceof Error) {\n // eslint-disable-next-line no-param-reassign\n err = maybeError;\n }\n endSpan(this, err);\n },\n );\n };\n };\n }\n\n private _hookPreHandler() {\n const instrumentation = this;\n this._diag.debug('Patching fastify preHandler function');\n\n return function preHandler(this: any, request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n const anyRequest = request as any;\n\n const handler = anyRequest.routeOptions?.handler || anyRequest.context?.handler;\n const handlerName = handler?.name.startsWith('bound ') ? handler.name.substring(6) : handler?.name;\n const spanName = `${FastifyNames.REQUEST_HANDLER} - ${handlerName || this.pluginName || ANONYMOUS_NAME}`;\n\n const spanAttributes: Attributes = {\n [AttributeNames.PLUGIN_NAME]: this.pluginName,\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,\n // eslint-disable-next-line typescript/no-deprecated\n [SEMATTRS_HTTP_ROUTE]: anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath,\n };\n if (handlerName) {\n spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName;\n }\n const span = startSpan(reply, instrumentation.tracer, spanName, spanAttributes);\n\n addFastifyV3SpanAttributes(span);\n\n const { requestHook } = instrumentation.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { request }),\n e => {\n if (e) {\n instrumentation._diag.error('request hook failed', e);\n }\n },\n true,\n );\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n done();\n });\n };\n }\n}\n\nfunction instrumentClient(): void {\n const client = getClient();\n if (client) {\n client.on('spanStart', (span: Span) => {\n addFastifyV3SpanAttributes(span);\n });\n }\n}\n\nfunction addFastifyV3SpanAttributes(span: Span): void {\n const attributes = spanToJSON(span).data;\n\n // this is one of: middleware, request_handler\n const type = attributes['fastify.type'];\n\n // If this is already set, or we have no fastify span, no need to process again...\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n return;\n }\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.fastify',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.fastify`,\n });\n\n // Also update the name, we don't need to \"middleware - \" prefix\n const name = attributes['fastify.name'] || attributes['plugin.name'] || attributes['hook.name'];\n if (typeof name === 'string') {\n // Try removing `fastify -> ` and `@fastify/otel -> ` prefixes\n // This is a bit of a hack, and not always working for all spans\n // But it's the best we can do without a proper API\n const updatedName = name.replace(/^fastify -> /, '').replace(/^@fastify\\/otel -> /, '');\n\n span.updateName(updatedName);\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","setHttpServerSpanRouteAttribute","getIsolationScope","FastifyNames","startSpan","AttributeNames","FastifyTypes","endSpan","context","trace","safeExecuteInTheMiddleMaybePromise","SpanStatusCode","instrumentation","safeExecuteInTheMiddle","SEMATTRS_HTTP_ROUTE","getClient","spanToJSON","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":"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"}
@@ -5,30 +5,7 @@ const nodeCore = require('@sentry/node-core');
5
5
  const firebaseInstrumentation = require('./otel/firebaseInstrumentation.js');
6
6
 
7
7
  const INTEGRATION_NAME = "Firebase";
8
- const config = {
9
- firestoreSpanCreationHook: (span) => {
10
- nodeCore.addOriginToSpan(span, "auto.firebase.otel.firestore");
11
- span.setAttribute(core.SEMANTIC_ATTRIBUTE_SENTRY_OP, "db.query");
12
- },
13
- functions: {
14
- requestHook: (span) => {
15
- nodeCore.addOriginToSpan(span, "auto.firebase.otel.functions");
16
- span.setAttribute(core.SEMANTIC_ATTRIBUTE_SENTRY_OP, "http.request");
17
- },
18
- errorHook: async (_, error) => {
19
- if (error) {
20
- core.captureException(error, {
21
- mechanism: {
22
- type: "auto.firebase.otel.functions",
23
- handled: false
24
- }
25
- });
26
- await core.flush(2e3);
27
- }
28
- }
29
- }
30
- };
31
- const instrumentFirebase = nodeCore.generateInstrumentOnce(INTEGRATION_NAME, () => new firebaseInstrumentation.FirebaseInstrumentation(config));
8
+ const instrumentFirebase = nodeCore.generateInstrumentOnce(INTEGRATION_NAME, () => new firebaseInstrumentation.FirebaseInstrumentation());
32
9
  const _firebaseIntegration = (() => {
33
10
  return {
34
11
  name: INTEGRATION_NAME,
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.js","sources":["../../../../../src/integrations/tracing/firebase/firebase.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { captureException, defineIntegration, flush, SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core';\nimport { addOriginToSpan, generateInstrumentOnce } from '@sentry/node-core';\nimport { FirebaseInstrumentation, type FirebaseInstrumentationConfig } from './otel';\n\nconst INTEGRATION_NAME = 'Firebase';\n\nconst config: FirebaseInstrumentationConfig = {\n firestoreSpanCreationHook: span => {\n addOriginToSpan(span, 'auto.firebase.otel.firestore');\n\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'db.query');\n },\n functions: {\n requestHook: span => {\n addOriginToSpan(span, 'auto.firebase.otel.functions');\n\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'http.request');\n },\n errorHook: async (_, error) => {\n if (error) {\n captureException(error, {\n mechanism: {\n type: 'auto.firebase.otel.functions',\n handled: false,\n },\n });\n await flush(2000);\n }\n },\n },\n};\n\nexport const instrumentFirebase = generateInstrumentOnce(INTEGRATION_NAME, () => new FirebaseInstrumentation(config));\n\nconst _firebaseIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentFirebase();\n },\n };\n}) satisfies IntegrationFn;\n\nexport const firebaseIntegration = defineIntegration(_firebaseIntegration);\n"],"names":["addOriginToSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","captureException","flush","generateInstrumentOnce","FirebaseInstrumentation","defineIntegration"],"mappings":";;;;;;AAKA,MAAM,gBAAA,GAAmB,UAAA;AAEzB,MAAM,MAAA,GAAwC;AAAA,EAC5C,2BAA2B,CAAA,IAAA,KAAQ;AACjC,IAAAA,wBAAA,CAAgB,MAAM,8BAA8B,CAAA;AAEpD,IAAA,IAAA,CAAK,YAAA,CAAaC,mCAA8B,UAAU,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,aAAa,CAAA,IAAA,KAAQ;AACnB,MAAAD,wBAAA,CAAgB,MAAM,8BAA8B,CAAA;AAEpD,MAAA,IAAA,CAAK,YAAA,CAAaC,mCAA8B,cAAc,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,SAAA,EAAW,OAAO,CAAA,EAAG,KAAA,KAAU;AAC7B,MAAA,IAAI,KAAA,EAAO;AACT,QAAAC,qBAAA,CAAiB,KAAA,EAAO;AAAA,UACtB,SAAA,EAAW;AAAA,YACT,IAAA,EAAM,8BAAA;AAAA,YACN,OAAA,EAAS;AAAA;AACX,SACD,CAAA;AACD,QAAA,MAAMC,WAAM,GAAI,CAAA;AAAA,MAClB;AAAA,IACF;AAAA;AAEJ,CAAA;AAEO,MAAM,qBAAqBC,+BAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAIC,+CAAA,CAAwB,MAAM,CAAC;AAEpH,MAAM,wBAAwB,MAAM;AAClC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,kBAAA,EAAmB;AAAA,IACrB;AAAA,GACF;AACF,CAAA,CAAA;AAEO,MAAM,mBAAA,GAAsBC,uBAAkB,oBAAoB;;;;;"}
1
+ {"version":3,"file":"firebase.js","sources":["../../../../../src/integrations/tracing/firebase/firebase.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { FirebaseInstrumentation } from './otel';\n\nconst INTEGRATION_NAME = 'Firebase' as const;\n\nexport const instrumentFirebase = generateInstrumentOnce(INTEGRATION_NAME, () => new FirebaseInstrumentation());\n\nconst _firebaseIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentFirebase();\n },\n };\n}) satisfies IntegrationFn;\n\nexport const firebaseIntegration = defineIntegration(_firebaseIntegration);\n"],"names":["generateInstrumentOnce","FirebaseInstrumentation","defineIntegration"],"mappings":";;;;;;AAKA,MAAM,gBAAA,GAAmB,UAAA;AAElB,MAAM,qBAAqBA,+BAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAIC,iDAAyB;AAE9G,MAAM,wBAAwB,MAAM;AAClC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,kBAAA,EAAmB;AAAA,IACrB;AAAA,GACF;AACF,CAAA,CAAA;AAEO,MAAM,mBAAA,GAAsBC,uBAAkB,oBAAoB;;;;;"}
@@ -5,20 +5,12 @@ const core = require('@sentry/core');
5
5
  const firestore = require('./patches/firestore.js');
6
6
  const functions = require('./patches/functions.js');
7
7
 
8
- const DefaultFirebaseInstrumentationConfig = {};
9
8
  const firestoreSupportedVersions = [">=3.0.0 <5"];
10
9
  const functionsSupportedVersions = [">=6.0.0 <7"];
11
10
  class FirebaseInstrumentation extends instrumentation.InstrumentationBase {
12
- constructor(config = DefaultFirebaseInstrumentationConfig) {
11
+ constructor(config = {}) {
13
12
  super("@sentry/instrumentation-firebase", core.SDK_VERSION, config);
14
13
  }
15
- /**
16
- * sets config
17
- * @param config
18
- */
19
- setConfig(config = {}) {
20
- super.setConfig({ ...DefaultFirebaseInstrumentationConfig, ...config });
21
- }
22
14
  /**
23
15
  *
24
16
  * @protected
@@ -26,8 +18,8 @@ class FirebaseInstrumentation extends instrumentation.InstrumentationBase {
26
18
  // eslint-disable-next-line @typescript-eslint/naming-convention
27
19
  init() {
28
20
  const modules = [];
29
- modules.push(firestore.patchFirestore(this.tracer, firestoreSupportedVersions, this._wrap, this._unwrap, this.getConfig()));
30
- modules.push(functions.patchFunctions(this.tracer, functionsSupportedVersions, this._wrap, this._unwrap, this.getConfig()));
21
+ modules.push(firestore.patchFirestore(firestoreSupportedVersions, this._wrap, this._unwrap));
22
+ modules.push(functions.patchFunctions(functionsSupportedVersions, this._wrap, this._unwrap));
31
23
  return modules;
32
24
  }
33
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firebaseInstrumentation.js","sources":["../../../../../../src/integrations/tracing/firebase/otel/firebaseInstrumentation.ts"],"sourcesContent":["import { InstrumentationBase, type InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { patchFirestore } from './patches/firestore';\nimport { patchFunctions } from './patches/functions';\nimport type { FirebaseInstrumentationConfig } from './types';\n\nconst DefaultFirebaseInstrumentationConfig: FirebaseInstrumentationConfig = {};\nconst firestoreSupportedVersions = ['>=3.0.0 <5']; // firebase 9+\nconst functionsSupportedVersions = ['>=6.0.0 <7']; // firebase-functions v2\n\n/**\n * Instrumentation for Firebase services, specifically Firestore.\n */\nexport class FirebaseInstrumentation extends InstrumentationBase<FirebaseInstrumentationConfig> {\n public constructor(config: FirebaseInstrumentationConfig = DefaultFirebaseInstrumentationConfig) {\n super('@sentry/instrumentation-firebase', SDK_VERSION, config);\n }\n\n /**\n * sets config\n * @param config\n */\n public override setConfig(config: FirebaseInstrumentationConfig = {}): void {\n super.setConfig({ ...DefaultFirebaseInstrumentationConfig, ...config });\n }\n\n /**\n *\n * @protected\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n protected init(): InstrumentationNodeModuleDefinition | InstrumentationNodeModuleDefinition[] | void {\n const modules: InstrumentationNodeModuleDefinition[] = [];\n\n modules.push(patchFirestore(this.tracer, firestoreSupportedVersions, this._wrap, this._unwrap, this.getConfig()));\n modules.push(patchFunctions(this.tracer, functionsSupportedVersions, this._wrap, this._unwrap, this.getConfig()));\n\n return modules;\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","patchFirestore","patchFunctions"],"mappings":";;;;;;;AAMA,MAAM,uCAAsE,EAAC;AAC7E,MAAM,0BAAA,GAA6B,CAAC,YAAY,CAAA;AAChD,MAAM,0BAAA,GAA6B,CAAC,YAAY,CAAA;AAKzC,MAAM,gCAAgCA,mCAAA,CAAmD;AAAA,EACvF,WAAA,CAAY,SAAwC,oCAAA,EAAsC;AAC/F,IAAA,KAAA,CAAM,kCAAA,EAAoCC,kBAAa,MAAM,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMgB,SAAA,CAAU,MAAA,GAAwC,EAAC,EAAS;AAC1E,IAAA,KAAA,CAAM,UAAU,EAAE,GAAG,oCAAA,EAAsC,GAAG,QAAQ,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,IAAA,GAA2F;AACnG,IAAA,MAAM,UAAiD,EAAC;AAExD,IAAA,OAAA,CAAQ,IAAA,CAAKC,wBAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,0BAAA,EAA4B,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,SAAA,EAAW,CAAC,CAAA;AAChH,IAAA,OAAA,CAAQ,IAAA,CAAKC,wBAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,0BAAA,EAA4B,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,SAAA,EAAW,CAAC,CAAA;AAEhH,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;;"}
1
+ {"version":3,"file":"firebaseInstrumentation.js","sources":["../../../../../../src/integrations/tracing/firebase/otel/firebaseInstrumentation.ts"],"sourcesContent":["import type { InstrumentationConfig, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { patchFirestore } from './patches/firestore';\nimport { patchFunctions } from './patches/functions';\n\nconst firestoreSupportedVersions = ['>=3.0.0 <5']; // firebase 9+\nconst functionsSupportedVersions = ['>=6.0.0 <7']; // firebase-functions v2\n\n/**\n * Instrumentation for Firebase services, specifically Firestore.\n */\nexport class FirebaseInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super('@sentry/instrumentation-firebase', SDK_VERSION, config);\n }\n\n /**\n *\n * @protected\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n protected init(): InstrumentationNodeModuleDefinition | InstrumentationNodeModuleDefinition[] | void {\n const modules: InstrumentationNodeModuleDefinition[] = [];\n\n modules.push(patchFirestore(firestoreSupportedVersions, this._wrap, this._unwrap));\n modules.push(patchFunctions(functionsSupportedVersions, this._wrap, this._unwrap));\n\n return modules;\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","patchFirestore","patchFunctions"],"mappings":";;;;;;;AAMA,MAAM,0BAAA,GAA6B,CAAC,YAAY,CAAA;AAChD,MAAM,0BAAA,GAA6B,CAAC,YAAY,CAAA;AAKzC,MAAM,gCAAgCA,mCAAA,CAA2C;AAAA,EAC/E,WAAA,CAAY,MAAA,GAAgC,EAAC,EAAG;AACrD,IAAA,KAAA,CAAM,kCAAA,EAAoCC,kBAAa,MAAM,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,IAAA,GAA2F;AACnG,IAAA,MAAM,UAAiD,EAAC;AAExD,IAAA,OAAA,CAAQ,KAAKC,wBAAA,CAAe,0BAAA,EAA4B,KAAK,KAAA,EAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AACjF,IAAA,OAAA,CAAQ,KAAKC,wBAAA,CAAe,0BAAA,EAA4B,KAAK,KAAA,EAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAEjF,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;;"}
@@ -1,35 +1,17 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const net = require('node:net');
4
- const api = require('@opentelemetry/api');
5
4
  const instrumentation = require('@opentelemetry/instrumentation');
6
5
  const InstrumentationNodeModuleFile = require('../../../InstrumentationNodeModuleFile.js');
7
6
  const semanticConventions = require('@opentelemetry/semantic-conventions');
7
+ const core = require('@sentry/core');
8
8
 
9
- function patchFirestore(tracer, firestoreSupportedVersions, wrap, unwrap, config) {
10
- const defaultFirestoreSpanCreationHook = () => {
11
- };
12
- let firestoreSpanCreationHook = defaultFirestoreSpanCreationHook;
13
- const configFirestoreSpanCreationHook = config.firestoreSpanCreationHook;
14
- if (typeof configFirestoreSpanCreationHook === "function") {
15
- firestoreSpanCreationHook = (span) => {
16
- instrumentation.safeExecuteInTheMiddle(
17
- () => configFirestoreSpanCreationHook(span),
18
- (error) => {
19
- if (!error) {
20
- return;
21
- }
22
- api.diag.error(error?.message);
23
- },
24
- true
25
- );
26
- };
27
- }
9
+ function patchFirestore(firestoreSupportedVersions, wrap, unwrap) {
28
10
  const moduleFirestoreCJS = new instrumentation.InstrumentationNodeModuleDefinition(
29
11
  "@firebase/firestore",
30
12
  firestoreSupportedVersions,
31
13
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
- (moduleExports) => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook)
14
+ (moduleExports) => wrapMethods(moduleExports, wrap, unwrap)
33
15
  );
34
16
  const files = [
35
17
  "@firebase/firestore/dist/lite/index.node.cjs.js",
@@ -42,19 +24,19 @@ function patchFirestore(tracer, firestoreSupportedVersions, wrap, unwrap, config
42
24
  new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
43
25
  file,
44
26
  firestoreSupportedVersions,
45
- (moduleExports) => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),
27
+ (moduleExports) => wrapMethods(moduleExports, wrap, unwrap),
46
28
  (moduleExports) => unwrapMethods(moduleExports, unwrap)
47
29
  )
48
30
  );
49
31
  }
50
32
  return moduleFirestoreCJS;
51
33
  }
52
- function wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook) {
34
+ function wrapMethods(moduleExports, wrap, unwrap) {
53
35
  unwrapMethods(moduleExports, unwrap);
54
- wrap(moduleExports, "addDoc", patchAddDoc(tracer, firestoreSpanCreationHook));
55
- wrap(moduleExports, "getDocs", patchGetDocs(tracer, firestoreSpanCreationHook));
56
- wrap(moduleExports, "setDoc", patchSetDoc(tracer, firestoreSpanCreationHook));
57
- wrap(moduleExports, "deleteDoc", patchDeleteDoc(tracer, firestoreSpanCreationHook));
36
+ wrap(moduleExports, "addDoc", patchAddDoc());
37
+ wrap(moduleExports, "getDocs", patchGetDocs());
38
+ wrap(moduleExports, "setDoc", patchSetDoc());
39
+ wrap(moduleExports, "deleteDoc", patchDeleteDoc());
58
40
  return moduleExports;
59
41
  }
60
42
  function unwrapMethods(moduleExports, unwrap) {
@@ -65,71 +47,50 @@ function unwrapMethods(moduleExports, unwrap) {
65
47
  }
66
48
  return moduleExports;
67
49
  }
68
- function patchAddDoc(tracer, firestoreSpanCreationHook) {
50
+ function patchAddDoc() {
69
51
  return function addDoc(original) {
70
52
  return function(reference, data) {
71
- const span = startDBSpan(tracer, "addDoc", reference);
72
- firestoreSpanCreationHook(span);
73
- return executeContextWithSpan(span, () => {
74
- return original(reference, data);
75
- });
53
+ return startFirestoreSpan("addDoc", reference, () => original(reference, data));
76
54
  };
77
55
  };
78
56
  }
79
- function patchDeleteDoc(tracer, firestoreSpanCreationHook) {
57
+ function patchDeleteDoc() {
80
58
  return function deleteDoc(original) {
81
59
  return function(reference) {
82
- const span = startDBSpan(tracer, "deleteDoc", reference.parent || reference);
83
- firestoreSpanCreationHook(span);
84
- return executeContextWithSpan(span, () => {
85
- return original(reference);
86
- });
60
+ return startFirestoreSpan("deleteDoc", reference.parent || reference, () => original(reference));
87
61
  };
88
62
  };
89
63
  }
90
- function patchGetDocs(tracer, firestoreSpanCreationHook) {
64
+ function patchGetDocs() {
91
65
  return function getDocs(original) {
92
66
  return function(reference) {
93
- const span = startDBSpan(tracer, "getDocs", reference);
94
- firestoreSpanCreationHook(span);
95
- return executeContextWithSpan(span, () => {
96
- return original(reference);
97
- });
67
+ return startFirestoreSpan("getDocs", reference, () => original(reference));
98
68
  };
99
69
  };
100
70
  }
101
- function patchSetDoc(tracer, firestoreSpanCreationHook) {
71
+ function patchSetDoc() {
102
72
  return function setDoc(original) {
103
73
  return function(reference, data, options) {
104
- const span = startDBSpan(tracer, "setDoc", reference.parent || reference);
105
- firestoreSpanCreationHook(span);
106
- return executeContextWithSpan(span, () => {
74
+ return startFirestoreSpan("setDoc", reference.parent || reference, () => {
107
75
  return typeof options !== "undefined" ? original(reference, data, options) : original(reference, data);
108
76
  });
109
77
  };
110
78
  };
111
79
  }
112
- function executeContextWithSpan(span, callback) {
113
- return api.context.with(api.trace.setSpan(api.context.active(), span), () => {
114
- return instrumentation.safeExecuteInTheMiddle(
115
- () => {
116
- return callback();
117
- },
118
- (err) => {
119
- if (err) {
120
- span.recordException(err);
121
- }
122
- span.end();
123
- },
124
- true
125
- );
126
- });
127
- }
128
- function startDBSpan(tracer, spanName, reference) {
129
- const span = tracer.startSpan(`${spanName} ${reference.path}`, { kind: api.SpanKind.CLIENT });
130
- addAttributes(span, reference);
131
- span.setAttribute(semanticConventions.ATTR_DB_OPERATION_NAME, spanName);
132
- return span;
80
+ function startFirestoreSpan(spanName, reference, callback) {
81
+ return core.startSpan(
82
+ {
83
+ name: `${spanName} ${reference.path}`,
84
+ op: "db.query",
85
+ kind: core.SPAN_KIND.CLIENT,
86
+ attributes: {
87
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.firebase.otel.firestore",
88
+ [semanticConventions.ATTR_DB_OPERATION_NAME]: spanName,
89
+ ...buildAttributes(reference)
90
+ }
91
+ },
92
+ callback
93
+ );
133
94
  }
134
95
  function getPortAndAddress(settings) {
135
96
  let address;
@@ -164,7 +125,7 @@ function getPortAndAddress(settings) {
164
125
  port: port ? parseInt(port, 10) : void 0
165
126
  };
166
127
  }
167
- function addAttributes(span, reference) {
128
+ function buildAttributes(reference) {
168
129
  const firestoreApp = reference.firestore.app;
169
130
  const firestoreOptions = firestoreApp.options;
170
131
  const json = reference.firestore.toJSON() || {};
@@ -186,7 +147,7 @@ function addAttributes(span, reference) {
186
147
  if (port) {
187
148
  attributes[semanticConventions.ATTR_SERVER_PORT] = port;
188
149
  }
189
- span.setAttributes(attributes);
150
+ return attributes;
190
151
  }
191
152
 
192
153
  exports.getPortAndAddress = getPortAndAddress;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.js","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/firestore.ts"],"sourcesContent":["import * as net from 'node:net';\nimport type { Span, Tracer } from '@opentelemetry/api';\nimport { context, diag, SpanKind, trace } from '@opentelemetry/api';\nimport { InstrumentationNodeModuleDefinition, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile';\nimport {\n ATTR_DB_COLLECTION_NAME,\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n AddDocType,\n CollectionReference,\n DeleteDocType,\n DocumentData,\n DocumentReference,\n FirebaseApp,\n FirebaseInstrumentationConfig,\n FirebaseOptions,\n FirestoreSettings,\n FirestoreSpanCreationHook,\n GetDocsType,\n PartialWithFieldValue,\n QuerySnapshot,\n SetDocType,\n SetOptions,\n WithFieldValue,\n} from '../types';\n\n// Inline minimal types used from `shimmer` to avoid importing shimmer's types directly.\n// We only need the shape for `wrap` and `unwrap` used in this file.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerWrap = (target: any, name: string, wrapper: (...args: any[]) => any) => void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerUnwrap = (target: any, name: string) => void;\n\n/**\n *\n * @param tracer - Opentelemetry Tracer\n * @param firestoreSupportedVersions - supported version of firebase/firestore\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation wrap function\n */\nexport function patchFirestore(\n tracer: Tracer,\n firestoreSupportedVersions: string[],\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n config: FirebaseInstrumentationConfig,\n): InstrumentationNodeModuleDefinition {\n const defaultFirestoreSpanCreationHook: FirestoreSpanCreationHook = () => {};\n\n let firestoreSpanCreationHook: FirestoreSpanCreationHook = defaultFirestoreSpanCreationHook;\n const configFirestoreSpanCreationHook = config.firestoreSpanCreationHook;\n\n if (typeof configFirestoreSpanCreationHook === 'function') {\n firestoreSpanCreationHook = (span: Span) => {\n safeExecuteInTheMiddle(\n () => configFirestoreSpanCreationHook(span),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n\n const moduleFirestoreCJS = new InstrumentationNodeModuleDefinition(\n '@firebase/firestore',\n firestoreSupportedVersions,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (moduleExports: any) => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),\n );\n const files: string[] = [\n '@firebase/firestore/dist/lite/index.node.cjs.js',\n '@firebase/firestore/dist/lite/index.node.mjs.js',\n '@firebase/firestore/dist/lite/index.rn.esm2017.js',\n '@firebase/firestore/dist/lite/index.cjs.js',\n ];\n\n for (const file of files) {\n moduleFirestoreCJS.files.push(\n new InstrumentationNodeModuleFile(\n file,\n firestoreSupportedVersions,\n moduleExports => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),\n moduleExports => unwrapMethods(moduleExports, unwrap),\n ),\n );\n }\n\n return moduleFirestoreCJS;\n}\n\nfunction wrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n unwrapMethods(moduleExports, unwrap);\n\n wrap(moduleExports, 'addDoc', patchAddDoc(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'getDocs', patchGetDocs(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'setDoc', patchSetDoc(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'deleteDoc', patchDeleteDoc(tracer, firestoreSpanCreationHook));\n\n return moduleExports;\n}\n\nfunction unwrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n unwrap: ShimmerUnwrap,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n for (const method of ['addDoc', 'getDocs', 'setDoc', 'deleteDoc']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isWrapped(moduleExports[method])) {\n unwrap(moduleExports, method);\n }\n }\n return moduleExports;\n}\n\nfunction patchAddDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: AddDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n) => Promise<DocumentReference<AppModelType, DbModelType>> {\n return function addDoc(original: AddDocType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n ): Promise<DocumentReference<AppModelType, DbModelType>> {\n const span = startDBSpan(tracer, 'addDoc', reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<DocumentReference<AppModelType, DbModelType>>>(span, () => {\n return original(reference, data);\n });\n };\n };\n}\n\nfunction patchDeleteDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: DeleteDocType<AppModelType, DbModelType>,\n) => (this: FirebaseInstrumentation, reference: DocumentReference<AppModelType, DbModelType>) => Promise<void> {\n return function deleteDoc(original: DeleteDocType<AppModelType, DbModelType>) {\n return function (reference: DocumentReference<AppModelType, DbModelType>): Promise<void> {\n const span = startDBSpan(tracer, 'deleteDoc', reference.parent || reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<void>>(span, () => {\n return original(reference);\n });\n };\n };\n}\n\nfunction patchGetDocs<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: GetDocsType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n) => Promise<QuerySnapshot<AppModelType, DbModelType>> {\n return function getDocs(original: GetDocsType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n ): Promise<QuerySnapshot<AppModelType, DbModelType>> {\n const span = startDBSpan(tracer, 'getDocs', reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<QuerySnapshot<AppModelType, DbModelType>>>(span, () => {\n return original(reference);\n });\n };\n };\n}\n\nfunction patchSetDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: SetDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n) => Promise<void> {\n return function setDoc(original: SetDocType<AppModelType, DbModelType>) {\n return function (\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n ): Promise<void> {\n const span = startDBSpan(tracer, 'setDoc', reference.parent || reference);\n firestoreSpanCreationHook(span);\n\n return executeContextWithSpan<Promise<void>>(span, () => {\n return typeof options !== 'undefined' ? original(reference, data, options) : original(reference, data);\n });\n };\n };\n}\n\nfunction executeContextWithSpan<T>(span: Span, callback: () => T): T {\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle(\n (): T => {\n return callback();\n },\n err => {\n if (err) {\n span.recordException(err);\n }\n span.end();\n },\n true,\n );\n });\n}\n\nfunction startDBSpan<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n spanName: string,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): Span {\n const span = tracer.startSpan(`${spanName} ${reference.path}`, { kind: SpanKind.CLIENT });\n addAttributes(span, reference);\n span.setAttribute(ATTR_DB_OPERATION_NAME, spanName);\n return span;\n}\n\n/**\n * Gets the server address and port attributes from the Firestore settings.\n * It's best effort to extract the address and port from the settings, especially for IPv6.\n * @param span - The span to set attributes on.\n * @param settings - The Firestore settings containing host information.\n */\nexport function getPortAndAddress(settings: FirestoreSettings): {\n address?: string;\n port?: number;\n} {\n let address: string | undefined;\n let port: string | undefined;\n\n if (typeof settings.host === 'string') {\n if (settings.host.startsWith('[')) {\n // IPv6 addresses can be enclosed in square brackets, e.g., [2001:db8::1]:8080\n if (settings.host.endsWith(']')) {\n // IPv6 with square brackets without port\n address = settings.host.replace(/^\\[|\\]$/g, '');\n } else if (settings.host.includes(']:')) {\n // IPv6 with square brackets with port\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(1, lastColonIndex).replace(/^\\[|\\]$/g, '');\n port = settings.host.slice(lastColonIndex + 1);\n }\n }\n } else {\n // IPv4 or IPv6 without square brackets\n // If it's an IPv6 address without square brackets, we assume it does not have a port.\n if (net.isIPv6(settings.host)) {\n address = settings.host;\n }\n // If it's an IPv4 address, we can extract the port if it exists.\n else {\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(0, lastColonIndex);\n port = settings.host.slice(lastColonIndex + 1);\n } else {\n address = settings.host;\n }\n }\n }\n }\n return {\n address: address,\n port: port ? parseInt(port, 10) : undefined,\n };\n}\n\nfunction addAttributes<AppModelType, DbModelType extends DocumentData>(\n span: Span,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): void {\n const firestoreApp: FirebaseApp = reference.firestore.app;\n const firestoreOptions: FirebaseOptions = firestoreApp.options;\n const json: { settings?: FirestoreSettings } = reference.firestore.toJSON() || {};\n const settings: FirestoreSettings = json.settings || {};\n\n const attributes: SpanAttributes = {\n [ATTR_DB_COLLECTION_NAME]: reference.path,\n [ATTR_DB_NAMESPACE]: firestoreApp.name,\n [ATTR_DB_SYSTEM_NAME]: 'firebase.firestore',\n 'firebase.firestore.type': reference.type,\n 'firebase.firestore.options.projectId': firestoreOptions.projectId,\n 'firebase.firestore.options.appId': firestoreOptions.appId,\n 'firebase.firestore.options.messagingSenderId': firestoreOptions.messagingSenderId,\n 'firebase.firestore.options.storageBucket': firestoreOptions.storageBucket,\n };\n\n const { address, port } = getPortAndAddress(settings);\n\n if (address) {\n attributes[ATTR_SERVER_ADDRESS] = address;\n }\n if (port) {\n attributes[ATTR_SERVER_PORT] = port;\n }\n\n span.setAttributes(attributes);\n}\n"],"names":["safeExecuteInTheMiddle","diag","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","context","trace","SpanKind","ATTR_DB_OPERATION_NAME","ATTR_DB_COLLECTION_NAME","ATTR_DB_NAMESPACE","ATTR_DB_SYSTEM_NAME","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT"],"mappings":"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"}
1
+ {"version":3,"file":"firestore.js","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/firestore.ts"],"sourcesContent":["import * as net from 'node:net';\nimport { InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile';\nimport {\n ATTR_DB_COLLECTION_NAME,\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\nimport type { SpanAttributes } from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_KIND, startSpan } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n AddDocType,\n CollectionReference,\n DeleteDocType,\n DocumentData,\n DocumentReference,\n FirebaseApp,\n FirebaseOptions,\n FirestoreSettings,\n GetDocsType,\n PartialWithFieldValue,\n QuerySnapshot,\n SetDocType,\n SetOptions,\n WithFieldValue,\n} from '../types';\n\n// Inline minimal types used from `shimmer` to avoid importing shimmer's types directly.\n// We only need the shape for `wrap` and `unwrap` used in this file.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerWrap = (target: any, name: string, wrapper: (...args: any[]) => any) => void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerUnwrap = (target: any, name: string) => void;\n\n/**\n *\n * @param firestoreSupportedVersions - supported version of firebase/firestore\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation wrap function\n */\nexport function patchFirestore(\n firestoreSupportedVersions: string[],\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n): InstrumentationNodeModuleDefinition {\n const moduleFirestoreCJS = new InstrumentationNodeModuleDefinition(\n '@firebase/firestore',\n firestoreSupportedVersions,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (moduleExports: any) => wrapMethods(moduleExports, wrap, unwrap),\n );\n const files: string[] = [\n '@firebase/firestore/dist/lite/index.node.cjs.js',\n '@firebase/firestore/dist/lite/index.node.mjs.js',\n '@firebase/firestore/dist/lite/index.rn.esm2017.js',\n '@firebase/firestore/dist/lite/index.cjs.js',\n ];\n\n for (const file of files) {\n moduleFirestoreCJS.files.push(\n new InstrumentationNodeModuleFile(\n file,\n firestoreSupportedVersions,\n moduleExports => wrapMethods(moduleExports, wrap, unwrap),\n moduleExports => unwrapMethods(moduleExports, unwrap),\n ),\n );\n }\n\n return moduleFirestoreCJS;\n}\n\nfunction wrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n unwrapMethods(moduleExports, unwrap);\n\n wrap(moduleExports, 'addDoc', patchAddDoc());\n wrap(moduleExports, 'getDocs', patchGetDocs());\n wrap(moduleExports, 'setDoc', patchSetDoc());\n wrap(moduleExports, 'deleteDoc', patchDeleteDoc());\n\n return moduleExports;\n}\n\nfunction unwrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n unwrap: ShimmerUnwrap,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n for (const method of ['addDoc', 'getDocs', 'setDoc', 'deleteDoc']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isWrapped(moduleExports[method])) {\n unwrap(moduleExports, method);\n }\n }\n return moduleExports;\n}\n\nfunction patchAddDoc<AppModelType, DbModelType extends DocumentData>(): (\n original: AddDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n) => Promise<DocumentReference<AppModelType, DbModelType>> {\n return function addDoc(original: AddDocType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n ): Promise<DocumentReference<AppModelType, DbModelType>> {\n return startFirestoreSpan('addDoc', reference, () => original(reference, data));\n };\n };\n}\n\nfunction patchDeleteDoc<AppModelType, DbModelType extends DocumentData>(): (\n original: DeleteDocType<AppModelType, DbModelType>,\n) => (this: FirebaseInstrumentation, reference: DocumentReference<AppModelType, DbModelType>) => Promise<void> {\n return function deleteDoc(original: DeleteDocType<AppModelType, DbModelType>) {\n return function (reference: DocumentReference<AppModelType, DbModelType>): Promise<void> {\n return startFirestoreSpan('deleteDoc', reference.parent || reference, () => original(reference));\n };\n };\n}\n\nfunction patchGetDocs<AppModelType, DbModelType extends DocumentData>(): (\n original: GetDocsType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n) => Promise<QuerySnapshot<AppModelType, DbModelType>> {\n return function getDocs(original: GetDocsType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n ): Promise<QuerySnapshot<AppModelType, DbModelType>> {\n return startFirestoreSpan('getDocs', reference, () => original(reference));\n };\n };\n}\n\nfunction patchSetDoc<AppModelType, DbModelType extends DocumentData>(): (\n original: SetDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n) => Promise<void> {\n return function setDoc(original: SetDocType<AppModelType, DbModelType>) {\n return function (\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n ): Promise<void> {\n return startFirestoreSpan('setDoc', reference.parent || reference, () => {\n return typeof options !== 'undefined' ? original(reference, data, options) : original(reference, data);\n });\n };\n };\n}\n\nfunction startFirestoreSpan<AppModelType, DbModelType extends DocumentData, T>(\n spanName: string,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n callback: () => T,\n): T {\n return startSpan(\n {\n name: `${spanName} ${reference.path}`,\n op: 'db.query',\n kind: SPAN_KIND.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.firebase.otel.firestore',\n [ATTR_DB_OPERATION_NAME]: spanName,\n ...buildAttributes(reference),\n },\n },\n callback,\n );\n}\n\n/**\n * Gets the server address and port attributes from the Firestore settings.\n * It's best effort to extract the address and port from the settings, especially for IPv6.\n * @param settings - The Firestore settings containing host information.\n */\nexport function getPortAndAddress(settings: FirestoreSettings): {\n address?: string;\n port?: number;\n} {\n let address: string | undefined;\n let port: string | undefined;\n\n if (typeof settings.host === 'string') {\n if (settings.host.startsWith('[')) {\n // IPv6 addresses can be enclosed in square brackets, e.g., [2001:db8::1]:8080\n if (settings.host.endsWith(']')) {\n // IPv6 with square brackets without port\n address = settings.host.replace(/^\\[|\\]$/g, '');\n } else if (settings.host.includes(']:')) {\n // IPv6 with square brackets with port\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(1, lastColonIndex).replace(/^\\[|\\]$/g, '');\n port = settings.host.slice(lastColonIndex + 1);\n }\n }\n } else {\n // IPv4 or IPv6 without square brackets\n // If it's an IPv6 address without square brackets, we assume it does not have a port.\n if (net.isIPv6(settings.host)) {\n address = settings.host;\n }\n // If it's an IPv4 address, we can extract the port if it exists.\n else {\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(0, lastColonIndex);\n port = settings.host.slice(lastColonIndex + 1);\n } else {\n address = settings.host;\n }\n }\n }\n }\n return {\n address: address,\n port: port ? parseInt(port, 10) : undefined,\n };\n}\n\nfunction buildAttributes<AppModelType, DbModelType extends DocumentData>(\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): SpanAttributes {\n const firestoreApp: FirebaseApp = reference.firestore.app;\n const firestoreOptions: FirebaseOptions = firestoreApp.options;\n const json: { settings?: FirestoreSettings } = reference.firestore.toJSON() || {};\n const settings: FirestoreSettings = json.settings || {};\n\n const attributes: SpanAttributes = {\n [ATTR_DB_COLLECTION_NAME]: reference.path,\n [ATTR_DB_NAMESPACE]: firestoreApp.name,\n [ATTR_DB_SYSTEM_NAME]: 'firebase.firestore',\n 'firebase.firestore.type': reference.type,\n 'firebase.firestore.options.projectId': firestoreOptions.projectId,\n 'firebase.firestore.options.appId': firestoreOptions.appId,\n 'firebase.firestore.options.messagingSenderId': firestoreOptions.messagingSenderId,\n 'firebase.firestore.options.storageBucket': firestoreOptions.storageBucket,\n };\n\n const { address, port } = getPortAndAddress(settings);\n\n if (address) {\n attributes[ATTR_SERVER_ADDRESS] = address;\n }\n if (port) {\n attributes[ATTR_SERVER_PORT] = port;\n }\n\n return attributes;\n}\n"],"names":["InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","startSpan","SPAN_KIND","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","ATTR_DB_OPERATION_NAME","ATTR_DB_COLLECTION_NAME","ATTR_DB_NAMESPACE","ATTR_DB_SYSTEM_NAME","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT"],"mappings":"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"}