dd-trace 5.53.0 → 5.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/index.d.ts +33 -16
  3. package/initialize.mjs +3 -4
  4. package/package.json +36 -34
  5. package/packages/datadog-core/src/utils/src/get.js +1 -1
  6. package/packages/datadog-core/src/utils/src/has.js +1 -1
  7. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  8. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  9. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  10. package/packages/datadog-core/src/utils/src/set.js +1 -1
  11. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  12. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  13. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  14. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  15. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  16. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  17. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  18. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
  19. package/packages/datadog-instrumentations/src/couchbase.js +3 -3
  20. package/packages/datadog-instrumentations/src/cucumber.js +87 -40
  21. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  22. package/packages/datadog-instrumentations/src/dns.js +1 -1
  23. package/packages/datadog-instrumentations/src/fs.js +1 -1
  24. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  25. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  26. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  27. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  28. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  29. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  30. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  31. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  32. package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
  33. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  34. package/packages/datadog-instrumentations/src/jest.js +137 -48
  35. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  36. package/packages/datadog-instrumentations/src/knex.js +4 -4
  37. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  38. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  39. package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
  40. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  41. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  42. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  43. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  44. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  45. package/packages/datadog-instrumentations/src/net.js +1 -1
  46. package/packages/datadog-instrumentations/src/next.js +1 -0
  47. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  48. package/packages/datadog-instrumentations/src/openai.js +21 -23
  49. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  50. package/packages/datadog-instrumentations/src/pg.js +1 -2
  51. package/packages/datadog-instrumentations/src/playwright.js +112 -69
  52. package/packages/datadog-instrumentations/src/redis.js +3 -3
  53. package/packages/datadog-instrumentations/src/restify.js +2 -2
  54. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  55. package/packages/datadog-instrumentations/src/router.js +22 -25
  56. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  57. package/packages/datadog-instrumentations/src/vitest.js +77 -28
  58. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  59. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  60. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  61. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  62. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  63. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  64. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  65. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  66. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  67. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  68. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  69. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  70. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  72. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  73. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  74. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  75. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  76. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  77. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  78. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  79. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  80. package/packages/datadog-plugin-cucumber/src/index.js +57 -2
  81. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  82. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  83. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  84. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  85. package/packages/datadog-plugin-express/src/index.js +10 -12
  86. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  87. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  88. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  89. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  90. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  91. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  92. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  93. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  94. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  95. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  96. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  97. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  98. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  99. package/packages/datadog-plugin-http/src/client.js +18 -7
  100. package/packages/datadog-plugin-http2/src/client.js +20 -20
  101. package/packages/datadog-plugin-jest/src/index.js +23 -21
  102. package/packages/datadog-plugin-jest/src/util.js +8 -8
  103. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  104. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  105. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  106. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  107. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  108. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  109. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  110. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  111. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  112. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  113. package/packages/datadog-plugin-mocha/src/index.js +33 -13
  114. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  115. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  116. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  117. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  118. package/packages/datadog-plugin-next/src/index.js +6 -5
  119. package/packages/datadog-plugin-openai/src/services.js +6 -10
  120. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  121. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  122. package/packages/datadog-plugin-playwright/src/index.js +22 -2
  123. package/packages/datadog-plugin-redis/src/index.js +1 -1
  124. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  125. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  126. package/packages/datadog-plugin-router/src/index.js +1 -1
  127. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  128. package/packages/datadog-plugin-vitest/src/index.js +47 -31
  129. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  130. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  131. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  132. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  133. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  134. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  135. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  136. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  137. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  138. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  139. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  140. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  141. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  142. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  143. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  144. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  145. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  146. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  147. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  148. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  149. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  150. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  151. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  152. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  153. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  154. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  157. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  158. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  160. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  162. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  163. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  166. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  167. package/packages/dd-trace/src/appsec/index.js +1 -1
  168. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  169. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  170. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  171. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  172. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  173. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  174. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  175. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  176. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  177. package/packages/dd-trace/src/azure_metadata.js +2 -7
  178. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  179. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  180. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  181. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  182. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  183. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  184. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  185. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  186. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  187. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  188. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  189. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  191. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  192. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  193. package/packages/dd-trace/src/config.js +82 -51
  194. package/packages/dd-trace/src/config_stable.js +3 -3
  195. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  196. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  197. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  198. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  199. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  200. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  201. package/packages/dd-trace/src/datastreams/size.js +1 -1
  202. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +74 -67
  203. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  204. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  205. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
  206. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  209. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  210. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  211. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  212. package/packages/dd-trace/src/dogstatsd.js +5 -4
  213. package/packages/dd-trace/src/encode/0.4.js +9 -9
  214. package/packages/dd-trace/src/encode/0.5.js +1 -1
  215. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  216. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  217. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  218. package/packages/dd-trace/src/exporter.js +6 -6
  219. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  220. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  221. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  222. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  223. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  224. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  225. package/packages/dd-trace/src/flare/file.js +1 -5
  226. package/packages/dd-trace/src/format.js +1 -1
  227. package/packages/dd-trace/src/git_properties.js +1 -1
  228. package/packages/dd-trace/src/id.js +12 -6
  229. package/packages/dd-trace/src/iitm.js +10 -22
  230. package/packages/dd-trace/src/lambda/handler.js +6 -6
  231. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  232. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  233. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  234. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  235. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  236. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  237. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  238. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  239. package/packages/dd-trace/src/llmobs/tagger.js +110 -96
  240. package/packages/dd-trace/src/llmobs/util.js +9 -9
  241. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  242. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  243. package/packages/dd-trace/src/log/index.js +4 -4
  244. package/packages/dd-trace/src/log/log.js +1 -1
  245. package/packages/dd-trace/src/log/writer.js +2 -2
  246. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  247. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  248. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  249. package/packages/dd-trace/src/noop/span.js +3 -5
  250. package/packages/dd-trace/src/noop/tracer.js +1 -2
  251. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  252. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  253. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  254. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  255. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  256. package/packages/dd-trace/src/opentracing/span.js +9 -14
  257. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  258. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  259. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  260. package/packages/dd-trace/src/pkg.js +1 -1
  261. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  262. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  263. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  264. package/packages/dd-trace/src/plugins/index.js +0 -1
  265. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  266. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  267. package/packages/dd-trace/src/plugins/producer.js +2 -2
  268. package/packages/dd-trace/src/plugins/storage.js +2 -2
  269. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  270. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  271. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  272. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  273. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  274. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  275. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  276. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  277. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  278. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  279. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  280. package/packages/dd-trace/src/priority_sampler.js +22 -22
  281. package/packages/dd-trace/src/profiling/config.js +44 -8
  282. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  283. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  284. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  285. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  286. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  287. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  288. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  289. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  290. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  291. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  292. package/packages/dd-trace/src/proxy.js +7 -9
  293. package/packages/dd-trace/src/random_sampler.js +40 -0
  294. package/packages/dd-trace/src/rate_limiter.js +4 -4
  295. package/packages/dd-trace/src/remote_config/index.js +3 -7
  296. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  297. package/packages/dd-trace/src/require-package-json.js +1 -1
  298. package/packages/dd-trace/src/ritm.js +4 -4
  299. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  300. package/packages/dd-trace/src/sampler.js +33 -4
  301. package/packages/dd-trace/src/sampling_rule.js +12 -3
  302. package/packages/dd-trace/src/scope.js +1 -1
  303. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  304. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  305. package/packages/dd-trace/src/span_processor.js +3 -3
  306. package/packages/dd-trace/src/span_sampler.js +4 -1
  307. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  308. package/packages/dd-trace/src/startup-log.js +2 -2
  309. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  310. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  311. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  312. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  313. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  314. package/packages/dd-trace/src/util.js +1 -1
  315. package/version.js +1 -0
  316. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  317. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  318. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  319. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -41,47 +41,23 @@ function removeTransaction (iastContext) {
41
41
  }
42
42
 
43
43
  function newTaintedString (iastContext, string, name, type) {
44
- let result
45
44
  const transactionId = iastContext?.[IAST_TRANSACTION_ID]
46
- if (transactionId) {
47
- result = TaintedUtils.newTaintedString(transactionId, string, name, type)
48
- } else {
49
- result = string
50
- }
51
- return result
45
+ return transactionId ? TaintedUtils.newTaintedString(transactionId, string, name, type) : string
52
46
  }
53
47
 
54
48
  function newTaintedObject (iastContext, obj, name, type) {
55
- let result
56
49
  const transactionId = iastContext?.[IAST_TRANSACTION_ID]
57
- if (transactionId) {
58
- result = TaintedUtils.newTaintedObject(transactionId, obj, name, type)
59
- } else {
60
- result = obj
61
- }
62
- return result
50
+ return transactionId ? TaintedUtils.newTaintedObject(transactionId, obj, name, type) : obj
63
51
  }
64
52
 
65
53
  function isTainted (iastContext, string) {
66
- let result
67
54
  const transactionId = iastContext?.[IAST_TRANSACTION_ID]
68
- if (transactionId) {
69
- result = TaintedUtils.isTainted(transactionId, string)
70
- } else {
71
- result = false
72
- }
73
- return result
55
+ return transactionId ? TaintedUtils.isTainted(transactionId, string) : false
74
56
  }
75
57
 
76
58
  function getRanges (iastContext, string) {
77
- let result
78
59
  const transactionId = iastContext?.[IAST_TRANSACTION_ID]
79
- if (transactionId) {
80
- result = TaintedUtils.getRanges(transactionId, string)
81
- } else {
82
- result = []
83
- }
84
- return result
60
+ return transactionId ? TaintedUtils.getRanges(transactionId, string) : []
85
61
  }
86
62
 
87
63
  function addSecureMark (iastContext, string, mark, createNewTainted = true) {
@@ -129,13 +129,7 @@ class TaintTrackingPlugin extends SourceIastPlugin {
129
129
  { channelName: 'datadog:url:parse:finish' },
130
130
  ({ input, base, parsed, isURL }) => {
131
131
  const iastContext = getIastContext(storage('legacy').getStore())
132
- let ranges
133
-
134
- if (base) {
135
- ranges = getRanges(iastContext, base)
136
- } else {
137
- ranges = getRanges(iastContext, input)
138
- }
132
+ const ranges = getRanges(iastContext, base || input)
139
133
 
140
134
  if (ranges?.length) {
141
135
  if (isURL) {
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
3
  const shimmer = require('../../../../../../datadog-shimmer')
4
- const { storage } = require('../../../../../../datadog-core')
5
4
  const { getIastContext } = require('../../iast-context')
6
5
  const { KAFKA_MESSAGE_KEY, KAFKA_MESSAGE_VALUE } = require('../source-types')
7
6
  const { newTaintedObject, newTaintedString } = require('../operations')
@@ -10,7 +9,7 @@ const { SourceIastPlugin } = require('../../iast-plugin')
10
9
  class KafkaConsumerIastPlugin extends SourceIastPlugin {
11
10
  onConfigure () {
12
11
  this.addSub({ channelName: 'dd-trace:kafkajs:consumer:afterStart', tag: [KAFKA_MESSAGE_KEY, KAFKA_MESSAGE_VALUE] },
13
- ({ message }) => this.taintKafkaMessage(message)
12
+ ({ message, currentStore }) => this.taintKafkaMessage(message, currentStore)
14
13
  )
15
14
  }
16
15
 
@@ -21,8 +20,8 @@ class KafkaConsumerIastPlugin extends SourceIastPlugin {
21
20
  }
22
21
  }
23
22
 
24
- taintKafkaMessage (message) {
25
- const iastContext = getIastContext(storage('legacy').getStore())
23
+ taintKafkaMessage (message, currentStore) {
24
+ const iastContext = getIastContext(currentStore)
26
25
 
27
26
  if (iastContext && message) {
28
27
  const { key, value } = message
@@ -12,7 +12,7 @@ const ddTraceDir = path.join(currentUrl.pathname, '..', '..', '..', '..', '..',
12
12
  let port, rewriter, iastEnabled
13
13
 
14
14
  export async function initialize (data) {
15
- if (rewriter) return Promise.reject(new Error('ALREADY INITIALIZED'))
15
+ if (rewriter) throw new Error('ALREADY INITIALIZED')
16
16
 
17
17
  const { csiMethods, telemetryVerbosity, chainSourceMap, orchestrionConfig } = data
18
18
  port = data.port
@@ -41,11 +41,9 @@ function setGetOriginalPathAndLineFromSourceMapFunction (chainSourceMap, { getOr
41
41
  ? (path, line, column) => {
42
42
  // if --enable-source-maps is present stacktraces of the rewritten files contain the original path, file and
43
43
  // column because the sourcemap chaining is done during the rewriting process so we can skip it
44
- if (isPrivateModule(path) && !isDdTrace(path)) {
45
- return { path, line, column }
46
- } else {
47
- return getOriginalPathAndLineFromSourceMap(path, line, column)
48
- }
44
+ return isPrivateModule(path) && !isDdTrace(path)
45
+ ? { path, line, column }
46
+ : getOriginalPathAndLineFromSourceMap(path, line, column)
49
47
  }
50
48
  : getOriginalPathAndLineFromSourceMap
51
49
  }
@@ -138,7 +136,7 @@ function esmRewritePostProcess (rewritten, filename) {
138
136
 
139
137
  if (metrics?.status === 'modified') {
140
138
  if (filename.startsWith('file://')) {
141
- filename = filename.substring(7)
139
+ filename = filename.slice(7)
142
140
  }
143
141
 
144
142
  cacheRewrittenSourceMap(filename, rewritten.content)
@@ -157,7 +155,7 @@ function shimPrepareStackTrace () {
157
155
  return
158
156
  }
159
157
  const pstDescriptor = Object.getOwnPropertyDescriptor(global.Error, 'prepareStackTrace')
160
- if (pstDescriptor?.configurable || pstDescriptor?.writable) {
158
+ if (!pstDescriptor || pstDescriptor.configurable || pstDescriptor.writable) {
161
159
  Object.defineProperty(global.Error, 'prepareStackTrace', getPrepareStackTraceAccessor())
162
160
  }
163
161
  shimmedPrepareStackTrace = true
@@ -71,7 +71,7 @@ function notString () {
71
71
  }
72
72
 
73
73
  function isValidCsiMethod (fn, protos) {
74
- return protos.some(proto => fn === proto)
74
+ return protos.includes(fn)
75
75
  }
76
76
 
77
77
  function getCsiFn (cb, getContext, ...protos) {
@@ -90,7 +90,7 @@ function getCsiFn (cb, getContext, ...protos) {
90
90
  function csiMethodsDefaults (names, excluded, getContext) {
91
91
  const impl = {}
92
92
  names.forEach(name => {
93
- if (excluded.indexOf(name) !== -1) return
93
+ if (excluded.includes(name)) return
94
94
  impl[name] = getCsiFn(
95
95
  (transactionId, res, target, ...rest) => TaintedUtils[name](transactionId, res, target, ...rest),
96
96
  getContext,
@@ -10,10 +10,10 @@ function addMetricsToSpan (rootSpan, metrics, tagPrefix) {
10
10
  const name = taggedMetricName(data)
11
11
  let total = flattenMap.get(name)
12
12
  const value = flatten(data)
13
- if (!total) {
14
- total = value
15
- } else {
13
+ if (total) {
16
14
  total += value
15
+ } else {
16
+ total = value
17
17
  }
18
18
  flattenMap.set(name, total)
19
19
  })
@@ -34,9 +34,9 @@ function flatten (metricData) {
34
34
  function taggedMetricName (data) {
35
35
  const metric = data.metric
36
36
  const tags = filterTags(data.tags)
37
- return !tags?.length
38
- ? metric
39
- : `${metric}.${processTagValue(tags)}`
37
+ return tags?.length
38
+ ? `${metric}.${processTagValue(tags)}`
39
+ : metric
40
40
  }
41
41
 
42
42
  function filterTags (tags) {
@@ -18,7 +18,7 @@ function isInfoAllowed (value) {
18
18
  function getVerbosity (verbosity) {
19
19
  if (verbosity) {
20
20
  verbosity = verbosity.toUpperCase()
21
- return Verbosity[verbosity] !== undefined ? Verbosity[verbosity] : Verbosity.INFORMATION
21
+ return Verbosity[verbosity] === undefined ? Verbosity.INFORMATION : Verbosity[verbosity]
22
22
  } else {
23
23
  return Verbosity.INFORMATION
24
24
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  const log = require('../../../../../log')
4
4
 
5
- const COMMAND_PATTERN = '^(?:\\s*(?:sudo|doas)\\s+)?\\b\\S+\\b\\s(.*)'
5
+ const COMMAND_PATTERN = String.raw`^(?:\s*(?:sudo|doas)\s+)?\b\S+\b\s(.*)`
6
6
  const pattern = new RegExp(COMMAND_PATTERN, 'gmi')
7
7
 
8
8
  module.exports = function extractSensitiveRanges (evidence) {
@@ -2,7 +2,7 @@
2
2
 
3
3
  const log = require('../../../../../log')
4
4
 
5
- const LDAP_PATTERN = '\\(.*?(?:~=|=|<=|>=)(?<LITERAL>[^)]+)\\)'
5
+ const LDAP_PATTERN = String.raw`\(.*?(?:~=|=|<=|>=)(?<LITERAL>[^)]+)\)`
6
6
  const pattern = new RegExp(LDAP_PATTERN, 'gmi')
7
7
 
8
8
  module.exports = function extractSensitiveRanges (evidence) {
@@ -3,13 +3,13 @@
3
3
  const log = require('../../../../../log')
4
4
 
5
5
  const STRING_LITERAL = '\'(?:\'\'|[^\'])*\''
6
- const POSTGRESQL_ESCAPED_LITERAL = '\\$([^$]*)\\$.*?\\$\\1\\$'
7
- const MYSQL_STRING_LITERAL = '"(?:\\\\"|[^"])*"|\'(?:\\\\\'|[^\'])*\''
6
+ const POSTGRESQL_ESCAPED_LITERAL = String.raw`\$([^$]*)\$.*?\$\1\$`
7
+ const MYSQL_STRING_LITERAL = String.raw`"(?:\\"|[^"])*"|'(?:\\'|[^'])*'`
8
8
  const LINE_COMMENT = '--.*$'
9
- const BLOCK_COMMENT = '/\\*[\\s\\S]*\\*/'
10
- const EXPONENT = '(?:E[-+]?\\d+[fd]?)?'
11
- const INTEGER_NUMBER = '(?<!\\w)\\d+'
12
- const DECIMAL_NUMBER = '\\d*\\.\\d+'
9
+ const BLOCK_COMMENT = String.raw`/\*[\s\S]*\*/`
10
+ const EXPONENT = String.raw`(?:E[-+]?\d+[fd]?)?`
11
+ const INTEGER_NUMBER = String.raw`(?<!\w)\d+`
12
+ const DECIMAL_NUMBER = String.raw`\d*\.\d+`
13
13
  const HEX_NUMBER = 'x\'[0-9a-f]+\'|0x[0-9a-f]+'
14
14
  const BIN_NUMBER = 'b\'[0-9a-f]+\'|0b[0-9a-f]+'
15
15
  const NUMERIC_LITERAL =
@@ -21,7 +21,7 @@ const NUMERIC_LITERAL =
21
21
  INTEGER_NUMBER + EXPONENT
22
22
  ].join('|')
23
23
  })`
24
- const ORACLE_ESCAPED_LITERAL = 'q\'<.*?>\'|q\'\\(.*?\\)\'|q\'\\{.*?\\}\'|q\'\\[.*?\\]\'|q\'(?<ESCAPE>.).*?\\k<ESCAPE>\''
24
+ const ORACLE_ESCAPED_LITERAL = String.raw`q'<.*?>'|q'\(.*?\)'|q'\{.*?\}'|q'\[.*?\]'|q'(?<ESCAPE>.).*?\k<ESCAPE>'`
25
25
 
26
26
  const patterns = {
27
27
  ANSI: new RegExp( // Default
@@ -1,4 +1,5 @@
1
1
  'use strict'
2
+ /* eslint-disable unicorn/prefer-string-slice */
2
3
 
3
4
  const log = require('../../../../log')
4
5
  const vulnerabilities = require('../../vulnerabilities')
@@ -82,7 +83,7 @@ class SensitiveHandler {
82
83
 
83
84
  for (let i = 0; i < value.length; i++) {
84
85
  if (nextTainted != null && nextTainted.start === i) {
85
- this.writeValuePart(valueParts, value.substring(start, i), sourceIndex)
86
+ this.writeValuePart(valueParts, value.slice(start, i), sourceIndex)
86
87
 
87
88
  sourceIndex = sourcesIndexes[nextTaintedIndex]
88
89
 
@@ -113,16 +114,14 @@ class SensitiveHandler {
113
114
  nextSensitive = entries.length > 0 ? entries[0] : null
114
115
  }
115
116
 
116
- if (this.isSensibleSource(sources[sourceIndex])) {
117
- if (!sources[sourceIndex].redacted) {
118
- redactedSources.push(sourceIndex)
119
- sources[sourceIndex].pattern = ''.padEnd(sources[sourceIndex].value.length, REDACTED_SOURCE_BUFFER)
120
- sources[sourceIndex].redacted = true
121
- }
117
+ if (this.isSensibleSource(sources[sourceIndex]) && !sources[sourceIndex].redacted) {
118
+ redactedSources.push(sourceIndex)
119
+ sources[sourceIndex].pattern = ''.padEnd(sources[sourceIndex].value.length, REDACTED_SOURCE_BUFFER)
120
+ sources[sourceIndex].redacted = true
122
121
  }
123
122
 
124
- if (redactedSources.indexOf(sourceIndex) > -1) {
125
- const partValue = value.substring(i, i + (nextTainted.end - nextTainted.start))
123
+ if (redactedSources.includes(sourceIndex)) {
124
+ const partValue = value.slice(i, i + (nextTainted.end - nextTainted.start))
126
125
  this.writeRedactedValuePart(
127
126
  valueParts,
128
127
  partValue.length,
@@ -135,7 +134,7 @@ class SensitiveHandler {
135
134
  redactedSourcesContext[sourceIndex] = []
136
135
  } else {
137
136
  const substringEnd = Math.min(nextTainted.end, value.length)
138
- this.writeValuePart(valueParts, value.substring(nextTainted.start, substringEnd), sourceIndex)
137
+ this.writeValuePart(valueParts, value.slice(nextTainted.start, substringEnd), sourceIndex)
139
138
  }
140
139
 
141
140
  start = i + (nextTainted.end - nextTainted.start)
@@ -144,7 +143,7 @@ class SensitiveHandler {
144
143
  nextTaintedIndex++
145
144
  sourceIndex = null
146
145
  } else if (nextSensitive != null && nextSensitive.start === i) {
147
- this.writeValuePart(valueParts, value.substring(start, i), sourceIndex)
146
+ this.writeValuePart(valueParts, value.slice(start, i), sourceIndex)
148
147
  if (nextTainted != null && intersects(nextSensitive, nextTainted)) {
149
148
  sourceIndex = sourcesIndexes[nextTaintedIndex]
150
149
 
@@ -171,7 +170,7 @@ class SensitiveHandler {
171
170
  }
172
171
 
173
172
  if (start < value.length) {
174
- this.writeValuePart(valueParts, value.substring(start))
173
+ this.writeValuePart(valueParts, value.slice(start))
175
174
  }
176
175
 
177
176
  return { redactedValueParts: valueParts, redactedSources }
@@ -197,10 +196,10 @@ class SensitiveHandler {
197
196
 
198
197
  writeValuePart (valueParts, value, source) {
199
198
  if (value.length > 0) {
200
- if (source != null) {
201
- valueParts.push({ value, source })
202
- } else {
199
+ if (source == null) {
203
200
  valueParts.push({ value })
201
+ } else {
202
+ valueParts.push({ value, source })
204
203
  }
205
204
  }
206
205
  }
@@ -214,7 +213,9 @@ class SensitiveHandler {
214
213
  sourceRedactionContext,
215
214
  isSensibleSource
216
215
  ) {
217
- if (sourceIndex != null) {
216
+ if (sourceIndex == null) {
217
+ valueParts.push({ redacted: true })
218
+ } else {
218
219
  const placeholder = source.value.includes(partValue)
219
220
  ? source.pattern
220
221
  : '*'.repeat(length)
@@ -252,9 +253,9 @@ class SensitiveHandler {
252
253
  _value.substring(_sourceRedactionContext.start - offset, _sourceRedactionContext.end - offset)
253
254
  const indexOfPartValueInPattern = source.value.indexOf(sensitive)
254
255
 
255
- const pattern = indexOfPartValueInPattern > -1
256
- ? placeholder.substring(indexOfPartValueInPattern, indexOfPartValueInPattern + sensitive.length)
257
- : placeholder.substring(_sourceRedactionContext.start, _sourceRedactionContext.end)
256
+ const pattern = indexOfPartValueInPattern === -1
257
+ ? placeholder.substring(_sourceRedactionContext.start, _sourceRedactionContext.end)
258
+ : placeholder.substring(indexOfPartValueInPattern, indexOfPartValueInPattern + sensitive.length)
258
259
 
259
260
  valueParts.push({
260
261
  redacted: true,
@@ -262,7 +263,7 @@ class SensitiveHandler {
262
263
  pattern
263
264
  })
264
265
 
265
- _value = _value.substring(pattern.length)
266
+ _value = _value.slice(pattern.length)
266
267
  offset += pattern.length
267
268
  })
268
269
 
@@ -273,8 +274,6 @@ class SensitiveHandler {
273
274
  })
274
275
  }
275
276
  }
276
- } else {
277
- valueParts.push({ redacted: true })
278
277
  }
279
278
  }
280
279
 
@@ -282,7 +281,7 @@ class SensitiveHandler {
282
281
  if (redactionNamePattern) {
283
282
  try {
284
283
  this._namePattern = new RegExp(redactionNamePattern, 'gmi')
285
- } catch (e) {
284
+ } catch {
286
285
  log.warn('[ASM] Redaction name pattern is not valid')
287
286
  }
288
287
  }
@@ -290,7 +289,7 @@ class SensitiveHandler {
290
289
  if (redactionValuePattern) {
291
290
  try {
292
291
  this._valuePattern = new RegExp(redactionValuePattern, 'gmi')
293
- } catch (e) {
292
+ } catch {
294
293
  log.warn('[ASM] Redaction value pattern is not valid')
295
294
  }
296
295
  }
@@ -1,7 +1,7 @@
1
- // eslint-disable-next-line @stylistic/js/max-len
1
+ // eslint-disable-next-line @stylistic/max-len
2
2
  const DEFAULT_IAST_REDACTION_NAME_PATTERN = '(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|(?:sur|last)name|user(?:name)?|address|e?mail)'
3
- // eslint-disable-next-line @stylistic/js/max-len
4
- const DEFAULT_IAST_REDACTION_VALUE_PATTERN = '(?:bearer\\s+[a-z0-9\\._\\-]+|glpat-[\\w\\-]{20}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\\w=\\-]+\\.ey[I-L][\\w=\\-]+(?:\\.[\\w.+/=\\-]+)?|(?:[\\-]{5}BEGIN[a-z\\s]+PRIVATE\\sKEY[\\-]{5}[^\\-]+[\\-]{5}END[a-z\\s]+PRIVATE\\sKEY[\\-]{5}|ssh-rsa\\s*[a-z0-9/\\.+]{100,})|[\\w\\.-]+@[a-zA-Z\\d\\.-]+\\.[a-zA-Z]{2,})'
3
+ // eslint-disable-next-line @stylistic/max-len
4
+ const DEFAULT_IAST_REDACTION_VALUE_PATTERN = String.raw`(?:bearer\s+[a-z0-9\._\-]+|glpat-[\w\-]{20}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\w=\-]+\.ey[I-L][\w=\-]+(?:\.[\w.+/=\-]+)?|(?:[\-]{5}BEGIN[a-z\s]+PRIVATE\sKEY[\-]{5}[^\-]+[\-]{5}END[a-z\s]+PRIVATE\sKEY[\-]{5}|ssh-rsa\s*[a-z0-9/\.+]{100,})|[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,})`
5
5
 
6
6
  module.exports = {
7
7
  DEFAULT_IAST_REDACTION_NAME_PATTERN,
@@ -57,14 +57,14 @@ class VulnerabilityFormatter {
57
57
 
58
58
  evidence.ranges.forEach((range, rangeIndex) => {
59
59
  if (fromIndex < range.start) {
60
- valueParts.push({ value: evidence.value.substring(fromIndex, range.start) })
60
+ valueParts.push({ value: evidence.value.slice(fromIndex, range.start) })
61
61
  }
62
- valueParts.push({ value: evidence.value.substring(range.start, range.end), source: sourcesIndexes[rangeIndex] })
62
+ valueParts.push({ value: evidence.value.slice(range.start, range.end), source: sourcesIndexes[rangeIndex] })
63
63
  fromIndex = range.end
64
64
  })
65
65
 
66
66
  if (fromIndex < evidence.value.length) {
67
- valueParts.push({ value: evidence.value.substring(fromIndex) })
67
+ valueParts.push({ value: evidence.value.slice(fromIndex) })
68
68
  }
69
69
 
70
70
  return { valueParts }
@@ -72,7 +72,7 @@ class VulnerabilityFormatter {
72
72
 
73
73
  formatEvidence (type, evidence, sourcesIndexes, sources) {
74
74
  if (evidence.value === undefined) {
75
- return undefined
75
+ return
76
76
  }
77
77
 
78
78
  return this._redactVulnearbilities
@@ -7,7 +7,7 @@ const STRINGIFY_RANGE_KEY = 'DD_' + crypto.randomBytes(20).toString('hex')
7
7
  const STRINGIFY_SENSITIVE_KEY = STRINGIFY_RANGE_KEY + 'SENSITIVE'
8
8
  const STRINGIFY_SENSITIVE_NOT_STRING_KEY = STRINGIFY_SENSITIVE_KEY + 'NOTSTRING'
9
9
 
10
- // eslint-disable-next-line @stylistic/js/max-len
10
+ // eslint-disable-next-line @stylistic/max-len
11
11
  const KEYS_REGEX_WITH_SENSITIVE_RANGES = new RegExp(`(?:"(${STRINGIFY_RANGE_KEY}_\\d+_))|(?:"(${STRINGIFY_SENSITIVE_KEY}_\\d+_(\\d+)_))|("${STRINGIFY_SENSITIVE_NOT_STRING_KEY}_\\d+_([\\s0-9.a-zA-Z]*)")`, 'gm')
12
12
  const KEYS_REGEX_WITHOUT_SENSITIVE_RANGES = new RegExp(`"(${STRINGIFY_RANGE_KEY}_\\d+_)`, 'gm')
13
13
 
@@ -99,22 +99,17 @@ function stringifyWithRanges (obj, objRanges, loadSensitiveRanges = false) {
99
99
  } else {
100
100
  currentLevelClone[key] = val
101
101
  }
102
- } else if (Array.isArray(val)) {
103
- currentLevelClone[key] = []
104
102
  } else {
105
- currentLevelClone[key] = {}
103
+ currentLevelClone[key] = Array.isArray(val) ? [] : {}
106
104
  }
107
105
  })
108
106
 
109
107
  value = JSON.stringify(cloneObj, null, 2)
110
108
 
111
109
  if (counter > 0) {
112
- let keysRegex
113
- if (loadSensitiveRanges) {
114
- keysRegex = KEYS_REGEX_WITH_SENSITIVE_RANGES
115
- } else {
116
- keysRegex = KEYS_REGEX_WITHOUT_SENSITIVE_RANGES
117
- }
110
+ const keysRegex = loadSensitiveRanges
111
+ ? KEYS_REGEX_WITH_SENSITIVE_RANGES
112
+ : KEYS_REGEX_WITHOUT_SENSITIVE_RANGES
118
113
  keysRegex.lastIndex = 0
119
114
 
120
115
  let regexRes = keysRegex.exec(value)
@@ -141,7 +136,7 @@ function stringifyWithRanges (obj, objRanges, loadSensitiveRanges = false) {
141
136
 
142
137
  sensitiveRanges.push({
143
138
  start: offset,
144
- end: offset + parseInt(regexRes[3])
139
+ end: offset + Number.parseInt(regexRes[3])
145
140
  })
146
141
 
147
142
  value = value.replace(sensitiveId, '')
@@ -79,17 +79,15 @@ function isValidVulnerability (vulnerability) {
79
79
  }
80
80
 
81
81
  function sendVulnerabilities (vulnerabilities, span) {
82
- if (vulnerabilities && vulnerabilities.length) {
83
- if (span && span.addTags) {
84
- const validatedVulnerabilities = vulnerabilities.filter(isValidVulnerability)
85
- const jsonToSend = vulnerabilitiesFormatter.toJson(validatedVulnerabilities)
86
-
87
- if (jsonToSend.vulnerabilities.length > 0) {
88
- const tags = {}
89
- // TODO: Store this outside of the span and set the tag in the exporter.
90
- tags[IAST_JSON_TAG_KEY] = JSON.stringify(jsonToSend)
91
- span.addTags(tags)
92
- }
82
+ if (vulnerabilities?.length && span?.addTags) {
83
+ const validatedVulnerabilities = vulnerabilities.filter(isValidVulnerability)
84
+ const jsonToSend = vulnerabilitiesFormatter.toJson(validatedVulnerabilities)
85
+
86
+ if (jsonToSend.vulnerabilities.length > 0) {
87
+ const tags = {}
88
+ // TODO: Store this outside of the span and set the tag in the exporter.
89
+ tags[IAST_JSON_TAG_KEY] = JSON.stringify(jsonToSend)
90
+ span.addTags(tags)
93
91
  }
94
92
  }
95
93
  return IAST_JSON_TAG_KEY
@@ -58,7 +58,7 @@ function enable (_config) {
58
58
 
59
59
  remoteConfig.enableWafUpdate(_config.appsec)
60
60
 
61
- Reporter.setRateLimit(_config.appsec.rateLimit)
61
+ Reporter.init(_config.appsec)
62
62
 
63
63
  apiSecuritySampler.configure(_config)
64
64
 
@@ -22,8 +22,8 @@ function removeAllListeners (emitter, event) {
22
22
  }
23
23
  cleaned = true
24
24
 
25
- for (let i = 0; i < listeners.length; ++i) {
26
- emitter.on(event, listeners[i])
25
+ for (const listener of listeners) {
26
+ emitter.on(event, listener)
27
27
  }
28
28
  }
29
29
  }
@@ -41,19 +41,7 @@ function findDatadogRaspAbortError (err, deep = 10) {
41
41
  function handleUncaughtExceptionMonitor (error) {
42
42
  if (!blockOnDatadogRaspAbortError({ error })) return
43
43
 
44
- if (!process.hasUncaughtExceptionCaptureCallback()) {
45
- const cleanUp = removeAllListeners(process, 'uncaughtException')
46
- const handler = () => {
47
- process.removeListener('uncaughtException', handler)
48
- }
49
-
50
- setTimeout(() => {
51
- process.removeListener('uncaughtException', handler)
52
- cleanUp()
53
- })
54
-
55
- process.on('uncaughtException', handler)
56
- } else {
44
+ if (process.hasUncaughtExceptionCaptureCallback()) {
57
45
  // uncaughtException event is not executed when hasUncaughtExceptionCaptureCallback is true
58
46
  let previousCb
59
47
  const cb = ({ currentCallback, abortController }) => {
@@ -78,6 +66,18 @@ function handleUncaughtExceptionMonitor (error) {
78
66
  process.setUncaughtExceptionCaptureCallback(previousCb)
79
67
  })
80
68
  }
69
+ } else {
70
+ const cleanUp = removeAllListeners(process, 'uncaughtException')
71
+ const handler = () => {
72
+ process.removeListener('uncaughtException', handler)
73
+ }
74
+
75
+ setTimeout(() => {
76
+ process.removeListener('uncaughtException', handler)
77
+ cleanUp()
78
+ })
79
+
80
+ process.on('uncaughtException', handler)
81
81
  }
82
82
  }
83
83
 
@@ -88,6 +88,7 @@ function pathToStr (path) {
88
88
  if (!path) return
89
89
 
90
90
  if (typeof path === 'string' ||
91
+ // eslint-disable-next-line unicorn/no-instanceof-builtins
91
92
  path instanceof String ||
92
93
  path instanceof Buffer ||
93
94
  path instanceof URL) {
@@ -104,7 +105,7 @@ function shouldAnalyze (path, fs) {
104
105
 
105
106
  function shouldAnalyzeURLFile (path, fs) {
106
107
  if (path.startsWith('file://')) {
107
- return shouldAnalyze(path.substring(7), fs)
108
+ return shouldAnalyze(path.slice(7), fs)
108
109
  }
109
110
  }
110
111