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
@@ -37,7 +37,7 @@ dev,@types/node,MIT,Copyright Authors
37
37
  dev,@eslint/eslintrc,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
38
38
  dev,@eslint/js,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
39
39
  dev,@msgpack/msgpack,ISC,Copyright 2019 The MessagePack Community
40
- dev,@stylistic/eslint-plugin-js,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
40
+ dev,@stylistic/eslint-plugin,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
41
41
  dev,axios,MIT,Copyright 2014-present Matt Zabriskie
42
42
  dev,benchmark,MIT,Copyright 2010-2016 Mathias Bynens Robert Kieffer John-David Dalton
43
43
  dev,body-parser,MIT,Copyright 2014 Jonathan Ong 2014-2015 Douglas Christopher Wilson
@@ -67,6 +67,7 @@ dev,sinon-chai,WTFPL and BSD-2-Clause,Copyright 2004 Sam Hocevar 2012–2017 Dom
67
67
  dev,tap,ISC,Copyright 2011-2022 Isaac Z. Schlueter and Contributors
68
68
  dev,tiktoken,MIT,Copyright (c) 2022 OpenAI, Shantanu Jain
69
69
  dev,yaml,ISC,Copyright Eemeli Aro <eemeli@gmail.com>
70
+ dev,yarn-deduplicate,Apache license 2.0,Copyright [yyyy] [name of copyright owner]
70
71
  file,aws-lambda-nodejs-runtime-interface-client,Apache 2.0,Copyright 2019 Amazon.com Inc. or its affiliates. All Rights Reserved.
71
72
  file,profile.proto,Apache license 2.0,Copyright 2016 Google Inc.
72
73
  file,is-git-url,MIT,Copyright (c) 2017 Jon Schlinkert.
package/index.d.ts CHANGED
@@ -209,7 +209,6 @@ interface Plugins {
209
209
  "openai": tracer.plugins.openai;
210
210
  "opensearch": tracer.plugins.opensearch;
211
211
  "oracledb": tracer.plugins.oracledb;
212
- "paperplane": tracer.plugins.paperplane;
213
212
  "playwright": tracer.plugins.playwright;
214
213
  "pg": tracer.plugins.pg;
215
214
  "pino": tracer.plugins.pino;
@@ -457,7 +456,7 @@ declare namespace tracer {
457
456
  rateLimit?: number,
458
457
 
459
458
  /**
460
- * Sampling rules to apply to priority samplin. Each rule is a JSON,
459
+ * Sampling rules to apply to priority sampling. Each rule is a JSON,
461
460
  * consisting of `service` and `name`, which are regexes to match against
462
461
  * a trace's `service` and `name`, and a corresponding `sampleRate`. If not
463
462
  * specified, will defer to global sampling rate for all spans.
@@ -714,7 +713,12 @@ declare namespace tracer {
714
713
  /** Whether to enable RASP.
715
714
  * @default false
716
715
  */
717
- enabled?: boolean
716
+ enabled?: boolean,
717
+
718
+ /** Whether to enable request body collection on RASP event
719
+ * @default false
720
+ */
721
+ bodyCollection?: boolean
718
722
  },
719
723
  /**
720
724
  * Configuration for stack trace reporting
@@ -734,6 +738,25 @@ declare namespace tracer {
734
738
  * @default 32
735
739
  */
736
740
  maxDepth?: number,
741
+ },
742
+ /**
743
+ * Configuration for extended headers collection tied to security events
744
+ */
745
+ extendedHeadersCollection?: {
746
+ /** Whether to enable extended headers collection
747
+ * @default false
748
+ */
749
+ enabled: boolean,
750
+
751
+ /** Whether to redact collected headers
752
+ * @default true
753
+ */
754
+ redaction: boolean,
755
+
756
+ /** Specifies the maximum number of headers collected.
757
+ * @default 50
758
+ */
759
+ maxHeaders: number,
737
760
  }
738
761
  }
739
762
 
@@ -801,7 +824,7 @@ declare namespace tracer {
801
824
  }
802
825
 
803
826
  /**
804
- * Configuration enabling LLM Observability. Enablement is superceded by the DD_LLMOBS_ENABLED environment variable.
827
+ * Configuration enabling LLM Observability. Enablement is superseded by the DD_LLMOBS_ENABLED environment variable.
805
828
  */
806
829
  llmobs?: llmobs.LLMObsEnableOptions
807
830
  }
@@ -1498,7 +1521,7 @@ declare namespace tracer {
1498
1521
 
1499
1522
  /**
1500
1523
  * Whether to include the source of the operation within the query as a tag
1501
- * on every span. This may contain sensitive information and sould only be
1524
+ * on every span. This may contain sensitive information and should only be
1502
1525
  * enabled if sensitive data is always sent as variables and not in the
1503
1526
  * query text.
1504
1527
  *
@@ -1876,12 +1899,6 @@ declare namespace tracer {
1876
1899
  service?: string | ((params: any) => string);
1877
1900
  }
1878
1901
 
1879
- /**
1880
- * This plugin automatically instruments the
1881
- * [paperplane](https://github.com/articulate/paperplane) module.
1882
- */
1883
- interface paperplane extends HttpServer {}
1884
-
1885
1902
  /**
1886
1903
  * This plugin automatically instruments the
1887
1904
  * [playwright](https://github.com/microsoft/playwright) module.
@@ -2485,7 +2502,7 @@ declare namespace tracer {
2485
2502
  annotate (span: tracer.Span | undefined, options: llmobs.AnnotationOptions): void
2486
2503
 
2487
2504
  /**
2488
- * Submits a custom evalutation metric for a given span ID and trace ID.
2505
+ * Submits a custom evaluation metric for a given span ID and trace ID.
2489
2506
  * @param spanContext The span context of the span to submit the evaluation metric for.
2490
2507
  * @param options An object containing the label, metric type, value, and tags of the evaluation metric.
2491
2508
  */
@@ -2499,7 +2516,7 @@ declare namespace tracer {
2499
2516
 
2500
2517
  interface EvaluationOptions {
2501
2518
  /**
2502
- * The name of the evalutation metric
2519
+ * The name of the evaluation metric
2503
2520
  */
2504
2521
  label: string,
2505
2522
 
@@ -2623,7 +2640,7 @@ declare namespace tracer {
2623
2640
  metadata?: { [key: string]: any },
2624
2641
 
2625
2642
  /**
2626
- * Object of JSON seraliazable key-value metrics (number) pairs, such as `{input,output,total}Tokens`
2643
+ * Object of JSON serializable key-value metrics (number) pairs, such as `{input,output,total}Tokens`
2627
2644
  */
2628
2645
  metrics?: { [key: string]: number },
2629
2646
 
@@ -2661,7 +2678,7 @@ declare namespace tracer {
2661
2678
 
2662
2679
  /**
2663
2680
  * The name of the ML application that the agent is orchestrating.
2664
- * If not provided, the default value will be set to mlApp provided during initalization, or `DD_LLMOBS_ML_APP`.
2681
+ * If not provided, the default value will be set to mlApp provided during initialization, or `DD_LLMOBS_ML_APP`.
2665
2682
  */
2666
2683
  mlApp?: string,
2667
2684
 
@@ -2701,7 +2718,7 @@ declare namespace tracer {
2701
2718
  mlApp?: string,
2702
2719
 
2703
2720
  /**
2704
- * Set to `true` to disbale sending data that requires a Datadog Agent.
2721
+ * Set to `true` to disable sending data that requires a Datadog Agent.
2705
2722
  */
2706
2723
  agentlessEnabled?: boolean,
2707
2724
  }
package/initialize.mjs CHANGED
@@ -17,7 +17,6 @@ import { fileURLToPath } from 'node:url'
17
17
  import {
18
18
  load as origLoad,
19
19
  resolve as origResolve,
20
- getFormat as origGetFormat,
21
20
  getSource as origGetSource
22
21
  } from 'import-in-the-middle/hook.mjs'
23
22
 
@@ -26,7 +25,7 @@ function insertInit (result) {
26
25
  if (!hasInsertedInit) {
27
26
  hasInsertedInit = true
28
27
  result.source = `
29
- import '${fileURLToPath(new URL('./init.js', import.meta.url))}';
28
+ import '${fileURLToPath(new URL('init.js', import.meta.url))}';
30
29
  ${result.source}`
31
30
  }
32
31
  return result
@@ -45,8 +44,6 @@ export async function load (url, context, nextLoad) {
45
44
 
46
45
  export const resolve = brokenLoaders ? undefined : origResolve
47
46
 
48
- export const getFormat = origGetFormat
49
-
50
47
  export async function getSource (...args) {
51
48
  return insertInit(await origGetSource(...args))
52
49
  }
@@ -60,3 +57,5 @@ if (isMainThread) {
60
57
  })
61
58
  }
62
59
  }
60
+
61
+ export { getFormat } from 'import-in-the-middle/hook.mjs'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dd-trace",
3
- "version": "5.53.0",
3
+ "version": "5.54.0",
4
4
  "description": "Datadog APM tracing client for JavaScript",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",
@@ -9,6 +9,7 @@
9
9
  "preinstall": "node scripts/preinstall.js",
10
10
  "bench": "node benchmark/index.js",
11
11
  "bench:e2e:ci-visibility": "node benchmark/e2e-ci/benchmark-run.js",
12
+ "dependencies:dedupe": "yarn-deduplicate yarn.lock",
12
13
  "type:doc": "cd docs && yarn && yarn build",
13
14
  "type:test": "cd docs && yarn && yarn test",
14
15
  "lint": "node scripts/check_licenses.js && eslint . --max-warnings 0 && yarn audit",
@@ -83,75 +84,76 @@
83
84
  "node": ">=18"
84
85
  },
85
86
  "dependencies": {
86
- "@datadog/libdatadog": "^0.5.1",
87
+ "@datadog/libdatadog": "^0.6.0",
87
88
  "@datadog/native-appsec": "8.5.2",
88
89
  "@datadog/native-iast-taint-tracking": "4.0.0",
89
90
  "@datadog/native-metrics": "^3.1.1",
90
91
  "@datadog/pprof": "5.8.0",
91
- "@datadog/sketches-js": "^2.1.0",
92
+ "@datadog/sketches-js": "^2.1.1",
92
93
  "@datadog/wasm-js-rewriter": "4.0.1",
93
94
  "@isaacs/ttlcache": "^1.4.1",
94
95
  "@opentelemetry/api": ">=1.0.0 <1.9.0",
95
96
  "@opentelemetry/core": "^1.14.0",
96
97
  "crypto-randomuuid": "^1.0.0",
97
- "dc-polyfill": "0.1.8",
98
+ "dc-polyfill": "0.1.9",
98
99
  "ignore": "^5.2.4",
99
- "import-in-the-middle": "1.13.1",
100
- "istanbul-lib-coverage": "3.2.0",
100
+ "import-in-the-middle": "1.14.0",
101
+ "istanbul-lib-coverage": "3.2.2",
101
102
  "jest-docblock": "^29.7.0",
102
103
  "koalas": "^1.0.2",
103
104
  "limiter": "1.1.5",
104
105
  "lodash.sortby": "^4.7.0",
105
- "lru-cache": "^7.14.0",
106
- "module-details-from-path": "^1.0.3",
106
+ "lru-cache": "^7.18.3",
107
+ "module-details-from-path": "^1.0.4",
107
108
  "mutexify": "^1.4.0",
108
109
  "opentracing": ">=0.12.1",
109
110
  "path-to-regexp": "^0.1.12",
110
111
  "pprof-format": "^2.1.0",
111
- "protobufjs": "^7.2.5",
112
+ "protobufjs": "^7.5.3",
112
113
  "retry": "^0.13.1",
113
- "rfdc": "^1.3.1",
114
+ "rfdc": "^1.4.1",
114
115
  "semifies": "^1.0.0",
115
- "shell-quote": "^1.8.1",
116
+ "shell-quote": "^1.8.2",
116
117
  "source-map": "^0.7.4",
117
118
  "tlhunter-sorted-set": "^0.1.0",
118
119
  "ttl-set": "^1.0.0"
119
120
  },
120
121
  "devDependencies": {
121
- "@babel/helpers": "^7.26.10",
122
- "@eslint/eslintrc": "^3.2.0",
123
- "@eslint/js": "^9.19.0",
124
- "@msgpack/msgpack": "^3.0.0-beta3",
125
- "@stylistic/eslint-plugin-js": "^3.0.1",
126
- "@types/node": "^16.0.0",
127
- "axios": "^1.8.2",
122
+ "@babel/helpers": "^7.27.3",
123
+ "@eslint/eslintrc": "^3.3.1",
124
+ "@eslint/js": "^9.27.0",
125
+ "@msgpack/msgpack": "^3.1.2",
126
+ "@stylistic/eslint-plugin": "^4.4.0",
127
+ "@types/node": "^18.19.106",
128
+ "axios": "^1.9.0",
128
129
  "benchmark": "^2.1.4",
129
- "body-parser": "^1.20.3",
130
- "chai": "^4.3.7",
131
- "eslint": "^9.19.0",
130
+ "body-parser": "^2.2.0",
131
+ "chai": "^4.5.0",
132
+ "eslint": "^9.27.0",
132
133
  "eslint-config-standard": "^17.1.0",
133
134
  "eslint-plugin-import": "^2.31.0",
134
135
  "eslint-plugin-mocha": "^10.5.0",
135
- "eslint-plugin-n": "^17.15.1",
136
+ "eslint-plugin-n": "^17.18.0",
136
137
  "eslint-plugin-promise": "^7.2.1",
137
138
  "eslint-plugin-unicorn": "^57.0.0",
138
139
  "express": "^4.21.2",
139
140
  "get-port": "^5.1.1",
140
- "glob": "^7.1.6",
141
- "globals": "^15.10.0",
141
+ "glob": "^7.2.3",
142
+ "globals": "^15.15.0",
142
143
  "graphql": "0.13.2",
143
- "jszip": "^3.5.0",
144
- "mocha": "^10",
145
- "multer": "^1.4.5-lts.1",
146
- "nock": "^11.3.3",
144
+ "jszip": "^3.10.1",
145
+ "mocha": "^10.8.2",
146
+ "multer": "^2.0.0",
147
+ "nock": "^11.9.1",
147
148
  "nyc": "^15.1.0",
148
149
  "proxyquire": "^1.8.0",
149
- "rimraf": "^3.0.0",
150
- "semver": "^7.5.4",
151
- "sinon": "^16.1.3",
150
+ "rimraf": "^3.0.2",
151
+ "semver": "^7.7.2",
152
+ "sinon": "^18.0.1",
152
153
  "sinon-chai": "^3.7.0",
153
- "tap": "^16.3.7",
154
- "tiktoken": "^1.0.15",
155
- "yaml": "^2.5.0"
154
+ "tap": "^16.3.10",
155
+ "tiktoken": "^1.0.21",
156
+ "yaml": "^2.8.0",
157
+ "yarn-deduplicate": "^6.0.2"
156
158
  }
157
159
  }
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- module.exports = (object, path) => {
3
+ module.exports = function get (object, path) {
4
4
  const pathArr = path.split('.')
5
5
  let val = object
6
6
  for (const p of pathArr) {
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- module.exports = (object, path) => {
3
+ module.exports = function has (object, path) {
4
4
  const pathArr = path.split('.')
5
5
  let property = object
6
6
  for (const n of pathArr) {
@@ -1,16 +1,14 @@
1
1
  'use strict'
2
2
 
3
- module.exports = str => {
3
+ module.exports = function kebabcase (str) {
4
4
  if (typeof str !== 'string') {
5
5
  throw new TypeError('Expected a string')
6
6
  }
7
7
 
8
8
  return str
9
9
  .trim()
10
- .replace(/([a-z])([A-Z])/g, '$1-$2')
11
- .replace(/\s+/g, '-')
12
- .replace(/^-+|-+$/g, '')
13
- .replace(/_/g, '-')
14
- .replace(/-{2,}/g, '-')
10
+ .replace(/([a-z])([A-Z])/g, '$1-$2') // Convert camelCase to kebab-case
11
+ .replace(/[\s_]+/g, '-') // Replace spaces and underscores with a single dash
12
+ .replace(/^-+|-+$/g, '') // Trim leading and trailing dashes
15
13
  .toLowerCase()
16
14
  }
@@ -11,7 +11,7 @@ const digitRegex = /^\d+$/
11
11
  * @param {Object} tags - Key/value pairs of tags
12
12
  * @returns Object - Parsed tags
13
13
  */
14
- module.exports = tags => {
14
+ module.exports = function parseTags (tags) {
15
15
  const parsedTags = {}
16
16
  for (const [tag, value] of Object.entries(tags)) {
17
17
  const keys = tag.split('.')
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
- module.exports = (object, props) => {
3
+ module.exports = function pick (object, props) {
4
4
  const result = {}
5
5
  props.forEach(prop => {
6
- if (prop in object) {
6
+ if (Object.hasOwn(object, prop)) {
7
7
  result[prop] = object[prop]
8
8
  }
9
9
  })
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- module.exports = (object, path, value) => {
3
+ module.exports = function set (object, path, value) {
4
4
  const pathArr = path.split('.')
5
5
  let property = object
6
6
  let i
@@ -1,5 +1,5 @@
1
1
  'use strict'
2
2
 
3
- module.exports = function (arr) {
3
+ module.exports = function uniq (arr) {
4
4
  return [...new Set(arr)]
5
5
  }
@@ -2,8 +2,7 @@
2
2
 
3
3
  const {
4
4
  channel,
5
- addHook,
6
- AsyncResource
5
+ addHook
7
6
  } = require('./helpers/instrument')
8
7
  const shimmer = require('../../datadog-shimmer')
9
8
 
@@ -15,9 +14,9 @@ addHook({ name: 'amqp10', file: 'lib/sender_link.js', versions: ['>=3'] }, Sende
15
14
  if (!startCh.hasSubscribers) {
16
15
  return send.apply(this, arguments)
17
16
  }
18
- const asyncResource = new AsyncResource('bound-anonymous-fn')
19
- return asyncResource.runInAsyncScope(() => {
20
- startCh.publish({ link: this })
17
+ const ctx = { link: this }
18
+
19
+ return startCh.runStores(ctx, () => {
21
20
  try {
22
21
  const promise = send.apply(this, arguments)
23
22
 
@@ -26,12 +25,13 @@ addHook({ name: 'amqp10', file: 'lib/sender_link.js', versions: ['>=3'] }, Sende
26
25
  return promise
27
26
  }
28
27
 
29
- promise.then(asyncResource.bind(() => finish(finishCh, errorCh)),
30
- asyncResource.bind(e => finish(finishCh, errorCh, e)))
31
-
28
+ promise.then(
29
+ () => finish(finishCh, errorCh, null, ctx),
30
+ e => finish(finishCh, errorCh, e, ctx)
31
+ )
32
32
  return promise
33
33
  } catch (err) {
34
- finish(finishCh, errorCh, err)
34
+ finish(finishCh, errorCh, err, ctx)
35
35
  throw err
36
36
  }
37
37
  })
@@ -47,25 +47,27 @@ addHook({ name: 'amqp10', file: 'lib/receiver_link.js', versions: ['>=3'] }, Rec
47
47
  if (!transferFrame || transferFrame.aborted || transferFrame.more) {
48
48
  return messageReceived.apply(this, arguments)
49
49
  }
50
- const asyncResource = new AsyncResource('bound-anonymous-fn')
51
- return asyncResource.runInAsyncScope(() => {
52
- startCh.publish({ link: this })
50
+ const ctx = { link: this }
51
+
52
+ return startCh.runStores(ctx, () => {
53
53
  try {
54
54
  return messageReceived.apply(this, arguments)
55
55
  } catch (err) {
56
- errorCh.publish(err)
56
+ ctx.error = err
57
+ errorCh.publish(ctx)
57
58
  throw err
58
59
  } finally {
59
- finishCh.publish()
60
+ finishCh.publish(ctx)
60
61
  }
61
62
  })
62
63
  })
63
64
  return ReceiverLink
64
65
  })
65
66
 
66
- function finish (finishCh, errorCh, error) {
67
+ function finish (finishCh, errorCh, error, ctx) {
67
68
  if (error) {
68
- errorCh.publish(error)
69
+ ctx.error = error
70
+ errorCh.publish(ctx)
69
71
  }
70
- finishCh.publish()
72
+ finishCh.publish(ctx)
71
73
  }
@@ -2,8 +2,7 @@
2
2
 
3
3
  const {
4
4
  channel,
5
- addHook,
6
- AsyncResource
5
+ addHook
7
6
  } = require('./helpers/instrument')
8
7
  const kebabCase = require('../../datadog-core/src/utils/src/kebabcase')
9
8
  const shimmer = require('../../datadog-shimmer')
@@ -11,18 +10,23 @@ const shimmer = require('../../datadog-shimmer')
11
10
  const { NODE_MAJOR, NODE_MINOR } = require('../../../version')
12
11
  const MIN_VERSION = ((NODE_MAJOR > 22) || (NODE_MAJOR === 22 && NODE_MINOR >= 2)) ? '>=0.5.3' : '>=0.5.0'
13
12
 
14
- const startCh = channel('apm:amqplib:command:start')
15
- const finishCh = channel('apm:amqplib:command:finish')
16
- const errorCh = channel('apm:amqplib:command:error')
13
+ const commandStartCh = channel('apm:amqplib:command:start')
14
+ const commandFinishCh = channel('apm:amqplib:command:finish')
15
+ const commandErrorCh = channel('apm:amqplib:command:error')
16
+
17
+ const consumeStartCh = channel('apm:amqplib:consume:start')
18
+ const consumeFinishCh = channel('apm:amqplib:consume:finish')
19
+
20
+ const publishStartCh = channel('apm:amqplib:publish:start')
21
+ const publishFinishCh = channel('apm:amqplib:publish:finish')
22
+ const publishErrorCh = channel('apm:amqplib:publish:error')
17
23
 
18
24
  const methods = {}
19
25
 
20
26
  addHook({ name: 'amqplib', file: 'lib/defs.js', versions: [MIN_VERSION] }, defs => {
21
27
  for (const [key, value] of Object.entries(defs)) {
22
28
  if (Number.isInteger(value) && isCamelCase(key)) {
23
- // TODO(BridgeAR): It should replace all `-` with `.`, so it has to be replaceAll or use a regex.
24
- // Example method that is not renamed properly: BasicGetEmpty = 3932232
25
- methods[value] = kebabCase(key).replace('-', '.')
29
+ methods[value] = kebabCase(key).replaceAll('-', '.')
26
30
  }
27
31
  }
28
32
  return defs
@@ -34,24 +38,29 @@ addHook({ name: 'amqplib', file: 'lib/channel_model.js', versions: [MIN_VERSION]
34
38
  if (message === null) {
35
39
  return message
36
40
  }
37
- startCh.publish({ method: 'basic.get', message, fields: message.fields, queue })
38
- // finish right away
39
- finishCh.publish()
41
+ const ctx = { method: 'basic.get', message, fields: message.fields, queue }
42
+ consumeStartCh.runStores(ctx, () => {
43
+ // finish right away
44
+ consumeFinishCh.publish(ctx)
45
+ })
40
46
  return message
41
47
  })
42
48
  })
43
49
  shimmer.wrap(x.Channel.prototype, 'consume', consume => function (queue, callback, options) {
44
- if (!startCh.hasSubscribers) {
50
+ if (!consumeStartCh.hasSubscribers) {
45
51
  return consume.apply(this, arguments)
46
52
  }
47
53
  arguments[1] = (message, ...args) => {
48
54
  if (message === null) {
49
55
  return callback(message, ...args)
50
56
  }
51
- startCh.publish({ method: 'basic.deliver', message, fields: message.fields, queue })
52
- const result = callback(message, ...args)
53
- finishCh.publish()
54
- return result
57
+ const ctx = { method: 'basic.deliver', message, fields: message.fields, queue }
58
+ return consumeStartCh.runStores(ctx, () => {
59
+ // finish right away
60
+ const result = callback(message, ...args)
61
+ consumeFinishCh.publish(ctx)
62
+ return result
63
+ })
55
64
  }
56
65
  return consume.apply(this, arguments)
57
66
  })
@@ -60,32 +69,36 @@ addHook({ name: 'amqplib', file: 'lib/channel_model.js', versions: [MIN_VERSION]
60
69
 
61
70
  addHook({ name: 'amqplib', file: 'lib/callback_model.js', versions: [MIN_VERSION] }, channel => {
62
71
  shimmer.wrap(channel.Channel.prototype, 'get', getMessage => function (queue, options, callback) {
63
- if (!startCh.hasSubscribers) {
72
+ if (!commandStartCh.hasSubscribers) {
64
73
  return getMessage.apply(this, arguments)
65
74
  }
66
75
  arguments[2] = (error, message, ...args) => {
67
76
  if (error !== null || message === null) {
68
77
  return callback(error, message, ...args)
69
78
  }
70
- startCh.publish({ method: 'basic.get', message, fields: message.fields, queue })
71
- const result = callback(error, message, ...args)
72
- finishCh.publish()
73
- return result
79
+ const ctx = { method: 'basic.get', message, fields: message.fields, queue }
80
+ return consumeStartCh.runStores(ctx, () => {
81
+ const result = callback(error, message, ...args)
82
+ consumeFinishCh.publish(ctx)
83
+ return result
84
+ })
74
85
  }
75
86
  return getMessage.apply(this, arguments)
76
87
  })
77
88
  shimmer.wrap(channel.Channel.prototype, 'consume', consume => function (queue, callback) {
78
- if (!startCh.hasSubscribers) {
89
+ if (!consumeStartCh.hasSubscribers) {
79
90
  return consume.apply(this, arguments)
80
91
  }
81
92
  arguments[1] = (message, ...args) => {
82
93
  if (message === null) {
83
94
  return callback(message, ...args)
84
95
  }
85
- startCh.publish({ method: 'basic.deliver', message, fields: message.fields, queue })
86
- const result = callback(message, ...args)
87
- finishCh.publish()
88
- return result
96
+ const ctx = { method: 'basic.deliver', message, fields: message.fields, queue }
97
+ return consumeStartCh.runStores(ctx, () => {
98
+ const result = callback(message, ...args)
99
+ consumeFinishCh.publish(ctx)
100
+ return result
101
+ })
89
102
  }
90
103
  return consume.apply(this, arguments)
91
104
  })
@@ -94,32 +107,36 @@ addHook({ name: 'amqplib', file: 'lib/callback_model.js', versions: [MIN_VERSION
94
107
 
95
108
  addHook({ name: 'amqplib', file: 'lib/channel.js', versions: [MIN_VERSION] }, channel => {
96
109
  shimmer.wrap(channel.Channel.prototype, 'sendImmediately', sendImmediately => function (method, fields) {
97
- return instrument(sendImmediately, this, arguments, methods[method], fields)
110
+ return instrument(
111
+ sendImmediately, this, arguments, methods[method], fields, null, commandStartCh, commandFinishCh, commandErrorCh
112
+ )
98
113
  })
99
114
 
100
115
  shimmer.wrap(channel.Channel.prototype, 'sendMessage', sendMessage => function (fields) {
101
- return instrument(sendMessage, this, arguments, 'basic.publish', fields, arguments[2])
116
+ return instrument(
117
+ sendMessage, this, arguments, 'basic.publish', fields, arguments[2],
118
+ publishStartCh, publishFinishCh, publishErrorCh
119
+ )
102
120
  })
103
121
  return channel
104
122
  })
105
123
 
106
- function instrument (send, channel, args, method, fields, message) {
124
+ function instrument (send, channel, args, method, fields, message, startCh, finishCh, errorCh) {
107
125
  if (!startCh.hasSubscribers || method === 'basic.get') {
108
126
  return send.apply(channel, args)
109
127
  }
110
128
 
111
- const asyncResource = new AsyncResource('bound-anonymous-fn')
112
- return asyncResource.runInAsyncScope(() => {
113
- startCh.publish({ channel, method, fields, message })
114
-
129
+ const ctx = { channel, method, fields, message }
130
+ return startCh.runStores(ctx, () => {
115
131
  try {
116
132
  return send.apply(channel, args)
117
133
  } catch (err) {
118
- errorCh.publish(err)
134
+ ctx.error = err
135
+ errorCh.publish(ctx)
119
136
 
120
137
  throw err
121
138
  } finally {
122
- finishCh.publish()
139
+ finishCh.publish(ctx)
123
140
  }
124
141
  })
125
142
  }
@@ -42,7 +42,7 @@ function wrapRecordExceptions (recordExceptions) {
42
42
  // this is mimicking apollo-gateways internal instrumentation
43
43
  // TODO: should we consider a mechanism to report all exceptions? since this method aggregates all exceptions
44
44
  // where as a span can only have one exception set on it at a time
45
- generalErrorCh.publish({ error: errors[errors.length - 1] })
45
+ generalErrorCh.publish({ error: errors.at(-1) })
46
46
  return recordExceptions.apply(this, args)
47
47
  }
48
48
  }
@@ -50,7 +50,7 @@ function wrapRecordExceptions (recordExceptions) {
50
50
  function wrapStartActiveSpan (startActiveSpan) {
51
51
  return function (...args) {
52
52
  const firstArg = args[0]
53
- const cb = args[args.length - 1]
53
+ const cb = args.at(-1)
54
54
  if (typeof firstArg !== 'string' || typeof cb !== 'function') return startActiveSpan.apply(this, args)
55
55
 
56
56
  const method = CHANNELS[firstArg]
@@ -54,7 +54,7 @@ function wrapDeserialize (deserialize, channelSuffix) {
54
54
 
55
55
  function wrapSmithySend (send) {
56
56
  return function (command, ...args) {
57
- const cb = args[args.length - 1]
57
+ const cb = args.at(-1)
58
58
  const innerAr = new AsyncResource('apm:aws:request:inner')
59
59
  const outerAr = new AsyncResource('apm:aws:request:outer')
60
60
  const serviceIdentifier = this.config.serviceId.toLowerCase()