dd-trace 5.53.0 → 5.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/ci/cypress/plugin.js +8 -0
  3. package/ci/cypress/polyfills.js +23 -0
  4. package/ci/init.js +8 -7
  5. package/index.d.ts +33 -16
  6. package/initialize.mjs +5 -6
  7. package/package.json +40 -38
  8. package/packages/datadog-code-origin/index.js +22 -4
  9. package/packages/datadog-core/src/utils/src/get.js +1 -1
  10. package/packages/datadog-core/src/utils/src/has.js +1 -1
  11. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  12. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  13. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  14. package/packages/datadog-core/src/utils/src/set.js +1 -1
  15. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  16. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  17. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  18. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
  21. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  22. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
  23. package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
  24. package/packages/datadog-instrumentations/src/couchbase.js +6 -9
  25. package/packages/datadog-instrumentations/src/cucumber.js +108 -68
  26. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  27. package/packages/datadog-instrumentations/src/dns.js +5 -5
  28. package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
  29. package/packages/datadog-instrumentations/src/fastify.js +7 -9
  30. package/packages/datadog-instrumentations/src/fs.js +1 -1
  31. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
  32. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  33. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  34. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  35. package/packages/datadog-instrumentations/src/hapi.js +10 -11
  36. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  37. package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
  38. package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
  39. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  40. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  41. package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
  42. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  43. package/packages/datadog-instrumentations/src/jest.js +201 -143
  44. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  45. package/packages/datadog-instrumentations/src/knex.js +4 -4
  46. package/packages/datadog-instrumentations/src/koa.js +2 -3
  47. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  48. package/packages/datadog-instrumentations/src/mariadb.js +49 -65
  49. package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
  50. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  51. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  52. package/packages/datadog-instrumentations/src/mocha.js +3 -1
  53. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  54. package/packages/datadog-instrumentations/src/mysql.js +30 -37
  55. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  56. package/packages/datadog-instrumentations/src/net.js +1 -1
  57. package/packages/datadog-instrumentations/src/next.js +1 -0
  58. package/packages/datadog-instrumentations/src/nyc.js +3 -2
  59. package/packages/datadog-instrumentations/src/openai.js +22 -24
  60. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  61. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
  62. package/packages/datadog-instrumentations/src/pg.js +3 -5
  63. package/packages/datadog-instrumentations/src/playwright.js +123 -83
  64. package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
  65. package/packages/datadog-instrumentations/src/redis.js +4 -4
  66. package/packages/datadog-instrumentations/src/restify.js +9 -13
  67. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  68. package/packages/datadog-instrumentations/src/router.js +30 -32
  69. package/packages/datadog-instrumentations/src/tedious.js +2 -3
  70. package/packages/datadog-instrumentations/src/vitest.js +87 -52
  71. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  72. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  73. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  74. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  75. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  76. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  77. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  78. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  79. package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
  80. package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
  81. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  82. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  83. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
  84. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
  85. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  86. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
  87. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
  88. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
  89. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
  90. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
  91. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
  92. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  93. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  94. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  95. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  96. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  97. package/packages/datadog-plugin-cucumber/src/index.js +60 -4
  98. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
  99. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  100. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  101. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
  102. package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
  103. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  104. package/packages/datadog-plugin-express/src/index.js +10 -12
  105. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  106. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  107. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  108. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  109. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
  110. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  111. package/packages/datadog-plugin-graphql/src/index.js +10 -8
  112. package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
  113. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  114. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  115. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  116. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  117. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  118. package/packages/datadog-plugin-http/src/client.js +23 -13
  119. package/packages/datadog-plugin-http2/src/client.js +24 -25
  120. package/packages/datadog-plugin-jest/src/index.js +26 -23
  121. package/packages/datadog-plugin-jest/src/util.js +8 -8
  122. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  123. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  124. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  125. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  126. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  127. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  128. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  129. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  130. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  131. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  132. package/packages/datadog-plugin-mocha/src/index.js +39 -14
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
  134. package/packages/datadog-plugin-mysql/src/index.js +22 -9
  135. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  136. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  137. package/packages/datadog-plugin-next/src/index.js +7 -6
  138. package/packages/datadog-plugin-openai/src/services.js +6 -10
  139. package/packages/datadog-plugin-openai/src/tracing.js +12 -18
  140. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  141. package/packages/datadog-plugin-playwright/src/index.js +25 -4
  142. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
  143. package/packages/datadog-plugin-redis/src/index.js +2 -4
  144. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  145. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  146. package/packages/datadog-plugin-router/src/index.js +1 -1
  147. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  148. package/packages/datadog-plugin-vitest/src/index.js +52 -35
  149. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  150. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  151. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  152. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  153. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
  154. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  158. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
  159. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  160. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  161. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  162. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  163. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  165. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  166. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  167. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
  168. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  169. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  170. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  171. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  172. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
  173. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  174. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  175. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
  176. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  177. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
  178. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
  179. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
  180. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  181. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  183. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
  184. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  185. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  186. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  187. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
  188. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  189. package/packages/dd-trace/src/appsec/index.js +5 -5
  190. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  191. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  192. package/packages/dd-trace/src/appsec/reporter.js +232 -41
  193. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  194. package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
  195. package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
  196. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  197. package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
  198. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  199. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  200. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  201. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
  202. package/packages/dd-trace/src/azure_metadata.js +9 -9
  203. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
  204. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  205. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
  206. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  207. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
  208. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
  209. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
  210. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  211. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
  212. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
  213. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  214. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
  215. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
  216. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
  217. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  218. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
  219. package/packages/dd-trace/src/config-helper.js +89 -0
  220. package/packages/dd-trace/src/config.js +159 -129
  221. package/packages/dd-trace/src/config_stable.js +10 -7
  222. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  223. package/packages/dd-trace/src/datastreams/fnv.js +2 -2
  224. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  225. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  226. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
  227. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  228. package/packages/dd-trace/src/datastreams/size.js +1 -1
  229. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
  230. package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
  231. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  232. package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
  233. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  234. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
  235. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
  236. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  237. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
  238. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
  239. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  240. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  241. package/packages/dd-trace/src/debugger/index.js +1 -0
  242. package/packages/dd-trace/src/dogstatsd.js +7 -6
  243. package/packages/dd-trace/src/encode/0.4.js +14 -11
  244. package/packages/dd-trace/src/encode/0.5.js +4 -6
  245. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
  246. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  247. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  248. package/packages/dd-trace/src/exporter.js +7 -6
  249. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  250. package/packages/dd-trace/src/exporters/common/docker.js +4 -3
  251. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  252. package/packages/dd-trace/src/exporters/common/request.js +5 -2
  253. package/packages/dd-trace/src/exporters/common/util.js +4 -2
  254. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  255. package/packages/dd-trace/src/flare/file.js +1 -5
  256. package/packages/dd-trace/src/format.js +1 -1
  257. package/packages/dd-trace/src/git_properties.js +1 -1
  258. package/packages/dd-trace/src/id.js +15 -9
  259. package/packages/dd-trace/src/iitm.js +10 -22
  260. package/packages/dd-trace/src/index.js +4 -3
  261. package/packages/dd-trace/src/lambda/handler.js +7 -6
  262. package/packages/dd-trace/src/lambda/index.js +2 -1
  263. package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
  264. package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
  265. package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
  266. package/packages/dd-trace/src/llmobs/index.js +21 -5
  267. package/packages/dd-trace/src/llmobs/noop.js +18 -20
  268. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  269. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  270. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  271. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
  272. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  273. package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
  274. package/packages/dd-trace/src/llmobs/sdk.js +4 -3
  275. package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
  276. package/packages/dd-trace/src/llmobs/tagger.js +129 -102
  277. package/packages/dd-trace/src/llmobs/util.js +9 -9
  278. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  279. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  280. package/packages/dd-trace/src/log/index.js +9 -8
  281. package/packages/dd-trace/src/log/log.js +1 -1
  282. package/packages/dd-trace/src/log/writer.js +3 -4
  283. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  284. package/packages/dd-trace/src/msgpack/encoder.js +31 -31
  285. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  286. package/packages/dd-trace/src/noop/span.js +4 -6
  287. package/packages/dd-trace/src/noop/tracer.js +1 -2
  288. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  289. package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
  290. package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
  291. package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
  292. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  293. package/packages/dd-trace/src/opentracing/span.js +16 -20
  294. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  295. package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
  296. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  297. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  298. package/packages/dd-trace/src/pkg.js +1 -1
  299. package/packages/dd-trace/src/plugin_manager.js +4 -3
  300. package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
  301. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  302. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  303. package/packages/dd-trace/src/plugins/index.js +0 -1
  304. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  305. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  306. package/packages/dd-trace/src/plugins/producer.js +2 -2
  307. package/packages/dd-trace/src/plugins/storage.js +2 -2
  308. package/packages/dd-trace/src/plugins/util/ci.js +28 -20
  309. package/packages/dd-trace/src/plugins/util/git.js +166 -12
  310. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  311. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  312. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  313. package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
  314. package/packages/dd-trace/src/plugins/util/test.js +315 -51
  315. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  316. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  317. package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
  318. package/packages/dd-trace/src/plugins/util/web.js +8 -8
  319. package/packages/dd-trace/src/priority_sampler.js +64 -53
  320. package/packages/dd-trace/src/profiling/config.js +51 -35
  321. package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
  322. package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
  323. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
  324. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  325. package/packages/dd-trace/src/profiling/index.js +2 -1
  326. package/packages/dd-trace/src/profiling/profiler.js +44 -6
  327. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  328. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  329. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  330. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  331. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  332. package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
  333. package/packages/dd-trace/src/profiling/tagger.js +21 -13
  334. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  335. package/packages/dd-trace/src/proxy.js +9 -10
  336. package/packages/dd-trace/src/random_sampler.js +40 -0
  337. package/packages/dd-trace/src/rate_limiter.js +4 -4
  338. package/packages/dd-trace/src/remote_config/index.js +3 -7
  339. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  340. package/packages/dd-trace/src/require-package-json.js +1 -1
  341. package/packages/dd-trace/src/ritm.js +8 -8
  342. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
  343. package/packages/dd-trace/src/sampler.js +41 -4
  344. package/packages/dd-trace/src/sampling_rule.js +12 -3
  345. package/packages/dd-trace/src/scope.js +1 -1
  346. package/packages/dd-trace/src/serverless.js +11 -4
  347. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  348. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  349. package/packages/dd-trace/src/span_processor.js +5 -4
  350. package/packages/dd-trace/src/span_sampler.js +4 -1
  351. package/packages/dd-trace/src/standalone/tracesource.js +2 -3
  352. package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
  353. package/packages/dd-trace/src/startup-log.js +6 -18
  354. package/packages/dd-trace/src/supported-configurations.json +439 -0
  355. package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
  356. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  357. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  358. package/packages/dd-trace/src/telemetry/send-data.js +8 -7
  359. package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
  360. package/packages/dd-trace/src/tracer.js +3 -7
  361. package/packages/dd-trace/src/util.js +1 -6
  362. package/version.js +1 -0
  363. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  364. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  365. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  366. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
  367. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
  368. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
@@ -3,14 +3,14 @@
3
3
  const BaseAwsSdkPlugin = require('../../base')
4
4
  const { parseModelId, extractRequestParams, extractTextAndResponseReason } = require('./utils')
5
5
 
6
- const enabledOperations = ['invokeModel']
6
+ const enabledOperations = new Set(['invokeModel'])
7
7
 
8
8
  class BedrockRuntime extends BaseAwsSdkPlugin {
9
9
  static get id () { return 'bedrockruntime' }
10
10
 
11
11
  isEnabled (request) {
12
12
  const operation = request.operation
13
- if (!enabledOperations.includes(operation)) {
13
+ if (!enabledOperations.has(operation)) {
14
14
  return false
15
15
  }
16
16
 
@@ -47,27 +47,27 @@ class Generation {
47
47
  class RequestParams {
48
48
  constructor ({
49
49
  prompt = '',
50
- temperature = undefined,
51
- topP = undefined,
52
- topK = undefined,
53
- maxTokens = undefined,
50
+ temperature,
51
+ topP,
52
+ topK,
53
+ maxTokens,
54
54
  stopSequences = [],
55
55
  inputType = '',
56
56
  truncate = '',
57
57
  stream = '',
58
- n = undefined
58
+ n
59
59
  } = {}) {
60
60
  // stringify prompt as it could be a single prompt as well as a list of message objects
61
61
  this.prompt = typeof prompt === 'string' ? prompt : JSON.stringify(prompt) || ''
62
- this.temperature = temperature !== undefined ? temperature : undefined
63
- this.topP = topP !== undefined ? topP : undefined
64
- this.topK = topK !== undefined ? topK : undefined
65
- this.maxTokens = maxTokens !== undefined ? maxTokens : undefined
62
+ this.temperature = temperature === undefined ? undefined : temperature
63
+ this.topP = topP === undefined ? undefined : topP
64
+ this.topK = topK === undefined ? undefined : topK
65
+ this.maxTokens = maxTokens === undefined ? undefined : maxTokens
66
66
  this.stopSequences = stopSequences || []
67
67
  this.inputType = inputType || ''
68
68
  this.truncate = truncate || ''
69
69
  this.stream = stream || ''
70
- this.n = n !== undefined ? n : undefined
70
+ this.n = n === undefined ? undefined : n
71
71
  }
72
72
  }
73
73
 
@@ -92,7 +92,7 @@ function parseModelId (modelId) {
92
92
  if (modelMeta.length < 2) {
93
93
  return { modelProvider: 'custom', modelName: modelMeta[0] }
94
94
  }
95
- return { modelProvider: modelMeta[modelMeta.length - 2], modelName: modelMeta[modelMeta.length - 1] }
95
+ return { modelProvider: modelMeta.at(-2), modelName: modelMeta.at(-1) }
96
96
  }
97
97
 
98
98
  for (const identifier of MODEL_TYPE_IDENTIFIERS) {
@@ -105,7 +105,7 @@ function parseModelId (modelId) {
105
105
  if (modelMeta.length < 2) {
106
106
  return { modelProvider: 'custom', modelName: modelId }
107
107
  }
108
- return { modelProvider: modelMeta[modelMeta.length - 2], modelName: modelMeta[modelMeta.length - 1] }
108
+ return { modelProvider: modelMeta.at(-2), modelName: modelMeta.at(-1) }
109
109
  }
110
110
  return { modelProvider: 'custom', modelName: modelId }
111
111
  }
@@ -296,7 +296,7 @@ function extractTextAndResponseReason (response, provider, modelName) {
296
296
  return new Generation()
297
297
  }
298
298
  }
299
- } catch (error) {
299
+ } catch {
300
300
  log.warn('Unable to extract text/finishReason from response body. Defaulting to empty text/finishReason.')
301
301
  return new Generation()
302
302
  }
@@ -6,15 +6,13 @@ class CloudwatchLogs extends BaseAwsSdkPlugin {
6
6
  static get id () { return 'cloudwatchlogs' }
7
7
 
8
8
  generateTags (params, operation) {
9
- const tags = {}
9
+ if (!params?.logGroupName) return {}
10
10
 
11
- if (!params || !params.logGroupName) return tags
12
-
13
- return Object.assign(tags, {
11
+ return {
14
12
  'resource.name': `${operation} ${params.logGroupName}`,
15
13
  'aws.cloudwatch.logs.log_group_name': params.logGroupName,
16
14
  loggroupname: params.logGroupName
17
- })
15
+ }
18
16
  }
19
17
  }
20
18
 
@@ -14,41 +14,32 @@ class DynamoDb extends BaseAwsSdkPlugin {
14
14
  const tags = {}
15
15
 
16
16
  if (params) {
17
- if (params.TableName) {
18
- Object.assign(tags, {
19
- 'resource.name': `${operation} ${params.TableName}`,
20
- 'aws.dynamodb.table_name': params.TableName,
21
- tablename: params.TableName
22
- })
23
- }
17
+ let tableName = params.TableName
24
18
 
25
- // batch operations have different format, collect table name for batch
19
+ // Collect table name for batch operations which have different format
26
20
  // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#batchGetItem-property`
27
21
  // dynamoDB batch TableName
28
- if (params.RequestItems !== null) {
29
- if (typeof params.RequestItems === 'object') {
30
- if (Object.keys(params.RequestItems).length === 1) {
31
- const tableName = Object.keys(params.RequestItems)[0]
32
-
33
- // also add span type to match serverless convention
34
- Object.assign(tags, {
35
- 'resource.name': `${operation} ${tableName}`,
36
- 'aws.dynamodb.table_name': tableName,
37
- tablename: tableName
38
- })
39
- }
22
+ if (params.RequestItems !== null && typeof params.RequestItems === 'object') {
23
+ const requestItemsKeys = Object.keys(params.RequestItems)
24
+ if (requestItemsKeys.length === 1) {
25
+ tableName = requestItemsKeys[0]
40
26
  }
41
27
  }
42
28
 
29
+ if (tableName) {
30
+ // Also add span type to match serverless convention
31
+ tags['resource.name'] = `${operation} ${tableName}`
32
+ tags['aws.dynamodb.table_name'] = tableName
33
+ tags.tablename = tableName
34
+ }
35
+
43
36
  // TODO: DynamoDB.DocumentClient does batches on multiple tables
44
37
  // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#batchGet-property
45
38
  // it may be useful to have a different resource naming convention here to show all table names
46
39
  }
47
40
 
48
- // also add span type to match serverless convention
49
- Object.assign(tags, {
50
- 'span.type': 'dynamodb'
51
- })
41
+ // Also add span type to match serverless convention
42
+ tags['span.type'] = 'dynamodb'
52
43
 
53
44
  return tags
54
45
  }
@@ -81,10 +72,12 @@ class DynamoDb extends BaseAwsSdkPlugin {
81
72
  const hash =
82
73
  DynamoDb.calculatePutItemHash(item.Put.TableName, item.Put.Item, this.getPrimaryKeyConfig())
83
74
  if (hash) hashes.push(hash)
84
- } else if (item.Update || item.Delete) {
85
- const operation = item.Update ? item.Update : item.Delete
86
- const hash = DynamoDb.calculateHashWithKnownKeys(operation.TableName, operation.Key)
87
- if (hash) hashes.push(hash)
75
+ } else {
76
+ const operation = item.Update || item.Delete
77
+ if (operation) {
78
+ const hash = DynamoDb.calculateHashWithKnownKeys(operation.TableName, operation.Key)
79
+ if (hash) hashes.push(hash)
80
+ }
88
81
  }
89
82
  }
90
83
  break
@@ -136,7 +129,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
136
129
  const config = {}
137
130
  for (const [tableName, primaryKeys] of Object.entries(parsedConfig)) {
138
131
  if (Array.isArray(primaryKeys) && primaryKeys.length > 0 && primaryKeys.length <= 2) {
139
- config[tableName] = new Set(primaryKeys)
132
+ config[tableName] = primaryKeys
140
133
  } else {
141
134
  log.warn(`Invalid primary key configuration for table: ${tableName}.` +
142
135
  'Please fix the DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env var.')
@@ -154,7 +147,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
154
147
  * Calculates a hash for DynamoDB PutItem operations using table's configured primary keys.
155
148
  * @param {string} tableName - Name of the DynamoDB table.
156
149
  * @param {Object} item - Complete PutItem item parameter to be put.
157
- * @param {Object.<string, Set<string>>} primaryKeyConfig - Mapping of table names to Sets of primary key names
150
+ * @param {Object.<string, Array<string>>} primaryKeyConfig - Mapping of table names to an Array of primary key names
158
151
  * loaded from DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS.
159
152
  * @returns {string|undefined} Hash combining table name and primary key/value pairs, or undefined if unable.
160
153
  */
@@ -163,19 +156,11 @@ class DynamoDb extends BaseAwsSdkPlugin {
163
156
  log.debug('Unable to calculate hash because missing required parameters')
164
157
  return
165
158
  }
166
- if (!primaryKeyConfig) {
167
- return
168
- }
169
- const primaryKeySet = primaryKeyConfig[tableName]
170
- if (!primaryKeySet || !(primaryKeySet instanceof Set) || primaryKeySet.size === 0 || primaryKeySet.size > 2) {
171
- log.warn(
172
- `span pointers: failed to extract PutItem span pointer: table ${tableName} ` +
173
- 'not found in primary key names or the DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env var was invalid.' +
174
- 'Please update the env var.'
175
- )
159
+ const keyNames = primaryKeyConfig?.[tableName]
160
+ if (!keyNames) {
176
161
  return
177
162
  }
178
- const keyValues = extractPrimaryKeys(primaryKeySet, item)
163
+ const keyValues = extractPrimaryKeys(keyNames, item)
179
164
  if (keyValues) {
180
165
  return generatePointerHash([tableName, ...keyValues])
181
166
  }
@@ -196,8 +181,8 @@ class DynamoDb extends BaseAwsSdkPlugin {
196
181
  log.debug('Unable to calculate hash because missing parameters')
197
182
  return
198
183
  }
199
- const keyNamesSet = new Set(Object.keys(keysObject))
200
- const keyValues = extractPrimaryKeys(keyNamesSet, keysObject)
184
+ const keyNames = Object.keys(keysObject)
185
+ const keyValues = extractPrimaryKeys(keyNames, keysObject)
201
186
  if (keyValues) {
202
187
  return generatePointerHash([tableName, ...keyValues])
203
188
  }
@@ -7,8 +7,8 @@ class EventBridge extends BaseAwsSdkPlugin {
7
7
  static get isPayloadReporter () { return true }
8
8
 
9
9
  generateTags (params, operation, response) {
10
- if (!params || !params.source) return {}
11
- const rulename = params.Name ? params.Name : ''
10
+ if (!params?.source) return {}
11
+ const rulename = params.Name ?? ''
12
12
  return {
13
13
  'resource.name': operation ? `${operation} ${params.source}` : params.source,
14
14
  'aws.eventbridge.source': `${params.source}`,
@@ -35,11 +35,10 @@ class Kinesis extends BaseAwsSdkPlugin {
35
35
  obj.needsFinish = true
36
36
  const options = {
37
37
  childOf: responseExtraction.maybeChildOf,
38
- tags: Object.assign(
39
- {},
40
- this.requestTags.get(request) || {},
41
- { 'span.kind': 'server' }
42
- )
38
+ tags: {
39
+ ...this.requestTags.get(request),
40
+ 'span.kind': 'server'
41
+ }
43
42
  }
44
43
  span = plugin.tracer.startSpan('aws.response', options)
45
44
  this.enter(span, store)
@@ -128,12 +127,12 @@ class Kinesis extends BaseAwsSdkPlugin {
128
127
  _tryParse (body) {
129
128
  try {
130
129
  return JSON.parse(body)
131
- } catch (e) {
130
+ } catch {
132
131
  log.info('Not JSON string. Trying Base64 encoded JSON string')
133
132
  }
134
133
  try {
135
134
  return JSON.parse(Buffer.from(body, 'base64').toString('ascii'), true)
136
- } catch (e) {
135
+ } catch {
137
136
  return null
138
137
  }
139
138
  }
@@ -145,17 +144,17 @@ class Kinesis extends BaseAwsSdkPlugin {
145
144
  let stream
146
145
  switch (operation) {
147
146
  case 'putRecord':
148
- stream = params.StreamArn ? params.StreamArn : (params.StreamName ? params.StreamName : '')
147
+ stream = params.StreamArn ?? params.StreamName ?? ''
149
148
  this.injectToMessage(span, params, stream, true)
150
149
  break
151
150
  case 'putRecords':
152
- stream = params.StreamArn ? params.StreamArn : (params.StreamName ? params.StreamName : '')
151
+ stream = params.StreamArn ?? params.StreamName ?? ''
153
152
  for (let i = 0; i < params.Records.length; i++) {
154
153
  this.injectToMessage(
155
154
  span,
156
155
  params.Records[i],
157
156
  stream,
158
- i === 0 || (this.config.batchPropagationEnabled)
157
+ i === 0 || this.config.batchPropagationEnabled
159
158
  )
160
159
  }
161
160
  }
@@ -192,7 +191,7 @@ class Kinesis extends BaseAwsSdkPlugin {
192
191
  const byteSize = finalData.length
193
192
  // Kinesis max payload size is 1MB
194
193
  // So we must ensure adding DD context won't go over that (512b is an estimate)
195
- if (byteSize >= 1048576) {
194
+ if (byteSize >= 1_048_576) {
196
195
  log.info('Payload size too large to pass context')
197
196
  return
198
197
  }
@@ -7,15 +7,13 @@ class Lambda extends BaseAwsSdkPlugin {
7
7
  static get id () { return 'lambda' }
8
8
 
9
9
  generateTags (params, operation, response) {
10
- const tags = {}
10
+ if (!params?.FunctionName) return {}
11
11
 
12
- if (!params || !params.FunctionName) return tags
13
-
14
- return Object.assign(tags, {
12
+ return {
15
13
  'resource.name': `${operation} ${params.FunctionName}`,
16
14
  functionname: params.FunctionName,
17
15
  'aws.lambda': params.FunctionName
18
- })
16
+ }
19
17
  }
20
18
 
21
19
  requestInject (span, request) {
@@ -33,7 +31,7 @@ class Lambda extends BaseAwsSdkPlugin {
33
31
  // Check to see if there's already a config on the request
34
32
  let clientContext = {}
35
33
  if (request.params.ClientContext) {
36
- const clientContextJson = Buffer.from(request.params.ClientContext, 'base64').toString('utf-8')
34
+ const clientContextJson = Buffer.from(request.params.ClientContext, 'base64').toString('utf8')
37
35
  clientContext = JSON.parse(clientContextJson)
38
36
  }
39
37
  if (!clientContext.custom) {
@@ -6,15 +6,13 @@ class Redshift extends BaseAwsSdkPlugin {
6
6
  static get id () { return 'redshift' }
7
7
 
8
8
  generateTags (params, operation, response) {
9
- const tags = {}
9
+ if (!params?.ClusterIdentifier) return {}
10
10
 
11
- if (!params || !params.ClusterIdentifier) return tags
12
-
13
- return Object.assign(tags, {
11
+ return {
14
12
  'resource.name': `${operation} ${params.ClusterIdentifier}`,
15
13
  'aws.redshift.cluster_identifier': params.ClusterIdentifier,
16
14
  clusteridentifier: params.ClusterIdentifier
17
- })
15
+ }
18
16
  }
19
17
  }
20
18
 
@@ -11,15 +11,13 @@ class S3 extends BaseAwsSdkPlugin {
11
11
  static get isPayloadReporter () { return true }
12
12
 
13
13
  generateTags (params, operation, response) {
14
- const tags = {}
14
+ if (!params?.Bucket) return {}
15
15
 
16
- if (!params || !params.Bucket) return tags
17
-
18
- return Object.assign(tags, {
16
+ return {
19
17
  'resource.name': `${operation} ${params.Bucket}`,
20
18
  'aws.s3.bucket_name': params.Bucket,
21
19
  bucketname: params.Bucket
22
- })
20
+ }
23
21
  }
24
22
 
25
23
  addSpanPointers (span, response) {
@@ -19,7 +19,7 @@ class Sns extends BaseAwsSdkPlugin {
19
19
  const arnParts = TopicArn.split(':')
20
20
 
21
21
  // Get the topic name from the last part of the ARN
22
- const topicName = arnParts[arnParts.length - 1]
22
+ const topicName = arnParts.at(-1)
23
23
 
24
24
  return {
25
25
  'resource.name': `${operation} ${params.TopicArn || response.data.TopicArn}`,
@@ -74,8 +74,7 @@ class Sns extends BaseAwsSdkPlugin {
74
74
  injectToMessage (span, params, topicArn, injectTraceContext) {
75
75
  if (!params.MessageAttributes) {
76
76
  params.MessageAttributes = {}
77
- }
78
- if (Object.keys(params.MessageAttributes).length >= 10) { // SNS quota
77
+ } else if (Object.keys(params.MessageAttributes).length >= 10) { // SNS quota
79
78
  log.info('Message attributes full, skipping trace context injection')
80
79
  return
81
80
  }
@@ -20,7 +20,6 @@ class Sqs extends BaseAwsSdkPlugin {
20
20
  this.addSub('apm:aws:response:start:sqs', obj => {
21
21
  const { request, response } = obj
22
22
  const store = storage('legacy').getStore()
23
- const plugin = this
24
23
  const contextExtraction = this.responseExtract(request.params, request.operation, response)
25
24
  let span
26
25
  let parsedMessageAttributes = null
@@ -28,14 +27,13 @@ class Sqs extends BaseAwsSdkPlugin {
28
27
  obj.needsFinish = true
29
28
  const options = {
30
29
  childOf: contextExtraction.datadogContext,
31
- tags: Object.assign(
32
- {},
33
- this.requestTags.get(request) || {},
34
- { 'span.kind': 'server' }
35
- )
30
+ tags: {
31
+ ...this.requestTags.get(request),
32
+ 'span.kind': 'server'
33
+ }
36
34
  }
37
35
  parsedMessageAttributes = contextExtraction.parsedAttributes
38
- span = plugin.tracer.startSpan('aws.response', options)
36
+ span = this.tracer.startSpan('aws.response', options)
39
37
  this.enter(span, store)
40
38
  }
41
39
  // extract DSM context after as we might not have a parent-child but may have a DSM context
@@ -90,20 +88,18 @@ class Sqs extends BaseAwsSdkPlugin {
90
88
  }
91
89
 
92
90
  generateTags (params, operation, response) {
93
- const tags = {}
94
-
95
- if (!params || (!params.QueueName && !params.QueueUrl)) return tags
91
+ if (!params || (!params.QueueName && !params.QueueUrl)) return {}
96
92
  // 'https://sqs.us-east-1.amazonaws.com/123456789012/my-queue';
97
93
  let queueName = params.QueueName
98
94
  if (params.QueueUrl) {
99
- queueName = params.QueueUrl.split('/')[params.QueueUrl.split('/').length - 1]
95
+ queueName = params.QueueUrl.split('/').at(-1)
100
96
  }
101
97
 
102
- Object.assign(tags, {
98
+ const tags = {
103
99
  'resource.name': `${operation} ${params.QueueName || params.QueueUrl}`,
104
100
  'aws.sqs.queue_name': params.QueueName || params.QueueUrl,
105
101
  queuename: queueName
106
- })
102
+ }
107
103
 
108
104
  switch (operation) {
109
105
  case 'receiveMessage':
@@ -134,7 +130,7 @@ class Sqs extends BaseAwsSdkPlugin {
134
130
  if (body.Type === 'Notification') {
135
131
  message = body
136
132
  }
137
- } catch (e) {
133
+ } catch {
138
134
  // SQS to SQS
139
135
  }
140
136
  }
@@ -186,7 +182,7 @@ class Sqs extends BaseAwsSdkPlugin {
186
182
  if (body.Type === 'Notification') {
187
183
  message = body
188
184
  }
189
- } catch (e) {
185
+ } catch {
190
186
  // SQS to SQS
191
187
  }
192
188
  }
@@ -54,7 +54,7 @@ class Stepfunctions extends BaseAwsSdkPlugin {
54
54
  const newInput = JSON.stringify(inputObj)
55
55
  request.params.input = newInput
56
56
  }
57
- } catch (e) {
57
+ } catch {
58
58
  log.info('Unable to treat input as JSON')
59
59
  }
60
60
  }
@@ -13,7 +13,7 @@ function generatePointerHash (components) {
13
13
  // If passing S3's ETag as a component, make sure any quotes have already been removed!
14
14
  const dataToHash = components.join('|')
15
15
  const hash = crypto.createHash('sha256').update(dataToHash).digest('hex')
16
- return hash.substring(0, 32)
16
+ return hash.slice(0, 32)
17
17
  }
18
18
 
19
19
  /**
@@ -54,18 +54,17 @@ function encodeValue (valueObject) {
54
54
  * Extracts and encodes primary key values from a DynamoDB item.
55
55
  * Handles tables with single-key and two-key scenarios.
56
56
  *
57
- * @param {Set<string>} keySet - Set of primary key names.
57
+ * @param {Array<string>} keyNames - Set of primary key names.
58
58
  * @param {Object} keyValuePairs - Object containing key/value pairs.
59
59
  * @returns {Array|undefined} [key1Name, key1Value, key2Name, key2Value], or undefined if invalid input.
60
60
  * key2 entries are empty strings in the single-key case.
61
61
  * @example
62
- * extractPrimaryKeys(new Set(['userId']), {userId: {S: "user123"}})
62
+ * extractPrimaryKeys(['userId'], {userId: {S: "user123"}})
63
63
  * // Returns ["userId", Buffer("user123"), "", ""]
64
- * extractPrimaryKeys(new Set(['userId', 'timestamp']), {userId: {S: "user123"}, timestamp: {N: "1234}})
64
+ * extractPrimaryKeys(['userId', 'timestamp'], {userId: {S: "user123"}, timestamp: {N: "1234}})
65
65
  * // Returns ["timestamp", Buffer.from("1234"), "userId", Buffer.from("user123")]
66
66
  */
67
- const extractPrimaryKeys = (keySet, keyValuePairs) => {
68
- const keyNames = Array.from(keySet)
67
+ const extractPrimaryKeys = (keyNames, keyValuePairs) => {
69
68
  if (keyNames.length === 0) {
70
69
  return
71
70
  }
@@ -37,7 +37,7 @@ function combine (queries) {
37
37
  function trim (str, size) {
38
38
  if (!str || str.length <= size) return str
39
39
 
40
- return `${str.substr(0, size - 3)}...`
40
+ return `${str.slice(0, size - 3)}...`
41
41
  }
42
42
 
43
43
  module.exports = CassandraDriverPlugin
@@ -17,7 +17,7 @@ function truncateCommand (cmdFields) {
17
17
 
18
18
  const argLen = cmdFields[i].length
19
19
  if (size < MAX_ARG_SIZE && size + argLen > MAX_ARG_SIZE) {
20
- cmdFields[i] = cmdFields[i].substring(0, 2)
20
+ cmdFields[i] = cmdFields[i].slice(0, 2)
21
21
  truncated = true
22
22
  }
23
23
 
@@ -66,12 +66,12 @@ class ChildProcessPlugin extends TracingPlugin {
66
66
 
67
67
  if (result !== undefined) {
68
68
  exitCode = result?.status || 0
69
- } else if (error !== undefined) {
70
- exitCode = error?.status || error?.code || 0
71
- } else {
69
+ } else if (error === undefined) {
72
70
  // TracingChannels call start, end synchronously. Later when the promise is resolved then asyncStart asyncEnd.
73
71
  // Therefore in the case of calling end with neither result nor error means that they will come in the asyncEnd.
74
72
  return
73
+ } else {
74
+ exitCode = error?.status || error?.code || 0
75
75
  }
76
76
 
77
77
  this.activeSpan?.setTag('cmd.exit_code', `${exitCode}`)
@@ -2,14 +2,14 @@
2
2
 
3
3
  const shellParser = require('shell-quote/parse')
4
4
 
5
- const ALLOWED_ENV_VARIABLES = ['LD_PRELOAD', 'LD_LIBRARY_PATH', 'PATH']
6
- const PROCESS_DENYLIST = ['md5']
5
+ const ALLOWED_ENV_VARIABLES = new Set(['LD_PRELOAD', 'LD_LIBRARY_PATH', 'PATH'])
6
+ const PROCESS_DENYLIST = new Set(['md5'])
7
7
 
8
8
  const VARNAMES_REGEX = /\$([\w\d_]*)(?:[^\w\d_]|$)/gmi
9
- // eslint-disable-next-line @stylistic/js/max-len
9
+ // eslint-disable-next-line @stylistic/max-len
10
10
  const PARAM_PATTERN = '^-{0,2}(?:p(?:ass(?:w(?:or)?d)?)?|address|api[-_]?key|e?mail|secret(?:[-_]?key)?|a(?:ccess|uth)[-_]?token|mysql_pwd|credentials|(?:stripe)?token)$'
11
11
  const regexParam = new RegExp(PARAM_PATTERN, 'i')
12
- const ENV_PATTERN = '^(\\w+=\\w+;)*\\w+=\\w+;?$'
12
+ const ENV_PATTERN = String.raw`^(\w+=\w+;)*\w+=\w+;?$`
13
13
  const envVarRegex = new RegExp(ENV_PATTERN)
14
14
  const REDACTED = '?'
15
15
 
@@ -71,25 +71,39 @@ function scrubChildProcessCmd (expression) {
71
71
  } else if (token.comment) {
72
72
  result.push(`#${token.comment}`)
73
73
  }
74
- } else if (!foundBinary) {
74
+ } else if (foundBinary) {
75
+ const paramKeyValue = token.split('=')
76
+ const paramKey = paramKeyValue[0]
77
+
78
+ if (regexParam.test(paramKey)) {
79
+ if (paramKeyValue.length === 1) {
80
+ expressionTokens[index + 1] = REDACTED
81
+ result.push(token)
82
+ } else {
83
+ result.push(`${paramKey}=${REDACTED}`)
84
+ }
85
+ } else {
86
+ result.push(token)
87
+ }
88
+ } else {
75
89
  if (envVarRegex.test(token)) {
76
90
  const envSplit = token.split('=')
77
91
 
78
- if (!ALLOWED_ENV_VARIABLES.includes(envSplit[0])) {
92
+ if (ALLOWED_ENV_VARIABLES.has(envSplit[0])) {
93
+ result.push(token)
94
+ } else {
79
95
  envSplit[1] = REDACTED
80
96
 
81
97
  const newToken = envSplit.join('=')
82
98
  expressionTokens[index] = newToken
83
99
 
84
100
  result.push(newToken)
85
- } else {
86
- result.push(token)
87
101
  }
88
102
  } else {
89
103
  foundBinary = true
90
104
  result.push(token)
91
105
 
92
- if (PROCESS_DENYLIST.includes(token)) {
106
+ if (PROCESS_DENYLIST.has(token)) {
93
107
  for (index++; index < expressionTokens.length; index++) {
94
108
  const token = expressionTokens[index]
95
109
 
@@ -103,20 +117,6 @@ function scrubChildProcessCmd (expression) {
103
117
  break
104
118
  }
105
119
  }
106
- } else {
107
- const paramKeyValue = token.split('=')
108
- const paramKey = paramKeyValue[0]
109
-
110
- if (regexParam.test(paramKey)) {
111
- if (paramKeyValue.length === 1) {
112
- expressionTokens[index + 1] = REDACTED
113
- result.push(token)
114
- } else {
115
- result.push(`${paramKey}=${REDACTED}`)
116
- }
117
- } else {
118
- result.push(token)
119
- }
120
120
  }
121
121
  }
122
122
  })