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
@@ -261,9 +261,11 @@ class OpenAiTracingPlugin extends TracingPlugin {
261
261
  if (error) {
262
262
  this.metrics.increment('openai.request.error', 1, tags)
263
263
  } else {
264
- tags.push(`org:${headers['openai-organization']}`)
265
- tags.push(`endpoint:${endpoint}`) // just "/v1/models", no method
266
- tags.push(`model:${headers['openai-model'] || body.model}`)
264
+ tags.push(
265
+ `org:${headers['openai-organization']}`,
266
+ `endpoint:${endpoint}`,
267
+ `model:${headers['openai-model'] || body.model}`
268
+ )
267
269
  }
268
270
 
269
271
  this.metrics.distribution('openai.request.duration', duration * 1000, tags)
@@ -329,7 +331,7 @@ class OpenAiTracingPlugin extends TracingPlugin {
329
331
  sendLog (methodName, span, tags, openaiStore, error) {
330
332
  if (!openaiStore) return
331
333
  if (!Object.keys(openaiStore).length) return
332
- if (!this.sampler.isSampled()) return
334
+ if (!this.sampler.isSampled(span)) return
333
335
 
334
336
  const log = {
335
337
  status: error ? 'error' : 'info',
@@ -725,7 +727,7 @@ function commonCreateResponseExtraction (tags, body, openaiStore, methodName) {
725
727
  const choice = body.choices[choiceIdx]
726
728
 
727
729
  // logprobs can be null and we still want to tag it as 'returned' even when set to 'null'
728
- const specifiesLogProb = Object.keys(choice).indexOf('logprobs') !== -1
730
+ const specifiesLogProb = Object.keys(choice).includes('logprobs')
729
731
 
730
732
  tags[`openai.response.choices.${choiceIdx}.finish_reason`] = choice.finish_reason
731
733
  tags[`openai.response.choices.${choiceIdx}.logprobs`] = specifiesLogProb ? 'returned' : undefined
@@ -764,19 +766,17 @@ function usageExtraction (tags, body, methodName, openaiStore) {
764
766
  } else if (body.model && ['chat.completions.create', 'completions.create'].includes(methodName)) {
765
767
  // estimate tokens based on method name for completions and chat completions
766
768
  const { model } = body
767
- let promptEstimated = false
768
- let completionEstimated = false
769
769
 
770
770
  // prompt tokens
771
771
  const payload = openaiStore
772
772
  const promptTokensCount = countPromptTokens(methodName, payload, model)
773
773
  promptTokens = promptTokensCount.promptTokens
774
- promptEstimated = promptTokensCount.promptEstimated
774
+ const promptEstimated = promptTokensCount.promptEstimated
775
775
 
776
776
  // completion tokens
777
777
  const completionTokensCount = countCompletionTokens(body, model)
778
778
  completionTokens = completionTokensCount.completionTokens
779
- completionEstimated = completionTokensCount.completionEstimated
779
+ const completionEstimated = completionTokensCount.completionEstimated
780
780
 
781
781
  // total tokens
782
782
  totalTokens = promptTokens + completionTokens
@@ -790,7 +790,7 @@ function usageExtraction (tags, body, methodName, openaiStore) {
790
790
  }
791
791
 
792
792
  function truncateApiKey (apiKey) {
793
- return apiKey && `sk-...${apiKey.substr(apiKey.length - 4)}`
793
+ return apiKey && `sk-...${apiKey.slice(-4)}`
794
794
  }
795
795
 
796
796
  function tagChatCompletionRequestContent (contents, messageIdx, tags) {
@@ -989,15 +989,9 @@ function normalizeStringOrTokenArray (input, truncate) {
989
989
 
990
990
  function defensiveArrayLength (maybeArray) {
991
991
  if (maybeArray) {
992
- if (Array.isArray(maybeArray)) {
993
- return maybeArray.length
994
- } else {
995
- // case of a singular item (ie body.training_file vs body.training_files)
996
- return 1
997
- }
992
+ // Detect singular item (ie body.training_file vs body.training_files)
993
+ return Array.isArray(maybeArray) ? maybeArray.length : 1
998
994
  }
999
-
1000
- return undefined
1001
995
  }
1002
996
 
1003
997
  module.exports = OpenAiTracingPlugin
@@ -20,7 +20,7 @@ class OracledbPlugin extends DatabasePlugin {
20
20
  kind: 'client',
21
21
  meta: {
22
22
  'db.user': this.config.user,
23
- 'db.instance': url.pathname && url.pathname.substring(1),
23
+ 'db.instance': url.pathname && url.pathname.slice(1),
24
24
  'db.hostname': url.hostname,
25
25
  [CLIENT_PORT_KEY]: url.port
26
26
  }
@@ -3,6 +3,7 @@
3
3
  const { storage } = require('../../datadog-core')
4
4
  const id = require('../../dd-trace/src/id')
5
5
  const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
6
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
6
7
 
7
8
  const {
8
9
  TEST_STATUS,
@@ -34,7 +35,9 @@ const {
34
35
  TEST_NAME,
35
36
  TEST_IS_RUM_ACTIVE,
36
37
  TEST_BROWSER_VERSION,
37
- TEST_RETRY_REASON_TYPES
38
+ TEST_RETRY_REASON_TYPES,
39
+ TEST_IS_MODIFIED,
40
+ isModifiedTest
38
41
  } = require('../../dd-trace/src/plugins/util/test')
39
42
  const { RESOURCE_NAME } = require('../../../ext/tags')
40
43
  const { COMPONENT } = require('../../dd-trace/src/constants')
@@ -56,6 +59,16 @@ class PlaywrightPlugin extends CiPlugin {
56
59
  this.numFailedTests = 0
57
60
  this.numFailedSuites = 0
58
61
 
62
+ this.addSub('ci:playwright:test:is-modified', ({
63
+ filePath,
64
+ modifiedTests,
65
+ onDone
66
+ }) => {
67
+ const testSuite = getTestSuitePath(filePath, this.repositoryRoot)
68
+ const isModified = isModifiedTest(testSuite, 0, 0, modifiedTests, this.constructor.id)
69
+ onDone({ isModified })
70
+ })
71
+
59
72
  this.addSub('ci:playwright:session:finish', ({
60
73
  status,
61
74
  isEarlyFlakeDetectionEnabled,
@@ -90,7 +103,7 @@ class PlaywrightPlugin extends CiPlugin {
90
103
  finishAllTraceSpans(this.testSessionSpan)
91
104
  this.telemetry.count(TELEMETRY_TEST_SESSION, {
92
105
  provider: this.ciProviderName,
93
- autoInjected: !!process.env.DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER
106
+ autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
94
107
  })
95
108
  appClosingTelemetry()
96
109
  this.tracer._exporter.flush(onDone)
@@ -277,6 +290,7 @@ class PlaywrightPlugin extends CiPlugin {
277
290
  hasPassedAttemptToFixRetries,
278
291
  hasFailedAttemptToFixRetries,
279
292
  isAtrRetry,
293
+ isModified,
280
294
  onDone
281
295
  }) => {
282
296
  if (!span) return
@@ -327,6 +341,13 @@ class PlaywrightPlugin extends CiPlugin {
327
341
  if (isQuarantined) {
328
342
  span.setTag(TEST_MANAGEMENT_IS_QUARANTINED, 'true')
329
343
  }
344
+ if (isModified) {
345
+ span.setTag(TEST_IS_MODIFIED, 'true')
346
+ if (isEfdRetry) {
347
+ span.setTag(TEST_IS_RETRY, 'true')
348
+ span.setTag(TEST_RETRY_REASON, TEST_RETRY_REASON_TYPES.efd)
349
+ }
350
+ }
330
351
  steps.forEach(step => {
331
352
  const stepStartTime = step.startTime.getTime()
332
353
  const stepSpan = this.tracer.startSpan('playwright.step', {
@@ -342,7 +363,7 @@ class PlaywrightPlugin extends CiPlugin {
342
363
  stepSpan.setTag('error', step.error)
343
364
  }
344
365
  let stepDuration = step.duration
345
- if (stepDuration <= 0 || isNaN(stepDuration)) {
366
+ if (stepDuration <= 0 || Number.isNaN(stepDuration)) {
346
367
  stepDuration = 0
347
368
  }
348
369
  stepSpan.finish(stepStartTime + stepDuration)
@@ -364,7 +385,7 @@ class PlaywrightPlugin extends CiPlugin {
364
385
  span.finish()
365
386
 
366
387
  finishAllTraceSpans(span)
367
- if (process.env.DD_PLAYWRIGHT_WORKER) {
388
+ if (getEnvironmentVariable('DD_PLAYWRIGHT_WORKER')) {
368
389
  this.tracer._exporter.flush(onDone)
369
390
  }
370
391
  })
@@ -102,17 +102,16 @@ class SchemaExtractor {
102
102
  }
103
103
  }
104
104
  return true
105
- } else {
106
- if (!builder.shouldExtractSchema(schemaName, depth)) {
107
- return false
108
- }
109
- for (const field of schema.fieldsArray) {
110
- if (!this.extractProperty(field, schemaName, field.name, builder, depth)) {
111
- log.warn(`DSM: Unable to extract field with name: ${field.name} from Avro schema with name: ${schemaName}`)
112
- }
105
+ }
106
+ if (!builder.shouldExtractSchema(schemaName, depth)) {
107
+ return false
108
+ }
109
+ for (const field of schema.fieldsArray) {
110
+ if (!this.extractProperty(field, schemaName, field.name, builder, depth)) {
111
+ log.warn(`DSM: Unable to extract field with name: ${field.name} from Avro schema with name: ${schemaName}`)
113
112
  }
114
- return true
115
113
  }
114
+ return true
116
115
  }
117
116
 
118
117
  static extractSchemas (descriptor, dataStreamsProcessor) {
@@ -63,7 +63,7 @@ function formatArg (arg) {
63
63
 
64
64
  function trim (str, maxlen) {
65
65
  if (str.length > maxlen) {
66
- str = str.substr(0, maxlen - 3) + '...'
66
+ str = str.slice(0, maxlen - 3) + '...'
67
67
  }
68
68
 
69
69
  return str
@@ -77,9 +77,7 @@ function normalizeConfig (config) {
77
77
 
78
78
  const filter = urlFilter.getFilter(config)
79
79
 
80
- return Object.assign({}, config, {
81
- filter
82
- })
80
+ return { ...config, filter }
83
81
  }
84
82
 
85
83
  function uppercaseAllEntries (entries) {
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
3
  const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
4
- const { storage } = require('../../datadog-core')
5
4
  const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams')
6
5
 
7
6
  class RheaConsumerPlugin extends ConsumerPlugin {
@@ -10,13 +9,14 @@ class RheaConsumerPlugin extends ConsumerPlugin {
10
9
  constructor (...args) {
11
10
  super(...args)
12
11
 
13
- this.addTraceSub('dispatch', ({ state }) => {
14
- const span = storage('legacy').getStore().span
15
- span.setTag('amqp.delivery.state', state)
12
+ this.addTraceSub('dispatch', (ctx) => {
13
+ const span = ctx.currentStore.span
14
+ span.setTag('amqp.delivery.state', ctx.state)
16
15
  })
17
16
  }
18
17
 
19
- start ({ msgObj }) {
18
+ bindStart (ctx) {
19
+ const { msgObj } = ctx
20
20
  const name = getResourceNameFromMessage(msgObj)
21
21
  const childOf = extractTextMap(msgObj, this.tracer)
22
22
 
@@ -29,7 +29,7 @@ class RheaConsumerPlugin extends ConsumerPlugin {
29
29
  'amqp.link.source.address': name,
30
30
  'amqp.link.role': 'receiver'
31
31
  }
32
- })
32
+ }, ctx)
33
33
 
34
34
  if (
35
35
  this.config.dsmEnabled &&
@@ -42,6 +42,8 @@ class RheaConsumerPlugin extends ConsumerPlugin {
42
42
  this.tracer
43
43
  .setCheckpoint(['direction:in', `topic:${name}`, 'type:rabbitmq'], span, payloadSize)
44
44
  }
45
+
46
+ return ctx.currentStore
45
47
  }
46
48
  }
47
49
 
@@ -13,7 +13,8 @@ class RheaProducerPlugin extends ProducerPlugin {
13
13
  this.addTraceSub('encode', this.encode.bind(this))
14
14
  }
15
15
 
16
- start ({ targetAddress, host, port }) {
16
+ bindStart (ctx) {
17
+ const { targetAddress, host, port } = ctx
17
18
  const name = targetAddress || 'amq.topic'
18
19
  this.startSpan({
19
20
  resource: name,
@@ -24,7 +25,9 @@ class RheaProducerPlugin extends ProducerPlugin {
24
25
  'out.host': host,
25
26
  [CLIENT_PORT_KEY]: port
26
27
  }
27
- })
28
+ }, ctx)
29
+
30
+ return ctx.currentStore
28
31
  }
29
32
 
30
33
  encode (msg) {
@@ -90,7 +90,7 @@ class RouterPlugin extends WebPlugin {
90
90
  if (!context) return
91
91
  if (context.middleware.length === 0) return context.span
92
92
 
93
- return context.middleware[context.middleware.length - 1]
93
+ return context.middleware.at(-1)
94
94
  }
95
95
 
96
96
  _getStoreSpan () {
@@ -44,12 +44,7 @@ class SeleniumPlugin extends CiPlugin {
44
44
  if (!span) {
45
45
  return
46
46
  }
47
- let testSpan
48
- if (isTestSpan(span)) {
49
- testSpan = span
50
- } else {
51
- testSpan = getTestSpanFromTrace(span.context()._trace)
52
- }
47
+ const testSpan = isTestSpan(span) ? span : getTestSpanFromTrace(span.context()._trace)
53
48
  if (!testSpan) {
54
49
  return
55
50
  }
@@ -1,5 +1,6 @@
1
1
  const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
2
2
  const { storage } = require('../../datadog-core')
3
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
3
4
 
4
5
  const {
5
6
  TEST_STATUS,
@@ -26,7 +27,9 @@ const {
26
27
  TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
27
28
  TEST_HAS_FAILED_ALL_RETRIES,
28
29
  getLibraryCapabilitiesTags,
29
- TEST_RETRY_REASON_TYPES
30
+ TEST_RETRY_REASON_TYPES,
31
+ isModifiedTest,
32
+ TEST_IS_MODIFIED
30
33
  } = require('../../dd-trace/src/plugins/util/test')
31
34
  const { COMPONENT } = require('../../dd-trace/src/constants')
32
35
  const {
@@ -34,6 +37,7 @@ const {
34
37
  TELEMETRY_EVENT_FINISHED,
35
38
  TELEMETRY_TEST_SESSION
36
39
  } = require('../../dd-trace/src/ci-visibility/telemetry')
40
+ const { DD_MAJOR } = require('../../../version')
37
41
 
38
42
  // Milliseconds that we subtract from the error test duration
39
43
  // so that they do not overlap with the following test
@@ -82,6 +86,13 @@ class VitestPlugin extends CiPlugin {
82
86
  onDone(isQuarantined)
83
87
  })
84
88
 
89
+ this.addSub('ci:vitest:test:is-modified', ({ modifiedTests, testSuiteAbsolutePath, onDone }) => {
90
+ const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
91
+ const isModified = isModifiedTest(testSuite, 0, 0, modifiedTests, this.constructor.id)
92
+
93
+ onDone(isModified)
94
+ })
95
+
85
96
  this.addSub('ci:vitest:is-early-flake-detection-faulty', ({
86
97
  knownTests,
87
98
  testFilepaths,
@@ -107,7 +118,8 @@ class VitestPlugin extends CiPlugin {
107
118
  mightHitProbe,
108
119
  isRetryReasonEfd,
109
120
  isRetryReasonAttemptToFix,
110
- isRetryReasonAtr
121
+ isRetryReasonAtr,
122
+ isModified
111
123
  } = ctx
112
124
 
113
125
  const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
@@ -140,6 +152,9 @@ class VitestPlugin extends CiPlugin {
140
152
  if (isDisabled) {
141
153
  extraTags[TEST_MANAGEMENT_IS_DISABLED] = 'true'
142
154
  }
155
+ if (isModified) {
156
+ extraTags[TEST_IS_MODIFIED] = 'true'
157
+ }
143
158
 
144
159
  const span = this.startTestSpan(
145
160
  testName,
@@ -204,37 +219,38 @@ class VitestPlugin extends CiPlugin {
204
219
  hasFailedAllRetries,
205
220
  attemptToFixFailed
206
221
  }) => {
207
- if (span) {
208
- if (shouldSetProbe && this.di) {
209
- const probeInformation = this.addDiProbe(error)
210
- if (probeInformation) {
211
- const { file, line, stackIndex, setProbePromise } = probeInformation
212
- this.runningTestProbe = { file, line }
213
- this.testErrorStackIndex = stackIndex
214
- promises.setProbePromise = setProbePromise
215
- }
222
+ if (!span) {
223
+ return
224
+ }
225
+ if (shouldSetProbe && this.di && error?.stack) {
226
+ const probeInformation = this.addDiProbe(error)
227
+ if (probeInformation) {
228
+ const { file, line, stackIndex, setProbePromise } = probeInformation
229
+ this.runningTestProbe = { file, line }
230
+ this.testErrorStackIndex = stackIndex
231
+ promises.setProbePromise = setProbePromise
216
232
  }
217
- this.telemetry.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'test', {
218
- hasCodeowners: !!span.context()._tags[TEST_CODE_OWNERS]
219
- })
220
- span.setTag(TEST_STATUS, 'fail')
233
+ }
234
+ this.telemetry.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'test', {
235
+ hasCodeowners: !!span.context()._tags[TEST_CODE_OWNERS]
236
+ })
237
+ span.setTag(TEST_STATUS, 'fail')
221
238
 
222
- if (error) {
223
- span.setTag('error', error)
224
- }
225
- if (hasFailedAllRetries) {
226
- span.setTag(TEST_HAS_FAILED_ALL_RETRIES, 'true')
227
- }
228
- if (attemptToFixFailed) {
229
- span.setTag(TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED, 'false')
230
- }
231
- if (duration) {
232
- span.finish(span._startTime + duration - MILLISECONDS_TO_SUBTRACT_FROM_FAILED_TEST_DURATION) // milliseconds
233
- } else {
234
- span.finish() // `duration` is empty for retries, so we'll use clock time
235
- }
236
- finishAllTraceSpans(span)
239
+ if (error) {
240
+ span.setTag('error', error)
241
+ }
242
+ if (hasFailedAllRetries) {
243
+ span.setTag(TEST_HAS_FAILED_ALL_RETRIES, 'true')
244
+ }
245
+ if (attemptToFixFailed) {
246
+ span.setTag(TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED, 'false')
247
+ }
248
+ if (duration) {
249
+ span.finish(span._startTime + duration - MILLISECONDS_TO_SUBTRACT_FROM_FAILED_TEST_DURATION) // milliseconds
250
+ } else {
251
+ span.finish() // `duration` is empty for retries, so we'll use clock time
237
252
  }
253
+ finishAllTraceSpans(span)
238
254
  })
239
255
 
240
256
  this.addSub('ci:vitest:test:skip', ({ testName, testSuiteAbsolutePath, isNew, isDisabled }) => {
@@ -260,15 +276,16 @@ class VitestPlugin extends CiPlugin {
260
276
  this.addBind('ci:vitest:test-suite:start', (ctx) => {
261
277
  const { testSuiteAbsolutePath, frameworkVersion } = ctx
262
278
 
263
- this.command = process.env.DD_CIVISIBILITY_TEST_COMMAND
279
+ this.command = getEnvironmentVariable('DD_CIVISIBILITY_TEST_COMMAND')
264
280
  this.frameworkVersion = frameworkVersion
265
281
  const testSessionSpanContext = this.tracer.extract('text_map', {
266
- 'x-datadog-trace-id': process.env.DD_CIVISIBILITY_TEST_SESSION_ID,
267
- 'x-datadog-parent-id': process.env.DD_CIVISIBILITY_TEST_MODULE_ID
282
+ 'x-datadog-trace-id': getEnvironmentVariable('DD_CIVISIBILITY_TEST_SESSION_ID'),
283
+ 'x-datadog-parent-id': getEnvironmentVariable('DD_CIVISIBILITY_TEST_MODULE_ID')
268
284
  })
269
285
 
286
+ const trimmedCommand = DD_MAJOR < 6 ? this.command : 'vitest run'
270
287
  // test suites run in a different process, so they also need to init the metadata dictionary
271
- const testSessionName = getTestSessionName(this.config, this.command, this.testEnvironmentMetadata)
288
+ const testSessionName = getTestSessionName(this.config, trimmedCommand, this.testEnvironmentMetadata)
272
289
  const metadataTags = {}
273
290
  for (const testLevel of TEST_LEVEL_EVENT_TYPES) {
274
291
  metadataTags[testLevel] = {
@@ -380,7 +397,7 @@ class VitestPlugin extends CiPlugin {
380
397
  finishAllTraceSpans(this.testSessionSpan)
381
398
  this.telemetry.count(TELEMETRY_TEST_SESSION, {
382
399
  provider: this.ciProviderName,
383
- autoInjected: !!process.env.DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER
400
+ autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
384
401
  })
385
402
  this.tracer._exporter.flush(onFinish)
386
403
  })
@@ -100,7 +100,7 @@ function wrapFunction (original, wrapper) {
100
100
  */
101
101
  function wrap (target, name, wrapper, options) {
102
102
  if (typeof wrapper !== 'function') {
103
- throw new Error(wrapper ? 'Target is not a function' : 'No function provided')
103
+ throw new TypeError(wrapper ? 'Target is not a function' : 'No function provided')
104
104
  }
105
105
 
106
106
  // No descriptor means original was on the prototype. This is not totally
@@ -141,11 +141,7 @@ function wrap (target, name, wrapper, options) {
141
141
  } else {
142
142
  if (descriptor.get) {
143
143
  // `replaceGetter` may only be used when the getter has no side effect.
144
- if (options?.replaceGetter) {
145
- descriptor.get = () => wrapped
146
- } else {
147
- descriptor.get = wrapped
148
- }
144
+ descriptor.get = options?.replaceGetter ? () => wrapped : wrapped
149
145
  } else {
150
146
  descriptor.value = wrapped
151
147
  }
@@ -252,7 +248,7 @@ function assertMethod (target, name, method) {
252
248
  }
253
249
  }
254
250
 
255
- throw new Error(message)
251
+ throw new TypeError(message)
256
252
  }
257
253
  }
258
254
 
@@ -264,7 +260,7 @@ function assertMethod (target, name, method) {
264
260
  */
265
261
  function assertNotClass (target) {
266
262
  if (Function.prototype.toString.call(target).startsWith('class')) {
267
- throw new Error('Target is a native class constructor and cannot be wrapped.')
263
+ throw new TypeError('Target is a native class constructor and cannot be wrapped.')
268
264
  }
269
265
  }
270
266
 
@@ -18,8 +18,8 @@ let asmStandaloneEnabled
18
18
  let sampledRequests
19
19
 
20
20
  class NoopTTLCache {
21
- clear () { }
22
- set (_key, _value) { return undefined }
21
+ clear () {}
22
+ set (_key, _value) {}
23
23
  has (_key) { return false }
24
24
  }
25
25
 
@@ -1,4 +1,4 @@
1
- /* eslint-disable @stylistic/js/max-len */
1
+ /* eslint-disable @stylistic/max-len */
2
2
  'use strict'
3
3
 
4
4
  const html = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>You\'ve been blocked</title><style>a,body,div,html,span{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{background:-webkit-radial-gradient(26% 19%,circle,#fff,#f4f7f9);background:radial-gradient(circle at 26% 19%,#fff,#f4f7f9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;width:100%;min-height:100vh;line-height:1;flex-direction:column}p{display:block}main{text-align:center;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;flex-direction:column}p{font-size:18px;line-height:normal;color:#646464;font-family:sans-serif;font-weight:400}a{color:#4842b7}footer{width:100%;text-align:center}footer p{font-size:16px}</style></head><body><main><p>Sorry, you cannot access this page. Please contact the customer service team.</p></main><footer><p>Security provided by <a href="https://www.datadoghq.com/product/security-platform/application-security-monitoring/" target="_blank">Datadog</a></p></footer></body></html>'
@@ -93,11 +93,9 @@ function getBlockWithContentData (req, specificType, actionParameters) {
93
93
  }
94
94
 
95
95
  function getBlockingData (req, specificType, actionParameters) {
96
- if (actionParameters?.location) {
97
- return getBlockWithRedirectData(actionParameters)
98
- } else {
99
- return getBlockWithContentData(req, specificType, actionParameters)
100
- }
96
+ return actionParameters?.location
97
+ ? getBlockWithRedirectData(actionParameters)
98
+ : getBlockWithContentData(req, specificType, actionParameters)
101
99
  }
102
100
 
103
101
  function block (req, res, rootSpan, abortController, actionParameters = defaultBlockingActionParameters) {
@@ -140,23 +138,11 @@ function getBlockingAction (actions) {
140
138
  }
141
139
 
142
140
  function setTemplates (config) {
143
- if (config.appsec.blockedTemplateHtml) {
144
- templateHtml = config.appsec.blockedTemplateHtml
145
- } else {
146
- templateHtml = blockedTemplates.html
147
- }
141
+ templateHtml = config.appsec.blockedTemplateHtml || blockedTemplates.html
148
142
 
149
- if (config.appsec.blockedTemplateJson) {
150
- templateJson = config.appsec.blockedTemplateJson
151
- } else {
152
- templateJson = blockedTemplates.json
153
- }
143
+ templateJson = config.appsec.blockedTemplateJson || blockedTemplates.json
154
144
 
155
- if (config.appsec.blockedTemplateGraphql) {
156
- templateGraphqlJson = config.appsec.blockedTemplateGraphql
157
- } else {
158
- templateGraphqlJson = blockedTemplates.graphqlJson
159
- }
145
+ templateGraphqlJson = config.appsec.blockedTemplateGraphql || blockedTemplates.graphqlJson
160
146
  }
161
147
 
162
148
  function isBlocked (res) {
@@ -5,7 +5,6 @@ module.exports = {
5
5
  COMMAND_INJECTION_ANALYZER: require('./command-injection-analyzer'),
6
6
  HARCODED_PASSWORD_ANALYZER: require('./hardcoded-password-analyzer'),
7
7
  HARCODED_SECRET_ANALYZER: require('./hardcoded-secret-analyzer'),
8
- HEADER_INJECTION_ANALYZER: require('./header-injection-analyzer'),
9
8
  HSTS_HEADER_MISSING_ANALYZER: require('./hsts-header-missing-analyzer'),
10
9
  INSECURE_COOKIE_ANALYZER: require('./insecure-cookie-analyzer'),
11
10
  LDAP_ANALYZER: require('./ldap-injection-analyzer'),
@@ -1,4 +1,3 @@
1
- /* eslint-disable @stylistic/js/max-len */
2
1
  'use strict'
3
2
 
4
3
  const { NameAndValue } = require('./hardcoded-rule-type')
@@ -1,4 +1,3 @@
1
- /* eslint-disable @stylistic/js/max-len */
2
1
  'use strict'
3
2
 
4
3
  const { ValueOnly, NameAndValue } = require('./hardcoded-rule-type')
@@ -1,4 +1,3 @@
1
- /* eslint-disable @stylistic/js/max-len */
2
1
  'use strict'
3
2
 
4
3
  const { ValueOnly, NameAndValue } = require('./hardcoded-rule-type')
@@ -19,26 +19,21 @@ class HstsHeaderMissingAnalyzer extends MissingHeaderAnalyzer {
19
19
  }
20
20
 
21
21
  _isHeaderValid (headerValue) {
22
- if (!headerValue) {
23
- return false
24
- }
25
22
  headerValue = headerValue.trim()
26
23
 
27
- if (!headerValue.startsWith(HEADER_VALID_PREFIX)) {
24
+ if (!headerValue?.startsWith(HEADER_VALID_PREFIX)) {
28
25
  return false
29
26
  }
30
27
 
31
28
  const semicolonIndex = headerValue.indexOf(';')
32
- let timestampString
33
- if (semicolonIndex > -1) {
34
- timestampString = headerValue.substring(HEADER_VALID_PREFIX.length + 1, semicolonIndex)
35
- } else {
36
- timestampString = headerValue.substring(HEADER_VALID_PREFIX.length + 1)
37
- }
29
+ const timestampString = headerValue.slice(
30
+ HEADER_VALID_PREFIX.length + 1,
31
+ semicolonIndex === -1 ? headerValue.length : semicolonIndex
32
+ )
38
33
 
39
- const timestamp = parseInt(timestampString)
34
+ const timestamp = Number.parseInt(timestampString)
40
35
  // eslint-disable-next-line eqeqeq
41
- return timestamp == timestampString && timestamp > 0
36
+ return timestamp > 0 && timestamp == timestampString
42
37
  }
43
38
 
44
39
  _isHttpsProtocol (req) {