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
@@ -51,7 +51,7 @@ function sanitizedExec (
51
51
  try {
52
52
  let result = cp.execFileSync(cmd, flags, { stdio: 'pipe' }).toString()
53
53
  if (shouldTrim) {
54
- result = result.replace(/(\r\n|\n|\r)/gm, '')
54
+ result = result.replaceAll(/(\r\n|\n|\r)/gm, '')
55
55
  }
56
56
  if (durationMetric) {
57
57
  distributionMetric(durationMetric.name, durationMetric.tags, Date.now() - startTime)
@@ -76,7 +76,7 @@ function isDirectory (path) {
76
76
  try {
77
77
  const stats = fs.statSync(path)
78
78
  return stats.isDirectory()
79
- } catch (e) {
79
+ } catch {
80
80
  return false
81
81
  }
82
82
  }
@@ -87,7 +87,7 @@ function isGitAvailable () {
87
87
  try {
88
88
  cp.execFileSync(command, ['git'], { stdio: 'pipe' })
89
89
  return true
90
- } catch (e) {
90
+ } catch {
91
91
  incrementCountMetric(TELEMETRY_GIT_COMMAND_ERRORS, { command: 'check_git', exitCode: 'missing' })
92
92
  return false
93
93
  }
@@ -108,11 +108,11 @@ function getGitVersion () {
108
108
  const gitVersionMatches = gitVersionString.match(/git version (\d+)\.(\d+)\.(\d+)/)
109
109
  try {
110
110
  return {
111
- major: parseInt(gitVersionMatches[1]),
112
- minor: parseInt(gitVersionMatches[2]),
113
- patch: parseInt(gitVersionMatches[3])
111
+ major: Number.parseInt(gitVersionMatches[1]),
112
+ minor: Number.parseInt(gitVersionMatches[2]),
113
+ patch: Number.parseInt(gitVersionMatches[3])
114
114
  }
115
- } catch (e) {
115
+ } catch {
116
116
  return null
117
117
  }
118
118
  }
@@ -196,7 +196,7 @@ function getLatestCommits () {
196
196
  const result = cp.execFileSync('git', ['log', '--format=%H', '-n 1000', '--since="1 month ago"'], { stdio: 'pipe' })
197
197
  .toString()
198
198
  .split('\n')
199
- .filter(commit => commit)
199
+ .filter(Boolean)
200
200
  distributionMetric(TELEMETRY_GIT_COMMAND_MS, { command: 'get_local_commits' }, Date.now() - startTime)
201
201
  return result
202
202
  } catch (err) {
@@ -209,6 +209,138 @@ function getLatestCommits () {
209
209
  }
210
210
  }
211
211
 
212
+ function getGitDiff (baseCommit, targetCommit) {
213
+ const flags = ['diff', '-U0', '--word-diff=porcelain', baseCommit]
214
+ if (targetCommit) {
215
+ flags.push(targetCommit)
216
+ }
217
+ return sanitizedExec(
218
+ 'git',
219
+ flags,
220
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'diff' } },
221
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'diff' } },
222
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'diff' } },
223
+ false // important not to trim or we'll lose the line breaks which we need to detect impacted tests
224
+ )
225
+ }
226
+
227
+ function getGitRemoteName () {
228
+ const upstreamRemote = sanitizedExec(
229
+ 'git',
230
+ ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{upstream}'],
231
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_remote_name' } },
232
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_remote_name' } },
233
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_remote_name' } }
234
+ )
235
+
236
+ if (upstreamRemote) {
237
+ return upstreamRemote.split('/')[0]
238
+ }
239
+
240
+ const remotes = sanitizedExec(
241
+ 'git',
242
+ ['remote'],
243
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_remote_name' } },
244
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_remote_name' } },
245
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_remote_name' } },
246
+ false
247
+ )
248
+
249
+ return remotes.split('\n')[0] || 'origin'
250
+ }
251
+
252
+ function getSourceBranch () {
253
+ return sanitizedExec(
254
+ 'git',
255
+ ['rev-parse', '--abbrev-ref', 'HEAD'],
256
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_source_branch' } },
257
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_source_branch' } },
258
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_source_branch' } }
259
+ )
260
+ }
261
+
262
+ function checkAndFetchBranch (branch, remoteName) {
263
+ try {
264
+ // `git show-ref --verify --quiet refs/remotes/${remoteName}/${branch}` will exit 0 if the branch exists
265
+ // Otherwise it will exit 1
266
+ cp.execFileSync(
267
+ 'git',
268
+ ['show-ref', '--verify', '--quiet', `refs/remotes/${remoteName}/${branch}`],
269
+ { stdio: 'pipe' }
270
+ )
271
+ // branch exists locally, so we finish
272
+ } catch {
273
+ // branch does not exist locally, so we will check the remote
274
+ try {
275
+ // IMPORTANT: we use timeouts because these commands hang if the branch can't be found
276
+ // `git ls-remote --heads origin my-branch` will exit 0 even if the branch doesn't exist.
277
+ // The piece of information we need is whether the command outputs anything.
278
+ // `git ls-remote --heads origin my-branch` could exit an error code if the remote does not exist.
279
+ const remoteHeads = cp.execFileSync(
280
+ 'git',
281
+ ['ls-remote', '--heads', remoteName, branch],
282
+ { stdio: 'pipe', timeout: 2000 }
283
+ )
284
+ if (remoteHeads) {
285
+ // branch exists, so we'll fetch it
286
+ cp.execFileSync(
287
+ 'git',
288
+ ['fetch', '--depth', '1', remoteName, branch],
289
+ { stdio: 'pipe', timeout: 5000 }
290
+ )
291
+ }
292
+ } catch (e) {
293
+ // branch does not exist or couldn't be fetched, so we can't do anything
294
+ log.error('Git plugin error checking and fetching branch', e)
295
+ }
296
+ }
297
+ }
298
+
299
+ function getLocalBranches (remoteName) {
300
+ const localBranches = sanitizedExec(
301
+ 'git',
302
+ ['for-each-ref', '--format=%(refname:short)', `refs/remotes/${remoteName}`],
303
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_local_branches' } },
304
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_local_branches' } },
305
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_local_branches' } },
306
+ false
307
+ )
308
+ try {
309
+ return localBranches.split('\n').filter(Boolean)
310
+ } catch {
311
+ return []
312
+ }
313
+ }
314
+
315
+ function getMergeBase (baseBranch, sourceBranch) {
316
+ return sanitizedExec(
317
+ 'git',
318
+ ['merge-base', baseBranch, sourceBranch],
319
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_merge_base' } },
320
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_merge_base' } },
321
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_merge_base' } }
322
+ )
323
+ }
324
+
325
+ function getCounts (sourceBranch, candidateBranch) {
326
+ const counts = sanitizedExec(
327
+ 'git',
328
+ ['rev-list', '--left-right', '--count', `${candidateBranch}...${sourceBranch}`],
329
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_counts' } },
330
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_counts' } },
331
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_counts' } }
332
+ )
333
+ try {
334
+ if (!counts) {
335
+ return { behind: null, ahead: null }
336
+ }
337
+ const [behind, ahead] = counts.split(/\s+/).map(Number)
338
+ return { behind, ahead }
339
+ } catch {
340
+ return { behind: null, ahead: null }
341
+ }
342
+ }
343
+
212
344
  function getCommitsRevList (commitsToExclude, commitsToInclude) {
213
345
  let result = null
214
346
 
@@ -231,7 +363,7 @@ function getCommitsRevList (commitsToExclude, commitsToInclude) {
231
363
  { stdio: 'pipe', maxBuffer: GIT_REV_LIST_MAX_BUFFER })
232
364
  .toString()
233
365
  .split('\n')
234
- .filter(commit => commit)
366
+ .filter(Boolean)
235
367
  } catch (err) {
236
368
  log.error('Get commits to upload failed: %s', err.message)
237
369
  incrementCountMetric(
@@ -252,7 +384,7 @@ function generatePackFilesForCommits (commitsToUpload) {
252
384
  return []
253
385
  }
254
386
 
255
- const randomPrefix = String(Math.floor(Math.random() * 10000))
387
+ const randomPrefix = String(Math.floor(Math.random() * 10_000))
256
388
  const temporaryPath = path.join(tmpFolder, randomPrefix)
257
389
  const cwdPath = path.join(process.cwd(), randomPrefix)
258
390
 
@@ -270,7 +402,7 @@ function generatePackFilesForCommits (commitsToUpload) {
270
402
  targetPath
271
403
  ],
272
404
  { stdio: 'pipe', input: commitsToUpload.join('\n') }
273
- ).toString().split('\n').filter(commit => commit).map(commit => `${targetPath}-${commit}.pack`)
405
+ ).toString().split('\n').filter(Boolean).map(commit => `${targetPath}-${commit}.pack`)
274
406
  }
275
407
 
276
408
  try {
@@ -362,6 +494,20 @@ function getGitMetadata (ciMetadata) {
362
494
  return tags
363
495
  }
364
496
 
497
+ function getGitInformationDiscrepancy () {
498
+ const gitRepositoryUrl = getRepositoryUrl()
499
+
500
+ const gitCommitSHA = sanitizedExec(
501
+ 'git',
502
+ ['rev-parse', 'HEAD'],
503
+ { name: TELEMETRY_GIT_COMMAND, tags: { command: 'get_commit_sha' } },
504
+ { name: TELEMETRY_GIT_COMMAND_MS, tags: { command: 'get_commit_sha' } },
505
+ { name: TELEMETRY_GIT_COMMAND_ERRORS, tags: { command: 'get_commit_sha' } }
506
+ )
507
+
508
+ return { gitRepositoryUrl, gitCommitSHA }
509
+ }
510
+
365
511
  module.exports = {
366
512
  getGitMetadata,
367
513
  getLatestCommits,
@@ -371,5 +517,13 @@ module.exports = {
371
517
  GIT_REV_LIST_MAX_BUFFER,
372
518
  isShallowRepository,
373
519
  unshallowRepository,
374
- isGitAvailable
520
+ isGitAvailable,
521
+ getGitInformationDiscrepancy,
522
+ getGitDiff,
523
+ getGitRemoteName,
524
+ getSourceBranch,
525
+ checkAndFetchBranch,
526
+ getLocalBranches,
527
+ getMergeBase,
528
+ getCounts
375
529
  }
@@ -85,7 +85,7 @@ function extractInferredProxyContext (headers) {
85
85
 
86
86
  return {
87
87
  requestTime: headers[PROXY_HEADER_START_TIME_MS]
88
- ? parseInt(headers[PROXY_HEADER_START_TIME_MS], 10)
88
+ ? Number.parseInt(headers[PROXY_HEADER_START_TIME_MS], 10)
89
89
  : null,
90
90
  method: headers[PROXY_HEADER_HTTPMETHOD],
91
91
  path: headers[PROXY_HEADER_PATH],
@@ -33,7 +33,7 @@ const privateIPMatcher = new BlockList()
33
33
  for (const cidr of privateCIDRs) {
34
34
  const [address, prefix] = cidr.split('/')
35
35
 
36
- privateIPMatcher.addSubnet(address, parseInt(prefix), net.isIPv6(address) ? 'ipv6' : 'ipv4')
36
+ privateIPMatcher.addSubnet(address, Number.parseInt(prefix), net.isIPv6(address) ? 'ipv6' : 'ipv4')
37
37
  }
38
38
 
39
39
  function extractIp (config, req) {
@@ -4,32 +4,49 @@ const RE_NEWLINE = /\n/g
4
4
  const RE_TAB = /\t/g
5
5
 
6
6
  function normalize (text, limit = 128) {
7
- if (!text) return
8
- if (typeof text !== 'string' || !text || (typeof text === 'string' && text.length === 0)) return
7
+ if (typeof text !== 'string' || text.length === 0) return
8
+
9
+ if (text.length > limit) {
10
+ return text.slice(0, limit) + '...'
11
+ }
9
12
 
10
13
  text = text
11
- .replace(RE_NEWLINE, '\\n')
12
- .replace(RE_TAB, '\\t')
14
+ .replaceAll(RE_NEWLINE, String.raw`\n`)
15
+ .replaceAll(RE_TAB, String.raw`\t`)
13
16
 
17
+ // In case the replace above matched, more characters were added that must now be considered.
14
18
  if (text.length > limit) {
15
- return text.substring(0, limit) + '...'
19
+ return text.slice(0, limit) + '...'
16
20
  }
17
21
 
18
22
  return text
19
23
  }
20
24
 
21
- function isPromptCompletionSampled (sampler) {
22
- return sampler.isSampled()
25
+ /**
26
+ * Determines whether a prompt completion should be sampled based on the configured sampling rate.
27
+ *
28
+ * @param {Sampler} sampler
29
+ * @param {import('index').Span|import('index').SpanContext} span
30
+ * @returns {boolean} `true` if the prompt completion should be sampled, otherwise `false`.
31
+ */
32
+ function isPromptCompletionSampled (sampler, span) {
33
+ return sampler.isSampled(span)
23
34
  }
24
35
 
25
- module.exports = function (integrationName, tracerConfig) {
36
+ module.exports = function makeUtilities (integrationName, tracerConfig) {
26
37
  const integrationConfig = tracerConfig[integrationName] || {}
27
38
  const { spanCharLimit, spanPromptCompletionSampleRate } = integrationConfig
28
39
 
29
- const sampler = new Sampler(spanPromptCompletionSampleRate ?? 1.0)
40
+ const sampler = new Sampler(spanPromptCompletionSampleRate ?? 1)
30
41
 
31
42
  return {
32
43
  normalize: str => normalize(str, spanCharLimit),
33
- isPromptCompletionSampled: () => isPromptCompletionSampled(sampler)
44
+ /**
45
+ * Determines whether a prompt completion should be sampled based on the configured sampling rate.
46
+ *
47
+ * @param {import('index').Span|import('index').SpanContext} span
48
+ * @returns {boolean} `true` if the prompt completion should be sampled, otherwise `false`.
49
+ */
50
+ isPromptCompletionSampled: (span) => isPromptCompletionSampled(sampler, span)
34
51
  }
35
52
  }
@@ -34,7 +34,14 @@ function getCallSites (constructorOpt) {
34
34
  *
35
35
  * @param {Function} constructorOpt - Function to pass along to Error.captureStackTrace
36
36
  * @param {number} [limit=Infinity] - The maximum number of frames to return
37
- * @returns {{ file: string, line: number, method: (string|undefined), type: (string|undefined) }[]} - A
37
+ * @returns {StackFrame[]} - A list of stack frames from user-land code
38
+ *
39
+ * @typedef {Object} StackFrame
40
+ * @property {string} file - The file path of the frame
41
+ * @property {number} line - The line number in the file
42
+ * @property {number} column - The column number in the file
43
+ * @property {string} [method] - The function name, if available
44
+ * @property {string} [type] - The type name, if available
38
45
  */
39
46
  function getUserLandFrames (constructorOpt, limit = Infinity) {
40
47
  const callsites = getCallSites(constructorOpt)
@@ -72,7 +79,7 @@ function getUserLandFrames (constructorOpt, limit = Infinity) {
72
79
  // However, the tests in `packages/dd-trace/test/plugins/util/stacktrace.spec.js` will fail on my machine
73
80
  // because I have the source code in a parent folder called `node_modules`. So the code below thinks that
74
81
  // it's not in user-land
75
- const relativePath = relative(cwd, containsFileProtocol ? filename.substring(7) : filename)
82
+ const relativePath = relative(cwd, containsFileProtocol ? filename.slice(7) : filename)
76
83
  if (relativePath.startsWith('node_modules' + sep) || relativePath.includes(sep + 'node_modules' + sep)) {
77
84
  continue
78
85
  }