dd-trace 5.53.0 → 5.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/index.d.ts +33 -16
  3. package/initialize.mjs +3 -4
  4. package/package.json +36 -34
  5. package/packages/datadog-core/src/utils/src/get.js +1 -1
  6. package/packages/datadog-core/src/utils/src/has.js +1 -1
  7. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  8. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  9. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  10. package/packages/datadog-core/src/utils/src/set.js +1 -1
  11. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  12. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  13. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  14. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  15. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  16. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  17. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  18. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
  19. package/packages/datadog-instrumentations/src/couchbase.js +3 -3
  20. package/packages/datadog-instrumentations/src/cucumber.js +87 -40
  21. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  22. package/packages/datadog-instrumentations/src/dns.js +1 -1
  23. package/packages/datadog-instrumentations/src/fs.js +1 -1
  24. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  25. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  26. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  27. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  28. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  29. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  30. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  31. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  32. package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
  33. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  34. package/packages/datadog-instrumentations/src/jest.js +137 -48
  35. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  36. package/packages/datadog-instrumentations/src/knex.js +4 -4
  37. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  38. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  39. package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
  40. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  41. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  42. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  43. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  44. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  45. package/packages/datadog-instrumentations/src/net.js +1 -1
  46. package/packages/datadog-instrumentations/src/next.js +1 -0
  47. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  48. package/packages/datadog-instrumentations/src/openai.js +21 -23
  49. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  50. package/packages/datadog-instrumentations/src/pg.js +1 -2
  51. package/packages/datadog-instrumentations/src/playwright.js +112 -69
  52. package/packages/datadog-instrumentations/src/redis.js +3 -3
  53. package/packages/datadog-instrumentations/src/restify.js +2 -2
  54. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  55. package/packages/datadog-instrumentations/src/router.js +22 -25
  56. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  57. package/packages/datadog-instrumentations/src/vitest.js +77 -28
  58. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  59. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  60. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  61. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  62. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  63. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  64. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  65. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  66. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  67. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  68. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  69. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  70. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  72. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  73. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  74. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  75. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  76. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  77. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  78. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  79. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  80. package/packages/datadog-plugin-cucumber/src/index.js +57 -2
  81. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  82. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  83. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  84. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  85. package/packages/datadog-plugin-express/src/index.js +10 -12
  86. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  87. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  88. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  89. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  90. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  91. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  92. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  93. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  94. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  95. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  96. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  97. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  98. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  99. package/packages/datadog-plugin-http/src/client.js +18 -7
  100. package/packages/datadog-plugin-http2/src/client.js +20 -20
  101. package/packages/datadog-plugin-jest/src/index.js +23 -21
  102. package/packages/datadog-plugin-jest/src/util.js +8 -8
  103. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  104. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  105. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  106. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  107. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  108. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  109. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  110. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  111. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  112. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  113. package/packages/datadog-plugin-mocha/src/index.js +33 -13
  114. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  115. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  116. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  117. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  118. package/packages/datadog-plugin-next/src/index.js +6 -5
  119. package/packages/datadog-plugin-openai/src/services.js +6 -10
  120. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  121. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  122. package/packages/datadog-plugin-playwright/src/index.js +22 -2
  123. package/packages/datadog-plugin-redis/src/index.js +1 -1
  124. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  125. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  126. package/packages/datadog-plugin-router/src/index.js +1 -1
  127. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  128. package/packages/datadog-plugin-vitest/src/index.js +47 -31
  129. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  130. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  131. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  132. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  133. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  134. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  135. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  136. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  137. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  138. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  139. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  140. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  141. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  142. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  143. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  144. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  145. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  146. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  147. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  148. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  149. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  150. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  151. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  152. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  153. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  154. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  157. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  158. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  160. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  162. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  163. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  166. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  167. package/packages/dd-trace/src/appsec/index.js +1 -1
  168. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  169. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  170. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  171. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  172. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  173. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  174. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  175. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  176. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  177. package/packages/dd-trace/src/azure_metadata.js +2 -7
  178. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  179. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  180. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  181. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  182. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  183. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  184. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  185. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  186. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  187. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  188. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  189. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  191. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  192. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  193. package/packages/dd-trace/src/config.js +82 -51
  194. package/packages/dd-trace/src/config_stable.js +3 -3
  195. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  196. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  197. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  198. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  199. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  200. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  201. package/packages/dd-trace/src/datastreams/size.js +1 -1
  202. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +74 -67
  203. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  204. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  205. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
  206. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  209. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  210. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  211. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  212. package/packages/dd-trace/src/dogstatsd.js +5 -4
  213. package/packages/dd-trace/src/encode/0.4.js +9 -9
  214. package/packages/dd-trace/src/encode/0.5.js +1 -1
  215. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  216. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  217. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  218. package/packages/dd-trace/src/exporter.js +6 -6
  219. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  220. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  221. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  222. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  223. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  224. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  225. package/packages/dd-trace/src/flare/file.js +1 -5
  226. package/packages/dd-trace/src/format.js +1 -1
  227. package/packages/dd-trace/src/git_properties.js +1 -1
  228. package/packages/dd-trace/src/id.js +12 -6
  229. package/packages/dd-trace/src/iitm.js +10 -22
  230. package/packages/dd-trace/src/lambda/handler.js +6 -6
  231. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  232. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  233. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  234. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  235. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  236. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  237. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  238. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  239. package/packages/dd-trace/src/llmobs/tagger.js +110 -96
  240. package/packages/dd-trace/src/llmobs/util.js +9 -9
  241. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  242. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  243. package/packages/dd-trace/src/log/index.js +4 -4
  244. package/packages/dd-trace/src/log/log.js +1 -1
  245. package/packages/dd-trace/src/log/writer.js +2 -2
  246. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  247. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  248. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  249. package/packages/dd-trace/src/noop/span.js +3 -5
  250. package/packages/dd-trace/src/noop/tracer.js +1 -2
  251. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  252. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  253. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  254. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  255. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  256. package/packages/dd-trace/src/opentracing/span.js +9 -14
  257. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  258. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  259. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  260. package/packages/dd-trace/src/pkg.js +1 -1
  261. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  262. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  263. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  264. package/packages/dd-trace/src/plugins/index.js +0 -1
  265. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  266. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  267. package/packages/dd-trace/src/plugins/producer.js +2 -2
  268. package/packages/dd-trace/src/plugins/storage.js +2 -2
  269. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  270. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  271. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  272. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  273. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  274. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  275. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  276. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  277. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  278. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  279. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  280. package/packages/dd-trace/src/priority_sampler.js +22 -22
  281. package/packages/dd-trace/src/profiling/config.js +44 -8
  282. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  283. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  284. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  285. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  286. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  287. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  288. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  289. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  290. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  291. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  292. package/packages/dd-trace/src/proxy.js +7 -9
  293. package/packages/dd-trace/src/random_sampler.js +40 -0
  294. package/packages/dd-trace/src/rate_limiter.js +4 -4
  295. package/packages/dd-trace/src/remote_config/index.js +3 -7
  296. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  297. package/packages/dd-trace/src/require-package-json.js +1 -1
  298. package/packages/dd-trace/src/ritm.js +4 -4
  299. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  300. package/packages/dd-trace/src/sampler.js +33 -4
  301. package/packages/dd-trace/src/sampling_rule.js +12 -3
  302. package/packages/dd-trace/src/scope.js +1 -1
  303. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  304. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  305. package/packages/dd-trace/src/span_processor.js +3 -3
  306. package/packages/dd-trace/src/span_sampler.js +4 -1
  307. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  308. package/packages/dd-trace/src/startup-log.js +2 -2
  309. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  310. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  311. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  312. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  313. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  314. package/packages/dd-trace/src/util.js +1 -1
  315. package/version.js +1 -0
  316. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  317. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  318. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  319. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -1,10 +1,22 @@
1
1
  'use strict'
2
2
 
3
- const METHODS = require('http').METHODS.map(v => v.toLowerCase()).concat('all')
3
+ const METHODS = [...require('http').METHODS.map(v => v.toLowerCase()), 'all']
4
4
  const pathToRegExp = require('path-to-regexp')
5
5
  const shimmer = require('../../datadog-shimmer')
6
6
  const { addHook, channel } = require('./helpers/instrument')
7
7
 
8
+ function isFastStar (layer, matchers) {
9
+ return layer.regexp?.fast_star ?? matchers.some(matcher => matcher.path === '*')
10
+ }
11
+
12
+ function isFastSlash (layer, matchers) {
13
+ return layer.regexp?.fast_slash ?? matchers.some(matcher => matcher.path === '/')
14
+ }
15
+
16
+ function flatten (arr) {
17
+ return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), [])
18
+ }
19
+
8
20
  // TODO: Move this function to a shared file between Express and Router
9
21
  function createWrapRouterMethod (name) {
10
22
  const enterChannel = channel(`apm:${name}:middleware:enter`)
@@ -12,6 +24,7 @@ function createWrapRouterMethod (name) {
12
24
  const finishChannel = channel(`apm:${name}:middleware:finish`)
13
25
  const errorChannel = channel(`apm:${name}:middleware:error`)
14
26
  const nextChannel = channel(`apm:${name}:middleware:next`)
27
+ const routeAddedChannel = channel(`apm:${name}:route:added`)
15
28
 
16
29
  const layerMatchers = new WeakMap()
17
30
  const regexpCache = Object.create(null)
@@ -36,16 +49,16 @@ function createWrapRouterMethod (name) {
36
49
 
37
50
  if (matchers) {
38
51
  // Try to guess which path actually matched
39
- for (let i = 0; i < matchers.length; i++) {
40
- if (matchers[i].test(layer)) {
41
- route = matchers[i].path
52
+ for (const matcher of matchers) {
53
+ if (matcher.test(layer)) {
54
+ route = matcher.path
42
55
 
43
56
  break
44
57
  }
45
58
  }
46
59
  }
47
60
 
48
- enterChannel.publish({ name, req, route })
61
+ enterChannel.publish({ name, req, route, layer })
49
62
 
50
63
  try {
51
64
  return original.apply(this, arguments)
@@ -114,26 +127,6 @@ function createWrapRouterMethod (name) {
114
127
  }))
115
128
  }
116
129
 
117
- function isFastStar (layer, matchers) {
118
- if (layer.regexp?.fast_star !== undefined) {
119
- return layer.regexp.fast_star
120
- }
121
-
122
- return matchers.some(matcher => matcher.path === '*')
123
- }
124
-
125
- function isFastSlash (layer, matchers) {
126
- if (layer.regexp?.fast_slash !== undefined) {
127
- return layer.regexp.fast_slash
128
- }
129
-
130
- return matchers.some(matcher => matcher.path === '/')
131
- }
132
-
133
- function flatten (arr) {
134
- return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), [])
135
- }
136
-
137
130
  function cachedPathToRegExp (pattern) {
138
131
  const maybeCached = regexpCache[pattern]
139
132
  if (maybeCached) {
@@ -153,6 +146,10 @@ function createWrapRouterMethod (name) {
153
146
  this.stack = [{ handle: this.stack }]
154
147
  }
155
148
 
149
+ if (routeAddedChannel.hasSubscribers) {
150
+ routeAddedChannel.publish({ topOfStackFunc: methodWithTrace, layer: this.stack[0] })
151
+ }
152
+
156
153
  wrapStack(this.stack, offset, extractMatchers(fn))
157
154
 
158
155
  return router
@@ -37,7 +37,7 @@ addHook({ name: 'tedious', versions: ['>=1.0.0'] }, tedious => {
37
37
  if (error) {
38
38
  errorCh.publish(error)
39
39
  }
40
- finishCh.publish(undefined)
40
+ finishCh.publish()
41
41
 
42
42
  return cb.apply(this, arguments)
43
43
  }, null, request)
@@ -12,6 +12,7 @@ const isNewTestCh = channel('ci:vitest:test:is-new')
12
12
  const isAttemptToFixCh = channel('ci:vitest:test:is-attempt-to-fix')
13
13
  const isDisabledCh = channel('ci:vitest:test:is-disabled')
14
14
  const isQuarantinedCh = channel('ci:vitest:test:is-quarantined')
15
+ const isModifiedCh = channel('ci:vitest:test:is-modified')
15
16
 
16
17
  // test suite hooks
17
18
  const testSuiteStartCh = channel('ci:vitest:test-suite:start')
@@ -25,6 +26,7 @@ const libraryConfigurationCh = channel('ci:vitest:library-configuration')
25
26
  const knownTestsCh = channel('ci:vitest:known-tests')
26
27
  const isEarlyFlakeDetectionFaultyCh = channel('ci:vitest:is-early-flake-detection-faulty')
27
28
  const testManagementTestsCh = channel('ci:vitest:test-management-tests')
29
+ const impactedTestsCh = channel('ci:vitest:modified-tests')
28
30
 
29
31
  const taskToCtx = new WeakMap()
30
32
  const taskToStatuses = new WeakMap()
@@ -32,6 +34,7 @@ const newTasks = new WeakSet()
32
34
  const disabledTasks = new WeakSet()
33
35
  const quarantinedTasks = new WeakSet()
34
36
  const attemptToFixTasks = new WeakSet()
37
+ const modifiedTasks = new WeakSet()
35
38
  let isRetryReasonEfd = false
36
39
  let isRetryReasonAttemptToFix = false
37
40
  const switchedStatuses = new WeakSet()
@@ -58,7 +61,9 @@ function getProvidedContext () {
58
61
  _ddIsTestManagementTestsEnabled: isTestManagementTestsEnabled,
59
62
  _ddTestManagementAttemptToFixRetries: testManagementAttemptToFixRetries,
60
63
  _ddTestManagementTests: testManagementTests,
61
- _ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled
64
+ _ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled,
65
+ _ddIsImpactedTestsEnabled: isImpactedTestsEnabled,
66
+ _ddModifiedTests: modifiedTests
62
67
  } = globalThis.__vitest_worker__.providedContext
63
68
 
64
69
  return {
@@ -70,9 +75,11 @@ function getProvidedContext () {
70
75
  isTestManagementTestsEnabled,
71
76
  testManagementAttemptToFixRetries,
72
77
  testManagementTests,
73
- isFlakyTestRetriesEnabled
78
+ isFlakyTestRetriesEnabled,
79
+ isImpactedTestsEnabled,
80
+ modifiedTests
74
81
  }
75
- } catch (e) {
82
+ } catch {
76
83
  log.error('Vitest workers could not parse provided context, so some features will not work.')
77
84
  return {
78
85
  isDiEnabled: false,
@@ -83,7 +90,9 @@ function getProvidedContext () {
83
90
  isTestManagementTestsEnabled: false,
84
91
  testManagementAttemptToFixRetries: 0,
85
92
  testManagementTests: {},
86
- isFlakyTestRetriesEnabled: false
93
+ isFlakyTestRetriesEnabled: false,
94
+ isImpactedTestsEnabled: false,
95
+ modifiedTests: {}
87
96
  }
88
97
  }
89
98
  }
@@ -123,7 +132,6 @@ function getSessionStatus (state) {
123
132
  return 'pass'
124
133
  }
125
134
 
126
- // eslint-disable-next-line
127
135
  // From https://github.com/vitest-dev/vitest/blob/51c04e2f44d91322b334f8ccbcdb368facc3f8ec/packages/runner/src/run.ts#L243-L250
128
136
  function getVitestTestStatus (test, retryCount) {
129
137
  if (test.result.state !== 'fail') {
@@ -183,10 +191,12 @@ function getSortWrapper (sort) {
183
191
  let isEarlyFlakeDetectionFaulty = false
184
192
  let isKnownTestsEnabled = false
185
193
  let isTestManagementTestsEnabled = false
194
+ let isImpactedTestsEnabled = false
186
195
  let testManagementAttemptToFixRetries = 0
187
196
  let isDiEnabled = false
188
197
  let knownTests = {}
189
198
  let testManagementTests = {}
199
+ let modifiedTests = {}
190
200
 
191
201
  try {
192
202
  const { err, libraryConfig } = await getChannelPromise(libraryConfigurationCh)
@@ -199,12 +209,14 @@ function getSortWrapper (sort) {
199
209
  isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
200
210
  isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
201
211
  testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
212
+ isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
202
213
  }
203
- } catch (e) {
214
+ } catch {
204
215
  isFlakyTestRetriesEnabled = false
205
216
  isEarlyFlakeDetectionEnabled = false
206
217
  isDiEnabled = false
207
218
  isKnownTestsEnabled = false
219
+ isImpactedTestsEnabled = false
208
220
  }
209
221
 
210
222
  if (isFlakyTestRetriesEnabled && !this.ctx.config.retry && flakyTestRetriesCount > 0) {
@@ -212,14 +224,17 @@ function getSortWrapper (sort) {
212
224
  try {
213
225
  const workspaceProject = this.ctx.getCoreWorkspaceProject()
214
226
  workspaceProject._provided._ddIsFlakyTestRetriesEnabled = isFlakyTestRetriesEnabled
215
- } catch (e) {
227
+ } catch {
216
228
  log.warn('Could not send library configuration to workers.')
217
229
  }
218
230
  }
219
231
 
220
232
  if (isKnownTestsEnabled) {
221
233
  const knownTestsResponse = await getChannelPromise(knownTestsCh)
222
- if (!knownTestsResponse.err) {
234
+ if (knownTestsResponse.err) {
235
+ isEarlyFlakeDetectionEnabled = false
236
+ isKnownTestsEnabled = false
237
+ } else {
223
238
  knownTests = knownTestsResponse.knownTests
224
239
  const getFilePaths = this.ctx.getTestFilepaths || this.ctx._globTestFilepaths
225
240
 
@@ -245,13 +260,10 @@ function getSortWrapper (sort) {
245
260
  workspaceProject._provided._ddKnownTests = knownTests.vitest || {}
246
261
  workspaceProject._provided._ddIsEarlyFlakeDetectionEnabled = isEarlyFlakeDetectionEnabled
247
262
  workspaceProject._provided._ddEarlyFlakeDetectionNumRetries = earlyFlakeDetectionNumRetries
248
- } catch (e) {
263
+ } catch {
249
264
  log.warn('Could not send known tests to workers so Early Flake Detection will not work.')
250
265
  }
251
266
  }
252
- } else {
253
- isEarlyFlakeDetectionEnabled = false
254
- isKnownTestsEnabled = false
255
267
  }
256
268
  }
257
269
 
@@ -259,26 +271,43 @@ function getSortWrapper (sort) {
259
271
  try {
260
272
  const workspaceProject = this.ctx.getCoreWorkspaceProject()
261
273
  workspaceProject._provided._ddIsDiEnabled = isDiEnabled
262
- } catch (e) {
274
+ } catch {
263
275
  log.warn('Could not send Dynamic Instrumentation configuration to workers.')
264
276
  }
265
277
  }
266
278
 
267
279
  if (isTestManagementTestsEnabled) {
268
280
  const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
269
- if (!err) {
281
+ if (err) {
282
+ isTestManagementTestsEnabled = false
283
+ log.error('Could not get test management tests.')
284
+ } else {
270
285
  testManagementTests = receivedTestManagementTests
271
286
  try {
272
287
  const workspaceProject = this.ctx.getCoreWorkspaceProject()
273
288
  workspaceProject._provided._ddIsTestManagementTestsEnabled = isTestManagementTestsEnabled
274
289
  workspaceProject._provided._ddTestManagementAttemptToFixRetries = testManagementAttemptToFixRetries
275
290
  workspaceProject._provided._ddTestManagementTests = testManagementTests
276
- } catch (e) {
291
+ } catch {
277
292
  log.warn('Could not send test management tests to workers so Test Management will not work.')
278
293
  }
294
+ }
295
+ }
296
+
297
+ if (isImpactedTestsEnabled) {
298
+ const { err, modifiedTests: receivedModifiedTests } = await getChannelPromise(impactedTestsCh)
299
+ if (err) {
300
+ isImpactedTestsEnabled = false
301
+ log.error('Could not get modified tests.')
279
302
  } else {
280
- isTestManagementTestsEnabled = false
281
- log.error('Could not get test management tests.')
303
+ modifiedTests = receivedModifiedTests
304
+ try {
305
+ const workspaceProject = this.ctx.getCoreWorkspaceProject()
306
+ workspaceProject._provided._ddIsImpactedTestsEnabled = isImpactedTestsEnabled
307
+ workspaceProject._provided._ddModifiedTests = modifiedTests
308
+ } catch {
309
+ log.warn('Could not send modified tests to workers so Impacted Tests will not work.')
310
+ }
282
311
  }
283
312
  }
284
313
 
@@ -290,7 +319,7 @@ function getSortWrapper (sort) {
290
319
 
291
320
  try {
292
321
  testCodeCoverageLinesTotal = totalCodeCoverage.getCoverageSummary().lines.pct
293
- } catch (e) {
322
+ } catch {
294
323
  // ignore errors
295
324
  }
296
325
  return totalCodeCoverage
@@ -364,7 +393,9 @@ addHook({
364
393
  numRepeats,
365
394
  isTestManagementTestsEnabled,
366
395
  testManagementAttemptToFixRetries,
367
- testManagementTests
396
+ testManagementTests,
397
+ isImpactedTestsEnabled,
398
+ modifiedTests
368
399
  } = getProvidedContext()
369
400
 
370
401
  if (isTestManagementTestsEnabled) {
@@ -397,6 +428,23 @@ addHook({
397
428
  })
398
429
  }
399
430
 
431
+ if (isImpactedTestsEnabled) {
432
+ isModifiedCh.publish({
433
+ modifiedTests,
434
+ testSuiteAbsolutePath: task.file.filepath,
435
+ onDone: (isImpacted) => {
436
+ if (isImpacted) {
437
+ if (isEarlyFlakeDetectionEnabled) {
438
+ isRetryReasonEfd = task.repeats !== numRepeats
439
+ task.repeats = numRepeats
440
+ }
441
+ modifiedTasks.add(task)
442
+ taskToStatuses.set(task, [])
443
+ }
444
+ }
445
+ })
446
+ }
447
+
400
448
  if (isKnownTestsEnabled) {
401
449
  isNewTestCh.publish({
402
450
  knownTests,
@@ -404,7 +452,7 @@ addHook({
404
452
  testName,
405
453
  onDone: (isNew) => {
406
454
  if (isNew && !attemptToFixTasks.has(task)) {
407
- if (isEarlyFlakeDetectionEnabled) {
455
+ if (isEarlyFlakeDetectionEnabled && !modifiedTasks.has(task)) {
408
456
  isRetryReasonEfd = task.repeats !== numRepeats
409
457
  task.repeats = numRepeats
410
458
  }
@@ -575,11 +623,12 @@ addHook({
575
623
  isAttemptToFix: attemptToFixTasks.has(task),
576
624
  isDisabled: disabledTasks.has(task),
577
625
  isQuarantined,
578
- isRetryReasonAtr
626
+ isRetryReasonAtr,
627
+ isModified: modifiedTasks.has(task)
579
628
  }
580
629
  taskToCtx.set(task, ctx)
581
630
 
582
- testStartCh.runStores(ctx, () => { })
631
+ testStartCh.runStores(ctx, () => {})
583
632
  return onBeforeTryTask.apply(this, arguments)
584
633
  })
585
634
 
@@ -609,7 +658,7 @@ addHook({
609
658
  if (statuses.length === testManagementAttemptToFixRetries) {
610
659
  if (statuses.every(status => status === 'pass')) {
611
660
  attemptToFixPassed = true
612
- } else if (statuses.some(status => status === 'fail')) {
661
+ } else if (statuses.includes('fail')) {
613
662
  attemptToFixFailed = true
614
663
  }
615
664
  }
@@ -621,7 +670,7 @@ addHook({
621
670
  ctx.task = task
622
671
  ctx.attemptToFixPassed = attemptToFixPassed
623
672
  ctx.attemptToFixFailed = attemptToFixFailed
624
- testFinishTimeCh.runStores(ctx, () => { })
673
+ testFinishTimeCh.runStores(ctx, () => {})
625
674
  }
626
675
 
627
676
  return result
@@ -726,7 +775,7 @@ addHook({
726
775
  const testSuiteAbsolutePath = testPaths[0]?.filepath || testPaths[0]
727
776
 
728
777
  const testSuiteCtx = { testSuiteAbsolutePath, frameworkVersion }
729
- testSuiteStartCh.runStores(testSuiteCtx, () => { })
778
+ testSuiteStartCh.runStores(testSuiteCtx, () => {})
730
779
  const startTestsResponse = await startTests.apply(this, arguments)
731
780
 
732
781
  let onFinish = null
@@ -768,7 +817,7 @@ addHook({
768
817
  let attemptToFixFailed = false
769
818
  if (attemptToFixTasks.has(task)) {
770
819
  const statuses = taskToStatuses.get(task)
771
- if (statuses.some(status => status === 'fail')) {
820
+ if (statuses.includes('fail')) {
772
821
  attemptToFixFailed = true
773
822
  }
774
823
  if (statuses.every(status => status === 'fail')) {
@@ -780,7 +829,7 @@ addHook({
780
829
  const isRetry = task.result?.retryCount > 0
781
830
  // `duration` is the duration of all the retries, so it can't be used if there are retries
782
831
  testErrorCh.publish({
783
- duration: !isRetry ? duration : undefined,
832
+ duration: isRetry ? undefined : duration,
784
833
  error: testError,
785
834
  hasFailedAllRetries,
786
835
  attemptToFixFailed,
@@ -815,7 +864,7 @@ addHook({
815
864
 
816
865
  if (testSuiteError) {
817
866
  testSuiteCtx.error = testSuiteError
818
- testSuiteErrorCh.runStores(testSuiteCtx, () => { })
867
+ testSuiteErrorCh.runStores(testSuiteCtx, () => {})
819
868
  }
820
869
 
821
870
  testSuiteFinishCh.publish({ status: testSuiteResult.state, onFinish, ...testSuiteCtx.currentStore })
@@ -7,12 +7,14 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
7
7
  static get id () { return 'amqp10' }
8
8
  static get system () { return 'amqp' }
9
9
 
10
- start ({ link }) {
10
+ bindStart (ctx) {
11
+ const { link } = ctx
12
+
11
13
  const source = getShortName(link)
12
14
  const address = getAddress(link)
13
15
 
14
16
  this.startSpan({
15
- resource: ['receive', source].filter(v => v).join(' '),
17
+ resource: ['receive', source].filter(Boolean).join(' '),
16
18
  type: 'worker',
17
19
  meta: {
18
20
  'amqp.link.source.address': source,
@@ -23,7 +25,9 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
23
25
  'amqp.connection.port': address.port,
24
26
  'amqp.connection.user': address.user
25
27
  }
26
- })
28
+ }, ctx)
29
+
30
+ return ctx.currentStore
27
31
  }
28
32
  }
29
33
 
@@ -9,12 +9,14 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
9
9
  static get operation () { return 'send' }
10
10
  static get system () { return 'amqp' }
11
11
 
12
- start ({ link }) {
12
+ bindStart (ctx) {
13
+ const { link } = ctx
14
+
13
15
  const address = getAddress(link)
14
16
  const target = getShortName(link)
15
17
 
16
18
  this.startSpan({
17
- resource: ['send', target].filter(v => v).join(' '),
19
+ resource: ['send', target].filter(Boolean).join(' '),
18
20
  meta: {
19
21
  'amqp.link.target.address': target,
20
22
  'amqp.link.role': 'sender',
@@ -26,7 +28,9 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
26
28
  'amqp.connection.port': address.port,
27
29
  'amqp.connection.user': address.user
28
30
  }
29
- })
31
+ }, ctx)
32
+
33
+ return ctx.currentStore
30
34
  }
31
35
  }
32
36
 
@@ -10,7 +10,9 @@ class AmqplibClientPlugin extends ClientPlugin {
10
10
  static get type () { return 'messaging' }
11
11
  static get operation () { return 'command' }
12
12
 
13
- start ({ channel = {}, method, fields }) {
13
+ bindStart (ctx) {
14
+ const { channel = {}, method, fields } = ctx
15
+
14
16
  if (method === 'basic.deliver' || method === 'basic.get') return
15
17
  if (method === 'basic.publish') return
16
18
 
@@ -29,11 +31,13 @@ class AmqplibClientPlugin extends ClientPlugin {
29
31
  'amqp.source': fields.source,
30
32
  'amqp.destination': fields.destination
31
33
  }
32
- })
34
+ }, ctx)
33
35
 
34
36
  fields.headers = fields.headers || {}
35
37
 
36
38
  this.tracer.inject(span, TEXT_MAP, fields.headers)
39
+
40
+ return ctx.currentStore
37
41
  }
38
42
  }
39
43
 
@@ -7,9 +7,11 @@ const { getResourceName } = require('./util')
7
7
 
8
8
  class AmqplibConsumerPlugin extends ConsumerPlugin {
9
9
  static get id () { return 'amqplib' }
10
- static get operation () { return 'command' }
10
+ static get operation () { return 'consume' }
11
+
12
+ bindStart (ctx) {
13
+ const { method, fields, message, queue } = ctx
11
14
 
12
- start ({ method, fields, message, queue }) {
13
15
  if (method !== 'basic.deliver' && method !== 'basic.get') return
14
16
 
15
17
  const childOf = extract(this.tracer, message)
@@ -27,7 +29,7 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
27
29
  'amqp.source': fields.source,
28
30
  'amqp.destination': fields.destination
29
31
  }
30
- })
32
+ }, ctx)
31
33
 
32
34
  if (
33
35
  this.config.dsmEnabled && message?.properties?.headers
@@ -37,6 +39,8 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
37
39
  this.tracer
38
40
  .setCheckpoint(['direction:in', `topic:${queueName}`, 'type:rabbitmq'], span, payloadSize)
39
41
  }
42
+
43
+ return ctx.currentStore
40
44
  }
41
45
  }
42
46
 
@@ -8,9 +8,11 @@ const { getResourceName } = require('./util')
8
8
 
9
9
  class AmqplibProducerPlugin extends ProducerPlugin {
10
10
  static get id () { return 'amqplib' }
11
- static get operation () { return 'command' }
11
+ static get operation () { return 'publish' }
12
+
13
+ bindStart (ctx) {
14
+ const { channel = {}, method, fields, message } = ctx
12
15
 
13
- start ({ channel = {}, method, fields, message }) {
14
16
  if (method !== 'basic.publish') return
15
17
 
16
18
  const stream = (channel.connection && channel.connection.stream) || {}
@@ -26,7 +28,7 @@ class AmqplibProducerPlugin extends ProducerPlugin {
26
28
  'amqp.source': fields.source,
27
29
  'amqp.destination': fields.destination
28
30
  }
29
- })
31
+ }, ctx)
30
32
 
31
33
  fields.headers = fields.headers || {}
32
34
 
@@ -49,6 +51,8 @@ class AmqplibProducerPlugin extends ProducerPlugin {
49
51
  , span, payloadSize)
50
52
  DsmPathwayCodec.encode(dataStreamsContext, fields.headers)
51
53
  }
54
+
55
+ return ctx.currentStore
52
56
  }
53
57
  }
54
58
 
@@ -8,7 +8,7 @@ function getResourceName (method, fields = {}) {
8
8
  fields.queue,
9
9
  fields.source,
10
10
  fields.destination
11
- ].filter(val => val).join(' ')
11
+ ].filter(Boolean).join(' ')
12
12
  }
13
13
 
14
14
  module.exports = { getResourceName }
@@ -58,9 +58,8 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
58
58
  const errors = ctx?.result?.errors
59
59
  // apollo gateway catches certain errors and returns them in the result object
60
60
  // we want to capture these errors as spans
61
- if (errors instanceof Array &&
62
- errors[errors.length - 1] && errors[errors.length - 1].stack && errors[errors.length - 1].message) {
63
- ctx.currentStore.span.setTag('error', errors[errors.length - 1])
61
+ if (Array.isArray(errors) && errors.at(-1)?.stack && errors.at(-1).message) {
62
+ ctx.currentStore.span.setTag('error', errors.at(-1))
64
63
  }
65
64
  ctx.currentStore.span.finish()
66
65
  return ctx.parentStore
@@ -91,7 +90,7 @@ function buildOperationContext (schema, operationDocument, operationName) {
91
90
  break
92
91
  }
93
92
  })
94
- } catch (e) {
93
+ } catch {
95
94
  // safety net
96
95
  }
97
96
 
@@ -113,12 +112,12 @@ function getSignature (document, operationName, operationType, calculate) {
113
112
  }
114
113
 
115
114
  return tools.defaultEngineReportingSignature(document, operationName)
116
- } catch (e) {
115
+ } catch {
117
116
  // safety net
118
117
  }
119
118
  }
120
119
 
121
- return [operationType, operationName].filter(val => val).join(' ')
120
+ return [operationType, operationName].filter(Boolean).join(' ')
122
121
  }
123
122
 
124
123
  module.exports = ApolloGatewayRequestPlugin
@@ -14,9 +14,8 @@ class ApolloGatewayValidatePlugin extends ApolloBasePlugin {
14
14
 
15
15
  if (!span) return
16
16
 
17
- if (result instanceof Array &&
18
- result[result.length - 1] && result[result.length - 1].stack && result[result.length - 1].message) {
19
- span.setTag('error', result[result.length - 1])
17
+ if (Array.isArray(result) && result.at(-1)?.stack && result.at(-1).message) {
18
+ span.setTag('error', result.at(-1))
20
19
  }
21
20
  span.finish()
22
21
  }
@@ -226,9 +226,10 @@ function normalizeConfig (config, serviceIdentifier) {
226
226
  })
227
227
  }
228
228
 
229
+ const noop = () => {}
230
+
229
231
  function getHooks (config) {
230
- const noop = () => {}
231
- const request = (config.hooks && config.hooks.request) || noop
232
+ const request = config.hooks?.request || noop
232
233
 
233
234
  return { request }
234
235
  }
@@ -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