dd-trace 5.52.0 → 5.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/README.md +5 -0
  3. package/index.d.ts +87 -22
  4. package/initialize.mjs +3 -4
  5. package/package.json +36 -34
  6. package/packages/datadog-core/src/utils/src/get.js +1 -1
  7. package/packages/datadog-core/src/utils/src/has.js +1 -1
  8. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  9. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  10. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  11. package/packages/datadog-core/src/utils/src/set.js +1 -1
  12. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  14. package/packages/datadog-instrumentations/src/amqplib.js +57 -37
  15. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  18. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  19. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
  20. package/packages/datadog-instrumentations/src/couchbase.js +5 -4
  21. package/packages/datadog-instrumentations/src/cucumber.js +126 -84
  22. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  23. package/packages/datadog-instrumentations/src/dns.js +1 -1
  24. package/packages/datadog-instrumentations/src/express.js +2 -6
  25. package/packages/datadog-instrumentations/src/fs.js +7 -6
  26. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  27. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  28. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  29. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  30. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  31. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  32. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
  33. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  34. package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
  35. package/packages/datadog-instrumentations/src/http/client.js +16 -21
  36. package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
  37. package/packages/datadog-instrumentations/src/jest.js +184 -87
  38. package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
  39. package/packages/datadog-instrumentations/src/knex.js +4 -4
  40. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  41. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  42. package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
  43. package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
  44. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  45. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  46. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  47. package/packages/datadog-instrumentations/src/mysql2.js +55 -47
  48. package/packages/datadog-instrumentations/src/net.js +4 -2
  49. package/packages/datadog-instrumentations/src/next.js +7 -14
  50. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  51. package/packages/datadog-instrumentations/src/openai.js +21 -23
  52. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  53. package/packages/datadog-instrumentations/src/pg.js +6 -13
  54. package/packages/datadog-instrumentations/src/playwright.js +170 -136
  55. package/packages/datadog-instrumentations/src/redis.js +3 -3
  56. package/packages/datadog-instrumentations/src/restify.js +2 -2
  57. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  58. package/packages/datadog-instrumentations/src/router.js +22 -25
  59. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  60. package/packages/datadog-instrumentations/src/url.js +9 -17
  61. package/packages/datadog-instrumentations/src/vitest.js +126 -97
  62. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  63. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  64. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  65. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  66. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  67. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  68. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  69. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  70. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  72. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  73. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  74. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  75. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  76. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  77. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  78. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  79. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  80. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  81. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  82. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  83. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  84. package/packages/datadog-plugin-cucumber/src/index.js +86 -20
  85. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  86. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  87. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  88. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  89. package/packages/datadog-plugin-express/src/index.js +10 -12
  90. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  91. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  92. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  93. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  94. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  95. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  96. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  97. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  98. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  99. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  100. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  101. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  102. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  103. package/packages/datadog-plugin-http/src/client.js +18 -7
  104. package/packages/datadog-plugin-http2/src/client.js +20 -20
  105. package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
  106. package/packages/datadog-plugin-jest/src/index.js +36 -28
  107. package/packages/datadog-plugin-jest/src/util.js +8 -8
  108. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  109. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  110. package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
  111. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  112. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  113. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  114. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  115. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  116. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  117. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  118. package/packages/datadog-plugin-mocha/src/index.js +88 -48
  119. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  120. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  121. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  122. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  123. package/packages/datadog-plugin-next/src/index.js +6 -5
  124. package/packages/datadog-plugin-openai/src/services.js +6 -10
  125. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  126. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  127. package/packages/datadog-plugin-playwright/src/index.js +48 -22
  128. package/packages/datadog-plugin-redis/src/index.js +9 -4
  129. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  130. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  131. package/packages/datadog-plugin-router/src/index.js +1 -1
  132. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  133. package/packages/datadog-plugin-vitest/src/index.js +99 -72
  134. package/packages/datadog-shimmer/src/shimmer.js +163 -36
  135. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  136. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  137. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  138. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  140. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  141. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  142. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  143. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  144. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  145. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  146. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  147. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  148. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  149. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  150. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  151. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  152. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  153. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  154. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  157. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  158. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  159. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  160. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  161. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  162. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  163. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  164. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  168. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  169. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  170. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  171. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  172. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  173. package/packages/dd-trace/src/appsec/index.js +15 -12
  174. package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
  175. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  176. package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
  177. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  178. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  179. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  180. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  181. package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
  182. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
  183. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  184. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  185. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
  186. package/packages/dd-trace/src/azure_metadata.js +2 -7
  187. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  189. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  191. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  192. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  193. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  194. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  195. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  196. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  197. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  198. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  199. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  200. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  201. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  202. package/packages/dd-trace/src/config.js +82 -51
  203. package/packages/dd-trace/src/config_stable.js +3 -3
  204. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  205. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  206. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  207. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  208. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  209. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  210. package/packages/dd-trace/src/datastreams/size.js +1 -1
  211. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
  212. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  213. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  214. package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
  215. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  216. package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
  217. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
  218. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  219. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  220. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  221. package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
  222. package/packages/dd-trace/src/dogstatsd.js +7 -4
  223. package/packages/dd-trace/src/encode/0.4.js +9 -9
  224. package/packages/dd-trace/src/encode/0.5.js +1 -1
  225. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  226. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  227. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  228. package/packages/dd-trace/src/exporter.js +6 -6
  229. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  230. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  231. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  232. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  233. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  234. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  235. package/packages/dd-trace/src/flare/file.js +1 -5
  236. package/packages/dd-trace/src/format.js +1 -1
  237. package/packages/dd-trace/src/git_properties.js +1 -1
  238. package/packages/dd-trace/src/id.js +12 -6
  239. package/packages/dd-trace/src/iitm.js +10 -22
  240. package/packages/dd-trace/src/lambda/handler.js +6 -6
  241. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  242. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  244. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  245. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  246. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  247. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  248. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  249. package/packages/dd-trace/src/llmobs/tagger.js +113 -99
  250. package/packages/dd-trace/src/llmobs/util.js +9 -9
  251. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  252. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  253. package/packages/dd-trace/src/log/index.js +4 -4
  254. package/packages/dd-trace/src/log/log.js +1 -1
  255. package/packages/dd-trace/src/log/writer.js +2 -2
  256. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  257. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  258. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  259. package/packages/dd-trace/src/noop/span.js +3 -5
  260. package/packages/dd-trace/src/noop/tracer.js +1 -2
  261. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  262. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  263. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  264. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  265. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  266. package/packages/dd-trace/src/opentracing/span.js +9 -14
  267. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  268. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  269. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  270. package/packages/dd-trace/src/pkg.js +1 -1
  271. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  272. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  273. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  274. package/packages/dd-trace/src/plugins/index.js +1 -1
  275. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  276. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  277. package/packages/dd-trace/src/plugins/producer.js +2 -2
  278. package/packages/dd-trace/src/plugins/storage.js +2 -2
  279. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  280. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  281. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  282. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  283. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  284. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  286. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  289. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  290. package/packages/dd-trace/src/priority_sampler.js +22 -22
  291. package/packages/dd-trace/src/profiling/config.js +44 -8
  292. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  293. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  294. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  295. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  296. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  297. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  298. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  299. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  300. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  301. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  302. package/packages/dd-trace/src/proxy.js +7 -13
  303. package/packages/dd-trace/src/random_sampler.js +40 -0
  304. package/packages/dd-trace/src/rate_limiter.js +4 -4
  305. package/packages/dd-trace/src/remote_config/index.js +3 -7
  306. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  307. package/packages/dd-trace/src/require-package-json.js +1 -1
  308. package/packages/dd-trace/src/ritm.js +4 -4
  309. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  310. package/packages/dd-trace/src/sampler.js +33 -4
  311. package/packages/dd-trace/src/sampling_rule.js +12 -3
  312. package/packages/dd-trace/src/scope.js +1 -1
  313. package/packages/dd-trace/src/serverless.js +0 -48
  314. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  315. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
  316. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  317. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  318. package/packages/dd-trace/src/span_processor.js +3 -3
  319. package/packages/dd-trace/src/span_sampler.js +4 -1
  320. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  321. package/packages/dd-trace/src/startup-log.js +2 -2
  322. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  323. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  324. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  325. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  326. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  327. package/packages/dd-trace/src/util.js +1 -1
  328. package/version.js +1 -0
  329. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  330. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  331. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  332. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -34,6 +34,12 @@ addHook({
34
34
  delete this.options._ddEfdNumRetries
35
35
  delete this.options._ddIsKnownTestsEnabled
36
36
  }
37
+ if (this.options._ddIsImpactedTestsEnabled) {
38
+ config.isImpactedTestsEnabled = true
39
+ config.modifiedTests = this.options._ddModifiedTests
40
+ delete this.options._ddIsImpactedTestsEnabled
41
+ delete this.options._ddModifiedTests
42
+ }
37
43
  if (this.options._ddIsTestManagementTestsEnabled) {
38
44
  config.isTestManagementTestsEnabled = true
39
45
  // TODO: attempt to fix does not work in parallel mode yet
@@ -204,7 +204,7 @@ function instrumentPromise (operation, command, ctx, args, server, ns, ops, opti
204
204
  errorCh.publish(err)
205
205
  finishCh.publish()
206
206
 
207
- return Promise.reject(err)
207
+ throw err
208
208
  })
209
209
  })
210
210
  }
@@ -1,10 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const {
4
- channel,
5
- addHook,
6
- AsyncResource
7
- } = require('./helpers/instrument')
3
+ const { channel, addHook, AsyncResource } = require('./helpers/instrument')
8
4
  const shimmer = require('../../datadog-shimmer')
9
5
 
10
6
  addHook({ name: 'mysql', file: 'lib/Connection.js', versions: ['>=2'] }, Connection => {
@@ -19,43 +15,38 @@ addHook({ name: 'mysql', file: 'lib/Connection.js', versions: ['>=2'] }, Connect
19
15
 
20
16
  const sql = arguments[0].sql || arguments[0]
21
17
  const conf = this.config
22
- const payload = { sql, conf }
23
-
24
- const callbackResource = new AsyncResource('bound-anonymous-fn')
25
- const asyncResource = new AsyncResource('bound-anonymous-fn')
26
-
27
- return asyncResource.runInAsyncScope(() => {
28
- startCh.publish(payload)
18
+ const ctx = { sql, conf }
29
19
 
20
+ return startCh.runStores(ctx, () => {
30
21
  if (arguments[0].sql) {
31
- arguments[0].sql = payload.sql
22
+ arguments[0].sql = ctx.sql
32
23
  } else {
33
- arguments[0] = payload.sql
24
+ arguments[0] = ctx.sql
34
25
  }
26
+
35
27
  try {
36
28
  const res = query.apply(this, arguments)
37
29
 
38
30
  if (res._callback) {
39
- const cb = callbackResource.bind(res._callback)
40
- res._callback = shimmer.wrapFunction(cb, cb => asyncResource.bind(function (error, result) {
31
+ const cb = res._callback
32
+ res._callback = shimmer.wrapFunction(cb, cb => function (error, result) {
41
33
  if (error) {
42
- errorCh.publish(error)
34
+ ctx.error = error
35
+ errorCh.publish(ctx)
43
36
  }
44
- finishCh.publish(result)
37
+ ctx.result = result
45
38
 
46
- return cb.apply(this, arguments)
47
- }))
48
- } else {
49
- const cb = asyncResource.bind(function () {
50
- finishCh.publish(undefined)
39
+ return finishCh.runStores(ctx, cb, this, error, result)
51
40
  })
52
- res.on('end', cb)
41
+ } else {
42
+ res.on('end', () => finishCh.publish(ctx))
53
43
  }
54
44
 
55
45
  return res
56
46
  } catch (err) {
57
47
  err.stack // trigger getting the stack at the original throwing point
58
- errorCh.publish(err)
48
+ ctx.error = err
49
+ errorCh.publish(ctx)
59
50
 
60
51
  throw err
61
52
  }
@@ -79,22 +70,15 @@ addHook({ name: 'mysql', file: 'lib/Pool.js', versions: ['>=2'] }, Pool => {
79
70
  return query.apply(this, arguments)
80
71
  }
81
72
 
82
- const asyncResource = new AsyncResource('bound-anonymous-fn')
83
-
84
73
  const sql = arguments[0].sql || arguments[0]
74
+ const ctx = { sql }
75
+ const finish = () => finishPoolQueryCh.publish(ctx)
85
76
 
86
- return asyncResource.runInAsyncScope(() => {
87
- startPoolQueryCh.publish({ sql })
88
-
89
- const finish = asyncResource.bind(function () {
90
- finishPoolQueryCh.publish()
91
- })
92
-
77
+ return startPoolQueryCh.runStores(ctx, () => {
93
78
  const cb = arguments[arguments.length - 1]
94
79
  if (typeof cb === 'function') {
95
80
  arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => function () {
96
- finish()
97
- return cb.apply(this, arguments)
81
+ return finishPoolQueryCh.runStores(ctx, cb, this, ...arguments)
98
82
  })
99
83
  }
100
84
 
@@ -1,10 +1,8 @@
1
1
  'use strict'
2
2
 
3
- const {
4
- channel,
5
- addHook,
6
- AsyncResource
7
- } = require('./helpers/instrument')
3
+ const { errorMonitor } = require('node:events')
4
+
5
+ const { channel, addHook } = require('./helpers/instrument')
8
6
  const shimmer = require('../../datadog-shimmer')
9
7
  const satisfies = require('semifies')
10
8
 
@@ -13,22 +11,25 @@ function wrapConnection (Connection, version) {
13
11
  const finishCh = channel('apm:mysql2:query:finish')
14
12
  const errorCh = channel('apm:mysql2:query:error')
15
13
  const startOuterQueryCh = channel('datadog:mysql2:outerquery:start')
14
+ const commandAddCh = channel('apm:mysql2:command:add')
15
+ const commandStartCh = channel('apm:mysql2:command:start')
16
+ const commandFinishCh = channel('apm:mysql2:command:finish')
16
17
  const shouldEmitEndAfterQueryAbort = satisfies(version, '>=1.3.3')
17
18
 
18
19
  shimmer.wrap(Connection.prototype, 'addCommand', addCommand => function (cmd) {
19
20
  if (!startCh.hasSubscribers) return addCommand.apply(this, arguments)
20
21
 
21
- const asyncResource = new AsyncResource('bound-anonymous-fn')
22
22
  const name = cmd && cmd.constructor && cmd.constructor.name
23
23
  const isCommand = typeof cmd.execute === 'function'
24
24
  const isQuery = isCommand && (name === 'Execute' || name === 'Query')
25
+ const ctx = {}
25
26
 
26
27
  // TODO: consider supporting all commands and not just queries
27
28
  cmd.execute = isQuery
28
- ? wrapExecute(cmd, cmd.execute, asyncResource, this.config)
29
- : bindExecute(cmd, cmd.execute, asyncResource)
29
+ ? wrapExecute(cmd, cmd.execute, ctx, this.config)
30
+ : bindExecute(cmd.execute, ctx)
30
31
 
31
- return asyncResource.bind(addCommand, this).apply(this, arguments)
32
+ return commandAddCh.runStores(ctx, addCommand, this, ...arguments)
32
33
  })
33
34
 
34
35
  shimmer.wrap(Connection.prototype, 'query', query => function (sql, values, cb) {
@@ -103,53 +104,60 @@ function wrapConnection (Connection, version) {
103
104
 
104
105
  return Connection
105
106
 
106
- function bindExecute (cmd, execute, asyncResource) {
107
- return shimmer.wrapFunction(execute, execute => asyncResource.bind(function executeWithTrace (packet, connection) {
108
- if (this.onResult) {
109
- this.onResult = asyncResource.bind(this.onResult)
107
+ function bindExecute (execute, ctx) {
108
+ return shimmer.wrapFunction(execute, execute => function executeWithTrace (packet, connection) {
109
+ const onResult = this.onResult
110
+
111
+ if (onResult) {
112
+ this.onResult = function () {
113
+ return commandFinishCh.runStores(ctx, onResult, this, ...arguments)
114
+ }
110
115
  }
111
116
 
112
- return execute.apply(this, arguments)
113
- }, cmd))
117
+ return commandStartCh.runStores(ctx, execute, this, ...arguments)
118
+ })
114
119
  }
115
120
 
116
- function wrapExecute (cmd, execute, asyncResource, config) {
117
- const callbackResource = new AsyncResource('bound-anonymous-fn')
121
+ function wrapExecute (cmd, execute, ctx, config) {
122
+ return shimmer.wrapFunction(execute, execute => function executeWithTrace (packet, connection) {
123
+ ctx.sql = cmd.statement ? cmd.statement.query : cmd.sql
124
+ ctx.conf = config
118
125
 
119
- return shimmer.wrapFunction(execute, execute => asyncResource.bind(function executeWithTrace (packet, connection) {
120
- const sql = cmd.statement ? cmd.statement.query : cmd.sql
121
- const payload = { sql, conf: config }
122
- startCh.publish(payload)
123
-
124
- if (cmd.statement) {
125
- cmd.statement.query = payload.sql
126
- } else {
127
- cmd.sql = payload.sql
128
- }
126
+ return startCh.runStores(ctx, () => {
127
+ if (cmd.statement) {
128
+ cmd.statement.query = ctx.sql
129
+ } else {
130
+ cmd.sql = ctx.sql
131
+ }
129
132
 
130
- if (this.onResult) {
131
- const onResult = callbackResource.bind(this.onResult)
133
+ if (this.onResult) {
134
+ const onResult = this.onResult
132
135
 
133
- this.onResult = shimmer.wrapFunction(onResult, onResult => asyncResource.bind(function (error) {
134
- if (error) {
135
- errorCh.publish(error)
136
- }
137
- finishCh.publish(undefined)
138
- onResult.apply(this, arguments)
139
- }, 'bound-anonymous-fn', this))
140
- } else {
141
- this.on('error', asyncResource.bind(error => errorCh.publish(error)))
142
- this.on('end', asyncResource.bind(() => finishCh.publish(undefined)))
143
- }
136
+ this.onResult = shimmer.wrapFunction(onResult, onResult => function (error) {
137
+ if (error) {
138
+ ctx.error = error
139
+ errorCh.publish(ctx)
140
+ }
141
+ finishCh.runStores(ctx, onResult, this, ...arguments)
142
+ })
143
+ } else {
144
+ this.on(errorMonitor, error => {
145
+ ctx.error = error
146
+ errorCh.publish(ctx)
147
+ })
148
+ this.on('end', () => finishCh.publish(ctx))
149
+ }
144
150
 
145
- this.execute = execute
151
+ this.execute = execute
146
152
 
147
- try {
148
- return execute.apply(this, arguments)
149
- } catch (err) {
150
- errorCh.publish(err)
151
- }
152
- }, cmd))
153
+ try {
154
+ return execute.apply(this, arguments)
155
+ } catch (err) {
156
+ ctx.error = err
157
+ errorCh.publish(ctx)
158
+ }
159
+ })
160
+ }, cmd)
153
161
  }
154
162
  }
155
163
  function wrapPool (Pool, version) {
@@ -1,5 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ const { errorMonitor } = require('events')
4
+
3
5
  const { channel, addHook } = require('./helpers/instrument')
4
6
  const shimmer = require('../../datadog-shimmer')
5
7
 
@@ -85,7 +87,7 @@ function getOptions (args) {
85
87
  if (Array.isArray(args[0])) return getOptions(args[0])
86
88
  return args[0]
87
89
  case 'string':
88
- if (isNaN(parseFloat(args[0]))) {
90
+ if (Number.isNaN(Number.parseFloat(args[0]))) {
89
91
  return {
90
92
  path: args[0]
91
93
  }
@@ -99,7 +101,7 @@ function getOptions (args) {
99
101
  }
100
102
 
101
103
  function setupListeners (socket, protocol, ctx, finishCh, errorCh) {
102
- const events = ['connect', 'error', 'close', 'timeout']
104
+ const events = ['connect', errorMonitor, 'close', 'timeout']
103
105
 
104
106
  const wrapListener = function (error) {
105
107
  if (error) {
@@ -70,7 +70,7 @@ function wrapRenderToHTML (renderToHTML) {
70
70
 
71
71
  function wrapRenderErrorToHTML (renderErrorToHTML) {
72
72
  return function (err, req, res, pathname, query) {
73
- return instrument(req, res, err, () => renderErrorToHTML.apply(this, arguments))
73
+ return instrument(req, res, () => renderErrorToHTML.apply(this, arguments), err)
74
74
  }
75
75
  }
76
76
 
@@ -82,7 +82,7 @@ function wrapRenderToResponse (renderToResponse) {
82
82
 
83
83
  function wrapRenderErrorToResponse (renderErrorToResponse) {
84
84
  return function (ctx, err) {
85
- return instrument(ctx.req, ctx.res, err, () => renderErrorToResponse.apply(this, arguments))
85
+ return instrument(ctx.req, ctx.res, () => renderErrorToResponse.apply(this, arguments), err)
86
86
  }
87
87
  }
88
88
 
@@ -108,6 +108,7 @@ function getPagePath (maybePage) {
108
108
 
109
109
  function getPageFromPath (page, dynamicRoutes = []) {
110
110
  for (const dynamicRoute of dynamicRoutes) {
111
+ // eslint-disable-next-line unicorn/prefer-regexp-test
111
112
  if (dynamicRoute.page.startsWith('/api') && dynamicRoute.match(page)) {
112
113
  return getPagePath(dynamicRoute.page)
113
114
  }
@@ -121,12 +122,7 @@ function getRequestMeta (req, key) {
121
122
  return typeof key === 'string' ? meta[key] : meta
122
123
  }
123
124
 
124
- function instrument (req, res, error, handler) {
125
- if (typeof error === 'function') {
126
- handler = error
127
- error = null
128
- }
129
-
125
+ function instrument (req, res, handler, error) {
130
126
  req = req.originalRequest || req
131
127
  res = res.originalResponse || res
132
128
 
@@ -216,13 +212,13 @@ addHook({
216
212
  name: 'next',
217
213
  versions: ['>=11.1'],
218
214
  file: 'dist/server/serve-static.js'
219
- }, serveStatic => shimmer.wrap(serveStatic, 'serveStatic', wrapServeStatic))
215
+ }, serveStatic => shimmer.wrap(serveStatic, 'serveStatic', wrapServeStatic, { replaceGetter: true }))
220
216
 
221
217
  addHook({
222
218
  name: 'next',
223
219
  versions: ['>=10.2 <11.1'],
224
220
  file: 'dist/next-server/server/serve-static.js'
225
- }, serveStatic => shimmer.wrap(serveStatic, 'serveStatic', wrapServeStatic))
221
+ }, serveStatic => shimmer.wrap(serveStatic, 'serveStatic', wrapServeStatic, { replaceGetter: true }))
226
222
 
227
223
  addHook({ name: 'next', versions: ['>=11.1'], file: 'dist/server/next-server.js' }, nextServer => {
228
224
  const Server = nextServer.default
@@ -282,8 +278,7 @@ addHook({
282
278
  versions: ['>=13'],
283
279
  file: 'dist/server/web/spec-extension/request.js'
284
280
  }, request => {
285
- const nextUrlDescriptor = Object.getOwnPropertyDescriptor(request.NextRequest.prototype, 'nextUrl')
286
- shimmer.wrap(nextUrlDescriptor, 'get', function (originalGet) {
281
+ shimmer.wrap(request.NextRequest.prototype, 'nextUrl', function (originalGet) {
287
282
  return function wrappedGet () {
288
283
  const nextUrl = originalGet.apply(this, arguments)
289
284
  if (queryParsedChannel.hasSubscribers) {
@@ -300,8 +295,6 @@ addHook({
300
295
  }
301
296
  })
302
297
 
303
- Object.defineProperty(request.NextRequest.prototype, 'nextUrl', nextUrlDescriptor)
304
-
305
298
  shimmer.massWrap(request.NextRequest.prototype, ['text', 'json'], function (originalMethod) {
306
299
  return async function wrappedJson () {
307
300
  const body = await originalMethod.apply(this, arguments)
@@ -14,7 +14,7 @@ addHook({
14
14
  if (JSON.parse(process.env.NYC_CONFIG).all) {
15
15
  codeCoverageWrapCh.publish(this)
16
16
  }
17
- } catch (e) {
17
+ } catch {
18
18
  // ignore errors
19
19
  }
20
20
 
@@ -137,10 +137,7 @@ function addStreamedChunk (content, chunk) {
137
137
  for (const choice of chunk.choices) {
138
138
  const choiceIdx = choice.index
139
139
  const oldChoice = content.choices.find(choice => choice?.index === choiceIdx)
140
- if (!oldChoice) {
141
- // we don't know which choices arrive in which order
142
- content.choices[choiceIdx] = choice
143
- } else {
140
+ if (oldChoice) {
144
141
  if (!oldChoice.finish_reason) {
145
142
  oldChoice.finish_reason = choice.finish_reason
146
143
  }
@@ -177,13 +174,15 @@ function addStreamedChunk (content, chunk) {
177
174
 
178
175
  if (oldTool) {
179
176
  oldTool.function.arguments += newTool.function.arguments
180
- } else {
181
- return newTool
177
+ return oldTool
182
178
  }
183
179
 
184
- return oldTool
180
+ return newTool
185
181
  })
186
182
  }
183
+ } else {
184
+ // we don't know which choices arrive in which order
185
+ content.choices[choiceIdx] = choice
187
186
  }
188
187
  }
189
188
  }
@@ -193,8 +192,7 @@ function convertBufferstoObjects (chunks = []) {
193
192
  .concat(chunks) // combine the buffers
194
193
  .toString() // stringify
195
194
  .split(/(?=data:)/) // split on "data:"
196
- .map(chunk => chunk.split('\n').join('')) // remove newlines
197
- .map(chunk => chunk.substring(6)) // remove 'data: ' from the front
195
+ .map(chunk => chunk.replace(/\n/g, '').slice(6)) // remove newlines and 'data: ' from the front
198
196
  .slice(0, -1) // remove the last [DONE] message
199
197
  .map(JSON.parse) // parse all of the returned objects
200
198
  }
@@ -217,6 +215,10 @@ function wrapStreamIterator (response, options, n, ctx) {
217
215
 
218
216
  if (chunk) {
219
217
  chunks.push(chunk)
218
+ // TODO(BridgeAR): It likely depends on the options being passed
219
+ // through if the stream returns buffers or not. By reading that,
220
+ // we don't have to do the instanceof check anymore, which is
221
+ // relatively expensive.
220
222
  if (chunk instanceof Buffer) {
221
223
  // this operation should be safe
222
224
  // if one chunk is a buffer (versus a plain object), the rest should be as well
@@ -226,21 +228,17 @@ function wrapStreamIterator (response, options, n, ctx) {
226
228
 
227
229
  if (done) {
228
230
  let body = {}
229
- chunks = chunks.filter(chunk => chunk != null) // filter null or undefined values
230
-
231
- if (chunks) {
232
- if (processChunksAsBuffers) {
233
- chunks = convertBufferstoObjects(chunks)
234
- }
231
+ if (processChunksAsBuffers) {
232
+ chunks = convertBufferstoObjects(chunks)
233
+ }
235
234
 
236
- if (chunks.length) {
237
- // define the initial body having all the content outside of choices from the first chunk
238
- // this will include import data like created, id, model, etc.
239
- body = { ...chunks[0], choices: Array.from({ length: n }) }
240
- // start from the first chunk, and add its choices into the body
241
- for (let i = 0; i < chunks.length; i++) {
242
- addStreamedChunk(body, chunks[i])
243
- }
235
+ if (chunks.length) {
236
+ // Define the initial body having all the content outside of choices from the first chunk
237
+ // this will include import data like created, id, model, etc.
238
+ body = { ...chunks[0], choices: Array.from({ length: n }) }
239
+ // Start from the first chunk, and add its choices into the body
240
+ for (const chunk_ of chunks) {
241
+ addStreamedChunk(body, chunk_)
244
242
  }
245
243
  }
246
244
 
@@ -18,7 +18,7 @@ function finish (err) {
18
18
  if (err) {
19
19
  errorChannel.publish(err)
20
20
  }
21
- finishChannel.publish(undefined)
21
+ finishChannel.publish()
22
22
  }
23
23
 
24
24
  addHook({ name: 'oracledb', versions: ['>=5'] }, oracledb => {
@@ -45,7 +45,7 @@ function wrapQuery (query) {
45
45
  const textProp = Object.getOwnPropertyDescriptor(textPropObj, 'text')
46
46
  const stream = typeof textPropObj.read === 'function'
47
47
 
48
- // Only alter `text` property if safe to do so.
48
+ // Only alter `text` property if safe to do so. Initially, it's a property, not a getter.
49
49
  if (!textProp || textProp.configurable) {
50
50
  const originalText = textPropObj.text
51
51
 
@@ -77,7 +77,6 @@ function wrapQuery (query) {
77
77
  if (abortController.signal.aborted) {
78
78
  const error = abortController.signal.reason || new Error('Aborted')
79
79
 
80
- // eslint-disable-next-line @stylistic/js/max-len
81
80
  // Based on: https://github.com/brianc/node-postgres/blob/54eb0fa216aaccd727765641e7d1cf5da2bc483d/packages/pg/lib/client.js#L510
82
81
  const reusingQuery = typeof pgQuery.submit === 'function'
83
82
  const callback = arguments[arguments.length - 1]
@@ -115,7 +114,7 @@ function wrapQuery (query) {
115
114
  const queryQueue = this.queryQueue || this._queryQueue
116
115
  const activeQuery = this.activeQuery || this._activeQuery
117
116
 
118
- const newQuery = queryQueue[queryQueue.length - 1] || activeQuery
117
+ const newQuery = queryQueue.at(-1) || activeQuery
119
118
 
120
119
  if (!newQuery) {
121
120
  return retval
@@ -129,21 +128,15 @@ function wrapQuery (query) {
129
128
  }
130
129
  } else if (newQuery.once) {
131
130
  newQuery
132
- .once('error', finish)
131
+ .once(errorMonitor, finish)
133
132
  .once('end', (res) => finish(null, res))
134
133
  } else {
134
+ // TODO: This code is never reached in our tests.
135
+ // Internally, pg always uses callbacks or streams, even for promise based queries.
136
+ // Investigate if this code should just be removed.
135
137
  newQuery.then((res) => finish(null, res), finish)
136
138
  }
137
139
 
138
- if (stream) {
139
- newQuery.on('end', () => {
140
- finish(null, [])
141
- })
142
- newQuery.on(errorMonitor, (err) => {
143
- finish(err)
144
- })
145
- }
146
-
147
140
  try {
148
141
  return retval
149
142
  } catch (err) {