dd-trace 5.53.0 → 5.55.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 (368) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/ci/cypress/plugin.js +8 -0
  3. package/ci/cypress/polyfills.js +23 -0
  4. package/ci/init.js +8 -7
  5. package/index.d.ts +33 -16
  6. package/initialize.mjs +5 -6
  7. package/package.json +40 -38
  8. package/packages/datadog-code-origin/index.js +22 -4
  9. package/packages/datadog-core/src/utils/src/get.js +1 -1
  10. package/packages/datadog-core/src/utils/src/has.js +1 -1
  11. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  12. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  13. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  14. package/packages/datadog-core/src/utils/src/set.js +1 -1
  15. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  16. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  17. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  18. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
  21. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  22. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
  23. package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
  24. package/packages/datadog-instrumentations/src/couchbase.js +6 -9
  25. package/packages/datadog-instrumentations/src/cucumber.js +108 -68
  26. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  27. package/packages/datadog-instrumentations/src/dns.js +5 -5
  28. package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
  29. package/packages/datadog-instrumentations/src/fastify.js +7 -9
  30. package/packages/datadog-instrumentations/src/fs.js +1 -1
  31. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
  32. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  33. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  34. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  35. package/packages/datadog-instrumentations/src/hapi.js +10 -11
  36. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  37. package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
  38. package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
  39. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  40. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  41. package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
  42. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  43. package/packages/datadog-instrumentations/src/jest.js +201 -143
  44. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  45. package/packages/datadog-instrumentations/src/knex.js +4 -4
  46. package/packages/datadog-instrumentations/src/koa.js +2 -3
  47. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  48. package/packages/datadog-instrumentations/src/mariadb.js +49 -65
  49. package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
  50. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  51. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  52. package/packages/datadog-instrumentations/src/mocha.js +3 -1
  53. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  54. package/packages/datadog-instrumentations/src/mysql.js +30 -37
  55. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  56. package/packages/datadog-instrumentations/src/net.js +1 -1
  57. package/packages/datadog-instrumentations/src/next.js +1 -0
  58. package/packages/datadog-instrumentations/src/nyc.js +3 -2
  59. package/packages/datadog-instrumentations/src/openai.js +22 -24
  60. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  61. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
  62. package/packages/datadog-instrumentations/src/pg.js +3 -5
  63. package/packages/datadog-instrumentations/src/playwright.js +123 -83
  64. package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
  65. package/packages/datadog-instrumentations/src/redis.js +4 -4
  66. package/packages/datadog-instrumentations/src/restify.js +9 -13
  67. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  68. package/packages/datadog-instrumentations/src/router.js +30 -32
  69. package/packages/datadog-instrumentations/src/tedious.js +2 -3
  70. package/packages/datadog-instrumentations/src/vitest.js +87 -52
  71. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  72. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  73. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  74. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  75. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  76. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  77. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  78. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  79. package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
  80. package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
  81. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  82. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  83. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
  84. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
  85. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  86. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
  87. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
  88. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
  89. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
  90. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
  91. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
  92. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  93. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  94. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  95. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  96. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  97. package/packages/datadog-plugin-cucumber/src/index.js +60 -4
  98. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
  99. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  100. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  101. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
  102. package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
  103. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  104. package/packages/datadog-plugin-express/src/index.js +10 -12
  105. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  106. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  107. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  108. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  109. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
  110. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  111. package/packages/datadog-plugin-graphql/src/index.js +10 -8
  112. package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
  113. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  114. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  115. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  116. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  117. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  118. package/packages/datadog-plugin-http/src/client.js +23 -13
  119. package/packages/datadog-plugin-http2/src/client.js +24 -25
  120. package/packages/datadog-plugin-jest/src/index.js +26 -23
  121. package/packages/datadog-plugin-jest/src/util.js +8 -8
  122. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  123. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  124. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  125. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  126. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  127. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  128. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  129. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  130. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  131. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  132. package/packages/datadog-plugin-mocha/src/index.js +39 -14
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
  134. package/packages/datadog-plugin-mysql/src/index.js +22 -9
  135. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  136. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  137. package/packages/datadog-plugin-next/src/index.js +7 -6
  138. package/packages/datadog-plugin-openai/src/services.js +6 -10
  139. package/packages/datadog-plugin-openai/src/tracing.js +12 -18
  140. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  141. package/packages/datadog-plugin-playwright/src/index.js +25 -4
  142. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
  143. package/packages/datadog-plugin-redis/src/index.js +2 -4
  144. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  145. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  146. package/packages/datadog-plugin-router/src/index.js +1 -1
  147. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  148. package/packages/datadog-plugin-vitest/src/index.js +52 -35
  149. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  150. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  151. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  152. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  153. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
  154. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  158. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
  159. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  160. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  161. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  162. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  163. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  165. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  166. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  167. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
  168. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  169. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  170. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  171. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  172. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
  173. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  174. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  175. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
  176. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  177. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
  178. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
  179. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
  180. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  181. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  183. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
  184. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  185. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  186. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  187. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
  188. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  189. package/packages/dd-trace/src/appsec/index.js +5 -5
  190. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  191. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  192. package/packages/dd-trace/src/appsec/reporter.js +232 -41
  193. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  194. package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
  195. package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
  196. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  197. package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
  198. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  199. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  200. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  201. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
  202. package/packages/dd-trace/src/azure_metadata.js +9 -9
  203. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
  204. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  205. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
  206. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  207. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
  208. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
  209. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
  210. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  211. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
  212. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
  213. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  214. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
  215. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
  216. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
  217. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  218. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
  219. package/packages/dd-trace/src/config-helper.js +89 -0
  220. package/packages/dd-trace/src/config.js +159 -129
  221. package/packages/dd-trace/src/config_stable.js +10 -7
  222. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  223. package/packages/dd-trace/src/datastreams/fnv.js +2 -2
  224. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  225. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  226. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
  227. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  228. package/packages/dd-trace/src/datastreams/size.js +1 -1
  229. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
  230. package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
  231. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  232. package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
  233. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  234. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
  235. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
  236. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  237. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
  238. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
  239. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  240. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  241. package/packages/dd-trace/src/debugger/index.js +1 -0
  242. package/packages/dd-trace/src/dogstatsd.js +7 -6
  243. package/packages/dd-trace/src/encode/0.4.js +14 -11
  244. package/packages/dd-trace/src/encode/0.5.js +4 -6
  245. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
  246. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  247. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  248. package/packages/dd-trace/src/exporter.js +7 -6
  249. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  250. package/packages/dd-trace/src/exporters/common/docker.js +4 -3
  251. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  252. package/packages/dd-trace/src/exporters/common/request.js +5 -2
  253. package/packages/dd-trace/src/exporters/common/util.js +4 -2
  254. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  255. package/packages/dd-trace/src/flare/file.js +1 -5
  256. package/packages/dd-trace/src/format.js +1 -1
  257. package/packages/dd-trace/src/git_properties.js +1 -1
  258. package/packages/dd-trace/src/id.js +15 -9
  259. package/packages/dd-trace/src/iitm.js +10 -22
  260. package/packages/dd-trace/src/index.js +4 -3
  261. package/packages/dd-trace/src/lambda/handler.js +7 -6
  262. package/packages/dd-trace/src/lambda/index.js +2 -1
  263. package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
  264. package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
  265. package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
  266. package/packages/dd-trace/src/llmobs/index.js +21 -5
  267. package/packages/dd-trace/src/llmobs/noop.js +18 -20
  268. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  269. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  270. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  271. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
  272. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  273. package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
  274. package/packages/dd-trace/src/llmobs/sdk.js +4 -3
  275. package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
  276. package/packages/dd-trace/src/llmobs/tagger.js +129 -102
  277. package/packages/dd-trace/src/llmobs/util.js +9 -9
  278. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  279. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  280. package/packages/dd-trace/src/log/index.js +9 -8
  281. package/packages/dd-trace/src/log/log.js +1 -1
  282. package/packages/dd-trace/src/log/writer.js +3 -4
  283. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  284. package/packages/dd-trace/src/msgpack/encoder.js +31 -31
  285. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  286. package/packages/dd-trace/src/noop/span.js +4 -6
  287. package/packages/dd-trace/src/noop/tracer.js +1 -2
  288. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  289. package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
  290. package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
  291. package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
  292. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  293. package/packages/dd-trace/src/opentracing/span.js +16 -20
  294. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  295. package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
  296. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  297. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  298. package/packages/dd-trace/src/pkg.js +1 -1
  299. package/packages/dd-trace/src/plugin_manager.js +4 -3
  300. package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
  301. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  302. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  303. package/packages/dd-trace/src/plugins/index.js +0 -1
  304. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  305. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  306. package/packages/dd-trace/src/plugins/producer.js +2 -2
  307. package/packages/dd-trace/src/plugins/storage.js +2 -2
  308. package/packages/dd-trace/src/plugins/util/ci.js +28 -20
  309. package/packages/dd-trace/src/plugins/util/git.js +166 -12
  310. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  311. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  312. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  313. package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
  314. package/packages/dd-trace/src/plugins/util/test.js +315 -51
  315. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  316. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  317. package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
  318. package/packages/dd-trace/src/plugins/util/web.js +8 -8
  319. package/packages/dd-trace/src/priority_sampler.js +64 -53
  320. package/packages/dd-trace/src/profiling/config.js +51 -35
  321. package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
  322. package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
  323. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
  324. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  325. package/packages/dd-trace/src/profiling/index.js +2 -1
  326. package/packages/dd-trace/src/profiling/profiler.js +44 -6
  327. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  328. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  329. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  330. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  331. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  332. package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
  333. package/packages/dd-trace/src/profiling/tagger.js +21 -13
  334. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  335. package/packages/dd-trace/src/proxy.js +9 -10
  336. package/packages/dd-trace/src/random_sampler.js +40 -0
  337. package/packages/dd-trace/src/rate_limiter.js +4 -4
  338. package/packages/dd-trace/src/remote_config/index.js +3 -7
  339. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  340. package/packages/dd-trace/src/require-package-json.js +1 -1
  341. package/packages/dd-trace/src/ritm.js +8 -8
  342. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
  343. package/packages/dd-trace/src/sampler.js +41 -4
  344. package/packages/dd-trace/src/sampling_rule.js +12 -3
  345. package/packages/dd-trace/src/scope.js +1 -1
  346. package/packages/dd-trace/src/serverless.js +11 -4
  347. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  348. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  349. package/packages/dd-trace/src/span_processor.js +5 -4
  350. package/packages/dd-trace/src/span_sampler.js +4 -1
  351. package/packages/dd-trace/src/standalone/tracesource.js +2 -3
  352. package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
  353. package/packages/dd-trace/src/startup-log.js +6 -18
  354. package/packages/dd-trace/src/supported-configurations.json +439 -0
  355. package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
  356. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  357. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  358. package/packages/dd-trace/src/telemetry/send-data.js +8 -7
  359. package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
  360. package/packages/dd-trace/src/tracer.js +3 -7
  361. package/packages/dd-trace/src/util.js +1 -6
  362. package/version.js +1 -0
  363. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  364. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  365. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  366. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
  367. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
  368. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
@@ -1,4 +1,4 @@
1
- const { addHook, channel, AsyncResource } = require('./helpers/instrument')
1
+ const { addHook, channel } = require('./helpers/instrument')
2
2
  const shimmer = require('../../datadog-shimmer')
3
3
  const log = require('../../dd-trace/src/log')
4
4
 
@@ -12,6 +12,7 @@ const isNewTestCh = channel('ci:vitest:test:is-new')
12
12
  const isAttemptToFixCh = channel('ci:vitest:test:is-attempt-to-fix')
13
13
  const isDisabledCh = channel('ci:vitest:test:is-disabled')
14
14
  const isQuarantinedCh = channel('ci:vitest:test:is-quarantined')
15
+ const isModifiedCh = channel('ci:vitest:test:is-modified')
15
16
 
16
17
  // test suite hooks
17
18
  const testSuiteStartCh = channel('ci:vitest:test-suite:start')
@@ -25,6 +26,7 @@ const libraryConfigurationCh = channel('ci:vitest:library-configuration')
25
26
  const knownTestsCh = channel('ci:vitest:known-tests')
26
27
  const isEarlyFlakeDetectionFaultyCh = channel('ci:vitest:is-early-flake-detection-faulty')
27
28
  const testManagementTestsCh = channel('ci:vitest:test-management-tests')
29
+ const impactedTestsCh = channel('ci:vitest:modified-tests')
28
30
 
29
31
  const taskToCtx = new WeakMap()
30
32
  const taskToStatuses = new WeakMap()
@@ -32,10 +34,10 @@ const newTasks = new WeakSet()
32
34
  const disabledTasks = new WeakSet()
33
35
  const quarantinedTasks = new WeakSet()
34
36
  const attemptToFixTasks = new WeakSet()
37
+ const modifiedTasks = new WeakSet()
35
38
  let isRetryReasonEfd = false
36
39
  let isRetryReasonAttemptToFix = false
37
40
  const switchedStatuses = new WeakSet()
38
- const sessionAsyncResource = new AsyncResource('bound-anonymous-fn')
39
41
 
40
42
  const BREAKPOINT_HIT_GRACE_PERIOD_MS = 400
41
43
 
@@ -58,7 +60,9 @@ function getProvidedContext () {
58
60
  _ddIsTestManagementTestsEnabled: isTestManagementTestsEnabled,
59
61
  _ddTestManagementAttemptToFixRetries: testManagementAttemptToFixRetries,
60
62
  _ddTestManagementTests: testManagementTests,
61
- _ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled
63
+ _ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled,
64
+ _ddIsImpactedTestsEnabled: isImpactedTestsEnabled,
65
+ _ddModifiedTests: modifiedTests
62
66
  } = globalThis.__vitest_worker__.providedContext
63
67
 
64
68
  return {
@@ -70,9 +74,11 @@ function getProvidedContext () {
70
74
  isTestManagementTestsEnabled,
71
75
  testManagementAttemptToFixRetries,
72
76
  testManagementTests,
73
- isFlakyTestRetriesEnabled
77
+ isFlakyTestRetriesEnabled,
78
+ isImpactedTestsEnabled,
79
+ modifiedTests
74
80
  }
75
- } catch (e) {
81
+ } catch {
76
82
  log.error('Vitest workers could not parse provided context, so some features will not work.')
77
83
  return {
78
84
  isDiEnabled: false,
@@ -83,7 +89,9 @@ function getProvidedContext () {
83
89
  isTestManagementTestsEnabled: false,
84
90
  testManagementAttemptToFixRetries: 0,
85
91
  testManagementTests: {},
86
- isFlakyTestRetriesEnabled: false
92
+ isFlakyTestRetriesEnabled: false,
93
+ isImpactedTestsEnabled: false,
94
+ modifiedTests: {}
87
95
  }
88
96
  }
89
97
  }
@@ -107,9 +115,7 @@ function isBaseSequencer (vitestPackage) {
107
115
 
108
116
  function getChannelPromise (channelToPublishTo) {
109
117
  return new Promise(resolve => {
110
- sessionAsyncResource.runInAsyncScope(() => {
111
- channelToPublishTo.publish({ onDone: resolve })
112
- })
118
+ channelToPublishTo.publish({ onDone: resolve })
113
119
  })
114
120
  }
115
121
 
@@ -123,7 +129,6 @@ function getSessionStatus (state) {
123
129
  return 'pass'
124
130
  }
125
131
 
126
- // eslint-disable-next-line
127
132
  // From https://github.com/vitest-dev/vitest/blob/51c04e2f44d91322b334f8ccbcdb368facc3f8ec/packages/runner/src/run.ts#L243-L250
128
133
  function getVitestTestStatus (test, retryCount) {
129
134
  if (test.result.state !== 'fail') {
@@ -183,10 +188,9 @@ function getSortWrapper (sort) {
183
188
  let isEarlyFlakeDetectionFaulty = false
184
189
  let isKnownTestsEnabled = false
185
190
  let isTestManagementTestsEnabled = false
191
+ let isImpactedTestsEnabled = false
186
192
  let testManagementAttemptToFixRetries = 0
187
193
  let isDiEnabled = false
188
- let knownTests = {}
189
- let testManagementTests = {}
190
194
 
191
195
  try {
192
196
  const { err, libraryConfig } = await getChannelPromise(libraryConfigurationCh)
@@ -199,12 +203,14 @@ function getSortWrapper (sort) {
199
203
  isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
200
204
  isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
201
205
  testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
206
+ isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
202
207
  }
203
- } catch (e) {
208
+ } catch {
204
209
  isFlakyTestRetriesEnabled = false
205
210
  isEarlyFlakeDetectionEnabled = false
206
211
  isDiEnabled = false
207
212
  isKnownTestsEnabled = false
213
+ isImpactedTestsEnabled = false
208
214
  }
209
215
 
210
216
  if (isFlakyTestRetriesEnabled && !this.ctx.config.retry && flakyTestRetriesCount > 0) {
@@ -212,15 +218,17 @@ function getSortWrapper (sort) {
212
218
  try {
213
219
  const workspaceProject = this.ctx.getCoreWorkspaceProject()
214
220
  workspaceProject._provided._ddIsFlakyTestRetriesEnabled = isFlakyTestRetriesEnabled
215
- } catch (e) {
221
+ } catch {
216
222
  log.warn('Could not send library configuration to workers.')
217
223
  }
218
224
  }
219
225
 
220
226
  if (isKnownTestsEnabled) {
221
227
  const knownTestsResponse = await getChannelPromise(knownTestsCh)
222
- if (!knownTestsResponse.err) {
223
- knownTests = knownTestsResponse.knownTests
228
+ if (knownTestsResponse.err) {
229
+ isEarlyFlakeDetectionEnabled = false
230
+ } else {
231
+ const knownTests = knownTestsResponse.knownTests
224
232
  const getFilePaths = this.ctx.getTestFilepaths || this.ctx._globTestFilepaths
225
233
 
226
234
  const testFilepaths = await getFilePaths.call(this.ctx)
@@ -234,7 +242,6 @@ function getSortWrapper (sort) {
234
242
  })
235
243
  if (isEarlyFlakeDetectionFaulty) {
236
244
  isEarlyFlakeDetectionEnabled = false
237
- isKnownTestsEnabled = false
238
245
  log.warn('New test detection is disabled because the number of new tests is too high.')
239
246
  } else {
240
247
  // TODO: use this to pass session and module IDs to the worker, instead of polluting process.env
@@ -245,13 +252,10 @@ function getSortWrapper (sort) {
245
252
  workspaceProject._provided._ddKnownTests = knownTests.vitest || {}
246
253
  workspaceProject._provided._ddIsEarlyFlakeDetectionEnabled = isEarlyFlakeDetectionEnabled
247
254
  workspaceProject._provided._ddEarlyFlakeDetectionNumRetries = earlyFlakeDetectionNumRetries
248
- } catch (e) {
255
+ } catch {
249
256
  log.warn('Could not send known tests to workers so Early Flake Detection will not work.')
250
257
  }
251
258
  }
252
- } else {
253
- isEarlyFlakeDetectionEnabled = false
254
- isKnownTestsEnabled = false
255
259
  }
256
260
  }
257
261
 
@@ -259,26 +263,41 @@ function getSortWrapper (sort) {
259
263
  try {
260
264
  const workspaceProject = this.ctx.getCoreWorkspaceProject()
261
265
  workspaceProject._provided._ddIsDiEnabled = isDiEnabled
262
- } catch (e) {
266
+ } catch {
263
267
  log.warn('Could not send Dynamic Instrumentation configuration to workers.')
264
268
  }
265
269
  }
266
270
 
267
271
  if (isTestManagementTestsEnabled) {
268
272
  const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
269
- if (!err) {
270
- testManagementTests = receivedTestManagementTests
273
+ if (err) {
274
+ isTestManagementTestsEnabled = false
275
+ log.error('Could not get test management tests.')
276
+ } else {
277
+ const testManagementTests = receivedTestManagementTests
271
278
  try {
272
279
  const workspaceProject = this.ctx.getCoreWorkspaceProject()
273
280
  workspaceProject._provided._ddIsTestManagementTestsEnabled = isTestManagementTestsEnabled
274
281
  workspaceProject._provided._ddTestManagementAttemptToFixRetries = testManagementAttemptToFixRetries
275
282
  workspaceProject._provided._ddTestManagementTests = testManagementTests
276
- } catch (e) {
283
+ } catch {
277
284
  log.warn('Could not send test management tests to workers so Test Management will not work.')
278
285
  }
286
+ }
287
+ }
288
+
289
+ if (isImpactedTestsEnabled) {
290
+ const { err, modifiedTests } = await getChannelPromise(impactedTestsCh)
291
+ if (err) {
292
+ log.error('Could not get modified tests.')
279
293
  } else {
280
- isTestManagementTestsEnabled = false
281
- log.error('Could not get test management tests.')
294
+ try {
295
+ const workspaceProject = this.ctx.getCoreWorkspaceProject()
296
+ workspaceProject._provided._ddIsImpactedTestsEnabled = isImpactedTestsEnabled
297
+ workspaceProject._provided._ddModifiedTests = modifiedTests
298
+ } catch {
299
+ log.warn('Could not send modified tests to workers so Impacted Tests will not work.')
300
+ }
282
301
  }
283
302
  }
284
303
 
@@ -290,7 +309,7 @@ function getSortWrapper (sort) {
290
309
 
291
310
  try {
292
311
  testCodeCoverageLinesTotal = totalCodeCoverage.getCoverageSummary().lines.pct
293
- } catch (e) {
312
+ } catch {
294
313
  // ignore errors
295
314
  }
296
315
  return totalCodeCoverage
@@ -309,16 +328,14 @@ function getSortWrapper (sort) {
309
328
  error = new Error(`Test suites failed: ${failedSuites.length}.`)
310
329
  }
311
330
 
312
- sessionAsyncResource.runInAsyncScope(() => {
313
- testSessionFinishCh.publish({
314
- status: getSessionStatus(this.state),
315
- testCodeCoverageLinesTotal,
316
- error,
317
- isEarlyFlakeDetectionEnabled,
318
- isEarlyFlakeDetectionFaulty,
319
- isTestManagementTestsEnabled,
320
- onFinish
321
- })
331
+ testSessionFinishCh.publish({
332
+ status: getSessionStatus(this.state),
333
+ testCodeCoverageLinesTotal,
334
+ error,
335
+ isEarlyFlakeDetectionEnabled,
336
+ isEarlyFlakeDetectionFaulty,
337
+ isTestManagementTestsEnabled,
338
+ onFinish
322
339
  })
323
340
 
324
341
  await flushPromise
@@ -335,10 +352,8 @@ function getCreateCliWrapper (vitestPackage, frameworkVersion) {
335
352
  if (!testSessionStartCh.hasSubscribers) {
336
353
  return oldCreateCli.apply(this, arguments)
337
354
  }
338
- sessionAsyncResource.runInAsyncScope(() => {
339
- const processArgv = process.argv.slice(2).join(' ')
340
- testSessionStartCh.publish({ command: `vitest ${processArgv}`, frameworkVersion })
341
- })
355
+ const processArgv = process.argv.slice(2).join(' ')
356
+ testSessionStartCh.publish({ command: `vitest ${processArgv}`, frameworkVersion })
342
357
  return oldCreateCli.apply(this, arguments)
343
358
  })
344
359
 
@@ -364,7 +379,9 @@ addHook({
364
379
  numRepeats,
365
380
  isTestManagementTestsEnabled,
366
381
  testManagementAttemptToFixRetries,
367
- testManagementTests
382
+ testManagementTests,
383
+ isImpactedTestsEnabled,
384
+ modifiedTests
368
385
  } = getProvidedContext()
369
386
 
370
387
  if (isTestManagementTestsEnabled) {
@@ -397,6 +414,23 @@ addHook({
397
414
  })
398
415
  }
399
416
 
417
+ if (isImpactedTestsEnabled) {
418
+ isModifiedCh.publish({
419
+ modifiedTests,
420
+ testSuiteAbsolutePath: task.file.filepath,
421
+ onDone: (isImpacted) => {
422
+ if (isImpacted) {
423
+ if (isEarlyFlakeDetectionEnabled) {
424
+ isRetryReasonEfd = task.repeats !== numRepeats
425
+ task.repeats = numRepeats
426
+ }
427
+ modifiedTasks.add(task)
428
+ taskToStatuses.set(task, [])
429
+ }
430
+ }
431
+ })
432
+ }
433
+
400
434
  if (isKnownTestsEnabled) {
401
435
  isNewTestCh.publish({
402
436
  knownTests,
@@ -404,7 +438,7 @@ addHook({
404
438
  testName,
405
439
  onDone: (isNew) => {
406
440
  if (isNew && !attemptToFixTasks.has(task)) {
407
- if (isEarlyFlakeDetectionEnabled) {
441
+ if (isEarlyFlakeDetectionEnabled && !modifiedTasks.has(task)) {
408
442
  isRetryReasonEfd = task.repeats !== numRepeats
409
443
  task.repeats = numRepeats
410
444
  }
@@ -575,11 +609,12 @@ addHook({
575
609
  isAttemptToFix: attemptToFixTasks.has(task),
576
610
  isDisabled: disabledTasks.has(task),
577
611
  isQuarantined,
578
- isRetryReasonAtr
612
+ isRetryReasonAtr,
613
+ isModified: modifiedTasks.has(task)
579
614
  }
580
615
  taskToCtx.set(task, ctx)
581
616
 
582
- testStartCh.runStores(ctx, () => { })
617
+ testStartCh.runStores(ctx, () => {})
583
618
  return onBeforeTryTask.apply(this, arguments)
584
619
  })
585
620
 
@@ -609,7 +644,7 @@ addHook({
609
644
  if (statuses.length === testManagementAttemptToFixRetries) {
610
645
  if (statuses.every(status => status === 'pass')) {
611
646
  attemptToFixPassed = true
612
- } else if (statuses.some(status => status === 'fail')) {
647
+ } else if (statuses.includes('fail')) {
613
648
  attemptToFixFailed = true
614
649
  }
615
650
  }
@@ -621,7 +656,7 @@ addHook({
621
656
  ctx.task = task
622
657
  ctx.attemptToFixPassed = attemptToFixPassed
623
658
  ctx.attemptToFixFailed = attemptToFixFailed
624
- testFinishTimeCh.runStores(ctx, () => { })
659
+ testFinishTimeCh.runStores(ctx, () => {})
625
660
  }
626
661
 
627
662
  return result
@@ -726,7 +761,7 @@ addHook({
726
761
  const testSuiteAbsolutePath = testPaths[0]?.filepath || testPaths[0]
727
762
 
728
763
  const testSuiteCtx = { testSuiteAbsolutePath, frameworkVersion }
729
- testSuiteStartCh.runStores(testSuiteCtx, () => { })
764
+ testSuiteStartCh.runStores(testSuiteCtx, () => {})
730
765
  const startTestsResponse = await startTests.apply(this, arguments)
731
766
 
732
767
  let onFinish = null
@@ -768,7 +803,7 @@ addHook({
768
803
  let attemptToFixFailed = false
769
804
  if (attemptToFixTasks.has(task)) {
770
805
  const statuses = taskToStatuses.get(task)
771
- if (statuses.some(status => status === 'fail')) {
806
+ if (statuses.includes('fail')) {
772
807
  attemptToFixFailed = true
773
808
  }
774
809
  if (statuses.every(status => status === 'fail')) {
@@ -780,7 +815,7 @@ addHook({
780
815
  const isRetry = task.result?.retryCount > 0
781
816
  // `duration` is the duration of all the retries, so it can't be used if there are retries
782
817
  testErrorCh.publish({
783
- duration: !isRetry ? duration : undefined,
818
+ duration: isRetry ? undefined : duration,
784
819
  error: testError,
785
820
  hasFailedAllRetries,
786
821
  attemptToFixFailed,
@@ -815,7 +850,7 @@ addHook({
815
850
 
816
851
  if (testSuiteError) {
817
852
  testSuiteCtx.error = testSuiteError
818
- testSuiteErrorCh.runStores(testSuiteCtx, () => { })
853
+ testSuiteErrorCh.runStores(testSuiteCtx, () => {})
819
854
  }
820
855
 
821
856
  testSuiteFinishCh.publish({ status: testSuiteResult.state, onFinish, ...testSuiteCtx.currentStore })
@@ -7,12 +7,14 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
7
7
  static get id () { return 'amqp10' }
8
8
  static get system () { return 'amqp' }
9
9
 
10
- start ({ link }) {
10
+ bindStart (ctx) {
11
+ const { link } = ctx
12
+
11
13
  const source = getShortName(link)
12
14
  const address = getAddress(link)
13
15
 
14
16
  this.startSpan({
15
- resource: ['receive', source].filter(v => v).join(' '),
17
+ resource: ['receive', source].filter(Boolean).join(' '),
16
18
  type: 'worker',
17
19
  meta: {
18
20
  'amqp.link.source.address': source,
@@ -23,7 +25,9 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
23
25
  'amqp.connection.port': address.port,
24
26
  'amqp.connection.user': address.user
25
27
  }
26
- })
28
+ }, ctx)
29
+
30
+ return ctx.currentStore
27
31
  }
28
32
  }
29
33
 
@@ -9,12 +9,14 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
9
9
  static get operation () { return 'send' }
10
10
  static get system () { return 'amqp' }
11
11
 
12
- start ({ link }) {
12
+ bindStart (ctx) {
13
+ const { link } = ctx
14
+
13
15
  const address = getAddress(link)
14
16
  const target = getShortName(link)
15
17
 
16
18
  this.startSpan({
17
- resource: ['send', target].filter(v => v).join(' '),
19
+ resource: ['send', target].filter(Boolean).join(' '),
18
20
  meta: {
19
21
  'amqp.link.target.address': target,
20
22
  'amqp.link.role': 'sender',
@@ -26,7 +28,9 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
26
28
  'amqp.connection.port': address.port,
27
29
  'amqp.connection.user': address.user
28
30
  }
29
- })
31
+ }, ctx)
32
+
33
+ return ctx.currentStore
30
34
  }
31
35
  }
32
36
 
@@ -10,7 +10,9 @@ class AmqplibClientPlugin extends ClientPlugin {
10
10
  static get type () { return 'messaging' }
11
11
  static get operation () { return 'command' }
12
12
 
13
- start ({ channel = {}, method, fields }) {
13
+ bindStart (ctx) {
14
+ const { channel = {}, method, fields } = ctx
15
+
14
16
  if (method === 'basic.deliver' || method === 'basic.get') return
15
17
  if (method === 'basic.publish') return
16
18
 
@@ -29,11 +31,13 @@ class AmqplibClientPlugin extends ClientPlugin {
29
31
  'amqp.source': fields.source,
30
32
  'amqp.destination': fields.destination
31
33
  }
32
- })
34
+ }, ctx)
33
35
 
34
36
  fields.headers = fields.headers || {}
35
37
 
36
38
  this.tracer.inject(span, TEXT_MAP, fields.headers)
39
+
40
+ return ctx.currentStore
37
41
  }
38
42
  }
39
43
 
@@ -7,9 +7,11 @@ const { getResourceName } = require('./util')
7
7
 
8
8
  class AmqplibConsumerPlugin extends ConsumerPlugin {
9
9
  static get id () { return 'amqplib' }
10
- static get operation () { return 'command' }
10
+ static get operation () { return 'consume' }
11
+
12
+ bindStart (ctx) {
13
+ const { method, fields, message, queue } = ctx
11
14
 
12
- start ({ method, fields, message, queue }) {
13
15
  if (method !== 'basic.deliver' && method !== 'basic.get') return
14
16
 
15
17
  const childOf = extract(this.tracer, message)
@@ -27,7 +29,7 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
27
29
  'amqp.source': fields.source,
28
30
  'amqp.destination': fields.destination
29
31
  }
30
- })
32
+ }, ctx)
31
33
 
32
34
  if (
33
35
  this.config.dsmEnabled && message?.properties?.headers
@@ -37,6 +39,8 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
37
39
  this.tracer
38
40
  .setCheckpoint(['direction:in', `topic:${queueName}`, 'type:rabbitmq'], span, payloadSize)
39
41
  }
42
+
43
+ return ctx.currentStore
40
44
  }
41
45
  }
42
46
 
@@ -8,9 +8,11 @@ const { getResourceName } = require('./util')
8
8
 
9
9
  class AmqplibProducerPlugin extends ProducerPlugin {
10
10
  static get id () { return 'amqplib' }
11
- static get operation () { return 'command' }
11
+ static get operation () { return 'publish' }
12
+
13
+ bindStart (ctx) {
14
+ const { channel = {}, method, fields, message } = ctx
12
15
 
13
- start ({ channel = {}, method, fields, message }) {
14
16
  if (method !== 'basic.publish') return
15
17
 
16
18
  const stream = (channel.connection && channel.connection.stream) || {}
@@ -26,7 +28,7 @@ class AmqplibProducerPlugin extends ProducerPlugin {
26
28
  'amqp.source': fields.source,
27
29
  'amqp.destination': fields.destination
28
30
  }
29
- })
31
+ }, ctx)
30
32
 
31
33
  fields.headers = fields.headers || {}
32
34
 
@@ -49,6 +51,8 @@ class AmqplibProducerPlugin extends ProducerPlugin {
49
51
  , span, payloadSize)
50
52
  DsmPathwayCodec.encode(dataStreamsContext, fields.headers)
51
53
  }
54
+
55
+ return ctx.currentStore
52
56
  }
53
57
  }
54
58
 
@@ -8,7 +8,7 @@ function getResourceName (method, fields = {}) {
8
8
  fields.queue,
9
9
  fields.source,
10
10
  fields.destination
11
- ].filter(val => val).join(' ')
11
+ ].filter(Boolean).join(' ')
12
12
  }
13
13
 
14
14
  module.exports = { getResourceName }
@@ -58,9 +58,8 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
58
58
  const errors = ctx?.result?.errors
59
59
  // apollo gateway catches certain errors and returns them in the result object
60
60
  // we want to capture these errors as spans
61
- if (errors instanceof Array &&
62
- errors[errors.length - 1] && errors[errors.length - 1].stack && errors[errors.length - 1].message) {
63
- ctx.currentStore.span.setTag('error', errors[errors.length - 1])
61
+ if (Array.isArray(errors) && errors.at(-1)?.stack && errors.at(-1).message) {
62
+ ctx.currentStore.span.setTag('error', errors.at(-1))
64
63
  }
65
64
  ctx.currentStore.span.finish()
66
65
  return ctx.parentStore
@@ -91,7 +90,7 @@ function buildOperationContext (schema, operationDocument, operationName) {
91
90
  break
92
91
  }
93
92
  })
94
- } catch (e) {
93
+ } catch {
95
94
  // safety net
96
95
  }
97
96
 
@@ -113,12 +112,12 @@ function getSignature (document, operationName, operationType, calculate) {
113
112
  }
114
113
 
115
114
  return tools.defaultEngineReportingSignature(document, operationName)
116
- } catch (e) {
115
+ } catch {
117
116
  // safety net
118
117
  }
119
118
  }
120
119
 
121
- return [operationType, operationName].filter(val => val).join(' ')
120
+ return [operationType, operationName].filter(Boolean).join(' ')
122
121
  }
123
122
 
124
123
  module.exports = ApolloGatewayRequestPlugin
@@ -14,9 +14,8 @@ class ApolloGatewayValidatePlugin extends ApolloBasePlugin {
14
14
 
15
15
  if (!span) return
16
16
 
17
- if (result instanceof Array &&
18
- result[result.length - 1] && result[result.length - 1].stack && result[result.length - 1].message) {
19
- span.setTag('error', result[result.length - 1])
17
+ if (Array.isArray(result) && result.at(-1)?.stack && result.at(-1).message) {
18
+ span.setTag('error', result.at(-1))
20
19
  }
21
20
  span.finish()
22
21
  }
@@ -104,21 +104,21 @@ class SchemaExtractor {
104
104
  }
105
105
  }
106
106
  return true
107
- } else {
108
- if (!builder.shouldExtractSchema(schemaName, depth)) {
109
- return false
110
- }
111
- if (schema.fields?.[Symbol.iterator]) {
112
- for (const field of schema.fields) {
113
- if (!this.extractProperty(field, schemaName, field.name, builder, depth)) {
114
- log.warn('DSM: Unable to extract field with name: %s from Avro schema with name: %s', field.name,
115
- schemaName)
116
- }
107
+ }
108
+ if (!builder.shouldExtractSchema(schemaName, depth)) {
109
+ return false
110
+ }
111
+ if (schema.fields?.[Symbol.iterator]) {
112
+ for (const field of schema.fields) {
113
+ if (!this.extractProperty(field, schemaName, field.name, builder, depth)) {
114
+ log.warn('DSM: Unable to extract field with name: %s from Avro schema with name: %s', field.name,
115
+ schemaName)
117
116
  }
118
- } else {
119
- log.warn('DSM: schema.fields is not iterable from Avro schema with name: %s', schemaName)
120
117
  }
118
+ } else {
119
+ log.warn('DSM: schema.fields is not iterable from Avro schema with name: %s', schemaName)
121
120
  }
121
+
122
122
  return true
123
123
  }
124
124
 
@@ -6,6 +6,7 @@ const { storage } = require('../../datadog-core')
6
6
  const { isTrue } = require('../../dd-trace/src/util')
7
7
  const coalesce = require('koalas')
8
8
  const { tagsFromRequest, tagsFromResponse } = require('../../dd-trace/src/payload-tagging')
9
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
9
10
 
10
11
  class BaseAwsSdkPlugin extends ClientPlugin {
11
12
  static get id () { return 'aws' }
@@ -132,7 +133,7 @@ class BaseAwsSdkPlugin extends ClientPlugin {
132
133
 
133
134
  isEnabled (request) {
134
135
  const serviceId = this.serviceIdentifier.toUpperCase()
135
- const envVarValue = process.env[`DD_TRACE_AWS_SDK_${serviceId}_ENABLED`]
136
+ const envVarValue = getEnvironmentVariable(`DD_TRACE_AWS_SDK_${serviceId}_ENABLED`)
136
137
  return envVarValue ? isTrue(envVarValue) : true
137
138
  }
138
139
 
@@ -142,11 +143,12 @@ class BaseAwsSdkPlugin extends ClientPlugin {
142
143
  const operation = response.request.operation
143
144
  const extraTags = this.generateTags(params, operation, response) || {}
144
145
 
145
- const tags = Object.assign({
146
+ const tags = {
146
147
  'aws.response.request_id': response.requestId,
147
148
  'resource.name': operation,
148
- 'span.kind': 'client'
149
- }, extraTags)
149
+ 'span.kind': 'client',
150
+ ...extraTags
151
+ }
150
152
 
151
153
  span.addTags(tags)
152
154
 
@@ -211,24 +213,27 @@ function normalizeConfig (config, serviceIdentifier) {
211
213
  const batchPropagationEnabled = isTrue(
212
214
  coalesce(
213
215
  specificConfig.batchPropagationEnabled,
214
- process.env[`DD_TRACE_AWS_SDK_${serviceId}_BATCH_PROPAGATION_ENABLED`],
216
+ getEnvironmentVariable(`DD_TRACE_AWS_SDK_${serviceId}_BATCH_PROPAGATION_ENABLED`),
215
217
  config.batchPropagationEnabled,
216
- process.env.DD_TRACE_AWS_SDK_BATCH_PROPAGATION_ENABLED,
218
+ getEnvironmentVariable('DD_TRACE_AWS_SDK_BATCH_PROPAGATION_ENABLED'),
217
219
  false
218
220
  )
219
221
  )
220
222
 
221
223
  // Merge the specific config back into the main config
222
- return Object.assign({}, config, specificConfig, {
224
+ return {
225
+ ...config,
226
+ ...specificConfig,
223
227
  splitByAwsService: config.splitByAwsService !== false,
224
228
  batchPropagationEnabled,
225
229
  hooks
226
- })
230
+ }
227
231
  }
228
232
 
233
+ const noop = () => {}
234
+
229
235
  function getHooks (config) {
230
- const noop = () => {}
231
- const request = (config.hooks && config.hooks.request) || noop
236
+ const request = config.hooks?.request || noop
232
237
 
233
238
  return { request }
234
239
  }