@sentry/node 10.63.0 → 10.64.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 (259) hide show
  1. package/build/cjs/index.js +15 -14
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/cjs/integrations/node-fetch.js +24 -0
  4. package/build/cjs/integrations/node-fetch.js.map +1 -0
  5. package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js +0 -6
  6. package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
  7. package/build/cjs/integrations/tracing/amqplib/vendored/utils.js +11 -10
  8. package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  9. package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js +2 -2
  10. package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
  11. package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +2 -2
  12. package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  13. package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js +9 -9
  14. package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  15. package/build/cjs/integrations/tracing/hapi/vendored/utils.js +8 -9
  16. package/build/cjs/integrations/tracing/hapi/vendored/utils.js.map +1 -1
  17. package/build/cjs/integrations/tracing/hono/index.js +7 -7
  18. package/build/cjs/integrations/tracing/hono/index.js.map +1 -1
  19. package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js +2 -1
  20. package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
  21. package/build/cjs/integrations/tracing/kafka/vendored/semconv.js +0 -12
  22. package/build/cjs/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
  23. package/build/cjs/integrations/tracing/kafka/vendored/utils.js +12 -11
  24. package/build/cjs/integrations/tracing/kafka/vendored/utils.js.map +1 -1
  25. package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +11 -10
  26. package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
  27. package/build/cjs/integrations/tracing/knex/vendored/semconv.js +0 -16
  28. package/build/cjs/integrations/tracing/knex/vendored/semconv.js.map +1 -1
  29. package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +2 -2
  30. package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
  31. package/build/cjs/integrations/tracing/koa/vendored/utils.js +2 -2
  32. package/build/cjs/integrations/tracing/koa/vendored/utils.js.map +1 -1
  33. package/build/cjs/integrations/tracing/mongo/vendored/semconv.js +0 -12
  34. package/build/cjs/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
  35. package/build/cjs/integrations/tracing/mongo/vendored/utils.js +12 -11
  36. package/build/cjs/integrations/tracing/mongo/vendored/utils.js.map +1 -1
  37. package/build/cjs/integrations/tracing/mongoose/index.js +3 -2
  38. package/build/cjs/integrations/tracing/mongoose/index.js.map +1 -1
  39. package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js +11 -8
  40. package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
  41. package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js +0 -12
  42. package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
  43. package/build/cjs/integrations/tracing/mongoose/vendored/utils.js +9 -9
  44. package/build/cjs/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
  45. package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js +9 -8
  46. package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
  47. package/build/cjs/integrations/tracing/mysql/vendored/semconv.js +0 -12
  48. package/build/cjs/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
  49. package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +7 -4
  50. package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
  51. package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js +0 -12
  52. package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
  53. package/build/cjs/integrations/tracing/mysql2/vendored/utils.js +7 -4
  54. package/build/cjs/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
  55. package/build/cjs/integrations/tracing/postgres/vendored/semconv.js +0 -12
  56. package/build/cjs/integrations/tracing/postgres/vendored/semconv.js.map +1 -1
  57. package/build/cjs/integrations/tracing/postgres/vendored/utils.js +12 -11
  58. package/build/cjs/integrations/tracing/postgres/vendored/utils.js.map +1 -1
  59. package/build/cjs/integrations/tracing/postgresjs.js +8 -7
  60. package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
  61. package/build/cjs/integrations/tracing/prisma/index.js +48 -53
  62. package/build/cjs/integrations/tracing/prisma/index.js.map +1 -1
  63. package/build/cjs/integrations/tracing/redis/cache.js +41 -0
  64. package/build/cjs/integrations/tracing/redis/cache.js.map +1 -0
  65. package/build/cjs/integrations/tracing/redis/index.js +14 -36
  66. package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
  67. package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +22 -13
  68. package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
  69. package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +21 -15
  70. package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
  71. package/build/cjs/integrations/tracing/redis/vendored/semconv.js +0 -8
  72. package/build/cjs/integrations/tracing/redis/vendored/semconv.js.map +1 -1
  73. package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js +9 -8
  74. package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
  75. package/build/cjs/integrations/tracing/tedious/vendored/semconv.js +0 -12
  76. package/build/cjs/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
  77. package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +12 -2
  78. package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
  79. package/build/cjs/sdk/index.js +2 -2
  80. package/build/cjs/sdk/index.js.map +1 -1
  81. package/build/cjs/sdk/initOtel.js +36 -0
  82. package/build/cjs/sdk/initOtel.js.map +1 -1
  83. package/build/esm/index.js +2 -2
  84. package/build/esm/integrations/node-fetch.js +22 -0
  85. package/build/esm/integrations/node-fetch.js.map +1 -0
  86. package/build/esm/integrations/tracing/amqplib/vendored/semconv.js +1 -4
  87. package/build/esm/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
  88. package/build/esm/integrations/tracing/amqplib/vendored/utils.js +7 -6
  89. package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  90. package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +2 -2
  91. package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
  92. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +2 -2
  93. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  94. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +7 -7
  95. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  96. package/build/esm/integrations/tracing/hapi/vendored/utils.js +3 -4
  97. package/build/esm/integrations/tracing/hapi/vendored/utils.js.map +1 -1
  98. package/build/esm/integrations/tracing/hono/index.js +3 -3
  99. package/build/esm/integrations/tracing/hono/index.js.map +1 -1
  100. package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js +3 -2
  101. package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
  102. package/build/esm/integrations/tracing/kafka/vendored/semconv.js +1 -7
  103. package/build/esm/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
  104. package/build/esm/integrations/tracing/kafka/vendored/utils.js +11 -10
  105. package/build/esm/integrations/tracing/kafka/vendored/utils.js.map +1 -1
  106. package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +10 -9
  107. package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
  108. package/build/esm/integrations/tracing/knex/vendored/semconv.js +1 -9
  109. package/build/esm/integrations/tracing/knex/vendored/semconv.js.map +1 -1
  110. package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +2 -2
  111. package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
  112. package/build/esm/integrations/tracing/koa/vendored/utils.js +2 -2
  113. package/build/esm/integrations/tracing/koa/vendored/utils.js.map +1 -1
  114. package/build/esm/integrations/tracing/mongo/vendored/semconv.js +1 -7
  115. package/build/esm/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
  116. package/build/esm/integrations/tracing/mongo/vendored/utils.js +9 -8
  117. package/build/esm/integrations/tracing/mongo/vendored/utils.js.map +1 -1
  118. package/build/esm/integrations/tracing/mongoose/index.js +4 -3
  119. package/build/esm/integrations/tracing/mongoose/index.js.map +1 -1
  120. package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js +9 -6
  121. package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
  122. package/build/esm/integrations/tracing/mongoose/vendored/semconv.js +1 -7
  123. package/build/esm/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
  124. package/build/esm/integrations/tracing/mongoose/vendored/utils.js +10 -10
  125. package/build/esm/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
  126. package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js +8 -7
  127. package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
  128. package/build/esm/integrations/tracing/mysql/vendored/semconv.js +1 -7
  129. package/build/esm/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
  130. package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +6 -3
  131. package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
  132. package/build/esm/integrations/tracing/mysql2/vendored/semconv.js +1 -7
  133. package/build/esm/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
  134. package/build/esm/integrations/tracing/mysql2/vendored/utils.js +8 -5
  135. package/build/esm/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
  136. package/build/esm/integrations/tracing/postgres/vendored/semconv.js +1 -7
  137. package/build/esm/integrations/tracing/postgres/vendored/semconv.js.map +1 -1
  138. package/build/esm/integrations/tracing/postgres/vendored/utils.js +13 -12
  139. package/build/esm/integrations/tracing/postgres/vendored/utils.js.map +1 -1
  140. package/build/esm/integrations/tracing/postgresjs.js +7 -6
  141. package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
  142. package/build/esm/integrations/tracing/prisma/index.js +49 -54
  143. package/build/esm/integrations/tracing/prisma/index.js.map +1 -1
  144. package/build/esm/integrations/tracing/redis/cache.js +38 -0
  145. package/build/esm/integrations/tracing/redis/cache.js.map +1 -0
  146. package/build/esm/integrations/tracing/redis/index.js +9 -34
  147. package/build/esm/integrations/tracing/redis/index.js.map +1 -1
  148. package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +19 -10
  149. package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
  150. package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +16 -10
  151. package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
  152. package/build/esm/integrations/tracing/redis/vendored/semconv.js +1 -5
  153. package/build/esm/integrations/tracing/redis/vendored/semconv.js.map +1 -1
  154. package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js +8 -7
  155. package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
  156. package/build/esm/integrations/tracing/tedious/vendored/semconv.js +1 -7
  157. package/build/esm/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
  158. package/build/esm/package.json +1 -1
  159. package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +13 -4
  160. package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
  161. package/build/esm/sdk/index.js +1 -1
  162. package/build/esm/sdk/initOtel.js +38 -2
  163. package/build/esm/sdk/initOtel.js.map +1 -1
  164. package/build/types/index.d.ts +1 -1
  165. package/build/types/index.d.ts.map +1 -1
  166. package/build/types/integrations/node-fetch.d.ts +9 -0
  167. package/build/types/integrations/node-fetch.d.ts.map +1 -0
  168. package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts +0 -6
  169. package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts.map +1 -1
  170. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
  171. package/build/types/integrations/tracing/hapi/vendored/utils.d.ts.map +1 -1
  172. package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts +5 -63
  173. package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts.map +1 -1
  174. package/build/types/integrations/tracing/kafka/vendored/utils.d.ts.map +1 -1
  175. package/build/types/integrations/tracing/knex/vendored/semconv.d.ts +0 -32
  176. package/build/types/integrations/tracing/knex/vendored/semconv.d.ts.map +1 -1
  177. package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts +1 -37
  178. package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts.map +1 -1
  179. package/build/types/integrations/tracing/mongo/vendored/utils.d.ts.map +1 -1
  180. package/build/types/integrations/tracing/mongoose/index.d.ts.map +1 -1
  181. package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts.map +1 -1
  182. package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -48
  183. package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts.map +1 -1
  184. package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts.map +1 -1
  185. package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts.map +1 -1
  186. package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts +1 -62
  187. package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts.map +1 -1
  188. package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
  189. package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts +0 -6
  190. package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts.map +1 -1
  191. package/build/types/integrations/tracing/mysql2/vendored/utils.d.ts.map +1 -1
  192. package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts +1 -50
  193. package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts.map +1 -1
  194. package/build/types/integrations/tracing/postgres/vendored/utils.d.ts.map +1 -1
  195. package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
  196. package/build/types/integrations/tracing/prisma/index.d.ts.map +1 -1
  197. package/build/types/integrations/tracing/redis/cache.d.ts +22 -0
  198. package/build/types/integrations/tracing/redis/cache.d.ts.map +1 -0
  199. package/build/types/integrations/tracing/redis/index.d.ts +2 -20
  200. package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
  201. package/build/types/integrations/tracing/redis/vendored/ioredis-instrumentation.d.ts.map +1 -1
  202. package/build/types/integrations/tracing/redis/vendored/redis-instrumentation.d.ts.map +1 -1
  203. package/build/types/integrations/tracing/redis/vendored/semconv.d.ts +0 -4
  204. package/build/types/integrations/tracing/redis/vendored/semconv.d.ts.map +1 -1
  205. package/build/types/integrations/tracing/tedious/vendored/instrumentation.d.ts.map +1 -1
  206. package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts +1 -62
  207. package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts.map +1 -1
  208. package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -0
  209. package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -1
  210. package/build/types/sdk/initOtel.d.ts +2 -3
  211. package/build/types/sdk/initOtel.d.ts.map +1 -1
  212. package/build/types-ts3.8/index.d.ts +1 -1
  213. package/build/types-ts3.8/integrations/node-fetch.d.ts +9 -0
  214. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/semconv.d.ts +0 -6
  215. package/build/types-ts3.8/integrations/tracing/kafka/vendored/semconv.d.ts +5 -63
  216. package/build/types-ts3.8/integrations/tracing/knex/vendored/semconv.d.ts +0 -32
  217. package/build/types-ts3.8/integrations/tracing/mongo/vendored/semconv.d.ts +1 -37
  218. package/build/types-ts3.8/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -48
  219. package/build/types-ts3.8/integrations/tracing/mysql/vendored/semconv.d.ts +1 -62
  220. package/build/types-ts3.8/integrations/tracing/mysql2/vendored/semconv.d.ts +0 -6
  221. package/build/types-ts3.8/integrations/tracing/postgres/vendored/semconv.d.ts +1 -50
  222. package/build/types-ts3.8/integrations/tracing/redis/cache.d.ts +22 -0
  223. package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +2 -20
  224. package/build/types-ts3.8/integrations/tracing/redis/vendored/semconv.d.ts +0 -4
  225. package/build/types-ts3.8/integrations/tracing/tedious/vendored/semconv.d.ts +1 -62
  226. package/build/types-ts3.8/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -0
  227. package/build/types-ts3.8/sdk/initOtel.d.ts +3 -4
  228. package/package.json +8 -9
  229. package/build/cjs/integrations/node-fetch/index.js +0 -38
  230. package/build/cjs/integrations/node-fetch/index.js.map +0 -1
  231. package/build/cjs/integrations/node-fetch/undici-instrumentation.js +0 -266
  232. package/build/cjs/integrations/node-fetch/undici-instrumentation.js.map +0 -1
  233. package/build/cjs/integrations/tracing/hapi/vendored/semconv.js +0 -6
  234. package/build/cjs/integrations/tracing/hapi/vendored/semconv.js.map +0 -1
  235. package/build/cjs/integrations/tracing/redis/vendored/redis-common.js +0 -34
  236. package/build/cjs/integrations/tracing/redis/vendored/redis-common.js.map +0 -1
  237. package/build/esm/integrations/node-fetch/index.js +0 -36
  238. package/build/esm/integrations/node-fetch/index.js.map +0 -1
  239. package/build/esm/integrations/node-fetch/undici-instrumentation.js +0 -264
  240. package/build/esm/integrations/node-fetch/undici-instrumentation.js.map +0 -1
  241. package/build/esm/integrations/tracing/hapi/vendored/semconv.js +0 -4
  242. package/build/esm/integrations/tracing/hapi/vendored/semconv.js.map +0 -1
  243. package/build/esm/integrations/tracing/redis/vendored/redis-common.js +0 -32
  244. package/build/esm/integrations/tracing/redis/vendored/redis-common.js.map +0 -1
  245. package/build/types/integrations/node-fetch/index.d.ts +0 -5
  246. package/build/types/integrations/node-fetch/index.d.ts.map +0 -1
  247. package/build/types/integrations/node-fetch/types.d.ts +0 -96
  248. package/build/types/integrations/node-fetch/types.d.ts.map +0 -1
  249. package/build/types/integrations/node-fetch/undici-instrumentation.d.ts +0 -14
  250. package/build/types/integrations/node-fetch/undici-instrumentation.d.ts.map +0 -1
  251. package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts +0 -13
  252. package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts.map +0 -1
  253. package/build/types/integrations/tracing/redis/vendored/redis-common.d.ts +0 -6
  254. package/build/types/integrations/tracing/redis/vendored/redis-common.d.ts.map +0 -1
  255. package/build/types-ts3.8/integrations/node-fetch/index.d.ts +0 -5
  256. package/build/types-ts3.8/integrations/node-fetch/types.d.ts +0 -96
  257. package/build/types-ts3.8/integrations/node-fetch/undici-instrumentation.d.ts +0 -14
  258. package/build/types-ts3.8/integrations/tracing/hapi/vendored/semconv.d.ts +0 -13
  259. package/build/types-ts3.8/integrations/tracing/redis/vendored/redis-common.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ioredis-instrumentation.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/ioredis-instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-ioredis-v0.62.0/packages/instrumentation-ioredis\n * - Upstream version: @opentelemetry/instrumentation-ioredis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n getActiveSpan,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport { defaultDbStatementSerializer } from './redis-common';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_VALUE_REDIS,\n} from './semconv';\nimport type { IORedisInstrumentationConfig } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-ioredis';\nconst ORIGIN = 'auto.db.otel.redis';\n\n// ioredis >= 5.11.0 publishes via diagnostics_channel, which Sentry subscribes\n// to separately, so this monkey-patching instrumentation only covers < 5.11.0.\nconst SUPPORTED_VERSIONS = ['>=2.0.0 <5.11.0'];\n\n// The raw imported `ioredis` module is either the CommonJS export or an ESM\n// namespace wrapping it on `.default`. Typed shallowly since it is only used\n// internally to reach the `Redis` prototype that holds the methods we patch.\ntype IORedisModule = {\n default?: { prototype: RedisPrototype };\n prototype: RedisPrototype;\n [Symbol.toStringTag]?: string;\n};\n\ninterface RedisPrototype {\n sendCommand: (...args: unknown[]) => unknown;\n connect: (...args: unknown[]) => unknown;\n}\n\n// The `this` of the patched methods is a Redis client instance exposing its\n// connection options.\ninterface RedisClient {\n options: { host?: string; port?: number };\n}\n\n// The in-flight command object ioredis passes to `sendCommand`. We swap its\n// `resolve`/`reject` so the span ends when the command settles.\ninterface RedisCommand {\n name: string;\n args: Array<string | Buffer>;\n resolve: (result: unknown) => void;\n reject: (err: Error) => void;\n}\n\nfunction endSpan(span: Span, err: Error | null | undefined): void {\n if (err) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n }\n span.end();\n}\n\nexport class IORedisInstrumentation extends InstrumentationBase<IORedisInstrumentationConfig> {\n public constructor(config: IORedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition(\n 'ioredis',\n SUPPORTED_VERSIONS,\n (module: IORedisModule) => {\n const moduleExports = module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n if (isWrapped(moduleExports.prototype.sendCommand)) {\n this._unwrap(moduleExports.prototype, 'sendCommand');\n }\n this._wrap(moduleExports.prototype, 'sendCommand', this._patchSendCommand());\n if (isWrapped(moduleExports.prototype.connect)) {\n this._unwrap(moduleExports.prototype, 'connect');\n }\n this._wrap(moduleExports.prototype, 'connect', this._patchConnection());\n return module;\n },\n (module: IORedisModule | undefined) => {\n if (module === undefined) return;\n const moduleExports = module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n this._unwrap(moduleExports.prototype, 'sendCommand');\n this._unwrap(moduleExports.prototype, 'connect');\n },\n ),\n ];\n }\n\n private _patchSendCommand() {\n const instrumentation = this;\n return (original: (...args: unknown[]) => unknown) => {\n return function (this: RedisClient, ...args: unknown[]): unknown {\n const cmd = args[0] as RedisCommand | undefined;\n // ioredis only creates a span when there is an active parent span\n // (the upstream `requireParentSpan` default, which Sentry never overrides).\n if (args.length < 1 || typeof cmd !== 'object' || !getActiveSpan()) {\n return original.apply(this, args);\n }\n\n const { host, port } = this.options;\n const attributes: SpanAttributes = {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_DB_STATEMENT]: defaultDbStatementSerializer(cmd.name, cmd.args),\n [ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}`,\n [ATTR_NET_PEER_NAME]: host,\n [ATTR_NET_PEER_PORT]: port,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n\n const span = startInactiveSpan({ name: cmd.name, kind: SPAN_KIND.CLIENT, attributes });\n\n try {\n const result = original.apply(this, args);\n const origResolve = cmd.resolve;\n cmd.resolve = function (response: unknown): void {\n instrumentation._callResponseHook(span, cmd, response);\n endSpan(span, null);\n origResolve(response);\n };\n const origReject = cmd.reject;\n cmd.reject = function (err: Error): void {\n endSpan(span, err);\n origReject(err);\n };\n return result;\n } catch (error) {\n endSpan(span, error as Error);\n throw error;\n }\n };\n };\n }\n\n private _patchConnection() {\n return (original: (...args: unknown[]) => unknown) => {\n return function (this: RedisClient, ...args: unknown[]): unknown {\n if (!getActiveSpan()) {\n return original.apply(this, args);\n }\n\n const { host, port } = this.options;\n const attributes: SpanAttributes = {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_DB_STATEMENT]: 'connect',\n [ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}`,\n [ATTR_NET_PEER_NAME]: host,\n [ATTR_NET_PEER_PORT]: port,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n\n const span = startInactiveSpan({ name: 'connect', kind: SPAN_KIND.CLIENT, attributes });\n\n try {\n const result = original.apply(this, args) as Promise<unknown> | undefined;\n if (result instanceof Promise) {\n return result.then(\n (value: unknown) => {\n endSpan(span, null);\n return value;\n },\n (error: Error) => {\n endSpan(span, error);\n return Promise.reject(error);\n },\n );\n }\n endSpan(span, null);\n return result;\n } catch (error) {\n endSpan(span, error as Error);\n throw error;\n }\n };\n };\n }\n\n private _callResponseHook(span: Span, cmd: RedisCommand, response: unknown): void {\n const { responseHook } = this.getConfig();\n if (!responseHook) {\n return;\n }\n try {\n responseHook(span, cmd.name, cmd.args, response);\n } catch {\n // ignore errors thrown from the user-provided response hook\n }\n }\n}\n"],"names":["SPAN_STATUS_ERROR","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","getActiveSpan","ATTR_DB_SYSTEM","DB_SYSTEM_VALUE_REDIS","ATTR_DB_STATEMENT","defaultDbStatementSerializer","ATTR_DB_CONNECTION_STRING","ATTR_NET_PEER_NAME","ATTR_NET_PEER_PORT","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","startInactiveSpan","SPAN_KIND"],"mappings":"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"}
1
+ {"version":3,"file":"ioredis-instrumentation.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/ioredis-instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-ioredis-v0.62.0/packages/instrumentation-ioredis\n * - Upstream version: @opentelemetry/instrumentation-ioredis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n getActiveSpan,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport { DB_STATEMENT, DB_SYSTEM, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport { defaultDbStatementSerializer } from '@sentry/server-utils';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_REDIS } from './semconv';\nimport type { IORedisInstrumentationConfig } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-ioredis';\nconst ORIGIN = 'auto.db.otel.redis';\n\n// ioredis >= 5.11.0 publishes via diagnostics_channel, which Sentry subscribes\n// to separately, so this monkey-patching instrumentation only covers < 5.11.0.\nconst SUPPORTED_VERSIONS = ['>=2.0.0 <5.11.0'];\n\n// The raw imported `ioredis` module is either the CommonJS export or an ESM\n// namespace wrapping it on `.default`. Typed shallowly since it is only used\n// internally to reach the `Redis` prototype that holds the methods we patch.\ntype IORedisModule = {\n default?: { prototype: RedisPrototype };\n prototype: RedisPrototype;\n [Symbol.toStringTag]?: string;\n};\n\ninterface RedisPrototype {\n sendCommand: (...args: unknown[]) => unknown;\n connect: (...args: unknown[]) => unknown;\n}\n\n// The `this` of the patched methods is a Redis client instance exposing its\n// connection options.\ninterface RedisClient {\n options: { host?: string; port?: number };\n}\n\n// The in-flight command object ioredis passes to `sendCommand`. We swap its\n// `resolve`/`reject` so the span ends when the command settles.\ninterface RedisCommand {\n name: string;\n args: Array<string | Buffer>;\n resolve: (result: unknown) => void;\n reject: (err: Error) => void;\n}\n\nfunction endSpan(span: Span, err: Error | null | undefined): void {\n if (err) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n }\n span.end();\n}\n\nexport class IORedisInstrumentation extends InstrumentationBase<IORedisInstrumentationConfig> {\n public constructor(config: IORedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition(\n 'ioredis',\n SUPPORTED_VERSIONS,\n (module: IORedisModule) => {\n const moduleExports = module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n if (isWrapped(moduleExports.prototype.sendCommand)) {\n this._unwrap(moduleExports.prototype, 'sendCommand');\n }\n this._wrap(moduleExports.prototype, 'sendCommand', this._patchSendCommand());\n if (isWrapped(moduleExports.prototype.connect)) {\n this._unwrap(moduleExports.prototype, 'connect');\n }\n this._wrap(moduleExports.prototype, 'connect', this._patchConnection());\n return module;\n },\n (module: IORedisModule | undefined) => {\n if (module === undefined) return;\n const moduleExports = module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n this._unwrap(moduleExports.prototype, 'sendCommand');\n this._unwrap(moduleExports.prototype, 'connect');\n },\n ),\n ];\n }\n\n private _patchSendCommand() {\n const instrumentation = this;\n return (original: (...args: unknown[]) => unknown) => {\n return function (this: RedisClient, ...args: unknown[]): unknown {\n const cmd = args[0] as RedisCommand | undefined;\n // ioredis only creates a span when there is an active parent span\n // (the upstream `requireParentSpan` default, which Sentry never overrides).\n if (args.length < 1 || typeof cmd !== 'object' || !getActiveSpan()) {\n return original.apply(this, args);\n }\n\n const { host, port } = this.options;\n const attributes: SpanAttributes = {\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_STATEMENT]: defaultDbStatementSerializer(cmd.name, cmd.args),\n [ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}`,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_NAME]: host,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_PORT]: port,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n\n const span = startInactiveSpan({ name: cmd.name, kind: SPAN_KIND.CLIENT, attributes });\n\n try {\n const result = original.apply(this, args);\n const origResolve = cmd.resolve;\n cmd.resolve = function (response: unknown): void {\n instrumentation._callResponseHook(span, cmd, response);\n endSpan(span, null);\n origResolve(response);\n };\n const origReject = cmd.reject;\n cmd.reject = function (err: Error): void {\n endSpan(span, err);\n origReject(err);\n };\n return result;\n } catch (error) {\n endSpan(span, error as Error);\n throw error;\n }\n };\n };\n }\n\n private _patchConnection() {\n return (original: (...args: unknown[]) => unknown) => {\n return function (this: RedisClient, ...args: unknown[]): unknown {\n if (!getActiveSpan()) {\n return original.apply(this, args);\n }\n\n const { host, port } = this.options;\n const attributes: SpanAttributes = {\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_STATEMENT]: 'connect',\n [ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}`,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_NAME]: host,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_PORT]: port,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n\n const span = startInactiveSpan({ name: 'connect', kind: SPAN_KIND.CLIENT, attributes });\n\n try {\n const result = original.apply(this, args) as Promise<unknown> | undefined;\n if (result instanceof Promise) {\n return result.then(\n (value: unknown) => {\n endSpan(span, null);\n return value;\n },\n (error: Error) => {\n endSpan(span, error);\n return Promise.reject(error);\n },\n );\n }\n endSpan(span, null);\n return result;\n } catch (error) {\n endSpan(span, error as Error);\n throw error;\n }\n };\n };\n }\n\n private _callResponseHook(span: Span, cmd: RedisCommand, response: unknown): void {\n const { responseHook } = this.getConfig();\n if (!responseHook) {\n return;\n }\n try {\n responseHook(span, cmd.name, cmd.args, response);\n } catch {\n // ignore errors thrown from the user-provided response hook\n }\n }\n}\n"],"names":["SPAN_STATUS_ERROR","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","getActiveSpan","attributes","DB_SYSTEM","DB_SYSTEM_VALUE_REDIS","DB_STATEMENT","defaultDbStatementSerializer","ATTR_DB_CONNECTION_STRING","NET_PEER_NAME","NET_PEER_PORT","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","startInactiveSpan","SPAN_KIND"],"mappings":"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"}
@@ -2,9 +2,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const instrumentation = require('@opentelemetry/instrumentation');
4
4
  const core = require('@sentry/core');
5
+ const attributes = require('@sentry/conventions/attributes');
6
+ const serverUtils = require('@sentry/server-utils');
5
7
  const debugBuild = require('../../../../debug-build.js');
6
8
  const InstrumentationNodeModuleFile = require('../../InstrumentationNodeModuleFile.js');
7
- const redisCommon = require('./redis-common.js');
8
9
  const semconv = require('./semconv.js');
9
10
 
10
11
  const PACKAGE_NAME = "@sentry/instrumentation-redis";
@@ -43,9 +44,12 @@ function removeCredentialsFromDBConnectionStringAttribute(url) {
43
44
  }
44
45
  function getClientAttributes(options) {
45
46
  return {
46
- [semconv.ATTR_DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_REDIS,
47
- [semconv.ATTR_NET_PEER_NAME]: options?.socket?.host,
48
- [semconv.ATTR_NET_PEER_PORT]: options?.socket?.port,
47
+ // oxlint-disable-next-line typescript/no-deprecated
48
+ [attributes.DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_REDIS,
49
+ // oxlint-disable-next-line typescript/no-deprecated
50
+ [attributes.NET_PEER_NAME]: options?.socket?.host,
51
+ // oxlint-disable-next-line typescript/no-deprecated
52
+ [attributes.NET_PEER_PORT]: options?.socket?.port,
49
53
  [semconv.ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(options?.url),
50
54
  [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN
51
55
  };
@@ -80,22 +84,24 @@ const _RedisInstrumentationV2_V3 = class _RedisInstrumentationV2_V3 extends inst
80
84
  if (arguments.length !== 1 || typeof cmd !== "object") {
81
85
  return original.apply(this, arguments);
82
86
  }
83
- const attributes = {
84
- [semconv.ATTR_DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_REDIS,
85
- [semconv.ATTR_DB_STATEMENT]: redisCommon.defaultDbStatementSerializer(cmd.command, cmd.args),
87
+ const attributes$1 = {
88
+ // oxlint-disable-next-line typescript/no-deprecated
89
+ [attributes.DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_REDIS,
90
+ // oxlint-disable-next-line typescript/no-deprecated
91
+ [attributes.DB_STATEMENT]: serverUtils.defaultDbStatementSerializer(cmd.command, cmd.args),
86
92
  [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN
87
93
  };
88
94
  if (this.connection_options) {
89
- attributes[semconv.ATTR_NET_PEER_NAME] = this.connection_options.host;
90
- attributes[semconv.ATTR_NET_PEER_PORT] = this.connection_options.port;
95
+ attributes$1[attributes.NET_PEER_NAME] = this.connection_options.host;
96
+ attributes$1[attributes.NET_PEER_PORT] = this.connection_options.port;
91
97
  }
92
98
  if (this.address) {
93
- attributes[semconv.ATTR_DB_CONNECTION_STRING] = `redis://${this.address}`;
99
+ attributes$1[semconv.ATTR_DB_CONNECTION_STRING] = `redis://${this.address}`;
94
100
  }
95
101
  const span = core.startInactiveSpan({
96
102
  name: `${_RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`,
97
103
  kind: core.SPAN_KIND.CLIENT,
98
- attributes
104
+ attributes: attributes$1
99
105
  });
100
106
  const originalCallback = arguments[0].callback;
101
107
  if (originalCallback) {
@@ -332,15 +338,15 @@ const _RedisInstrumentationV4_V5 = class _RedisInstrumentationV4_V5 extends inst
332
338
  const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS];
333
339
  const commandName = redisCommandArguments[0];
334
340
  const commandArgs = redisCommandArguments.slice(1);
335
- const attributes = getClientAttributes(clientOptions);
336
- const dbStatement = redisCommon.defaultDbStatementSerializer(commandName, commandArgs);
341
+ const attributes$1 = getClientAttributes(clientOptions);
342
+ const dbStatement = serverUtils.defaultDbStatementSerializer(commandName, commandArgs);
337
343
  if (dbStatement != null) {
338
- attributes[semconv.ATTR_DB_STATEMENT] = dbStatement;
344
+ attributes$1[attributes.DB_STATEMENT] = dbStatement;
339
345
  }
340
346
  const span = core.startInactiveSpan({
341
347
  name: `${_RedisInstrumentationV4_V5.COMPONENT}-${commandName}`,
342
348
  kind: core.SPAN_KIND.CLIENT,
343
- attributes
349
+ attributes: attributes$1
344
350
  });
345
351
  const res = core.withActiveSpan(span, () => origFunction.apply(origThis, origArguments));
346
352
  if (res instanceof Promise) {
@@ -1 +1 @@
1
- {"version":3,"file":"redis-instrumentation.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/redis-instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { TracerProvider } from '@opentelemetry/api';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n debug,\n getActiveSpan,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../../../../debug-build';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport { defaultDbStatementSerializer } from './redis-common';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_VALUE_REDIS,\n} from './semconv';\nimport type { RedisInstrumentationConfig, RedisResponseCustomAttributeFunction } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-redis';\nconst ORIGIN = 'auto.db.otel.redis';\n\n// node-redis >= 5.12.0 publishes via diagnostics_channel, which Sentry subscribes\n// to separately, so this monkey-patching instrumentation only covers the older\n// `redis` (v2-v3), `@redis/client`/`@node-redis/client` (v1, i.e. node-redis v4)\n// and node-redis 5.0-5.11 releases.\n\n// ---- Internal types ----\n\ninterface RedisPluginClientTypes {\n connection_options?: {\n port?: string | number;\n host?: string;\n };\n address?: string;\n}\n\ninterface RedisCommand {\n command: string;\n args: string[];\n buffer_args: boolean;\n callback: (err: Error | null, reply: unknown) => void;\n call_on_write: boolean;\n}\n\ninterface MultiErrorReply extends Error {\n replies: unknown[];\n errorIndexes: Array<number>;\n}\n\ninterface OpenSpanInfo {\n span: Span;\n commandName: string;\n commandArgs: Array<string | Buffer>;\n}\n\nconst OTEL_OPEN_SPANS = Symbol('opentelemetry.instrumentation.redis.open_spans');\nconst MULTI_COMMAND_OPTIONS = Symbol('opentelemetry.instrumentation.redis.multi_command_options');\n\n// ---- shared utils ----\n\nfunction endSpan(span: Span, err: Error | null | undefined): void {\n if (err) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n }\n span.end();\n}\n\nfunction runResponseHook(\n responseHook: RedisResponseCustomAttributeFunction | undefined,\n span: Span,\n commandName: string,\n commandArgs: Array<string | Buffer>,\n response: unknown,\n): void {\n if (!responseHook) {\n return;\n }\n try {\n responseHook(span, commandName, commandArgs, response);\n } catch {\n // never let a user-provided response hook break instrumentation\n }\n}\n\n// ---- v4-v5 utils ----\n\nfunction removeCredentialsFromDBConnectionStringAttribute(url: string | undefined): string | undefined {\n if (typeof url !== 'string' || !url) {\n return undefined;\n }\n try {\n const u = new URL(url);\n u.searchParams.delete('user_pwd');\n u.username = '';\n u.password = '';\n return u.href;\n } catch (err) {\n DEBUG_BUILD && debug.error('failed to sanitize redis connection url', err);\n }\n return undefined;\n}\n\nfunction getClientAttributes(options: any): SpanAttributes {\n return {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_NET_PEER_NAME]: options?.socket?.host,\n [ATTR_NET_PEER_PORT]: options?.socket?.port,\n [ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(options?.url),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n}\n\n// ---- RedisInstrumentationV2_V3 ----\n\nclass RedisInstrumentationV2_V3 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n init() {\n return [\n new InstrumentationNodeModuleDefinition(\n 'redis',\n ['>=2.6.0 <4'],\n (moduleExports: any) => {\n if (isWrapped(moduleExports.RedisClient.prototype['internal_send_command'])) {\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n }\n this._wrap(moduleExports.RedisClient.prototype, 'internal_send_command', this._getPatchInternalSendCommand());\n return moduleExports;\n },\n (moduleExports: any) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n },\n ),\n ];\n }\n\n private _getPatchInternalSendCommand() {\n const instrumentation = this;\n return function internal_send_command(original: Function) {\n return function internal_send_command_trace(this: RedisPluginClientTypes, cmd: RedisCommand) {\n if (arguments.length !== 1 || typeof cmd !== 'object') {\n return original.apply(this, arguments);\n }\n const attributes: SpanAttributes = {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_DB_STATEMENT]: defaultDbStatementSerializer(cmd.command, cmd.args),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n if (this.connection_options) {\n attributes[ATTR_NET_PEER_NAME] = this.connection_options.host;\n attributes[ATTR_NET_PEER_PORT] = this.connection_options.port;\n }\n if (this.address) {\n attributes[ATTR_DB_CONNECTION_STRING] = `redis://${this.address}`;\n }\n const span = startInactiveSpan({\n name: `${RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n const originalCallback = arguments[0].callback;\n if (originalCallback) {\n const parentSpan = getActiveSpan();\n arguments[0].callback = function callback(this: any, err: Error | null, reply: unknown) {\n runResponseHook(instrumentation.getConfig().responseHook, span, cmd.command, cmd.args, reply);\n endSpan(span, err);\n return withActiveSpan(parentSpan ?? null, () => originalCallback.apply(this, arguments));\n };\n }\n try {\n return original.apply(this, arguments);\n } catch (rethrow) {\n endSpan(span, rethrow as Error);\n throw rethrow;\n }\n };\n };\n }\n}\n\n// ---- RedisInstrumentationV4_V5 ----\n\nclass RedisInstrumentationV4_V5 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n init() {\n return [\n this._getInstrumentationNodeModuleDefinition('@redis/client'),\n this._getInstrumentationNodeModuleDefinition('@node-redis/client'),\n ];\n }\n\n private _getInstrumentationNodeModuleDefinition(basePackageName: string) {\n const commanderModuleFile = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/commander.js`,\n ['^1.0.0'],\n (moduleExports: any, moduleVersion?: string) => {\n const transformCommandArguments = moduleExports.transformCommandArguments;\n if (!transformCommandArguments) {\n DEBUG_BUILD && debug.error('internal instrumentation error, missing transformCommandArguments function');\n return moduleExports;\n }\n const functionToPatch = moduleVersion?.startsWith('1.0.') ? 'extendWithCommands' : 'attachCommands';\n if (isWrapped(moduleExports?.[functionToPatch])) {\n this._unwrap(moduleExports, functionToPatch);\n }\n this._wrap(moduleExports, functionToPatch, this._getPatchExtendWithCommands(transformCommandArguments));\n return moduleExports;\n },\n (moduleExports: any) => {\n if (isWrapped(moduleExports?.extendWithCommands)) {\n this._unwrap(moduleExports, 'extendWithCommands');\n }\n if (isWrapped(moduleExports?.attachCommands)) {\n this._unwrap(moduleExports, 'attachCommands');\n }\n },\n );\n\n const multiCommanderModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/multi-command.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n this._wrap(redisClientMultiCommandPrototype, 'exec', this._getPatchMultiCommandsExec());\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n this._wrap(redisClientMultiCommandPrototype, 'execAsPipeline', this._getPatchMultiCommandsExec());\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n this._wrap(redisClientMultiCommandPrototype, 'addCommand', this._getPatchMultiCommandsAddCommand());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n },\n );\n\n const clientIndexModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/index.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (redisClientPrototype?.multi) {\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n this._wrap(redisClientPrototype, 'multi', this._getPatchRedisClientMulti());\n }\n if (redisClientPrototype?.MULTI) {\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n this._wrap(redisClientPrototype, 'MULTI', this._getPatchRedisClientMulti());\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n this._wrap(redisClientPrototype, 'sendCommand', this._getPatchRedisClientSendCommand());\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n this._wrap(redisClientPrototype, 'connect', this._getPatchedClientConnect());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n },\n );\n\n return new InstrumentationNodeModuleDefinition(\n basePackageName,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => moduleExports,\n () => {},\n [commanderModuleFile, multiCommanderModule, clientIndexModule],\n );\n }\n\n private _getPatchExtendWithCommands(transformCommandArguments: Function) {\n const plugin = this;\n return function extendWithCommandsPatchWrapper(original: Function) {\n return function extendWithCommandsPatch(this: any, config: any) {\n if (config?.BaseClass?.name !== 'RedisClient') {\n return original.apply(this, arguments);\n }\n const origExecutor = config.executor;\n config.executor = function (this: any, command: any, args: any) {\n const redisCommandArguments = transformCommandArguments(command, args).args;\n return plugin._traceClientCommand(origExecutor, this, arguments, redisCommandArguments);\n };\n return original.apply(this, arguments);\n };\n };\n }\n\n private _getPatchMultiCommandsExec() {\n const plugin = this;\n return function execPatchWrapper(original: Function) {\n return function execPatch(this: any) {\n const execRes = original.apply(this, arguments);\n if (typeof execRes?.then !== 'function') {\n DEBUG_BUILD && debug.error('non-promise result when patching exec/execAsPipeline');\n return execRes;\n }\n return execRes\n .then((redisRes: unknown[]) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n plugin._endSpansWithRedisReplies(openSpans, redisRes);\n return redisRes;\n })\n .catch((err: any) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n if (!openSpans) {\n DEBUG_BUILD && debug.error('cannot find open spans to end for multi/pipeline');\n } else {\n const replies =\n err.constructor.name === 'MultiErrorReply'\n ? (err as MultiErrorReply).replies\n : new Array(openSpans.length).fill(err);\n plugin._endSpansWithRedisReplies(openSpans, replies);\n }\n return Promise.reject(err);\n });\n };\n };\n }\n\n private _getPatchMultiCommandsAddCommand() {\n const plugin = this;\n return function addCommandWrapper(original: Function) {\n return function addCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchRedisClientMulti() {\n return function multiPatchWrapper(original: Function) {\n return function multiPatch(this: any) {\n const multiRes: any = original.apply(this, arguments);\n multiRes[MULTI_COMMAND_OPTIONS] = this.options;\n return multiRes;\n };\n };\n }\n\n private _getPatchRedisClientSendCommand() {\n const plugin = this;\n return function sendCommandWrapper(original: Function) {\n return function sendCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchedClientConnect() {\n return function connectWrapper(original: Function) {\n return function patchedConnect(this: any) {\n const attributes = getClientAttributes(this.options);\n const span = startInactiveSpan({\n name: `${RedisInstrumentationV4_V5.COMPONENT}-connect`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n const res = withActiveSpan(span, () => original.apply(this));\n return res.then(\n (result: any) => {\n span.end();\n return result;\n },\n (error: Error) => {\n endSpan(span, error);\n return Promise.reject(error);\n },\n );\n };\n };\n }\n\n _traceClientCommand(\n origFunction: Function,\n origThis: any,\n origArguments: IArguments,\n redisCommandArguments: Array<string | Buffer>,\n ): any {\n const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS];\n const commandName = redisCommandArguments[0] as string;\n const commandArgs = redisCommandArguments.slice(1);\n const attributes = getClientAttributes(clientOptions);\n const dbStatement = defaultDbStatementSerializer(commandName, commandArgs);\n if (dbStatement != null) {\n attributes[ATTR_DB_STATEMENT] = dbStatement;\n }\n const span = startInactiveSpan({\n name: `${RedisInstrumentationV4_V5.COMPONENT}-${commandName}`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n const res = withActiveSpan(span, () => origFunction.apply(origThis, origArguments));\n if (res instanceof Promise) {\n res.then(\n (redisRes: unknown) => {\n this._endSpanWithResponse(span, commandName, commandArgs, redisRes, undefined);\n },\n (err: Error) => {\n this._endSpanWithResponse(span, commandName, commandArgs, null, err);\n },\n );\n } else {\n const redisClientMultiCommand: any = res;\n redisClientMultiCommand[OTEL_OPEN_SPANS] = redisClientMultiCommand[OTEL_OPEN_SPANS] || [];\n redisClientMultiCommand[OTEL_OPEN_SPANS].push({\n span,\n commandName,\n commandArgs,\n });\n }\n return res;\n }\n\n _endSpansWithRedisReplies(openSpans: OpenSpanInfo[] | undefined, replies: unknown[]): void {\n if (!openSpans) {\n DEBUG_BUILD && debug.error('cannot find open spans to end for redis multi/pipeline');\n return;\n }\n if (replies.length !== openSpans.length) {\n DEBUG_BUILD && debug.error('number of multi command spans does not match response from redis');\n return;\n }\n for (let i = 0; i < openSpans.length; i++) {\n const { span, commandName, commandArgs } = openSpans[i]!;\n const currCommandRes = replies[i];\n const [res, err] = currCommandRes instanceof Error ? [null, currCommandRes] : [currCommandRes, undefined];\n this._endSpanWithResponse(span, commandName, commandArgs, res, err);\n }\n }\n\n _endSpanWithResponse(\n span: Span,\n commandName: string,\n commandArgs: Array<string | Buffer>,\n response: unknown,\n error: Error | null | undefined,\n ): void {\n if (!error) {\n runResponseHook(this.getConfig().responseHook, span, commandName, commandArgs, response);\n }\n endSpan(span, error);\n }\n}\n\n// ---- RedisInstrumentation (wrapper) ----\n\nexport class RedisInstrumentation extends InstrumentationBase<RedisInstrumentationConfig> {\n private instrumentationV2_V3: RedisInstrumentationV2_V3;\n private instrumentationV4_V5: RedisInstrumentationV4_V5;\n private initialized = false;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n this.instrumentationV2_V3 = new RedisInstrumentationV2_V3(this.getConfig());\n this.instrumentationV4_V5 = new RedisInstrumentationV4_V5(this.getConfig());\n this.initialized = true;\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n super.setConfig(config);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setConfig(config);\n this.instrumentationV4_V5.setConfig(config);\n }\n\n init() {}\n\n override getModuleDefinitions() {\n return [...this.instrumentationV2_V3.getModuleDefinitions(), ...this.instrumentationV4_V5.getModuleDefinitions()];\n }\n\n override setTracerProvider(tracerProvider: TracerProvider): void {\n super.setTracerProvider(tracerProvider);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setTracerProvider(tracerProvider);\n this.instrumentationV4_V5.setTracerProvider(tracerProvider);\n }\n\n override enable(): void {\n super.enable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.enable();\n this.instrumentationV4_V5.enable();\n }\n\n override disable(): void {\n super.disable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.disable();\n this.instrumentationV4_V5.disable();\n }\n}\n"],"names":["SPAN_STATUS_ERROR","DEBUG_BUILD","debug","ATTR_DB_SYSTEM","DB_SYSTEM_VALUE_REDIS","ATTR_NET_PEER_NAME","ATTR_NET_PEER_PORT","ATTR_DB_CONNECTION_STRING","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","ATTR_DB_STATEMENT","defaultDbStatementSerializer","startInactiveSpan","SPAN_KIND","getActiveSpan","withActiveSpan","InstrumentationNodeModuleFile"],"mappings":"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"}
1
+ {"version":3,"file":"redis-instrumentation.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/redis-instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { TracerProvider } from '@opentelemetry/api';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n debug,\n getActiveSpan,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\nimport { DB_STATEMENT, DB_SYSTEM, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport { defaultDbStatementSerializer } from '@sentry/server-utils';\nimport { DEBUG_BUILD } from '../../../../debug-build';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_REDIS } from './semconv';\nimport type { RedisInstrumentationConfig, RedisResponseCustomAttributeFunction } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-redis';\nconst ORIGIN = 'auto.db.otel.redis';\n\n// node-redis >= 5.12.0 publishes via diagnostics_channel, which Sentry subscribes\n// to separately, so this monkey-patching instrumentation only covers the older\n// `redis` (v2-v3), `@redis/client`/`@node-redis/client` (v1, i.e. node-redis v4)\n// and node-redis 5.0-5.11 releases.\n\n// ---- Internal types ----\n\ninterface RedisPluginClientTypes {\n connection_options?: {\n port?: string | number;\n host?: string;\n };\n address?: string;\n}\n\ninterface RedisCommand {\n command: string;\n args: string[];\n buffer_args: boolean;\n callback: (err: Error | null, reply: unknown) => void;\n call_on_write: boolean;\n}\n\ninterface MultiErrorReply extends Error {\n replies: unknown[];\n errorIndexes: Array<number>;\n}\n\ninterface OpenSpanInfo {\n span: Span;\n commandName: string;\n commandArgs: Array<string | Buffer>;\n}\n\nconst OTEL_OPEN_SPANS = Symbol('opentelemetry.instrumentation.redis.open_spans');\nconst MULTI_COMMAND_OPTIONS = Symbol('opentelemetry.instrumentation.redis.multi_command_options');\n\n// ---- shared utils ----\n\nfunction endSpan(span: Span, err: Error | null | undefined): void {\n if (err) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n }\n span.end();\n}\n\nfunction runResponseHook(\n responseHook: RedisResponseCustomAttributeFunction | undefined,\n span: Span,\n commandName: string,\n commandArgs: Array<string | Buffer>,\n response: unknown,\n): void {\n if (!responseHook) {\n return;\n }\n try {\n responseHook(span, commandName, commandArgs, response);\n } catch {\n // never let a user-provided response hook break instrumentation\n }\n}\n\n// ---- v4-v5 utils ----\n\nfunction removeCredentialsFromDBConnectionStringAttribute(url: string | undefined): string | undefined {\n if (typeof url !== 'string' || !url) {\n return undefined;\n }\n try {\n const u = new URL(url);\n u.searchParams.delete('user_pwd');\n u.username = '';\n u.password = '';\n return u.href;\n } catch (err) {\n DEBUG_BUILD && debug.error('failed to sanitize redis connection url', err);\n }\n return undefined;\n}\n\nfunction getClientAttributes(options: any): SpanAttributes {\n return {\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_NAME]: options?.socket?.host,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_PORT]: options?.socket?.port,\n [ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(options?.url),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n}\n\n// ---- RedisInstrumentationV2_V3 ----\n\nclass RedisInstrumentationV2_V3 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n init() {\n return [\n new InstrumentationNodeModuleDefinition(\n 'redis',\n ['>=2.6.0 <4'],\n (moduleExports: any) => {\n if (isWrapped(moduleExports.RedisClient.prototype['internal_send_command'])) {\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n }\n this._wrap(moduleExports.RedisClient.prototype, 'internal_send_command', this._getPatchInternalSendCommand());\n return moduleExports;\n },\n (moduleExports: any) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n },\n ),\n ];\n }\n\n private _getPatchInternalSendCommand() {\n const instrumentation = this;\n return function internal_send_command(original: Function) {\n return function internal_send_command_trace(this: RedisPluginClientTypes, cmd: RedisCommand) {\n if (arguments.length !== 1 || typeof cmd !== 'object') {\n return original.apply(this, arguments);\n }\n const attributes: SpanAttributes = {\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_STATEMENT]: defaultDbStatementSerializer(cmd.command, cmd.args),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n if (this.connection_options) {\n // oxlint-disable-next-line typescript/no-deprecated\n attributes[NET_PEER_NAME] = this.connection_options.host;\n // oxlint-disable-next-line typescript/no-deprecated\n attributes[NET_PEER_PORT] = this.connection_options.port;\n }\n if (this.address) {\n attributes[ATTR_DB_CONNECTION_STRING] = `redis://${this.address}`;\n }\n const span = startInactiveSpan({\n name: `${RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n const originalCallback = arguments[0].callback;\n if (originalCallback) {\n const parentSpan = getActiveSpan();\n arguments[0].callback = function callback(this: any, err: Error | null, reply: unknown) {\n runResponseHook(instrumentation.getConfig().responseHook, span, cmd.command, cmd.args, reply);\n endSpan(span, err);\n return withActiveSpan(parentSpan ?? null, () => originalCallback.apply(this, arguments));\n };\n }\n try {\n return original.apply(this, arguments);\n } catch (rethrow) {\n endSpan(span, rethrow as Error);\n throw rethrow;\n }\n };\n };\n }\n}\n\n// ---- RedisInstrumentationV4_V5 ----\n\nclass RedisInstrumentationV4_V5 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n init() {\n return [\n this._getInstrumentationNodeModuleDefinition('@redis/client'),\n this._getInstrumentationNodeModuleDefinition('@node-redis/client'),\n ];\n }\n\n private _getInstrumentationNodeModuleDefinition(basePackageName: string) {\n const commanderModuleFile = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/commander.js`,\n ['^1.0.0'],\n (moduleExports: any, moduleVersion?: string) => {\n const transformCommandArguments = moduleExports.transformCommandArguments;\n if (!transformCommandArguments) {\n DEBUG_BUILD && debug.error('internal instrumentation error, missing transformCommandArguments function');\n return moduleExports;\n }\n const functionToPatch = moduleVersion?.startsWith('1.0.') ? 'extendWithCommands' : 'attachCommands';\n if (isWrapped(moduleExports?.[functionToPatch])) {\n this._unwrap(moduleExports, functionToPatch);\n }\n this._wrap(moduleExports, functionToPatch, this._getPatchExtendWithCommands(transformCommandArguments));\n return moduleExports;\n },\n (moduleExports: any) => {\n if (isWrapped(moduleExports?.extendWithCommands)) {\n this._unwrap(moduleExports, 'extendWithCommands');\n }\n if (isWrapped(moduleExports?.attachCommands)) {\n this._unwrap(moduleExports, 'attachCommands');\n }\n },\n );\n\n const multiCommanderModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/multi-command.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n this._wrap(redisClientMultiCommandPrototype, 'exec', this._getPatchMultiCommandsExec());\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n this._wrap(redisClientMultiCommandPrototype, 'execAsPipeline', this._getPatchMultiCommandsExec());\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n this._wrap(redisClientMultiCommandPrototype, 'addCommand', this._getPatchMultiCommandsAddCommand());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n },\n );\n\n const clientIndexModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/index.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (redisClientPrototype?.multi) {\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n this._wrap(redisClientPrototype, 'multi', this._getPatchRedisClientMulti());\n }\n if (redisClientPrototype?.MULTI) {\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n this._wrap(redisClientPrototype, 'MULTI', this._getPatchRedisClientMulti());\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n this._wrap(redisClientPrototype, 'sendCommand', this._getPatchRedisClientSendCommand());\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n this._wrap(redisClientPrototype, 'connect', this._getPatchedClientConnect());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n },\n );\n\n return new InstrumentationNodeModuleDefinition(\n basePackageName,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => moduleExports,\n () => {},\n [commanderModuleFile, multiCommanderModule, clientIndexModule],\n );\n }\n\n private _getPatchExtendWithCommands(transformCommandArguments: Function) {\n const plugin = this;\n return function extendWithCommandsPatchWrapper(original: Function) {\n return function extendWithCommandsPatch(this: any, config: any) {\n if (config?.BaseClass?.name !== 'RedisClient') {\n return original.apply(this, arguments);\n }\n const origExecutor = config.executor;\n config.executor = function (this: any, command: any, args: any) {\n const redisCommandArguments = transformCommandArguments(command, args).args;\n return plugin._traceClientCommand(origExecutor, this, arguments, redisCommandArguments);\n };\n return original.apply(this, arguments);\n };\n };\n }\n\n private _getPatchMultiCommandsExec() {\n const plugin = this;\n return function execPatchWrapper(original: Function) {\n return function execPatch(this: any) {\n const execRes = original.apply(this, arguments);\n if (typeof execRes?.then !== 'function') {\n DEBUG_BUILD && debug.error('non-promise result when patching exec/execAsPipeline');\n return execRes;\n }\n return execRes\n .then((redisRes: unknown[]) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n plugin._endSpansWithRedisReplies(openSpans, redisRes);\n return redisRes;\n })\n .catch((err: any) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n if (!openSpans) {\n DEBUG_BUILD && debug.error('cannot find open spans to end for multi/pipeline');\n } else {\n const replies =\n err.constructor.name === 'MultiErrorReply'\n ? (err as MultiErrorReply).replies\n : new Array(openSpans.length).fill(err);\n plugin._endSpansWithRedisReplies(openSpans, replies);\n }\n return Promise.reject(err);\n });\n };\n };\n }\n\n private _getPatchMultiCommandsAddCommand() {\n const plugin = this;\n return function addCommandWrapper(original: Function) {\n return function addCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchRedisClientMulti() {\n return function multiPatchWrapper(original: Function) {\n return function multiPatch(this: any) {\n const multiRes: any = original.apply(this, arguments);\n multiRes[MULTI_COMMAND_OPTIONS] = this.options;\n return multiRes;\n };\n };\n }\n\n private _getPatchRedisClientSendCommand() {\n const plugin = this;\n return function sendCommandWrapper(original: Function) {\n return function sendCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchedClientConnect() {\n return function connectWrapper(original: Function) {\n return function patchedConnect(this: any) {\n const attributes = getClientAttributes(this.options);\n const span = startInactiveSpan({\n name: `${RedisInstrumentationV4_V5.COMPONENT}-connect`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n const res = withActiveSpan(span, () => original.apply(this));\n return res.then(\n (result: any) => {\n span.end();\n return result;\n },\n (error: Error) => {\n endSpan(span, error);\n return Promise.reject(error);\n },\n );\n };\n };\n }\n\n _traceClientCommand(\n origFunction: Function,\n origThis: any,\n origArguments: IArguments,\n redisCommandArguments: Array<string | Buffer>,\n ): any {\n const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS];\n const commandName = redisCommandArguments[0] as string;\n const commandArgs = redisCommandArguments.slice(1);\n const attributes = getClientAttributes(clientOptions);\n const dbStatement = defaultDbStatementSerializer(commandName, commandArgs);\n if (dbStatement != null) {\n // oxlint-disable-next-line typescript/no-deprecated\n attributes[DB_STATEMENT] = dbStatement;\n }\n const span = startInactiveSpan({\n name: `${RedisInstrumentationV4_V5.COMPONENT}-${commandName}`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n const res = withActiveSpan(span, () => origFunction.apply(origThis, origArguments));\n if (res instanceof Promise) {\n res.then(\n (redisRes: unknown) => {\n this._endSpanWithResponse(span, commandName, commandArgs, redisRes, undefined);\n },\n (err: Error) => {\n this._endSpanWithResponse(span, commandName, commandArgs, null, err);\n },\n );\n } else {\n const redisClientMultiCommand: any = res;\n redisClientMultiCommand[OTEL_OPEN_SPANS] = redisClientMultiCommand[OTEL_OPEN_SPANS] || [];\n redisClientMultiCommand[OTEL_OPEN_SPANS].push({\n span,\n commandName,\n commandArgs,\n });\n }\n return res;\n }\n\n _endSpansWithRedisReplies(openSpans: OpenSpanInfo[] | undefined, replies: unknown[]): void {\n if (!openSpans) {\n DEBUG_BUILD && debug.error('cannot find open spans to end for redis multi/pipeline');\n return;\n }\n if (replies.length !== openSpans.length) {\n DEBUG_BUILD && debug.error('number of multi command spans does not match response from redis');\n return;\n }\n for (let i = 0; i < openSpans.length; i++) {\n const { span, commandName, commandArgs } = openSpans[i]!;\n const currCommandRes = replies[i];\n const [res, err] = currCommandRes instanceof Error ? [null, currCommandRes] : [currCommandRes, undefined];\n this._endSpanWithResponse(span, commandName, commandArgs, res, err);\n }\n }\n\n _endSpanWithResponse(\n span: Span,\n commandName: string,\n commandArgs: Array<string | Buffer>,\n response: unknown,\n error: Error | null | undefined,\n ): void {\n if (!error) {\n runResponseHook(this.getConfig().responseHook, span, commandName, commandArgs, response);\n }\n endSpan(span, error);\n }\n}\n\n// ---- RedisInstrumentation (wrapper) ----\n\nexport class RedisInstrumentation extends InstrumentationBase<RedisInstrumentationConfig> {\n private instrumentationV2_V3: RedisInstrumentationV2_V3;\n private instrumentationV4_V5: RedisInstrumentationV4_V5;\n private initialized = false;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n this.instrumentationV2_V3 = new RedisInstrumentationV2_V3(this.getConfig());\n this.instrumentationV4_V5 = new RedisInstrumentationV4_V5(this.getConfig());\n this.initialized = true;\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n super.setConfig(config);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setConfig(config);\n this.instrumentationV4_V5.setConfig(config);\n }\n\n init() {}\n\n override getModuleDefinitions() {\n return [...this.instrumentationV2_V3.getModuleDefinitions(), ...this.instrumentationV4_V5.getModuleDefinitions()];\n }\n\n override setTracerProvider(tracerProvider: TracerProvider): void {\n super.setTracerProvider(tracerProvider);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setTracerProvider(tracerProvider);\n this.instrumentationV4_V5.setTracerProvider(tracerProvider);\n }\n\n override enable(): void {\n super.enable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.enable();\n this.instrumentationV4_V5.enable();\n }\n\n override disable(): void {\n super.disable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.disable();\n this.instrumentationV4_V5.disable();\n }\n}\n"],"names":["SPAN_STATUS_ERROR","DEBUG_BUILD","debug","DB_SYSTEM","DB_SYSTEM_VALUE_REDIS","NET_PEER_NAME","NET_PEER_PORT","ATTR_DB_CONNECTION_STRING","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","attributes","DB_STATEMENT","defaultDbStatementSerializer","startInactiveSpan","SPAN_KIND","getActiveSpan","withActiveSpan","InstrumentationNodeModuleFile"],"mappings":"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"}
@@ -1,16 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const ATTR_DB_CONNECTION_STRING = "db.connection_string";
4
- const ATTR_DB_STATEMENT = "db.statement";
5
- const ATTR_DB_SYSTEM = "db.system";
6
- const ATTR_NET_PEER_NAME = "net.peer.name";
7
- const ATTR_NET_PEER_PORT = "net.peer.port";
8
4
  const DB_SYSTEM_VALUE_REDIS = "redis";
9
5
 
10
6
  exports.ATTR_DB_CONNECTION_STRING = ATTR_DB_CONNECTION_STRING;
11
- exports.ATTR_DB_STATEMENT = ATTR_DB_STATEMENT;
12
- exports.ATTR_DB_SYSTEM = ATTR_DB_SYSTEM;
13
- exports.ATTR_NET_PEER_NAME = ATTR_NET_PEER_NAME;
14
- exports.ATTR_NET_PEER_PORT = ATTR_NET_PEER_PORT;
15
7
  exports.DB_SYSTEM_VALUE_REDIS = DB_SYSTEM_VALUE_REDIS;
16
8
  //# sourceMappingURL=semconv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n */\n/* eslint-disable -- vendored @opentelemetry/instrumentation-redis */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by the vendored redis/ioredis instrumentations.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n// Deprecated constants kept for backwards compatibility with older semconv\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string';\nexport const ATTR_DB_STATEMENT = 'db.statement';\nexport const ATTR_DB_SYSTEM = 'db.system';\nexport const ATTR_NET_PEER_NAME = 'net.peer.name';\nexport const ATTR_NET_PEER_PORT = 'net.peer.port';\nexport const DB_SYSTEM_NAME_VALUE_REDIS = 'redis';\nexport const DB_SYSTEM_VALUE_REDIS = 'redis';\n"],"names":[],"mappings":";;AAkBO,MAAM,yBAAA,GAA4B;AAClC,MAAM,iBAAA,GAAoB;AAC1B,MAAM,cAAA,GAAiB;AACvB,MAAM,kBAAA,GAAqB;AAC3B,MAAM,kBAAA,GAAqB;AAE3B,MAAM,qBAAA,GAAwB;;;;;;;;;"}
1
+ {"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n */\n/* eslint-disable -- vendored @opentelemetry/instrumentation-redis */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by the vendored redis/ioredis instrumentations.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n// Deprecated constants kept for backwards compatibility with older semconv\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string';\nexport const DB_SYSTEM_NAME_VALUE_REDIS = 'redis';\nexport const DB_SYSTEM_VALUE_REDIS = 'redis';\n"],"names":[],"mappings":";;AAkBO,MAAM,yBAAA,GAA4B;AAElC,MAAM,qBAAA,GAAwB;;;;;"}
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const events = require('events');
4
4
  const instrumentation = require('@opentelemetry/instrumentation');
5
+ const attributes = require('@sentry/conventions/attributes');
5
6
  const semconv = require('./semconv.js');
6
7
  const utils = require('./utils.js');
7
8
  const core = require('@sentry/core');
@@ -79,28 +80,28 @@ const _TediousInstrumentation = class _TediousInstrumentation extends instrument
79
80
  }
80
81
  return request2.sqlTextOrProcedure;
81
82
  })(request);
82
- const attributes = {
83
+ const attributes$1 = {
83
84
  [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.db.otel.tedious",
84
85
  // eslint-disable-next-line typescript/no-deprecated
85
- [semconv.ATTR_DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_MSSQL,
86
+ [attributes.DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_MSSQL,
86
87
  // eslint-disable-next-line typescript/no-deprecated
87
- [semconv.ATTR_DB_NAME]: databaseName,
88
+ [attributes.DB_NAME]: databaseName,
88
89
  // >=4 uses `authentication` object; older versions just userName and password pair
89
90
  // eslint-disable-next-line typescript/no-deprecated
90
- [semconv.ATTR_DB_USER]: this.config?.userName ?? this.config?.authentication?.options?.userName,
91
+ [attributes.DB_USER]: this.config?.userName ?? this.config?.authentication?.options?.userName,
91
92
  // eslint-disable-next-line typescript/no-deprecated
92
- [semconv.ATTR_DB_STATEMENT]: sql,
93
+ [attributes.DB_STATEMENT]: sql,
93
94
  // eslint-disable-next-line typescript/no-deprecated
94
95
  [semconv.ATTR_DB_SQL_TABLE]: request.table,
95
96
  // eslint-disable-next-line typescript/no-deprecated
96
- [semconv.ATTR_NET_PEER_NAME]: this.config?.server,
97
+ [attributes.NET_PEER_NAME]: this.config?.server,
97
98
  // eslint-disable-next-line typescript/no-deprecated
98
- [semconv.ATTR_NET_PEER_PORT]: this.config?.options?.port
99
+ [attributes.NET_PEER_PORT]: this.config?.options?.port
99
100
  };
100
101
  const span = core.startInactiveSpan({
101
102
  name: utils.getSpanName(operation, databaseName, sql, request.table),
102
103
  kind: core.SPAN_KIND.CLIENT,
103
- attributes
104
+ attributes: attributes$1
104
105
  });
105
106
  const endSpan = utils.once((err) => {
106
107
  request.removeListener("done", incrementStatementCount);
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/tedious/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n * - Minor TypeScript strictness adjustments\n * - Span creation migrated to the @sentry/core API; origin folded into span creation\n */\n\nimport { EventEmitter } from 'events';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport {\n DB_SYSTEM_VALUE_MSSQL,\n ATTR_DB_NAME,\n ATTR_DB_SQL_TABLE,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_DB_USER,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n} from './semconv';\nimport type * as tedious from './tedious-types';\nimport { getSpanName, once } from './utils';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-tedious';\n\nconst CURRENT_DATABASE = Symbol('opentelemetry.instrumentation-tedious.current-database');\n\nconst PATCHED_METHODS = ['callProcedure', 'execSql', 'execSqlBatch', 'execBulkLoad', 'prepare', 'execute'];\n\ntype UnknownFunction = (...args: any[]) => any;\ntype ApproxConnection = EventEmitter & {\n [CURRENT_DATABASE]: string;\n config: any;\n};\ntype ApproxRequest = EventEmitter & {\n sqlTextOrProcedure: string | undefined;\n callback: any;\n table: string | undefined;\n parametersByName: any;\n};\n\nfunction setDatabase(this: ApproxConnection, databaseName: string) {\n Object.defineProperty(this, CURRENT_DATABASE, {\n value: databaseName,\n writable: true,\n });\n}\n\nexport class TediousInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n static readonly COMPONENT = 'tedious';\n\n constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return [\n new InstrumentationNodeModuleDefinition(\n TediousInstrumentation.COMPONENT,\n ['>=1.11.0 <20'],\n (moduleExports: typeof tedious) => {\n const ConnectionPrototype: any = moduleExports.Connection.prototype;\n for (const method of PATCHED_METHODS) {\n if (isWrapped(ConnectionPrototype[method])) {\n this._unwrap(ConnectionPrototype, method);\n }\n this._wrap(ConnectionPrototype, method, this._patchQuery(method) as any);\n }\n\n if (isWrapped(ConnectionPrototype.connect)) {\n this._unwrap(ConnectionPrototype, 'connect');\n }\n // oxlint-disable-next-line typescript/unbound-method\n this._wrap(ConnectionPrototype, 'connect', this._patchConnect);\n\n return moduleExports;\n },\n (moduleExports: typeof tedious) => {\n if (moduleExports === undefined) return;\n const ConnectionPrototype: any = moduleExports.Connection.prototype;\n for (const method of PATCHED_METHODS) {\n this._unwrap(ConnectionPrototype, method);\n }\n this._unwrap(ConnectionPrototype, 'connect');\n },\n ),\n ];\n }\n\n private _patchConnect(original: UnknownFunction): UnknownFunction {\n return function patchedConnect(this: ApproxConnection) {\n setDatabase.call(this, this.config?.options?.database);\n\n // remove the listener first in case it's already added\n this.removeListener('databaseChange', setDatabase);\n this.on('databaseChange', setDatabase);\n\n this.once('end', () => {\n this.removeListener('databaseChange', setDatabase);\n });\n return original.apply(this, arguments as unknown as any[]);\n };\n }\n\n private _patchQuery(operation: string) {\n return (originalMethod: UnknownFunction): UnknownFunction => {\n const thisPlugin = this;\n\n function patchedMethod(this: ApproxConnection, request: ApproxRequest) {\n if (!(request instanceof EventEmitter)) {\n thisPlugin._diag.warn(`Unexpected invocation of patched ${operation} method. Span not recorded`);\n return originalMethod.apply(this, arguments as unknown as any[]);\n }\n let procCount = 0;\n let statementCount = 0;\n const incrementStatementCount = () => statementCount++;\n const incrementProcCount = () => procCount++;\n const databaseName = this[CURRENT_DATABASE];\n const sql = (request => {\n // Required for <11.0.9\n if (request.sqlTextOrProcedure === 'sp_prepare' && request.parametersByName?.stmt?.value) {\n return request.parametersByName.stmt.value;\n }\n return request.sqlTextOrProcedure;\n })(request);\n\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.otel.tedious',\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_MSSQL,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_NAME]: databaseName,\n // >=4 uses `authentication` object; older versions just userName and password pair\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_USER]: this.config?.userName ?? this.config?.authentication?.options?.userName,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_STATEMENT]: sql,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_SQL_TABLE]: request.table,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_NET_PEER_NAME]: this.config?.server,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_NET_PEER_PORT]: this.config?.options?.port,\n };\n const span = startInactiveSpan({\n name: getSpanName(operation, databaseName, sql, request.table),\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n\n const endSpan = once((err?: any) => {\n request.removeListener('done', incrementStatementCount);\n request.removeListener('doneInProc', incrementStatementCount);\n request.removeListener('doneProc', incrementProcCount);\n request.removeListener('error', endSpan);\n this.removeListener('end', endSpan);\n\n span.setAttribute('tedious.procedure_count', procCount);\n span.setAttribute('tedious.statement_count', statementCount);\n if (err) {\n span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err.message,\n });\n // TODO(3290): set `error.type` attribute?\n }\n span.end();\n });\n\n request.on('done', incrementStatementCount);\n request.on('doneInProc', incrementStatementCount);\n request.on('doneProc', incrementProcCount);\n request.once('error', endSpan);\n this.on('end', endSpan);\n\n if (typeof request.callback === 'function') {\n thisPlugin._wrap(request, 'callback', thisPlugin._patchCallbackQuery(endSpan));\n } else {\n thisPlugin._diag.error('Expected request.callback to be a function');\n }\n\n return withActiveSpan(span, () => originalMethod.apply(this, arguments as unknown as any[]));\n }\n\n Object.defineProperty(patchedMethod, 'length', {\n value: originalMethod.length,\n writable: false,\n });\n\n return patchedMethod;\n };\n }\n\n private _patchCallbackQuery(endSpan: Function) {\n return (originalCallback: Function) => {\n return function (this: any, err: Error | undefined | null, _rowCount?: number, _rows?: any) {\n endSpan(err);\n return originalCallback.apply(this, arguments);\n };\n };\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","EventEmitter","request","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","ATTR_DB_SYSTEM","DB_SYSTEM_VALUE_MSSQL","ATTR_DB_NAME","ATTR_DB_USER","ATTR_DB_STATEMENT","ATTR_DB_SQL_TABLE","ATTR_NET_PEER_NAME","ATTR_NET_PEER_PORT","startInactiveSpan","getSpanName","SPAN_KIND","once","SPAN_STATUS_ERROR","withActiveSpan"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/tedious/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n * - Minor TypeScript strictness adjustments\n * - Span creation migrated to the @sentry/core API; origin folded into span creation\n */\n\nimport { EventEmitter } from 'events';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport {\n DB_NAME,\n DB_STATEMENT,\n DB_SYSTEM,\n DB_USER,\n NET_PEER_NAME,\n NET_PEER_PORT,\n} from '@sentry/conventions/attributes';\nimport { DB_SYSTEM_VALUE_MSSQL, ATTR_DB_SQL_TABLE } from './semconv';\nimport type * as tedious from './tedious-types';\nimport { getSpanName, once } from './utils';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-tedious';\n\nconst CURRENT_DATABASE = Symbol('opentelemetry.instrumentation-tedious.current-database');\n\nconst PATCHED_METHODS = ['callProcedure', 'execSql', 'execSqlBatch', 'execBulkLoad', 'prepare', 'execute'];\n\ntype UnknownFunction = (...args: any[]) => any;\ntype ApproxConnection = EventEmitter & {\n [CURRENT_DATABASE]: string;\n config: any;\n};\ntype ApproxRequest = EventEmitter & {\n sqlTextOrProcedure: string | undefined;\n callback: any;\n table: string | undefined;\n parametersByName: any;\n};\n\nfunction setDatabase(this: ApproxConnection, databaseName: string) {\n Object.defineProperty(this, CURRENT_DATABASE, {\n value: databaseName,\n writable: true,\n });\n}\n\nexport class TediousInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n static readonly COMPONENT = 'tedious';\n\n constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return [\n new InstrumentationNodeModuleDefinition(\n TediousInstrumentation.COMPONENT,\n ['>=1.11.0 <20'],\n (moduleExports: typeof tedious) => {\n const ConnectionPrototype: any = moduleExports.Connection.prototype;\n for (const method of PATCHED_METHODS) {\n if (isWrapped(ConnectionPrototype[method])) {\n this._unwrap(ConnectionPrototype, method);\n }\n this._wrap(ConnectionPrototype, method, this._patchQuery(method) as any);\n }\n\n if (isWrapped(ConnectionPrototype.connect)) {\n this._unwrap(ConnectionPrototype, 'connect');\n }\n // oxlint-disable-next-line typescript/unbound-method\n this._wrap(ConnectionPrototype, 'connect', this._patchConnect);\n\n return moduleExports;\n },\n (moduleExports: typeof tedious) => {\n if (moduleExports === undefined) return;\n const ConnectionPrototype: any = moduleExports.Connection.prototype;\n for (const method of PATCHED_METHODS) {\n this._unwrap(ConnectionPrototype, method);\n }\n this._unwrap(ConnectionPrototype, 'connect');\n },\n ),\n ];\n }\n\n private _patchConnect(original: UnknownFunction): UnknownFunction {\n return function patchedConnect(this: ApproxConnection) {\n setDatabase.call(this, this.config?.options?.database);\n\n // remove the listener first in case it's already added\n this.removeListener('databaseChange', setDatabase);\n this.on('databaseChange', setDatabase);\n\n this.once('end', () => {\n this.removeListener('databaseChange', setDatabase);\n });\n return original.apply(this, arguments as unknown as any[]);\n };\n }\n\n private _patchQuery(operation: string) {\n return (originalMethod: UnknownFunction): UnknownFunction => {\n const thisPlugin = this;\n\n function patchedMethod(this: ApproxConnection, request: ApproxRequest) {\n if (!(request instanceof EventEmitter)) {\n thisPlugin._diag.warn(`Unexpected invocation of patched ${operation} method. Span not recorded`);\n return originalMethod.apply(this, arguments as unknown as any[]);\n }\n let procCount = 0;\n let statementCount = 0;\n const incrementStatementCount = () => statementCount++;\n const incrementProcCount = () => procCount++;\n const databaseName = this[CURRENT_DATABASE];\n const sql = (request => {\n // Required for <11.0.9\n if (request.sqlTextOrProcedure === 'sp_prepare' && request.parametersByName?.stmt?.value) {\n return request.parametersByName.stmt.value;\n }\n return request.sqlTextOrProcedure;\n })(request);\n\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.otel.tedious',\n // eslint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_MSSQL,\n // eslint-disable-next-line typescript/no-deprecated\n [DB_NAME]: databaseName,\n // >=4 uses `authentication` object; older versions just userName and password pair\n // eslint-disable-next-line typescript/no-deprecated\n [DB_USER]: this.config?.userName ?? this.config?.authentication?.options?.userName,\n // eslint-disable-next-line typescript/no-deprecated\n [DB_STATEMENT]: sql,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_SQL_TABLE]: request.table,\n // eslint-disable-next-line typescript/no-deprecated\n [NET_PEER_NAME]: this.config?.server,\n // eslint-disable-next-line typescript/no-deprecated\n [NET_PEER_PORT]: this.config?.options?.port,\n };\n const span = startInactiveSpan({\n name: getSpanName(operation, databaseName, sql, request.table),\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n\n const endSpan = once((err?: any) => {\n request.removeListener('done', incrementStatementCount);\n request.removeListener('doneInProc', incrementStatementCount);\n request.removeListener('doneProc', incrementProcCount);\n request.removeListener('error', endSpan);\n this.removeListener('end', endSpan);\n\n span.setAttribute('tedious.procedure_count', procCount);\n span.setAttribute('tedious.statement_count', statementCount);\n if (err) {\n span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err.message,\n });\n // TODO(3290): set `error.type` attribute?\n }\n span.end();\n });\n\n request.on('done', incrementStatementCount);\n request.on('doneInProc', incrementStatementCount);\n request.on('doneProc', incrementProcCount);\n request.once('error', endSpan);\n this.on('end', endSpan);\n\n if (typeof request.callback === 'function') {\n thisPlugin._wrap(request, 'callback', thisPlugin._patchCallbackQuery(endSpan));\n } else {\n thisPlugin._diag.error('Expected request.callback to be a function');\n }\n\n return withActiveSpan(span, () => originalMethod.apply(this, arguments as unknown as any[]));\n }\n\n Object.defineProperty(patchedMethod, 'length', {\n value: originalMethod.length,\n writable: false,\n });\n\n return patchedMethod;\n };\n }\n\n private _patchCallbackQuery(endSpan: Function) {\n return (originalCallback: Function) => {\n return function (this: any, err: Error | undefined | null, _rowCount?: number, _rows?: any) {\n endSpan(err);\n return originalCallback.apply(this, arguments);\n };\n };\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","EventEmitter","request","attributes","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","DB_SYSTEM","DB_SYSTEM_VALUE_MSSQL","DB_NAME","DB_USER","DB_STATEMENT","ATTR_DB_SQL_TABLE","NET_PEER_NAME","NET_PEER_PORT","startInactiveSpan","getSpanName","SPAN_KIND","once","SPAN_STATUS_ERROR","withActiveSpan"],"mappings":"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"}
@@ -1,20 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
- const ATTR_DB_NAME = "db.name";
4
3
  const ATTR_DB_SQL_TABLE = "db.sql.table";
5
- const ATTR_DB_STATEMENT = "db.statement";
6
- const ATTR_DB_SYSTEM = "db.system";
7
- const ATTR_DB_USER = "db.user";
8
- const ATTR_NET_PEER_NAME = "net.peer.name";
9
- const ATTR_NET_PEER_PORT = "net.peer.port";
10
4
  const DB_SYSTEM_VALUE_MSSQL = "mssql";
11
5
 
12
- exports.ATTR_DB_NAME = ATTR_DB_NAME;
13
6
  exports.ATTR_DB_SQL_TABLE = ATTR_DB_SQL_TABLE;
14
- exports.ATTR_DB_STATEMENT = ATTR_DB_STATEMENT;
15
- exports.ATTR_DB_SYSTEM = ATTR_DB_SYSTEM;
16
- exports.ATTR_DB_USER = ATTR_DB_USER;
17
- exports.ATTR_NET_PEER_NAME = ATTR_NET_PEER_NAME;
18
- exports.ATTR_NET_PEER_PORT = ATTR_NET_PEER_PORT;
19
7
  exports.DB_SYSTEM_VALUE_MSSQL = DB_SYSTEM_VALUE_MSSQL;
20
8
  //# sourceMappingURL=semconv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/tedious/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * Deprecated, use `db.namespace` instead.\n *\n * @example customers\n * @example main\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.namespace`.\n */\nexport const ATTR_DB_NAME = 'db.name' as const;\n\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @example \"mytable\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.collection.name`, but only if not extracting the value from `db.query.text`.\n */\nexport const ATTR_DB_SQL_TABLE = 'db.sql.table' as const;\n\n/**\n * The database statement being executed.\n *\n * @example SELECT * FROM wuser_table\n * @example SET mykey \"WuValue\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.query.text`.\n */\nexport const ATTR_DB_STATEMENT = 'db.statement' as const;\n\n/**\n * Deprecated, use `db.system.name` instead.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.system.name`.\n */\nexport const ATTR_DB_SYSTEM = 'db.system' as const;\n\n/**\n * Deprecated, no replacement at this time.\n *\n * @example readonly_user\n * @example reporting_user\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Removed, no replacement at this time.\n */\nexport const ATTR_DB_USER = 'db.user' as const;\n\n/**\n * Deprecated, use `server.address` on client spans and `client.address` on server spans.\n *\n * @example example.com\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.address` on client spans and `client.address` on server spans.\n */\nexport const ATTR_NET_PEER_NAME = 'net.peer.name' as const;\n\n/**\n * Deprecated, use `server.port` on client spans and `client.port` on server spans.\n *\n * @example 8080\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.port` on client spans and `client.port` on server spans.\n */\nexport const ATTR_NET_PEER_PORT = 'net.peer.port' as const;\n\n/**\n * Enum value \"mssql\" for attribute {@link ATTR_DB_SYSTEM}.\n *\n * Microsoft SQL Server\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const DB_SYSTEM_VALUE_MSSQL = 'mssql' as const;\n"],"names":[],"mappings":";;AAyBO,MAAM,YAAA,GAAe;AAWrB,MAAM,iBAAA,GAAoB;AAY1B,MAAM,iBAAA,GAAoB;AAS1B,MAAM,cAAA,GAAiB;AAYvB,MAAM,YAAA,GAAe;AAWrB,MAAM,kBAAA,GAAqB;AAW3B,MAAM,kBAAA,GAAqB;AAS3B,MAAM,qBAAA,GAAwB;;;;;;;;;;;"}
1
+ {"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/tedious/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @example \"mytable\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.collection.name`, but only if not extracting the value from `db.query.text`.\n */\nexport const ATTR_DB_SQL_TABLE = 'db.sql.table' as const;\n\n/**\n * Enum value \"mssql\" for attribute `db.system`.\n *\n * Microsoft SQL Server\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const DB_SYSTEM_VALUE_MSSQL = 'mssql' as const;\n"],"names":[],"mappings":";;AAwBO,MAAM,iBAAA,GAAoB;AAS1B,MAAM,qBAAA,GAAwB;;;;;"}
@@ -2,14 +2,23 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const orchestrion = require('@sentry/server-utils/orchestrion');
4
4
  const register = require('@sentry/server-utils/orchestrion/register');
5
+ const cache = require('../integrations/tracing/redis/cache.js');
5
6
  const diagnosticsChannelInjection = require('./diagnosticsChannelInjection.js');
6
7
 
8
+ function diagnosticsChannelInjectionIntegrations() {
9
+ return orchestrion.channelIntegrations;
10
+ }
7
11
  function experimentalUseDiagnosticsChannelInjection() {
8
12
  diagnosticsChannelInjection.setDiagnosticsChannelInjectionLoader(() => {
9
- const integrations = [orchestrion.mysqlChannelIntegration(), orchestrion.lruMemoizerChannelIntegration()];
13
+ const integrations = Object.values(orchestrion.channelIntegrations).map((createIntegration) => createIntegration());
10
14
  const replacedOtelIntegrationNames = integrations.map((i) => i.name);
11
15
  return {
12
- integrations,
16
+ // ioredis is wired here rather than in the shared `channelIntegrations` registry: it needs
17
+ // the node redis cache `responseHook`, and it only partially replaces the composite OTel
18
+ // `Redis` integration (which also covers node-redis and ioredis >=5.11 native diagnostics_channel).
19
+ // So it's added to the integration set but kept OUT of `replacedOtelIntegrationNames` — `Redis`
20
+ // must stay; its ioredis <5.11 monkey-patch is gated off in `redisIntegration` instead.
21
+ integrations: [...integrations, orchestrion.ioredisChannelIntegration({ responseHook: cache.cacheResponseHook })],
13
22
  replacedOtelIntegrationNames,
14
23
  register: register.registerDiagnosticsChannelInjection,
15
24
  detect: orchestrion.detectOrchestrionSetup
@@ -17,5 +26,6 @@ function experimentalUseDiagnosticsChannelInjection() {
17
26
  });
18
27
  }
19
28
 
29
+ exports.diagnosticsChannelInjectionIntegrations = diagnosticsChannelInjectionIntegrations;
20
30
  exports.experimentalUseDiagnosticsChannelInjection = experimentalUseDiagnosticsChannelInjection;
21
31
  //# sourceMappingURL=experimentalUseDiagnosticsChannelInjection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"experimentalUseDiagnosticsChannelInjection.js","sources":["../../../src/sdk/experimentalUseDiagnosticsChannelInjection.ts"],"sourcesContent":["import {\n mysqlChannelIntegration,\n lruMemoizerChannelIntegration,\n detectOrchestrionSetup,\n} from '@sentry/server-utils/orchestrion';\nimport { registerDiagnosticsChannelInjection } from '@sentry/server-utils/orchestrion/register';\nimport type { DiagnosticsChannelInjection } from './diagnosticsChannelInjection';\nimport { setDiagnosticsChannelInjectionLoader } from './diagnosticsChannelInjection';\n\n/**\n * EXPERIMENTAL: opt into diagnostics-channel-based auto-instrumentation.\n *\n * Call this BEFORE `Sentry.init()`:\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.experimentalUseDiagnosticsChannelInjection();\n * Sentry.init({\n * dsn: '__DSN__',\n * // other settings...\n * });\n * ```\n *\n * When this has been called AND span recording is enabled, `Sentry.init()`\n * uses the diagnostics-channel-injection-based integrations instead of the\n * OpenTelemetry ones, and installs the module hooks that inject the channels\n * (so libraries imported after `init()` publish the channel events).\n *\n * This is a standalone function rather than an `init()` option so that a\n * bundler drops all of it (and its transitive deps) when this function isn't\n * called. `init()` reads the loader registered below.\n *\n * An app that DOES call it gets the orchestrion code bundled as intended.\n *\n * In an unbundled (server-side runtime) app this eagerly loads only the small\n * subscriber/channel modules; the heavy code-transform dependencies stay lazy\n * inside `register()` and load only when injection actually runs.\n *\n * @experimental May change or be removed in any release.\n */\nexport function experimentalUseDiagnosticsChannelInjection(): void {\n setDiagnosticsChannelInjectionLoader((): DiagnosticsChannelInjection => {\n const integrations = [mysqlChannelIntegration(), lruMemoizerChannelIntegration()] as const;\n const replacedOtelIntegrationNames = integrations.map(i => i.name);\n\n return {\n integrations,\n replacedOtelIntegrationNames,\n register: registerDiagnosticsChannelInjection,\n detect: detectOrchestrionSetup,\n };\n });\n}\n"],"names":["setDiagnosticsChannelInjectionLoader","mysqlChannelIntegration","lruMemoizerChannelIntegration","registerDiagnosticsChannelInjection","detectOrchestrionSetup"],"mappings":";;;;;;AAyCO,SAAS,0CAAA,GAAmD;AACjE,EAAAA,gEAAA,CAAqC,MAAmC;AACtE,IAAA,MAAM,YAAA,GAAe,CAACC,mCAAA,EAAwB,EAAGC,2CAA+B,CAAA;AAChF,IAAA,MAAM,4BAAA,GAA+B,YAAA,CAAa,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAEjE,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,4BAAA;AAAA,MACA,QAAA,EAAUC,4CAAA;AAAA,MACV,MAAA,EAAQC;AAAA,KACV;AAAA,EACF,CAAC,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"experimentalUseDiagnosticsChannelInjection.js","sources":["../../../src/sdk/experimentalUseDiagnosticsChannelInjection.ts"],"sourcesContent":["import {\n channelIntegrations,\n ioredisChannelIntegration,\n detectOrchestrionSetup,\n} from '@sentry/server-utils/orchestrion';\nimport { registerDiagnosticsChannelInjection } from '@sentry/server-utils/orchestrion/register';\nimport { cacheResponseHook } from '../integrations/tracing/redis/cache';\nimport type { DiagnosticsChannelInjection } from './diagnosticsChannelInjection';\nimport { setDiagnosticsChannelInjectionLoader } from './diagnosticsChannelInjection';\n\nexport function diagnosticsChannelInjectionIntegrations(): typeof channelIntegrations {\n return channelIntegrations;\n}\n\n/**\n * EXPERIMENTAL: opt into diagnostics-channel-based auto-instrumentation.\n *\n * Call this BEFORE `Sentry.init()`:\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.experimentalUseDiagnosticsChannelInjection();\n * Sentry.init({\n * dsn: '__DSN__',\n * // other settings...\n * });\n * ```\n *\n * When this has been called AND span recording is enabled, `Sentry.init()`\n * uses the diagnostics-channel-injection-based integrations instead of the\n * OpenTelemetry ones, and installs the module hooks that inject the channels\n * (so libraries imported after `init()` publish the channel events).\n *\n * This is a standalone function rather than an `init()` option so that a\n * bundler drops all of it (and its transitive deps) when this function isn't\n * called. `init()` reads the loader registered below.\n *\n * An app that DOES call it gets the orchestrion code bundled as intended.\n *\n * In an unbundled (server-side runtime) app this eagerly loads only the small\n * subscriber/channel modules; the heavy code-transform dependencies stay lazy\n * inside `register()` and load only when injection actually runs.\n *\n * @experimental May change or be removed in any release.\n */\nexport function experimentalUseDiagnosticsChannelInjection(): void {\n setDiagnosticsChannelInjectionLoader((): DiagnosticsChannelInjection => {\n // The registry integrations 1:1 replace the OTel integration of the same name.\n const integrations = Object.values(channelIntegrations).map(createIntegration => createIntegration());\n const replacedOtelIntegrationNames = integrations.map(i => i.name);\n\n return {\n // ioredis is wired here rather than in the shared `channelIntegrations` registry: it needs\n // the node redis cache `responseHook`, and it only partially replaces the composite OTel\n // `Redis` integration (which also covers node-redis and ioredis >=5.11 native diagnostics_channel).\n // So it's added to the integration set but kept OUT of `replacedOtelIntegrationNames` — `Redis`\n // must stay; its ioredis <5.11 monkey-patch is gated off in `redisIntegration` instead.\n integrations: [...integrations, ioredisChannelIntegration({ responseHook: cacheResponseHook })],\n replacedOtelIntegrationNames,\n register: registerDiagnosticsChannelInjection,\n detect: detectOrchestrionSetup,\n };\n });\n}\n"],"names":["channelIntegrations","setDiagnosticsChannelInjectionLoader","ioredisChannelIntegration","cacheResponseHook","registerDiagnosticsChannelInjection","detectOrchestrionSetup"],"mappings":";;;;;;;AAUO,SAAS,uCAAA,GAAsE;AACpF,EAAA,OAAOA,+BAAA;AACT;AAkCO,SAAS,0CAAA,GAAmD;AACjE,EAAAC,gEAAA,CAAqC,MAAmC;AAEtE,IAAA,MAAM,YAAA,GAAe,OAAO,MAAA,CAAOD,+BAAmB,EAAE,GAAA,CAAI,CAAA,iBAAA,KAAqB,mBAAmB,CAAA;AACpG,IAAA,MAAM,4BAAA,GAA+B,YAAA,CAAa,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAEjE,IAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,YAAA,EAAc,CAAC,GAAG,YAAA,EAAcE,sCAA0B,EAAE,YAAA,EAAcC,uBAAA,EAAmB,CAAC,CAAA;AAAA,MAC9F,4BAAA;AAAA,MACA,QAAA,EAAUC,4CAAA;AAAA,MACV,MAAA,EAAQC;AAAA,KACV;AAAA,EACF,CAAC,CAAA;AACH;;;;;"}
@@ -3,14 +3,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3
3
  const core = require('@sentry/core');
4
4
  const nodeCore = require('@sentry/node-core');
5
5
  const http = require('../integrations/http.js');
6
- const index$1 = require('../integrations/node-fetch/index.js');
6
+ const nodeFetch = require('../integrations/node-fetch.js');
7
7
  const index = require('../integrations/tracing/index.js');
8
8
  const diagnosticsChannelInjection = require('./diagnosticsChannelInjection.js');
9
9
  const initOtel = require('./initOtel.js');
10
10
 
11
11
  function getDefaultIntegrationsWithoutPerformance() {
12
12
  const nodeCoreIntegrations = nodeCore.getDefaultIntegrations();
13
- return nodeCoreIntegrations.filter((integration) => integration.name !== "Http" && integration.name !== "NodeFetch").concat(http.httpIntegration(), index$1.nativeNodeFetchIntegration());
13
+ return nodeCoreIntegrations.filter((integration) => integration.name !== "Http" && integration.name !== "NodeFetch").concat(http.httpIntegration(), nodeFetch.nativeNodeFetchIntegration());
14
14
  }
15
15
  function getDefaultIntegrations(options) {
16
16
  const integrations = [