dd-trace 5.53.0 → 5.54.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 (319) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/index.d.ts +33 -16
  3. package/initialize.mjs +3 -4
  4. package/package.json +36 -34
  5. package/packages/datadog-core/src/utils/src/get.js +1 -1
  6. package/packages/datadog-core/src/utils/src/has.js +1 -1
  7. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  8. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  9. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  10. package/packages/datadog-core/src/utils/src/set.js +1 -1
  11. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  12. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  13. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  14. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  15. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  16. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  17. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  18. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
  19. package/packages/datadog-instrumentations/src/couchbase.js +3 -3
  20. package/packages/datadog-instrumentations/src/cucumber.js +87 -40
  21. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  22. package/packages/datadog-instrumentations/src/dns.js +1 -1
  23. package/packages/datadog-instrumentations/src/fs.js +1 -1
  24. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  25. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  26. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  27. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  28. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  29. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  30. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  31. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  32. package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
  33. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  34. package/packages/datadog-instrumentations/src/jest.js +137 -48
  35. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  36. package/packages/datadog-instrumentations/src/knex.js +4 -4
  37. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  38. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  39. package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
  40. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  41. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  42. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  43. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  44. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  45. package/packages/datadog-instrumentations/src/net.js +1 -1
  46. package/packages/datadog-instrumentations/src/next.js +1 -0
  47. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  48. package/packages/datadog-instrumentations/src/openai.js +21 -23
  49. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  50. package/packages/datadog-instrumentations/src/pg.js +1 -2
  51. package/packages/datadog-instrumentations/src/playwright.js +112 -69
  52. package/packages/datadog-instrumentations/src/redis.js +3 -3
  53. package/packages/datadog-instrumentations/src/restify.js +2 -2
  54. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  55. package/packages/datadog-instrumentations/src/router.js +22 -25
  56. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  57. package/packages/datadog-instrumentations/src/vitest.js +77 -28
  58. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  59. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  60. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  61. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  62. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  63. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  64. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  65. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  66. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  67. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  68. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  69. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  70. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  72. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  73. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  74. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  75. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  76. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  77. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  78. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  79. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  80. package/packages/datadog-plugin-cucumber/src/index.js +57 -2
  81. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  82. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  83. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  84. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  85. package/packages/datadog-plugin-express/src/index.js +10 -12
  86. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  87. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  88. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  89. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  90. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  91. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  92. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  93. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  94. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  95. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  96. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  97. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  98. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  99. package/packages/datadog-plugin-http/src/client.js +18 -7
  100. package/packages/datadog-plugin-http2/src/client.js +20 -20
  101. package/packages/datadog-plugin-jest/src/index.js +23 -21
  102. package/packages/datadog-plugin-jest/src/util.js +8 -8
  103. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  104. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  105. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  106. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  107. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  108. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  109. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  110. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  111. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  112. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  113. package/packages/datadog-plugin-mocha/src/index.js +33 -13
  114. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  115. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  116. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  117. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  118. package/packages/datadog-plugin-next/src/index.js +6 -5
  119. package/packages/datadog-plugin-openai/src/services.js +6 -10
  120. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  121. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  122. package/packages/datadog-plugin-playwright/src/index.js +22 -2
  123. package/packages/datadog-plugin-redis/src/index.js +1 -1
  124. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  125. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  126. package/packages/datadog-plugin-router/src/index.js +1 -1
  127. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  128. package/packages/datadog-plugin-vitest/src/index.js +47 -31
  129. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  130. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  131. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  132. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  133. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  134. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  135. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  136. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  137. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  138. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  139. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  140. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  141. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  142. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  143. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  144. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  145. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  146. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  147. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  148. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  149. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  150. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  151. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  152. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  153. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  154. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  157. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  158. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  160. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  162. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  163. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  166. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  167. package/packages/dd-trace/src/appsec/index.js +1 -1
  168. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  169. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  170. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  171. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  172. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  173. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  174. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  175. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  176. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  177. package/packages/dd-trace/src/azure_metadata.js +2 -7
  178. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  179. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  180. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  181. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  182. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  183. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  184. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  185. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  186. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  187. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  188. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  189. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  191. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  192. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  193. package/packages/dd-trace/src/config.js +82 -51
  194. package/packages/dd-trace/src/config_stable.js +3 -3
  195. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  196. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  197. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  198. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  199. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  200. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  201. package/packages/dd-trace/src/datastreams/size.js +1 -1
  202. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +74 -67
  203. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  204. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  205. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
  206. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  209. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  210. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  211. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  212. package/packages/dd-trace/src/dogstatsd.js +5 -4
  213. package/packages/dd-trace/src/encode/0.4.js +9 -9
  214. package/packages/dd-trace/src/encode/0.5.js +1 -1
  215. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  216. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  217. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  218. package/packages/dd-trace/src/exporter.js +6 -6
  219. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  220. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  221. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  222. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  223. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  224. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  225. package/packages/dd-trace/src/flare/file.js +1 -5
  226. package/packages/dd-trace/src/format.js +1 -1
  227. package/packages/dd-trace/src/git_properties.js +1 -1
  228. package/packages/dd-trace/src/id.js +12 -6
  229. package/packages/dd-trace/src/iitm.js +10 -22
  230. package/packages/dd-trace/src/lambda/handler.js +6 -6
  231. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  232. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  233. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  234. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  235. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  236. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  237. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  238. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  239. package/packages/dd-trace/src/llmobs/tagger.js +110 -96
  240. package/packages/dd-trace/src/llmobs/util.js +9 -9
  241. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  242. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  243. package/packages/dd-trace/src/log/index.js +4 -4
  244. package/packages/dd-trace/src/log/log.js +1 -1
  245. package/packages/dd-trace/src/log/writer.js +2 -2
  246. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  247. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  248. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  249. package/packages/dd-trace/src/noop/span.js +3 -5
  250. package/packages/dd-trace/src/noop/tracer.js +1 -2
  251. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  252. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  253. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  254. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  255. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  256. package/packages/dd-trace/src/opentracing/span.js +9 -14
  257. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  258. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  259. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  260. package/packages/dd-trace/src/pkg.js +1 -1
  261. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  262. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  263. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  264. package/packages/dd-trace/src/plugins/index.js +0 -1
  265. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  266. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  267. package/packages/dd-trace/src/plugins/producer.js +2 -2
  268. package/packages/dd-trace/src/plugins/storage.js +2 -2
  269. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  270. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  271. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  272. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  273. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  274. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  275. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  276. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  277. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  278. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  279. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  280. package/packages/dd-trace/src/priority_sampler.js +22 -22
  281. package/packages/dd-trace/src/profiling/config.js +44 -8
  282. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  283. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  284. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  285. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  286. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  287. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  288. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  289. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  290. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  291. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  292. package/packages/dd-trace/src/proxy.js +7 -9
  293. package/packages/dd-trace/src/random_sampler.js +40 -0
  294. package/packages/dd-trace/src/rate_limiter.js +4 -4
  295. package/packages/dd-trace/src/remote_config/index.js +3 -7
  296. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  297. package/packages/dd-trace/src/require-package-json.js +1 -1
  298. package/packages/dd-trace/src/ritm.js +4 -4
  299. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  300. package/packages/dd-trace/src/sampler.js +33 -4
  301. package/packages/dd-trace/src/sampling_rule.js +12 -3
  302. package/packages/dd-trace/src/scope.js +1 -1
  303. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  304. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  305. package/packages/dd-trace/src/span_processor.js +3 -3
  306. package/packages/dd-trace/src/span_sampler.js +4 -1
  307. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  308. package/packages/dd-trace/src/startup-log.js +2 -2
  309. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  310. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  311. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  312. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  313. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  314. package/packages/dd-trace/src/util.js +1 -1
  315. package/version.js +1 -0
  316. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  317. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  318. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  319. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -62,7 +62,7 @@ function wrap (prefix, fn, expectedArgs, rrtype) {
62
62
  return fn.apply(this, arguments)
63
63
  }
64
64
 
65
- const args = Array.from(arguments)
65
+ const args = [...arguments]
66
66
  args.pop() // gets rid of the callback
67
67
  if (rrtype) {
68
68
  args.push(rrtype)
@@ -366,7 +366,7 @@ function massWrap (target, methods, wrapper) {
366
366
  function wrap (target, method, wrapper) {
367
367
  try {
368
368
  shimmer.wrap(target, method, wrapper)
369
- } catch (e) {
369
+ } catch {
370
370
  // skip unavailable method
371
371
  }
372
372
  }
@@ -2,8 +2,7 @@
2
2
 
3
3
  const {
4
4
  channel,
5
- addHook,
6
- AsyncResource
5
+ addHook
7
6
  } = require('./helpers/instrument')
8
7
  const shimmer = require('../../datadog-shimmer')
9
8
 
@@ -65,38 +64,32 @@ function wrapMethod (method) {
65
64
  return function (request) {
66
65
  if (!requestStartCh.hasSubscribers) return method.apply(this, arguments)
67
66
 
68
- const innerAsyncResource = new AsyncResource('bound-anonymous-fn')
69
-
70
- return innerAsyncResource.runInAsyncScope(() => {
71
- const projectId = this.auth._cachedProjectId
67
+ const ctx = { request, api, projectId: this.auth._cachedProjectId }
68
+ return requestStartCh.runStores(ctx, () => {
72
69
  const cb = arguments[arguments.length - 1]
73
70
 
74
- requestStartCh.publish({ request, api, projectId })
75
-
76
71
  if (typeof cb === 'function') {
77
- const outerAsyncResource = new AsyncResource('bound-anonymous-fn')
78
-
79
- arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => innerAsyncResource.bind(function (error) {
72
+ arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => function (error) {
80
73
  if (error) {
81
- requestErrorCh.publish(error)
74
+ ctx.error = error
75
+ requestErrorCh.publish(ctx)
82
76
  }
83
77
 
84
- requestFinishCh.publish()
85
-
86
- return outerAsyncResource.runInAsyncScope(() => cb.apply(this, arguments))
87
- }))
78
+ return requestFinishCh.runStores(ctx, cb, this, ...arguments)
79
+ })
88
80
 
89
81
  return method.apply(this, arguments)
90
82
  } else {
91
83
  return method.apply(this, arguments)
92
84
  .then(
93
85
  response => {
94
- requestFinishCh.publish()
86
+ requestFinishCh.publish(ctx)
95
87
  return response
96
88
  },
97
89
  error => {
98
- requestErrorCh.publish(error)
99
- requestFinishCh.publish()
90
+ ctx.error = error
91
+ requestErrorCh.publish(ctx)
92
+ requestFinishCh.publish(ctx)
100
93
  throw error
101
94
  }
102
95
  )
@@ -119,16 +112,14 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'] }, (obj) => {
119
112
  shimmer.wrap(Subscription.prototype, 'emit', emit => function (eventName, message) {
120
113
  if (eventName !== 'message' || !message) return emit.apply(this, arguments)
121
114
 
122
- const asyncResource = new AsyncResource('bound-anonymous-fn')
123
-
124
- return asyncResource.runInAsyncScope(() => {
125
- try {
126
- return emit.apply(this, arguments)
127
- } catch (err) {
128
- receiveErrorCh.publish(err)
129
- throw err
130
- }
131
- })
115
+ const ctx = {}
116
+ try {
117
+ return emit.apply(this, arguments)
118
+ } catch (err) {
119
+ ctx.error = err
120
+ receiveErrorCh.publish(ctx)
121
+ throw err
122
+ }
132
123
  })
133
124
 
134
125
  return obj
@@ -136,22 +127,25 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'] }, (obj) => {
136
127
 
137
128
  addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/lease-manager.js' }, (obj) => {
138
129
  const LeaseManager = obj.LeaseManager
130
+ const ctx = {}
139
131
 
140
132
  shimmer.wrap(LeaseManager.prototype, '_dispense', dispense => function (message) {
141
133
  if (receiveStartCh.hasSubscribers) {
142
- receiveStartCh.publish({ message })
134
+ ctx.message = message
135
+ return receiveStartCh.runStores(ctx, dispense, this, ...arguments)
136
+ } else {
137
+ return dispense.apply(this, arguments)
143
138
  }
144
- return dispense.apply(this, arguments)
145
139
  })
146
140
 
147
141
  shimmer.wrap(LeaseManager.prototype, 'remove', remove => function (message) {
148
- receiveFinishCh.publish({ message })
149
- return remove.apply(this, arguments)
142
+ return receiveFinishCh.runStores(ctx, remove, this, ...arguments)
150
143
  })
151
144
 
152
145
  shimmer.wrap(LeaseManager.prototype, 'clear', clear => function () {
153
146
  for (const message of this._messages) {
154
- receiveFinishCh.publish({ message })
147
+ ctx.message = message
148
+ receiveFinishCh.publish(ctx)
155
149
  }
156
150
  return clear.apply(this, arguments)
157
151
  })
@@ -44,27 +44,24 @@ class AbortError extends Error {
44
44
  }
45
45
  }
46
46
 
47
+ const types = new Set(['query', 'mutation', 'subscription'])
48
+
47
49
  function getOperation (document, operationName) {
48
50
  if (!document || !Array.isArray(document.definitions)) {
49
51
  return
50
52
  }
51
53
 
52
- const definitions = document.definitions.filter(def => def)
53
- const types = ['query', 'mutation', 'subscription']
54
-
55
- if (operationName) {
56
- return definitions
57
- .filter(def => types.indexOf(def.operation) !== -1)
58
- .find(def => operationName === (def.name && def.name.value))
59
- } else {
60
- return definitions.find(def => types.indexOf(def.operation) !== -1)
54
+ for (const definition of document.definitions) {
55
+ if (definition && types.has(definition.operation) && (!operationName || definition.name?.value === operationName)) {
56
+ return definition
57
+ }
61
58
  }
62
59
  }
63
60
 
64
61
  function normalizeArgs (args, defaultFieldResolver) {
65
62
  if (args.length !== 1) return normalizePositional(args, defaultFieldResolver)
66
63
 
67
- args[0].contextValue = args[0].contextValue || {}
64
+ args[0].contextValue ||= {}
68
65
  args[0].fieldResolver = wrapResolve(args[0].fieldResolver || defaultFieldResolver)
69
66
 
70
67
  return args[0]
@@ -4,8 +4,6 @@ const types = require('./types')
4
4
  const { addHook, channel } = require('../helpers/instrument')
5
5
  const shimmer = require('../../../datadog-shimmer')
6
6
 
7
- const nodeMajor = parseInt(process.versions.node.split('.')[0])
8
-
9
7
  const patched = new WeakSet()
10
8
  const instances = new WeakMap()
11
9
 
@@ -98,7 +96,7 @@ function wrapMethod (method, path, type, hasPeer) {
98
96
  return wrapped
99
97
  }
100
98
 
101
- function wrapCallback (ctx, callback = () => { }) {
99
+ function wrapCallback (ctx, callback = () => {}) {
102
100
  return shimmer.wrapFunction(callback, callback => function (err) {
103
101
  if (err) {
104
102
  ctx.error = err
@@ -112,18 +110,18 @@ function wrapCallback (ctx, callback = () => { }) {
112
110
  })
113
111
  }
114
112
 
115
- function createWrapEmit (ctx, hasPeer = false) {
116
- const onStatusWithPeer = function (ctx, arg1, thisArg) {
117
- ctx.result = arg1
118
- ctx.peer = thisArg.getPeer()
119
- finishChannel.publish(ctx)
120
- }
113
+ const onStatusWithPeer = function (ctx, arg1, thisArg) {
114
+ ctx.result = arg1
115
+ ctx.peer = thisArg.getPeer()
116
+ finishChannel.publish(ctx)
117
+ }
121
118
 
122
- const onStatusWithoutPeer = function (ctx, arg1, thisArg) {
123
- ctx.result = arg1
124
- finishChannel.publish(ctx)
125
- }
119
+ const onStatusWithoutPeer = function (ctx, arg1) {
120
+ ctx.result = arg1
121
+ finishChannel.publish(ctx)
122
+ }
126
123
 
124
+ function createWrapEmit (ctx, hasPeer = false) {
127
125
  const onStatus = hasPeer ? onStatusWithPeer : onStatusWithoutPeer
128
126
 
129
127
  return function wrapEmit (emit) {
@@ -245,16 +243,6 @@ function patch (hasPeer = false) {
245
243
  }
246
244
  }
247
245
 
248
- if (nodeMajor <= 14) {
249
- addHook({ name: 'grpc', versions: ['>=1.24.3'] }, patch(true))
250
-
251
- addHook({ name: 'grpc', versions: ['>=1.24.3'], file: 'src/client.js' }, client => {
252
- shimmer.wrap(client, 'makeClientConstructor', createWrapMakeClientConstructor(true))
253
-
254
- return client
255
- })
256
- }
257
-
258
246
  addHook({ name: '@grpc/grpc-js', versions: ['>=1.0.3 <1.1.4'] }, patch(false))
259
247
 
260
248
  addHook({ name: '@grpc/grpc-js', versions: ['>=1.0.3 <1.1.4'], file: 'build/src/make-client.js' }, client => {
@@ -4,8 +4,6 @@ const types = require('./types')
4
4
  const { channel, addHook } = require('../helpers/instrument')
5
5
  const shimmer = require('../../../datadog-shimmer')
6
6
 
7
- const nodeMajor = parseInt(process.versions.node.split('.')[0])
8
-
9
7
  const startChannel = channel('apm:grpc:server:request:start')
10
8
  const asyncStartChannel = channel('apm:grpc:server:request:asyncStart')
11
9
  const errorChannel = channel('apm:grpc:server:request:error')
@@ -17,17 +15,14 @@ const emitChannel = channel('apm:grpc:server:request:emit')
17
15
  const OK = 0
18
16
  const CANCELLED = 1
19
17
 
20
- function wrapHandler (func, name) {
21
- const isValid = (server, args) => {
22
- if (!startChannel.hasSubscribers) return false
23
- if (!server || !server.type) return false
24
- if (!args[0]) return false
25
- if (server.type !== 'unary' && !isEmitter(args[0])) return false
26
- if (server.type === 'unary' && typeof args[1] !== 'function') return false
27
-
28
- return true
29
- }
18
+ const isValid = (server, args) => {
19
+ return Boolean(startChannel.hasSubscribers &&
20
+ server?.type &&
21
+ args[0] &&
22
+ (server.type === 'unary' ? typeof args[1] === 'function' : isEmitter(args[0])))
23
+ }
30
24
 
25
+ function wrapHandler (func, name) {
31
26
  return function (call, callback) {
32
27
  if (!isValid(this, arguments)) return func.apply(this, arguments)
33
28
 
@@ -152,14 +147,6 @@ function isEmitter (obj) {
152
147
  return typeof obj.emit === 'function' && typeof obj.once === 'function'
153
148
  }
154
149
 
155
- if (nodeMajor <= 14) {
156
- addHook({ name: 'grpc', versions: ['>=1.24.3'], file: 'src/server.js' }, server => {
157
- shimmer.wrap(server.Server.prototype, 'register', wrapRegister)
158
-
159
- return server
160
- })
161
- }
162
-
163
150
  addHook({ name: '@grpc/grpc-js', versions: ['>=1.0.3'], file: 'build/src/server.js' }, server => {
164
151
  shimmer.wrap(server.Server.prototype, 'register', wrapRegister)
165
152
 
@@ -10,27 +10,33 @@ const NM = 'node_modules/'
10
10
  */
11
11
  module.exports = function extractPackageAndModulePath (fullPath) {
12
12
  const nm = fullPath.lastIndexOf(NM)
13
- if (nm < 0) {
13
+ if (nm === -1) {
14
14
  return { pkg: null, path: null }
15
15
  }
16
16
 
17
- const subPath = fullPath.substring(nm + NM.length)
17
+ const subPath = fullPath.slice(nm + NM.length)
18
18
  const firstSlash = subPath.indexOf('/')
19
19
 
20
- const firstPath = fullPath.substring(fullPath[0], nm + NM.length)
20
+ const firstPath = fullPath.slice(0, nm + NM.length)
21
+
22
+ const firstSlashSubPath = subPath.slice(Math.max(0, firstSlash + 1))
21
23
 
22
24
  if (subPath[0] === '@') {
23
- const secondSlash = subPath.substring(firstSlash + 1).indexOf('/')
25
+ const secondSlash = firstSlashSubPath.indexOf('/')
26
+ const pkg = subPath.slice(0, Math.max(0, firstSlash + 1 + secondSlash))
27
+
24
28
  return {
25
- pkg: subPath.substring(0, firstSlash + 1 + secondSlash),
26
- path: subPath.substring(firstSlash + 1 + secondSlash + 1),
27
- pkgJson: firstPath + subPath.substring(0, firstSlash + 1 + secondSlash) + '/package.json'
29
+ pkg,
30
+ path: subPath.slice(Math.max(0, firstSlash + 1 + secondSlash + 1)),
31
+ pkgJson: firstPath + pkg + '/package.json'
28
32
  }
29
33
  }
30
34
 
35
+ const pkg = subPath.slice(0, Math.max(0, firstSlash))
36
+
31
37
  return {
32
- pkg: subPath.substring(0, firstSlash),
33
- path: subPath.substring(firstSlash + 1),
34
- pkgJson: firstPath + subPath.substring(0, firstSlash) + '/package.json'
38
+ pkg,
39
+ path: firstSlashSubPath,
40
+ pkgJson: firstPath + pkg + '/package.json'
35
41
  }
36
42
  }
@@ -22,7 +22,7 @@ function Hook (modules, hookOptions, onrequire) {
22
22
  this._patched = Object.create(null)
23
23
 
24
24
  const safeHook = (moduleExports, moduleName, moduleBaseDir, moduleVersion) => {
25
- const parts = [moduleBaseDir, moduleName].filter(v => v)
25
+ const parts = [moduleBaseDir, moduleName].filter(Boolean)
26
26
  const filename = path.join(...parts)
27
27
 
28
28
  if (this._patched[filename]) return moduleExports
@@ -105,7 +105,6 @@ module.exports = {
105
105
  nyc: () => require('../nyc'),
106
106
  oracledb: () => require('../oracledb'),
107
107
  openai: { esmFirst: true, fn: () => require('../openai') },
108
- paperplane: () => require('../paperplane'),
109
108
  passport: () => require('../passport'),
110
109
  'passport-http': () => require('../passport-http'),
111
110
  'passport-local': () => require('../passport-local'),
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
3
  const dc = require('dc-polyfill')
4
- const satisfies = require('semifies')
5
4
  const instrumentations = require('./instrumentations')
6
5
  const { AsyncResource } = require('async_hooks')
7
6
 
@@ -34,43 +33,4 @@ exports.addHook = function addHook ({ name, versions, file, filePattern }, hook)
34
33
  }
35
34
  }
36
35
 
37
- // AsyncResource.bind exists and binds `this` properly only from 17.8.0 and up.
38
- // https://nodejs.org/api/async_context.html#asyncresourcebindfn-thisarg
39
- if (satisfies(process.versions.node, '>=17.8.0')) {
40
- exports.AsyncResource = AsyncResource
41
- } else {
42
- exports.AsyncResource = class extends AsyncResource {
43
- static bind (fn, type, thisArg) {
44
- type = type || fn.name
45
- return (new exports.AsyncResource(type || 'bound-anonymous-fn')).bind(fn, thisArg)
46
- }
47
-
48
- bind (fn, thisArg) {
49
- let bound
50
- if (thisArg === undefined) {
51
- const resource = this
52
- bound = function (...args) {
53
- args.unshift(fn, this)
54
- return Reflect.apply(resource.runInAsyncScope, resource, args)
55
- }
56
- } else {
57
- bound = this.runInAsyncScope.bind(this, fn, thisArg)
58
- }
59
- Object.defineProperties(bound, {
60
- length: {
61
- configurable: true,
62
- enumerable: false,
63
- value: fn.length,
64
- writable: false
65
- },
66
- asyncResource: {
67
- configurable: true,
68
- enumerable: true,
69
- value: this,
70
- writable: true
71
- }
72
- })
73
- return bound
74
- }
75
- }
76
- }
36
+ exports.AsyncResource = AsyncResource
@@ -26,7 +26,7 @@ const disabledInstrumentations = new Set(
26
26
  // Check for DD_TRACE_<INTEGRATION>_ENABLED environment variables
27
27
  for (const [key, value] of Object.entries(process.env)) {
28
28
  const match = key.match(/^DD_TRACE_(.+)_ENABLED$/)
29
- if (match && (value.toLowerCase() === 'false' || value === '0')) {
29
+ if (match && (value?.toLowerCase() === 'false' || value === '0')) {
30
30
  const integration = match[1].toLowerCase()
31
31
  disabledInstrumentations.add(integration)
32
32
  }
@@ -115,7 +115,7 @@ for (const packageName of names) {
115
115
  log.error('Error getting version for "%s": %s', name, e.message, e)
116
116
  continue
117
117
  }
118
- if (namesAndSuccesses[`${name}@${version}`] === undefined) {
118
+ if (namesAndSuccesses[`${name}@${version}`] === undefined && !file) {
119
119
  // TODO If `file` is present, we might elsewhere instrument the result of the module
120
120
  // for a version range that actually matches, so we can't assume that we're _not_
121
121
  // going to instrument that. However, the way the data model around instrumentation
@@ -123,9 +123,7 @@ for (const packageName of names) {
123
123
  // ignore this if there is a `file` in the hook. The thing to do here is rework
124
124
  // everything so that we can be sure that there are _no_ instrumentations that it
125
125
  // could match.
126
- if (!file) {
127
- namesAndSuccesses[`${name}@${version}`] = false
128
- }
126
+ namesAndSuccesses[`${name}@${version}`] = false
129
127
  }
130
128
 
131
129
  if (matchVersion(version, versions)) {
@@ -190,7 +188,7 @@ function getVersion (moduleBaseDir) {
190
188
  }
191
189
 
192
190
  function filename (name, file) {
193
- return [name, file].filter(val => val).join('/')
191
+ return [name, file].filter(Boolean).join('/')
194
192
  }
195
193
 
196
194
  // This function captures the instrumentation file name for a given package by parsing the hook require
@@ -217,7 +215,7 @@ function parseHookInstrumentationFileName (packageName) {
217
215
  let moduleName = match[1]
218
216
  // Remove leading '../' if present
219
217
  if (moduleName.startsWith('../')) {
220
- moduleName = moduleName.substring(3)
218
+ moduleName = moduleName.slice(3)
221
219
  }
222
220
  return moduleName
223
221
  }
@@ -26,6 +26,19 @@ function hookFn (http) {
26
26
  return http
27
27
  }
28
28
 
29
+ function combineOptions (inputURL, inputOptions) {
30
+ return inputOptions !== null && typeof inputOptions === 'object'
31
+ ? Object.assign(inputURL || {}, inputOptions)
32
+ : inputURL
33
+ }
34
+ function normalizeHeaders (options) {
35
+ options.headers ??= {}
36
+ }
37
+
38
+ function normalizeCallback (inputOptions, callback, inputURL) {
39
+ return typeof inputOptions === 'function' ? [inputOptions, inputURL || {}] : [callback, inputOptions]
40
+ }
41
+
29
42
  function patch (http, methodName) {
30
43
  shimmer.wrap(http, methodName, instrumentRequest)
31
44
 
@@ -143,30 +156,11 @@ function patch (http, methodName) {
143
156
  return { uri, options, callback, originalUrl }
144
157
  }
145
158
 
146
- function combineOptions (inputURL, inputOptions) {
147
- if (inputOptions !== null && typeof inputOptions === 'object') {
148
- return Object.assign(inputURL || {}, inputOptions)
149
- } else {
150
- return inputURL
151
- }
152
- }
153
- function normalizeHeaders (options) {
154
- options.headers = options.headers || {}
155
- }
156
-
157
- function normalizeCallback (inputOptions, callback, inputURL) {
158
- if (typeof inputOptions === 'function') {
159
- return [inputOptions, inputURL || {}]
160
- } else {
161
- return [callback, inputOptions]
162
- }
163
- }
164
-
165
159
  function normalizeOptions (inputURL) {
166
160
  if (typeof inputURL === 'string') {
167
161
  try {
168
162
  return urlToOptions(new url.URL(inputURL))
169
- } catch (e) {
163
+ } catch {
170
164
  // eslint-disable-next-line n/no-deprecated-api
171
165
  return url.parse(inputURL)
172
166
  }