dd-trace 5.53.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 (319) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/index.d.ts +33 -16
  3. package/initialize.mjs +3 -4
  4. package/package.json +36 -34
  5. package/packages/datadog-core/src/utils/src/get.js +1 -1
  6. package/packages/datadog-core/src/utils/src/has.js +1 -1
  7. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  8. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  9. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  10. package/packages/datadog-core/src/utils/src/set.js +1 -1
  11. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  12. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  13. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  14. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  15. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  16. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  17. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  18. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
  19. package/packages/datadog-instrumentations/src/couchbase.js +3 -3
  20. package/packages/datadog-instrumentations/src/cucumber.js +87 -40
  21. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  22. package/packages/datadog-instrumentations/src/dns.js +1 -1
  23. package/packages/datadog-instrumentations/src/fs.js +1 -1
  24. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  25. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  26. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  27. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  28. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  29. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  30. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  31. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  32. package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
  33. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  34. package/packages/datadog-instrumentations/src/jest.js +137 -48
  35. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  36. package/packages/datadog-instrumentations/src/knex.js +4 -4
  37. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  38. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  39. package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
  40. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  41. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  42. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  43. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  44. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  45. package/packages/datadog-instrumentations/src/net.js +1 -1
  46. package/packages/datadog-instrumentations/src/next.js +1 -0
  47. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  48. package/packages/datadog-instrumentations/src/openai.js +21 -23
  49. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  50. package/packages/datadog-instrumentations/src/pg.js +1 -2
  51. package/packages/datadog-instrumentations/src/playwright.js +112 -69
  52. package/packages/datadog-instrumentations/src/redis.js +3 -3
  53. package/packages/datadog-instrumentations/src/restify.js +2 -2
  54. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  55. package/packages/datadog-instrumentations/src/router.js +22 -25
  56. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  57. package/packages/datadog-instrumentations/src/vitest.js +77 -28
  58. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  59. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  60. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  61. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  62. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  63. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  64. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  65. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  66. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  67. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  68. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  69. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  70. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  72. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  73. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  74. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  75. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  76. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  77. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  78. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  79. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  80. package/packages/datadog-plugin-cucumber/src/index.js +57 -2
  81. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  82. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  83. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  84. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  85. package/packages/datadog-plugin-express/src/index.js +10 -12
  86. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  87. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  88. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  89. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  90. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  91. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  92. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  93. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  94. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  95. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  96. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  97. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  98. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  99. package/packages/datadog-plugin-http/src/client.js +18 -7
  100. package/packages/datadog-plugin-http2/src/client.js +20 -20
  101. package/packages/datadog-plugin-jest/src/index.js +23 -21
  102. package/packages/datadog-plugin-jest/src/util.js +8 -8
  103. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  104. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  105. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  106. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  107. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  108. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  109. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  110. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  111. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  112. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  113. package/packages/datadog-plugin-mocha/src/index.js +33 -13
  114. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  115. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  116. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  117. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  118. package/packages/datadog-plugin-next/src/index.js +6 -5
  119. package/packages/datadog-plugin-openai/src/services.js +6 -10
  120. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  121. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  122. package/packages/datadog-plugin-playwright/src/index.js +22 -2
  123. package/packages/datadog-plugin-redis/src/index.js +1 -1
  124. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  125. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  126. package/packages/datadog-plugin-router/src/index.js +1 -1
  127. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  128. package/packages/datadog-plugin-vitest/src/index.js +47 -31
  129. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  130. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  131. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  132. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  133. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  134. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  135. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  136. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  137. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  138. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  139. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  140. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  141. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  142. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  143. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  144. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  145. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  146. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  147. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  148. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  149. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  150. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  151. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  152. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  153. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  154. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  157. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  158. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  160. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  162. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  163. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  166. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  167. package/packages/dd-trace/src/appsec/index.js +1 -1
  168. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  169. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  170. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  171. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  172. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  173. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  174. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  175. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  176. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  177. package/packages/dd-trace/src/azure_metadata.js +2 -7
  178. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  179. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  180. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  181. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  182. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  183. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  184. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  185. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  186. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  187. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  188. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  189. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  191. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  192. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  193. package/packages/dd-trace/src/config.js +82 -51
  194. package/packages/dd-trace/src/config_stable.js +3 -3
  195. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  196. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  197. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  198. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  199. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  200. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  201. package/packages/dd-trace/src/datastreams/size.js +1 -1
  202. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +74 -67
  203. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  204. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  205. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
  206. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  209. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  210. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  211. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  212. package/packages/dd-trace/src/dogstatsd.js +5 -4
  213. package/packages/dd-trace/src/encode/0.4.js +9 -9
  214. package/packages/dd-trace/src/encode/0.5.js +1 -1
  215. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  216. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  217. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  218. package/packages/dd-trace/src/exporter.js +6 -6
  219. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  220. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  221. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  222. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  223. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  224. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  225. package/packages/dd-trace/src/flare/file.js +1 -5
  226. package/packages/dd-trace/src/format.js +1 -1
  227. package/packages/dd-trace/src/git_properties.js +1 -1
  228. package/packages/dd-trace/src/id.js +12 -6
  229. package/packages/dd-trace/src/iitm.js +10 -22
  230. package/packages/dd-trace/src/lambda/handler.js +6 -6
  231. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  232. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  233. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  234. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  235. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  236. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  237. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  238. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  239. package/packages/dd-trace/src/llmobs/tagger.js +110 -96
  240. package/packages/dd-trace/src/llmobs/util.js +9 -9
  241. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  242. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  243. package/packages/dd-trace/src/log/index.js +4 -4
  244. package/packages/dd-trace/src/log/log.js +1 -1
  245. package/packages/dd-trace/src/log/writer.js +2 -2
  246. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  247. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  248. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  249. package/packages/dd-trace/src/noop/span.js +3 -5
  250. package/packages/dd-trace/src/noop/tracer.js +1 -2
  251. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  252. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  253. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  254. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  255. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  256. package/packages/dd-trace/src/opentracing/span.js +9 -14
  257. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  258. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  259. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  260. package/packages/dd-trace/src/pkg.js +1 -1
  261. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  262. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  263. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  264. package/packages/dd-trace/src/plugins/index.js +0 -1
  265. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  266. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  267. package/packages/dd-trace/src/plugins/producer.js +2 -2
  268. package/packages/dd-trace/src/plugins/storage.js +2 -2
  269. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  270. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  271. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  272. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  273. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  274. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  275. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  276. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  277. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  278. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  279. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  280. package/packages/dd-trace/src/priority_sampler.js +22 -22
  281. package/packages/dd-trace/src/profiling/config.js +44 -8
  282. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  283. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  284. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  285. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  286. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  287. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  288. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  289. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  290. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  291. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  292. package/packages/dd-trace/src/proxy.js +7 -9
  293. package/packages/dd-trace/src/random_sampler.js +40 -0
  294. package/packages/dd-trace/src/rate_limiter.js +4 -4
  295. package/packages/dd-trace/src/remote_config/index.js +3 -7
  296. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  297. package/packages/dd-trace/src/require-package-json.js +1 -1
  298. package/packages/dd-trace/src/ritm.js +4 -4
  299. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  300. package/packages/dd-trace/src/sampler.js +33 -4
  301. package/packages/dd-trace/src/sampling_rule.js +12 -3
  302. package/packages/dd-trace/src/scope.js +1 -1
  303. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  304. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  305. package/packages/dd-trace/src/span_processor.js +3 -3
  306. package/packages/dd-trace/src/span_sampler.js +4 -1
  307. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  308. package/packages/dd-trace/src/startup-log.js +2 -2
  309. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  310. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  311. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  312. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  313. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  314. package/packages/dd-trace/src/util.js +1 -1
  315. package/version.js +1 -0
  316. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  317. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  318. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  319. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -9,7 +9,7 @@ const { DD_EXTERNAL_ENV } = process.env
9
9
  const uuidSource =
10
10
  '[0-9a-f]{8}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{12}|[0-9a-f]{8}(?:-[0-9a-f]{4}){4}$'
11
11
  const containerSource = '[0-9a-f]{64}'
12
- const taskSource = '[0-9a-f]{32}-\\d+'
12
+ const taskSource = String.raw`[0-9a-f]{32}-\d+`
13
13
  const lineReg = /^(\d+):([^:]*):(.+)$/m
14
14
  const entityReg = new RegExp(`.*(${uuidSource}|${containerSource}|${taskSource})(?:\\.scope)?$`, 'm')
15
15
 
@@ -38,10 +38,12 @@ class FormData extends Readable {
38
38
  }
39
39
 
40
40
  _appendFile (key, value, { filename, contentType = 'application/octet-stream' }) {
41
- this._data.push(`Content-Disposition: form-data; name="${key}"; filename="${filename}"\r\n`)
42
- this._data.push(`Content-Type: ${contentType}\r\n\r\n`)
43
- this._data.push(value)
44
- this._data.push('\r\n')
41
+ this._data.push(
42
+ `Content-Disposition: form-data; name="${key}"; filename="${filename}"\r\n`,
43
+ `Content-Type: ${contentType}\r\n\r\n`,
44
+ value,
45
+ '\r\n'
46
+ )
45
47
  }
46
48
 
47
49
  _read () {
@@ -100,7 +100,7 @@ function request (data, options, callback) {
100
100
  options.url || options.hostname || `http://localhost:${options.port}`
101
101
  ).href
102
102
  errorMessage = `Error from ${fullUrl}: ${res.statusCode} ${http.STATUS_CODES[res.statusCode]}.`
103
- } catch (e) {
103
+ } catch {
104
104
  // ignore error
105
105
  }
106
106
  const responseData = buffer.toString()
@@ -1,7 +1,7 @@
1
1
  function safeJSONStringify (value) {
2
2
  return JSON.stringify(
3
3
  value,
4
- (key, value) => key !== 'dd-api-key' ? value : undefined,
4
+ (key, value) => key === 'dd-api-key' ? undefined : value,
5
5
  process.env.DD_TRACE_BEAUTIFUL_LOGS ? 2 : undefined
6
6
  )
7
7
  }
@@ -5,7 +5,7 @@ const https = require('https')
5
5
  class ExternalLogger {
6
6
  // Note: these attribute names match the corresponding entry in the JSON payload.
7
7
  constructor ({
8
- ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval = 10000, timeout = 2000, limit = 1000
8
+ ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval = 10_000, timeout = 2000, limit = 1000
9
9
  }) {
10
10
  this.enabled = !!apiKey
11
11
 
@@ -128,10 +128,10 @@ class ExternalLogger {
128
128
  }
129
129
 
130
130
  class NoopExternalLogger {
131
- log () { }
132
- enqueue () { }
133
- shutdown () { }
134
- flush () { }
131
+ log () {}
132
+ enqueue () {}
133
+ shutdown () {}
134
+ flush () {}
135
135
  }
136
136
 
137
137
  module.exports.ExternalLogger = ExternalLogger
@@ -22,11 +22,7 @@ class FlareFile extends Writable {
22
22
 
23
23
  this._reserve(length)
24
24
 
25
- if (Buffer.isBuffer(chunk)) {
26
- this.length += chunk.copy(this._buffer, this.length)
27
- } else {
28
- this.length += this._buffer.write(chunk, encoding)
29
- }
25
+ this.length += Buffer.isBuffer(chunk) ? chunk.copy(this._buffer, this.length) : this._buffer.write(chunk, encoding)
30
26
 
31
27
  callback()
32
28
  }
@@ -224,7 +224,7 @@ function addTag (meta, metrics, key, value, nested) {
224
224
  meta[key] = value
225
225
  break
226
226
  case 'number':
227
- if (isNaN(value)) break
227
+ if (Number.isNaN(value)) break
228
228
  metrics[key] = value
229
229
  break
230
230
  case 'boolean':
@@ -9,7 +9,7 @@ function removeUserSensitiveInfo (repositoryUrl) {
9
9
  return `${parsedUrl.origin}${parsedUrl.pathname}`
10
10
  }
11
11
  return repositoryUrl
12
- } catch (e) {
12
+ } catch {
13
13
  // if protocol isn't https, no password will be used
14
14
  return repositoryUrl
15
15
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { randomFillSync } = require('crypto')
4
4
 
5
- const UINT_MAX = 4294967296
5
+ const UINT_MAX = 4_294_967_296
6
6
 
7
7
  const data = new Uint8Array(8 * 8192)
8
8
  const zeroId = new Uint8Array(8)
@@ -26,6 +26,10 @@ class Identifier {
26
26
  : toNumberString(this._buffer, radix)
27
27
  }
28
28
 
29
+ toBigInt () {
30
+ return Buffer.from(this._buffer).readBigUInt64BE(0)
31
+ }
32
+
29
33
  toBuffer () {
30
34
  return this._buffer
31
35
  }
@@ -61,12 +65,12 @@ function createBuffer (value) {
61
65
 
62
66
  const size = Math.ceil(value.length / 16) * 16
63
67
  const bytes = size / 2
64
- const buffer = new Array(bytes)
68
+ const buffer = []
65
69
 
66
70
  value = value.padStart(size, '0')
67
71
 
68
72
  for (let i = 0; i < bytes; i++) {
69
- buffer[i] = parseInt(value.substring(i * 2, i * 2 + 2), 16)
73
+ buffer[i] = Number.parseInt(value.slice(i * 2, i * 2 + 2), 16)
70
74
  }
71
75
 
72
76
  return buffer
@@ -86,7 +90,7 @@ function fromString (str, raddix) {
86
90
  const sign = pos
87
91
 
88
92
  while (pos < len) {
89
- const chr = parseInt(str[pos++], raddix)
93
+ const chr = Number.parseInt(str[pos++], raddix)
90
94
 
91
95
  if (!(chr >= 0)) break // NaN
92
96
 
@@ -161,7 +165,7 @@ function pseudoRandom () {
161
165
 
162
166
  // Read a buffer to unsigned integer bytes.
163
167
  function readInt32 (buffer, offset) {
164
- return (buffer[offset + 0] * 16777216) +
168
+ return (buffer[offset + 0] * 16_777_216) +
165
169
  (buffer[offset + 1] << 16) +
166
170
  (buffer[offset + 2] << 8) +
167
171
  buffer[offset + 3]
@@ -178,4 +182,6 @@ function writeUInt32BE (buffer, value, offset) {
178
182
  buffer[0 + offset] = value & 255
179
183
  }
180
184
 
181
- module.exports = (value, radix) => new Identifier(value, radix)
185
+ module.exports = function createIdentifier (value, radix) {
186
+ return new Identifier(value, radix)
187
+ }
@@ -1,27 +1,15 @@
1
1
  'use strict'
2
2
 
3
- const satisfies = require('semifies')
4
- const logger = require('./log')
5
3
  const { addHook } = require('import-in-the-middle')
6
4
  const dc = require('dc-polyfill')
7
5
 
8
- if (satisfies(process.versions.node, '>=14.13.1')) {
9
- const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
10
- addHook((name, namespace) => {
11
- if (moduleLoadStartChannel.hasSubscribers) {
12
- moduleLoadStartChannel.publish({
13
- filename: name,
14
- module: namespace
15
- })
16
- }
17
- })
18
- module.exports = require('import-in-the-middle')
19
- } else {
20
- logger.warn('ESM is not fully supported by this version of Node.js, ' +
21
- 'so dd-trace will not intercept ESM loading.')
22
- module.exports = () => ({
23
- unhook: () => {}
24
- })
25
- module.exports.addHook = () => {}
26
- module.exports.removeHook = () => {}
27
- }
6
+ const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
7
+ addHook((name, namespace) => {
8
+ if (moduleLoadStartChannel.hasSubscribers) {
9
+ moduleLoadStartChannel.publish({
10
+ filename: name,
11
+ module: namespace
12
+ })
13
+ }
14
+ })
15
+ module.exports = require('import-in-the-middle')
@@ -25,11 +25,11 @@ let __lambdaTimeout
25
25
  function checkTimeout (context) {
26
26
  const remainingTimeInMillis = context.getRemainingTimeInMillis()
27
27
 
28
- let apmFlushDeadline = parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
28
+ let apmFlushDeadline = Number.parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
29
29
  apmFlushDeadline = apmFlushDeadline < 0 ? 100 : apmFlushDeadline
30
30
 
31
31
  __lambdaTimeout = setTimeout(() => {
32
- timeoutChannel.publish(undefined)
32
+ timeoutChannel.publish()
33
33
  }, remainingTimeInMillis - apmFlushDeadline)
34
34
  }
35
35
 
@@ -43,14 +43,14 @@ function checkTimeout (context) {
43
43
  */
44
44
  function crashFlush () {
45
45
  const activeSpan = tracer.scope().active()
46
- if (activeSpan !== null) {
46
+ if (activeSpan === null) {
47
+ log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
48
+ } else {
47
49
  const error = new ImpendingTimeout('Datadog detected an impending timeout')
48
50
  activeSpan.addTags({
49
51
  [ERROR_MESSAGE]: error.message,
50
52
  [ERROR_TYPE]: error.name
51
53
  })
52
- } else {
53
- log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
54
54
  }
55
55
 
56
56
  tracer._processor.killAll()
@@ -70,7 +70,7 @@ function extractContext (args) {
70
70
  if (context === undefined || context.getRemainingTimeInMillis === undefined) {
71
71
  context = args.length > 2 ? args[2] : undefined
72
72
  if (context === undefined || context.getRemainingTimeInMillis === undefined) {
73
- throw Error('Could not extract context')
73
+ throw new Error('Could not extract context')
74
74
  }
75
75
  }
76
76
  return context
@@ -60,7 +60,10 @@ function patchLambdaHandler (lambdaHandler) {
60
60
  const lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT
61
61
  const originalLambdaHandler = process.env.DD_LAMBDA_HANDLER
62
62
 
63
- if (originalLambdaHandler !== undefined) {
63
+ if (originalLambdaHandler === undefined) {
64
+ // Instrumentation is done manually.
65
+ addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
66
+ } else {
64
67
  const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
65
68
  const [_module, handlerPath] = _extractModuleNameAndHandlerPath(moduleAndHandler)
66
69
 
@@ -70,7 +73,4 @@ if (originalLambdaHandler !== undefined) {
70
73
  for (const lambdaFilePath of lambdaFilePaths) {
71
74
  addHook({ name: lambdaFilePath }, patchLambdaModule(handlerPath))
72
75
  }
73
- } else {
74
- // Instrumentation is done manually.
75
- addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
76
76
  }
@@ -31,7 +31,7 @@ const {
31
31
  */
32
32
  function _extractModuleRootAndHandler (fullHandler) {
33
33
  const handlerString = path.basename(fullHandler)
34
- const moduleRoot = fullHandler.substring(0, fullHandler.indexOf(handlerString))
34
+ const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
35
35
 
36
36
  return [moduleRoot, handlerString]
37
37
  }
@@ -9,7 +9,7 @@ const {
9
9
  parseModelId
10
10
  } = require('../../../../datadog-plugin-aws-sdk/src/services/bedrockruntime/utils')
11
11
 
12
- const ENABLED_OPERATIONS = ['invokeModel']
12
+ const ENABLED_OPERATIONS = new Set(['invokeModel'])
13
13
 
14
14
  const requestIdsToTokens = {}
15
15
 
@@ -21,7 +21,7 @@ class BedrockRuntimeLLMObsPlugin extends BaseLLMObsPlugin {
21
21
  const request = response.request
22
22
  const operation = request.operation
23
23
  // avoids instrumenting other non supported runtime operations
24
- if (!ENABLED_OPERATIONS.includes(operation)) {
24
+ if (!ENABLED_OPERATIONS.has(operation)) {
25
25
  return
26
26
  }
27
27
  const { modelProvider, modelName } = parseModelId(request.params.modelId)
@@ -40,8 +40,8 @@ class BedrockRuntimeLLMObsPlugin extends BaseLLMObsPlugin {
40
40
  const outputTokenCount = headers['x-amzn-bedrock-output-token-count']
41
41
 
42
42
  requestIdsToTokens[requestId] = {
43
- inputTokensFromHeaders: inputTokenCount && parseInt(inputTokenCount),
44
- outputTokensFromHeaders: outputTokenCount && parseInt(outputTokenCount)
43
+ inputTokensFromHeaders: inputTokenCount && Number.parseInt(inputTokenCount),
44
+ outputTokensFromHeaders: outputTokenCount && Number.parseInt(outputTokenCount)
45
45
  }
46
46
  })
47
47
  }
@@ -64,8 +64,8 @@ class BedrockRuntimeLLMObsPlugin extends BaseLLMObsPlugin {
64
64
 
65
65
  // add metadata tags
66
66
  this._tagger.tagMetadata(span, {
67
- temperature: parseFloat(requestParams.temperature) || 0.0,
68
- max_tokens: parseInt(requestParams.maxTokens) || 0
67
+ temperature: Number.parseFloat(requestParams.temperature) || 0,
68
+ max_tokens: Number.parseInt(requestParams.maxTokens) || 0
69
69
  })
70
70
 
71
71
  // add I/O tags
@@ -5,16 +5,12 @@ const { spanHasError } = require('../../../util')
5
5
 
6
6
  class LangChainLLMObsChainHandler extends LangChainLLMObsHandler {
7
7
  setMetaTags ({ span, inputs, results }) {
8
- let input, output
8
+ let input
9
9
  if (inputs) {
10
10
  input = this.formatIO(inputs)
11
11
  }
12
12
 
13
- if (!results || spanHasError(span)) {
14
- output = ''
15
- } else {
16
- output = this.formatIO(results)
17
- }
13
+ const output = !results || spanHasError(span) ? '' : this.formatIO(results)
18
14
 
19
15
  // chain spans will always be workflows
20
16
  this._tagger.tagTextIO(span, input, output)
@@ -61,12 +61,12 @@ class LangChainLLMObsChatModelHandler extends LangChainLLMObsHandler {
61
61
 
62
62
  if (!isWorkflow && !tokensSetTopLevel) {
63
63
  const { tokens, runId } = this.checkTokenUsageFromAIMessage(chatCompletionMessage)
64
- if (!tokensPerRunId[runId]) {
65
- tokensPerRunId[runId] = tokens
66
- } else {
64
+ if (tokensPerRunId[runId]) {
67
65
  tokensPerRunId[runId].inputTokens += tokens.inputTokens
68
66
  tokensPerRunId[runId].outputTokens += tokens.outputTokens
69
67
  tokensPerRunId[runId].totalTokens += tokens.totalTokens
68
+ } else {
69
+ tokensPerRunId[runId] = tokens
70
70
  }
71
71
  }
72
72
  }
@@ -9,8 +9,8 @@ const ANTHROPIC_PROVIDER_NAME = 'anthropic'
9
9
  const BEDROCK_PROVIDER_NAME = 'amazon_bedrock'
10
10
  const OPENAI_PROVIDER_NAME = 'openai'
11
11
 
12
- const SUPPORTED_INTEGRATIONS = ['openai']
13
- const LLM_SPAN_TYPES = ['llm', 'chat_model', 'embedding']
12
+ const SUPPORTED_INTEGRATIONS = new Set(['openai'])
13
+ const LLM_SPAN_TYPES = new Set(['llm', 'chat_model', 'embedding'])
14
14
  const LLM = 'llm'
15
15
  const WORKFLOW = 'workflow'
16
16
  const EMBEDDING = 'embedding'
@@ -94,18 +94,18 @@ class BaseLangChainLLMObsPlugin extends LLMObsPlugin {
94
94
  span?.context()._tags[`langchain.request.${provider}.parameters.model_kwargs.max_tokens`]
95
95
 
96
96
  if (temperature) {
97
- metadata.temperature = parseFloat(temperature)
97
+ metadata.temperature = Number.parseFloat(temperature)
98
98
  }
99
99
 
100
100
  if (maxTokens) {
101
- metadata.maxTokens = parseInt(maxTokens)
101
+ metadata.maxTokens = Number.parseInt(maxTokens)
102
102
  }
103
103
 
104
104
  this._tagger.tagMetadata(span, metadata)
105
105
  }
106
106
 
107
107
  getKind (type, provider) {
108
- if (LLM_SPAN_TYPES.includes(type)) {
108
+ if (LLM_SPAN_TYPES.has(type)) {
109
109
  const llmobsIntegration = this.getIntegrationName(type, provider)
110
110
 
111
111
  if (!this.isLLMIntegrationEnabled(llmobsIntegration)) {
@@ -129,7 +129,7 @@ class BaseLangChainLLMObsPlugin extends LLMObsPlugin {
129
129
  }
130
130
 
131
131
  isLLMIntegrationEnabled (integration) {
132
- return SUPPORTED_INTEGRATIONS.includes(integration) && pluginManager?._pluginsByName[integration]?.llmobs?._enabled
132
+ return SUPPORTED_INTEGRATIONS.has(integration) && pluginManager?._pluginsByName[integration]?.llmobs?._enabled
133
133
  }
134
134
  }
135
135
 
@@ -105,7 +105,7 @@ class OpenAiLLMObsPlugin extends LLMObsPlugin {
105
105
  const embeddingInput = embeddingInputs.map(input => ({ text: input }))
106
106
 
107
107
  if (error) {
108
- this._tagger.tagEmbeddingIO(span, embeddingInput, undefined)
108
+ this._tagger.tagEmbeddingIO(span, embeddingInput)
109
109
  return
110
110
  }
111
111
 
@@ -121,7 +121,7 @@ class LLMObs extends NoopLLMObs {
121
121
  }
122
122
 
123
123
  const kind = validateKind(options.kind) // will throw if kind is undefined or not an expected kind
124
- let name = options.name || (fn?.name ? fn.name : undefined) || kind
124
+ let name = options.name || fn?.name || kind
125
125
 
126
126
  if (!name) {
127
127
  logger.warn('No span name provided for `wrap`. Defaulting to "unnamed-anonymous-function".')
@@ -285,7 +285,7 @@ class LLMObs extends NoopLLMObs {
285
285
  }
286
286
  if (!(span instanceof Span)) {
287
287
  err = 'invalid_span'
288
- throw new Error('Span must be a valid Span object.')
288
+ throw new TypeError('Span must be a valid Span object.')
289
289
  }
290
290
  if (!LLMObsTagger.tagMap.has(span)) {
291
291
  err = 'invalid_span'