dd-trace 5.81.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 (321) hide show
  1. package/index.d.ts +7 -0
  2. package/loader-hook.mjs +7 -2
  3. package/package.json +13 -18
  4. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  5. package/packages/datadog-esbuild/index.js +8 -7
  6. package/packages/datadog-esbuild/src/utils.js +14 -2
  7. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  8. package/packages/datadog-instrumentations/src/ai.js +2 -2
  9. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  10. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  11. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  12. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  13. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  14. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  15. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  18. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  19. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  20. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  21. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  22. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  23. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  24. package/packages/datadog-instrumentations/src/child_process.js +2 -2
  25. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  26. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  27. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  28. package/packages/datadog-instrumentations/src/cucumber.js +12 -13
  29. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  30. package/packages/datadog-instrumentations/src/dns.js +1 -1
  31. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  32. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  33. package/packages/datadog-instrumentations/src/express.js +1 -1
  34. package/packages/datadog-instrumentations/src/fs.js +1 -1
  35. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  36. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  37. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  38. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  39. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  40. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  41. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  42. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  43. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  44. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  45. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
  47. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  48. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  49. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  50. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  51. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  52. package/packages/datadog-instrumentations/src/hono.js +55 -10
  53. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  54. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  55. package/packages/datadog-instrumentations/src/jest.js +2 -2
  56. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  57. package/packages/datadog-instrumentations/src/knex.js +1 -1
  58. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  59. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  60. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  61. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  62. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  63. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  64. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  65. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  66. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  67. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  68. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  69. package/packages/datadog-instrumentations/src/mysql2.js +1 -1
  70. package/packages/datadog-instrumentations/src/net.js +1 -1
  71. package/packages/datadog-instrumentations/src/next.js +1 -1
  72. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  73. package/packages/datadog-instrumentations/src/openai.js +2 -2
  74. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  75. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  76. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
  77. package/packages/datadog-instrumentations/src/pg.js +3 -3
  78. package/packages/datadog-instrumentations/src/pino.js +1 -1
  79. package/packages/datadog-instrumentations/src/playwright.js +1 -1
  80. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  81. package/packages/datadog-instrumentations/src/process.js +1 -1
  82. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  83. package/packages/datadog-instrumentations/src/promise.js +1 -1
  84. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  85. package/packages/datadog-instrumentations/src/q.js +1 -1
  86. package/packages/datadog-instrumentations/src/redis.js +1 -1
  87. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  88. package/packages/datadog-instrumentations/src/selenium.js +1 -1
  89. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  90. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  91. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  92. package/packages/datadog-instrumentations/src/undici.js +4 -4
  93. package/packages/datadog-instrumentations/src/url.js +1 -1
  94. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  95. package/packages/datadog-instrumentations/src/vm.js +1 -1
  96. package/packages/datadog-instrumentations/src/when.js +1 -1
  97. package/packages/datadog-instrumentations/src/winston.js +1 -1
  98. package/packages/datadog-instrumentations/src/ws.js +3 -2
  99. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  100. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  101. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  102. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  103. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  104. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  105. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  106. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  107. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
  108. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  109. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
  110. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  111. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  112. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  113. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  114. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  115. package/packages/datadog-plugin-express/src/index.js +1 -1
  116. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  117. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  118. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  119. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  120. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  121. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  122. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  123. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  124. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  125. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  126. package/packages/datadog-plugin-http/src/client.js +2 -1
  127. package/packages/datadog-plugin-http/src/index.js +25 -5
  128. package/packages/datadog-plugin-http2/src/client.js +2 -2
  129. package/packages/datadog-plugin-http2/src/index.js +1 -1
  130. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  131. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  132. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
  134. package/packages/datadog-plugin-openai/src/index.js +1 -1
  135. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  136. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  137. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  138. package/packages/datadog-plugin-ws/src/close.js +56 -3
  139. package/packages/datadog-plugin-ws/src/index.js +4 -0
  140. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  141. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  142. package/packages/datadog-plugin-ws/src/server.js +13 -1
  143. package/packages/datadog-plugin-ws/src/util.js +107 -0
  144. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  145. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  146. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  147. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  148. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  149. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  150. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  151. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  152. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  153. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  154. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  158. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  160. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  162. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  163. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  164. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  165. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +10 -14
  168. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  171. package/packages/dd-trace/src/appsec/index.js +8 -8
  172. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  173. package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
  174. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  175. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  176. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  177. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  178. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  179. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  180. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  181. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  182. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  183. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  184. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  185. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  186. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  187. package/packages/dd-trace/src/azure_metadata.js +8 -2
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  189. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  190. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
  191. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
  192. package/packages/dd-trace/src/config/remote_config.js +34 -0
  193. package/packages/dd-trace/src/config.js +29 -28
  194. package/packages/dd-trace/src/config_defaults.js +2 -1
  195. package/packages/dd-trace/src/constants.js +5 -0
  196. package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
  197. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  198. package/packages/dd-trace/src/datastreams/index.js +1 -1
  199. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  200. package/packages/dd-trace/src/datastreams/processor.js +2 -2
  201. package/packages/dd-trace/src/datastreams/writer.js +2 -2
  202. package/packages/dd-trace/src/debugger/config.js +1 -0
  203. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  204. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  205. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
  206. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  209. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  210. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  211. package/packages/dd-trace/src/debugger/index.js +1 -1
  212. package/packages/dd-trace/src/dogstatsd.js +3 -2
  213. package/packages/dd-trace/src/encode/0.4.js +1 -1
  214. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  215. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  216. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  217. package/packages/dd-trace/src/exporter.js +2 -2
  218. package/packages/dd-trace/src/exporters/agent/index.js +1 -1
  219. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
  220. package/packages/dd-trace/src/exporters/common/request.js +2 -2
  221. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  222. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  223. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  224. package/packages/dd-trace/src/flare/index.js +1 -1
  225. package/packages/dd-trace/src/guardrails/index.js +6 -3
  226. package/packages/dd-trace/src/id.js +1 -1
  227. package/packages/dd-trace/src/index.js +1 -1
  228. package/packages/dd-trace/src/lambda/handler.js +4 -4
  229. package/packages/dd-trace/src/lambda/index.js +1 -1
  230. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  231. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  232. package/packages/dd-trace/src/llmobs/constants/tags.js +7 -1
  233. package/packages/dd-trace/src/llmobs/index.js +8 -9
  234. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  235. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  236. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  237. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  238. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  239. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  240. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  241. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  242. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  244. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +16 -1
  245. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  246. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  247. package/packages/dd-trace/src/llmobs/sdk.js +15 -22
  248. package/packages/dd-trace/src/llmobs/span_processor.js +9 -13
  249. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  250. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  251. package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
  252. package/packages/dd-trace/src/log/index.js +1 -1
  253. package/packages/dd-trace/src/noop/proxy.js +2 -2
  254. package/packages/dd-trace/src/noop/span.js +1 -1
  255. package/packages/dd-trace/src/openfeature/index.js +2 -2
  256. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  257. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  258. package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
  259. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  260. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  261. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  262. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  263. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  264. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  265. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  266. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  267. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  268. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  269. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  270. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  271. package/packages/dd-trace/src/opentelemetry/tracer.js +3 -3
  272. package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
  273. package/packages/dd-trace/src/opentracing/span.js +3 -3
  274. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  275. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  276. package/packages/dd-trace/src/plugin_manager.js +1 -1
  277. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  278. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  279. package/packages/dd-trace/src/plugins/database.js +1 -1
  280. package/packages/dd-trace/src/plugins/index.js +5 -1
  281. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  282. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  283. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  284. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  286. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/test.js +24 -24
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  289. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  290. package/packages/dd-trace/src/priority_sampler.js +15 -16
  291. package/packages/dd-trace/src/process-tags/index.js +31 -29
  292. package/packages/dd-trace/src/profiling/config.js +32 -21
  293. package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
  294. package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
  295. package/packages/dd-trace/src/profiling/index.js +1 -1
  296. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  297. package/packages/dd-trace/src/profiling/profiler.js +4 -5
  298. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  299. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  300. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  301. package/packages/dd-trace/src/proxy.js +12 -18
  302. package/packages/dd-trace/src/remote_config/index.js +541 -137
  303. package/packages/dd-trace/src/require-package-json.js +1 -1
  304. package/packages/dd-trace/src/ritm.js +50 -27
  305. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
  306. package/packages/dd-trace/src/serverless.js +16 -0
  307. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  308. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  309. package/packages/dd-trace/src/span_format.js +1 -1
  310. package/packages/dd-trace/src/span_processor.js +2 -2
  311. package/packages/dd-trace/src/span_stats.js +6 -4
  312. package/packages/dd-trace/src/standalone/index.js +1 -1
  313. package/packages/dd-trace/src/startup-log.js +3 -3
  314. package/packages/dd-trace/src/supported-configurations.json +3 -0
  315. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  316. package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
  317. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  318. package/packages/dd-trace/src/telemetry/telemetry.js +11 -6
  319. package/packages/dd-trace/src/tracer.js +3 -3
  320. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  321. package/packages/dd-trace/src/remote_config/manager.js +0 -368
@@ -12,7 +12,7 @@ const fs = require('fs')
12
12
  * @typedef { import('module').Module } Module
13
13
  * @param {string} name
14
14
  * @param {Module} module
15
- * @returns {Object} The parsed package.json
15
+ * @returns {object} The parsed package.json
16
16
  */
17
17
  function requirePackageJson (name, module) {
18
18
  if (path.isAbsolute(name)) {
@@ -1,13 +1,16 @@
1
1
  'use strict'
2
2
 
3
3
  const path = require('path')
4
+ const fs = require('fs')
4
5
  const Module = require('module')
5
- const parse = require('../../../vendor/dist/module-details-from-path')
6
+
6
7
  const dc = require('dc-polyfill')
8
+
9
+ const parse = require('../../../vendor/dist/module-details-from-path')
7
10
  const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
11
+ const { isRelativeRequire } = require('../../datadog-instrumentations/src/helpers/shared-utils')
8
12
 
9
13
  const origRequire = Module.prototype.require
10
-
11
14
  // derived from require-in-the-middle@3 with tweaks
12
15
 
13
16
  module.exports = Hook
@@ -64,7 +67,6 @@ function Hook (modules, options, onrequire) {
64
67
  } catch {
65
68
  return _origRequire.apply(this, arguments)
66
69
  }
67
-
68
70
  const core = !filename.includes(path.sep)
69
71
  let name, basedir, hooks
70
72
  // return known patched modules immediately
@@ -117,32 +119,41 @@ function Hook (modules, options, onrequire) {
117
119
  // decide how to assign the stat
118
120
  // first case will only happen when patching an AWS Lambda Handler
119
121
  const stat = inAWSLambda && hasLambdaHandler && !filenameFromNodeModule ? { name: filename } : parse(filename)
120
- if (!stat) return exports // abort if filename could not be parsed
121
- name = stat.name
122
- basedir = stat.basedir
123
-
124
- hooks = moduleHooks[name]
125
- if (!hooks) return exports // abort if module name isn't on whitelist
126
122
 
127
- // figure out if this is the main module file, or a file inside the module
128
- const paths = Module._resolveLookupPaths(name, this, true)
129
- if (!paths) {
130
- // abort if _resolveLookupPaths return null
131
- return exports
132
- }
133
-
134
- let res
135
- try {
136
- res = Module._findPath(name, [basedir, ...paths])
137
- } catch {
138
- // case where the file specified in package.json "main" doesn't exist
139
- // in this case, the file is treated as module-internal
140
- }
123
+ if (stat) {
124
+ name = stat.name
125
+ basedir = stat.basedir
126
+
127
+ hooks = moduleHooks[name]
128
+ if (!hooks) return exports // abort if module name isn't on whitelist
129
+
130
+ const paths = Module._resolveLookupPaths(name, this, true)
131
+ if (!paths) {
132
+ // abort if _resolveLookupPaths return null
133
+ return exports
134
+ }
135
+
136
+ let res
137
+ try {
138
+ res = Module._findPath(name, [basedir, ...paths])
139
+ } catch {
140
+ // case where the file specified in package.json "main" doesn't exist
141
+ // in this case, the file is treated as module-internal
142
+ }
143
+
144
+ if (!res || res !== filename) {
145
+ // this is a module-internal file
146
+ // use the module-relative path to the file, prefixed by original module name
147
+ name = name + path.sep + path.relative(basedir, filename)
148
+ }
149
+ } else {
150
+ if (isRelativeRequire(request) && moduleHooks[request]) {
151
+ hooks = moduleHooks[request]
152
+ name = request
153
+ basedir = findProjectRoot(filename)
154
+ }
141
155
 
142
- if (!res || res !== filename) {
143
- // this is a module-internal file
144
- // use the module-relative path to the file, prefixed by original module name
145
- name = name + path.sep + path.relative(basedir, filename)
156
+ if (!hooks) return exports
146
157
  }
147
158
  }
148
159
 
@@ -167,6 +178,18 @@ Hook.reset = function () {
167
178
  moduleHooks = Object.create(null)
168
179
  }
169
180
 
181
+ function findProjectRoot (startDir) {
182
+ let dir = startDir
183
+
184
+ while (!fs.existsSync(path.join(dir, 'package.json'))) {
185
+ const parent = path.dirname(dir)
186
+ if (parent === dir) break
187
+ dir = parent
188
+ }
189
+
190
+ return dir
191
+ }
192
+
170
193
  Hook.prototype.unhook = function () {
171
194
  for (const mod of this.modules) {
172
195
  const hooks = (moduleHooks[mod] || []).filter(hook => hook !== this.onrequire)
@@ -5,9 +5,9 @@
5
5
  const v8 = require('v8')
6
6
  const os = require('os')
7
7
  const process = require('process')
8
+ const { performance, PerformanceObserver, monitorEventLoopDelay } = require('perf_hooks')
8
9
  const { DogStatsDClient, MetricsAggregationClient } = require('../dogstatsd')
9
10
  const log = require('../log')
10
- const { performance, PerformanceObserver, monitorEventLoopDelay } = require('perf_hooks')
11
11
  const { getEnvironmentVariable } = require('../config-helper')
12
12
 
13
13
  const { NODE_MAJOR } = require('../../../../version')
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const { getEnvironmentVariable } = require('./config-helper')
4
+ const { isFalse } = require('./util')
4
5
 
5
6
  function getIsGCPFunction () {
6
7
  const isDeprecatedGCPFunction =
@@ -13,6 +14,15 @@ function getIsGCPFunction () {
13
14
  return isDeprecatedGCPFunction || isNewerGCPFunction
14
15
  }
15
16
 
17
+ /**
18
+ * Enable GCP Pub/Sub PUSH subscription tracing for Cloud Run (K_SERVICE present).
19
+ * PUSH: GCP sends HTTP POST requests to the service with message data in headers.
20
+ */
21
+ function enableGCPPubSubPushSubscription () {
22
+ const isGCPPubSubPushSubscriptionEnabled = getEnvironmentVariable('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED')
23
+ return getEnvironmentVariable('K_SERVICE') !== undefined && !isFalse(isGCPPubSubPushSubscriptionEnabled)
24
+ }
25
+
16
26
  function getIsAzureFunction () {
17
27
  const isAzureFunction =
18
28
  getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
@@ -21,6 +31,10 @@ function getIsAzureFunction () {
21
31
  return isAzureFunction
22
32
  }
23
33
 
34
+ function getIsFlexConsumptionAzureFunction () {
35
+ return getIsAzureFunction() && getEnvironmentVariable('WEBSITE_SKU') === 'FlexConsumption'
36
+ }
37
+
24
38
  function isInServerlessEnvironment () {
25
39
  const inAWSLambda = getEnvironmentVariable('AWS_LAMBDA_FUNCTION_NAME') !== undefined
26
40
  const isGCPFunction = getIsGCPFunction()
@@ -32,5 +46,7 @@ function isInServerlessEnvironment () {
32
46
  module.exports = {
33
47
  getIsGCPFunction,
34
48
  getIsAzureFunction,
49
+ enableGCPPubSubPushSubscription,
50
+ getIsFlexConsumptionAzureFunction,
35
51
  isInServerlessEnvironment
36
52
  }
@@ -47,6 +47,10 @@ const messaging = {
47
47
  sns: {
48
48
  opName: () => 'aws.request',
49
49
  serviceName: awsServiceV0
50
+ },
51
+ bullmq: {
52
+ opName: () => 'bullmq.add',
53
+ serviceName: ({ tracerService }) => `${tracerService}-bullmq`
50
54
  }
51
55
  },
52
56
  consumer: {
@@ -77,6 +81,10 @@ const messaging = {
77
81
  sqs: {
78
82
  opName: () => 'aws.request',
79
83
  serviceName: awsServiceV0
84
+ },
85
+ bullmq: {
86
+ opName: () => 'bullmq.processJob',
87
+ serviceName: ({ tracerService }) => `${tracerService}-bullmq`
80
88
  }
81
89
  },
82
90
  client: {
@@ -44,6 +44,10 @@ const messaging = {
44
44
  sns: {
45
45
  opName: () => 'aws.sns.send',
46
46
  serviceName: identityService
47
+ },
48
+ bullmq: {
49
+ opName: () => 'bullmq.add',
50
+ serviceName: identityService
47
51
  }
48
52
  },
49
53
  consumer: {
@@ -65,6 +69,10 @@ const messaging = {
65
69
  sqs: {
66
70
  opName: () => 'aws.sqs.process',
67
71
  serviceName: identityService
72
+ },
73
+ bullmq: {
74
+ opName: () => 'bullmq.processJob',
75
+ serviceName: identityService
68
76
  }
69
77
  },
70
78
  client: {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const constants = require('./constants')
4
3
  const tags = require('../../../ext/tags')
4
+ const constants = require('./constants')
5
5
  const id = require('./id')
6
6
  const { isError } = require('./util')
7
7
  const { registerExtraService } = require('./service-naming/extra-services')
@@ -5,7 +5,7 @@ const spanFormat = require('./span_format')
5
5
  const SpanSampler = require('./span_sampler')
6
6
  const GitMetadataTagger = require('./git_metadata_tagger')
7
7
  const { getEnvironmentVariable } = require('./config-helper')
8
- const getProcessTags = require('./process-tags')
8
+ const processTags = require('./process-tags')
9
9
 
10
10
  const startedSpans = new WeakSet()
11
11
  const finishedSpans = new WeakSet()
@@ -27,7 +27,7 @@ class SpanProcessor {
27
27
  this._gitMetadataTagger = new GitMetadataTagger(config)
28
28
 
29
29
  this._processTags = config.propagateProcessTags?.enabled
30
- ? getProcessTags().serialized
30
+ ? processTags.serialized
31
31
  : false
32
32
  }
33
33
 
@@ -1,11 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const os = require('os')
4
- const { version } = require('./pkg')
3
+ const os = require('node:os')
5
4
  const pkg = require('../../../package.json')
6
5
 
7
6
  const { LogCollapsingLowestDenseDDSketch } = require('../../../vendor/dist/@datadog/sketches-js')
8
- const { ORIGIN_KEY, TOP_LEVEL_KEY } = require('./constants')
9
7
  const {
10
8
  MEASURED,
11
9
  HTTP_STATUS_CODE,
@@ -13,6 +11,9 @@ const {
13
11
  HTTP_ROUTE,
14
12
  HTTP_METHOD
15
13
  } = require('../../../ext/tags')
14
+ const { ORIGIN_KEY, TOP_LEVEL_KEY } = require('./constants')
15
+ const { version } = require('./pkg')
16
+ const processTags = require('./process-tags')
16
17
 
17
18
  const { SpanStatsExporter } = require('./exporters/span-stats')
18
19
 
@@ -176,7 +177,8 @@ class SpanStatsProcessor {
176
177
  Lang: 'javascript',
177
178
  TracerVersion: pkg.version,
178
179
  RuntimeID: this.tags['runtime-id'],
179
- Sequence: ++this.sequence
180
+ Sequence: ++this.sequence,
181
+ ProcessTags: processTags.serialized
180
182
  })
181
183
  }
182
184
 
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
3
  const { channel } = require('dc-polyfill')
4
- const TraceSourcePrioritySampler = require('./tracesource_priority_sampler')
5
4
  const { USER_KEEP } = require('../../../../ext/priority')
6
5
  const TraceState = require('../opentracing/propagation/tracestate')
7
6
  const { APM_TRACING_ENABLED_KEY } = require('../constants')
7
+ const TraceSourcePrioritySampler = require('./tracesource_priority_sampler')
8
8
  const { hasTraceSourcePropagationTag } = require('./tracesource')
9
9
 
10
10
  const startCh = channel('dd-trace:span:start')
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
- const { info, warn } = require('./log/writer')
4
-
5
3
  const os = require('os')
6
4
  const { inspect } = require('util')
7
- const defaults = require('./config_defaults')
5
+
8
6
  const tracerVersion = require('../../../package.json').version
7
+ const defaults = require('./config_defaults')
8
+ const { info, warn } = require('./log/writer')
9
9
 
10
10
  const errors = {}
11
11
  let config
@@ -37,6 +37,7 @@
37
37
  "DD_APPSEC_STACK_TRACE_ENABLED": ["A"],
38
38
  "DD_APPSEC_TRACE_RATE_LIMIT": ["A"],
39
39
  "DD_APPSEC_WAF_TIMEOUT": ["A"],
40
+ "DD_AZURE_RESOURCE_GROUP": ["A"],
40
41
  "DD_CIVISIBILITY_AGENTLESS_ENABLED": ["A"],
41
42
  "DD_CIVISIBILITY_AGENTLESS_URL": ["A"],
42
43
  "DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER": ["A"],
@@ -162,6 +163,7 @@
162
163
  "DD_RUNTIME_METRICS_GC_ENABLED": ["A"],
163
164
  "DD_RUNTIME_METRICS_FLUSH_INTERVAL": ["A"],
164
165
  "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED": ["A"],
166
+ "DD_TRACE_GCP_PUBSUB_PUSH_ENABLED": ["A"],
165
167
  "DD_SERVICE_MAPPING": ["A"],
166
168
  "DD_SERVICE": ["A"],
167
169
  "DD_SITE": ["A"],
@@ -243,6 +245,7 @@
243
245
  "DD_TRACE_BAGGAGE_TAG_KEYS": ["A"],
244
246
  "DD_TRACE_BEAUTIFUL_LOGS": ["A"],
245
247
  "DD_TRACE_BLUEBIRD_ENABLED": ["A"],
248
+ "DD_TRACE_BULLMQ_ENABLED": ["A"],
246
249
  "DD_TRACE_BODY_PARSER_ENABLED": ["A"],
247
250
  "DD_TRACE_BSON_ENABLED": ["A"],
248
251
  "DD_TRACE_BUNYAN_ENABLED": ["A"],
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
3
  const path = require('path')
4
+ const { fileURLToPath } = require('url')
5
+ const dc = require('dc-polyfill')
4
6
  const parse = require('../../../../vendor/dist/module-details-from-path')
5
7
  const requirePackageJson = require('../require-package-json')
6
- const { sendData } = require('./send-data')
7
- const dc = require('dc-polyfill')
8
- const { fileURLToPath } = require('url')
9
8
  const { isTrue } = require('../../src/util')
9
+ const { sendData } = require('./send-data')
10
10
 
11
11
  /** @type {Set<string>} */
12
12
  const savedDependenciesToSend = new Set()
@@ -15,7 +15,7 @@ let updateRetryData
15
15
 
16
16
  /**
17
17
  * Keep track of endpoints that still need to be sent.
18
- * Map key is `${METHOD} ${PATH}`, value is { method, path }
18
+ * Map key is `${METHOD} ${PATH}`, value is { method, path, operationName }
19
19
  */
20
20
  const pendingEndpoints = new Map()
21
21
  const wildcardEndpoints = new Set()
@@ -32,11 +32,11 @@ function scheduleFlush () {
32
32
  setImmediate(flushAndSend).unref()
33
33
  }
34
34
 
35
- function recordEndpoint (method, path) {
35
+ function recordEndpoint (method, path, operationName) {
36
36
  const key = endpointKey(method, path)
37
37
  if (pendingEndpoints.has(key)) return
38
38
 
39
- pendingEndpoints.set(key, { method: method.toUpperCase(), path })
39
+ pendingEndpoints.set(key, { method: method.toUpperCase(), path, operationName })
40
40
  scheduleFlush()
41
41
  }
42
42
 
@@ -46,7 +46,7 @@ function onFastifyRoute (routeData) {
46
46
 
47
47
  const methods = Array.isArray(routeOptions.method) ? routeOptions.method : [routeOptions.method]
48
48
  for (const method of methods) {
49
- recordEndpoint(method, routeOptions.path)
49
+ recordEndpoint(method, routeOptions.path, 'fastify.request')
50
50
  }
51
51
  }
52
52
 
@@ -56,7 +56,7 @@ function onExpressRoute ({ method, path }) {
56
56
  // If wildcard already recorded for this path, skip specific methods
57
57
  if (wildcardEndpoints.has(path)) return
58
58
 
59
- recordEndpoint(method, path)
59
+ recordEndpoint(method, path, 'express.request')
60
60
 
61
61
  // If this is a wildcard event, record it and mark path as wildcarded
62
62
  if (method === '*') {
@@ -66,17 +66,17 @@ function onExpressRoute ({ method, path }) {
66
66
 
67
67
  // Express automatically adds HEAD support for GET routes
68
68
  if (method.toUpperCase() === 'GET') {
69
- recordEndpoint('HEAD', path)
69
+ recordEndpoint('HEAD', path, 'express.request')
70
70
  }
71
71
  }
72
72
 
73
73
  function buildEndpointObjects (endpoints) {
74
- return endpoints.map(({ method, path }) => {
74
+ return endpoints.map(({ method, path, operationName }) => {
75
75
  return {
76
76
  type: 'REST',
77
77
  method,
78
78
  path,
79
- operation_name: 'http.request',
79
+ operation_name: operationName,
80
80
  resource_name: endpointKey(method, path)
81
81
  }
82
82
  })
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  const dc = require('dc-polyfill')
4
- const logCollector = require('./log-collector')
5
4
  const { sendData } = require('../send-data')
5
+ const logCollector = require('./log-collector')
6
6
 
7
7
  const telemetryLog = dc.channel('datadog:telemetry:log')
8
8
  const errorLog = dc.channel('datadog:log:error')
@@ -1,14 +1,17 @@
1
1
  'use strict'
2
- const tracerVersion = require('../../../../package.json').version
3
- const dc = require('dc-polyfill')
2
+
4
3
  const os = require('os')
4
+ const dc = require('dc-polyfill')
5
+
6
+ const tracerVersion = require('../../../../package.json').version
7
+ const { errors } = require('../startup-log')
8
+ const logger = require('../log')
9
+ const processTags = require('../process-tags')
5
10
  const dependencies = require('./dependencies')
6
11
  const endpoints = require('./endpoints')
7
12
  const { sendData } = require('./send-data')
8
- const { errors } = require('../startup-log')
9
13
  const { manager: metricsManager } = require('./metrics')
10
14
  const telemetryLogger = require('./logs')
11
- const logger = require('../log')
12
15
 
13
16
  const telemetryStartChannel = dc.channel('datadog:telemetry:start')
14
17
  const telemetryStopChannel = dc.channel('datadog:telemetry:stop')
@@ -78,7 +81,8 @@ function getIntegrations () {
78
81
  newIntegrations.push({
79
82
  name: pluginName,
80
83
  enabled: pluginManager._pluginsByName[pluginName]._enabled,
81
- auto_enabled: true
84
+ auto_enabled: true,
85
+ [processTags.TELEMETRY_FIELD_NAME]: processTags.tagsObject
82
86
  })
83
87
  sentIntegrations.add(pluginName)
84
88
  }
@@ -155,7 +159,8 @@ function createAppObject (config) {
155
159
  service_version: config.version,
156
160
  tracer_version: tracerVersion,
157
161
  language_name: 'nodejs',
158
- language_version: process.versions.node
162
+ language_version: process.versions.node,
163
+ process_tags: processTags.tagsObject
159
164
  }
160
165
  }
161
166
 
@@ -1,13 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const Tracer = require('./opentracing/tracer')
4
3
  const tags = require('../../../ext/tags')
4
+ const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../dd-trace/src/constants')
5
+ const { flushStartupLogs } = require('../../datadog-instrumentations/src/helpers/check-require-cache')
6
+ const Tracer = require('./opentracing/tracer')
5
7
  const Scope = require('./scope')
6
8
  const { isError } = require('./util')
7
9
  const { setStartupLogConfig } = require('./startup-log')
8
- const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../dd-trace/src/constants')
9
10
  const { DataStreamsCheckpointer, DataStreamsManager, DataStreamsProcessor } = require('./datastreams')
10
- const { flushStartupLogs } = require('../../datadog-instrumentations/src/helpers/check-require-cache')
11
11
  const log = require('./log/writer')
12
12
 
13
13
  const SPAN_TYPE = tags.SPAN_TYPE
@@ -1,25 +1,29 @@
1
1
  'use strict'
2
2
 
3
- // Load binding first to not import other modules if it throws
4
- const libdatadog = require('@datadog/libdatadog')
5
3
  const tracerVersion = require('../../../version').VERSION
6
4
 
7
5
  function storeConfig (config) {
8
- const processDiscovery = libdatadog.maybeLoad('process-discovery')
9
- if (processDiscovery === undefined) {
10
- return
11
- }
6
+ try {
7
+ // Load binding first to not import other modules if it throws
8
+ const libdatadog = require('@datadog/libdatadog')
9
+ const processDiscovery = libdatadog.maybeLoad('process-discovery')
10
+ if (processDiscovery === undefined) {
11
+ return
12
+ }
12
13
 
13
- const metadata = new processDiscovery.TracerMetadata(
14
- config.tags['runtime-id'],
15
- tracerVersion,
16
- config.hostname,
17
- config.service || null,
18
- config.env || null,
19
- config.version || null
20
- )
14
+ const metadata = new processDiscovery.TracerMetadata(
15
+ config.tags['runtime-id'],
16
+ tracerVersion,
17
+ config.hostname,
18
+ config.service || null,
19
+ config.env || null,
20
+ config.version || null
21
+ )
21
22
 
22
- return processDiscovery.storeMetadata(metadata)
23
+ return processDiscovery.storeMetadata(metadata)
24
+ } catch {
25
+ // Either libdatadog or process-discovery is unavailable.
26
+ }
23
27
  }
24
28
 
25
29
  module.exports = storeConfig