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
@@ -107,6 +107,12 @@ class DatadogTracer {
107
107
  }
108
108
  }
109
109
 
110
+ /**
111
+ * Get the span context from a span or a span context.
112
+ *
113
+ * @param {Span|SpanContext} spanContext
114
+ * @returns {SpanContext}
115
+ */
110
116
  function getContext (spanContext) {
111
117
  if (spanContext instanceof Span) {
112
118
  spanContext = spanContext.context()
@@ -122,17 +128,14 @@ function getContext (spanContext) {
122
128
  function getParent (references = []) {
123
129
  let parent = null
124
130
 
125
- for (let i = 0; i < references.length; i++) {
126
- const ref = references[i]
131
+ for (const ref of references) {
127
132
  const type = ref.type()
128
133
 
129
134
  if (type === REFERENCE_CHILD_OF) {
130
135
  parent = ref.referencedContext()
131
136
  break
132
- } else if (type === REFERENCE_FOLLOWS_FROM) {
133
- if (!parent) {
134
- parent = ref.referencedContext()
135
- }
137
+ } else if (type === REFERENCE_FOLLOWS_FROM && !parent) {
138
+ parent = ref.referencedContext()
136
139
  }
137
140
  }
138
141
 
@@ -2,29 +2,25 @@ const aws = require('./aws.json')
2
2
  const sdks = { aws }
3
3
 
4
4
  function getSDKRules (sdk, requestInput, responseInput) {
5
- return Object.fromEntries(
6
- Object.entries(sdk).map(([service, serviceRules]) => {
7
- return [
8
- service,
9
- {
10
- request: serviceRules.request.concat(requestInput || []),
11
- response: serviceRules.response.concat(responseInput || []),
12
- expand: serviceRules.expand || []
13
- }
14
- ]
15
- })
16
- )
5
+ const sdkServiceRules = {}
6
+ for (const [service, serviceRules] of Object.entries(sdk)) {
7
+ sdkServiceRules[service] = {
8
+ // Make a copy. Otherwise calling the function multiple times would append
9
+ // the rules to the same object.
10
+ request: [...serviceRules.request, ...requestInput],
11
+ response: [...serviceRules.response, ...responseInput],
12
+ expand: serviceRules.expand
13
+ }
14
+ }
15
+ return sdkServiceRules
17
16
  }
18
17
 
19
- function appendRules (requestInput, responseInput) {
20
- return Object.fromEntries(
21
- Object.entries(sdks).map(([name, sdk]) => {
22
- return [
23
- name,
24
- getSDKRules(sdk, requestInput, responseInput)
25
- ]
26
- })
27
- )
18
+ function appendRules (requestInput = [], responseInput = []) {
19
+ const sdkRules = {}
20
+ for (const [name, sdk] of Object.entries(sdks)) {
21
+ sdkRules[name] = getSDKRules(sdk, requestInput, responseInput)
22
+ }
23
+ return sdkRules
28
24
  }
29
25
 
30
26
  module.exports = { appendRules }
@@ -22,7 +22,7 @@ function maybeJSONParseValue (value) {
22
22
 
23
23
  try {
24
24
  return JSON.parse(value)
25
- } catch (e) {
25
+ } catch {
26
26
  return value
27
27
  }
28
28
  }
@@ -1,13 +1,13 @@
1
1
  const { PAYLOAD_TAGGING_MAX_TAGS } = require('../constants')
2
2
 
3
- const redactedKeys = [
3
+ const redactedKeys = new Set([
4
4
  'authorization', 'x-authorization', 'password', 'token'
5
- ]
5
+ ])
6
6
  const truncated = 'truncated'
7
7
  const redacted = 'redacted'
8
8
 
9
9
  function escapeKey (key) {
10
- return key.replaceAll('.', '\\.')
10
+ return key.replaceAll('.', String.raw`\.`)
11
11
  }
12
12
 
13
13
  /**
@@ -56,18 +56,18 @@ function tagsFromObject (object, opts) {
56
56
 
57
57
  if (['number', 'boolean'].includes(typeof object) || Buffer.isBuffer(object)) {
58
58
  tagCount += 1
59
- result[prefix] = object.toString().substring(0, 5000)
59
+ result[prefix] = object.toString().slice(0, 5000)
60
60
  return
61
61
  }
62
62
 
63
63
  if (typeof object === 'string') {
64
64
  tagCount += 1
65
- result[prefix] = object.substring(0, 5000)
65
+ result[prefix] = object.slice(0, 5000)
66
66
  }
67
67
 
68
68
  if (typeof object === 'object') {
69
69
  for (const [key, value] of Object.entries(object)) {
70
- if (redactedKeys.includes(key.toLowerCase())) {
70
+ if (redactedKeys.has(key.toLowerCase())) {
71
71
  tagCount += 1
72
72
  result[`${prefix}.${escapeKey(key)}`] = redacted
73
73
  } else {
@@ -22,7 +22,7 @@ function findPkg () {
22
22
 
23
23
  try {
24
24
  return JSON.parse(fs.readFileSync(filePath, 'utf8'))
25
- } catch (e) {
25
+ } catch {
26
26
  return {}
27
27
  }
28
28
  }
@@ -4,17 +4,18 @@ const { channel } = require('dc-polyfill')
4
4
  const { isFalse } = require('./util')
5
5
  const plugins = require('./plugins')
6
6
  const log = require('./log')
7
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
7
8
 
8
9
  const loadChannel = channel('dd-trace:instrumentation:load')
9
10
 
10
11
  // instrument everything that needs Plugin System V2 instrumentation
11
12
  require('../../datadog-instrumentations')
12
- if (process.env.AWS_LAMBDA_FUNCTION_NAME !== undefined) {
13
+ if (getEnvironmentVariable('AWS_LAMBDA_FUNCTION_NAME') !== undefined) {
13
14
  // instrument lambda environment
14
15
  require('./lambda')
15
16
  }
16
17
 
17
- const { DD_TRACE_DISABLED_PLUGINS } = process.env
18
+ const DD_TRACE_DISABLED_PLUGINS = getEnvironmentVariable('DD_TRACE_DISABLED_PLUGINS')
18
19
 
19
20
  const disabledPlugins = new Set(
20
21
  DD_TRACE_DISABLED_PLUGINS && DD_TRACE_DISABLED_PLUGINS.split(',').map(plugin => plugin.trim())
@@ -32,7 +33,7 @@ function maybeEnable (Plugin) {
32
33
  if (!Plugin || typeof Plugin !== 'function') return
33
34
  if (!pluginClasses[Plugin.id]) {
34
35
  const envName = `DD_TRACE_${Plugin.id.toUpperCase()}_ENABLED`
35
- const enabled = process.env[envName.replace(/[^a-z0-9_]/ig, '_')]
36
+ const enabled = getEnvironmentVariable(envName.replaceAll(/[^a-z0-9_]/ig, '_'))
36
37
 
37
38
  // TODO: remove the need to load the plugin class in order to disable the plugin
38
39
  if (isFalse(enabled) || disabledPlugins.has(Plugin.id)) {
@@ -1,3 +1,4 @@
1
+ const { storage } = require('../../../datadog-core')
1
2
  const {
2
3
  getTestEnvironmentMetadata,
3
4
  getTestSessionName,
@@ -28,7 +29,10 @@ const {
28
29
  DI_DEBUG_ERROR_SNAPSHOT_ID_SUFFIX,
29
30
  DI_DEBUG_ERROR_FILE_SUFFIX,
30
31
  DI_DEBUG_ERROR_LINE_SUFFIX,
31
- getLibraryCapabilitiesTags
32
+ getLibraryCapabilitiesTags,
33
+ getPullRequestDiff,
34
+ getModifiedTestsFromDiff,
35
+ getPullRequestBaseBranch
32
36
  } = require('./util/test')
33
37
  const Plugin = require('./plugin')
34
38
  const { COMPONENT } = require('../constants')
@@ -45,10 +49,23 @@ const {
45
49
  GIT_COMMIT_SHA,
46
50
  GIT_BRANCH,
47
51
  CI_WORKSPACE_PATH,
48
- GIT_COMMIT_MESSAGE
52
+ GIT_COMMIT_MESSAGE,
53
+ GIT_TAG,
54
+ GIT_PULL_REQUEST_BASE_BRANCH_SHA,
55
+ GIT_COMMIT_HEAD_SHA,
56
+ GIT_PULL_REQUEST_BASE_BRANCH
49
57
  } = require('./util/tags')
50
58
  const { OS_VERSION, OS_PLATFORM, OS_ARCHITECTURE, RUNTIME_NAME, RUNTIME_VERSION } = require('./util/env')
51
59
  const getDiClient = require('../ci-visibility/dynamic-instrumentation')
60
+ const { DD_MAJOR } = require('../../../../version')
61
+
62
+ const FRAMEWORK_TO_TRIMMED_COMMAND = {
63
+ vitest: 'vitest run',
64
+ mocha: 'mocha',
65
+ cucumber: 'cucumber-js',
66
+ playwright: 'playwright test',
67
+ jest: 'jest'
68
+ }
52
69
 
53
70
  module.exports = class CiPlugin extends Plugin {
54
71
  constructor (...args) {
@@ -57,7 +74,10 @@ module.exports = class CiPlugin extends Plugin {
57
74
  this.fileLineToProbeId = new Map()
58
75
  this.rootDir = process.cwd() // fallback in case :session:start events are not emitted
59
76
 
60
- this.addSub(`ci:${this.constructor.id}:library-configuration`, ({ onDone, isParallel }) => {
77
+ this.addSub(`ci:${this.constructor.id}:library-configuration`, (ctx) => {
78
+ const { onDone, isParallel } = ctx
79
+ ctx.currentStore = storage('legacy').getStore()
80
+
61
81
  if (!this.tracer._exporter || !this.tracer._exporter.getLibraryConfiguration) {
62
82
  return onDone({ err: new Error('Test optimization was not initialized correctly') })
63
83
  }
@@ -79,6 +99,10 @@ module.exports = class CiPlugin extends Plugin {
79
99
  })
80
100
  })
81
101
 
102
+ this.addBind(`ci:${this.constructor.id}:test-suite:skippable`, (ctx) => {
103
+ return ctx.currentStore
104
+ })
105
+
82
106
  this.addSub(`ci:${this.constructor.id}:test-suite:skippable`, ({ onDone }) => {
83
107
  if (!this.tracer._exporter?.getSkippableSuites) {
84
108
  return onDone({ err: new Error('Test optimization was not initialized correctly') })
@@ -103,7 +127,11 @@ module.exports = class CiPlugin extends Plugin {
103
127
  // only for playwright
104
128
  this.rootDir = rootDir
105
129
 
106
- const testSessionName = getTestSessionName(this.config, this.command, this.testEnvironmentMetadata)
130
+ const testSessionName = getTestSessionName(
131
+ this.config,
132
+ DD_MAJOR < 6 ? this.command : FRAMEWORK_TO_TRIMMED_COMMAND[this.constructor.id],
133
+ this.testEnvironmentMetadata
134
+ )
107
135
 
108
136
  const metadataTags = {}
109
137
  for (const testLevel of TEST_LEVEL_EVENT_TYPES) {
@@ -138,8 +166,12 @@ module.exports = class CiPlugin extends Plugin {
138
166
  // only for vitest
139
167
  // These are added for the worker threads to use
140
168
  if (this.constructor.id === 'vitest') {
169
+ // TODO: Figure out alternative ways to pass this information to the worker threads
170
+ // eslint-disable-next-line eslint-rules/eslint-process-env
141
171
  process.env.DD_CIVISIBILITY_TEST_SESSION_ID = this.testSessionSpan.context().toTraceId()
172
+ // eslint-disable-next-line eslint-rules/eslint-process-env
142
173
  process.env.DD_CIVISIBILITY_TEST_MODULE_ID = this.testModuleSpan.context().toSpanId()
174
+ // eslint-disable-next-line eslint-rules/eslint-process-env
143
175
  process.env.DD_CIVISIBILITY_TEST_COMMAND = this.command
144
176
  }
145
177
 
@@ -168,6 +200,10 @@ module.exports = class CiPlugin extends Plugin {
168
200
  this.telemetry.count(TELEMETRY_ITR_SKIPPED, { testLevel: 'suite' }, skippedSuites.length)
169
201
  })
170
202
 
203
+ this.addBind(`ci:${this.constructor.id}:known-tests`, (ctx) => {
204
+ return ctx.currentStore
205
+ })
206
+
171
207
  this.addSub(`ci:${this.constructor.id}:known-tests`, ({ onDone }) => {
172
208
  if (!this.tracer._exporter?.getKnownTests) {
173
209
  return onDone({ err: new Error('Test optimization was not initialized correctly') })
@@ -182,6 +218,10 @@ module.exports = class CiPlugin extends Plugin {
182
218
  })
183
219
  })
184
220
 
221
+ this.addBind(`ci:${this.constructor.id}:test-management-tests`, (ctx) => {
222
+ return ctx.currentStore
223
+ })
224
+
185
225
  this.addSub(`ci:${this.constructor.id}:test-management-tests`, ({ onDone }) => {
186
226
  if (!this.tracer._exporter?.getTestManagementTests) {
187
227
  return onDone({ err: new Error('Test optimization was not initialized correctly') })
@@ -194,6 +234,31 @@ module.exports = class CiPlugin extends Plugin {
194
234
  onDone({ err, testManagementTests })
195
235
  })
196
236
  })
237
+
238
+ this.addBind(`ci:${this.constructor.id}:modified-tests`, (ctx) => {
239
+ return ctx.currentStore
240
+ })
241
+
242
+ this.addSub(`ci:${this.constructor.id}:modified-tests`, ({ onDone }) => {
243
+ const {
244
+ [GIT_PULL_REQUEST_BASE_BRANCH]: pullRequestBaseBranch,
245
+ [GIT_PULL_REQUEST_BASE_BRANCH_SHA]: pullRequestBaseBranchSha,
246
+ [GIT_COMMIT_HEAD_SHA]: commitHeadSha
247
+ } = this.testEnvironmentMetadata
248
+
249
+ const baseBranchSha = pullRequestBaseBranchSha || getPullRequestBaseBranch(pullRequestBaseBranch)
250
+
251
+ if (baseBranchSha) {
252
+ const diff = getPullRequestDiff(baseBranchSha, commitHeadSha)
253
+ const modifiedTests = getModifiedTestsFromDiff(diff)
254
+ if (modifiedTests) {
255
+ return onDone({ err: null, modifiedTests })
256
+ }
257
+ }
258
+
259
+ // TODO: Add telemetry for this type of error
260
+ return onDone({ err: new Error('No modified tests could have been retrieved') })
261
+ })
197
262
  }
198
263
 
199
264
  get telemetry () {
@@ -240,7 +305,10 @@ module.exports = class CiPlugin extends Plugin {
240
305
  [GIT_BRANCH]: branch,
241
306
  [CI_PROVIDER_NAME]: ciProviderName,
242
307
  [CI_WORKSPACE_PATH]: repositoryRoot,
243
- [GIT_COMMIT_MESSAGE]: commitMessage
308
+ [GIT_COMMIT_MESSAGE]: commitMessage,
309
+ [GIT_TAG]: tag,
310
+ [GIT_PULL_REQUEST_BASE_BRANCH_SHA]: pullRequestBaseSha,
311
+ [GIT_COMMIT_HEAD_SHA]: commitHeadSha
244
312
  } = this.testEnvironmentMetadata
245
313
 
246
314
  this.repositoryRoot = repositoryRoot || process.cwd()
@@ -259,7 +327,10 @@ module.exports = class CiPlugin extends Plugin {
259
327
  runtimeVersion,
260
328
  branch,
261
329
  testLevel: 'suite',
262
- commitMessage
330
+ commitMessage,
331
+ tag,
332
+ pullRequestBaseSha,
333
+ commitHeadSha
263
334
  }
264
335
  }
265
336
 
@@ -372,11 +443,12 @@ module.exports = class CiPlugin extends Plugin {
372
443
  return Promise.resolve()
373
444
  }
374
445
  log.debug('Removing all Dynamic Instrumentation probes')
375
- return Promise.all(Array.from(this.fileLineToProbeId.keys())
376
- .map((fileLine) => {
377
- const [file, line] = fileLine.split(':')
378
- return this.removeDiProbe({ file, line })
379
- }))
446
+ const promises = []
447
+ for (const fileLine of this.fileLineToProbeId.keys()) {
448
+ const [file, line] = fileLine.split(':')
449
+ promises.push(this.removeDiProbe({ file, line }))
450
+ }
451
+ return Promise.all(promises)
380
452
  }
381
453
 
382
454
  removeDiProbe ({ file, line }) {
@@ -387,6 +459,10 @@ module.exports = class CiPlugin extends Plugin {
387
459
  }
388
460
 
389
461
  addDiProbe (err) {
462
+ if (!err?.stack) {
463
+ log.warn('Can not add breakpoint if the test error does not have a stack')
464
+ return
465
+ }
390
466
  const [file, line, stackIndex] = getFileAndLineNumberFromError(err, this.repositoryRoot)
391
467
 
392
468
  if (!file || !Number.isInteger(line)) {
@@ -7,14 +7,14 @@ class ConsumerPlugin extends InboundPlugin {
7
7
  static get kind () { return 'consumer' }
8
8
  static get type () { return 'messaging' }
9
9
 
10
- startSpan (options) {
10
+ startSpan (options, enterOrCtx) {
11
11
  if (!options.service) {
12
12
  options.service = this.config.service || this.serviceName()
13
13
  }
14
14
  if (!options.kind) {
15
15
  options.kind = this.constructor.kind
16
16
  }
17
- return super.startSpan(this.operationName(), options)
17
+ return super.startSpan(this.operationName(), options, enterOrCtx)
18
18
  }
19
19
  }
20
20
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  const TracingPlugin = require('./tracing')
4
4
 
5
- class InboundPlugin extends TracingPlugin {}
5
+ class InboundPlugin extends TracingPlugin {
6
+ bindFinish (ctx) {
7
+ return ctx.parentStore
8
+ }
9
+ }
6
10
 
7
11
  module.exports = InboundPlugin
@@ -84,7 +84,6 @@ module.exports = {
84
84
  get nyc () { return require('../../../datadog-plugin-nyc/src') },
85
85
  get oracledb () { return require('../../../datadog-plugin-oracledb/src') },
86
86
  get openai () { return require('../../../datadog-plugin-openai/src') },
87
- get paperplane () { return require('../../../datadog-plugin-paperplane/src') },
88
87
  get pg () { return require('../../../datadog-plugin-pg/src') },
89
88
  get pino () { return require('../../../datadog-plugin-pino/src') },
90
89
  get 'pino-pretty' () { return require('../../../datadog-plugin-pino/src') },
@@ -26,6 +26,10 @@ class OutboundPlugin extends TracingPlugin {
26
26
  })
27
27
  }
28
28
 
29
+ bindFinish (ctx) {
30
+ return ctx.parentStore
31
+ }
32
+
29
33
  startSpan (...args) {
30
34
  const span = super.startSpan(...args)
31
35
  if (
@@ -67,7 +71,6 @@ class OutboundPlugin extends TracingPlugin {
67
71
  }
68
72
  }
69
73
  }
70
- return undefined
71
74
  }
72
75
 
73
76
  getPeerServiceRemap (peerData) {
@@ -87,10 +90,6 @@ class OutboundPlugin extends TracingPlugin {
87
90
  return peerData
88
91
  }
89
92
 
90
- bindFinish (ctx) {
91
- return ctx.parentStore
92
- }
93
-
94
93
  finish (ctx) {
95
94
  const span = ctx?.currentStore?.span || this.activeSpan
96
95
  this.tagPeerService(span)
@@ -34,7 +34,7 @@ class StoreBinding {
34
34
  this._transform = data => {
35
35
  const store = storage('legacy').getStore()
36
36
 
37
- return !store || !store.noop
37
+ return !store || !store.noop || (data && Object.hasOwn(data, 'currentStore'))
38
38
  ? transform(data)
39
39
  : store
40
40
  }
@@ -7,7 +7,7 @@ class ProducerPlugin extends OutboundPlugin {
7
7
  static get kind () { return 'producer' }
8
8
  static get type () { return 'messaging' }
9
9
 
10
- startSpan (options) {
10
+ startSpan (options, enterOrCtx) {
11
11
  const spanDefaults = {
12
12
  kind: this.constructor.kind
13
13
  }
@@ -19,7 +19,7 @@ class ProducerPlugin extends OutboundPlugin {
19
19
  if (!options[key]) options[key] = spanDefaults[key]
20
20
  }
21
21
  )
22
- return super.startSpan(this.operationName(), options)
22
+ return super.startSpan(this.operationName(), options, enterOrCtx)
23
23
  }
24
24
  }
25
25
 
@@ -11,12 +11,12 @@ class StoragePlugin extends ClientPlugin {
11
11
  this.system = this.constructor.system || this.component
12
12
  }
13
13
 
14
- startSpan (name, options) {
14
+ startSpan (name, options, ctx) {
15
15
  if (!options.service && this.system) {
16
16
  options.service = `${this.tracer._service}-${this.system}`
17
17
  }
18
18
 
19
- return super.startSpan(name, options)
19
+ return super.startSpan(name, options, ctx)
20
20
  }
21
21
  }
22
22
 
@@ -27,6 +27,7 @@ const {
27
27
  CI_NODE_NAME
28
28
  } = require('./tags')
29
29
  const { filterSensitiveInfoFromRepository } = require('./url')
30
+ const { getEnvironmentVariable } = require('../../config-helper')
30
31
 
31
32
  // Receives a string with the form 'John Doe <john.doe@gmail.com>'
32
33
  // and returns { name: 'John Doe', email: 'john.doe@gmail.com' }
@@ -67,7 +68,7 @@ function normalizeRef (ref) {
67
68
  if (!ref) {
68
69
  return ref
69
70
  }
70
- return ref.replace(/origin\/|refs\/heads\/|tags\//gm, '')
71
+ return ref.replaceAll(/origin\/|refs\/heads\/|tags\//gm, '')
71
72
  }
72
73
 
73
74
  function resolveTilde (filePath) {
@@ -76,16 +77,16 @@ function resolveTilde (filePath) {
76
77
  }
77
78
  // '~/folder/path' or '~'
78
79
  if (filePath[0] === '~' && (filePath[1] === '/' || filePath.length === 1)) {
79
- return filePath.replace('~', process.env.HOME)
80
+ return filePath.replace('~', getEnvironmentVariable('HOME'))
80
81
  }
81
82
  return filePath
82
83
  }
83
84
 
84
85
  function getGitHubEventPayload () {
85
- if (!process.env.GITHUB_EVENT_PATH) {
86
+ if (!getEnvironmentVariable('GITHUB_EVENT_PATH')) {
86
87
  return
87
88
  }
88
- return JSON.parse(readFileSync(process.env.GITHUB_EVENT_PATH, 'utf8'))
89
+ return JSON.parse(readFileSync(getEnvironmentVariable('GITHUB_EVENT_PATH'), 'utf8'))
89
90
  }
90
91
 
91
92
  module.exports = {
@@ -128,7 +129,7 @@ module.exports = {
128
129
  try {
129
130
  nodeLabels = JSON.stringify(NODE_LABELS.split(' '))
130
131
  tags[CI_NODE_LABELS] = nodeLabels
131
- } catch (e) {
132
+ } catch {
132
133
  // ignore errors
133
134
  }
134
135
  }
@@ -139,15 +140,12 @@ module.exports = {
139
140
 
140
141
  tags[refKey] = ref
141
142
 
142
- let finalPipelineName = ''
143
143
  if (JOB_NAME) {
144
144
  // Job names can contain parameters, e.g. jobName/KEY1=VALUE1,KEY2=VALUE2/branchName
145
145
  const jobNameAndParams = JOB_NAME.split('/')
146
- if (jobNameAndParams.length > 1 && jobNameAndParams[1].includes('=')) {
147
- finalPipelineName = jobNameAndParams[0]
148
- } else {
149
- finalPipelineName = JOB_NAME.replace(`/${ref}`, '')
150
- }
146
+ const finalPipelineName = jobNameAndParams.length > 1 && jobNameAndParams[1].includes('=')
147
+ ? jobNameAndParams[0]
148
+ : JOB_NAME.replace(`/${ref}`, '')
151
149
  tags[CI_PIPELINE_NAME] = finalPipelineName
152
150
  }
153
151
  }
@@ -172,7 +170,9 @@ module.exports = {
172
170
  CI_PROJECT_URL: GITLAB_PROJECT_URL,
173
171
  CI_JOB_ID: GITLAB_CI_JOB_ID,
174
172
  CI_RUNNER_ID,
175
- CI_RUNNER_TAGS
173
+ CI_RUNNER_TAGS,
174
+ CI_MERGE_REQUEST_TARGET_BRANCH_NAME,
175
+ CI_MERGE_REQUEST_TARGET_BRANCH_SHA
176
176
  } = env
177
177
 
178
178
  const { name, email } = parseEmailAndName(CI_COMMIT_AUTHOR)
@@ -201,7 +201,9 @@ module.exports = {
201
201
  CI_JOB_ID: GITLAB_CI_JOB_ID
202
202
  }),
203
203
  [CI_NODE_LABELS]: CI_RUNNER_TAGS,
204
- [CI_NODE_NAME]: CI_RUNNER_ID
204
+ [CI_NODE_NAME]: CI_RUNNER_ID,
205
+ [GIT_PULL_REQUEST_BASE_BRANCH]: CI_MERGE_REQUEST_TARGET_BRANCH_NAME,
206
+ [GIT_PULL_REQUEST_BASE_BRANCH_SHA]: CI_MERGE_REQUEST_TARGET_BRANCH_SHA
205
207
  }
206
208
  }
207
209
 
@@ -295,7 +297,7 @@ module.exports = {
295
297
  const eventContent = getGitHubEventPayload()
296
298
  tags[GIT_PULL_REQUEST_BASE_BRANCH_SHA] = eventContent.pull_request.base.sha
297
299
  tags[GIT_COMMIT_HEAD_SHA] = eventContent.pull_request.head.sha
298
- } catch (e) {
300
+ } catch {
299
301
  // ignore malformed event content
300
302
  }
301
303
  }
@@ -330,7 +332,8 @@ module.exports = {
330
332
  [CI_WORKSPACE_PATH]: APPVEYOR_BUILD_FOLDER,
331
333
  [GIT_COMMIT_AUTHOR_NAME]: APPVEYOR_REPO_COMMIT_AUTHOR,
332
334
  [GIT_COMMIT_AUTHOR_EMAIL]: APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL,
333
- [GIT_COMMIT_MESSAGE]: APPVEYOR_REPO_COMMIT_MESSAGE + '\n' + APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED
335
+ [GIT_COMMIT_MESSAGE]: APPVEYOR_REPO_COMMIT_MESSAGE + '\n' + APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED,
336
+ [GIT_PULL_REQUEST_BASE_BRANCH]: APPVEYOR_REPO_BRANCH
334
337
  }
335
338
 
336
339
  if (APPVEYOR_REPO_PROVIDER === 'github') {
@@ -411,7 +414,8 @@ module.exports = {
411
414
  BITBUCKET_GIT_HTTP_ORIGIN,
412
415
  BITBUCKET_TAG,
413
416
  BITBUCKET_PIPELINE_UUID,
414
- BITBUCKET_CLONE_DIR
417
+ BITBUCKET_CLONE_DIR,
418
+ BITBUCKET_PR_DESTINATION_BRANCH
415
419
  } = env
416
420
 
417
421
  const url =
@@ -428,7 +432,8 @@ module.exports = {
428
432
  [GIT_TAG]: BITBUCKET_TAG,
429
433
  [GIT_REPOSITORY_URL]: BITBUCKET_GIT_SSH_ORIGIN || BITBUCKET_GIT_HTTP_ORIGIN,
430
434
  [CI_WORKSPACE_PATH]: BITBUCKET_CLONE_DIR,
431
- [CI_PIPELINE_ID]: BITBUCKET_PIPELINE_UUID && BITBUCKET_PIPELINE_UUID.replace(/{|}/gm, '')
435
+ [CI_PIPELINE_ID]: BITBUCKET_PIPELINE_UUID && BITBUCKET_PIPELINE_UUID.replaceAll(/{|}/gm, ''),
436
+ [GIT_PULL_REQUEST_BASE_BRANCH]: BITBUCKET_PR_DESTINATION_BRANCH
432
437
  }
433
438
  }
434
439
 
@@ -459,7 +464,8 @@ module.exports = {
459
464
  [CI_WORKSPACE_PATH]: BITRISE_SOURCE_DIR,
460
465
  [GIT_TAG]: BITRISE_GIT_TAG,
461
466
  [GIT_BRANCH]: BITRISEIO_GIT_BRANCH_DEST || BITRISE_GIT_BRANCH,
462
- [GIT_COMMIT_MESSAGE]: BITRISE_GIT_MESSAGE
467
+ [GIT_COMMIT_MESSAGE]: BITRISE_GIT_MESSAGE,
468
+ [GIT_PULL_REQUEST_BASE_BRANCH]: BITRISEIO_GIT_BRANCH_DEST
463
469
  }
464
470
  }
465
471
 
@@ -555,7 +561,8 @@ module.exports = {
555
561
  BUDDY_EXECUTION_URL,
556
562
  BUDDY_PIPELINE_ID,
557
563
  BUDDY_PIPELINE_NAME,
558
- BUDDY_SCM_URL
564
+ BUDDY_SCM_URL,
565
+ BUDDY_RUN_PR_BASE_BRANCH
559
566
  } = env
560
567
  tags = {
561
568
  [CI_PROVIDER_NAME]: 'buddy',
@@ -569,7 +576,8 @@ module.exports = {
569
576
  [GIT_TAG]: BUDDY_EXECUTION_TAG,
570
577
  [GIT_COMMIT_MESSAGE]: BUDDY_EXECUTION_REVISION_MESSAGE,
571
578
  [GIT_COMMIT_COMMITTER_NAME]: BUDDY_EXECUTION_REVISION_COMMITTER_NAME,
572
- [GIT_COMMIT_COMMITTER_EMAIL]: BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL
579
+ [GIT_COMMIT_COMMITTER_EMAIL]: BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL,
580
+ [GIT_PULL_REQUEST_BASE_BRANCH]: BUDDY_RUN_PR_BASE_BRANCH
573
581
  }
574
582
  }
575
583