dd-trace 5.52.0 → 5.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/README.md +5 -0
  3. package/index.d.ts +87 -22
  4. package/initialize.mjs +3 -4
  5. package/package.json +36 -34
  6. package/packages/datadog-core/src/utils/src/get.js +1 -1
  7. package/packages/datadog-core/src/utils/src/has.js +1 -1
  8. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  9. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  10. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  11. package/packages/datadog-core/src/utils/src/set.js +1 -1
  12. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  14. package/packages/datadog-instrumentations/src/amqplib.js +57 -37
  15. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  18. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  19. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
  20. package/packages/datadog-instrumentations/src/couchbase.js +5 -4
  21. package/packages/datadog-instrumentations/src/cucumber.js +126 -84
  22. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  23. package/packages/datadog-instrumentations/src/dns.js +1 -1
  24. package/packages/datadog-instrumentations/src/express.js +2 -6
  25. package/packages/datadog-instrumentations/src/fs.js +7 -6
  26. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  27. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  28. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  29. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  30. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  31. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  32. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
  33. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  34. package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
  35. package/packages/datadog-instrumentations/src/http/client.js +16 -21
  36. package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
  37. package/packages/datadog-instrumentations/src/jest.js +184 -87
  38. package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
  39. package/packages/datadog-instrumentations/src/knex.js +4 -4
  40. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  41. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  42. package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
  43. package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
  44. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  45. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  46. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  47. package/packages/datadog-instrumentations/src/mysql2.js +55 -47
  48. package/packages/datadog-instrumentations/src/net.js +4 -2
  49. package/packages/datadog-instrumentations/src/next.js +7 -14
  50. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  51. package/packages/datadog-instrumentations/src/openai.js +21 -23
  52. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  53. package/packages/datadog-instrumentations/src/pg.js +6 -13
  54. package/packages/datadog-instrumentations/src/playwright.js +170 -136
  55. package/packages/datadog-instrumentations/src/redis.js +3 -3
  56. package/packages/datadog-instrumentations/src/restify.js +2 -2
  57. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  58. package/packages/datadog-instrumentations/src/router.js +22 -25
  59. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  60. package/packages/datadog-instrumentations/src/url.js +9 -17
  61. package/packages/datadog-instrumentations/src/vitest.js +126 -97
  62. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  63. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  64. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  65. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  66. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  67. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  68. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  69. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  70. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  72. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  73. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  74. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  75. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  76. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  77. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  78. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  79. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  80. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  81. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  82. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  83. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  84. package/packages/datadog-plugin-cucumber/src/index.js +86 -20
  85. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  86. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  87. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  88. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  89. package/packages/datadog-plugin-express/src/index.js +10 -12
  90. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  91. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  92. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  93. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  94. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  95. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  96. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  97. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  98. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  99. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  100. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  101. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  102. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  103. package/packages/datadog-plugin-http/src/client.js +18 -7
  104. package/packages/datadog-plugin-http2/src/client.js +20 -20
  105. package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
  106. package/packages/datadog-plugin-jest/src/index.js +36 -28
  107. package/packages/datadog-plugin-jest/src/util.js +8 -8
  108. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  109. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  110. package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
  111. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  112. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  113. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  114. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  115. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  116. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  117. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  118. package/packages/datadog-plugin-mocha/src/index.js +88 -48
  119. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  120. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  121. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  122. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  123. package/packages/datadog-plugin-next/src/index.js +6 -5
  124. package/packages/datadog-plugin-openai/src/services.js +6 -10
  125. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  126. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  127. package/packages/datadog-plugin-playwright/src/index.js +48 -22
  128. package/packages/datadog-plugin-redis/src/index.js +9 -4
  129. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  130. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  131. package/packages/datadog-plugin-router/src/index.js +1 -1
  132. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  133. package/packages/datadog-plugin-vitest/src/index.js +99 -72
  134. package/packages/datadog-shimmer/src/shimmer.js +163 -36
  135. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  136. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  137. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  138. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  140. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  141. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  142. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  143. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  144. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  145. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  146. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  147. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  148. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  149. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  150. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  151. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  152. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  153. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  154. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  157. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  158. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  159. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  160. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  161. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  162. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  163. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  164. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  168. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  169. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  170. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  171. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  172. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  173. package/packages/dd-trace/src/appsec/index.js +15 -12
  174. package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
  175. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  176. package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
  177. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  178. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  179. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  180. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  181. package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
  182. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
  183. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  184. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  185. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
  186. package/packages/dd-trace/src/azure_metadata.js +2 -7
  187. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  189. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  191. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  192. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  193. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  194. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  195. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  196. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  197. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  198. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  199. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  200. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  201. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  202. package/packages/dd-trace/src/config.js +82 -51
  203. package/packages/dd-trace/src/config_stable.js +3 -3
  204. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  205. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  206. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  207. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  208. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  209. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  210. package/packages/dd-trace/src/datastreams/size.js +1 -1
  211. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
  212. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  213. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  214. package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
  215. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  216. package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
  217. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
  218. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  219. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  220. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  221. package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
  222. package/packages/dd-trace/src/dogstatsd.js +7 -4
  223. package/packages/dd-trace/src/encode/0.4.js +9 -9
  224. package/packages/dd-trace/src/encode/0.5.js +1 -1
  225. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  226. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  227. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  228. package/packages/dd-trace/src/exporter.js +6 -6
  229. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  230. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  231. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  232. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  233. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  234. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  235. package/packages/dd-trace/src/flare/file.js +1 -5
  236. package/packages/dd-trace/src/format.js +1 -1
  237. package/packages/dd-trace/src/git_properties.js +1 -1
  238. package/packages/dd-trace/src/id.js +12 -6
  239. package/packages/dd-trace/src/iitm.js +10 -22
  240. package/packages/dd-trace/src/lambda/handler.js +6 -6
  241. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  242. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  244. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  245. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  246. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  247. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  248. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  249. package/packages/dd-trace/src/llmobs/tagger.js +113 -99
  250. package/packages/dd-trace/src/llmobs/util.js +9 -9
  251. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  252. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  253. package/packages/dd-trace/src/log/index.js +4 -4
  254. package/packages/dd-trace/src/log/log.js +1 -1
  255. package/packages/dd-trace/src/log/writer.js +2 -2
  256. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  257. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  258. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  259. package/packages/dd-trace/src/noop/span.js +3 -5
  260. package/packages/dd-trace/src/noop/tracer.js +1 -2
  261. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  262. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  263. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  264. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  265. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  266. package/packages/dd-trace/src/opentracing/span.js +9 -14
  267. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  268. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  269. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  270. package/packages/dd-trace/src/pkg.js +1 -1
  271. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  272. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  273. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  274. package/packages/dd-trace/src/plugins/index.js +1 -1
  275. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  276. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  277. package/packages/dd-trace/src/plugins/producer.js +2 -2
  278. package/packages/dd-trace/src/plugins/storage.js +2 -2
  279. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  280. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  281. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  282. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  283. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  284. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  286. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  289. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  290. package/packages/dd-trace/src/priority_sampler.js +22 -22
  291. package/packages/dd-trace/src/profiling/config.js +44 -8
  292. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  293. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  294. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  295. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  296. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  297. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  298. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  299. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  300. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  301. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  302. package/packages/dd-trace/src/proxy.js +7 -13
  303. package/packages/dd-trace/src/random_sampler.js +40 -0
  304. package/packages/dd-trace/src/rate_limiter.js +4 -4
  305. package/packages/dd-trace/src/remote_config/index.js +3 -7
  306. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  307. package/packages/dd-trace/src/require-package-json.js +1 -1
  308. package/packages/dd-trace/src/ritm.js +4 -4
  309. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  310. package/packages/dd-trace/src/sampler.js +33 -4
  311. package/packages/dd-trace/src/sampling_rule.js +12 -3
  312. package/packages/dd-trace/src/scope.js +1 -1
  313. package/packages/dd-trace/src/serverless.js +0 -48
  314. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  315. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
  316. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  317. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  318. package/packages/dd-trace/src/span_processor.js +3 -3
  319. package/packages/dd-trace/src/span_sampler.js +4 -1
  320. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  321. package/packages/dd-trace/src/startup-log.js +2 -2
  322. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  323. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  324. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  325. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  326. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  327. package/packages/dd-trace/src/util.js +1 -1
  328. package/version.js +1 -0
  329. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  330. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  331. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  332. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -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,7 +156,7 @@ 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
  }
@@ -167,7 +167,7 @@ class MsgpackEncoder {
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,16 +201,16 @@ 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
@@ -220,7 +220,7 @@ class MsgpackEncoder {
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,21 +235,21 @@ 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
@@ -259,7 +259,7 @@ class MsgpackEncoder {
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
39
  baggageItems: Object.assign({}, 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()
@@ -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)
@@ -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
  }
@@ -240,7 +240,7 @@ class TextMapPropagator {
240
240
  if (typeof origin === 'string') {
241
241
  const originValue = origin
242
242
  .replace(tracestateOriginFilter, '_')
243
- .replace(/[\x3d]/g, '~')
243
+ .replace(/[\x3D]/g, '~')
244
244
 
245
245
  state.set('o', originValue)
246
246
  }
@@ -254,7 +254,7 @@ class TextMapPropagator {
254
254
  const tagValue = tags[key]
255
255
  .toString()
256
256
  .replace(tracestateTagValueFilter, '_')
257
- .replace(/[\x3d]/g, '~')
257
+ .replace(/[\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.replace(/[\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') {
@@ -590,7 +588,7 @@ class TextMapPropagator {
590
588
  }
591
589
 
592
590
  if (parts[2]) {
593
- b3[b3SampledKey] = parts[2] !== '0' ? '1' : '0'
591
+ b3[b3SampledKey] = parts[2] === '0' ? '0' : '1'
594
592
 
595
593
  if (parts[2] === 'd') {
596
594
  b3[b3FlagsKey] = '1'
@@ -633,6 +631,9 @@ class TextMapPropagator {
633
631
  if (!carrier || !carrier.baggage) return
634
632
  if (!spanContext) removeAllBaggageItems()
635
633
  const baggages = carrier.baggage.split(',')
634
+ const keysToSpanTag = this._config.baggageTagKeys === '*'
635
+ ? undefined
636
+ : new Set(this._config.baggageTagKeys.split(','))
636
637
  for (const keyValue of baggages) {
637
638
  if (!keyValue.includes('=')) {
638
639
  if (spanContext) spanContext._baggageItems = {}
@@ -647,8 +648,11 @@ class TextMapPropagator {
647
648
  }
648
649
  // the current code assumes precedence of ot-baggage- (legacy opentracing baggage) over baggage
649
650
  if (spanContext) {
650
- if (key in spanContext._baggageItems) return
651
+ if (Object.hasOwn(spanContext._baggageItems, key)) continue
651
652
  spanContext._baggageItems[key] = value
653
+ if (this._config.baggageTagKeys === '*' || keysToSpanTag.has(key)) {
654
+ spanContext._trace.tags['baggage.' + key] = value
655
+ }
652
656
  } else {
653
657
  setBaggageItem(key, value)
654
658
  }
@@ -656,7 +660,7 @@ class TextMapPropagator {
656
660
  }
657
661
 
658
662
  _extractSamplingPriority (carrier, spanContext) {
659
- const priority = parseInt(carrier[samplingKey], 10)
663
+ const priority = Number.parseInt(carrier[samplingKey], 10)
660
664
 
661
665
  if (Number.isInteger(priority)) {
662
666
  spanContext._sampling.priority = priority
@@ -703,7 +707,7 @@ class TextMapPropagator {
703
707
 
704
708
  if (buffer.length !== 16) return
705
709
 
706
- const tid = traceId.substring(0, 16)
710
+ const tid = traceId.slice(0, 16)
707
711
 
708
712
  if (tid === zeroTraceId) return
709
713
 
@@ -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')
@@ -26,7 +25,7 @@ const unfinishedRegistry = createRegistry('unfinished')
26
25
  const finishedRegistry = createRegistry('finished')
27
26
 
28
27
  const OTEL_ENABLED = !!process.env.DD_TRACE_OTEL_ENABLED
29
- const ALLOWED = ['string', 'number', 'boolean']
28
+ const ALLOWED = new Set(['string', 'number', 'boolean'])
30
29
 
31
30
  const integrationCounters = {
32
31
  spans_created: {},
@@ -129,7 +128,7 @@ class DatadogSpan {
129
128
  const spanContext = this.context()
130
129
  const resourceName = spanContext._tags['resource.name'] || ''
131
130
  const resource = resourceName.length > 100
132
- ? `${resourceName.substring(0, 97)}...`
131
+ ? `${resourceName.slice(0, 97)}...`
133
132
  : resourceName
134
133
  const json = JSON.stringify({
135
134
  traceId: spanContext._traceId,
@@ -198,7 +197,7 @@ class DatadogSpan {
198
197
 
199
198
  addLink (context, attributes) {
200
199
  this._links.push({
201
- context: context._ddContext ? context._ddContext : context,
200
+ context: context._ddContext ?? context,
202
201
  attributes: this._sanitizeAttributes(attributes)
203
202
  })
204
203
  }
@@ -235,10 +234,8 @@ class DatadogSpan {
235
234
  return
236
235
  }
237
236
 
238
- if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true') {
239
- if (!this._spanContext._tags['service.name']) {
240
- log.error('Finishing invalid span: %s', this)
241
- }
237
+ if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true' && !this._spanContext._tags['service.name']) {
238
+ log.error('Finishing invalid span: %s', this)
242
239
  }
243
240
 
244
241
  getIntegrationCounter('spans_finished', this._integrationName).inc()
@@ -256,7 +253,7 @@ class DatadogSpan {
256
253
  finishedRegistry.register(this, this._name)
257
254
  }
258
255
 
259
- finishTime = parseFloat(finishTime) || this._getTime()
256
+ finishTime = Number.parseFloat(finishTime) || this._getTime()
260
257
 
261
258
  this._duration = finishTime - this._startTime
262
259
  this._spanContext._trace.finished.push(this)
@@ -275,7 +272,7 @@ class DatadogSpan {
275
272
  }
276
273
  } else {
277
274
  const maybeScalar = maybeArray
278
- if (ALLOWED.includes(typeof maybeScalar)) {
275
+ if (ALLOWED.has(typeof maybeScalar)) {
279
276
  // Wrap the value as a string if it's not already a string
280
277
  sanitizedAttributes[key] = typeof maybeScalar === 'string' ? maybeScalar : String(maybeScalar)
281
278
  } else {
@@ -299,14 +296,14 @@ class DatadogSpan {
299
296
  if (Array.isArray(value)) {
300
297
  const newArray = []
301
298
  for (const subkey in value) {
302
- if (ALLOWED.includes(typeof value[subkey])) {
299
+ if (ALLOWED.has(typeof value[subkey])) {
303
300
  newArray.push(value[subkey])
304
301
  } else {
305
302
  log.warn('Dropping span event attribute. It is not of an allowed type')
306
303
  }
307
304
  }
308
305
  sanitizedAttributes[key] = newArray
309
- } else if (ALLOWED.includes(typeof value)) {
306
+ } else if (ALLOWED.has(typeof value)) {
310
307
  sanitizedAttributes[key] = value
311
308
  } else {
312
309
  log.warn('Dropping span event attribute. It is not of an allowed type')
@@ -388,8 +385,6 @@ class DatadogSpan {
388
385
  }
389
386
 
390
387
  function createRegistry (type) {
391
- if (!satisfies(process.version, '>=14.6')) return
392
-
393
388
  return new global.FinalizationRegistry(name => {
394
389
  runtimeMetrics.decrement(`runtime.node.spans.${type}`)
395
390
  runtimeMetrics.decrement(`runtime.node.spans.${type}.by.name`, [`span_name:${name}`])
@@ -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
 
@@ -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
  }