dd-trace 5.81.0 → 5.82.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 (321) hide show
  1. package/index.d.ts +7 -0
  2. package/loader-hook.mjs +7 -2
  3. package/package.json +13 -18
  4. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  5. package/packages/datadog-esbuild/index.js +8 -7
  6. package/packages/datadog-esbuild/src/utils.js +14 -2
  7. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  8. package/packages/datadog-instrumentations/src/ai.js +2 -2
  9. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  10. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  11. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  12. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  13. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  14. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  15. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  18. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  19. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  20. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  21. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  22. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  23. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  24. package/packages/datadog-instrumentations/src/child_process.js +2 -2
  25. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  26. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  27. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  28. package/packages/datadog-instrumentations/src/cucumber.js +12 -13
  29. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  30. package/packages/datadog-instrumentations/src/dns.js +1 -1
  31. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  32. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  33. package/packages/datadog-instrumentations/src/express.js +1 -1
  34. package/packages/datadog-instrumentations/src/fs.js +1 -1
  35. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  36. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  37. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  38. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  39. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  40. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  41. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  42. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  43. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  44. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  45. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
  47. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  48. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  49. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  50. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  51. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  52. package/packages/datadog-instrumentations/src/hono.js +55 -10
  53. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  54. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  55. package/packages/datadog-instrumentations/src/jest.js +2 -2
  56. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  57. package/packages/datadog-instrumentations/src/knex.js +1 -1
  58. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  59. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  60. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  61. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  62. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  63. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  64. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  65. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  66. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  67. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  68. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  69. package/packages/datadog-instrumentations/src/mysql2.js +1 -1
  70. package/packages/datadog-instrumentations/src/net.js +1 -1
  71. package/packages/datadog-instrumentations/src/next.js +1 -1
  72. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  73. package/packages/datadog-instrumentations/src/openai.js +2 -2
  74. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  75. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  76. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
  77. package/packages/datadog-instrumentations/src/pg.js +3 -3
  78. package/packages/datadog-instrumentations/src/pino.js +1 -1
  79. package/packages/datadog-instrumentations/src/playwright.js +1 -1
  80. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  81. package/packages/datadog-instrumentations/src/process.js +1 -1
  82. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  83. package/packages/datadog-instrumentations/src/promise.js +1 -1
  84. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  85. package/packages/datadog-instrumentations/src/q.js +1 -1
  86. package/packages/datadog-instrumentations/src/redis.js +1 -1
  87. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  88. package/packages/datadog-instrumentations/src/selenium.js +1 -1
  89. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  90. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  91. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  92. package/packages/datadog-instrumentations/src/undici.js +4 -4
  93. package/packages/datadog-instrumentations/src/url.js +1 -1
  94. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  95. package/packages/datadog-instrumentations/src/vm.js +1 -1
  96. package/packages/datadog-instrumentations/src/when.js +1 -1
  97. package/packages/datadog-instrumentations/src/winston.js +1 -1
  98. package/packages/datadog-instrumentations/src/ws.js +3 -2
  99. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  100. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  101. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  102. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  103. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  104. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  105. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  106. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  107. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
  108. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  109. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
  110. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  111. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  112. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  113. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  114. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  115. package/packages/datadog-plugin-express/src/index.js +1 -1
  116. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  117. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  118. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  119. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  120. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  121. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  122. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  123. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  124. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  125. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  126. package/packages/datadog-plugin-http/src/client.js +2 -1
  127. package/packages/datadog-plugin-http/src/index.js +25 -5
  128. package/packages/datadog-plugin-http2/src/client.js +2 -2
  129. package/packages/datadog-plugin-http2/src/index.js +1 -1
  130. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  131. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  132. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
  134. package/packages/datadog-plugin-openai/src/index.js +1 -1
  135. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  136. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  137. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  138. package/packages/datadog-plugin-ws/src/close.js +56 -3
  139. package/packages/datadog-plugin-ws/src/index.js +4 -0
  140. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  141. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  142. package/packages/datadog-plugin-ws/src/server.js +13 -1
  143. package/packages/datadog-plugin-ws/src/util.js +107 -0
  144. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  145. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  146. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  147. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  148. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  149. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  150. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  151. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  152. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  153. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  154. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  158. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  160. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  162. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  163. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  164. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  165. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +10 -14
  168. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  171. package/packages/dd-trace/src/appsec/index.js +8 -8
  172. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  173. package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
  174. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  175. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  176. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  177. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  178. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  179. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  180. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  181. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  182. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  183. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  184. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  185. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  186. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  187. package/packages/dd-trace/src/azure_metadata.js +8 -2
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  189. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  190. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
  191. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
  192. package/packages/dd-trace/src/config/remote_config.js +34 -0
  193. package/packages/dd-trace/src/config.js +29 -28
  194. package/packages/dd-trace/src/config_defaults.js +2 -1
  195. package/packages/dd-trace/src/constants.js +5 -0
  196. package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
  197. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  198. package/packages/dd-trace/src/datastreams/index.js +1 -1
  199. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  200. package/packages/dd-trace/src/datastreams/processor.js +2 -2
  201. package/packages/dd-trace/src/datastreams/writer.js +2 -2
  202. package/packages/dd-trace/src/debugger/config.js +1 -0
  203. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  204. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  205. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
  206. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  209. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  210. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  211. package/packages/dd-trace/src/debugger/index.js +1 -1
  212. package/packages/dd-trace/src/dogstatsd.js +3 -2
  213. package/packages/dd-trace/src/encode/0.4.js +1 -1
  214. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  215. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  216. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  217. package/packages/dd-trace/src/exporter.js +2 -2
  218. package/packages/dd-trace/src/exporters/agent/index.js +1 -1
  219. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
  220. package/packages/dd-trace/src/exporters/common/request.js +2 -2
  221. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  222. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  223. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  224. package/packages/dd-trace/src/flare/index.js +1 -1
  225. package/packages/dd-trace/src/guardrails/index.js +6 -3
  226. package/packages/dd-trace/src/id.js +1 -1
  227. package/packages/dd-trace/src/index.js +1 -1
  228. package/packages/dd-trace/src/lambda/handler.js +4 -4
  229. package/packages/dd-trace/src/lambda/index.js +1 -1
  230. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  231. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  232. package/packages/dd-trace/src/llmobs/constants/tags.js +7 -1
  233. package/packages/dd-trace/src/llmobs/index.js +8 -9
  234. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  235. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  236. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  237. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  238. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  239. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  240. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  241. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  242. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  244. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +16 -1
  245. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  246. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  247. package/packages/dd-trace/src/llmobs/sdk.js +15 -22
  248. package/packages/dd-trace/src/llmobs/span_processor.js +9 -13
  249. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  250. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  251. package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
  252. package/packages/dd-trace/src/log/index.js +1 -1
  253. package/packages/dd-trace/src/noop/proxy.js +2 -2
  254. package/packages/dd-trace/src/noop/span.js +1 -1
  255. package/packages/dd-trace/src/openfeature/index.js +2 -2
  256. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  257. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  258. package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
  259. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  260. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  261. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  262. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  263. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  264. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  265. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  266. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  267. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  268. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  269. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  270. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  271. package/packages/dd-trace/src/opentelemetry/tracer.js +3 -3
  272. package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
  273. package/packages/dd-trace/src/opentracing/span.js +3 -3
  274. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  275. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  276. package/packages/dd-trace/src/plugin_manager.js +1 -1
  277. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  278. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  279. package/packages/dd-trace/src/plugins/database.js +1 -1
  280. package/packages/dd-trace/src/plugins/index.js +5 -1
  281. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  282. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  283. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  284. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  286. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/test.js +24 -24
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  289. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  290. package/packages/dd-trace/src/priority_sampler.js +15 -16
  291. package/packages/dd-trace/src/process-tags/index.js +31 -29
  292. package/packages/dd-trace/src/profiling/config.js +32 -21
  293. package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
  294. package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
  295. package/packages/dd-trace/src/profiling/index.js +1 -1
  296. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  297. package/packages/dd-trace/src/profiling/profiler.js +4 -5
  298. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  299. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  300. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  301. package/packages/dd-trace/src/proxy.js +12 -18
  302. package/packages/dd-trace/src/remote_config/index.js +541 -137
  303. package/packages/dd-trace/src/require-package-json.js +1 -1
  304. package/packages/dd-trace/src/ritm.js +50 -27
  305. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
  306. package/packages/dd-trace/src/serverless.js +16 -0
  307. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  308. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  309. package/packages/dd-trace/src/span_format.js +1 -1
  310. package/packages/dd-trace/src/span_processor.js +2 -2
  311. package/packages/dd-trace/src/span_stats.js +6 -4
  312. package/packages/dd-trace/src/standalone/index.js +1 -1
  313. package/packages/dd-trace/src/startup-log.js +3 -3
  314. package/packages/dd-trace/src/supported-configurations.json +3 -0
  315. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  316. package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
  317. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  318. package/packages/dd-trace/src/telemetry/telemetry.js +11 -6
  319. package/packages/dd-trace/src/tracer.js +3 -3
  320. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  321. package/packages/dd-trace/src/remote_config/manager.js +0 -368
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "2.2",
3
3
  "metadata": {
4
- "rules_version": "1.15.1"
4
+ "rules_version": "1.16.1"
5
5
  },
6
6
  "rules": [
7
7
  {
@@ -4376,7 +4376,7 @@
4376
4376
  "address": "graphql.server.resolver"
4377
4377
  }
4378
4378
  ],
4379
- "regex": "java\\.lang\\.(?:runtime|processbuilder)",
4379
+ "regex": "\\bjava\\.lang\\.(?:runtime|processbuilder)\\b",
4380
4380
  "options": {
4381
4381
  "case_sensitive": true,
4382
4382
  "min_length": 17
@@ -8989,7 +8989,7 @@
8989
8989
  "event": false,
8990
8990
  "keep": false,
8991
8991
  "attributes": {
8992
- "_dd.appsec.api.jwt_alg": {
8992
+ "api.security.jwt.alg": {
8993
8993
  "address": "server.request.jwt",
8994
8994
  "key_path": [
8995
8995
  "header",
@@ -9091,6 +9091,233 @@
9091
9091
  }
9092
9092
  }
9093
9093
  },
9094
+ {
9095
+ "id": "api-010-100",
9096
+ "name": "Monitor redirections to GET targets",
9097
+ "tags": {
9098
+ "type": "api10",
9099
+ "category": "api_security",
9100
+ "confidence": "0",
9101
+ "module": "business-logic"
9102
+ },
9103
+ "min_version": "1.25.0",
9104
+ "conditions": [
9105
+ {
9106
+ "parameters": {
9107
+ "inputs": [
9108
+ {
9109
+ "address": "server.io.net.response.status"
9110
+ }
9111
+ ],
9112
+ "list": [
9113
+ "301",
9114
+ "302"
9115
+ ]
9116
+ },
9117
+ "operator": "exact_match"
9118
+ }
9119
+ ],
9120
+ "transformers": [],
9121
+ "output": {
9122
+ "event": false,
9123
+ "keep": false,
9124
+ "attributes": {
9125
+ "api.security.redirection.move_target": {
9126
+ "address": "server.io.net.response.headers",
9127
+ "key_path": [
9128
+ "Location"
9129
+ ]
9130
+ }
9131
+ }
9132
+ }
9133
+ },
9134
+ {
9135
+ "id": "api-010-110",
9136
+ "name": "Monitor redirections to POST targets",
9137
+ "tags": {
9138
+ "type": "api10",
9139
+ "category": "api_security",
9140
+ "confidence": "0",
9141
+ "module": "business-logic"
9142
+ },
9143
+ "min_version": "1.25.0",
9144
+ "conditions": [
9145
+ {
9146
+ "parameters": {
9147
+ "inputs": [
9148
+ {
9149
+ "address": "server.io.net.response.status"
9150
+ }
9151
+ ],
9152
+ "list": [
9153
+ "307",
9154
+ "308"
9155
+ ]
9156
+ },
9157
+ "operator": "exact_match"
9158
+ }
9159
+ ],
9160
+ "transformers": [],
9161
+ "output": {
9162
+ "event": false,
9163
+ "keep": false,
9164
+ "attributes": {
9165
+ "api.security.redirection.redirect_target": {
9166
+ "address": "server.io.net.response.headers",
9167
+ "key_path": [
9168
+ "Location"
9169
+ ]
9170
+ }
9171
+ }
9172
+ }
9173
+ },
9174
+ {
9175
+ "id": "api-010-200",
9176
+ "name": "Large response bodies in downstream network calls",
9177
+ "tags": {
9178
+ "type": "api10",
9179
+ "category": "api_security",
9180
+ "confidence": "0",
9181
+ "module": "business-logic"
9182
+ },
9183
+ "min_version": "1.25.0",
9184
+ "conditions": [
9185
+ {
9186
+ "parameters": {
9187
+ "inputs": [
9188
+ {
9189
+ "address": "server.io.net.response.headers",
9190
+ "key_path": [
9191
+ "content-length"
9192
+ ]
9193
+ }
9194
+ ],
9195
+ "regex": "\\d{7,}",
9196
+ "options": {
9197
+ "case_sensitive": true,
9198
+ "min_length": 7
9199
+ }
9200
+ },
9201
+ "operator": "match_regex"
9202
+ }
9203
+ ],
9204
+ "transformers": [],
9205
+ "output": {
9206
+ "event": false,
9207
+ "keep": false,
9208
+ "attributes": {
9209
+ "api.security.large_response.length": {
9210
+ "address": "server.io.net.response.headers",
9211
+ "key_path": [
9212
+ "content-length"
9213
+ ]
9214
+ },
9215
+ "api.security.large_response.url": {
9216
+ "address": "server.io.net.url"
9217
+ }
9218
+ }
9219
+ }
9220
+ },
9221
+ {
9222
+ "id": "api-010-300",
9223
+ "name": "Secrets transmitted in downstream URL parameters",
9224
+ "tags": {
9225
+ "type": "api10",
9226
+ "category": "api_security",
9227
+ "confidence": "0",
9228
+ "module": "business-logic"
9229
+ },
9230
+ "min_version": "1.25.0",
9231
+ "conditions": [
9232
+ {
9233
+ "parameters": {
9234
+ "inputs": [
9235
+ {
9236
+ "address": "server.io.net.url"
9237
+ }
9238
+ ],
9239
+ "regex": "[?&](?:(?:api|access)?(_)?(?:key|secret|token|password|passwd|pwd))=",
9240
+ "options": {
9241
+ "case_sensitive": false
9242
+ }
9243
+ },
9244
+ "operator": "match_regex"
9245
+ }
9246
+ ],
9247
+ "transformers": [],
9248
+ "output": {
9249
+ "event": false,
9250
+ "keep": false,
9251
+ "attributes": {
9252
+ "api.security.secret.disclosed_in_url_params": {
9253
+ "value": 1
9254
+ }
9255
+ }
9256
+ }
9257
+ },
9258
+ {
9259
+ "id": "api-010-400",
9260
+ "name": "Unauthenticated MCP access",
9261
+ "tags": {
9262
+ "type": "api10",
9263
+ "category": "api_security",
9264
+ "confidence": "0",
9265
+ "module": "business-logic"
9266
+ },
9267
+ "min_version": "1.25.0",
9268
+ "conditions": [
9269
+ {
9270
+ "parameters": {
9271
+ "inputs": [
9272
+ {
9273
+ "address": "server.io.net.url"
9274
+ }
9275
+ ],
9276
+ "regex": "/mcp/(?:tools|resources)/",
9277
+ "options": {
9278
+ "case_sensitive": false
9279
+ }
9280
+ },
9281
+ "operator": "match_regex"
9282
+ },
9283
+ {
9284
+ "parameters": {
9285
+ "inputs": [
9286
+ {
9287
+ "address": "server.io.net.request.headers",
9288
+ "key_path": [
9289
+ "authorization"
9290
+ ]
9291
+ }
9292
+ ]
9293
+ },
9294
+ "operator": "!exists"
9295
+ },
9296
+ {
9297
+ "parameters": {
9298
+ "inputs": [
9299
+ {
9300
+ "address": "server.io.net.response.status"
9301
+ }
9302
+ ],
9303
+ "list": [
9304
+ "401"
9305
+ ]
9306
+ },
9307
+ "operator": "!exact_match"
9308
+ }
9309
+ ],
9310
+ "transformers": [],
9311
+ "output": {
9312
+ "event": false,
9313
+ "keep": false,
9314
+ "attributes": {
9315
+ "api.security.mcp.broken_auth": {
9316
+ "value": 1
9317
+ }
9318
+ }
9319
+ }
9320
+ },
9094
9321
  {
9095
9322
  "id": "ua0-600-551",
9096
9323
  "name": "Datadog test scanner - scalar trace-tagging version: user-agent",
@@ -0,0 +1,177 @@
1
+ 'use strict'
2
+
3
+ const log = require('../log')
4
+ const { updateConfig } = require('../telemetry')
5
+ const RemoteConfigCapabilities = require('../remote_config/capabilities')
6
+ const { setCollectionMode } = require('./user_tracking')
7
+ const Activation = require('./activation')
8
+
9
+ let autoUserInstrumModeId
10
+ let rc
11
+
12
+ /**
13
+ * Configures remote config handlers for appsec features
14
+ *
15
+ * @param {object} rcInstance - RemoteConfig instance
16
+ * @param {object} config - Tracer config
17
+ * @param {object} appsec - Appsec module
18
+ */
19
+ function enable (rcInstance, config, appsec) {
20
+ rc = rcInstance
21
+ const activation = Activation.fromConfig(config)
22
+
23
+ if (activation !== Activation.DISABLED) {
24
+ if (activation === Activation.ONECLICK) {
25
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_ACTIVATION, true)
26
+ }
27
+
28
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_AUTO_USER_INSTRUM_MODE, true)
29
+
30
+ rc.setProductHandler('ASM_FEATURES', (action, rcConfig, configId) => {
31
+ if (!rcConfig) return
32
+
33
+ // this is put before other handlers because it can reject the config
34
+ if (typeof rcConfig.auto_user_instrum?.mode === 'string') {
35
+ if (action === 'apply' || action === 'modify') {
36
+ // check if there is already a config applied with this field
37
+ if (autoUserInstrumModeId && configId !== autoUserInstrumModeId) {
38
+ log.error('[RC] Multiple auto_user_instrum received in ASM_FEATURES. Discarding config')
39
+ // eslint-disable-next-line no-throw-literal
40
+ throw 'Multiple auto_user_instrum.mode received in ASM_FEATURES'
41
+ }
42
+
43
+ setCollectionMode(rcConfig.auto_user_instrum.mode)
44
+ autoUserInstrumModeId = configId
45
+ } else if (configId === autoUserInstrumModeId) {
46
+ setCollectionMode(config.appsec.eventTracking.mode)
47
+ autoUserInstrumModeId = null
48
+ }
49
+ }
50
+
51
+ if (activation === Activation.ONECLICK) {
52
+ enableOrDisableAppsec(action, rcConfig, config, appsec)
53
+ }
54
+ })
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Enables or disables appsec based on remote config
60
+ *
61
+ * @param {string} action - 'apply', 'modify', or 'unapply'
62
+ * @param {object} rcConfig - Remote config
63
+ * @param {object} config - Tracer config
64
+ * @param {object} appsec - Appsec module
65
+ */
66
+ function enableOrDisableAppsec (action, rcConfig, config, appsec) {
67
+ if (typeof rcConfig.asm?.enabled === 'boolean') {
68
+ const isRemoteConfigControlling = action === 'apply' || action === 'modify'
69
+ const shouldEnable = isRemoteConfigControlling
70
+ ? rcConfig.asm.enabled // take control
71
+ : config.appsec.enabled // give back control to local config
72
+
73
+ if (shouldEnable) {
74
+ appsec.enable(config)
75
+ } else {
76
+ appsec.disable()
77
+ }
78
+
79
+ updateConfig([
80
+ {
81
+ name: 'appsec.enabled',
82
+ origin: isRemoteConfigControlling ? 'remote_config' : config.getOrigin('appsec.enabled'),
83
+ value: shouldEnable
84
+ }
85
+ ], config)
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Enables WAF update capabilities for remote config
91
+ *
92
+ * @param {object} appsecConfig - Appsec config
93
+ */
94
+ function enableWafUpdate (appsecConfig) {
95
+ if (rc && appsecConfig && !appsecConfig.rules) {
96
+ // dirty require to make startup faster for serverless
97
+ const { ASM_WAF_PRODUCTS } = require('./rc-products')
98
+ const RuleManager = require('./rule_manager')
99
+
100
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_IP_BLOCKING, true)
101
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_USER_BLOCKING, true)
102
+ // TODO: we should have a different capability for rule override
103
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_DD_RULES, true)
104
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_EXCLUSIONS, true)
105
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_REQUEST_BLOCKING, true)
106
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RESPONSE_BLOCKING, true)
107
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_CUSTOM_RULES, true)
108
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_CUSTOM_BLOCKING_RESPONSE, true)
109
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_TRUSTED_IPS, true)
110
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_PROCESSOR_OVERRIDES, true)
111
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_CUSTOM_DATA_SCANNERS, true)
112
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_EXCLUSION_DATA, true)
113
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_ENDPOINT_FINGERPRINT, true)
114
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_SESSION_FINGERPRINT, true)
115
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_NETWORK_FINGERPRINT, true)
116
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_HEADER_FINGERPRINT, true)
117
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_DD_MULTICONFIG, true)
118
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_TRACE_TAGGING_RULES, true)
119
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_EXTENDED_DATA_COLLECTION, true)
120
+
121
+ if (appsecConfig.rasp?.enabled) {
122
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_SQLI, true)
123
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_SSRF, true)
124
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_LFI, true)
125
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_SHI, true)
126
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_CMDI, true)
127
+ }
128
+
129
+ rc.subscribeProducts(...ASM_WAF_PRODUCTS)
130
+ rc.setBatchHandler(ASM_WAF_PRODUCTS, RuleManager.updateWafFromRC)
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Disables WAF update capabilities for remote config
136
+ */
137
+ function disableWafUpdate () {
138
+ if (rc) {
139
+ const { ASM_WAF_PRODUCTS } = require('./rc-products')
140
+ const RuleManager = require('./rule_manager')
141
+
142
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_IP_BLOCKING, false)
143
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_USER_BLOCKING, false)
144
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_DD_RULES, false)
145
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_EXCLUSIONS, false)
146
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_REQUEST_BLOCKING, false)
147
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RESPONSE_BLOCKING, false)
148
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_CUSTOM_RULES, false)
149
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_CUSTOM_BLOCKING_RESPONSE, false)
150
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_TRUSTED_IPS, false)
151
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_PROCESSOR_OVERRIDES, false)
152
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_CUSTOM_DATA_SCANNERS, false)
153
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_EXCLUSION_DATA, false)
154
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_ENDPOINT_FINGERPRINT, false)
155
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_SESSION_FINGERPRINT, false)
156
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_NETWORK_FINGERPRINT, false)
157
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_HEADER_FINGERPRINT, false)
158
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_DD_MULTICONFIG, false)
159
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_TRACE_TAGGING_RULES, false)
160
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_EXTENDED_DATA_COLLECTION, false)
161
+
162
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_SQLI, false)
163
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_SSRF, false)
164
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_LFI, false)
165
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_SHI, false)
166
+ rc.updateCapabilities(RemoteConfigCapabilities.ASM_RASP_CMDI, false)
167
+
168
+ rc.unsubscribeProducts(...ASM_WAF_PRODUCTS)
169
+ rc.removeBatchHandler(RuleManager.updateWafFromRC)
170
+ }
171
+ }
172
+
173
+ module.exports = {
174
+ enable,
175
+ enableWafUpdate,
176
+ disableWafUpdate
177
+ }
@@ -1,11 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const dc = require('dc-polyfill')
4
3
  const zlib = require('zlib')
4
+ const dc = require('dc-polyfill')
5
5
 
6
6
  const { storage } = require('../../../datadog-core')
7
7
  const web = require('../plugins/util/web')
8
8
  const { ipHeaderList } = require('../plugins/util/ip_extractor')
9
+ const { keepTrace } = require('../priority_sampler')
10
+ const { ASM } = require('../standalone/product')
9
11
  const {
10
12
  incrementWafInitMetric,
11
13
  incrementWafUpdatesMetric,
@@ -16,8 +18,6 @@ const {
16
18
  updateRaspRuleSkippedMetricTags,
17
19
  getRequestMetrics
18
20
  } = require('./telemetry')
19
- const { keepTrace } = require('../priority_sampler')
20
- const { ASM } = require('../standalone/product')
21
21
  const { DIAGNOSTIC_KEYS } = require('./waf/diagnostics')
22
22
 
23
23
  const REQUEST_HEADER_TAG_PREFIX = 'http.request.headers.'
@@ -1,14 +1,12 @@
1
1
  'use strict'
2
2
 
3
- const fs = require('fs')
3
+ const { readFileSync } = require('node:fs')
4
+
4
5
  const waf = require('./waf')
5
6
  const { DIAGNOSTIC_KEYS } = require('./waf/diagnostics')
6
- const { ACKNOWLEDGED, ERROR } = require('../remote_config/apply_states')
7
- const Reporter = require('./reporter')
8
-
9
7
  const blocking = require('./blocking')
10
-
11
- const ASM_PRODUCTS = new Set(['ASM', 'ASM_DD', 'ASM_DATA'])
8
+ const Reporter = require('./reporter')
9
+ const { ASM_WAF_PRODUCTS_SET } = require('./rc-products')
12
10
 
13
11
  /*
14
12
  ASM Actions must be tracked in order to update the defaultBlockingActions in blocking. These actions are used
@@ -16,9 +14,21 @@ const ASM_PRODUCTS = new Set(['ASM', 'ASM_DD', 'ASM_DATA'])
16
14
  */
17
15
  let appliedActions = new Map()
18
16
 
17
+ /**
18
+ * @typedef {object} AsmConfigFile
19
+ * @property {Array<Record<string, unknown>>} [actions]
20
+ */
21
+
22
+ /**
23
+ * @typedef {import('./waf').WAFConfig & { rules?: string }} AppSecConfig
24
+ */
25
+
26
+ /**
27
+ * @param {AppSecConfig} config
28
+ */
19
29
  function loadRules (config) {
20
30
  const defaultRules = config.rules
21
- ? JSON.parse(fs.readFileSync(config.rules))
31
+ ? JSON.parse(readFileSync(config.rules, 'utf8'))
22
32
  : require('./recommended.json')
23
33
 
24
34
  waf.init(defaultRules, config)
@@ -26,19 +36,26 @@ function loadRules (config) {
26
36
  blocking.setDefaultBlockingActionParameters(defaultRules?.actions)
27
37
  }
28
38
 
29
- function updateWafFromRC ({ toUnapply, toApply, toModify }) {
39
+ /**
40
+ * Apply ASM remote-config updates to the WAF in a single batch.
41
+ *
42
+ * @param {import('../remote_config/manager').RcBatchUpdateTransaction} transaction
43
+ */
44
+ function updateWafFromRC (transaction) {
45
+ const { toUnapply, toApply, toModify } = transaction
46
+
30
47
  const newActions = new SpyMap(appliedActions)
31
48
 
32
49
  let wafUpdated = false
33
50
  let wafUpdatedFailed = false
34
51
 
35
52
  for (const item of toUnapply) {
36
- if (!ASM_PRODUCTS.has(item.product)) continue
53
+ if (!ASM_WAF_PRODUCTS_SET.has(item.product)) continue
37
54
 
38
55
  try {
39
56
  waf.removeConfig(item.path)
40
57
 
41
- item.apply_state = ACKNOWLEDGED
58
+ transaction.ack(item.path)
42
59
  wafUpdated = true
43
60
 
44
61
  // ASM actions
@@ -46,30 +63,30 @@ function updateWafFromRC ({ toUnapply, toApply, toModify }) {
46
63
  newActions.delete(item.id)
47
64
  }
48
65
  } catch (e) {
49
- item.apply_state = ERROR
50
- item.apply_error = e.toString()
66
+ transaction.error(item.path, e)
51
67
  wafUpdatedFailed = true
52
68
  }
53
69
  }
54
70
 
55
71
  for (const item of [...toApply, ...toModify]) {
56
- if (!ASM_PRODUCTS.has(item.product)) continue
72
+ if (!ASM_WAF_PRODUCTS_SET.has(item.product)) continue
57
73
 
58
74
  try {
59
75
  waf.updateConfig(item.product, item.id, item.path, item.file)
60
76
 
61
- item.apply_state = ACKNOWLEDGED
77
+ transaction.ack(item.path)
62
78
  wafUpdated = true
63
79
 
64
80
  // ASM actions
65
- if (item.product === 'ASM' && item.file?.actions?.length) {
66
- newActions.set(item.id, item.file.actions)
81
+ if (item.product === 'ASM') {
82
+ const asmFile = /** @type {AsmConfigFile} */ (item.file)
83
+ if (asmFile?.actions?.length) {
84
+ newActions.set(item.id, asmFile.actions)
85
+ }
67
86
  }
68
87
  } catch (e) {
69
- item.apply_state = ERROR
70
- item.apply_error = e instanceof waf.WafUpdateError
71
- ? JSON.stringify(extractErrors(e.diagnosticErrors))
72
- : e.toString()
88
+ const error = e instanceof waf.WafUpdateError ? JSON.stringify(extractErrors(e.diagnosticErrors)) : e
89
+ transaction.error(item.path, error)
73
90
  wafUpdatedFailed = true
74
91
  }
75
92
  }
@@ -1,5 +1,6 @@
1
1
  'use strict'
2
2
 
3
+ const { setTemplates } = require('../blocking')
3
4
  const {
4
5
  trackUserLoginSuccessEvent,
5
6
  trackUserLoginFailureEvent,
@@ -8,7 +9,6 @@ const {
8
9
  trackUserLoginFailureV2
9
10
  } = require('./track_event')
10
11
  const { checkUserAndSetUser, blockRequest } = require('./user_blocking')
11
- const { setTemplates } = require('../blocking')
12
12
  const { setUser } = require('./set_user')
13
13
 
14
14
  class EventTrackingV2 {
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const { getRootSpan } = require('./utils')
4
3
  const log = require('../../log')
5
4
  const waf = require('../waf')
6
5
  const addresses = require('../addresses')
6
+ const { getRootSpan } = require('./utils')
7
7
 
8
8
  function setUserTags (user, rootSpan) {
9
9
  for (const k of Object.keys(user)) {
@@ -1,13 +1,13 @@
1
1
  'use strict'
2
2
 
3
3
  const log = require('../../log')
4
- const { getRootSpan } = require('./utils')
5
- const { setUserTags } = require('./set_user')
6
4
  const waf = require('../waf')
7
5
  const { keepTrace } = require('../../priority_sampler')
8
6
  const addresses = require('../addresses')
9
7
  const { ASM } = require('../../standalone/product')
10
8
  const { incrementSdkEventMetric } = require('../telemetry')
9
+ const { setUserTags } = require('./set_user')
10
+ const { getRootSpan } = require('./utils')
11
11
 
12
12
  /**
13
13
  * @deprecated in favor of trackUserLoginSuccessV2
@@ -2,11 +2,11 @@
2
2
 
3
3
  const { USER_ID } = require('../addresses')
4
4
  const waf = require('../waf')
5
- const { getRootSpan } = require('./utils')
6
5
  const { block, getBlockingAction } = require('../blocking')
7
6
  const { storage } = require('../../../../datadog-core')
8
- const { setUserTags } = require('./set_user')
9
7
  const log = require('../../log')
8
+ const { setUserTags } = require('./set_user')
9
+ const { getRootSpan } = require('./utils')
10
10
 
11
11
  function isUserBlocked (user) {
12
12
  const results = waf.run({ persistent: { [USER_ID]: user.id } })
@@ -2,11 +2,11 @@
2
2
 
3
3
  const crypto = require('crypto')
4
4
  const log = require('../log')
5
+ const { keepTrace } = require('../priority_sampler')
6
+ const { ASM } = require('../standalone/product')
5
7
  const telemetry = require('./telemetry')
6
8
  const addresses = require('./addresses')
7
- const { keepTrace } = require('../priority_sampler')
8
9
  const waf = require('./waf')
9
- const { ASM } = require('../standalone/product')
10
10
 
11
11
  // the RFC doesn't include '_id', but it's common in MongoDB
12
12
  const USER_ID_FIELDS = ['id', '_id', 'email', 'username', 'login', 'user']