dd-trace 5.52.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 (332) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/README.md +5 -0
  3. package/index.d.ts +87 -22
  4. package/initialize.mjs +3 -4
  5. package/package.json +36 -34
  6. package/packages/datadog-core/src/utils/src/get.js +1 -1
  7. package/packages/datadog-core/src/utils/src/has.js +1 -1
  8. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  9. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  10. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  11. package/packages/datadog-core/src/utils/src/set.js +1 -1
  12. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  14. package/packages/datadog-instrumentations/src/amqplib.js +57 -37
  15. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  18. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  19. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
  20. package/packages/datadog-instrumentations/src/couchbase.js +5 -4
  21. package/packages/datadog-instrumentations/src/cucumber.js +126 -84
  22. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  23. package/packages/datadog-instrumentations/src/dns.js +1 -1
  24. package/packages/datadog-instrumentations/src/express.js +2 -6
  25. package/packages/datadog-instrumentations/src/fs.js +7 -6
  26. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  27. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  28. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  29. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  30. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  31. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  32. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
  33. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  34. package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
  35. package/packages/datadog-instrumentations/src/http/client.js +16 -21
  36. package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
  37. package/packages/datadog-instrumentations/src/jest.js +184 -87
  38. package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
  39. package/packages/datadog-instrumentations/src/knex.js +4 -4
  40. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  41. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  42. package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
  43. package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
  44. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  45. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  46. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  47. package/packages/datadog-instrumentations/src/mysql2.js +55 -47
  48. package/packages/datadog-instrumentations/src/net.js +4 -2
  49. package/packages/datadog-instrumentations/src/next.js +7 -14
  50. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  51. package/packages/datadog-instrumentations/src/openai.js +21 -23
  52. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  53. package/packages/datadog-instrumentations/src/pg.js +6 -13
  54. package/packages/datadog-instrumentations/src/playwright.js +170 -136
  55. package/packages/datadog-instrumentations/src/redis.js +3 -3
  56. package/packages/datadog-instrumentations/src/restify.js +2 -2
  57. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  58. package/packages/datadog-instrumentations/src/router.js +22 -25
  59. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  60. package/packages/datadog-instrumentations/src/url.js +9 -17
  61. package/packages/datadog-instrumentations/src/vitest.js +126 -97
  62. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  63. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  64. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  65. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  66. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  67. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  68. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  69. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  70. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  72. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  73. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  74. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  75. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  76. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  77. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  78. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  79. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  80. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  81. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  82. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  83. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  84. package/packages/datadog-plugin-cucumber/src/index.js +86 -20
  85. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  86. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  87. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  88. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  89. package/packages/datadog-plugin-express/src/index.js +10 -12
  90. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  91. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  92. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  93. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  94. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  95. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  96. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  97. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  98. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  99. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  100. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  101. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  102. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  103. package/packages/datadog-plugin-http/src/client.js +18 -7
  104. package/packages/datadog-plugin-http2/src/client.js +20 -20
  105. package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
  106. package/packages/datadog-plugin-jest/src/index.js +36 -28
  107. package/packages/datadog-plugin-jest/src/util.js +8 -8
  108. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  109. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  110. package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
  111. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  112. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  113. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  114. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  115. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  116. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  117. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  118. package/packages/datadog-plugin-mocha/src/index.js +88 -48
  119. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  120. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  121. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  122. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  123. package/packages/datadog-plugin-next/src/index.js +6 -5
  124. package/packages/datadog-plugin-openai/src/services.js +6 -10
  125. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  126. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  127. package/packages/datadog-plugin-playwright/src/index.js +48 -22
  128. package/packages/datadog-plugin-redis/src/index.js +9 -4
  129. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  130. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  131. package/packages/datadog-plugin-router/src/index.js +1 -1
  132. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  133. package/packages/datadog-plugin-vitest/src/index.js +99 -72
  134. package/packages/datadog-shimmer/src/shimmer.js +163 -36
  135. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  136. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  137. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  138. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  140. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  141. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  142. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  143. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  144. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  145. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  146. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  147. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  148. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  149. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  150. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  151. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  152. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  153. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  154. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  157. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  158. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  159. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  160. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  161. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  162. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  163. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  164. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  168. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  169. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  170. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  171. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  172. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  173. package/packages/dd-trace/src/appsec/index.js +15 -12
  174. package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
  175. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  176. package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
  177. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  178. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  179. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  180. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  181. package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
  182. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
  183. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  184. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  185. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
  186. package/packages/dd-trace/src/azure_metadata.js +2 -7
  187. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  189. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  191. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  192. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  193. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  194. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  195. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  196. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  197. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  198. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  199. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  200. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  201. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  202. package/packages/dd-trace/src/config.js +82 -51
  203. package/packages/dd-trace/src/config_stable.js +3 -3
  204. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  205. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  206. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  207. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  208. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  209. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  210. package/packages/dd-trace/src/datastreams/size.js +1 -1
  211. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
  212. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  213. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  214. package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
  215. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  216. package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
  217. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
  218. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  219. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  220. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  221. package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
  222. package/packages/dd-trace/src/dogstatsd.js +7 -4
  223. package/packages/dd-trace/src/encode/0.4.js +9 -9
  224. package/packages/dd-trace/src/encode/0.5.js +1 -1
  225. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  226. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  227. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  228. package/packages/dd-trace/src/exporter.js +6 -6
  229. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  230. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  231. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  232. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  233. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  234. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  235. package/packages/dd-trace/src/flare/file.js +1 -5
  236. package/packages/dd-trace/src/format.js +1 -1
  237. package/packages/dd-trace/src/git_properties.js +1 -1
  238. package/packages/dd-trace/src/id.js +12 -6
  239. package/packages/dd-trace/src/iitm.js +10 -22
  240. package/packages/dd-trace/src/lambda/handler.js +6 -6
  241. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  242. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  244. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  245. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  246. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  247. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  248. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  249. package/packages/dd-trace/src/llmobs/tagger.js +113 -99
  250. package/packages/dd-trace/src/llmobs/util.js +9 -9
  251. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  252. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  253. package/packages/dd-trace/src/log/index.js +4 -4
  254. package/packages/dd-trace/src/log/log.js +1 -1
  255. package/packages/dd-trace/src/log/writer.js +2 -2
  256. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  257. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  258. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  259. package/packages/dd-trace/src/noop/span.js +3 -5
  260. package/packages/dd-trace/src/noop/tracer.js +1 -2
  261. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  262. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  263. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  264. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  265. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  266. package/packages/dd-trace/src/opentracing/span.js +9 -14
  267. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  268. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  269. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  270. package/packages/dd-trace/src/pkg.js +1 -1
  271. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  272. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  273. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  274. package/packages/dd-trace/src/plugins/index.js +1 -1
  275. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  276. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  277. package/packages/dd-trace/src/plugins/producer.js +2 -2
  278. package/packages/dd-trace/src/plugins/storage.js +2 -2
  279. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  280. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  281. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  282. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  283. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  284. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  286. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  289. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  290. package/packages/dd-trace/src/priority_sampler.js +22 -22
  291. package/packages/dd-trace/src/profiling/config.js +44 -8
  292. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  293. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  294. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  295. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  296. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  297. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  298. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  299. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  300. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  301. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  302. package/packages/dd-trace/src/proxy.js +7 -13
  303. package/packages/dd-trace/src/random_sampler.js +40 -0
  304. package/packages/dd-trace/src/rate_limiter.js +4 -4
  305. package/packages/dd-trace/src/remote_config/index.js +3 -7
  306. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  307. package/packages/dd-trace/src/require-package-json.js +1 -1
  308. package/packages/dd-trace/src/ritm.js +4 -4
  309. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  310. package/packages/dd-trace/src/sampler.js +33 -4
  311. package/packages/dd-trace/src/sampling_rule.js +12 -3
  312. package/packages/dd-trace/src/scope.js +1 -1
  313. package/packages/dd-trace/src/serverless.js +0 -48
  314. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  315. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
  316. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  317. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  318. package/packages/dd-trace/src/span_processor.js +3 -3
  319. package/packages/dd-trace/src/span_sampler.js +4 -1
  320. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  321. package/packages/dd-trace/src/startup-log.js +2 -2
  322. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  323. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  324. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  325. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  326. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  327. package/packages/dd-trace/src/util.js +1 -1
  328. package/version.js +1 -0
  329. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  330. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  331. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  332. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -1,5 +1,9 @@
1
1
  'use strict'
2
2
 
3
+ const LRUCache = require('lru-cache')
4
+ const web = require('../../plugins/util/web')
5
+ const vulnerabilities = require('./vulnerabilities')
6
+
3
7
  const OVERHEAD_CONTROLLER_CONTEXT_KEY = 'oce'
4
8
  const REPORT_VULNERABILITY = 'REPORT_VULNERABILITY'
5
9
  const INTERVAL_RESET_GLOBAL_CONTEXT = 60 * 1000
@@ -9,13 +13,62 @@ const GLOBAL_OCE_CONTEXT = {}
9
13
  let resetGlobalContextInterval
10
14
  let config = {}
11
15
  let availableRequest = 0
16
+
17
+ const globalRouteMap = new LRUCache({ max: 4096 })
18
+ let vulnerabilitiesSize = 0
19
+ const vulnerabilityIndexes = Object.values(vulnerabilities).reduce((obj, item, index) => {
20
+ obj[item] = index
21
+ vulnerabilitiesSize++
22
+ return obj
23
+ }, {})
24
+
25
+ function newCountersArray () {
26
+ return (new Array(vulnerabilitiesSize)).fill(0)
27
+ }
28
+
29
+ function copyFromGlobalMap (route) {
30
+ const vulnerabilityCounters = globalRouteMap.get(route)
31
+ return vulnerabilityCounters ? [...vulnerabilityCounters] : newCountersArray()
32
+ }
33
+
34
+ // for testing purposes
35
+ function clearGlobalRouteMap () {
36
+ globalRouteMap.clear()
37
+ }
38
+
12
39
  const OPERATIONS = {
13
40
  REPORT_VULNERABILITY: {
14
- hasQuota: (context) => {
15
- const reserved = context && context.tokens && context.tokens[REPORT_VULNERABILITY] > 0
41
+ hasQuota: (context, vulnerabilityType) => {
42
+ const reserved = context?.tokens?.[REPORT_VULNERABILITY] > 0
43
+ if (reserved && context.route != null) {
44
+ let copyMap = context.copyMap
45
+ let localMap = context.localMap
46
+
47
+ if (context.loadedRoute !== context.route) {
48
+ context.copyMaps ??= {}
49
+ context.copyMaps[context.route] ??= copyFromGlobalMap(context.route)
50
+ context.localMaps ??= {}
51
+ context.localMaps[context.route] ??= newCountersArray()
52
+ context.loadedRoute = context.route
53
+ copyMap = context.copyMaps[context.route]
54
+ localMap = context.localMaps[context.route]
55
+ context.copyMap = copyMap
56
+ context.localMap = localMap
57
+ }
58
+
59
+ const vulnerabilityIndex = vulnerabilityIndexes[vulnerabilityType]
60
+ const counter = localMap[vulnerabilityIndex]++
61
+ const storedCounter = copyMap[vulnerabilityIndex]
62
+
63
+ if (counter < storedCounter) {
64
+ return false
65
+ }
66
+ }
67
+
16
68
  if (reserved) {
17
69
  context.tokens[REPORT_VULNERABILITY]--
18
70
  }
71
+
19
72
  return reserved
20
73
  },
21
74
  name: REPORT_VULNERABILITY,
@@ -41,12 +94,52 @@ function _getNewContext () {
41
94
  }
42
95
 
43
96
  function _getContext (iastContext) {
44
- if (iastContext && iastContext[OVERHEAD_CONTROLLER_CONTEXT_KEY]) {
97
+ if (iastContext?.[OVERHEAD_CONTROLLER_CONTEXT_KEY]) {
98
+ const oceContext = iastContext[OVERHEAD_CONTROLLER_CONTEXT_KEY]
99
+ if (!oceContext.webContext) {
100
+ oceContext.webContext = web.getContext(iastContext.req)
101
+ oceContext.method = iastContext.req?.method
102
+ }
103
+
104
+ const currentPaths = oceContext.webContext?.paths
105
+ if (currentPaths !== oceContext.paths || !oceContext.route) {
106
+ oceContext.paths = currentPaths
107
+ oceContext.route = '#' + oceContext.method + '#' + (currentPaths?.join('') || '')
108
+ }
109
+
45
110
  return iastContext[OVERHEAD_CONTROLLER_CONTEXT_KEY]
46
111
  }
47
112
  return GLOBAL_OCE_CONTEXT
48
113
  }
49
114
 
115
+ function consolidateVulnerabilities (iastContext) {
116
+ const context = _getContext(iastContext)
117
+ if (!context.localMaps) return
118
+
119
+ const reserved = context.tokens?.[REPORT_VULNERABILITY] > 0
120
+
121
+ if (reserved) { // still a bit of budget available
122
+ Object.keys(context.localMaps).forEach(route => {
123
+ globalRouteMap.set(route, newCountersArray())
124
+ })
125
+ } else {
126
+ Object.keys(context.localMaps).forEach(route => {
127
+ const localMap = context.localMaps[route]
128
+ const globalMap = globalRouteMap.get(route)
129
+ if (!globalMap) {
130
+ globalRouteMap.set(route, localMap)
131
+ return
132
+ }
133
+
134
+ for (let i = 0; i < vulnerabilitiesSize; i++) {
135
+ if (localMap[i] > globalMap[i]) {
136
+ globalMap[i] = localMap[i]
137
+ }
138
+ }
139
+ })
140
+ }
141
+ }
142
+
50
143
  function _resetGlobalContext () {
51
144
  Object.assign(GLOBAL_OCE_CONTEXT, _getNewContext())
52
145
  }
@@ -70,9 +163,9 @@ function releaseRequest () {
70
163
  }
71
164
  }
72
165
 
73
- function hasQuota (operation, iastContext) {
166
+ function hasQuota (operation, iastContext, vulnerabilityType) {
74
167
  const oceContext = _getContext(iastContext)
75
- return operation.hasQuota(oceContext)
168
+ return operation.hasQuota(oceContext, vulnerabilityType)
76
169
  }
77
170
 
78
171
  function initializeRequestContext (iastContext) {
@@ -90,7 +183,7 @@ function startGlobalContext () {
90
183
  resetGlobalContextInterval = setInterval(() => {
91
184
  _resetGlobalContext()
92
185
  }, INTERVAL_RESET_GLOBAL_CONTEXT)
93
- resetGlobalContextInterval.unref && resetGlobalContextInterval.unref()
186
+ resetGlobalContextInterval.unref?.()
94
187
  }
95
188
 
96
189
  function finishGlobalContext () {
@@ -110,5 +203,7 @@ module.exports = {
110
203
  hasQuota,
111
204
  acquireRequest,
112
205
  releaseRequest,
113
- configure
206
+ configure,
207
+ consolidateVulnerabilities,
208
+ clearGlobalRouteMap
114
209
  }
@@ -2,13 +2,12 @@
2
2
 
3
3
  const path = require('path')
4
4
  const process = require('process')
5
- const { calculateDDBasePath } = require('../../util')
5
+ const { ddBasePath } = require('../../util')
6
6
  const pathLine = {
7
7
  getNodeModulesPaths,
8
8
  getRelativePath,
9
9
  getNonDDCallSiteFrames,
10
- calculateDDBasePath, // Exported only for test purposes
11
- ddBasePath: calculateDDBasePath(__dirname) // Only for test purposes
10
+ ddBasePath // Exported only for test purposes
12
11
  }
13
12
 
14
13
  const EXCLUDED_PATHS = [
@@ -32,7 +31,7 @@ function getNonDDCallSiteFrames (callSiteFrames, externallyExcludedPaths) {
32
31
 
33
32
  for (const callsite of callSiteFrames) {
34
33
  const filepath = callsite.file
35
- if (!isExcluded(callsite, externallyExcludedPaths) && filepath.indexOf(pathLine.ddBasePath) === -1) {
34
+ if (!isExcluded(callsite, externallyExcludedPaths) && !filepath.includes(pathLine.ddBasePath)) {
36
35
  callsite.path = getRelativePath(filepath)
37
36
  callsite.isInternal = !path.isAbsolute(filepath)
38
37
 
@@ -58,14 +57,14 @@ function isExcluded (callsite, externallyExcludedPaths) {
58
57
  excludedPaths = [...excludedPaths, ...externallyExcludedPaths]
59
58
  }
60
59
 
61
- for (let i = 0; i < excludedPaths.length; i++) {
62
- if (filename.indexOf(excludedPaths[i]) > -1) {
60
+ for (const excludedPath of excludedPaths) {
61
+ if (filename.includes(excludedPath)) {
63
62
  return true
64
63
  }
65
64
  }
66
65
 
67
- for (let i = 0; i < EXCLUDED_PATH_PREFIXES.length; i++) {
68
- if (filename.indexOf(EXCLUDED_PATH_PREFIXES[i]) === 0) {
66
+ for (const EXCLUDED_PATH_PREFIX of EXCLUDED_PATH_PREFIXES) {
67
+ if (filename.indexOf(EXCLUDED_PATH_PREFIX) === 0) {
69
68
  return true
70
69
  }
71
70
  }
@@ -52,7 +52,7 @@ function onModuleLoaded (payload) {
52
52
 
53
53
  function getControls (filename) {
54
54
  if (filename.startsWith('file://')) {
55
- filename = filename.substring(7)
55
+ filename = filename.slice(7)
56
56
  }
57
57
 
58
58
  let key = path.isAbsolute(filename) ? path.relative(process.cwd(), filename) : filename
@@ -74,12 +74,9 @@ function hookModule (filename, module, controlsByFile) {
74
74
  return
75
75
  }
76
76
 
77
- let wrapper
78
- if (type === SANITIZER_TYPE) {
79
- wrapper = wrapSanitizer(target, secureMarks)
80
- } else {
81
- wrapper = wrapInputValidator(target, parameters, secureMarks)
82
- }
77
+ const wrapper = type === SANITIZER_TYPE
78
+ ? wrapSanitizer(target, secureMarks)
79
+ : wrapInputValidator(target, parameters, secureMarks)
83
80
 
84
81
  if (methodName) {
85
82
  parent[methodName] = wrapper
@@ -97,11 +94,7 @@ function hookModule (filename, module, controlsByFile) {
97
94
  function resolve (path, obj, separator = '.') {
98
95
  if (!path) {
99
96
  // esm module with default export
100
- if (obj?.default) {
101
- return { target: obj.default, parent: obj, methodName: 'default' }
102
- } else {
103
- return { target: obj, parent: obj }
104
- }
97
+ return obj?.default ? { target: obj.default, parent: obj, methodName: 'default' } : { target: obj, parent: obj }
105
98
  }
106
99
 
107
100
  const properties = path.split(separator)
@@ -164,7 +157,7 @@ function addSecureMarks (value, secureMarks, createNewTainted = true) {
164
157
  if (createNewTainted) {
165
158
  parent[lastKey] = securedTainted
166
159
  }
167
- } catch (e) {
160
+ } catch {
168
161
  // if it is a readonly property, do nothing
169
162
  }
170
163
  })
@@ -10,7 +10,7 @@ const SECURITY_CONTROL_ELEMENT_DELIMITER = ','
10
10
  const INPUT_VALIDATOR_TYPE = 'INPUT_VALIDATOR'
11
11
  const SANITIZER_TYPE = 'SANITIZER'
12
12
 
13
- const validTypes = [INPUT_VALIDATOR_TYPE, SANITIZER_TYPE]
13
+ const validTypes = new Set([INPUT_VALIDATOR_TYPE, SANITIZER_TYPE])
14
14
 
15
15
  function parse (securityControlsConfiguration) {
16
16
  const controls = new Map()
@@ -42,7 +42,7 @@ function parseControl (control) {
42
42
  let [type, marks, file, method, parameters] = fields
43
43
 
44
44
  type = type.trim().toUpperCase()
45
- if (!validTypes.includes(type)) {
45
+ if (!validTypes.has(type)) {
46
46
  log.warn('[ASM] Invalid security control type: %s', type)
47
47
  return
48
48
  }
@@ -60,7 +60,7 @@ function parseControl (control) {
60
60
 
61
61
  try {
62
62
  parameters = getParameters(parameters)
63
- } catch (e) {
63
+ } catch {
64
64
  log.warn('[ASM] Invalid non-numeric security control parameter %s', parameters)
65
65
  return
66
66
  }
@@ -77,11 +77,11 @@ function getSecureMarks (marks) {
77
77
  function getParameters (parameters) {
78
78
  return parameters?.split(SECURITY_CONTROL_ELEMENT_DELIMITER)
79
79
  .map(param => {
80
- const parsedParam = parseInt(param, 10)
80
+ const parsedParam = Number.parseInt(param, 10)
81
81
 
82
82
  // discard the securityControl if there is an incorrect parameter
83
- if (isNaN(parsedParam)) {
84
- throw new Error('Invalid non-numeric security control parameter')
83
+ if (Number.isNaN(parsedParam)) {
84
+ throw new TypeError('Invalid non-numeric security control parameter')
85
85
  }
86
86
 
87
87
  return parsedParam
@@ -3,11 +3,11 @@
3
3
  const NODE_MODULES = 'node_modules'
4
4
 
5
5
  const isPrivateModule = function (file) {
6
- return file && file.indexOf(NODE_MODULES) === -1
6
+ return file && !file.includes(NODE_MODULES)
7
7
  }
8
8
 
9
9
  const isDdTrace = function (file) {
10
- return file && (file.indexOf('dd-trace-js') !== -1 || file.indexOf('dd-trace') !== -1)
10
+ return Boolean(file?.includes('dd-trace'))
11
11
  }
12
12
 
13
13
  module.exports = {
@@ -20,10 +20,10 @@ function taintObject (iastContext, object, type) {
20
20
  try {
21
21
  if (typeof value === 'string') {
22
22
  const tainted = TaintedUtils.newTaintedString(transactionId, value, property, type)
23
- if (!parent) {
24
- result = tainted
25
- } else {
23
+ if (parent) {
26
24
  parent[key] = tainted
25
+ } else {
26
+ result = tainted
27
27
  }
28
28
  } else if (typeof value === 'object' && !visited.has(value)) {
29
29
  visited.add(value)
@@ -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