dd-trace 5.81.0 → 5.83.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 (371) hide show
  1. package/LICENSE-3rdparty.csv +78 -79
  2. package/ci/init.js +6 -6
  3. package/index.d.ts +159 -3
  4. package/loader-hook.mjs +8 -3
  5. package/package.json +64 -66
  6. package/packages/datadog-core/src/storage.js +7 -7
  7. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  8. package/packages/datadog-esbuild/index.js +14 -7
  9. package/packages/datadog-esbuild/src/utils.js +14 -2
  10. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  11. package/packages/datadog-instrumentations/src/ai.js +9 -5
  12. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  14. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  15. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  16. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  17. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  18. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  21. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  22. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  23. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  24. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  25. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  26. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  27. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  28. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  29. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  30. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  31. package/packages/datadog-instrumentations/src/cucumber.js +13 -14
  32. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  33. package/packages/datadog-instrumentations/src/dns.js +1 -1
  34. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  35. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  36. package/packages/datadog-instrumentations/src/express.js +1 -1
  37. package/packages/datadog-instrumentations/src/fs.js +1 -1
  38. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  39. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  40. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  41. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  42. package/packages/datadog-instrumentations/src/graphql.js +2 -2
  43. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  44. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  45. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  47. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  48. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  49. package/packages/datadog-instrumentations/src/helpers/instrumentations.js +4 -3
  50. package/packages/datadog-instrumentations/src/helpers/register.js +9 -11
  51. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  52. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  53. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  54. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  55. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  56. package/packages/datadog-instrumentations/src/hono.js +55 -10
  57. package/packages/datadog-instrumentations/src/http/client.js +2 -2
  58. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  59. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  60. package/packages/datadog-instrumentations/src/jest.js +37 -16
  61. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  62. package/packages/datadog-instrumentations/src/knex.js +1 -1
  63. package/packages/datadog-instrumentations/src/koa.js +2 -1
  64. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  65. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  66. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  67. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  68. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  69. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  70. package/packages/datadog-instrumentations/src/mocha/main.js +2 -2
  71. package/packages/datadog-instrumentations/src/mocha/worker.js +1 -1
  72. package/packages/datadog-instrumentations/src/mocha.js +1 -1
  73. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  74. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  75. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  76. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  77. package/packages/datadog-instrumentations/src/mysql.js +2 -2
  78. package/packages/datadog-instrumentations/src/mysql2.js +3 -3
  79. package/packages/datadog-instrumentations/src/net.js +14 -6
  80. package/packages/datadog-instrumentations/src/next.js +1 -1
  81. package/packages/datadog-instrumentations/src/nyc.js +2 -2
  82. package/packages/datadog-instrumentations/src/openai.js +2 -2
  83. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  84. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  85. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +5 -5
  86. package/packages/datadog-instrumentations/src/pg.js +7 -5
  87. package/packages/datadog-instrumentations/src/pino.js +1 -1
  88. package/packages/datadog-instrumentations/src/playwright.js +4 -4
  89. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  90. package/packages/datadog-instrumentations/src/process.js +1 -1
  91. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  92. package/packages/datadog-instrumentations/src/promise.js +1 -1
  93. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  94. package/packages/datadog-instrumentations/src/q.js +1 -1
  95. package/packages/datadog-instrumentations/src/redis.js +1 -1
  96. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  97. package/packages/datadog-instrumentations/src/selenium.js +3 -3
  98. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  99. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  100. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  101. package/packages/datadog-instrumentations/src/undici.js +15 -4
  102. package/packages/datadog-instrumentations/src/url.js +1 -1
  103. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  104. package/packages/datadog-instrumentations/src/vm.js +1 -1
  105. package/packages/datadog-instrumentations/src/when.js +1 -1
  106. package/packages/datadog-instrumentations/src/winston.js +1 -1
  107. package/packages/datadog-instrumentations/src/ws.js +3 -2
  108. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  109. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  110. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  111. package/packages/datadog-plugin-aws-sdk/src/base.js +4 -4
  112. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  113. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  114. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  115. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  116. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  117. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +21 -7
  118. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  119. package/packages/datadog-plugin-azure-service-bus/src/producer.js +6 -2
  120. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  121. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  122. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  123. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  124. package/packages/datadog-plugin-cucumber/src/index.js +2 -2
  125. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -2
  126. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  127. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -2
  128. package/packages/datadog-plugin-express/src/code_origin.js +21 -15
  129. package/packages/datadog-plugin-express/src/index.js +1 -1
  130. package/packages/datadog-plugin-fastify/src/code_origin.js +17 -4
  131. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  132. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  133. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  134. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  135. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  136. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  137. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  138. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  139. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  140. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  141. package/packages/datadog-plugin-http/src/client.js +2 -1
  142. package/packages/datadog-plugin-http/src/index.js +25 -5
  143. package/packages/datadog-plugin-http2/src/client.js +2 -2
  144. package/packages/datadog-plugin-http2/src/index.js +1 -1
  145. package/packages/datadog-plugin-jest/src/index.js +2 -2
  146. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  147. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  148. package/packages/datadog-plugin-mocha/src/index.js +2 -2
  149. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  150. package/packages/datadog-plugin-mongodb-core/src/index.js +8 -4
  151. package/packages/datadog-plugin-openai/src/index.js +1 -1
  152. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  153. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  154. package/packages/datadog-plugin-playwright/src/index.js +3 -3
  155. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  156. package/packages/datadog-plugin-undici/src/index.js +305 -2
  157. package/packages/datadog-plugin-vitest/src/index.js +5 -5
  158. package/packages/datadog-plugin-ws/src/close.js +56 -3
  159. package/packages/datadog-plugin-ws/src/index.js +4 -0
  160. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  161. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  162. package/packages/datadog-plugin-ws/src/server.js +13 -1
  163. package/packages/datadog-plugin-ws/src/util.js +107 -0
  164. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  165. package/packages/dd-trace/index.js +19 -0
  166. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  167. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  168. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  171. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  172. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  173. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  174. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  175. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  176. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  177. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  178. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  179. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  180. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  181. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  183. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  184. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  185. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  186. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  187. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  188. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +11 -15
  189. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  190. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  191. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  192. package/packages/dd-trace/src/appsec/index.js +8 -8
  193. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  194. package/packages/dd-trace/src/appsec/rasp/index.js +3 -5
  195. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  196. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  197. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  198. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  199. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  200. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  201. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  202. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  203. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  204. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  205. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  206. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  207. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  208. package/packages/dd-trace/src/azure_metadata.js +15 -4
  209. package/packages/dd-trace/src/baggage.js +36 -11
  210. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -1
  211. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  212. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  213. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  214. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  215. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  216. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  217. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -3
  218. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -3
  219. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +5 -5
  220. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
  221. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  222. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -4
  223. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -4
  224. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  225. package/packages/dd-trace/src/{config_defaults.js → config/defaults.js} +5 -4
  226. package/packages/dd-trace/src/{config-helper.js → config/helper.js} +88 -15
  227. package/packages/dd-trace/src/{config.js → config/index.js} +115 -67
  228. package/packages/dd-trace/src/config/remote_config.js +202 -0
  229. package/packages/dd-trace/src/{config_stable.js → config/stable.js} +20 -32
  230. package/packages/dd-trace/src/{supported-configurations.json → config/supported-configurations.json} +5 -0
  231. package/packages/dd-trace/src/constants.js +5 -0
  232. package/packages/dd-trace/src/crashtracking/crashtracker.js +11 -2
  233. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  234. package/packages/dd-trace/src/datastreams/index.js +1 -1
  235. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  236. package/packages/dd-trace/src/datastreams/processor.js +3 -3
  237. package/packages/dd-trace/src/datastreams/writer.js +3 -3
  238. package/packages/dd-trace/src/debugger/config.js +1 -0
  239. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  240. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  241. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  242. package/packages/dd-trace/src/debugger/devtools_client/send.js +6 -6
  243. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  244. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  245. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +1 -1
  246. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  247. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  248. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  249. package/packages/dd-trace/src/debugger/index.js +84 -16
  250. package/packages/dd-trace/src/dogstatsd.js +5 -4
  251. package/packages/dd-trace/src/encode/0.4.js +3 -3
  252. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  253. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  254. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  255. package/packages/dd-trace/src/exporter.js +2 -2
  256. package/packages/dd-trace/src/exporters/agent/index.js +2 -4
  257. package/packages/dd-trace/src/exporters/agent/writer.js +9 -14
  258. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
  259. package/packages/dd-trace/src/exporters/common/docker.js +2 -2
  260. package/packages/dd-trace/src/exporters/common/request.js +3 -3
  261. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  262. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  263. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  264. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  265. package/packages/dd-trace/src/flare/index.js +2 -2
  266. package/packages/dd-trace/src/guardrails/index.js +6 -3
  267. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  268. package/packages/dd-trace/src/id.js +1 -1
  269. package/packages/dd-trace/src/index.js +4 -4
  270. package/packages/dd-trace/src/lambda/handler.js +5 -5
  271. package/packages/dd-trace/src/lambda/index.js +2 -2
  272. package/packages/dd-trace/src/lambda/runtime/patch.js +6 -6
  273. package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -3
  274. package/packages/dd-trace/src/llmobs/constants/tags.js +14 -1
  275. package/packages/dd-trace/src/llmobs/index.js +10 -11
  276. package/packages/dd-trace/src/llmobs/noop.js +2 -0
  277. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  278. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  279. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  280. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  281. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  282. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  283. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  284. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  285. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  286. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  287. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +19 -5
  288. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  289. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  290. package/packages/dd-trace/src/llmobs/sdk.js +46 -26
  291. package/packages/dd-trace/src/llmobs/span_processor.js +26 -20
  292. package/packages/dd-trace/src/llmobs/tagger.js +175 -1
  293. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  294. package/packages/dd-trace/src/llmobs/writers/base.js +117 -38
  295. package/packages/dd-trace/src/llmobs/writers/spans.js +5 -5
  296. package/packages/dd-trace/src/log/index.js +5 -5
  297. package/packages/dd-trace/src/noop/proxy.js +5 -5
  298. package/packages/dd-trace/src/noop/span.js +1 -1
  299. package/packages/dd-trace/src/openfeature/index.js +2 -2
  300. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  301. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  302. package/packages/dd-trace/src/openfeature/writers/base.js +12 -13
  303. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  304. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  305. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  306. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  307. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  308. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  309. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  310. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  311. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  312. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +2 -2
  313. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  314. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  315. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  316. package/packages/dd-trace/src/opentelemetry/tracer.js +51 -9
  317. package/packages/dd-trace/src/opentracing/propagation/text_map.js +68 -28
  318. package/packages/dd-trace/src/opentracing/span.js +7 -7
  319. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  320. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  321. package/packages/dd-trace/src/plugin_manager.js +8 -6
  322. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  323. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  324. package/packages/dd-trace/src/plugins/database.js +1 -1
  325. package/packages/dd-trace/src/plugins/index.js +5 -1
  326. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  327. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  328. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  329. package/packages/dd-trace/src/plugins/util/ci.js +5 -8
  330. package/packages/dd-trace/src/plugins/util/git-cache.js +3 -3
  331. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  332. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  333. package/packages/dd-trace/src/plugins/util/test.js +25 -25
  334. package/packages/dd-trace/src/plugins/util/user-provided-git.js +41 -43
  335. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  336. package/packages/dd-trace/src/priority_sampler.js +15 -16
  337. package/packages/dd-trace/src/process-tags/index.js +31 -29
  338. package/packages/dd-trace/src/profiler.js +4 -39
  339. package/packages/dd-trace/src/profiling/config.js +104 -50
  340. package/packages/dd-trace/src/profiling/exporter_cli.js +8 -8
  341. package/packages/dd-trace/src/profiling/exporters/agent.js +6 -6
  342. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +9 -2
  343. package/packages/dd-trace/src/profiling/index.js +1 -1
  344. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  345. package/packages/dd-trace/src/profiling/profiler.js +61 -7
  346. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  347. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  348. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  349. package/packages/dd-trace/src/proxy.js +43 -20
  350. package/packages/dd-trace/src/remote_config/capabilities.js +3 -0
  351. package/packages/dd-trace/src/remote_config/index.js +541 -137
  352. package/packages/dd-trace/src/require-package-json.js +1 -1
  353. package/packages/dd-trace/src/ritm.js +58 -31
  354. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -3
  355. package/packages/dd-trace/src/serverless.js +17 -1
  356. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  357. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  358. package/packages/dd-trace/src/span_format.js +1 -1
  359. package/packages/dd-trace/src/span_processor.js +4 -4
  360. package/packages/dd-trace/src/span_stats.js +6 -4
  361. package/packages/dd-trace/src/standalone/index.js +1 -1
  362. package/packages/dd-trace/src/startup-log.js +7 -16
  363. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  364. package/packages/dd-trace/src/telemetry/endpoints.js +75 -13
  365. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  366. package/packages/dd-trace/src/telemetry/send-data.js +103 -4
  367. package/packages/dd-trace/src/telemetry/telemetry.js +238 -114
  368. package/packages/dd-trace/src/tracer.js +3 -3
  369. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  370. package/packages/dd-trace/src/remote_config/manager.js +0 -368
  371. /package/packages/dd-trace/src/{git_properties.js → config/git_properties.js} +0 -0
@@ -0,0 +1,106 @@
1
+ [
2
+ {
3
+ "module": {
4
+ "name": "bullmq",
5
+ "versionRange": ">=5.66.0",
6
+ "filePath": "dist/cjs/classes/queue.js"
7
+ },
8
+ "functionQuery": {
9
+ "methodName": "add",
10
+ "className": "Queue",
11
+ "kind": "Async"
12
+ },
13
+ "channelName": "Queue_add"
14
+ },
15
+ {
16
+ "module": {
17
+ "name": "bullmq",
18
+ "versionRange": ">=5.66.0",
19
+ "filePath": "dist/cjs/classes/queue.js"
20
+ },
21
+ "functionQuery": {
22
+ "methodName": "addBulk",
23
+ "className": "Queue",
24
+ "kind": "Async"
25
+ },
26
+ "channelName": "Queue_addBulk"
27
+ },
28
+ {
29
+ "module": {
30
+ "name": "bullmq",
31
+ "versionRange": ">=5.66.0",
32
+ "filePath": "dist/cjs/classes/worker.js"
33
+ },
34
+ "functionQuery": {
35
+ "methodName": "callProcessJob",
36
+ "className": "Worker",
37
+ "kind": "Async"
38
+ },
39
+ "channelName": "Worker_callProcessJob"
40
+ },
41
+ {
42
+ "module": {
43
+ "name": "bullmq",
44
+ "versionRange": ">=5.66.0",
45
+ "filePath": "dist/cjs/classes/flow-producer.js"
46
+ },
47
+ "functionQuery": {
48
+ "methodName": "add",
49
+ "className": "FlowProducer",
50
+ "kind": "Async"
51
+ },
52
+ "channelName": "FlowProducer_add"
53
+ },
54
+ {
55
+ "module": {
56
+ "name": "bullmq",
57
+ "versionRange": ">=5.66.0",
58
+ "filePath": "dist/esm/classes/queue.js"
59
+ },
60
+ "functionQuery": {
61
+ "methodName": "add",
62
+ "className": "Queue",
63
+ "kind": "Async"
64
+ },
65
+ "channelName": "Queue_add"
66
+ },
67
+ {
68
+ "module": {
69
+ "name": "bullmq",
70
+ "versionRange": ">=5.66.0",
71
+ "filePath": "dist/esm/classes/queue.js"
72
+ },
73
+ "functionQuery": {
74
+ "methodName": "addBulk",
75
+ "className": "Queue",
76
+ "kind": "Async"
77
+ },
78
+ "channelName": "Queue_addBulk"
79
+ },
80
+ {
81
+ "module": {
82
+ "name": "bullmq",
83
+ "versionRange": ">=5.66.0",
84
+ "filePath": "dist/esm/classes/worker.js"
85
+ },
86
+ "functionQuery": {
87
+ "methodName": "callProcessJob",
88
+ "className": "Worker",
89
+ "kind": "Async"
90
+ },
91
+ "channelName": "Worker_callProcessJob"
92
+ },
93
+ {
94
+ "module": {
95
+ "name": "bullmq",
96
+ "versionRange": ">=5.66.0",
97
+ "filePath": "dist/esm/classes/flow-producer.js"
98
+ },
99
+ "functionQuery": {
100
+ "methodName": "add",
101
+ "className": "FlowProducer",
102
+ "kind": "Async"
103
+ },
104
+ "channelName": "FlowProducer_add"
105
+ }
106
+ ]
@@ -1,5 +1,6 @@
1
1
  'use strict'
2
2
 
3
3
  module.exports = [
4
- ...require('./langchain')
4
+ ...require('./langchain'),
5
+ ...require('./bullmq')
5
6
  ]
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { channel } = require('./instrument')
4
3
  const shimmer = require('../../../datadog-shimmer')
4
+ const { channel } = require('./instrument')
5
5
 
6
6
  const routerMountPaths = new WeakMap() // to track mount paths for router instances
7
7
  const layerMatchers = new WeakMap() // to store layer matchers
@@ -0,0 +1,9 @@
1
+ 'use strict'
2
+
3
+ function isRelativeRequire (moduleName) {
4
+ return moduleName.startsWith('./') || moduleName.startsWith('../')
5
+ }
6
+
7
+ module.exports = {
8
+ isRelativeRequire
9
+ }
@@ -9,6 +9,10 @@ const {
9
9
  const routeChannel = channel('apm:hono:request:route')
10
10
  const handleChannel = channel('apm:hono:request:handle')
11
11
  const errorChannel = channel('apm:hono:request:error')
12
+ const nextChannel = channel('apm:hono:middleware:next')
13
+ const enterChannel = channel('apm:hono:middleware:enter')
14
+ const exitChannel = channel('apm:hono:middleware:exit')
15
+ const finishChannel = channel('apm:hono:middleware:finish')
12
16
 
13
17
  function wrapFetch (fetch) {
14
18
  return function (request, env, executionCtx) {
@@ -34,21 +38,62 @@ function wrapCompose (compose) {
34
38
 
35
39
  const instrumentedMiddlewares = middlewares.map(h => {
36
40
  const [[fn, meta], params] = h
37
-
38
- const instrumentedFn = (...args) => {
39
- const context = args[0]
40
- routeChannel.publish({
41
- req: context.env.incoming,
42
- route: meta?.path
43
- })
44
- return fn(...args)
45
- }
46
- return [[instrumentedFn, meta], params]
41
+ return [[wrapMiddleware(fn, meta?.path), meta], params]
47
42
  })
48
43
  return compose.call(this, instrumentedMiddlewares, instrumentedOnError, onNotFound)
49
44
  }
50
45
  }
51
46
 
47
+ function wrapNext (req, route, next) {
48
+ return shimmer.wrapFunction(
49
+ next,
50
+ (next) =>
51
+ function () {
52
+ nextChannel.publish({ req, route })
53
+
54
+ return next.apply(this, arguments)
55
+ }
56
+ )
57
+ }
58
+
59
+ function wrapMiddleware (middleware, route) {
60
+ const name = middleware.name
61
+ return shimmer.wrapFunction(
62
+ middleware,
63
+ (middleware) =>
64
+ function (context, next) {
65
+ const req = context.env.incoming
66
+ routeChannel.publish({ req, route })
67
+ enterChannel.publish({ req, name, route })
68
+ if (typeof next === 'function') {
69
+ arguments[1] = wrapNext(req, route, next)
70
+ }
71
+ try {
72
+ const result = middleware.apply(this, arguments)
73
+ if (result && typeof result.then === 'function') {
74
+ return result.then(
75
+ (result) => {
76
+ finishChannel.publish({ req })
77
+ return result
78
+ },
79
+ (error) => {
80
+ errorChannel.publish({ req, error })
81
+ throw error
82
+ }
83
+ )
84
+ }
85
+ finishChannel.publish({ req })
86
+ return result
87
+ } catch (error) {
88
+ errorChannel.publish({ req, error })
89
+ throw error
90
+ } finally {
91
+ exitChannel.publish({ req, route })
92
+ }
93
+ }
94
+ )
95
+ }
96
+
52
97
  addHook({
53
98
  name: 'hono',
54
99
  versions: ['>=4'],
@@ -101,8 +101,8 @@ function patch (http, methodName) {
101
101
  case 'response': {
102
102
  const res = arg
103
103
  ctx.res = res
104
- res.on('end', finish)
105
- res.on(errorMonitor, finish)
104
+ res.once('end', finish)
105
+ res.once(errorMonitor, finish)
106
106
  break
107
107
  }
108
108
  case 'connect':
@@ -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:ioredis:command:start')
10
10
  const finishCh = channel('apm:ioredis: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 startCh = channel('apm:iovalkey:command:start')
10
10
  const finishCh = channel('apm:iovalkey:command:finish')
@@ -1,9 +1,8 @@
1
1
  'use strict'
2
2
 
3
- const { addHook, channel } = require('./helpers/instrument')
3
+ const path = require('path')
4
4
  const shimmer = require('../../datadog-shimmer')
5
5
  const log = require('../../dd-trace/src/log')
6
- const path = require('path')
7
6
  const {
8
7
  getCoveredFilenamesFromCoverage,
9
8
  JEST_WORKER_TRACE_PAYLOAD_CODE,
@@ -21,6 +20,7 @@ const {
21
20
  getJestTestName,
22
21
  getJestSuitesToRun
23
22
  } = require('../../datadog-plugin-jest/src/util')
23
+ const { addHook, channel } = require('./helpers/instrument')
24
24
 
25
25
  const testSessionStartCh = channel('ci:jest:session:start')
26
26
  const testSessionFinishCh = channel('ci:jest:session:finish')
@@ -93,6 +93,8 @@ const testsToBeRetried = new Set()
93
93
  const testSuiteAbsolutePathsWithFastCheck = new Set()
94
94
 
95
95
  const BREAKPOINT_HIT_GRACE_PERIOD_MS = 200
96
+ const ATR_RETRY_SUPPRESSION_FLAG = '_ddDisableAtrRetry'
97
+ const atrSuppressedErrors = new Map()
96
98
 
97
99
  // based on https://github.com/facebook/jest/blob/main/packages/jest-circus/src/formatNodeAssertErrors.ts#L41
98
100
  function formatJestError (errors) {
@@ -378,7 +380,10 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
378
380
  isNewTest = retriedTestsToNumAttempts.has(testName)
379
381
  }
380
382
 
381
- if (this.isEarlyFlakeDetectionEnabled && (isNewTest || isModified)) {
383
+ const willRunEfd = this.isEarlyFlakeDetectionEnabled && (isNewTest || isModified)
384
+ event.test[ATR_RETRY_SUPPRESSION_FLAG] = Boolean(isAttemptToFix || willRunEfd)
385
+
386
+ if (!isAttemptToFix && willRunEfd) {
382
387
  numEfdRetry = retriedTestsToNumAttempts.get(testName)
383
388
  retriedTestsToNumAttempts.set(testName, numEfdRetry + 1)
384
389
  }
@@ -434,19 +439,22 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
434
439
 
435
440
  const testFullName = this.getTestNameFromAddTestEvent(event, state)
436
441
  const isSkipped = event.mode === 'todo' || event.mode === 'skip'
437
- if (this.isTestManagementTestsEnabled) {
438
- const isAttemptToFix = this.testManagementTestsForThisSuite?.attemptToFix?.includes(testFullName)
439
- if (isAttemptToFix && !isSkipped && !retriedTestsToNumAttempts.has(testFullName)) {
440
- retriedTestsToNumAttempts.set(testFullName, 0)
441
- testsToBeRetried.add(testFullName)
442
- this.retryTest({
443
- jestEvent: event,
444
- retryCount: testManagementAttemptToFixRetries,
445
- retryType: 'Test Management (Attempt to Fix)'
446
- })
447
- }
442
+ const isAttemptToFix = this.isTestManagementTestsEnabled &&
443
+ this.testManagementTestsForThisSuite?.attemptToFix?.includes(testFullName)
444
+ if (
445
+ isAttemptToFix &&
446
+ !isSkipped &&
447
+ !retriedTestsToNumAttempts.has(testFullName)
448
+ ) {
449
+ retriedTestsToNumAttempts.set(testFullName, 0)
450
+ testsToBeRetried.add(testFullName)
451
+ this.retryTest({
452
+ jestEvent: event,
453
+ retryCount: testManagementAttemptToFixRetries,
454
+ retryType: 'Test Management (Attempt to Fix)'
455
+ })
448
456
  }
449
- if (this.isImpactedTestsEnabled) {
457
+ if (!isAttemptToFix && this.isImpactedTestsEnabled) {
450
458
  const testStartLine = getTestLineStart(event.asyncError, this.testSuite)
451
459
  const testEndLine = getTestEndLine(event.fn, testStartLine)
452
460
  const isModified = isModifiedTest(
@@ -466,7 +474,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
466
474
  })
467
475
  }
468
476
  }
469
- if (this.isKnownTestsEnabled) {
477
+ if (!isAttemptToFix && this.isKnownTestsEnabled) {
470
478
  const isNew = !this.knownTestsForThisSuite.includes(testFullName)
471
479
  if (isNew && !isSkipped && !retriedTestsToNumAttempts.has(testFullName)) {
472
480
  retriedTestsToNumAttempts.set(testFullName, 0)
@@ -488,6 +496,13 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
488
496
  }
489
497
  // restore in case it is retried
490
498
  event.test.fn = originalTestFns.get(event.test)
499
+ // If ATR retry is being suppressed for this test (due to EFD or Attempt to Fix taking precedence)
500
+ // and the test has errors for this attempt, store the errors temporarily and clear them
501
+ // so Jest won't treat this attempt as failed (the real status will be reported after retries).
502
+ if (event.test?.[ATR_RETRY_SUPPRESSION_FLAG] && event.test.errors?.length) {
503
+ atrSuppressedErrors.set(event.test, event.test.errors)
504
+ event.test.errors = []
505
+ }
491
506
 
492
507
  let attemptToFixPassed = false
493
508
  let attemptToFixFailed = false
@@ -581,6 +596,12 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
581
596
  await promises.isProbeReady
582
597
  }
583
598
  }
599
+ if (event.name === 'run_finish') {
600
+ for (const [test, errors] of atrSuppressedErrors) {
601
+ test.errors = errors
602
+ }
603
+ atrSuppressedErrors.clear()
604
+ }
584
605
  if (event.name === 'test_skip' || event.name === 'test_todo') {
585
606
  const testName = getJestTestName(event.test, this.getShouldStripSeedFromTestName())
586
607
  testSkippedCh.publish({
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
4
+
5
+ const log = require('../../dd-trace/src/log')
3
6
  const {
4
7
  channel,
5
8
  addHook
6
9
  } = require('./helpers/instrument')
7
- const shimmer = require('../../datadog-shimmer')
8
-
9
- const log = require('../../dd-trace/src/log')
10
10
 
11
11
  const producerStartCh = channel('apm:kafkajs:produce:start')
12
12
  const producerCommitCh = channel('apm:kafkajs:produce:commit')
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const { addHook, channel } = require('./helpers/instrument')
4
5
  const { wrapThen } = require('./helpers/promise')
5
- const shimmer = require('../../datadog-shimmer')
6
6
 
7
7
  const startRawQueryCh = channel('datadog:knex:raw:start')
8
8
  const rawQuerySubscribes = channel('datadog:knex:raw:subscribes')
@@ -90,7 +90,8 @@ function wrapMiddleware (fn, layer) {
90
90
  const req = ctx.req
91
91
 
92
92
  const path = layer && layer.path
93
- const route = typeof path === 'string' && !path.endsWith('(.*)') && !path.endsWith('([^/]*)') && path
93
+ const route = typeof path === 'string' && !path.endsWith('(.*)') && !path.endsWith('([^/]*)') &&
94
+ !path.includes('(?:') && path
94
95
 
95
96
  enterChannel.publish({ req, name, route })
96
97
 
@@ -1,11 +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
  AsyncResource
7
8
  } = require('./helpers/instrument')
8
- const shimmer = require('../../datadog-shimmer')
9
9
 
10
10
  function isString (value) {
11
11
  // eslint-disable-next-line unicorn/no-instanceof-builtins
@@ -0,0 +1,93 @@
1
+ 'use strict'
2
+
3
+ /**
4
+ * light-my-request instrumentation
5
+ *
6
+ * This instrumentation enables dd-trace to capture spans for Fastify inject() calls
7
+ * which use light-my-request internally. Without this, inject() bypasses the HTTP
8
+ * server instrumentation since it doesn't go through http.Server.emit('request').
9
+ *
10
+ * This is critical for platforms like Platformatic that use undici-thread-interceptor
11
+ * to route requests between worker threads using Fastify inject().
12
+ */
13
+
14
+ const shimmer = require('../../datadog-shimmer')
15
+ const {
16
+ channel,
17
+ addHook
18
+ } = require('./helpers/instrument')
19
+
20
+ // Reuse the same channels as HTTP server instrumentation
21
+ const startServerCh = channel('apm:http:server:request:start')
22
+ const exitServerCh = channel('apm:http:server:request:exit')
23
+ const errorServerCh = channel('apm:http:server:request:error')
24
+ const finishServerCh = channel('apm:http:server:request:finish')
25
+
26
+ addHook({ name: 'light-my-request', versions: ['>=3'] }, (lightMyRequest) => {
27
+ // Wrap the inject function
28
+ return shimmer.wrapFunction(lightMyRequest, lightMyRequest => {
29
+ return function wrappedInject (dispatchFunc, options, callback) {
30
+ // If no subscribers, use original behavior
31
+ if (!startServerCh.hasSubscribers) {
32
+ return lightMyRequest.apply(this, arguments)
33
+ }
34
+
35
+ // Wrap the dispatch function to add tracing
36
+ const wrappedDispatch = wrapDispatchFunc(dispatchFunc)
37
+
38
+ // Call original with wrapped dispatch
39
+ return lightMyRequest.call(this, wrappedDispatch, options, callback)
40
+ }
41
+ })
42
+ })
43
+
44
+ function wrapDispatchFunc (dispatchFunc) {
45
+ return function tracedDispatch (req, res) {
46
+ const abortController = new AbortController()
47
+
48
+ // Link res.req like HTTP instrumentation does
49
+ res.req = req
50
+
51
+ // Publish start event (same as HTTP server)
52
+ startServerCh.publish({ req, res, abortController })
53
+
54
+ // Track when response finishes via 'finish' event (like HTTP instrumentation)
55
+ let finishCalled = false
56
+ const onFinish = () => {
57
+ if (!finishCalled) {
58
+ finishCalled = true
59
+ finishServerCh.publish({ req })
60
+ }
61
+ }
62
+
63
+ // light-my-request Response emits 'finish' when done
64
+ if (res.on && typeof res.on === 'function') {
65
+ res.once('finish', onFinish)
66
+ res.once('close', onFinish)
67
+ }
68
+
69
+ // Also wrap end() as fallback
70
+ const originalEnd = res.end
71
+ if (originalEnd) {
72
+ res.end = function wrappedEnd () {
73
+ const result = originalEnd.apply(this, arguments)
74
+ // Trigger finish if events don't fire
75
+ setImmediate(onFinish)
76
+ return result
77
+ }
78
+ }
79
+
80
+ try {
81
+ if (abortController.signal.aborted) {
82
+ return
83
+ }
84
+
85
+ return dispatchFunc.call(this, req, res)
86
+ } catch (err) {
87
+ errorServerCh.publish(err)
88
+ throw err
89
+ } finally {
90
+ exitServerCh.publish({ req })
91
+ }
92
+ }
93
+ }
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { addHook, AsyncResource } = require('./helpers/instrument')
4
3
  const shimmer = require('../../datadog-shimmer')
4
+ const { addHook, AsyncResource } = require('./helpers/instrument')
5
5
 
6
6
  function wrapRequest (original) {
7
7
  return function () {
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { channel, addHook } = require('./helpers/instrument')
4
-
5
3
  const shimmer = require('../../datadog-shimmer')
4
+ const { channel, addHook } = require('./helpers/instrument')
6
5
 
7
6
  addHook({ name: 'lodash', versions: ['>=4'] }, lodash => {
8
7
  const lodashOperationCh = channel('datadog:lodash:operation')
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { channel, addHook } = require('./helpers/instrument')
4
-
5
3
  const shimmer = require('../../datadog-shimmer')
4
+ const { channel, addHook } = require('./helpers/instrument')
6
5
 
7
6
  const commandAddCh = channel('apm:mariadb:command:add')
8
7
  const connectionStartCh = channel('apm:mariadb:connection:start')
@@ -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: 'memcached', versions: ['>=2.2'] }, Memcached => {
10
10
  const startCh = channel('apm:memcached:command:start')
@@ -5,7 +5,7 @@ const { addHook, channel } = require('../helpers/instrument')
5
5
  const shimmer = require('../../../datadog-shimmer')
6
6
  const { isMarkedAsUnskippable } = require('../../../datadog-plugin-jest/src/util')
7
7
  const log = require('../../../dd-trace/src/log')
8
- const { getEnvironmentVariable } = require('../../../dd-trace/src/config-helper')
8
+ const { getEnvironmentVariable } = require('../../../dd-trace/src/config/helper')
9
9
  const {
10
10
  getTestSuitePath,
11
11
  MOCHA_WORKER_TRACE_PAYLOAD_CODE,
@@ -282,7 +282,7 @@ function getExecutionConfiguration (runner, isParallel, frameworkVersion, onFini
282
282
  if (config.isTestManagementTestsEnabled) {
283
283
  ctx.onDone = onReceivedTestManagementTests
284
284
  testManagementTestsCh.runStores(ctx, () => {})
285
- } if (config.isImpactedTestsEnabled) {
285
+ } else if (config.isImpactedTestsEnabled) {
286
286
  ctx.onDone = onReceivedImpactedTests
287
287
  modifiedFilesCh.runStores(ctx, () => {})
288
288
  } else if (config.isSuitesSkippingEnabled) {
@@ -67,7 +67,7 @@ addHook({
67
67
  return run.apply(this, arguments)
68
68
  }
69
69
  // We flush when the worker ends with its test file (a mocha instance in a worker runs a single test file)
70
- this.on('end', () => {
70
+ this.once('end', () => {
71
71
  workerFinishCh.publish()
72
72
  })
73
73
  this.on('test', getOnTestHandler(false))
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
3
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config/helper')
4
4
 
5
5
  if (getEnvironmentVariable('MOCHA_WORKER_ID')) {
6
6
  require('./mocha/worker')
@@ -1,11 +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
  AsyncResource
7
8
  } = require('./helpers/instrument')
8
- const shimmer = require('../../datadog-shimmer')
9
9
 
10
10
  const startCh = channel('apm:mongodb:query:start')
11
11
  const finishCh = channel('apm:mongodb:query:finish')
@@ -2,11 +2,11 @@
2
2
 
3
3
  require('./mongodb-core')
4
4
 
5
+ const shimmer = require('../../datadog-shimmer')
5
6
  const {
6
7
  channel,
7
8
  addHook
8
9
  } = require('./helpers/instrument')
9
- const shimmer = require('../../datadog-shimmer')
10
10
 
11
11
  // collection methods with filter
12
12
  const collectionMethodsWithFilter = [
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const shimmer = require('../../datadog-shimmer')
3
4
  const { addHook, channel } = require('./helpers/instrument')
4
5
  const { wrapThen } = require('./helpers/promise')
5
- const shimmer = require('../../datadog-shimmer')
6
6
 
7
7
  const startCh = channel('datadog:mongoose:model:filter:start')
8
8
  const finishCh = channel('datadog:mongoose:model:filter:finish')
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
3
  const dc = require('dc-polyfill')
4
+ const shimmer = require('../../datadog-shimmer')
4
5
  const {
5
6
  channel,
6
7
  addHook
7
8
  } = require('./helpers/instrument')
8
- const shimmer = require('../../datadog-shimmer')
9
9
 
10
10
  const prepareCh = channel('datadog:mquery:filter:prepare')
11
11
  const tracingCh = dc.tracingChannel('datadog:mquery:filter')
@@ -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
 
6
6
  addHook({ name: 'mysql', file: 'lib/Connection.js', versions: ['>=2'] }, Connection => {
7
7
  const startCh = channel('apm:mysql:query:start')
@@ -39,7 +39,7 @@ addHook({ name: 'mysql', file: 'lib/Connection.js', versions: ['>=2'] }, Connect
39
39
  return finishCh.runStores(ctx, cb, this, error, result)
40
40
  })
41
41
  } else {
42
- res.on('end', () => finishCh.publish(ctx))
42
+ res.once('end', () => finishCh.publish(ctx))
43
43
  }
44
44
 
45
45
  return res