dd-trace 5.101.0 → 5.103.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 (235) hide show
  1. package/ext/exporters.js +1 -0
  2. package/package.json +20 -17
  3. package/packages/datadog-esbuild/src/utils.js +2 -2
  4. package/packages/datadog-instrumentations/src/aerospike.js +2 -2
  5. package/packages/datadog-instrumentations/src/ai.js +9 -9
  6. package/packages/datadog-instrumentations/src/amqplib.js +6 -7
  7. package/packages/datadog-instrumentations/src/anthropic.js +10 -10
  8. package/packages/datadog-instrumentations/src/apollo-server-core.js +3 -3
  9. package/packages/datadog-instrumentations/src/apollo-server.js +5 -5
  10. package/packages/datadog-instrumentations/src/avsc.js +6 -6
  11. package/packages/datadog-instrumentations/src/aws-sdk.js +151 -67
  12. package/packages/datadog-instrumentations/src/azure-durable-functions.js +8 -8
  13. package/packages/datadog-instrumentations/src/bluebird.js +2 -2
  14. package/packages/datadog-instrumentations/src/body-parser.js +2 -2
  15. package/packages/datadog-instrumentations/src/cassandra-driver.js +7 -7
  16. package/packages/datadog-instrumentations/src/child_process.js +12 -12
  17. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +41 -24
  18. package/packages/datadog-instrumentations/src/connect.js +7 -7
  19. package/packages/datadog-instrumentations/src/cookie-parser.js +4 -4
  20. package/packages/datadog-instrumentations/src/cookie.js +2 -2
  21. package/packages/datadog-instrumentations/src/couchbase.js +73 -238
  22. package/packages/datadog-instrumentations/src/crypto.js +4 -4
  23. package/packages/datadog-instrumentations/src/cucumber.js +78 -17
  24. package/packages/datadog-instrumentations/src/dns.js +0 -3
  25. package/packages/datadog-instrumentations/src/elasticsearch.js +8 -11
  26. package/packages/datadog-instrumentations/src/electron/preload.js +42 -0
  27. package/packages/datadog-instrumentations/src/electron.js +240 -0
  28. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +6 -6
  29. package/packages/datadog-instrumentations/src/express-session.js +4 -4
  30. package/packages/datadog-instrumentations/src/express.js +10 -11
  31. package/packages/datadog-instrumentations/src/fastify.js +2 -2
  32. package/packages/datadog-instrumentations/src/fetch.js +5 -5
  33. package/packages/datadog-instrumentations/src/fs.js +14 -14
  34. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +5 -7
  35. package/packages/datadog-instrumentations/src/google-genai.js +4 -4
  36. package/packages/datadog-instrumentations/src/graphql.js +13 -12
  37. package/packages/datadog-instrumentations/src/grpc/server.js +2 -2
  38. package/packages/datadog-instrumentations/src/hapi.js +2 -2
  39. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +9 -9
  40. package/packages/datadog-instrumentations/src/helpers/hook.js +4 -1
  41. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  42. package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
  43. package/packages/datadog-instrumentations/src/helpers/kafka.js +41 -0
  44. package/packages/datadog-instrumentations/src/helpers/promise.js +2 -2
  45. package/packages/datadog-instrumentations/src/hono.js +2 -2
  46. package/packages/datadog-instrumentations/src/http/client.js +6 -6
  47. package/packages/datadog-instrumentations/src/http/server.js +9 -9
  48. package/packages/datadog-instrumentations/src/ioredis.js +16 -12
  49. package/packages/datadog-instrumentations/src/jest.js +382 -81
  50. package/packages/datadog-instrumentations/src/kafkajs.js +165 -174
  51. package/packages/datadog-instrumentations/src/knex.js +17 -17
  52. package/packages/datadog-instrumentations/src/koa.js +12 -12
  53. package/packages/datadog-instrumentations/src/ldapjs.js +5 -5
  54. package/packages/datadog-instrumentations/src/light-my-request.js +2 -2
  55. package/packages/datadog-instrumentations/src/limitd-client.js +4 -4
  56. package/packages/datadog-instrumentations/src/lodash.js +4 -4
  57. package/packages/datadog-instrumentations/src/mariadb.js +13 -13
  58. package/packages/datadog-instrumentations/src/memcached.js +2 -2
  59. package/packages/datadog-instrumentations/src/microgateway-core.js +2 -2
  60. package/packages/datadog-instrumentations/src/mocha/common.js +3 -3
  61. package/packages/datadog-instrumentations/src/mocha/main.js +85 -11
  62. package/packages/datadog-instrumentations/src/mocha/utils.js +133 -16
  63. package/packages/datadog-instrumentations/src/mocha/worker.js +7 -5
  64. package/packages/datadog-instrumentations/src/mongodb-core.js +42 -30
  65. package/packages/datadog-instrumentations/src/mongodb.js +5 -5
  66. package/packages/datadog-instrumentations/src/mongoose.js +21 -21
  67. package/packages/datadog-instrumentations/src/mquery.js +5 -5
  68. package/packages/datadog-instrumentations/src/multer.js +4 -4
  69. package/packages/datadog-instrumentations/src/mysql.js +16 -16
  70. package/packages/datadog-instrumentations/src/mysql2.js +4 -4
  71. package/packages/datadog-instrumentations/src/net.js +14 -8
  72. package/packages/datadog-instrumentations/src/nyc.js +5 -5
  73. package/packages/datadog-instrumentations/src/openai.js +19 -19
  74. package/packages/datadog-instrumentations/src/oracledb.js +6 -6
  75. package/packages/datadog-instrumentations/src/passport-utils.js +5 -5
  76. package/packages/datadog-instrumentations/src/pg.js +39 -25
  77. package/packages/datadog-instrumentations/src/pino.js +6 -10
  78. package/packages/datadog-instrumentations/src/playwright.js +445 -68
  79. package/packages/datadog-instrumentations/src/protobufjs.js +16 -16
  80. package/packages/datadog-instrumentations/src/redis.js +20 -12
  81. package/packages/datadog-instrumentations/src/restify.js +2 -2
  82. package/packages/datadog-instrumentations/src/router.js +12 -12
  83. package/packages/datadog-instrumentations/src/stripe.js +12 -12
  84. package/packages/datadog-instrumentations/src/vitest.js +107 -26
  85. package/packages/datadog-instrumentations/src/winston.js +4 -4
  86. package/packages/datadog-instrumentations/src/ws.js +7 -7
  87. package/packages/datadog-plugin-apollo/src/gateway/request.js +1 -21
  88. package/packages/datadog-plugin-aws-sdk/src/base.js +70 -28
  89. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
  90. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +20 -13
  91. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +46 -36
  92. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +34 -23
  93. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
  94. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
  95. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +14 -15
  96. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +74 -55
  97. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +20 -18
  98. package/packages/datadog-plugin-aws-sdk/src/util.js +22 -0
  99. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +6 -6
  100. package/packages/datadog-plugin-couchbase/src/index.js +58 -52
  101. package/packages/datadog-plugin-cucumber/src/index.js +5 -0
  102. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +215 -26
  103. package/packages/datadog-plugin-cypress/src/support.js +13 -1
  104. package/packages/datadog-plugin-electron/src/index.js +17 -0
  105. package/packages/datadog-plugin-electron/src/ipc.js +143 -0
  106. package/packages/datadog-plugin-electron/src/net.js +82 -0
  107. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -5
  108. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +27 -18
  109. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +3 -1
  110. package/packages/datadog-plugin-graphql/src/execute.js +6 -28
  111. package/packages/datadog-plugin-graphql/src/resolve.js +30 -35
  112. package/packages/datadog-plugin-graphql/src/tools/signature.js +32 -7
  113. package/packages/datadog-plugin-graphql/src/tools/transforms.js +118 -100
  114. package/packages/datadog-plugin-graphql/src/utils.js +29 -0
  115. package/packages/datadog-plugin-grpc/src/client.js +6 -7
  116. package/packages/datadog-plugin-grpc/src/util.js +57 -22
  117. package/packages/datadog-plugin-http/src/client.js +3 -7
  118. package/packages/datadog-plugin-jest/src/index.js +92 -50
  119. package/packages/datadog-plugin-jest/src/util.js +1 -2
  120. package/packages/datadog-plugin-mocha/src/index.js +5 -0
  121. package/packages/datadog-plugin-mongodb-core/src/index.js +36 -69
  122. package/packages/datadog-plugin-mysql/src/index.js +1 -1
  123. package/packages/datadog-plugin-openai/src/services.js +2 -1
  124. package/packages/datadog-plugin-openai/src/tracing.js +12 -23
  125. package/packages/datadog-plugin-pg/src/index.js +3 -3
  126. package/packages/datadog-plugin-playwright/src/index.js +5 -1
  127. package/packages/datadog-plugin-redis/src/index.js +18 -23
  128. package/packages/datadog-plugin-vitest/src/index.js +8 -1
  129. package/packages/datadog-shimmer/src/shimmer.js +7 -1
  130. package/packages/dd-trace/src/aiguard/index.js +3 -1
  131. package/packages/dd-trace/src/aiguard/sdk.js +36 -30
  132. package/packages/dd-trace/src/aiguard/tags.js +20 -11
  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 +81 -81
  135. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +2 -2
  136. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +2 -2
  137. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +4 -4
  138. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -0
  140. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -3
  141. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +83 -48
  142. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
  143. package/packages/dd-trace/src/appsec/index.js +21 -24
  144. package/packages/dd-trace/src/appsec/reporter.js +3 -1
  145. package/packages/dd-trace/src/appsec/rule_manager.js +4 -2
  146. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +31 -16
  147. package/packages/dd-trace/src/azure_metadata.js +17 -6
  148. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +4 -4
  149. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
  150. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +6 -4
  151. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +1 -1
  152. package/packages/dd-trace/src/config/defaults.js +3 -14
  153. package/packages/dd-trace/src/config/generated-config-types.d.ts +3 -1
  154. package/packages/dd-trace/src/config/git_properties.js +2 -2
  155. package/packages/dd-trace/src/config/helper.js +4 -0
  156. package/packages/dd-trace/src/config/index.js +2 -2
  157. package/packages/dd-trace/src/config/major-overrides.js +98 -0
  158. package/packages/dd-trace/src/config/parsers.js +7 -1
  159. package/packages/dd-trace/src/config/supported-configurations.json +51 -38
  160. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  161. package/packages/dd-trace/src/datastreams/index.js +2 -1
  162. package/packages/dd-trace/src/datastreams/manager.js +1 -1
  163. package/packages/dd-trace/src/datastreams/processor.js +3 -4
  164. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +2 -2
  165. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -0
  166. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
  167. package/packages/dd-trace/src/debugger/devtools_client/state.js +2 -1
  168. package/packages/dd-trace/src/debugger/index.js +7 -7
  169. package/packages/dd-trace/src/dogstatsd.js +2 -2
  170. package/packages/dd-trace/src/encode/0.4.js +748 -232
  171. package/packages/dd-trace/src/encode/0.5.js +47 -10
  172. package/packages/dd-trace/src/encode/agentless-json.js +1 -1
  173. package/packages/dd-trace/src/exporter.js +2 -0
  174. package/packages/dd-trace/src/exporters/agent/index.js +2 -1
  175. package/packages/dd-trace/src/exporters/agentless/index.js +3 -2
  176. package/packages/dd-trace/src/exporters/agentless/writer.js +2 -2
  177. package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -1
  178. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  179. package/packages/dd-trace/src/exporters/electron/index.js +49 -0
  180. package/packages/dd-trace/src/external-logger/src/index.js +2 -1
  181. package/packages/dd-trace/src/git_metadata.js +10 -8
  182. package/packages/dd-trace/src/lambda/handler-paths.js +52 -0
  183. package/packages/dd-trace/src/lambda/index.js +62 -14
  184. package/packages/dd-trace/src/lambda/runtime/patch.js +21 -46
  185. package/packages/dd-trace/src/llmobs/index.js +13 -2
  186. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -2
  187. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +45 -15
  188. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +6 -3
  189. package/packages/dd-trace/src/llmobs/sdk.js +24 -26
  190. package/packages/dd-trace/src/llmobs/span_processor.js +25 -5
  191. package/packages/dd-trace/src/llmobs/util.js +1 -0
  192. package/packages/dd-trace/src/llmobs/writers/base.js +2 -1
  193. package/packages/dd-trace/src/msgpack/chunk.js +6 -3
  194. package/packages/dd-trace/src/openfeature/noop.js +40 -36
  195. package/packages/dd-trace/src/openfeature/writers/base.js +2 -1
  196. package/packages/dd-trace/src/openfeature/writers/exposures.js +33 -52
  197. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +2 -1
  198. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +1 -2
  199. package/packages/dd-trace/src/opentelemetry/tracer.js +0 -22
  200. package/packages/dd-trace/src/opentracing/propagation/text_map.js +20 -9
  201. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -11
  202. package/packages/dd-trace/src/payload-tagging/config/index.js +2 -2
  203. package/packages/dd-trace/src/plugins/ci_plugin.js +49 -4
  204. package/packages/dd-trace/src/plugins/database.js +54 -12
  205. package/packages/dd-trace/src/plugins/index.js +1 -0
  206. package/packages/dd-trace/src/plugins/plugin.js +2 -4
  207. package/packages/dd-trace/src/plugins/util/ci.js +9 -9
  208. package/packages/dd-trace/src/plugins/util/git-cache.js +23 -23
  209. package/packages/dd-trace/src/plugins/util/stacktrace.js +2 -2
  210. package/packages/dd-trace/src/plugins/util/test.js +56 -12
  211. package/packages/dd-trace/src/plugins/util/url.js +1 -3
  212. package/packages/dd-trace/src/plugins/util/user-provided-git.js +18 -16
  213. package/packages/dd-trace/src/plugins/util/web.js +5 -7
  214. package/packages/dd-trace/src/priority_sampler.js +1 -1
  215. package/packages/dd-trace/src/profiling/profiler.js +1 -1
  216. package/packages/dd-trace/src/profiling/profilers/events.js +3 -23
  217. package/packages/dd-trace/src/profiling/profilers/wall.js +5 -6
  218. package/packages/dd-trace/src/profiling/ssi-heuristics.js +1 -1
  219. package/packages/dd-trace/src/rate_limiter.js +1 -1
  220. package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
  221. package/packages/dd-trace/src/ritm.js +2 -1
  222. package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
  223. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -8
  224. package/packages/dd-trace/src/scope.js +3 -10
  225. package/packages/dd-trace/src/serverless.js +6 -6
  226. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +27 -1
  227. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  228. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +24 -0
  229. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  230. package/packages/dd-trace/src/span_stats.js +1 -1
  231. package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
  232. package/packages/dd-trace/src/telemetry/endpoints.js +1 -1
  233. package/packages/dd-trace/src/telemetry/telemetry.js +2 -2
  234. package/packages/dd-trace/src/tracer.js +7 -7
  235. package/packages/dd-trace/src/lambda/runtime/ritm.js +0 -133
@@ -8,7 +8,7 @@ const sessionMiddlewareFinishCh = channel('datadog:express-session:middleware:fi
8
8
  function wrapSessionMiddleware (sessionMiddleware) {
9
9
  return function wrappedSessionMiddleware (req, res, next) {
10
10
  shimmer.wrap(arguments, 2, function wrapNext (next) {
11
- return function wrappedNext () {
11
+ return function wrappedNext (...args) {
12
12
  if (sessionMiddlewareFinishCh.hasSubscribers) {
13
13
  const abortController = new AbortController()
14
14
 
@@ -17,7 +17,7 @@ function wrapSessionMiddleware (sessionMiddleware) {
17
17
  if (abortController.signal.aborted) return
18
18
  }
19
19
 
20
- return next.apply(this, arguments)
20
+ return next.apply(this, args)
21
21
  }
22
22
  })
23
23
 
@@ -26,8 +26,8 @@ function wrapSessionMiddleware (sessionMiddleware) {
26
26
  }
27
27
 
28
28
  function wrapSession (session) {
29
- return function wrappedSession () {
30
- const sessionMiddleware = session.apply(this, arguments)
29
+ return function wrappedSession (...args) {
30
+ const sessionMiddleware = session.apply(this, args)
31
31
 
32
32
  return shimmer.wrapFunction(sessionMiddleware, wrapSessionMiddleware)
33
33
  }
@@ -54,13 +54,12 @@ function wrapResponseRender (render) {
54
54
 
55
55
  const abortController = new AbortController()
56
56
  return responseRenderChannel.traceSync(
57
- function () {
57
+ function (...args) {
58
58
  if (abortController.signal.aborted) {
59
- const error = abortController.signal.reason || new Error('Aborted')
60
- throw error
59
+ throw abortController.signal.reason || new Error('Aborted')
61
60
  }
62
61
 
63
- return render.apply(this, arguments)
62
+ return render.apply(this, args)
64
63
  },
65
64
  {
66
65
  req: this.req,
@@ -173,7 +172,7 @@ addHook({ name: 'express', versions: ['4'], file: 'lib/express.js' }, express =>
173
172
  const queryParserReadCh = channel('datadog:query:read:finish')
174
173
 
175
174
  function publishQueryParsedAndNext (req, res, next) {
176
- return shimmer.wrapFunction(next, next => function () {
175
+ return shimmer.wrapFunction(next, next => function (...args) {
177
176
  if (queryParserReadCh.hasSubscribers && req) {
178
177
  const abortController = new AbortController()
179
178
  const query = req.query
@@ -183,7 +182,7 @@ function publishQueryParsedAndNext (req, res, next) {
183
182
  if (abortController.signal.aborted) return
184
183
  }
185
184
 
186
- return next.apply(this, arguments)
185
+ return next.apply(this, args)
187
186
  })
188
187
  }
189
188
 
@@ -192,8 +191,8 @@ addHook({
192
191
  versions: ['4'],
193
192
  file: 'lib/middleware/query.js',
194
193
  }, query => {
195
- return shimmer.wrapFunction(query, query => function () {
196
- const queryMiddleware = query.apply(this, arguments)
194
+ return shimmer.wrapFunction(query, query => function (...args) {
195
+ const queryMiddleware = query.apply(this, args)
197
196
 
198
197
  return shimmer.wrapFunction(queryMiddleware, queryMiddleware => function (req, res, next) {
199
198
  arguments[2] = publishQueryParsedAndNext(req, res, next)
@@ -205,9 +204,9 @@ addHook({
205
204
  const processParamsStartCh = channel('datadog:express:process_params:start')
206
205
  function wrapProcessParamsMethod (requestPositionInArguments) {
207
206
  return function wrapProcessParams (original) {
208
- return function wrappedProcessParams () {
207
+ return function wrappedProcessParams (...args) {
209
208
  if (processParamsStartCh.hasSubscribers) {
210
- const req = arguments[requestPositionInArguments]
209
+ const req = args[requestPositionInArguments]
211
210
  const abortController = new AbortController()
212
211
 
213
212
  processParamsStartCh.publish({
@@ -220,7 +219,7 @@ function wrapProcessParamsMethod (requestPositionInArguments) {
220
219
  if (abortController.signal.aborted) return
221
220
  }
222
221
 
223
- return original.apply(this, arguments)
222
+ return original.apply(this, args)
224
223
  }
225
224
  }
226
225
  }
@@ -25,8 +25,8 @@ const bodyPublished = new WeakSet()
25
25
  function wrapFastify (fastify, hasParsingEvents) {
26
26
  if (typeof fastify !== 'function') return fastify
27
27
 
28
- return function fastifyWithTrace () {
29
- const app = fastify.apply(this, arguments)
28
+ return function fastifyWithTrace (...args) {
29
+ const app = fastify.apply(this, args)
30
30
 
31
31
  if (!app || typeof app.addHook !== 'function') return app
32
32
 
@@ -5,10 +5,10 @@ const { IS_SERVERLESS } = require('../../dd-trace/src/serverless')
5
5
  if (globalThis.fetch) {
6
6
  const globalFetch = globalThis.fetch
7
7
 
8
- let fetch = (input, init) => {
8
+ let wrappedFetch = (input, init) => {
9
9
  wrapRealFetch()
10
10
 
11
- return fetch(input, init)
11
+ return wrappedFetch(input, init)
12
12
  }
13
13
 
14
14
  function wrapRealFetch () {
@@ -20,14 +20,14 @@ if (globalThis.fetch) {
20
20
  channel('dd-trace:instrumentation:load').publish({ name: 'global:fetch' })
21
21
  })
22
22
 
23
- fetch = wrapFetch(globalFetch)
23
+ wrappedFetch = wrapFetch(globalFetch)
24
24
  }
25
25
 
26
26
  if (!IS_SERVERLESS) {
27
27
  wrapRealFetch()
28
28
  }
29
29
 
30
- globalThis.fetch = function value (input, init) {
31
- return fetch(input, init)
30
+ globalThis.fetch = function fetch (input, init) {
31
+ return wrappedFetch(input, init)
32
32
  }
33
33
  }
@@ -165,13 +165,13 @@ function initDirAsyncIteratorProperties (iterator) {
165
165
 
166
166
  function createWrapDirAsyncIterator () {
167
167
  return function wrapDirAsyncIterator (asyncIterator) {
168
- return function wrappedAsyncIterator () {
168
+ return function wrappedAsyncIterator (...args) {
169
169
  if (!kDirReadPromisified || !kDirClosePromisified) {
170
170
  initDirAsyncIteratorProperties(this)
171
171
  }
172
172
  wrap(this, kDirReadPromisified, createWrapFunction('dir.', 'read'))
173
173
  wrap(this, kDirClosePromisified, createWrapFunction('dir.', 'close'))
174
- return asyncIterator.apply(this, arguments)
174
+ return asyncIterator.apply(this, args)
175
175
  }
176
176
  }
177
177
  }
@@ -231,12 +231,12 @@ function createWatchWrapFunction (override = '') {
231
231
  const name = override || original.name
232
232
  const method = name
233
233
  const operation = name
234
- return function () {
235
- if (!startChannel.hasSubscribers) return original.apply(this, arguments)
236
- const ctx = getMessage(method, watchMethods[operation], arguments, this)
234
+ return function (...args) {
235
+ if (!startChannel.hasSubscribers) return original.apply(this, args)
236
+ const ctx = getMessage(method, watchMethods[operation], args, this)
237
237
  return startChannel.runStores(ctx, () => {
238
238
  try {
239
- const result = original.apply(this, arguments)
239
+ const result = original.apply(this, args)
240
240
  finishChannel.runStores(ctx, () => {})
241
241
  return result
242
242
  } catch (error) {
@@ -256,14 +256,14 @@ function createWrapFunction (prefix = '', override = '') {
256
256
  const method = `${prefix}${name}`
257
257
  const operation = name.match(/^(.+?)(Sync)?(\.native)?$/)[1]
258
258
 
259
- return function () {
260
- if (!startChannel.hasSubscribers) return original.apply(this, arguments)
259
+ return function (...args) {
260
+ if (!startChannel.hasSubscribers) return original.apply(this, args)
261
261
 
262
- const lastIndex = arguments.length - 1
263
- const cb = typeof arguments[lastIndex] === 'function' && arguments[lastIndex]
262
+ const lastIndex = args.length - 1
263
+ const cb = typeof args[lastIndex] === 'function' && args[lastIndex]
264
264
  const params = getMethodParamsRelationByPrefix(prefix)[operation]
265
265
  const abortController = new AbortController()
266
- const ctx = { ...getMessage(method, params, arguments, this), abortController }
266
+ const ctx = { ...getMessage(method, params, args, this), abortController }
267
267
 
268
268
  const finish = function (error, cb = () => {}) {
269
269
  if (error !== null && typeof error === 'object') { // fs.exists receives a boolean
@@ -274,7 +274,7 @@ function createWrapFunction (prefix = '', override = '') {
274
274
  }
275
275
 
276
276
  if (cb) {
277
- arguments[lastIndex] = shimmer.wrapFunction(cb, cb => function (e) {
277
+ args[lastIndex] = shimmer.wrapFunction(cb, cb => function (e) {
278
278
  return finish(e, () => cb.apply(this, arguments))
279
279
  })
280
280
  }
@@ -290,13 +290,13 @@ function createWrapFunction (prefix = '', override = '') {
290
290
  finish(error)
291
291
  throw error
292
292
  } else if (cb) {
293
- arguments[lastIndex](error)
293
+ args[lastIndex](error)
294
294
  return
295
295
  }
296
296
  }
297
297
 
298
298
  try {
299
- const result = original.apply(this, arguments)
299
+ const result = original.apply(this, args)
300
300
  if (cb) return result
301
301
  if (result && typeof result.then === 'function') {
302
302
  // TODO method open returning promise and filehandle prototype not initialized, initialize it
@@ -167,17 +167,17 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/su
167
167
  * Flow: message.ack() -> store context -> acknowledge() API -> retrieve context
168
168
  */
169
169
  if (Message?.prototype?.ack) {
170
- shimmer.wrap(Message.prototype, 'ack', originalAck => function () {
170
+ shimmer.wrap(Message.prototype, 'ack', originalAck => function (...args) {
171
171
  if (this.ackId) {
172
172
  const ctx = {
173
173
  message: this,
174
174
  ackId: this.ackId,
175
175
  }
176
176
 
177
- return messageAckStoreCh.runStores(ctx, originalAck, this, ...arguments)
177
+ return messageAckStoreCh.runStores(ctx, originalAck, this, ...args)
178
178
  }
179
179
 
180
- return originalAck.apply(this, arguments)
180
+ return originalAck.apply(this, args)
181
181
  })
182
182
  }
183
183
 
@@ -212,7 +212,7 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/le
212
212
  return receiveFinishCh.runStores(ctx || { message }, remove, this, ...arguments)
213
213
  })
214
214
 
215
- shimmer.wrap(LeaseManager.prototype, 'clear', clear => function () {
215
+ shimmer.wrap(LeaseManager.prototype, 'clear', clear => function (...args) {
216
216
  if (this._messages) {
217
217
  for (const message of this._messages.values()) {
218
218
  const ctx = messageContexts.get(message)
@@ -222,10 +222,8 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/le
222
222
  }
223
223
  }
224
224
  }
225
- return clear.apply(this, arguments)
225
+ return clear.apply(this, args)
226
226
  })
227
-
228
- return obj
229
227
  })
230
228
 
231
229
  /**
@@ -46,10 +46,10 @@ function wrapGenerateContent (method) {
46
46
  }
47
47
 
48
48
  function wrapStreamIterator (iterator, ctx) {
49
- return function () {
50
- const itr = iterator.apply(this, arguments)
51
- shimmer.wrap(itr, 'next', next => function () {
52
- return next.apply(this, arguments)
49
+ return function (...args) {
50
+ const itr = iterator.apply(this, args)
51
+ shimmer.wrap(itr, 'next', next => function (...args) {
52
+ return next.apply(this, args)
53
53
  .then(res => {
54
54
  const { done, value: chunk } = res
55
55
  onStreamedChunkCh.publish({ ctx, chunk, done })
@@ -169,7 +169,7 @@ function wrapExecute (execute) {
169
169
  const ctx = {
170
170
  operation,
171
171
  args,
172
- docSource: documentSources.get(document),
172
+ docSource: source,
173
173
  source,
174
174
  fields: Object.create(null),
175
175
  abortController: new AbortController(),
@@ -257,13 +257,17 @@ function callInAsyncScope (fn, thisArg, args, abortController, cb) {
257
257
  }
258
258
 
259
259
  function pathToArray (path) {
260
- const flattened = []
261
- let curr = path
262
- while (curr) {
263
- flattened.push(curr.key)
264
- curr = curr.prev
260
+ let length = 0
261
+ for (let curr = path; curr; curr = curr.prev) {
262
+ length += 1
265
263
  }
266
- return flattened.reverse()
264
+
265
+ const flattened = new Array(length)
266
+ let index = length
267
+ for (let curr = path; curr; curr = curr.prev) {
268
+ flattened[--index] = curr.key
269
+ }
270
+ return flattened
267
271
  }
268
272
 
269
273
  function assertField (rootCtx, info, args) {
@@ -295,9 +299,7 @@ function wrapFields (type) {
295
299
 
296
300
  patchedTypes.add(type)
297
301
 
298
- for (const key of Object.keys(type._fields)) {
299
- const field = type._fields[key]
300
-
302
+ for (const field of Object.values(type._fields)) {
301
303
  wrapFieldResolve(field)
302
304
  wrapFieldType(field)
303
305
  }
@@ -321,8 +323,7 @@ function wrapFieldType (field) {
321
323
  }
322
324
 
323
325
  function finishResolvers ({ fields }) {
324
- for (const key of Object.keys(fields).reverse()) {
325
- const field = fields[key]
326
+ for (const field of Object.values(fields)) {
326
327
  field.ctx.finishTime = field.finishTime
327
328
  field.ctx.field = field
328
329
  if (field.error) {
@@ -49,9 +49,9 @@ function wrapHandler (func, name) {
49
49
  }
50
50
 
51
51
  shimmer.wrap(call, 'emit', emit => {
52
- return function () {
52
+ return function (...args) {
53
53
  return emitChannel.runStores(ctx, () => {
54
- return emit.apply(this, arguments)
54
+ return emit.apply(this, args)
55
55
  })
56
56
  }
57
57
  })
@@ -28,12 +28,12 @@ function wrapServer (server) {
28
28
  }
29
29
 
30
30
  function wrapStart (start) {
31
- return shimmer.wrapFunction(start, start => function () {
31
+ return shimmer.wrapFunction(start, start => function (...args) {
32
32
  if (this && typeof this.ext === 'function') {
33
33
  this.ext('onPreResponse', onPreResponse)
34
34
  }
35
35
 
36
- return start.apply(this, arguments)
36
+ return start.apply(this, args)
37
37
  })
38
38
  }
39
39
 
@@ -19,7 +19,7 @@ const { channel } = require('./instrument')
19
19
  *
20
20
  * @param {string} prefix
21
21
  * @param {object} [options]
22
- * @param {boolean} [options.captureResult=false] set `ctx.result` to the callback's first
22
+ * @param {boolean} [options.captureResult] set `ctx.result` to the callback's first
23
23
  * non-error argument before publishing `:finish`. Plugins that tag spans from the call's
24
24
  * return value (e.g. the DNS lookup plugin) rely on this.
25
25
  * @returns {(buildContext: (thisArg: unknown, args: IArguments) => object | undefined) =>
@@ -32,20 +32,20 @@ function createCallbackInstrumentor (prefix, { captureResult = false } = {}) {
32
32
 
33
33
  return function instrument (buildContext) {
34
34
  return function wrap (fn) {
35
- return function () {
36
- const lastIndex = arguments.length - 1
37
- const cb = arguments[lastIndex]
35
+ return function (...args) {
36
+ const lastIndex = args.length - 1
37
+ const cb = args[lastIndex]
38
38
  if (!startCh.hasSubscribers || typeof cb !== 'function') {
39
- return fn.apply(this, arguments)
39
+ return fn.apply(this, args)
40
40
  }
41
41
 
42
- const ctx = buildContext(this, arguments)
42
+ const ctx = buildContext(this, args)
43
43
  if (ctx === undefined) {
44
- return fn.apply(this, arguments)
44
+ return fn.apply(this, args)
45
45
  }
46
46
 
47
47
  return startCh.runStores(ctx, () => {
48
- arguments[lastIndex] = shimmer.wrapFunction(cb, cb => function (error, ...rest) {
48
+ args[lastIndex] = shimmer.wrapFunction(cb, cb => function (error, ...rest) {
49
49
  if (error) {
50
50
  ctx.error = error
51
51
  errorCh.publish(ctx)
@@ -57,7 +57,7 @@ function createCallbackInstrumentor (prefix, { captureResult = false } = {}) {
57
57
  })
58
58
 
59
59
  try {
60
- return fn.apply(this, arguments)
60
+ return fn.apply(this, args)
61
61
  } catch (error) {
62
62
  void error.stack // trigger getting the stack at the original throwing point
63
63
  ctx.error = error
@@ -16,7 +16,10 @@ function getVersion (moduleBaseDir) {
16
16
  return requirePackageJson(moduleBaseDir, /** @type {import('module').Module} */ (module)).version
17
17
  }
18
18
 
19
- return process.version
19
+ // In a packaged Electron binary, built-in modules (like 'electron', 'electron/main') have no
20
+ // moduleBaseDir. Use the Electron version for version checks when available, otherwise fall back
21
+ // to the Node.js version.
22
+ return process.versions?.electron ?? process.version
20
23
  }
21
24
 
22
25
  /**
@@ -68,6 +68,7 @@ module.exports = {
68
68
  cypress: () => require('../cypress'),
69
69
  'dd-trace-api': () => require('../dd-trace-api'),
70
70
  elasticsearch: () => require('../elasticsearch'),
71
+ electron: () => require('../electron'),
71
72
  express: () => require('../express'),
72
73
  'express-mongo-sanitize': () => require('../express-mongo-sanitize'),
73
74
  'express-session': () => require('../express-session'),
@@ -55,9 +55,9 @@ exports.getHooks = function getHooks (names) {
55
55
  * @param {object} args
56
56
  * @param {string} args.name module name
57
57
  * @param {string[]} [args.versions] array of semver range strings
58
- * @param {string} [args.file='index.js'] path to file within package to instrument
58
+ * @param {string} [args.file] path to file within package to instrument. Defaults to 'index.js'.
59
59
  * @param {string} [args.filePattern] pattern to match files within package to instrument
60
- * @param {boolean} [args.patchDefault=true] whether to patch the default export
60
+ * @param {boolean} [args.patchDefault] whether to patch the default export. Defaults to true.
61
61
  * @param {(moduleExports: unknown, version: string, isIitm?: boolean) => unknown} [hook] Patches module exports
62
62
  */
63
63
  exports.addHook = function addHook ({ name, versions, file, filePattern, patchDefault }, hook) {
@@ -0,0 +1,41 @@
1
+ 'use strict'
2
+
3
+ // Side-table mapping a kafkajs producer/consumer to the cluster captured at
4
+ // creation time. The boundary uses it to read `cluster.brokerPool` lazily on
5
+ // first send/consume instead of opening a parallel admin connection. A
6
+ // WeakMap keeps the kafkajs object itself untouched: no Symbol-keyed
7
+ // property to leak through `Reflect.ownKeys`, no string-keyed underscore for
8
+ // user serializers to pick up, and the entry drops as soon as the producer
9
+ // is GC'd.
10
+ const clientToCluster = new WeakMap()
11
+
12
+ /**
13
+ * Shallow-clone each message and its headers so the boundary, kafkajs, and
14
+ * the user never share the same nested objects. With `ensureHeaders` true
15
+ * (header injection enabled) messages without `headers` get an empty object
16
+ * the producer plugin can inject into; with it false (broker rejected
17
+ * headers) the absence of `headers` is preserved so brokers that fail on any
18
+ * header field can recover.
19
+ *
20
+ * @param {Array<unknown>} messages
21
+ * @param {boolean} ensureHeaders
22
+ */
23
+ function cloneMessages (messages, ensureHeaders) {
24
+ const result = new Array(messages.length)
25
+ for (let i = 0; i < messages.length; i++) {
26
+ const message = messages[i]
27
+ if (message === null || typeof message !== 'object') {
28
+ result[i] = message
29
+ } else if (message.headers) {
30
+ result[i] = { ...message, headers: { ...message.headers } }
31
+ } else {
32
+ result[i] = ensureHeaders ? { ...message, headers: {} } : { ...message }
33
+ }
34
+ }
35
+ return result
36
+ }
37
+
38
+ module.exports = {
39
+ clientToCluster,
40
+ cloneMessages,
41
+ }
@@ -21,9 +21,9 @@ exports.wrapThen = function wrapThen (origThen) {
21
21
  function wrapCallback (ar, callback) {
22
22
  if (typeof callback !== 'function') return callback
23
23
 
24
- return function () {
24
+ return function (...args) {
25
25
  return ar.runInAsyncScope(() => {
26
- return callback.apply(this, arguments)
26
+ return callback.apply(this, args)
27
27
  })
28
28
  }
29
29
  }
@@ -56,10 +56,10 @@ function wrapNext (req, route, next) {
56
56
  return shimmer.wrapFunction(
57
57
  next,
58
58
  (next) =>
59
- function () {
59
+ function (...args) {
60
60
  nextChannel.publish({ req, route })
61
61
 
62
- return next.apply(this, arguments)
62
+ return next.apply(this, args)
63
63
  }
64
64
  )
65
65
  }
@@ -107,8 +107,8 @@ function setupResponseInstrumentation (ctx, res) {
107
107
  // For 'readable' events, wrap the read() method
108
108
  if (eventName === 'readable' && !originalRead && !dataListenerAdded && typeof res.read === 'function') {
109
109
  originalRead = res.read
110
- res.read = function () {
111
- const chunk = originalRead.apply(this, arguments)
110
+ res.read = function (...args) {
111
+ const chunk = originalRead.apply(this, args)
112
112
  if (!dataListenerAdded) {
113
113
  dataReadStarted = true
114
114
  collectChunk(chunk)
@@ -189,9 +189,9 @@ function patch (http, methodName) {
189
189
  let callback = args.callback
190
190
 
191
191
  if (callback) {
192
- callback = shimmer.wrapFunction(args.callback, cb => function () {
192
+ callback = shimmer.wrapFunction(args.callback, cb => function (...args) {
193
193
  return asyncStartChannel.runStores(ctx, () => {
194
- return cb.apply(this, arguments)
194
+ return cb.apply(this, args)
195
195
  })
196
196
  })
197
197
  }
@@ -214,9 +214,9 @@ function patch (http, methodName) {
214
214
 
215
215
  // tracked to accurately discern custom request socket timeout
216
216
  let customRequestTimeout = false
217
- req.setTimeout = function () {
217
+ req.setTimeout = function (...args) {
218
218
  customRequestTimeout = true
219
- return setTimeout.apply(this, arguments)
219
+ return setTimeout.apply(this, args)
220
220
  }
221
221
 
222
222
  req.emit = function (eventName, arg) {
@@ -126,9 +126,9 @@ function wrapWriteHead (writeHead) {
126
126
  }
127
127
 
128
128
  function wrapWrite (write) {
129
- return function wrappedWrite () {
129
+ return function wrappedWrite (...args) {
130
130
  if (!startWriteHeadCh.hasSubscribers) {
131
- return write.apply(this, arguments)
131
+ return write.apply(this, args)
132
132
  }
133
133
 
134
134
  const abortController = new AbortController()
@@ -147,7 +147,7 @@ function wrapWrite (write) {
147
147
  return true
148
148
  }
149
149
 
150
- return write.apply(this, arguments)
150
+ return write.apply(this, args)
151
151
  }
152
152
  }
153
153
 
@@ -177,9 +177,9 @@ function wrapSetHeader (setHeader) {
177
177
  }
178
178
 
179
179
  function wrapAppendOrRemoveHeader (originalMethod) {
180
- return function wrappedAppendOrRemoveHeader () {
180
+ return function wrappedAppendOrRemoveHeader (...args) {
181
181
  if (!startSetHeaderCh.hasSubscribers) {
182
- return originalMethod.apply(this, arguments)
182
+ return originalMethod.apply(this, args)
183
183
  }
184
184
 
185
185
  const abortController = new AbortController()
@@ -189,14 +189,14 @@ function wrapAppendOrRemoveHeader (originalMethod) {
189
189
  return this
190
190
  }
191
191
 
192
- return originalMethod.apply(this, arguments)
192
+ return originalMethod.apply(this, args)
193
193
  }
194
194
  }
195
195
 
196
196
  function wrapEnd (end) {
197
- return function wrappedEnd () {
197
+ return function wrappedEnd (...args) {
198
198
  if (!startWriteHeadCh.hasSubscribers) {
199
- return end.apply(this, arguments)
199
+ return end.apply(this, args)
200
200
  }
201
201
 
202
202
  const abortController = new AbortController()
@@ -215,6 +215,6 @@ function wrapEnd (end) {
215
215
  return this
216
216
  }
217
217
 
218
- return end.apply(this, arguments)
218
+ return end.apply(this, args)
219
219
  }
220
220
  }
@@ -10,6 +10,8 @@ const startCh = channel('apm:ioredis:command:start')
10
10
  const finishCh = channel('apm:ioredis:command:finish')
11
11
  const errorCh = channel('apm:ioredis:command:error')
12
12
 
13
+ const connectionOptionsCache = new WeakMap()
14
+
13
15
  function wrapRedis (Redis) {
14
16
  shimmer.wrap(Redis.prototype, 'sendCommand', sendCommand => function (command, stream) {
15
17
  if (!startCh.hasSubscribers) return sendCommand.apply(this, arguments)
@@ -17,21 +19,23 @@ function wrapRedis (Redis) {
17
19
  if (!command || !command.promise) return sendCommand.apply(this, arguments)
18
20
 
19
21
  const options = this.options || {}
20
- const connectionName = options.connectionName
21
- const db = options.db
22
- const connectionOptions = { host: options.host, port: options.port }
23
-
24
- const ctx = { db, command: command.name, args: command.args, connectionOptions, connectionName }
22
+ let connectionOptions = connectionOptionsCache.get(this)
23
+ if (connectionOptions === undefined) {
24
+ connectionOptions = { host: options.host, port: options.port }
25
+ connectionOptionsCache.set(this, connectionOptions)
26
+ }
27
+
28
+ const ctx = {
29
+ db: options.db,
30
+ command: command.name,
31
+ args: command.args,
32
+ connectionOptions,
33
+ connectionName: options.connectionName,
34
+ }
25
35
  return startCh.runStores(ctx, () => {
26
36
  command.promise.then(() => finish(finishCh, errorCh, ctx), err => finish(finishCh, errorCh, ctx, err))
27
37
 
28
- try {
29
- return sendCommand.apply(this, arguments)
30
- } catch (err) {
31
- errorCh.publish(err)
32
-
33
- throw err
34
- }
38
+ return sendCommand.apply(this, arguments)
35
39
  })
36
40
  })
37
41
  return Redis