dd-trace 5.80.0 → 5.82.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 (460) hide show
  1. package/LICENSE-3rdparty.csv +79 -88
  2. package/ext/tags.d.ts +1 -0
  3. package/ext/tags.js +1 -0
  4. package/index.d.ts +42 -35
  5. package/loader-hook.mjs +16 -4
  6. package/package.json +33 -56
  7. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  8. package/packages/datadog-esbuild/index.js +44 -26
  9. package/packages/datadog-esbuild/src/utils.js +14 -2
  10. package/packages/datadog-instrumentations/index.js +1 -0
  11. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  12. package/packages/datadog-instrumentations/src/ai.js +2 -2
  13. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  14. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  15. package/packages/datadog-instrumentations/src/anthropic.js +14 -2
  16. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  17. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  18. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  19. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  20. package/packages/datadog-instrumentations/src/aws-sdk.js +6 -2
  21. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  22. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  23. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  24. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  25. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  26. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  27. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  28. package/packages/datadog-instrumentations/src/child_process.js +2 -2
  29. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  30. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  31. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  32. package/packages/datadog-instrumentations/src/cucumber.js +12 -13
  33. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  34. package/packages/datadog-instrumentations/src/dns.js +1 -1
  35. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  36. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  37. package/packages/datadog-instrumentations/src/express.js +1 -1
  38. package/packages/datadog-instrumentations/src/find-my-way.js +6 -5
  39. package/packages/datadog-instrumentations/src/fs.js +1 -1
  40. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  41. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  42. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  43. package/packages/datadog-instrumentations/src/google-genai.js +120 -0
  44. package/packages/datadog-instrumentations/src/graphql.js +21 -1
  45. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  46. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  47. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  48. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  49. package/packages/datadog-instrumentations/src/helpers/hooks.js +5 -1
  50. package/packages/datadog-instrumentations/src/helpers/instrument.js +11 -1
  51. package/packages/datadog-instrumentations/src/helpers/register.js +12 -5
  52. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +27 -0
  53. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +152 -0
  54. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  55. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +6 -0
  56. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langchain.js +237 -0
  57. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.js +9 -0
  58. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.mjs +11 -0
  59. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +139 -0
  60. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  61. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  62. package/packages/datadog-instrumentations/src/hono.js +55 -10
  63. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  64. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  65. package/packages/datadog-instrumentations/src/jest.js +2 -2
  66. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  67. package/packages/datadog-instrumentations/src/knex.js +1 -1
  68. package/packages/datadog-instrumentations/src/langchain.js +3 -109
  69. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  70. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  71. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  72. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  73. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  74. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  75. package/packages/datadog-instrumentations/src/mocha/main.js +1 -1
  76. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  77. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  78. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  79. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  80. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  81. package/packages/datadog-instrumentations/src/mysql2.js +2 -2
  82. package/packages/datadog-instrumentations/src/net.js +1 -1
  83. package/packages/datadog-instrumentations/src/next.js +1 -1
  84. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  85. package/packages/datadog-instrumentations/src/openai.js +2 -2
  86. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  87. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  88. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
  89. package/packages/datadog-instrumentations/src/pg.js +3 -3
  90. package/packages/datadog-instrumentations/src/pino.js +1 -1
  91. package/packages/datadog-instrumentations/src/playwright.js +46 -17
  92. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  93. package/packages/datadog-instrumentations/src/process.js +1 -1
  94. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  95. package/packages/datadog-instrumentations/src/promise.js +1 -1
  96. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  97. package/packages/datadog-instrumentations/src/q.js +1 -1
  98. package/packages/datadog-instrumentations/src/redis.js +1 -1
  99. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  100. package/packages/datadog-instrumentations/src/router.js +1 -1
  101. package/packages/datadog-instrumentations/src/selenium.js +4 -2
  102. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  103. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  104. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  105. package/packages/datadog-instrumentations/src/undici.js +4 -4
  106. package/packages/datadog-instrumentations/src/url.js +1 -1
  107. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  108. package/packages/datadog-instrumentations/src/vm.js +1 -1
  109. package/packages/datadog-instrumentations/src/when.js +1 -1
  110. package/packages/datadog-instrumentations/src/winston.js +1 -1
  111. package/packages/datadog-instrumentations/src/ws.js +38 -19
  112. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  113. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  114. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  115. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  116. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  117. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  118. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  119. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  120. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
  121. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  122. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
  123. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  124. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  125. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  126. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +1 -1
  127. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  128. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +23 -2
  129. package/packages/datadog-plugin-cypress/src/plugin.js +2 -2
  130. package/packages/datadog-plugin-cypress/src/support.js +73 -31
  131. package/packages/datadog-plugin-express/src/index.js +1 -1
  132. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  133. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  134. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  135. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  136. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  137. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  138. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  139. package/packages/datadog-plugin-google-genai/src/index.js +17 -0
  140. package/packages/datadog-plugin-google-genai/src/tracing.js +41 -0
  141. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  142. package/packages/datadog-plugin-graphql/src/tools/transforms.js +5 -4
  143. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  144. package/packages/datadog-plugin-http/src/client.js +2 -1
  145. package/packages/datadog-plugin-http/src/index.js +25 -5
  146. package/packages/datadog-plugin-http2/src/client.js +2 -2
  147. package/packages/datadog-plugin-http2/src/index.js +1 -1
  148. package/packages/datadog-plugin-jest/src/util.js +1 -1
  149. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  150. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  151. package/packages/datadog-plugin-langchain/src/tracing.js +7 -3
  152. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  153. package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
  154. package/packages/datadog-plugin-next/src/index.js +11 -3
  155. package/packages/datadog-plugin-openai/src/index.js +1 -1
  156. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  157. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  158. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  159. package/packages/datadog-plugin-ws/src/close.js +56 -3
  160. package/packages/datadog-plugin-ws/src/index.js +4 -0
  161. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  162. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  163. package/packages/datadog-plugin-ws/src/server.js +13 -1
  164. package/packages/datadog-plugin-ws/src/util.js +107 -0
  165. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  166. package/packages/dd-trace/src/aiguard/sdk.js +21 -13
  167. package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
  168. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  169. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  171. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  172. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  173. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  174. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  175. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  176. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  177. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  178. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  179. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  180. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  181. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  182. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  183. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  184. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  185. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +1 -1
  186. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  187. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  188. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  189. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  190. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  191. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +11 -16
  192. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  193. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  194. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +4 -4
  195. package/packages/dd-trace/src/appsec/index.js +8 -8
  196. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  197. package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
  198. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  199. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  200. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  201. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  202. package/packages/dd-trace/src/appsec/reporter.js +3 -7
  203. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  204. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  205. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  206. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  207. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  208. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  209. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  210. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  211. package/packages/dd-trace/src/azure_metadata.js +8 -2
  212. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +8 -6
  213. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  214. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
  215. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
  216. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +4 -2
  217. package/packages/dd-trace/src/config/remote_config.js +34 -0
  218. package/packages/dd-trace/src/config.js +109 -34
  219. package/packages/dd-trace/src/config_defaults.js +16 -3
  220. package/packages/dd-trace/src/constants.js +5 -0
  221. package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
  222. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  223. package/packages/dd-trace/src/datastreams/encoding.js +23 -6
  224. package/packages/dd-trace/src/datastreams/index.js +1 -1
  225. package/packages/dd-trace/src/datastreams/pathway.js +41 -2
  226. package/packages/dd-trace/src/datastreams/processor.js +3 -3
  227. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  228. package/packages/dd-trace/src/datastreams/writer.js +2 -2
  229. package/packages/dd-trace/src/debugger/config.js +1 -0
  230. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +15 -5
  231. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  232. package/packages/dd-trace/src/debugger/devtools_client/config.js +3 -1
  233. package/packages/dd-trace/src/debugger/devtools_client/index.js +37 -17
  234. package/packages/dd-trace/src/debugger/devtools_client/inspector_promises_polyfill.js +2 -0
  235. package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +24 -18
  236. package/packages/dd-trace/src/debugger/devtools_client/send.js +21 -11
  237. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  238. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +103 -15
  239. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +25 -0
  240. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +56 -25
  241. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +64 -23
  242. package/packages/dd-trace/src/debugger/devtools_client/snapshot/symbols.js +3 -1
  243. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +404 -0
  244. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
  245. package/packages/dd-trace/src/debugger/devtools_client/state.js +8 -3
  246. package/packages/dd-trace/src/debugger/devtools_client/status.js +3 -3
  247. package/packages/dd-trace/src/debugger/index.js +2 -2
  248. package/packages/dd-trace/src/dogstatsd.js +3 -2
  249. package/packages/dd-trace/src/encode/0.4.js +1 -1
  250. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  251. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  252. package/packages/dd-trace/src/encode/span-stats.js +13 -2
  253. package/packages/dd-trace/src/exporter.js +2 -2
  254. package/packages/dd-trace/src/exporters/agent/index.js +1 -1
  255. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
  256. package/packages/dd-trace/src/exporters/common/request.js +2 -2
  257. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  258. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  259. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  260. package/packages/dd-trace/src/flare/index.js +1 -1
  261. package/packages/dd-trace/src/guardrails/index.js +6 -3
  262. package/packages/dd-trace/src/histogram.js +1 -1
  263. package/packages/dd-trace/src/id.js +60 -0
  264. package/packages/dd-trace/src/index.js +1 -1
  265. package/packages/dd-trace/src/lambda/handler.js +4 -4
  266. package/packages/dd-trace/src/lambda/index.js +1 -1
  267. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  268. package/packages/dd-trace/src/lambda/runtime/ritm.js +2 -2
  269. package/packages/dd-trace/src/llmobs/constants/tags.js +8 -1
  270. package/packages/dd-trace/src/llmobs/index.js +8 -9
  271. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  272. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  273. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  274. package/packages/dd-trace/src/llmobs/plugins/genai/index.js +104 -0
  275. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +486 -0
  276. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  277. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  278. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  279. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  280. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  281. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +2 -2
  282. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  283. package/packages/dd-trace/src/llmobs/plugins/{openai.js → openai/index.js} +63 -6
  284. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +126 -0
  285. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  286. package/packages/dd-trace/src/llmobs/sdk.js +20 -22
  287. package/packages/dd-trace/src/llmobs/span_processor.js +15 -14
  288. package/packages/dd-trace/src/llmobs/tagger.js +4 -0
  289. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  290. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  291. package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
  292. package/packages/dd-trace/src/log/index.js +1 -1
  293. package/packages/dd-trace/src/noop/proxy.js +2 -2
  294. package/packages/dd-trace/src/noop/span.js +1 -1
  295. package/packages/dd-trace/src/openfeature/index.js +2 -2
  296. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  297. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  298. package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
  299. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  300. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  301. package/packages/dd-trace/src/opentelemetry/logs/index.js +2 -2
  302. package/packages/dd-trace/src/opentelemetry/logs/logger.js +3 -2
  303. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  304. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +5 -3
  305. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +17 -16
  306. package/packages/dd-trace/src/opentelemetry/metrics/constants.js +34 -0
  307. package/packages/dd-trace/src/opentelemetry/metrics/index.js +81 -0
  308. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +225 -0
  309. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +171 -0
  310. package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +54 -0
  311. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +62 -0
  312. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +251 -0
  313. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +557 -0
  314. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +10 -18
  315. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +47 -32
  316. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  317. package/packages/dd-trace/src/opentelemetry/span.js +3 -3
  318. package/packages/dd-trace/src/opentelemetry/tracer.js +4 -4
  319. package/packages/dd-trace/src/opentelemetry/tracer_provider.js +1 -1
  320. package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
  321. package/packages/dd-trace/src/opentracing/span.js +3 -3
  322. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  323. package/packages/dd-trace/src/payload-tagging/index.js +8 -4
  324. package/packages/dd-trace/src/plugin_manager.js +5 -3
  325. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  326. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  327. package/packages/dd-trace/src/plugins/database.js +1 -1
  328. package/packages/dd-trace/src/plugins/index.js +6 -1
  329. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  330. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  331. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  332. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  333. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  334. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  335. package/packages/dd-trace/src/plugins/util/test.js +27 -27
  336. package/packages/dd-trace/src/plugins/util/url.js +119 -1
  337. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  338. package/packages/dd-trace/src/plugins/util/web.js +18 -46
  339. package/packages/dd-trace/src/priority_sampler.js +15 -16
  340. package/packages/dd-trace/src/process-tags/index.js +83 -0
  341. package/packages/dd-trace/src/profiling/config.js +33 -22
  342. package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
  343. package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
  344. package/packages/dd-trace/src/profiling/index.js +1 -1
  345. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  346. package/packages/dd-trace/src/profiling/profiler.js +4 -5
  347. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  348. package/packages/dd-trace/src/profiling/profilers/events.js +11 -2
  349. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  350. package/packages/dd-trace/src/proxy.js +17 -18
  351. package/packages/dd-trace/src/rate_limiter.js +1 -1
  352. package/packages/dd-trace/src/remote_config/index.js +541 -137
  353. package/packages/dd-trace/src/require-package-json.js +1 -1
  354. package/packages/dd-trace/src/ritm.js +50 -27
  355. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
  356. package/packages/dd-trace/src/serverless.js +16 -0
  357. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  358. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  359. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  360. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  361. package/packages/dd-trace/src/span_format.js +10 -5
  362. package/packages/dd-trace/src/span_processor.js +8 -3
  363. package/packages/dd-trace/src/span_stats.js +21 -8
  364. package/packages/dd-trace/src/spanleak.js +1 -1
  365. package/packages/dd-trace/src/standalone/index.js +1 -1
  366. package/packages/dd-trace/src/startup-log.js +3 -3
  367. package/packages/dd-trace/src/supported-configurations.json +16 -0
  368. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  369. package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
  370. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  371. package/packages/dd-trace/src/telemetry/telemetry.js +22 -8
  372. package/packages/dd-trace/src/tracer.js +3 -3
  373. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  374. package/vendor/dist/@datadog/sketches-js/LICENSE +39 -0
  375. package/vendor/dist/@datadog/sketches-js/index.js +1 -0
  376. package/vendor/dist/@datadog/source-map/LICENSE +28 -0
  377. package/vendor/dist/@datadog/source-map/index.js +1 -0
  378. package/vendor/dist/@isaacs/ttlcache/LICENSE +55 -0
  379. package/vendor/dist/@isaacs/ttlcache/index.js +1 -0
  380. package/vendor/dist/@opentelemetry/core/LICENSE +201 -0
  381. package/vendor/dist/@opentelemetry/core/index.js +1 -0
  382. package/vendor/dist/@opentelemetry/resources/LICENSE +201 -0
  383. package/vendor/dist/@opentelemetry/resources/index.js +1 -0
  384. package/vendor/dist/astring/LICENSE +19 -0
  385. package/vendor/dist/astring/index.js +1 -0
  386. package/vendor/dist/crypto-randomuuid/index.js +1 -0
  387. package/vendor/dist/escape-string-regexp/LICENSE +9 -0
  388. package/vendor/dist/escape-string-regexp/index.js +1 -0
  389. package/vendor/dist/esquery/LICENSE +24 -0
  390. package/vendor/dist/esquery/index.js +1 -0
  391. package/vendor/dist/ignore/LICENSE +21 -0
  392. package/vendor/dist/ignore/index.js +1 -0
  393. package/vendor/dist/istanbul-lib-coverage/LICENSE +24 -0
  394. package/vendor/dist/istanbul-lib-coverage/index.js +1 -0
  395. package/vendor/dist/jest-docblock/LICENSE +21 -0
  396. package/vendor/dist/jest-docblock/index.js +1 -0
  397. package/vendor/dist/jsonpath-plus/LICENSE +22 -0
  398. package/vendor/dist/jsonpath-plus/index.js +1 -0
  399. package/vendor/dist/limiter/LICENSE +19 -0
  400. package/vendor/dist/limiter/index.js +1 -0
  401. package/vendor/dist/lodash.sortby/LICENSE +47 -0
  402. package/vendor/dist/lodash.sortby/index.js +1 -0
  403. package/vendor/dist/lru-cache/LICENSE +15 -0
  404. package/vendor/dist/lru-cache/index.js +1 -0
  405. package/vendor/dist/meriyah/LICENSE +7 -0
  406. package/vendor/dist/meriyah/index.js +1 -0
  407. package/vendor/dist/module-details-from-path/LICENSE +21 -0
  408. package/vendor/dist/module-details-from-path/index.js +1 -0
  409. package/vendor/dist/mutexify/promise/LICENSE +21 -0
  410. package/vendor/dist/mutexify/promise/index.js +1 -0
  411. package/vendor/dist/opentracing/LICENSE +201 -0
  412. package/vendor/dist/opentracing/binary_carrier.d.ts +11 -0
  413. package/vendor/dist/opentracing/constants.d.ts +61 -0
  414. package/vendor/dist/opentracing/examples/demo/demo.d.ts +2 -0
  415. package/vendor/dist/opentracing/ext/tags.d.ts +90 -0
  416. package/vendor/dist/opentracing/functions.d.ts +20 -0
  417. package/vendor/dist/opentracing/global_tracer.d.ts +14 -0
  418. package/vendor/dist/opentracing/index.d.ts +12 -0
  419. package/vendor/dist/opentracing/index.js +1 -0
  420. package/vendor/dist/opentracing/mock_tracer/index.d.ts +5 -0
  421. package/vendor/dist/opentracing/mock_tracer/mock_context.d.ts +13 -0
  422. package/vendor/dist/opentracing/mock_tracer/mock_report.d.ts +16 -0
  423. package/vendor/dist/opentracing/mock_tracer/mock_span.d.ts +50 -0
  424. package/vendor/dist/opentracing/mock_tracer/mock_tracer.d.ts +26 -0
  425. package/vendor/dist/opentracing/noop.d.ts +8 -0
  426. package/vendor/dist/opentracing/reference.d.ts +33 -0
  427. package/vendor/dist/opentracing/span.d.ts +147 -0
  428. package/vendor/dist/opentracing/span_context.d.ts +26 -0
  429. package/vendor/dist/opentracing/test/api_compatibility.d.ts +16 -0
  430. package/vendor/dist/opentracing/test/mocktracer_implemenation.d.ts +3 -0
  431. package/vendor/dist/opentracing/test/noop_implementation.d.ts +4 -0
  432. package/vendor/dist/opentracing/test/opentracing_api.d.ts +3 -0
  433. package/vendor/dist/opentracing/test/unittest.d.ts +2 -0
  434. package/vendor/dist/opentracing/tracer.d.ts +127 -0
  435. package/vendor/dist/path-to-regexp/LICENSE +21 -0
  436. package/vendor/dist/path-to-regexp/index.js +1 -0
  437. package/vendor/dist/pprof-format/LICENSE +8 -0
  438. package/vendor/dist/pprof-format/index.js +1 -0
  439. package/vendor/dist/protobufjs/LICENSE +39 -0
  440. package/vendor/dist/protobufjs/index.js +1 -0
  441. package/vendor/dist/protobufjs/minimal/LICENSE +39 -0
  442. package/vendor/dist/protobufjs/minimal/index.js +1 -0
  443. package/vendor/dist/retry/LICENSE +21 -0
  444. package/vendor/dist/retry/index.js +1 -0
  445. package/vendor/dist/rfdc/LICENSE +15 -0
  446. package/vendor/dist/rfdc/index.js +1 -0
  447. package/vendor/dist/semifies/LICENSE +201 -0
  448. package/vendor/dist/semifies/index.js +1 -0
  449. package/vendor/dist/shell-quote/LICENSE +24 -0
  450. package/vendor/dist/shell-quote/index.js +1 -0
  451. package/vendor/dist/source-map/LICENSE +28 -0
  452. package/vendor/dist/source-map/index.js +1 -0
  453. package/vendor/dist/source-map/lib/util/LICENSE +28 -0
  454. package/vendor/dist/source-map/lib/util/index.js +1 -0
  455. package/vendor/dist/source-map/mappings.wasm +0 -0
  456. package/vendor/dist/tlhunter-sorted-set/LICENSE +21 -0
  457. package/vendor/dist/tlhunter-sorted-set/index.js +1 -0
  458. package/vendor/dist/ttl-set/LICENSE +21 -0
  459. package/vendor/dist/ttl-set/index.js +1 -0
  460. package/packages/dd-trace/src/remote_config/manager.js +0 -368
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const satisfies = require('semifies')
3
+ const satisfies = require('../../../vendor/dist/semifies')
4
4
 
5
- const { addHook, channel } = require('./helpers/instrument')
6
5
  const shimmer = require('../../datadog-shimmer')
7
6
  const {
8
7
  parseAnnotations,
@@ -11,7 +10,11 @@ const {
11
10
  getIsFaultyEarlyFlakeDetection
12
11
  } = require('../../dd-trace/src/plugins/util/test')
13
12
  const log = require('../../dd-trace/src/log')
13
+ const {
14
+ getEnvironmentVariable
15
+ } = require('../../dd-trace/src/config-helper')
14
16
  const { DD_MAJOR } = require('../../../version')
17
+ const { addHook, channel } = require('./helpers/instrument')
15
18
 
16
19
  const testStartCh = channel('ci:playwright:test:start')
17
20
  const testFinishCh = channel('ci:playwright:test:finish')
@@ -38,7 +41,7 @@ const testSuiteToTestStatuses = new Map()
38
41
  const testSuiteToErrors = new Map()
39
42
  const testsToTestStatuses = new Map()
40
43
 
41
- const RUM_FLUSH_WAIT_TIME = 1000
44
+ const RUM_FLUSH_WAIT_TIME = Number(getEnvironmentVariable('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 1000
42
45
 
43
46
  let applyRepeatEachIndex = null
44
47
 
@@ -687,10 +690,11 @@ function runAllTestsWrapper (runAllTests, playwrightVersion) {
687
690
 
688
691
  const projects = getProjectsFromRunner(this, config)
689
692
 
690
- const shouldSetRetries = isFlakyTestRetriesEnabled &&
691
- flakyTestRetriesCount > 0 &&
692
- !isTestManagementTestsEnabled
693
- if (shouldSetRetries) {
693
+ // ATR and `--retries` are now compatible with Test Management.
694
+ // Test Management tests have their retries set to 0 at the test level,
695
+ // preventing them from being retried by ATR or `--retries`.
696
+ const shouldSetATRRetries = isFlakyTestRetriesEnabled && flakyTestRetriesCount > 0
697
+ if (shouldSetATRRetries) {
694
698
  projects.forEach(project => {
695
699
  if (project.retries === 0) { // Only if it hasn't been set by the user
696
700
  project.retries = flakyTestRetriesCount
@@ -722,6 +726,8 @@ function runAllTestsWrapper (runAllTests, playwrightVersion) {
722
726
  })
723
727
  })
724
728
 
729
+ let preventedToFail = false
730
+
725
731
  const sessionStatus = runAllTestsReturn.status || runAllTestsReturn
726
732
 
727
733
  if (isTestManagementTestsEnabled && sessionStatus === 'failed') {
@@ -730,23 +736,30 @@ function runAllTestsWrapper (runAllTests, playwrightVersion) {
730
736
  let totalPureQuarantinedFailedTestCount = 0
731
737
 
732
738
  for (const [fqn, testStatuses] of testsToTestStatuses.entries()) {
733
- const failedCount = testStatuses.filter(status => status === 'fail').length
734
- totalFailedTestCount += failedCount
735
- if (quarantinedButNotAttemptToFixFqns.has(fqn)) {
736
- totalPureQuarantinedFailedTestCount += failedCount
739
+ // Only count as failed if the final status (after retries) is 'fail'
740
+ const lastStatus = testStatuses[testStatuses.length - 1]
741
+ if (lastStatus === 'fail') {
742
+ totalFailedTestCount += 1
743
+ if (quarantinedButNotAttemptToFixFqns.has(fqn)) {
744
+ totalPureQuarantinedFailedTestCount += 1
745
+ }
737
746
  }
738
747
  }
739
748
 
740
749
  for (const test of quarantinedOrDisabledTestsAttemptToFix) {
741
750
  const testFqn = getTestFullyQualifiedName(test)
742
751
  const testStatuses = testsToTestStatuses.get(testFqn)
743
- totalAttemptToFixFailedTestCount += testStatuses.filter(status => status === 'fail').length
752
+ // Only count as failed if the final status (after retries) is 'fail'
753
+ if (testStatuses && testStatuses[testStatuses.length - 1] === 'fail') {
754
+ totalAttemptToFixFailedTestCount += 1
755
+ }
744
756
  }
745
757
 
746
758
  const totalIgnorableFailures = totalAttemptToFixFailedTestCount + totalPureQuarantinedFailedTestCount
747
759
 
748
760
  if (totalFailedTestCount > 0 && totalFailedTestCount === totalIgnorableFailures) {
749
761
  runAllTestsReturn = 'passed'
762
+ preventedToFail = true
750
763
  }
751
764
  }
752
765
 
@@ -754,7 +767,7 @@ function runAllTestsWrapper (runAllTests, playwrightVersion) {
754
767
  onDone = resolve
755
768
  })
756
769
  testSessionFinishCh.publish({
757
- status: STATUS_TO_TEST_STATUS[sessionStatus],
770
+ status: preventedToFail ? 'pass' : STATUS_TO_TEST_STATUS[sessionStatus],
758
771
  isEarlyFlakeDetectionEnabled,
759
772
  isEarlyFlakeDetectionFaulty,
760
773
  isTestManagementTestsEnabled,
@@ -917,6 +930,8 @@ addHook({
917
930
  }
918
931
  if (testProperties.attemptToFix) {
919
932
  test._ddIsAttemptToFix = true
933
+ // Prevent ATR or `--retries` from retrying attemptToFix tests
934
+ test.retries = 0
920
935
  const fileSuite = getSuiteType(test, 'file')
921
936
 
922
937
  if (!fileSuitesWithManagedTestsToProjects.has(fileSuite)) {
@@ -991,6 +1006,8 @@ addHook({
991
1006
  newTests.forEach(newTest => {
992
1007
  newTest._ddIsNew = true
993
1008
  if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped' && !newTest._ddIsModified) {
1009
+ // Prevent ATR or `--retries` from retrying new tests if EFD is enabled
1010
+ newTest.retries = 0
994
1011
  const fileSuite = getSuiteType(newTest, 'file')
995
1012
  if (!fileSuitesWithNewTestsToProjects.has(fileSuite)) {
996
1013
  fileSuitesWithNewTestsToProjects.set(fileSuite, getSuiteType(newTest, 'project'))
@@ -1064,9 +1081,19 @@ addHook({
1064
1081
 
1065
1082
  try {
1066
1083
  if (page) {
1067
- const isRumActive = await page.evaluate(() => {
1068
- return window.DD_RUM && window.DD_RUM.getInternalContext ? !!window.DD_RUM.getInternalContext() : false
1084
+ const { isRumInstrumented, isRumActive, rumSamplingRate } = await page.evaluate(() => {
1085
+ const isRumInstrumented = !!window.DD_RUM
1086
+ const isRumActive = window.DD_RUM && window.DD_RUM.getInternalContext
1087
+ ? !!window.DD_RUM.getInternalContext()
1088
+ : false
1089
+ const rumSamplingRate = window.DD_RUM && window.DD_RUM.getInitConfiguration
1090
+ ? window.DD_RUM.getInitConfiguration().sessionSampleRate
1091
+ : null
1092
+ return { isRumInstrumented, isRumActive, rumSamplingRate }
1069
1093
  })
1094
+ if (isRumInstrumented && rumSamplingRate < 100 && !isRumActive) {
1095
+ log.debug("RUM was detected on the page, but it isn't active because the sampling rate is below 100%")
1096
+ }
1070
1097
 
1071
1098
  if (isRumActive) {
1072
1099
  testPageGotoCh.publish({
@@ -1075,8 +1102,9 @@ addHook({
1075
1102
  })
1076
1103
  }
1077
1104
  }
1078
- } catch {
1105
+ } catch (e) {
1079
1106
  // ignore errors such as redirects, context destroyed, etc
1107
+ log.error('goto hook error', e)
1080
1108
  }
1081
1109
 
1082
1110
  return response
@@ -1168,8 +1196,9 @@ addHook({
1168
1196
  }
1169
1197
  }
1170
1198
  }
1171
- } catch {
1199
+ } catch (e) {
1172
1200
  // ignore errors
1201
+ log.error('afterEach hook error', e)
1173
1202
  }
1174
1203
  },
1175
1204
  title: 'afterEach hook',
@@ -1,12 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const {
4
- channel,
5
- addHook
6
- } = require('./helpers/instrument')
3
+ const tracingChannel = require('dc-polyfill').tracingChannel
7
4
 
5
+ const { channel, addHook } = require('./helpers/instrument')
8
6
  const prismaEngineStart = channel('apm:prisma:engine:start')
9
- const tracingChannel = require('dc-polyfill').tracingChannel
10
7
  const clientCH = tracingChannel('apm:prisma:client')
11
8
 
12
9
  const allowedClientSpanOperations = new Set([
@@ -15,14 +12,20 @@ const allowedClientSpanOperations = new Set([
15
12
  'transaction'
16
13
  ])
17
14
 
18
- class TracingHelper {
15
+ class DatadogTracingHelper {
19
16
  dbConfig = null
17
+
18
+ constructor (dbConfig = null) {
19
+ this.dbConfig = dbConfig
20
+ }
21
+
20
22
  isEnabled () {
21
23
  return true
22
24
  }
23
25
 
24
26
  // needs a sampled tracecontext to generate engine spans
25
27
  getTraceParent (context) {
28
+ // TODO: Fix the id
26
29
  return '00-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bbbbbbbbbbbbbbbb-01' // valid sampled traceparent
27
30
  }
28
31
 
@@ -34,7 +37,9 @@ class TracingHelper {
34
37
  }
35
38
  }
36
39
 
37
- getActiveContext () {}
40
+ getActiveContext () {
41
+ // TODO: Fix context
42
+ }
38
43
 
39
44
  runInChildSpan (options, callback) {
40
45
  if (typeof options === 'string') {
@@ -63,42 +68,52 @@ class TracingHelper {
63
68
  }
64
69
  }
65
70
 
66
- addHook({ name: '@prisma/client', versions: ['>=6.1.0'] }, (prisma, version) => {
67
- const tracingHelper = new TracingHelper()
68
-
69
- // we need to patch the prototype to get db config since this works for ESM and CJS alike.
70
- const originalRequest = prisma.PrismaClient.prototype._request
71
- prisma.PrismaClient.prototype._request = function () {
72
- if (!tracingHelper.dbConfig) {
73
- const inlineDatasources = this._engine?.config.inlineDatasources
74
- const overrideDatasources = this._engine?.config.overrideDatasources
75
- const datasources = inlineDatasources?.db.url?.value ?? overrideDatasources?.db?.url
76
- if (datasources) {
77
- const result = parseDBString(datasources)
78
- tracingHelper.setDbString(result)
71
+ const prismaHook = (runtime, versions, name, isIitm) => {
72
+ const originalGetPrismaClient = runtime.getPrismaClient
73
+
74
+ if (!originalGetPrismaClient) return runtime
75
+ const datadogTracingHelper = new DatadogTracingHelper()
76
+
77
+ const wrappedGetPrismaClient = function (config) {
78
+ const datasources = config.inlineDatasources?.db.url?.value
79
+ if (datasources) {
80
+ const dbConfig = parseDBString(datasources)
81
+ datadogTracingHelper.setDbString(dbConfig)
82
+ }
83
+
84
+ const PrismaClient = originalGetPrismaClient.call(this, config)
85
+ return class WrappedPrismaClientClass extends PrismaClient {
86
+ constructor (clientConfig) {
87
+ super(clientConfig)
88
+ this._tracingHelper = datadogTracingHelper
89
+ this._engine.tracingHelper = datadogTracingHelper
79
90
  }
80
91
  }
81
- return originalRequest.apply(this, arguments)
82
92
  }
83
93
 
84
- /*
85
- * This is taking advantage of the built in tracing support from Prisma.
86
- * The below variable is setting a global tracing helper that Prisma uses
87
- * to enable OpenTelemetry.
88
- */
89
- // https://github.com/prisma/prisma/blob/478293bbfce91e41ceff02f2a0b03bb8acbca03e/packages/instrumentation/src/PrismaInstrumentation.ts#L42
90
- const versions = version.split('.')
91
- if (versions[0] === '6' && versions[1] < 4) {
92
- global.PRISMA_INSTRUMENTATION = {
93
- helper: tracingHelper
94
- }
95
- } else {
96
- global[`V${versions[0]}_PRISMA_INSTRUMENTATION`] = {
97
- helper: tracingHelper
98
- }
94
+ if (isIitm) {
95
+ runtime.getPrismaClient = wrappedGetPrismaClient
96
+ return runtime
99
97
  }
100
98
 
101
- return prisma
99
+ return new Proxy(runtime, {
100
+ get (target, prop) {
101
+ if (prop === 'getPrismaClient') {
102
+ return wrappedGetPrismaClient
103
+ }
104
+ return target[prop]
105
+ }
106
+ })
107
+ }
108
+
109
+ const prismaConfigs = [
110
+ { name: '@prisma/client', versions: ['>=6.1.0 <7.0.0'], filePattern: 'runtime/library.*' },
111
+ { name: './runtime/library.js', versions: ['>=6.1.0 <7.0.0'], file: 'runtime/library.js' },
112
+ { name: '@prisma/client', versions: ['>=7.0.0'], filePattern: 'runtime/client.*' }
113
+ ]
114
+
115
+ prismaConfigs.forEach(config => {
116
+ addHook(config, prismaHook)
102
117
  })
103
118
 
104
119
  function parseDBString (dbString) {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const shimmer = require('../../datadog-shimmer')
4
3
  const { channel } = require('dc-polyfill')
4
+ const shimmer = require('../../datadog-shimmer')
5
5
 
6
6
  const startSetUncaughtExceptionCaptureCallback = channel('datadog:process:setUncaughtExceptionCaptureCallback:start')
7
7
 
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const { addHook } = require('./helpers/instrument')
4
5
  const { wrapThen } = require('./helpers/promise')
5
- const shimmer = require('../../datadog-shimmer')
6
6
 
7
7
  addHook({
8
8
  name: 'promise-js',
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const { addHook } = require('./helpers/instrument')
4
5
  const { wrapThen } = require('./helpers/promise')
5
- const shimmer = require('../../datadog-shimmer')
6
6
 
7
7
  addHook({
8
8
  name: 'promise',
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
+ const dc = require('dc-polyfill')
3
4
  const shimmer = require('../../datadog-shimmer')
4
5
  const { addHook } = require('./helpers/instrument')
5
6
 
6
- const dc = require('dc-polyfill')
7
7
  const serializeChannel = dc.channel('apm:protobufjs:serialize-start')
8
8
  const deserializeChannel = dc.channel('apm:protobufjs:deserialize-end')
9
9
 
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const { addHook } = require('./helpers/instrument')
4
5
  const { wrapThen } = require('./helpers/promise')
5
- const shimmer = require('../../datadog-shimmer')
6
6
 
7
7
  addHook({
8
8
  name: 'q',
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const {
4
5
  channel,
5
6
  addHook
6
7
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
8
 
9
9
  const startCh = channel('apm:redis:command:start')
10
10
  const finishCh = channel('apm:redis:command:finish')
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const {
4
5
  channel,
5
6
  addHook
6
7
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
8
 
9
9
  const circularBufferConstructor = Symbol('circularBufferConstructor')
10
10
  const inFlightDeliveries = Symbol('inFlightDeliveries')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const METHODS = [...require('http').METHODS.map(v => v.toLowerCase()), 'all']
4
- const pathToRegExp = require('path-to-regexp')
4
+ const pathToRegExp = require('../../../vendor/dist/path-to-regexp')
5
5
  const shimmer = require('../../datadog-shimmer')
6
6
  const { addHook, channel } = require('./helpers/instrument')
7
7
 
@@ -1,7 +1,8 @@
1
1
  'use strict'
2
2
 
3
- const { addHook, channel } = require('./helpers/instrument')
4
3
  const shimmer = require('../../datadog-shimmer')
4
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
5
+ const { addHook, channel } = require('./helpers/instrument')
5
6
 
6
7
  const ciSeleniumDriverGetStartCh = channel('ci:selenium:driver:get')
7
8
 
@@ -15,7 +16,8 @@ if (window.DD_RUM && window.DD_RUM.stopSession) {
15
16
  `
16
17
  const IS_RUM_ACTIVE_SCRIPT = 'return !!window.DD_RUM'
17
18
 
18
- const DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS = 500
19
+ const DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS =
20
+ Number(getEnvironmentVariable('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 500
19
21
  const DD_CIVISIBILITY_TEST_EXECUTION_ID_COOKIE_NAME = 'datadog-ci-visibility-test-execution-id'
20
22
 
21
23
  // TODO: can we increase the supported version range?
@@ -1,12 +1,11 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const {
4
5
  channel,
5
6
  addHook
6
7
  } = require('./helpers/instrument')
7
8
 
8
- const shimmer = require('../../datadog-shimmer')
9
-
10
9
  addHook({ name: 'sequelize', versions: ['>=4'], file: ['lib/sequelize.js'] }, Sequelize => {
11
10
  const startCh = channel('datadog:sequelize:query:start')
12
11
  const finishCh = channel('datadog:sequelize:query:finish')
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const {
4
5
  channel,
5
6
  addHook
6
7
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
8
 
9
9
  /**
10
10
  * @description The enum values in this map are not exposed from ShareDB, so the keys are hard-coded here.
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const {
4
5
  channel,
5
6
  addHook
6
7
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
8
 
9
9
  addHook({ name: 'tedious', versions: ['>=1.0.0'] }, tedious => {
10
10
  const startCh = channel('apm:tedious:request:start')
@@ -1,15 +1,15 @@
1
1
  'use strict'
2
2
 
3
+ const tracingChannel = require('dc-polyfill').tracingChannel
4
+
5
+ const shimmer = require('../../datadog-shimmer')
3
6
  const {
4
7
  addHook
5
8
  } = require('./helpers/instrument')
6
- const shimmer = require('../../datadog-shimmer')
9
+ const { createWrapFetch } = require('./helpers/fetch')
7
10
 
8
- const tracingChannel = require('dc-polyfill').tracingChannel
9
11
  const ch = tracingChannel('apm:undici:fetch')
10
12
 
11
- const { createWrapFetch } = require('./helpers/fetch')
12
-
13
13
  addHook({
14
14
  name: 'undici',
15
15
  versions: ['^4.4.1', '5', '>=6.0.0']
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { addHook, channel } = require('./helpers/instrument')
4
3
  const shimmer = require('../../datadog-shimmer')
4
+ const { addHook, channel } = require('./helpers/instrument')
5
5
  const names = ['url', 'node:url']
6
6
 
7
7
  const parseFinishedChannel = channel('datadog:url:parse:finish')
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
- const { addHook, channel } = require('./helpers/instrument')
4
3
  const shimmer = require('../../datadog-shimmer')
5
4
  const log = require('../../dd-trace/src/log')
6
5
  const {
7
6
  VITEST_WORKER_TRACE_PAYLOAD_CODE,
8
7
  VITEST_WORKER_LOGS_PAYLOAD_CODE
9
8
  } = require('../../dd-trace/src/plugins/util/test')
9
+ const { addHook, channel } = require('./helpers/instrument')
10
10
 
11
11
  // test hooks
12
12
  const testStartCh = channel('ci:vitest:test:start')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { channel, addHook } = require('./helpers/instrument')
4
3
  const shimmer = require('../../datadog-shimmer')
4
+ const { channel, addHook } = require('./helpers/instrument')
5
5
  const names = ['vm', 'node:vm']
6
6
 
7
7
  const runScriptStartChannel = channel('datadog:vm:run-script:start')
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const { addHook } = require('./helpers/instrument')
4
5
  const { wrapThen } = require('./helpers/promise')
5
- const shimmer = require('../../datadog-shimmer')
6
6
 
7
7
  addHook({
8
8
  name: 'when',
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const {
4
5
  channel,
5
6
  addHook
6
7
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
8
 
9
9
  const patched = new WeakSet()
10
10
 
@@ -1,17 +1,21 @@
1
1
  'use strict'
2
2
 
3
+ const tracingChannel = require('dc-polyfill').tracingChannel
4
+
5
+ const shimmer = require('../../datadog-shimmer')
3
6
  const {
4
7
  addHook,
5
8
  channel
6
9
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
10
 
9
- const tracingChannel = require('dc-polyfill').tracingChannel
10
11
  const serverCh = tracingChannel('ws:server:connect')
11
12
  const producerCh = tracingChannel('ws:send')
12
13
  const receiverCh = tracingChannel('ws:receive')
13
14
  const closeCh = tracingChannel('ws:close')
14
15
  const emitCh = channel('tracing:ws:server:connect:emit')
16
+ // TODO: Add a error channel / handle error events properly.
17
+
18
+ const eventHandlerMap = new WeakMap()
15
19
 
16
20
  function wrapHandleUpgrade (handleUpgrade) {
17
21
  return function () {
@@ -67,24 +71,37 @@ function createWrapEmit (emit) {
67
71
  }
68
72
 
69
73
  function createWrappedHandler (handler) {
70
- return function wrappedMessageHandler (data, binary) {
74
+ return shimmer.wrapFunction(handler, originalHandler => function (data, binary) {
71
75
  const byteLength = dataLength(data)
72
76
 
73
77
  const ctx = { data, binary, socket: this._sender?._socket, byteLength }
74
78
 
75
- return receiverCh.traceSync(handler, ctx, this, data, binary)
76
- }
79
+ return receiverCh.traceSync(originalHandler, ctx, this, data, binary)
80
+ })
77
81
  }
78
82
 
79
83
  function wrapListener (originalOn) {
80
84
  return function (eventName, handler) {
81
85
  if (eventName === 'message') {
82
- return originalOn.call(this, eventName, createWrappedHandler(handler))
86
+ // Prevent multiple wrapping of the same handler in case the user adds the listener multiple times
87
+ const wrappedHandler = eventHandlerMap.get(handler) ?? createWrappedHandler(handler)
88
+ eventHandlerMap.set(handler, wrappedHandler)
89
+ return originalOn.call(this, eventName, wrappedHandler)
83
90
  }
84
91
  return originalOn.apply(this, arguments)
85
92
  }
86
93
  }
87
94
 
95
+ function removeListener (originalOff) {
96
+ return function (eventName, handler) {
97
+ if (eventName === 'message') {
98
+ const wrappedHandler = eventHandlerMap.get(handler)
99
+ return originalOff.call(this, eventName, wrappedHandler)
100
+ }
101
+ return originalOff.apply(this, arguments)
102
+ }
103
+ }
104
+
88
105
  function wrapClose (close) {
89
106
  return function (code, data) {
90
107
  // _closeFrameReceived is set to true when receiver receives a close frame from a peer
@@ -115,22 +132,24 @@ addHook({
115
132
  versions: ['>=8.0.0']
116
133
  }, ws => {
117
134
  shimmer.wrap(ws.prototype, 'send', wrapSend)
118
- shimmer.wrap(ws.prototype, 'on', wrapListener)
119
135
  shimmer.wrap(ws.prototype, 'close', wrapClose)
136
+
137
+ // TODO: Do not wrap these methods. Instead, add a listener to the websocket instance when one is created.
138
+ // That way it avoids producing too many spans for the same websocket instance and less user code is impacted.
139
+ shimmer.wrap(ws.prototype, 'on', wrapListener)
140
+ shimmer.wrap(ws.prototype, 'addListener', wrapListener)
141
+ shimmer.wrap(ws.prototype, 'off', removeListener)
142
+ shimmer.wrap(ws.prototype, 'removeListener', removeListener)
143
+
120
144
  return ws
121
145
  })
122
146
 
123
- function detectType (data) {
124
- if (typeof Blob !== 'undefined' && data instanceof Blob) return 'Blob'
125
- if (typeof Buffer !== 'undefined' && Buffer.isBuffer(data)) return 'Buffer'
126
- if (typeof data === 'string') return 'string'
127
- return 'Unknown'
128
- }
129
-
130
147
  function dataLength (data) {
131
- const type = detectType(data)
132
- if (type === 'Blob') return data.size
133
- if (type === 'Buffer') return data.length
134
- if (type === 'string') return Buffer.byteLength(data)
135
- return 0
148
+ if (typeof data === 'string') {
149
+ return Buffer.byteLength(data)
150
+ }
151
+ if (data instanceof Blob) {
152
+ return data.size
153
+ }
154
+ return data?.length ?? 0
136
155
  }
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const CompositePlugin = require('../../dd-trace/src/plugins/composite')
3
4
  const ProducerPlugin = require('./producer')
4
5
  const ConsumerPlugin = require('./consumer')
5
- const CompositePlugin = require('../../dd-trace/src/plugins/composite')
6
6
 
7
7
  class Amqp10Plugin extends CompositePlugin {
8
8
  static id = 'amqp10'
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
+ const CompositePlugin = require('../../dd-trace/src/plugins/composite')
3
4
  const ProducerPlugin = require('./producer')
4
5
  const ConsumerPlugin = require('./consumer')
5
6
  const ClientPlugin = require('./client')
6
- const CompositePlugin = require('../../dd-trace/src/plugins/composite')
7
7
 
8
8
  // TODO: Consider splitting channels for publish/receive in the instrumentation.
9
9
  class AmqplibPlugin extends CompositePlugin {
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  const CompositePlugin = require('../../dd-trace/src/plugins/composite')
4
- const AnthropicTracingPlugin = require('./tracing')
5
4
  const AnthropicLLMObsPlugin = require('../../dd-trace/src/llmobs/plugins/anthropic')
5
+ const AnthropicTracingPlugin = require('./tracing')
6
6
 
7
7
  class AnthropicPlugin extends CompositePlugin {
8
8
  static id = 'anthropic'