dd-trace 5.81.0 → 5.83.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 (371) hide show
  1. package/LICENSE-3rdparty.csv +78 -79
  2. package/ci/init.js +6 -6
  3. package/index.d.ts +159 -3
  4. package/loader-hook.mjs +8 -3
  5. package/package.json +64 -66
  6. package/packages/datadog-core/src/storage.js +7 -7
  7. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  8. package/packages/datadog-esbuild/index.js +14 -7
  9. package/packages/datadog-esbuild/src/utils.js +14 -2
  10. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  11. package/packages/datadog-instrumentations/src/ai.js +9 -5
  12. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  14. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  15. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  16. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  17. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  18. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  21. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  22. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  23. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  24. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  25. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  26. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  27. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  28. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  29. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  30. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  31. package/packages/datadog-instrumentations/src/cucumber.js +13 -14
  32. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  33. package/packages/datadog-instrumentations/src/dns.js +1 -1
  34. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  35. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  36. package/packages/datadog-instrumentations/src/express.js +1 -1
  37. package/packages/datadog-instrumentations/src/fs.js +1 -1
  38. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  39. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  40. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  41. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  42. package/packages/datadog-instrumentations/src/graphql.js +2 -2
  43. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  44. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  45. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  47. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  48. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  49. package/packages/datadog-instrumentations/src/helpers/instrumentations.js +4 -3
  50. package/packages/datadog-instrumentations/src/helpers/register.js +9 -11
  51. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  52. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  53. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  54. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  55. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  56. package/packages/datadog-instrumentations/src/hono.js +55 -10
  57. package/packages/datadog-instrumentations/src/http/client.js +2 -2
  58. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  59. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  60. package/packages/datadog-instrumentations/src/jest.js +37 -16
  61. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  62. package/packages/datadog-instrumentations/src/knex.js +1 -1
  63. package/packages/datadog-instrumentations/src/koa.js +2 -1
  64. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  65. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  66. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  67. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  68. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  69. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  70. package/packages/datadog-instrumentations/src/mocha/main.js +2 -2
  71. package/packages/datadog-instrumentations/src/mocha/worker.js +1 -1
  72. package/packages/datadog-instrumentations/src/mocha.js +1 -1
  73. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  74. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  75. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  76. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  77. package/packages/datadog-instrumentations/src/mysql.js +2 -2
  78. package/packages/datadog-instrumentations/src/mysql2.js +3 -3
  79. package/packages/datadog-instrumentations/src/net.js +14 -6
  80. package/packages/datadog-instrumentations/src/next.js +1 -1
  81. package/packages/datadog-instrumentations/src/nyc.js +2 -2
  82. package/packages/datadog-instrumentations/src/openai.js +2 -2
  83. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  84. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  85. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +5 -5
  86. package/packages/datadog-instrumentations/src/pg.js +7 -5
  87. package/packages/datadog-instrumentations/src/pino.js +1 -1
  88. package/packages/datadog-instrumentations/src/playwright.js +4 -4
  89. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  90. package/packages/datadog-instrumentations/src/process.js +1 -1
  91. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  92. package/packages/datadog-instrumentations/src/promise.js +1 -1
  93. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  94. package/packages/datadog-instrumentations/src/q.js +1 -1
  95. package/packages/datadog-instrumentations/src/redis.js +1 -1
  96. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  97. package/packages/datadog-instrumentations/src/selenium.js +3 -3
  98. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  99. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  100. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  101. package/packages/datadog-instrumentations/src/undici.js +15 -4
  102. package/packages/datadog-instrumentations/src/url.js +1 -1
  103. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  104. package/packages/datadog-instrumentations/src/vm.js +1 -1
  105. package/packages/datadog-instrumentations/src/when.js +1 -1
  106. package/packages/datadog-instrumentations/src/winston.js +1 -1
  107. package/packages/datadog-instrumentations/src/ws.js +3 -2
  108. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  109. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  110. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  111. package/packages/datadog-plugin-aws-sdk/src/base.js +4 -4
  112. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  113. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  114. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  115. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  116. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  117. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +21 -7
  118. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  119. package/packages/datadog-plugin-azure-service-bus/src/producer.js +6 -2
  120. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  121. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  122. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  123. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  124. package/packages/datadog-plugin-cucumber/src/index.js +2 -2
  125. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -2
  126. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  127. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -2
  128. package/packages/datadog-plugin-express/src/code_origin.js +21 -15
  129. package/packages/datadog-plugin-express/src/index.js +1 -1
  130. package/packages/datadog-plugin-fastify/src/code_origin.js +17 -4
  131. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  132. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  133. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  134. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  135. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  136. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  137. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  138. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  139. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  140. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  141. package/packages/datadog-plugin-http/src/client.js +2 -1
  142. package/packages/datadog-plugin-http/src/index.js +25 -5
  143. package/packages/datadog-plugin-http2/src/client.js +2 -2
  144. package/packages/datadog-plugin-http2/src/index.js +1 -1
  145. package/packages/datadog-plugin-jest/src/index.js +2 -2
  146. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  147. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  148. package/packages/datadog-plugin-mocha/src/index.js +2 -2
  149. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  150. package/packages/datadog-plugin-mongodb-core/src/index.js +8 -4
  151. package/packages/datadog-plugin-openai/src/index.js +1 -1
  152. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  153. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  154. package/packages/datadog-plugin-playwright/src/index.js +3 -3
  155. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  156. package/packages/datadog-plugin-undici/src/index.js +305 -2
  157. package/packages/datadog-plugin-vitest/src/index.js +5 -5
  158. package/packages/datadog-plugin-ws/src/close.js +56 -3
  159. package/packages/datadog-plugin-ws/src/index.js +4 -0
  160. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  161. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  162. package/packages/datadog-plugin-ws/src/server.js +13 -1
  163. package/packages/datadog-plugin-ws/src/util.js +107 -0
  164. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  165. package/packages/dd-trace/index.js +19 -0
  166. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  167. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  168. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  171. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  172. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  173. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  174. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  175. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  176. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  177. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  178. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  179. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  180. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  181. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  183. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  184. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  185. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  186. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  187. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  188. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +11 -15
  189. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  190. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  191. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  192. package/packages/dd-trace/src/appsec/index.js +8 -8
  193. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  194. package/packages/dd-trace/src/appsec/rasp/index.js +3 -5
  195. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  196. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  197. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  198. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  199. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  200. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  201. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  202. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  203. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  204. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  205. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  206. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  207. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  208. package/packages/dd-trace/src/azure_metadata.js +15 -4
  209. package/packages/dd-trace/src/baggage.js +36 -11
  210. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -1
  211. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  212. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  213. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  214. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  215. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  216. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  217. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -3
  218. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -3
  219. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +5 -5
  220. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
  221. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  222. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -4
  223. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -4
  224. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  225. package/packages/dd-trace/src/{config_defaults.js → config/defaults.js} +5 -4
  226. package/packages/dd-trace/src/{config-helper.js → config/helper.js} +88 -15
  227. package/packages/dd-trace/src/{config.js → config/index.js} +115 -67
  228. package/packages/dd-trace/src/config/remote_config.js +202 -0
  229. package/packages/dd-trace/src/{config_stable.js → config/stable.js} +20 -32
  230. package/packages/dd-trace/src/{supported-configurations.json → config/supported-configurations.json} +5 -0
  231. package/packages/dd-trace/src/constants.js +5 -0
  232. package/packages/dd-trace/src/crashtracking/crashtracker.js +11 -2
  233. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  234. package/packages/dd-trace/src/datastreams/index.js +1 -1
  235. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  236. package/packages/dd-trace/src/datastreams/processor.js +3 -3
  237. package/packages/dd-trace/src/datastreams/writer.js +3 -3
  238. package/packages/dd-trace/src/debugger/config.js +1 -0
  239. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  240. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  241. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  242. package/packages/dd-trace/src/debugger/devtools_client/send.js +6 -6
  243. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  244. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  245. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +1 -1
  246. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  247. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  248. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  249. package/packages/dd-trace/src/debugger/index.js +84 -16
  250. package/packages/dd-trace/src/dogstatsd.js +5 -4
  251. package/packages/dd-trace/src/encode/0.4.js +3 -3
  252. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  253. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  254. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  255. package/packages/dd-trace/src/exporter.js +2 -2
  256. package/packages/dd-trace/src/exporters/agent/index.js +2 -4
  257. package/packages/dd-trace/src/exporters/agent/writer.js +9 -14
  258. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
  259. package/packages/dd-trace/src/exporters/common/docker.js +2 -2
  260. package/packages/dd-trace/src/exporters/common/request.js +3 -3
  261. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  262. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  263. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  264. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  265. package/packages/dd-trace/src/flare/index.js +2 -2
  266. package/packages/dd-trace/src/guardrails/index.js +6 -3
  267. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  268. package/packages/dd-trace/src/id.js +1 -1
  269. package/packages/dd-trace/src/index.js +4 -4
  270. package/packages/dd-trace/src/lambda/handler.js +5 -5
  271. package/packages/dd-trace/src/lambda/index.js +2 -2
  272. package/packages/dd-trace/src/lambda/runtime/patch.js +6 -6
  273. package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -3
  274. package/packages/dd-trace/src/llmobs/constants/tags.js +14 -1
  275. package/packages/dd-trace/src/llmobs/index.js +10 -11
  276. package/packages/dd-trace/src/llmobs/noop.js +2 -0
  277. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  278. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  279. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  280. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  281. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  282. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  283. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  284. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  285. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  286. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  287. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +19 -5
  288. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  289. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  290. package/packages/dd-trace/src/llmobs/sdk.js +46 -26
  291. package/packages/dd-trace/src/llmobs/span_processor.js +26 -20
  292. package/packages/dd-trace/src/llmobs/tagger.js +175 -1
  293. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  294. package/packages/dd-trace/src/llmobs/writers/base.js +117 -38
  295. package/packages/dd-trace/src/llmobs/writers/spans.js +5 -5
  296. package/packages/dd-trace/src/log/index.js +5 -5
  297. package/packages/dd-trace/src/noop/proxy.js +5 -5
  298. package/packages/dd-trace/src/noop/span.js +1 -1
  299. package/packages/dd-trace/src/openfeature/index.js +2 -2
  300. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  301. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  302. package/packages/dd-trace/src/openfeature/writers/base.js +12 -13
  303. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  304. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  305. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  306. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  307. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  308. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  309. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  310. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  311. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  312. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +2 -2
  313. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  314. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  315. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  316. package/packages/dd-trace/src/opentelemetry/tracer.js +51 -9
  317. package/packages/dd-trace/src/opentracing/propagation/text_map.js +68 -28
  318. package/packages/dd-trace/src/opentracing/span.js +7 -7
  319. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  320. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  321. package/packages/dd-trace/src/plugin_manager.js +8 -6
  322. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  323. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  324. package/packages/dd-trace/src/plugins/database.js +1 -1
  325. package/packages/dd-trace/src/plugins/index.js +5 -1
  326. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  327. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  328. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  329. package/packages/dd-trace/src/plugins/util/ci.js +5 -8
  330. package/packages/dd-trace/src/plugins/util/git-cache.js +3 -3
  331. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  332. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  333. package/packages/dd-trace/src/plugins/util/test.js +25 -25
  334. package/packages/dd-trace/src/plugins/util/user-provided-git.js +41 -43
  335. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  336. package/packages/dd-trace/src/priority_sampler.js +15 -16
  337. package/packages/dd-trace/src/process-tags/index.js +31 -29
  338. package/packages/dd-trace/src/profiler.js +4 -39
  339. package/packages/dd-trace/src/profiling/config.js +104 -50
  340. package/packages/dd-trace/src/profiling/exporter_cli.js +8 -8
  341. package/packages/dd-trace/src/profiling/exporters/agent.js +6 -6
  342. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +9 -2
  343. package/packages/dd-trace/src/profiling/index.js +1 -1
  344. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  345. package/packages/dd-trace/src/profiling/profiler.js +61 -7
  346. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  347. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  348. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  349. package/packages/dd-trace/src/proxy.js +43 -20
  350. package/packages/dd-trace/src/remote_config/capabilities.js +3 -0
  351. package/packages/dd-trace/src/remote_config/index.js +541 -137
  352. package/packages/dd-trace/src/require-package-json.js +1 -1
  353. package/packages/dd-trace/src/ritm.js +58 -31
  354. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -3
  355. package/packages/dd-trace/src/serverless.js +17 -1
  356. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  357. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  358. package/packages/dd-trace/src/span_format.js +1 -1
  359. package/packages/dd-trace/src/span_processor.js +4 -4
  360. package/packages/dd-trace/src/span_stats.js +6 -4
  361. package/packages/dd-trace/src/standalone/index.js +1 -1
  362. package/packages/dd-trace/src/startup-log.js +7 -16
  363. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  364. package/packages/dd-trace/src/telemetry/endpoints.js +75 -13
  365. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  366. package/packages/dd-trace/src/telemetry/send-data.js +103 -4
  367. package/packages/dd-trace/src/telemetry/telemetry.js +238 -114
  368. package/packages/dd-trace/src/tracer.js +3 -3
  369. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  370. package/packages/dd-trace/src/remote_config/manager.js +0 -368
  371. /package/packages/dd-trace/src/{git_properties.js → config/git_properties.js} +0 -0
@@ -0,0 +1,107 @@
1
+ 'use strict'
2
+
3
+ // WeakMap to store message counters per socket without mutating the socket object
4
+ const socketCounters = new WeakMap()
5
+
6
+ /**
7
+ * Initializes WebSocket message counters for a socket.
8
+ * @param {object} socket - The WebSocket socket object
9
+ */
10
+ function initWebSocketMessageCounters (socket) {
11
+ if (!socketCounters.has(socket)) {
12
+ socketCounters.set(socket, {
13
+ receiveCounter: 0,
14
+ sendCounter: 0
15
+ })
16
+ }
17
+ }
18
+
19
+ /**
20
+ * Increments and returns the WebSocket message counter.
21
+ * @param {object} socket - The WebSocket socket object
22
+ * @param {string} counterType - Either 'receiveCounter' or 'sendCounter'
23
+ * @returns {number} The incremented counter value
24
+ */
25
+ function incrementWebSocketCounter (socket, counterType) {
26
+ if (!socketCounters.has(socket)) {
27
+ initWebSocketMessageCounters(socket)
28
+ }
29
+ const counters = socketCounters.get(socket)
30
+ counters[counterType]++
31
+ return counters[counterType]
32
+ }
33
+
34
+ /**
35
+ * Builds a WebSocket span pointer hash.
36
+ *
37
+ * Format: <prefix><128 bit hex trace id><64 bit hex span id><32 bit hex counter>
38
+ * Prefix: 'S' for server outgoing or client incoming, 'C' for server incoming or client outgoing
39
+ *
40
+ * @param {bigint} handshakeTraceId - The trace ID from the handshake span (as a BigInt)
41
+ * @param {bigint} handshakeSpanId - The span ID from the handshake span (as a BigInt)
42
+ * @param {number} counter - The message counter
43
+ * @param {boolean} isServer - Whether this is a server (true) or client (false)
44
+ * @param {boolean} isIncoming - Whether this is an incoming message (true) or outgoing (false)
45
+ * @returns {string} The span pointer hash
46
+ */
47
+ function buildWebSocketSpanPointerHash (handshakeTraceId, handshakeSpanId, counter, isServer, isIncoming) {
48
+ // Determine prefix based on server/client and incoming/outgoing
49
+ // Server outgoing or client incoming: 'S'
50
+ // Server incoming or client outgoing: 'C'
51
+ const prefix = (isServer && !isIncoming) || (!isServer && isIncoming) ? 'S' : 'C'
52
+
53
+ // Pad trace ID to 32 hex chars (128 bits)
54
+ const traceIdHex = handshakeTraceId.toString(16).padStart(32, '0')
55
+
56
+ // Pad span ID to 16 hex chars (64 bits)
57
+ const spanIdHex = handshakeSpanId.toString(16).padStart(16, '0')
58
+
59
+ // Pad counter to 8 hex chars (32 bits)
60
+ const counterHex = counter.toString(16).padStart(8, '0')
61
+
62
+ return `${prefix}${traceIdHex}${spanIdHex}${counterHex}`
63
+ }
64
+
65
+ /**
66
+ * Checks if the handshake span has extracted distributed tracing context.
67
+ * A websocket server must not set the span pointer if the handshake has not extracted a context.
68
+ *
69
+ * A span has distributed tracing context if it has a parent context that was
70
+ * extracted from headers (remote parent).
71
+ *
72
+ * @param {object} span - The handshake span
73
+ * @param {object} socket - The WebSocket socket object
74
+ * @returns {boolean} True if the span has distributed tracing context
75
+ */
76
+ function hasDistributedTracingContext (span, socket) {
77
+ if (!span) return false
78
+ const context = span.context()
79
+ if (!context) return false
80
+
81
+ // Check if this span has a parent. If the parent was extracted from remote headers,
82
+ // then this span is part of a distributed trace.
83
+ // We check if the span has a parent by looking at _parentId.
84
+ // In the JavaScript tracer, when a context is extracted from headers and a child span
85
+ // is created, the child will have _parentId set to the extracted parent's span ID.
86
+ //
87
+ // For testing purposes, we also check if Datadog trace headers are present in the socket's
88
+ // upgrade request, which indicates distributed tracing context was sent by the client.
89
+ if (context._parentId !== null) {
90
+ return true
91
+ }
92
+
93
+ // Fallback check: look for distributed tracing headers in the stored request headers
94
+ if (socket && socket.requestHeaders) {
95
+ const headers = socket.requestHeaders
96
+ return !!(headers['x-datadog-trace-id'] || headers.traceparent)
97
+ }
98
+
99
+ return false
100
+ }
101
+
102
+ module.exports = {
103
+ initWebSocketMessageCounters,
104
+ incrementWebSocketCounter,
105
+ buildWebSocketSpanPointerHash,
106
+ hasDistributedTracingContext
107
+ }
@@ -91,7 +91,7 @@ function wrapFunction (original, wrapper) {
91
91
  * @param {Record<string | symbol, unknown> | Function | undefined} target - The target
92
92
  * object.
93
93
  * @param {string | symbol} name - The property key of the method to wrap.
94
- * @param {(original: Function) => (...args: unknown[]) => any} wrapper - The wrapper function.
94
+ * @param {(original: Function) => (...args: unknown[]) => unknown} wrapper - The wrapper function.
95
95
  * @param {{ replaceGetter?: boolean }} [options] - If `replaceGetter` is set to
96
96
  * true, the getter is accessed and the getter is replaced with one that just
97
97
  * returns the earlier retrieved value. Use with care! This may only be done in
@@ -214,7 +214,7 @@ function wrap (target, name, wrapper, options) {
214
214
  * Record<string | symbol, unknown> |
215
215
  * Function} targets - The target objects.
216
216
  * @param {Array<string | symbol> | string | symbol} names - The property keys of the methods to wrap.
217
- * @param {(original: Function) => (...args: unknown[]) => any} wrapper - The wrapper function.
217
+ * @param {(original: Function) => (...args: unknown[]) => unknown} wrapper - The wrapper function.
218
218
  */
219
219
  function massWrap (targets, names, wrapper) {
220
220
  targets = toArray(targets)
@@ -10,6 +10,25 @@ if (!global._ddtrace) {
10
10
  writable: true
11
11
  })
12
12
 
13
+ const ddTraceSymbol = Symbol.for('dd-trace')
14
+
15
+ Object.defineProperty(globalThis, ddTraceSymbol, {
16
+ value: {
17
+ beforeExitHandlers: new Set(),
18
+ },
19
+ enumerable: false,
20
+ configurable: true, // Allow this to be overridden by loading the tracer
21
+ writable: false
22
+ })
23
+
24
+ process.once('beforeExit', function mainBeforeExit () {
25
+ if (globalThis[ddTraceSymbol]?.beforeExitHandlers) {
26
+ for (const handler of globalThis[ddTraceSymbol].beforeExitHandlers) {
27
+ handler()
28
+ }
29
+ }
30
+ })
31
+
13
32
  global._ddtrace.default = global._ddtrace
14
33
  global._ddtrace.tracer = global._ddtrace
15
34
  }
@@ -1,6 +1,9 @@
1
1
  'use strict'
2
2
 
3
3
  const rfdc = require('../../../../vendor/dist/rfdc')({ proto: false, circles: false })
4
+ const log = require('../log')
5
+ const telemetryMetrics = require('../telemetry/metrics')
6
+ const tracerVersion = require('../../../../package.json').version
4
7
  const NoopAIGuard = require('./noop')
5
8
  const executeRequest = require('./client')
6
9
  const {
@@ -14,9 +17,6 @@ const {
14
17
  AI_GUARD_TELEMETRY_REQUESTS,
15
18
  AI_GUARD_TELEMETRY_TRUNCATED
16
19
  } = require('./tags')
17
- const log = require('../log')
18
- const telemetryMetrics = require('../telemetry/metrics')
19
- const tracerVersion = require('../../../../package.json').version
20
20
 
21
21
  const appsecMetrics = telemetryMetrics.manager.namespace('appsec')
22
22
 
@@ -1,16 +1,16 @@
1
1
  'use strict'
2
2
 
3
3
  const { storage } = require('../../../datadog-core')
4
+ const log = require('../log')
5
+ const web = require('../plugins/util/web')
4
6
  const {
5
7
  addSpecificEndpoint,
6
8
  specificBlockingTypes,
7
9
  getBlockingData,
8
10
  getBlockingAction
9
11
  } = require('./blocking')
10
- const log = require('../log')
11
12
  const waf = require('./waf')
12
13
  const addresses = require('./addresses')
13
- const web = require('../plugins/util/web')
14
14
  const {
15
15
  startGraphqlResolve,
16
16
  graphqlMiddlewareChannel,
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
3
  const { CODE_INJECTION } = require('../vulnerabilities')
4
- const StoredInjectionAnalyzer = require('./stored-injection-analyzer')
5
4
  const { INSTRUMENTED_SINK } = require('../telemetry/iast-metric')
6
5
  const { storage } = require('../../../../../datadog-core')
7
6
  const { getIastContext } = require('../iast-context')
7
+ const StoredInjectionAnalyzer = require('./stored-injection-analyzer')
8
8
 
9
9
  class CodeInjectionAnalyzer extends StoredInjectionAnalyzer {
10
10
  constructor () {
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
- const InjectionAnalyzer = require('./injection-analyzer')
3
2
  const { COMMAND_INJECTION } = require('../vulnerabilities')
3
+ const InjectionAnalyzer = require('./injection-analyzer')
4
4
 
5
5
  class CommandInjectionAnalyzer extends InjectionAnalyzer {
6
6
  constructor () {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const Analyzer = require('./vulnerability-analyzer')
4
3
  const { getNodeModulesPaths } = require('../path-line')
4
+ const Analyzer = require('./vulnerability-analyzer')
5
5
 
6
6
  const EXCLUDED_PATHS = [
7
7
  // Express
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const Analyzer = require('./vulnerability-analyzer')
4
3
  const { getRelativePath } = require('../path-line')
4
+ const Analyzer = require('./vulnerability-analyzer')
5
5
 
6
6
  class HardcodedBaseAnalyzer extends Analyzer {
7
7
  constructor (type, allRules = [], valueOnlyRules = []) {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
- const Analyzer = require('./vulnerability-analyzer')
3
2
  const { getRanges } = require('../taint-tracking/operations')
4
3
  const { SQL_ROW_VALUE } = require('../taint-tracking/source-types')
4
+ const Analyzer = require('./vulnerability-analyzer')
5
5
 
6
6
  class InjectionAnalyzer extends Analyzer {
7
7
  _isVulnerable (value, iastContext) {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
- const InjectionAnalyzer = require('./injection-analyzer')
3
2
  const { LDAP_INJECTION } = require('../vulnerabilities')
4
3
  const { getNodeModulesPaths } = require('../path-line')
4
+ const InjectionAnalyzer = require('./injection-analyzer')
5
5
 
6
6
  const EXCLUDED_PATHS = getNodeModulesPaths('ldapjs-promise')
7
7
 
@@ -1,16 +1,16 @@
1
1
  'use strict'
2
2
 
3
- const InjectionAnalyzer = require('./injection-analyzer')
4
3
  const { NOSQL_MONGODB_INJECTION } = require('../vulnerabilities')
5
4
  const { getRanges, addSecureMark } = require('../taint-tracking/operations')
6
5
  const { getNodeModulesPaths } = require('../path-line')
7
6
  const { storage } = require('../../../../../datadog-core')
8
7
  const { getIastContext } = require('../iast-context')
9
8
  const { HTTP_REQUEST_PARAMETER, HTTP_REQUEST_BODY } = require('../taint-tracking/source-types')
10
-
11
- const EXCLUDED_PATHS_FROM_STACK = getNodeModulesPaths('mongodb', 'mongoose', 'mquery')
12
9
  const { NOSQL_MONGODB_INJECTION_MARK } = require('../taint-tracking/secure-marks')
13
10
  const { iterateObjectStrings } = require('../utils')
11
+ const InjectionAnalyzer = require('./injection-analyzer')
12
+
13
+ const EXCLUDED_PATHS_FROM_STACK = getNodeModulesPaths('mongodb', 'mongoose', 'mquery')
14
14
 
15
15
  const SAFE_OPERATORS = new Set(['$eq', '$gt', '$gte', '$in', '$lt', '$lte', '$ne', '$nin',
16
16
  '$exists', '$type', '$mod', '$bitsAllClear', '$bitsAllSet', '$bitsAnyClear', '$bitsAnySet'])
@@ -2,10 +2,10 @@
2
2
 
3
3
  const path = require('path')
4
4
 
5
- const InjectionAnalyzer = require('./injection-analyzer')
6
5
  const { getIastContext } = require('../iast-context')
7
6
  const { storage } = require('../../../../../datadog-core')
8
7
  const { PATH_TRAVERSAL } = require('../vulnerabilities')
8
+ const InjectionAnalyzer = require('./injection-analyzer')
9
9
 
10
10
  const ignoredOperations = new Set(['dir.close', 'close'])
11
11
 
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const InjectionAnalyzer = require('./injection-analyzer')
4
3
  const { SSRF } = require('../vulnerabilities')
4
+ const InjectionAnalyzer = require('./injection-analyzer')
5
5
 
6
6
  class SSRFAnalyzer extends InjectionAnalyzer {
7
7
  constructor () {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const InjectionAnalyzer = require('./injection-analyzer')
4
3
  const { UNTRUSTED_DESERIALIZATION } = require('../vulnerabilities')
4
+ const InjectionAnalyzer = require('./injection-analyzer')
5
5
 
6
6
  class UntrustedDeserializationAnalyzer extends InjectionAnalyzer {
7
7
  constructor () {
@@ -1,6 +1,5 @@
1
1
  'use strict'
2
2
 
3
- const InjectionAnalyzer = require('./injection-analyzer')
4
3
  const { UNVALIDATED_REDIRECT } = require('../vulnerabilities')
5
4
  const { getNodeModulesPaths } = require('../path-line')
6
5
  const { getRanges } = require('../taint-tracking/operations')
@@ -8,6 +7,7 @@ const {
8
7
  HTTP_REQUEST_BODY,
9
8
  HTTP_REQUEST_PARAMETER
10
9
  } = require('../taint-tracking/source-types')
10
+ const InjectionAnalyzer = require('./injection-analyzer')
11
11
 
12
12
  const EXCLUDED_PATHS = [
13
13
  getNodeModulesPaths('express/lib/response.js'),
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
- const Analyzer = require('./vulnerability-analyzer')
3
2
  const { WEAK_CIPHER } = require('../vulnerabilities')
3
+ const Analyzer = require('./vulnerability-analyzer')
4
4
 
5
5
  const INSECURE_CIPHERS = new Set([
6
6
  'des', 'des-cbc', 'des-cfb', 'des-cfb1', 'des-cfb8', 'des-ecb', 'des-ede', 'des-ede-cbc', 'des-ede-cfb',
@@ -3,8 +3,8 @@
3
3
  const path = require('path')
4
4
 
5
5
  const { getNodeModulesPaths } = require('../path-line')
6
- const Analyzer = require('./vulnerability-analyzer')
7
6
  const { WEAK_HASH } = require('../vulnerabilities')
7
+ const Analyzer = require('./vulnerability-analyzer')
8
8
 
9
9
  const INSECURE_HASH_ALGORITHMS = new Set([
10
10
  'md4', 'md4WithRSAEncryption', 'RSA-MD4',
@@ -23,7 +23,8 @@ const EXCLUDED_LOCATIONS = getNodeModulesPaths(
23
23
  'ws/lib/websocket-server.js',
24
24
  'google-gax/build/src/grpc.js',
25
25
  'cookie-signature/index.js',
26
- 'express-session/index.js'
26
+ 'express-session/index.js',
27
+ 'node-preload/preload-list-env.js'
27
28
  )
28
29
 
29
30
  const EXCLUDED_PATHS_FROM_STACK = [
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
- const Analyzer = require('./vulnerability-analyzer')
3
2
  const { WEAK_RANDOMNESS } = require('../vulnerabilities')
3
+ const Analyzer = require('./vulnerability-analyzer')
4
4
 
5
5
  class WeakRandomnessAnalyzer extends Analyzer {
6
6
  constructor () {
@@ -3,13 +3,13 @@
3
3
  const { channel } = require('dc-polyfill')
4
4
 
5
5
  const Plugin = require('../../plugins/plugin')
6
+ const { storage } = require('../../../../datadog-core')
7
+ const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
8
+ const log = require('../../log')
6
9
  const iastTelemetry = require('./telemetry')
7
10
  const { getInstrumentedMetric, getExecutedMetric, TagKey, EXECUTED_SOURCE, formatTags } =
8
11
  require('./telemetry/iast-metric')
9
- const { storage } = require('../../../../datadog-core')
10
12
  const { getIastContext } = require('./iast-context')
11
- const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
12
- const log = require('../../log')
13
13
 
14
14
  /**
15
15
  * Used by vulnerability sources and sinks to subscribe diagnostic channel events
@@ -1,11 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const vulnerabilityReporter = require('./vulnerability-reporter')
4
- const { enableAllAnalyzers, disableAllAnalyzers } = require('./analyzers')
3
+ const dc = require('dc-polyfill')
5
4
  const web = require('../../plugins/util/web')
6
5
  const { storage } = require('../../../../datadog-core')
6
+ const { enable: enableFsPlugin, disable: disableFsPlugin, IAST_MODULE } = require('../rasp/fs-plugin')
7
+ const { incomingHttpRequestStart, incomingHttpRequestEnd, responseWriteHead } = require('../channels')
8
+ const vulnerabilityReporter = require('./vulnerability-reporter')
9
+ const { enableAllAnalyzers, disableAllAnalyzers } = require('./analyzers')
7
10
  const overheadController = require('./overhead-controller')
8
- const dc = require('dc-polyfill')
9
11
  const iastContextFunctions = require('./iast-context')
10
12
  const {
11
13
  enableTaintTracking,
@@ -16,9 +18,7 @@ const {
16
18
  } = require('./taint-tracking')
17
19
  const { IAST_ENABLED_TAG_KEY } = require('./tags')
18
20
  const iastTelemetry = require('./telemetry')
19
- const { enable: enableFsPlugin, disable: disableFsPlugin, IAST_MODULE } = require('../rasp/fs-plugin')
20
21
  const securityControls = require('./security-controls')
21
- const { incomingHttpRequestStart, incomingHttpRequestEnd, responseWriteHead } = require('../channels')
22
22
 
23
23
  const collectedResponseHeaders = new WeakMap()
24
24
 
@@ -5,10 +5,10 @@ const dc = require('dc-polyfill')
5
5
  const { storage } = require('../../../../../datadog-core')
6
6
  const shimmer = require('../../../../../datadog-shimmer')
7
7
  const log = require('../../../log')
8
- const { parse, SANITIZER_TYPE } = require('./parser')
9
8
  const TaintTrackingOperations = require('../taint-tracking/operations')
10
9
  const { getIastContext } = require('../iast-context')
11
10
  const { iterateObjectStrings } = require('../utils')
11
+ const { parse, SANITIZER_TYPE } = require('./parser')
12
12
 
13
13
  // esm
14
14
  const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
@@ -1,5 +1,6 @@
1
1
  'use strict'
2
2
 
3
+ const kafkaContextPlugin = require('../context/kafka-ctx-plugin')
3
4
  const {
4
5
  createTransaction,
5
6
  removeTransaction,
@@ -11,8 +12,6 @@ const {
11
12
  const taintTrackingPlugin = require('./plugin')
12
13
  const kafkaConsumerPlugin = require('./plugins/kafka')
13
14
 
14
- const kafkaContextPlugin = require('../context/kafka-ctx-plugin')
15
-
16
15
  module.exports = {
17
16
  enableTaintTracking (config, telemetryVerbosity) {
18
17
  enableTaintOperations(telemetryVerbosity)
@@ -2,8 +2,8 @@
2
2
 
3
3
  const TaintedUtils = require('@datadog/native-iast-taint-tracking')
4
4
  const { IAST_TRANSACTION_ID } = require('../iast-context')
5
- const { HTTP_REQUEST_PARAMETER } = require('./source-types')
6
5
  const log = require('../../../log')
6
+ const { HTTP_REQUEST_PARAMETER } = require('./source-types')
7
7
 
8
8
  const SEPARATOR = '\u0000' // Unit Separator (cannot be in URL keys)
9
9
 
@@ -3,6 +3,7 @@
3
3
  const { SourceIastPlugin } = require('../iast-plugin')
4
4
  const { getIastContext } = require('../iast-context')
5
5
  const { storage } = require('../../../../../datadog-core')
6
+ const { EXECUTED_SOURCE } = require('../telemetry/iast-metric')
6
7
  const { taintObject, newTaintedString, getRanges, taintQueryWithCache } = require('./operations')
7
8
  const {
8
9
  HTTP_REQUEST_BODY,
@@ -15,7 +16,6 @@ const {
15
16
  HTTP_REQUEST_URI,
16
17
  SQL_ROW_VALUE
17
18
  } = require('./source-types')
18
- const { EXECUTED_SOURCE } = require('../telemetry/iast-metric')
19
19
 
20
20
  const REQ_HEADER_TAGS = EXECUTED_SOURCE.formatTags(HTTP_REQUEST_HEADER_VALUE, HTTP_REQUEST_HEADER_NAME)
21
21
  const REQ_URI_TAGS = EXECUTED_SOURCE.formatTags(HTTP_REQUEST_URI)
@@ -5,18 +5,18 @@
5
5
  const Module = require('module')
6
6
  const { pathToFileURL } = require('url')
7
7
  const { MessageChannel } = require('worker_threads')
8
+ const { isMainThread } = require('worker_threads')
9
+ const dc = require('dc-polyfill')
8
10
  const shimmer = require('../../../../../datadog-shimmer')
9
- const { isPrivateModule, isDdTrace } = require('./filter')
10
- const { csiMethods } = require('./csi-methods')
11
11
  const { getName } = require('../telemetry/verbosity')
12
12
  const telemetry = require('../telemetry')
13
- const { incrementTelemetryIfNeeded } = require('./rewriter-telemetry')
14
- const dc = require('dc-polyfill')
15
13
  const log = require('../../../log')
16
- const { isMainThread } = require('worker_threads')
17
- const { LOG_MESSAGE, REWRITTEN_MESSAGE } = require('./constants')
18
14
  const orchestrionConfig = require('../../../../../datadog-instrumentations/src/orchestrion-config')
19
- const { getEnvironmentVariable } = require('../../../config-helper')
15
+ const { getEnvironmentVariable } = require('../../../config/helper')
16
+ const { LOG_MESSAGE, REWRITTEN_MESSAGE } = require('./constants')
17
+ const { incrementTelemetryIfNeeded } = require('./rewriter-telemetry')
18
+ const { csiMethods } = require('./csi-methods')
19
+ const { isPrivateModule, isDdTrace } = require('./filter')
20
20
 
21
21
  let config
22
22
  const hardcodedSecretCh = dc.channel('datadog:secrets:result')
@@ -183,14 +183,10 @@ function enableRewriter (telemetryVerbosity) {
183
183
  }
184
184
 
185
185
  function isEsmConfigured () {
186
- const hasLoaderArg = isFlagPresent('--loader') || isFlagPresent('--experimental-loader')
187
- if (hasLoaderArg) return true
188
-
189
- // Fast path for common case when enabled
190
- if (require.cache[`${process.cwd()}/node_modules/import-in-the-middle/hook.js`]) {
191
- return true
192
- }
193
- return Object.keys(require.cache).some(file => file.endsWith('import-in-the-middle/hook.js'))
186
+ return (isFlagPresent('--loader') ||
187
+ isFlagPresent('--experimental-loader') ||
188
+ isFlagPresent('dd-trace/initialize.mjs')) ||
189
+ isFlagPresent('dd-trace/register.js')
194
190
  }
195
191
 
196
192
  let enableEsmRewriter = function (telemetryVerbosity) {
@@ -6,8 +6,8 @@ const { storage } = require('../../../../../datadog-core')
6
6
  const iastContextFunctions = require('../iast-context')
7
7
  const { EXECUTED_PROPAGATION } = require('../telemetry/iast-metric')
8
8
  const { isDebugAllowed } = require('../telemetry/verbosity')
9
- const { taintObject } = require('./operations-taint-object')
10
9
  const log = require('../../../log')
10
+ const { taintObject } = require('./operations-taint-object')
11
11
 
12
12
  const mathRandomCallCh = dc.channel('datadog:random:call')
13
13
  const evalCallCh = dc.channel('datadog:eval:call')
@@ -2,8 +2,8 @@
2
2
 
3
3
  const log = require('../../../log')
4
4
  const { Namespace } = require('../../../telemetry/metrics')
5
- const { addMetricsToSpan } = require('./span-tags')
6
5
  const { IAST_TRACE_METRIC_PREFIX } = require('../tags')
6
+ const { addMetricsToSpan } = require('./span-tags')
7
7
 
8
8
  const DD_IAST_METRICS_NAMESPACE = Symbol('_dd.iast.request.metrics.namespace')
9
9
 
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
3
  const { LRUCache } = require('../../../../../vendor/dist/lru-cache')
4
- const vulnerabilitiesFormatter = require('./vulnerabilities-formatter')
5
- const { IAST_ENABLED_TAG_KEY, IAST_JSON_TAG_KEY } = require('./tags')
6
4
  const { keepTrace } = require('../../priority_sampler')
7
5
  const { reportStackTrace, getCallsiteFrames, canReportStackTrace, STACK_TRACE_NAMESPACES } = require('../stack_trace')
8
- const { getOriginalPathAndLineFromSourceMap } = require('./taint-tracking/rewriter')
9
6
  const { ASM } = require('../../standalone/product')
7
+ const vulnerabilitiesFormatter = require('./vulnerabilities-formatter')
8
+ const { IAST_ENABLED_TAG_KEY, IAST_JSON_TAG_KEY } = require('./tags')
9
+ const { getOriginalPathAndLineFromSourceMap } = require('./taint-tracking/rewriter')
10
10
 
11
11
  const VULNERABILITIES_KEY = 'vulnerabilities'
12
12
  const VULNERABILITY_HASHES_MAX_SIZE = 1000
@@ -1,8 +1,13 @@
1
1
  'use strict'
2
2
 
3
3
  const log = require('../log')
4
+ const web = require('../plugins/util/web')
5
+ const { extractIp } = require('../plugins/util/ip_extractor')
6
+ const { HTTP_CLIENT_IP } = require('../../../../ext/tags')
7
+ const { storage } = require('../../../datadog-core')
8
+ const { isInServerlessEnvironment } = require('../serverless')
4
9
  const RuleManager = require('./rule_manager')
5
- const remoteConfig = require('../remote_config')
10
+ const appsecRemoteConfig = require('./remote_config')
6
11
  const {
7
12
  bodyParser,
8
13
  cookieParser,
@@ -31,15 +36,10 @@ const addresses = require('./addresses')
31
36
  const Reporter = require('./reporter')
32
37
  const appsecTelemetry = require('./telemetry')
33
38
  const apiSecuritySampler = require('./api_security_sampler')
34
- const web = require('../plugins/util/web')
35
- const { extractIp } = require('../plugins/util/ip_extractor')
36
- const { HTTP_CLIENT_IP } = require('../../../../ext/tags')
37
39
  const { isBlocked, block, callBlockDelegation, setTemplates, getBlockingAction } = require('./blocking')
38
40
  const UserTracking = require('./user_tracking')
39
- const { storage } = require('../../../datadog-core')
40
41
  const graphql = require('./graphql')
41
42
  const rasp = require('./rasp')
42
- const { isInServerlessEnvironment } = require('../serverless')
43
43
 
44
44
  const responseAnalyzedSet = new WeakSet()
45
45
  const storedResponseHeaders = new WeakMap()
@@ -63,7 +63,7 @@ function enable (_config) {
63
63
 
64
64
  RuleManager.loadRules(_config.appsec)
65
65
 
66
- remoteConfig.enableWafUpdate(_config.appsec)
66
+ appsecRemoteConfig.enableWafUpdate(_config.appsec)
67
67
 
68
68
  Reporter.init(_config.appsec)
69
69
 
@@ -373,7 +373,7 @@ function disable () {
373
373
  graphql.disable()
374
374
  rasp.disable()
375
375
 
376
- remoteConfig.disableWafUpdate()
376
+ appsecRemoteConfig.disableWafUpdate()
377
377
 
378
378
  apiSecuritySampler.disable()
379
379
 
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
3
  const { childProcessExecutionTracingChannel } = require('../channels')
4
- const { RULE_TYPES, handleResult } = require('./utils')
5
4
  const { storage } = require('../../../../datadog-core')
6
5
  const addresses = require('../addresses')
7
6
  const waf = require('../waf')
7
+ const { RULE_TYPES, handleResult } = require('./utils')
8
8
 
9
9
  let config
10
10
 
@@ -8,11 +8,11 @@ const {
8
8
  routerMiddlewareError
9
9
  } = require('../channels')
10
10
  const { block, registerBlockDelegation, isBlocked } = require('../blocking')
11
+ const { updateRaspRuleMatchMetricTags } = require('../telemetry')
11
12
  const ssrf = require('./ssrf')
12
13
  const sqli = require('./sql_injection')
13
14
  const lfi = require('./lfi')
14
15
  const cmdi = require('./command_injection')
15
- const { updateRaspRuleMatchMetricTags } = require('../telemetry')
16
16
 
17
17
  const { DatadogRaspAbortError } = require('./utils')
18
18
 
@@ -73,16 +73,14 @@ function handleUncaughtExceptionMonitor (error) {
73
73
  }
74
74
  } else {
75
75
  const cleanUp = removeAllListeners(process, 'uncaughtException')
76
- const handler = () => {
77
- process.removeListener('uncaughtException', handler)
78
- }
76
+ const handler = () => {}
79
77
 
80
78
  setTimeout(() => {
81
79
  process.removeListener('uncaughtException', handler)
82
80
  cleanUp()
83
81
  })
84
82
 
85
- process.on('uncaughtException', handler)
83
+ process.once('uncaughtException', handler)
86
84
  }
87
85
  }
88
86