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
@@ -49,14 +49,14 @@ class MsgpackEncoder {
49
49
  const offset = bytes.length
50
50
 
51
51
  bytes.reserve(1)
52
- bytes.buffer[offset] = 0xc0
52
+ bytes.buffer[offset] = 0xC0
53
53
  }
54
54
 
55
55
  encodeBoolean (bytes, value) {
56
56
  const offset = bytes.length
57
57
 
58
58
  bytes.reserve(1)
59
- bytes.buffer[offset] = value ? 0xc3 : 0xc2
59
+ bytes.buffer[offset] = value ? 0xC3 : 0xC2
60
60
  }
61
61
 
62
62
  encodeString (bytes, value) {
@@ -75,7 +75,7 @@ class MsgpackEncoder {
75
75
  const offset = bytes.length
76
76
 
77
77
  bytes.reserve(5)
78
- bytes.buffer[offset] = 0xdd
78
+ bytes.buffer[offset] = 0xDD
79
79
  bytes.buffer[offset + 1] = length >> 24
80
80
  bytes.buffer[offset + 2] = length >> 16
81
81
  bytes.buffer[offset + 3] = length >> 8
@@ -105,7 +105,7 @@ class MsgpackEncoder {
105
105
  const offset = bytes.length
106
106
 
107
107
  bytes.reserve(5)
108
- bytes.buffer[offset] = 0xdf
108
+ bytes.buffer[offset] = 0xDF
109
109
  bytes.buffer[offset + 1] = keysLength >> 24
110
110
  bytes.buffer[offset + 2] = keysLength >> 16
111
111
  bytes.buffer[offset + 3] = keysLength >> 8
@@ -122,16 +122,16 @@ class MsgpackEncoder {
122
122
 
123
123
  if (value.byteLength < 256) {
124
124
  bytes.reserve(2)
125
- bytes.buffer[offset] = 0xc4
125
+ bytes.buffer[offset] = 0xC4
126
126
  bytes.buffer[offset + 1] = value.byteLength
127
- } else if (value.byteLength < 65536) {
127
+ } else if (value.byteLength < 65_536) {
128
128
  bytes.reserve(3)
129
- bytes.buffer[offset] = 0xc5
129
+ bytes.buffer[offset] = 0xC5
130
130
  bytes.buffer[offset + 1] = value.byteLength >> 8
131
131
  bytes.buffer[offset + 2] = value.byteLength
132
132
  } else {
133
133
  bytes.reserve(5)
134
- bytes.buffer[offset] = 0xc6
134
+ bytes.buffer[offset] = 0xC6
135
135
  bytes.buffer[offset + 1] = value.byteLength >> 24
136
136
  bytes.buffer[offset + 2] = value.byteLength >> 16
137
137
  bytes.buffer[offset + 3] = value.byteLength >> 8
@@ -145,7 +145,7 @@ class MsgpackEncoder {
145
145
  const offset = bytes.length
146
146
 
147
147
  bytes.reserve(5)
148
- bytes.buffer[offset] = 0xce
148
+ bytes.buffer[offset] = 0xCE
149
149
  bytes.buffer[offset + 1] = value >> 24
150
150
  bytes.buffer[offset + 2] = value >> 16
151
151
  bytes.buffer[offset + 3] = value >> 8
@@ -156,18 +156,18 @@ class MsgpackEncoder {
156
156
  const offset = bytes.length
157
157
 
158
158
  bytes.reserve(3)
159
- bytes.buffer[offset] = 0xcd
159
+ bytes.buffer[offset] = 0xCD
160
160
  bytes.buffer[offset + 1] = value >> 8
161
161
  bytes.buffer[offset + 2] = value
162
162
  }
163
163
 
164
164
  encodeLong (bytes, value) {
165
165
  const offset = bytes.length
166
- const hi = (value / Math.pow(2, 32)) >> 0
166
+ const hi = (value / 2 ** 32) >> 0
167
167
  const lo = value >>> 0
168
168
 
169
169
  bytes.reserve(9)
170
- bytes.buffer[offset] = 0xcf
170
+ bytes.buffer[offset] = 0xCF
171
171
  bytes.buffer[offset + 1] = hi >> 24
172
172
  bytes.buffer[offset + 2] = hi >> 16
173
173
  bytes.buffer[offset + 3] = hi >> 8
@@ -201,26 +201,26 @@ class MsgpackEncoder {
201
201
  bytes.buffer[offset] = value
202
202
  } else if (value >= -0x80) {
203
203
  bytes.reserve(2)
204
- bytes.buffer[offset] = 0xd0
204
+ bytes.buffer[offset] = 0xD0
205
205
  bytes.buffer[offset + 1] = value
206
- } else if (value >= -0x8000) {
206
+ } else if (value >= -0x80_00) {
207
207
  bytes.reserve(3)
208
- bytes.buffer[offset] = 0xd1
208
+ bytes.buffer[offset] = 0xD1
209
209
  bytes.buffer[offset + 1] = value >> 8
210
210
  bytes.buffer[offset + 2] = value
211
- } else if (value >= -0x80000000) {
211
+ } else if (value >= -0x80_00_00_00) {
212
212
  bytes.reserve(5)
213
- bytes.buffer[offset] = 0xd2
213
+ bytes.buffer[offset] = 0xD2
214
214
  bytes.buffer[offset + 1] = value >> 24
215
215
  bytes.buffer[offset + 2] = value >> 16
216
216
  bytes.buffer[offset + 3] = value >> 8
217
217
  bytes.buffer[offset + 4] = value
218
218
  } else {
219
- const hi = Math.floor(value / Math.pow(2, 32))
219
+ const hi = Math.floor(value / 2 ** 32)
220
220
  const lo = value >>> 0
221
221
 
222
222
  bytes.reserve(9)
223
- bytes.buffer[offset] = 0xd3
223
+ bytes.buffer[offset] = 0xD3
224
224
  bytes.buffer[offset + 1] = hi >> 24
225
225
  bytes.buffer[offset + 2] = hi >> 16
226
226
  bytes.buffer[offset + 3] = hi >> 8
@@ -235,31 +235,31 @@ class MsgpackEncoder {
235
235
  encodeUnsigned (bytes, value) {
236
236
  const offset = bytes.length
237
237
 
238
- if (value <= 0x7f) {
238
+ if (value <= 0x7F) {
239
239
  bytes.reserve(1)
240
240
  bytes.buffer[offset] = value
241
- } else if (value <= 0xff) {
241
+ } else if (value <= 0xFF) {
242
242
  bytes.reserve(2)
243
- bytes.buffer[offset] = 0xcc
243
+ bytes.buffer[offset] = 0xCC
244
244
  bytes.buffer[offset + 1] = value
245
- } else if (value <= 0xffff) {
245
+ } else if (value <= 0xFF_FF) {
246
246
  bytes.reserve(3)
247
- bytes.buffer[offset] = 0xcd
247
+ bytes.buffer[offset] = 0xCD
248
248
  bytes.buffer[offset + 1] = value >> 8
249
249
  bytes.buffer[offset + 2] = value
250
- } else if (value <= 0xffffffff) {
250
+ } else if (value <= 0xFF_FF_FF_FF) {
251
251
  bytes.reserve(5)
252
- bytes.buffer[offset] = 0xce
252
+ bytes.buffer[offset] = 0xCE
253
253
  bytes.buffer[offset + 1] = value >> 24
254
254
  bytes.buffer[offset + 2] = value >> 16
255
255
  bytes.buffer[offset + 3] = value >> 8
256
256
  bytes.buffer[offset + 4] = value
257
257
  } else {
258
- const hi = (value / Math.pow(2, 32)) >> 0
258
+ const hi = (value / 2 ** 32) >> 0
259
259
  const lo = value >>> 0
260
260
 
261
261
  bytes.reserve(9)
262
- bytes.buffer[offset] = 0xcf
262
+ bytes.buffer[offset] = 0xCF
263
263
  bytes.buffer[offset + 1] = hi >> 24
264
264
  bytes.buffer[offset + 2] = hi >> 16
265
265
  bytes.buffer[offset + 3] = hi >> 8
@@ -278,10 +278,10 @@ class MsgpackEncoder {
278
278
  bytes.reserve(9)
279
279
 
280
280
  if (value >= 0n) {
281
- bytes.buffer[offset] = 0xcf
281
+ bytes.buffer[offset] = 0xCF
282
282
  bytes.view.setBigUint64(offset + 1, value)
283
283
  } else {
284
- bytes.buffer[offset] = 0xd3
284
+ bytes.buffer[offset] = 0xD3
285
285
  bytes.view.setBigInt64(offset + 1, value)
286
286
  }
287
287
  }
@@ -301,7 +301,7 @@ class MsgpackEncoder {
301
301
  const offset = bytes.length
302
302
 
303
303
  bytes.reserve(9)
304
- bytes.buffer[offset] = 0xcb
304
+ bytes.buffer[offset] = 0xCB
305
305
  bytes.view.setFloat64(offset + 1, value)
306
306
  }
307
307
  }
@@ -3,15 +3,15 @@
3
3
  * @implements {DogStatsD}
4
4
  */
5
5
  module.exports = class NoopDogStatsDClient {
6
- increment () { }
6
+ increment () {}
7
7
 
8
- decrement () { }
8
+ decrement () {}
9
9
 
10
- gauge () { }
10
+ gauge () {}
11
11
 
12
- distribution () { }
12
+ distribution () {}
13
13
 
14
- histogram () { }
14
+ histogram () {}
15
15
 
16
- flush () { }
16
+ flush () {}
17
17
  }
@@ -30,21 +30,19 @@ class NoopSpan {
30
30
  _createContext (parent) {
31
31
  const spanId = id()
32
32
 
33
- if (parent) {
34
- return new NoopSpanContext({
33
+ return parent
34
+ ? new NoopSpanContext({
35
35
  noop: this,
36
36
  traceId: parent._traceId,
37
37
  spanId,
38
38
  parentId: parent._spanId,
39
- baggageItems: Object.assign({}, parent._baggageItems)
39
+ baggageItems: { ...parent._baggageItems }
40
40
  })
41
- } else {
42
- return new NoopSpanContext({
41
+ : new NoopSpanContext({
43
42
  noop: this,
44
43
  traceId: spanId,
45
44
  spanId
46
45
  })
47
- }
48
46
  }
49
47
  }
50
48
 
@@ -27,8 +27,7 @@ class NoopTracer {
27
27
  return ''
28
28
  }
29
29
 
30
- setUrl () {
31
- }
30
+ setUrl () {}
32
31
 
33
32
  startSpan (name, options) {
34
33
  return this._span
@@ -5,8 +5,8 @@ class NoopSpanProcessor {
5
5
  return Promise.resolve()
6
6
  }
7
7
 
8
- onStart (span, context) { }
9
- onEnd (span) { }
8
+ onStart (span, context) {}
9
+ onEnd (span) {}
10
10
 
11
11
  shutdown () {
12
12
  return Promise.resolve()
@@ -32,7 +32,7 @@ class Tracer {
32
32
  spanId: id(),
33
33
  parentId: parentSpanContext._spanId,
34
34
  sampling: parentSpanContext._sampling,
35
- baggageItems: Object.assign({}, parentSpanContext._baggageItems),
35
+ baggageItems: { ...parentSpanContext._baggageItems },
36
36
  trace: parentSpanContext._trace,
37
37
  tracestate: parentSpanContext._tracestate
38
38
  })
@@ -71,7 +71,11 @@ class Tracer {
71
71
 
72
72
  // Update meta and samplingPriority based on extracted values
73
73
  Object.assign(meta, otherPropagatedTags)
74
- samplingPriority = TextMapPropagator._getSamplingPriority(traceFlag, parseInt(samplingPriorityTs, 10), origin)
74
+ samplingPriority = TextMapPropagator._getSamplingPriority(
75
+ traceFlag,
76
+ Number.parseInt(samplingPriorityTs, 10),
77
+ origin
78
+ )
75
79
  } else {
76
80
  log.debug(`no dd list member in tracestate from incoming request: ${ts}`)
77
81
  }
@@ -144,10 +148,7 @@ class Tracer {
144
148
 
145
149
  // Set initial span attributes. The attributes object may have been mutated
146
150
  // by the sampler, so we sanitize the merged attributes before setting them.
147
- sanitizeAttributes(
148
- // Object.assign(attributes, samplingResult.attributes)
149
- attributes
150
- )
151
+ sanitizeAttributes(attributes)
151
152
  )
152
153
  }
153
154
 
@@ -14,12 +14,10 @@ class LogPropagator {
14
14
  carrier.dd = {}
15
15
 
16
16
  if (spanContext) {
17
- if (this._config.traceId128BitGenerationEnabled &&
18
- this._config.traceId128BitLoggingEnabled && spanContext._trace.tags['_dd.p.tid']) {
19
- carrier.dd.trace_id = spanContext.toTraceId(true)
20
- } else {
21
- carrier.dd.trace_id = spanContext.toTraceId()
22
- }
17
+ carrier.dd.trace_id = this._config.traceId128BitGenerationEnabled &&
18
+ this._config.traceId128BitLoggingEnabled && spanContext._trace.tags['_dd.p.tid']
19
+ ? spanContext.toTraceId(true)
20
+ : spanContext.toTraceId()
23
21
 
24
22
  carrier.dd.span_id = spanContext.toSpanId()
25
23
  }
@@ -35,8 +33,8 @@ class LogPropagator {
35
33
  }
36
34
 
37
35
  if (carrier.dd.trace_id.length === 32) {
38
- const hi = carrier.dd.trace_id.substring(0, 16)
39
- const lo = carrier.dd.trace_id.substring(16, 32)
36
+ const hi = carrier.dd.trace_id.slice(0, 16)
37
+ const lo = carrier.dd.trace_id.slice(16, 32)
40
38
  const spanContext = new DatadogSpanContext({
41
39
  traceId: id(lo, 16),
42
40
  spanId: id(carrier.dd.span_id, 10)
@@ -45,12 +43,11 @@ class LogPropagator {
45
43
  spanContext._trace.tags['_dd.p.tid'] = hi
46
44
 
47
45
  return spanContext
48
- } else {
49
- return new DatadogSpanContext({
50
- traceId: id(carrier.dd.trace_id, 10),
51
- spanId: id(carrier.dd.span_id, 10)
52
- })
53
46
  }
47
+ return new DatadogSpanContext({
48
+ traceId: id(carrier.dd.trace_id, 10),
49
+ spanId: id(carrier.dd.span_id, 10)
50
+ })
54
51
  }
55
52
  }
56
53
 
@@ -31,21 +31,21 @@ const b3HeaderKey = 'b3'
31
31
  const sqsdHeaderHey = 'x-aws-sqsd-attr-_datadog'
32
32
  const b3HeaderExpr = /^(([0-9a-f]{16}){1,2}-[0-9a-f]{16}(-[01d](-[0-9a-f]{16})?)?|[01d])$/i
33
33
  const baggageExpr = new RegExp(`^${baggagePrefix}(.+)$`)
34
- const tagKeyExpr = /^_dd\.p\.[\x21-\x2b\x2d-\x7e]+$/ // ASCII minus spaces and commas
35
- const tagValueExpr = /^[\x20-\x2b\x2d-\x7e]*$/ // ASCII minus commas
34
+ const tagKeyExpr = /^_dd\.p\.[\x21-\x2B\x2D-\x7E]+$/ // ASCII minus spaces and commas
35
+ const tagValueExpr = /^[\x20-\x2B\x2D-\x7E]*$/ // ASCII minus commas
36
36
  const traceparentExpr = /^([a-f0-9]{2})-([a-f0-9]{32})-([a-f0-9]{16})-([a-f0-9]{2})(-.*)?$/i
37
37
  const traceparentKey = 'traceparent'
38
38
  const tracestateKey = 'tracestate'
39
39
  const ddKeys = [traceKey, spanKey, samplingKey, originKey]
40
40
  const b3Keys = [b3TraceKey, b3SpanKey, b3ParentKey, b3SampledKey, b3FlagsKey, b3HeaderKey]
41
41
  const w3cKeys = [traceparentKey, tracestateKey]
42
- const logKeys = ddKeys.concat(b3Keys, w3cKeys)
42
+ const logKeys = [...ddKeys, ...b3Keys, ...w3cKeys]
43
43
  // Origin value in tracestate replaces '~', ',' and ';' with '_"
44
- const tracestateOriginFilter = /[^\x20-\x2b\x2d-\x3a\x3c-\x7d]/g
44
+ const tracestateOriginFilter = /[^\x20-\x2B\x2D-\x3A\x3C-\x7D]/g
45
45
  // Tag keys in tracestate replace ' ', ',' and '=' with '_'
46
- const tracestateTagKeyFilter = /[^\x21-\x2b\x2d-\x3c\x3e-\x7e]/g
46
+ const tracestateTagKeyFilter = /[^\x21-\x2B\x2D-\x3C\x3E-\x7E]/g
47
47
  // Tag values in tracestate replace ',', '~' and ';' with '_'
48
- const tracestateTagValueFilter = /[^\x20-\x2b\x2d-\x3a\x3c-\x7d]/g
48
+ const tracestateTagValueFilter = /[^\x20-\x2B\x2D-\x3A\x3C-\x7D]/g
49
49
  const invalidSegment = /^0+$/
50
50
  const zeroTraceId = '0000000000000000'
51
51
  const hex16 = /^[0-9A-Fa-f]{16}$/
@@ -146,7 +146,7 @@ class TextMapPropagator {
146
146
  baggage += item
147
147
  }
148
148
 
149
- baggage = baggage.slice(0, baggage.length - 1)
149
+ baggage = baggage.slice(0, -1)
150
150
  if (baggage) carrier.baggage = baggage
151
151
  }
152
152
  }
@@ -239,8 +239,8 @@ class TextMapPropagator {
239
239
 
240
240
  if (typeof origin === 'string') {
241
241
  const originValue = origin
242
- .replace(tracestateOriginFilter, '_')
243
- .replace(/[\x3d]/g, '~')
242
+ .replaceAll(tracestateOriginFilter, '_')
243
+ .replaceAll(/[\x3D]/g, '~')
244
244
 
245
245
  state.set('o', originValue)
246
246
  }
@@ -249,12 +249,12 @@ class TextMapPropagator {
249
249
  if (!tags[key] || !key.startsWith('_dd.p.')) continue
250
250
 
251
251
  const tagKey = 't.' + key.slice(6)
252
- .replace(tracestateTagKeyFilter, '_')
252
+ .replaceAll(tracestateTagKeyFilter, '_')
253
253
 
254
254
  const tagValue = tags[key]
255
255
  .toString()
256
- .replace(tracestateTagValueFilter, '_')
257
- .replace(/[\x3d]/g, '~')
256
+ .replaceAll(tracestateTagValueFilter, '_')
257
+ .replaceAll(/[\x3D]/g, '~')
258
258
 
259
259
  state.set(tagKey, tagValue)
260
260
  }
@@ -316,12 +316,10 @@ class TextMapPropagator {
316
316
  extractedContext = this._extractB3SingleContext(carrier)
317
317
  break
318
318
  case 'b3':
319
- if (this._config.tracePropagationStyle.otelPropagators) {
319
+ extractedContext = this._config.tracePropagationStyle.otelPropagators
320
320
  // TODO: should match "b3 single header" in next major
321
- extractedContext = this._extractB3SingleContext(carrier)
322
- } else {
323
- extractedContext = this._extractB3MultiContext(carrier)
324
- }
321
+ ? this._extractB3SingleContext(carrier)
322
+ : this._extractB3MultiContext(carrier)
325
323
  break
326
324
  case 'b3multi':
327
325
  extractedContext = this._extractB3MultiContext(carrier)
@@ -442,7 +440,7 @@ class TextMapPropagator {
442
440
  let parsed
443
441
  try {
444
442
  parsed = JSON.parse(headerValue)
445
- } catch (e) {
443
+ } catch {
446
444
  return null
447
445
  }
448
446
  return this._extractDatadogContext(parsed)
@@ -471,7 +469,7 @@ class TextMapPropagator {
471
469
  traceId: id(traceId, 16),
472
470
  spanId: id(spanId, 16),
473
471
  isRemote: true,
474
- sampling: { priority: parseInt(flags, 10) & 1 ? 1 : 0 },
472
+ sampling: { priority: Number.parseInt(flags, 10) & 1 ? 1 : 0 },
475
473
  traceparent,
476
474
  tracestate
477
475
  })
@@ -486,7 +484,7 @@ class TextMapPropagator {
486
484
  break
487
485
  }
488
486
  case 's': {
489
- const priority = parseInt(value, 10)
487
+ const priority = Number.parseInt(value, 10)
490
488
  if (!Number.isInteger(priority)) continue
491
489
  if (
492
490
  (spanContext._sampling.priority === 1 && priority > 0) ||
@@ -500,7 +498,7 @@ class TextMapPropagator {
500
498
  spanContext._trace.origin = value
501
499
  break
502
500
  case 't.dm': {
503
- const mechanism = Math.abs(parseInt(value, 10))
501
+ const mechanism = Math.abs(Number.parseInt(value, 10))
504
502
  if (Number.isInteger(mechanism)) {
505
503
  spanContext._sampling.mechanism = mechanism
506
504
  spanContext._trace.tags['_dd.p.dm'] = `-${mechanism}`
@@ -510,7 +508,7 @@ class TextMapPropagator {
510
508
  default: {
511
509
  if (!key.startsWith('t.')) continue
512
510
  const subKey = key.slice(2) // e.g. t.tid -> tid
513
- const transformedValue = value.replace(/[\x7e]/gm, '=')
511
+ const transformedValue = value.replaceAll(/[\x7E]/gm, '=')
514
512
 
515
513
  // If subkey is tid then do nothing because trace header tid should always be preserved
516
514
  if (subKey === 'tid') {
@@ -583,22 +581,21 @@ class TextMapPropagator {
583
581
  return {
584
582
  [b3SampledKey]: parts[0]
585
583
  }
586
- } else {
587
- const b3 = {
588
- [b3TraceKey]: parts[0],
589
- [b3SpanKey]: parts[1]
590
- }
584
+ }
585
+ const b3 = {
586
+ [b3TraceKey]: parts[0],
587
+ [b3SpanKey]: parts[1]
588
+ }
591
589
 
592
- if (parts[2]) {
593
- b3[b3SampledKey] = parts[2] !== '0' ? '1' : '0'
590
+ if (parts[2]) {
591
+ b3[b3SampledKey] = parts[2] === '0' ? '0' : '1'
594
592
 
595
- if (parts[2] === 'd') {
596
- b3[b3FlagsKey] = '1'
597
- }
593
+ if (parts[2] === 'd') {
594
+ b3[b3FlagsKey] = '1'
598
595
  }
599
-
600
- return b3
601
596
  }
597
+
598
+ return b3
602
599
  }
603
600
 
604
601
  _extractOrigin (carrier, spanContext) {
@@ -633,6 +630,9 @@ class TextMapPropagator {
633
630
  if (!carrier || !carrier.baggage) return
634
631
  if (!spanContext) removeAllBaggageItems()
635
632
  const baggages = carrier.baggage.split(',')
633
+ const keysToSpanTag = this._config.baggageTagKeys === '*'
634
+ ? undefined
635
+ : new Set(this._config.baggageTagKeys.split(','))
636
636
  for (const keyValue of baggages) {
637
637
  if (!keyValue.includes('=')) {
638
638
  if (spanContext) spanContext._baggageItems = {}
@@ -647,8 +647,11 @@ class TextMapPropagator {
647
647
  }
648
648
  // the current code assumes precedence of ot-baggage- (legacy opentracing baggage) over baggage
649
649
  if (spanContext) {
650
- if (key in spanContext._baggageItems) return
650
+ if (Object.hasOwn(spanContext._baggageItems, key)) continue
651
651
  spanContext._baggageItems[key] = value
652
+ if (this._config.baggageTagKeys === '*' || keysToSpanTag.has(key)) {
653
+ spanContext._trace.tags['baggage.' + key] = value
654
+ }
652
655
  } else {
653
656
  setBaggageItem(key, value)
654
657
  }
@@ -656,7 +659,7 @@ class TextMapPropagator {
656
659
  }
657
660
 
658
661
  _extractSamplingPriority (carrier, spanContext) {
659
- const priority = parseInt(carrier[samplingKey], 10)
662
+ const priority = Number.parseInt(carrier[samplingKey], 10)
660
663
 
661
664
  if (Number.isInteger(priority)) {
662
665
  spanContext._sampling.priority = priority
@@ -703,7 +706,7 @@ class TextMapPropagator {
703
706
 
704
707
  if (buffer.length !== 16) return
705
708
 
706
- const tid = traceId.substring(0, 16)
709
+ const tid = traceId.slice(0, 16)
707
710
 
708
711
  if (tid === zeroTraceId) return
709
712
 
@@ -17,10 +17,14 @@ function fromString (Type, regex, value) {
17
17
  }
18
18
 
19
19
  function toString (map, pairSeparator, fieldSeparator) {
20
- return Array.from(map.entries())
21
- .reverse()
22
- .map((pair) => pair.join(pairSeparator))
23
- .join(fieldSeparator)
20
+ let result = ''
21
+ for (const [key, value] of map) {
22
+ if (result) {
23
+ result = `${fieldSeparator}${result}`
24
+ }
25
+ result = `${key}${pairSeparator}${value}${result}`
26
+ }
27
+ return result
24
28
  }
25
29
 
26
30
  class TraceStateData extends Map {
@@ -4,7 +4,6 @@
4
4
  const { performance } = require('perf_hooks')
5
5
  const now = performance.now.bind(performance)
6
6
  const dateNow = Date.now
7
- const satisfies = require('semifies')
8
7
  const SpanContext = require('./span_context')
9
8
  const id = require('../id')
10
9
  const tagger = require('../tagger')
@@ -14,19 +13,18 @@ const { storage } = require('../../../datadog-core')
14
13
  const telemetryMetrics = require('../telemetry/metrics')
15
14
  const { channel } = require('dc-polyfill')
16
15
  const util = require('util')
16
+ const { getEnvironmentVariable } = require('../config-helper')
17
17
 
18
18
  const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
19
19
 
20
- const {
21
- DD_TRACE_EXPERIMENTAL_STATE_TRACKING,
22
- DD_TRACE_EXPERIMENTAL_SPAN_COUNTS
23
- } = process.env
20
+ const DD_TRACE_EXPERIMENTAL_STATE_TRACKING = getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_STATE_TRACKING')
21
+ const DD_TRACE_EXPERIMENTAL_SPAN_COUNTS = getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_SPAN_COUNTS')
24
22
 
25
23
  const unfinishedRegistry = createRegistry('unfinished')
26
24
  const finishedRegistry = createRegistry('finished')
27
25
 
28
- const OTEL_ENABLED = !!process.env.DD_TRACE_OTEL_ENABLED
29
- const ALLOWED = ['string', 'number', 'boolean']
26
+ const OTEL_ENABLED = !!getEnvironmentVariable('DD_TRACE_OTEL_ENABLED')
27
+ const ALLOWED = new Set(['string', 'number', 'boolean'])
30
28
 
31
29
  const integrationCounters = {
32
30
  spans_created: {},
@@ -57,6 +55,8 @@ class DatadogSpan {
57
55
  constructor (tracer, processor, prioritySampler, fields, debug) {
58
56
  const operationName = fields.operationName
59
57
  const parent = fields.parent || null
58
+ // TODO(BridgeAR): Investigate why this is causing a performance regression
59
+ // eslint-disable-next-line prefer-object-spread
60
60
  const tags = Object.assign({}, fields.tags)
61
61
  const hostname = fields.hostname
62
62
 
@@ -129,7 +129,7 @@ class DatadogSpan {
129
129
  const spanContext = this.context()
130
130
  const resourceName = spanContext._tags['resource.name'] || ''
131
131
  const resource = resourceName.length > 100
132
- ? `${resourceName.substring(0, 97)}...`
132
+ ? `${resourceName.slice(0, 97)}...`
133
133
  : resourceName
134
134
  const json = JSON.stringify({
135
135
  traceId: spanContext._traceId,
@@ -198,7 +198,7 @@ class DatadogSpan {
198
198
 
199
199
  addLink (context, attributes) {
200
200
  this._links.push({
201
- context: context._ddContext ? context._ddContext : context,
201
+ context: context._ddContext ?? context,
202
202
  attributes: this._sanitizeAttributes(attributes)
203
203
  })
204
204
  }
@@ -235,10 +235,8 @@ class DatadogSpan {
235
235
  return
236
236
  }
237
237
 
238
- if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true') {
239
- if (!this._spanContext._tags['service.name']) {
240
- log.error('Finishing invalid span: %s', this)
241
- }
238
+ if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true' && !this._spanContext._tags['service.name']) {
239
+ log.error('Finishing invalid span: %s', this)
242
240
  }
243
241
 
244
242
  getIntegrationCounter('spans_finished', this._integrationName).inc()
@@ -256,7 +254,7 @@ class DatadogSpan {
256
254
  finishedRegistry.register(this, this._name)
257
255
  }
258
256
 
259
- finishTime = parseFloat(finishTime) || this._getTime()
257
+ finishTime = Number.parseFloat(finishTime) || this._getTime()
260
258
 
261
259
  this._duration = finishTime - this._startTime
262
260
  this._spanContext._trace.finished.push(this)
@@ -275,7 +273,7 @@ class DatadogSpan {
275
273
  }
276
274
  } else {
277
275
  const maybeScalar = maybeArray
278
- if (ALLOWED.includes(typeof maybeScalar)) {
276
+ if (ALLOWED.has(typeof maybeScalar)) {
279
277
  // Wrap the value as a string if it's not already a string
280
278
  sanitizedAttributes[key] = typeof maybeScalar === 'string' ? maybeScalar : String(maybeScalar)
281
279
  } else {
@@ -299,14 +297,14 @@ class DatadogSpan {
299
297
  if (Array.isArray(value)) {
300
298
  const newArray = []
301
299
  for (const subkey in value) {
302
- if (ALLOWED.includes(typeof value[subkey])) {
300
+ if (ALLOWED.has(typeof value[subkey])) {
303
301
  newArray.push(value[subkey])
304
302
  } else {
305
303
  log.warn('Dropping span event attribute. It is not of an allowed type')
306
304
  }
307
305
  }
308
306
  sanitizedAttributes[key] = newArray
309
- } else if (ALLOWED.includes(typeof value)) {
307
+ } else if (ALLOWED.has(typeof value)) {
310
308
  sanitizedAttributes[key] = value
311
309
  } else {
312
310
  log.warn('Dropping span event attribute. It is not of an allowed type')
@@ -336,7 +334,7 @@ class DatadogSpan {
336
334
  spanId: id(),
337
335
  parentId: parent._spanId,
338
336
  sampling: parent._sampling,
339
- baggageItems: Object.assign({}, parent._baggageItems),
337
+ baggageItems: { ...parent._baggageItems },
340
338
  trace: parent._trace,
341
339
  tracestate: parent._tracestate
342
340
  })
@@ -388,8 +386,6 @@ class DatadogSpan {
388
386
  }
389
387
 
390
388
  function createRegistry (type) {
391
- if (!satisfies(process.version, '>=14.6')) return
392
-
393
389
  return new global.FinalizationRegistry(name => {
394
390
  runtimeMetrics.decrement(`runtime.node.spans.${type}`)
395
391
  runtimeMetrics.decrement(`runtime.node.spans.${type}.by.name`, [`span_name:${name}`])