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
@@ -24,7 +24,8 @@ const {
24
24
  OUTPUT_TOKENS_METRIC_KEY,
25
25
  TOTAL_TOKENS_METRIC_KEY,
26
26
  INTEGRATION,
27
- DECORATOR
27
+ DECORATOR,
28
+ PROPAGATED_ML_APP_KEY
28
29
  } = require('./constants/tags')
29
30
 
30
31
  // global registry of LLMObs spans
@@ -73,12 +74,24 @@ class LLMObsTagger {
73
74
  if (integration) this._setTag(span, INTEGRATION, integration)
74
75
  if (_decorator) this._setTag(span, DECORATOR, _decorator)
75
76
 
76
- if (!mlApp) mlApp = registry.get(parent)?.[ML_APP] || this._config.llmobs.mlApp
77
- this._setTag(span, ML_APP, mlApp)
77
+ const spanMlApp =
78
+ mlApp ||
79
+ registry.get(parent)?.[ML_APP] ||
80
+ span.context()._trace.tags[PROPAGATED_ML_APP_KEY] ||
81
+ this._config.llmobs.mlApp
82
+
83
+ if (!spanMlApp) {
84
+ throw new Error(
85
+ '[LLMObs] Cannot start an LLMObs span without an mlApp configured.' +
86
+ 'Ensure this configuration is set before running your application.'
87
+ )
88
+ }
89
+
90
+ this._setTag(span, ML_APP, spanMlApp)
78
91
 
79
92
  const parentId =
80
- parent?.context().toSpanId() ||
81
- span.context()._trace.tags[PROPAGATED_PARENT_ID_KEY] ||
93
+ parent?.context().toSpanId() ??
94
+ span.context()._trace.tags[PROPAGATED_PARENT_ID_KEY] ??
82
95
  ROOT_PARENT_ID
83
96
  this._setTag(span, PARENT_ID_KEY, parentId)
84
97
  }
@@ -86,23 +99,23 @@ class LLMObsTagger {
86
99
  // TODO: similarly for the following `tag` methods,
87
100
  // how can we transition from a span weakmap to core API functionality
88
101
  tagLLMIO (span, inputData, outputData) {
89
- this._tagMessages(span, inputData, INPUT_MESSAGES)
90
- this._tagMessages(span, outputData, OUTPUT_MESSAGES)
102
+ this.#tagMessages(span, inputData, INPUT_MESSAGES)
103
+ this.#tagMessages(span, outputData, OUTPUT_MESSAGES)
91
104
  }
92
105
 
93
106
  tagEmbeddingIO (span, inputData, outputData) {
94
- this._tagDocuments(span, inputData, INPUT_DOCUMENTS)
95
- this._tagText(span, outputData, OUTPUT_VALUE)
107
+ this.#tagDocuments(span, inputData, INPUT_DOCUMENTS)
108
+ this.#tagText(span, outputData, OUTPUT_VALUE)
96
109
  }
97
110
 
98
111
  tagRetrievalIO (span, inputData, outputData) {
99
- this._tagText(span, inputData, INPUT_VALUE)
100
- this._tagDocuments(span, outputData, OUTPUT_DOCUMENTS)
112
+ this.#tagText(span, inputData, INPUT_VALUE)
113
+ this.#tagDocuments(span, outputData, OUTPUT_DOCUMENTS)
101
114
  }
102
115
 
103
116
  tagTextIO (span, inputData, outputData) {
104
- this._tagText(span, inputData, INPUT_VALUE)
105
- this._tagText(span, outputData, OUTPUT_VALUE)
117
+ this.#tagText(span, inputData, INPUT_VALUE)
118
+ this.#tagText(span, outputData, OUTPUT_VALUE)
106
119
  }
107
120
 
108
121
  tagMetadata (span, metadata) {
@@ -135,7 +148,7 @@ class LLMObsTagger {
135
148
  if (typeof value === 'number') {
136
149
  filterdMetrics[processedKey] = value
137
150
  } else {
138
- this._handleFailure(`Value for metric '${key}' must be a number, instead got ${value}`, 'invalid_metrics')
151
+ this.#handleFailure(`Value for metric '${key}' must be a number, instead got ${value}`, 'invalid_metrics')
139
152
  }
140
153
  }
141
154
 
@@ -160,7 +173,7 @@ class LLMObsTagger {
160
173
  this._setTag(span, SPAN_KIND, newKind)
161
174
  }
162
175
 
163
- _tagText (span, data, key) {
176
+ #tagText (span, data, key) {
164
177
  if (data) {
165
178
  if (typeof data === 'string') {
166
179
  this._setTag(span, key, data)
@@ -169,142 +182,156 @@ class LLMObsTagger {
169
182
  this._setTag(span, key, JSON.stringify(data))
170
183
  } catch {
171
184
  const type = key === INPUT_VALUE ? 'input' : 'output'
172
- this._handleFailure(`Failed to parse ${type} value, must be JSON serializable.`, 'invalid_io_text')
185
+ this.#handleFailure(`Failed to parse ${type} value, must be JSON serializable.`, 'invalid_io_text')
173
186
  }
174
187
  }
175
188
  }
176
189
  }
177
190
 
178
- _tagDocuments (span, data, key) {
179
- if (data) {
180
- if (!Array.isArray(data)) {
181
- data = [data]
182
- }
191
+ #tagDocuments (span, data, key) {
192
+ if (!data) {
193
+ return
194
+ }
183
195
 
184
- const documents = data.map(document => {
185
- if (typeof document === 'string') {
186
- return { text: document }
187
- }
196
+ if (!Array.isArray(data)) {
197
+ data = [data]
198
+ }
188
199
 
189
- if (document == null || typeof document !== 'object') {
190
- this._handleFailure('Documents must be a string, object, or list of objects.', 'invalid_embedding_io')
191
- return undefined
192
- }
200
+ const documents = []
201
+ for (const document of data) {
202
+ if (typeof document === 'string') {
203
+ documents.push({ text: document })
204
+ continue
205
+ }
193
206
 
194
- const { text, name, id, score } = document
195
- let validDocument = true
207
+ if (document == null || typeof document !== 'object') {
208
+ this.#handleFailure('Documents must be a string, object, or list of objects.', 'invalid_embedding_io')
209
+ continue
210
+ }
196
211
 
197
- if (typeof text !== 'string') {
198
- this._handleFailure('Document text must be a string.', 'invalid_embedding_io')
199
- validDocument = false
200
- }
212
+ const { text, name, id, score } = document
201
213
 
202
- const documentObj = { text }
214
+ const valid = typeof text === 'string'
215
+ if (!valid) {
216
+ this.#handleFailure('Document text must be a string.', 'invalid_embedding_io')
217
+ }
203
218
 
204
- validDocument = this._tagConditionalString(name, 'Document name', documentObj, 'name') && validDocument
205
- validDocument = this._tagConditionalString(id, 'Document ID', documentObj, 'id') && validDocument
206
- validDocument = this._tagConditionalNumber(score, 'Document score', documentObj, 'score') && validDocument
219
+ const documentObj = { text }
207
220
 
208
- return validDocument ? documentObj : undefined
209
- }).filter(doc => !!doc)
221
+ const condition1 = this.#tagConditionalString(name, 'Document name', documentObj, 'name')
222
+ const condition2 = this.#tagConditionalString(id, 'Document ID', documentObj, 'id')
223
+ const condition3 = this.#tagConditionalNumber(score, 'Document score', documentObj, 'score')
210
224
 
211
- if (documents.length) {
212
- this._setTag(span, key, documents)
225
+ if (valid && condition1 && condition2 && condition3) {
226
+ documents.push(documentObj)
213
227
  }
214
228
  }
215
- }
216
229
 
217
- _tagMessages (span, data, key) {
218
- if (data) {
219
- if (!Array.isArray(data)) {
220
- data = [data]
221
- }
230
+ if (documents.length) {
231
+ this._setTag(span, key, documents)
232
+ }
233
+ }
222
234
 
223
- const messages = data.map(message => {
224
- if (typeof message === 'string') {
225
- return { content: message }
226
- }
235
+ #filterToolCalls (toolCalls) {
236
+ if (!Array.isArray(toolCalls)) {
237
+ toolCalls = [toolCalls]
238
+ }
227
239
 
228
- if (message == null || typeof message !== 'object') {
229
- this._handleFailure('Messages must be a string, object, or list of objects', 'invalid_io_messages')
230
- return undefined
231
- }
240
+ const filteredToolCalls = []
241
+ for (const toolCall of toolCalls) {
242
+ if (typeof toolCall !== 'object') {
243
+ this.#handleFailure('Tool call must be an object.', 'invalid_io_messages')
244
+ continue
245
+ }
232
246
 
233
- let validMessage = true
247
+ const { name, arguments: args, toolId, type } = toolCall
248
+ const toolCallObj = {}
234
249
 
235
- const { content = '', role } = message
236
- let toolCalls = message.toolCalls
237
- const messageObj = { content }
250
+ const condition1 = this.#tagConditionalString(name, 'Tool name', toolCallObj, 'name')
251
+ const condition2 = this.#tagConditionalObject(args, 'Tool arguments', toolCallObj, 'arguments')
252
+ const condition3 = this.#tagConditionalString(toolId, 'Tool ID', toolCallObj, 'tool_id')
253
+ const condition4 = this.#tagConditionalString(type, 'Tool type', toolCallObj, 'type')
238
254
 
239
- if (typeof content !== 'string') {
240
- this._handleFailure('Message content must be a string.', 'invalid_io_messages')
241
- validMessage = false
242
- }
255
+ if (condition1 && condition2 && condition3 && condition4) {
256
+ filteredToolCalls.push(toolCallObj)
257
+ }
258
+ }
259
+ return filteredToolCalls
260
+ }
243
261
 
244
- validMessage = this._tagConditionalString(role, 'Message role', messageObj, 'role') && validMessage
262
+ #tagMessages (span, data, key) {
263
+ if (!data) {
264
+ return
265
+ }
266
+ if (!Array.isArray(data)) {
267
+ data = [data]
268
+ }
245
269
 
246
- if (toolCalls) {
247
- if (!Array.isArray(toolCalls)) {
248
- toolCalls = [toolCalls]
249
- }
270
+ const messages = []
250
271
 
251
- const filteredToolCalls = toolCalls.map(toolCall => {
252
- if (typeof toolCall !== 'object') {
253
- this._handleFailure('Tool call must be an object.', 'invalid_io_messages')
254
- return undefined
255
- }
272
+ for (const message of data) {
273
+ if (typeof message === 'string') {
274
+ messages.push({ content: message })
275
+ continue
276
+ }
277
+ if (message == null || typeof message !== 'object') {
278
+ this.#handleFailure('Messages must be a string, object, or list of objects', 'invalid_io_messages')
279
+ continue
280
+ }
256
281
 
257
- let validTool = true
282
+ const { content = '', role } = message
283
+ const toolCalls = message.toolCalls
284
+ const messageObj = { content }
258
285
 
259
- const { name, arguments: args, toolId, type } = toolCall
260
- const toolCallObj = {}
286
+ const valid = typeof content === 'string'
287
+ if (!valid) {
288
+ this.#handleFailure('Message content must be a string.', 'invalid_io_messages')
289
+ }
261
290
 
262
- validTool = this._tagConditionalString(name, 'Tool name', toolCallObj, 'name') && validTool
263
- validTool = this._tagConditionalObject(args, 'Tool arguments', toolCallObj, 'arguments') && validTool
264
- validTool = this._tagConditionalString(toolId, 'Tool ID', toolCallObj, 'tool_id') && validTool
265
- validTool = this._tagConditionalString(type, 'Tool type', toolCallObj, 'type') && validTool
291
+ const condition = this.#tagConditionalString(role, 'Message role', messageObj, 'role')
266
292
 
267
- return validTool ? toolCallObj : undefined
268
- }).filter(toolCall => !!toolCall)
293
+ if (toolCalls) {
294
+ const filteredToolCalls = this.#filterToolCalls(toolCalls)
269
295
 
270
- if (filteredToolCalls.length) {
271
- messageObj.tool_calls = filteredToolCalls
272
- }
296
+ if (filteredToolCalls.length) {
297
+ messageObj.tool_calls = filteredToolCalls
273
298
  }
299
+ }
274
300
 
275
- return validMessage ? messageObj : undefined
276
- }).filter(msg => !!msg)
277
-
278
- if (messages.length) {
279
- this._setTag(span, key, messages)
301
+ if (valid && condition) {
302
+ messages.push(messageObj)
280
303
  }
281
304
  }
305
+
306
+ if (messages.length) {
307
+ this._setTag(span, key, messages)
308
+ }
282
309
  }
283
310
 
284
- _tagConditionalString (data, type, carrier, key) {
311
+ #tagConditionalString (data, type, carrier, key) {
285
312
  if (!data) return true
286
313
  if (typeof data !== 'string') {
287
- this._handleFailure(`"${type}" must be a string.`)
314
+ this.#handleFailure(`"${type}" must be a string.`)
288
315
  return false
289
316
  }
290
317
  carrier[key] = data
291
318
  return true
292
319
  }
293
320
 
294
- _tagConditionalNumber (data, type, carrier, key) {
321
+ #tagConditionalNumber (data, type, carrier, key) {
295
322
  if (!data) return true
296
323
  if (typeof data !== 'number') {
297
- this._handleFailure(`"${type}" must be a number.`)
324
+ this.#handleFailure(`"${type}" must be a number.`)
298
325
  return false
299
326
  }
300
327
  carrier[key] = data
301
328
  return true
302
329
  }
303
330
 
304
- _tagConditionalObject (data, type, carrier, key) {
331
+ #tagConditionalObject (data, type, carrier, key) {
305
332
  if (!data) return true
306
333
  if (typeof data !== 'object') {
307
- this._handleFailure(`"${type}" must be an object.`)
334
+ this.#handleFailure(`"${type}" must be an object.`)
308
335
  return false
309
336
  }
310
337
  carrier[key] = data
@@ -313,7 +340,7 @@ class LLMObsTagger {
313
340
 
314
341
  // any public-facing LLMObs APIs using this tagger should not soft fail
315
342
  // auto-instrumentation should soft fail
316
- _handleFailure (msg, errorTag) {
343
+ #handleFailure (msg, errorTag) {
317
344
  if (this.softFail) {
318
345
  log.warn(msg)
319
346
  } else {
@@ -328,7 +355,7 @@ class LLMObsTagger {
328
355
  _register (span) {
329
356
  if (!this._config.llmobs.enabled) return
330
357
  if (registry.has(span)) {
331
- this._handleFailure(`LLMObs Span "${span._name}" already registered.`)
358
+ this.#handleFailure(`LLMObs Span "${span._name}" already registered.`)
332
359
  return
333
360
  }
334
361
 
@@ -338,12 +365,12 @@ class LLMObsTagger {
338
365
  _setTag (span, key, value) {
339
366
  if (!this._config.llmobs.enabled) return
340
367
  if (!registry.has(span)) {
341
- this._handleFailure(`Span "${span._name}" must be an LLMObs generated span.`)
368
+ this.#handleFailure(`Span "${span._name}" must be an LLMObs generated span.`)
342
369
  return
343
370
  }
344
371
 
345
372
  const tagsCarrier = registry.get(span)
346
- Object.assign(tagsCarrier, { [key]: value })
373
+ tagsCarrier[key] = value
347
374
  }
348
375
  }
349
376
 
@@ -2,15 +2,13 @@
2
2
 
3
3
  const { SPAN_KINDS } = require('./constants/tags')
4
4
 
5
- function encodeUnicode (str) {
6
- if (!str) return str
7
- return str.split('').map(char => {
8
- const code = char.charCodeAt(0)
9
- if (code > 127) {
10
- return `\\u${code.toString(16).padStart(4, '0')}`
11
- }
12
- return char
13
- }).join('')
5
+ function encodeUnicode (str = '') {
6
+ let result = ''
7
+ for (let i = 0; i < str.length; i++) {
8
+ const code = str.charCodeAt(i)
9
+ result += code > 127 ? `\\u${code.toString(16).padStart(4, '0')}` : str[i]
10
+ }
11
+ return result
14
12
  }
15
13
 
16
14
  function validateKind (kind) {
@@ -107,6 +105,8 @@ function findArgumentsBounds (str) {
107
105
  let end = -1
108
106
  let closerCount = 0
109
107
 
108
+ // TODO(BridgeAR): This "breaks" up codePoints.
109
+ // Investigate if this is a problem.
110
110
  for (let i = 0; i < str.length; i++) {
111
111
  const char = str[i]
112
112
 
@@ -157,7 +157,7 @@ class BaseLLMObsWriter {
157
157
  return encodeUnicode(value) // serialize unicode characters
158
158
  }
159
159
  return value
160
- }).replace(/\\\\u/g, '\\u') // remove double escaping
160
+ }).replaceAll(String.raw`\\u`, String.raw`\u`) // remove double escaping
161
161
  }
162
162
  }
163
163
 
@@ -27,7 +27,7 @@ function setAgentStrategy (config, setWritersAgentlessValue) {
27
27
  }
28
28
 
29
29
  const endpoints = agentInfo.endpoints
30
- const hasEndpoint = Array.isArray(endpoints) && endpoints.some(endpoint => endpoint === EVP_PROXY_AGENT_BASE_PATH)
30
+ const hasEndpoint = Array.isArray(endpoints) && endpoints.includes(EVP_PROXY_AGENT_BASE_PATH)
31
31
  setWritersAgentlessValue(!hasEndpoint)
32
32
  })
33
33
  }
@@ -7,6 +7,7 @@ const { traceChannel, debugChannel, infoChannel, warnChannel, errorChannel } = r
7
7
  const logWriter = require('./writer')
8
8
  const { Log } = require('./log')
9
9
  const { memoize } = require('./utils')
10
+ const { getEnvironmentVariable } = require('../config-helper')
10
11
 
11
12
  const config = {
12
13
  enabled: false,
@@ -95,26 +96,26 @@ const log = {
95
96
  return this._deprecate(code, message)
96
97
  },
97
98
 
98
- isEnabled (fleetStableConfigValue = undefined, localStableConfigValue = undefined) {
99
+ isEnabled (fleetStableConfigValue, localStableConfigValue) {
99
100
  return isTrue(coalesce(
100
101
  fleetStableConfigValue,
101
- process.env?.DD_TRACE_DEBUG,
102
- process.env?.OTEL_LOG_LEVEL === 'debug' || undefined,
102
+ getEnvironmentVariable('DD_TRACE_DEBUG'),
103
+ getEnvironmentVariable('OTEL_LOG_LEVEL') === 'debug' || undefined,
103
104
  localStableConfigValue,
104
105
  config.enabled
105
106
  ))
106
107
  },
107
108
 
108
109
  getLogLevel (
109
- optionsValue = undefined,
110
- fleetStableConfigValue = undefined,
111
- localStableConfigValue = undefined
110
+ optionsValue,
111
+ fleetStableConfigValue,
112
+ localStableConfigValue
112
113
  ) {
113
114
  return coalesce(
114
115
  optionsValue,
115
116
  fleetStableConfigValue,
116
- process.env?.DD_TRACE_LOG_LEVEL,
117
- process.env?.OTEL_LOG_LEVEL,
117
+ getEnvironmentVariable('DD_TRACE_LOG_LEVEL'),
118
+ getEnvironmentVariable('OTEL_LOG_LEVEL'),
118
119
  localStableConfigValue,
119
120
  config.logLevel
120
121
  )
@@ -23,7 +23,7 @@ class Log {
23
23
  static parse (...args) {
24
24
  let message, cause, delegate
25
25
 
26
- const lastArg = args[args.length - 1]
26
+ const lastArg = args.at(-1)
27
27
  if (lastArg && typeof lastArg === 'object' && lastArg.stack) { // lastArg instanceof Error?
28
28
  cause = args.pop()
29
29
  }
@@ -42,7 +42,7 @@ function toggle (enable, level) {
42
42
  }
43
43
 
44
44
  function use (newLogger) {
45
- if (newLogger && newLogger.debug instanceof Function && newLogger.error instanceof Function) {
45
+ if (typeof newLogger?.debug === 'function' && typeof newLogger.error === 'function') {
46
46
  logger = newLogger
47
47
  }
48
48
  }
@@ -54,12 +54,11 @@ function reset () {
54
54
  }
55
55
 
56
56
  function getErrorLog (err) {
57
- if (err && typeof err.delegate === 'function') {
57
+ if (typeof err?.delegate === 'function') {
58
58
  const result = err.delegate()
59
59
  return Array.isArray(result) ? Log.parse(...result) : Log.parse(result)
60
- } else {
61
- return err
62
60
  }
61
+ return err
63
62
  }
64
63
 
65
64
  function setStackTraceLimitFunction (fn) {
@@ -21,10 +21,10 @@ class Chunk {
21
21
 
22
22
  if (length < 0x20) { // fixstr
23
23
  this.reserve(length + 1)
24
- this.buffer[offset] = length | 0xa0
25
- } else if (length < 0x100000000) { // str 32
24
+ this.buffer[offset] = length | 0xA0
25
+ } else if (length < 0x1_00_00_00_00) { // str 32
26
26
  this.reserve(length + 5)
27
- this.buffer[offset] = 0xdb
27
+ this.buffer[offset] = 0xDB
28
28
  this.buffer[offset + 1] = length >> 24
29
29
  this.buffer[offset + 2] = length >> 16
30
30
  this.buffer[offset + 3] = length >> 8