dd-trace 5.101.0 → 5.102.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 (140) hide show
  1. package/package.json +9 -7
  2. package/packages/datadog-instrumentations/src/aerospike.js +2 -2
  3. package/packages/datadog-instrumentations/src/ai.js +8 -8
  4. package/packages/datadog-instrumentations/src/amqplib.js +6 -7
  5. package/packages/datadog-instrumentations/src/anthropic.js +10 -10
  6. package/packages/datadog-instrumentations/src/apollo-server-core.js +3 -3
  7. package/packages/datadog-instrumentations/src/apollo-server.js +5 -5
  8. package/packages/datadog-instrumentations/src/avsc.js +6 -6
  9. package/packages/datadog-instrumentations/src/aws-sdk.js +151 -67
  10. package/packages/datadog-instrumentations/src/azure-durable-functions.js +8 -8
  11. package/packages/datadog-instrumentations/src/bluebird.js +2 -2
  12. package/packages/datadog-instrumentations/src/body-parser.js +2 -2
  13. package/packages/datadog-instrumentations/src/cassandra-driver.js +7 -7
  14. package/packages/datadog-instrumentations/src/child_process.js +12 -12
  15. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +9 -9
  16. package/packages/datadog-instrumentations/src/connect.js +7 -7
  17. package/packages/datadog-instrumentations/src/cookie-parser.js +4 -4
  18. package/packages/datadog-instrumentations/src/cookie.js +2 -2
  19. package/packages/datadog-instrumentations/src/couchbase.js +16 -30
  20. package/packages/datadog-instrumentations/src/crypto.js +4 -4
  21. package/packages/datadog-instrumentations/src/cucumber.js +77 -16
  22. package/packages/datadog-instrumentations/src/dns.js +0 -3
  23. package/packages/datadog-instrumentations/src/elasticsearch.js +8 -11
  24. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +6 -6
  25. package/packages/datadog-instrumentations/src/express-session.js +4 -4
  26. package/packages/datadog-instrumentations/src/express.js +10 -11
  27. package/packages/datadog-instrumentations/src/fastify.js +2 -2
  28. package/packages/datadog-instrumentations/src/fs.js +14 -14
  29. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +5 -7
  30. package/packages/datadog-instrumentations/src/google-genai.js +4 -4
  31. package/packages/datadog-instrumentations/src/grpc/server.js +2 -2
  32. package/packages/datadog-instrumentations/src/hapi.js +2 -2
  33. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +8 -8
  34. package/packages/datadog-instrumentations/src/helpers/promise.js +2 -2
  35. package/packages/datadog-instrumentations/src/hono.js +2 -2
  36. package/packages/datadog-instrumentations/src/http/client.js +6 -6
  37. package/packages/datadog-instrumentations/src/http/server.js +9 -9
  38. package/packages/datadog-instrumentations/src/jest.js +31 -31
  39. package/packages/datadog-instrumentations/src/kafkajs.js +9 -9
  40. package/packages/datadog-instrumentations/src/knex.js +17 -17
  41. package/packages/datadog-instrumentations/src/koa.js +12 -12
  42. package/packages/datadog-instrumentations/src/ldapjs.js +5 -5
  43. package/packages/datadog-instrumentations/src/light-my-request.js +2 -2
  44. package/packages/datadog-instrumentations/src/limitd-client.js +4 -4
  45. package/packages/datadog-instrumentations/src/lodash.js +4 -4
  46. package/packages/datadog-instrumentations/src/mariadb.js +13 -13
  47. package/packages/datadog-instrumentations/src/memcached.js +2 -2
  48. package/packages/datadog-instrumentations/src/microgateway-core.js +2 -2
  49. package/packages/datadog-instrumentations/src/mocha/common.js +3 -3
  50. package/packages/datadog-instrumentations/src/mocha/main.js +12 -10
  51. package/packages/datadog-instrumentations/src/mocha/utils.js +133 -16
  52. package/packages/datadog-instrumentations/src/mocha/worker.js +7 -5
  53. package/packages/datadog-instrumentations/src/mongodb-core.js +9 -22
  54. package/packages/datadog-instrumentations/src/mongodb.js +5 -5
  55. package/packages/datadog-instrumentations/src/mongoose.js +21 -21
  56. package/packages/datadog-instrumentations/src/mquery.js +5 -5
  57. package/packages/datadog-instrumentations/src/multer.js +4 -4
  58. package/packages/datadog-instrumentations/src/mysql.js +16 -16
  59. package/packages/datadog-instrumentations/src/mysql2.js +4 -4
  60. package/packages/datadog-instrumentations/src/net.js +14 -8
  61. package/packages/datadog-instrumentations/src/nyc.js +5 -5
  62. package/packages/datadog-instrumentations/src/openai.js +19 -19
  63. package/packages/datadog-instrumentations/src/oracledb.js +6 -6
  64. package/packages/datadog-instrumentations/src/passport-utils.js +5 -5
  65. package/packages/datadog-instrumentations/src/pg.js +15 -15
  66. package/packages/datadog-instrumentations/src/pino.js +6 -10
  67. package/packages/datadog-instrumentations/src/playwright.js +20 -15
  68. package/packages/datadog-instrumentations/src/protobufjs.js +16 -16
  69. package/packages/datadog-instrumentations/src/redis.js +1 -2
  70. package/packages/datadog-instrumentations/src/restify.js +2 -2
  71. package/packages/datadog-instrumentations/src/router.js +12 -12
  72. package/packages/datadog-instrumentations/src/stripe.js +12 -12
  73. package/packages/datadog-instrumentations/src/vitest.js +107 -26
  74. package/packages/datadog-instrumentations/src/winston.js +4 -4
  75. package/packages/datadog-instrumentations/src/ws.js +7 -7
  76. package/packages/datadog-plugin-aws-sdk/src/base.js +52 -4
  77. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +19 -12
  78. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +45 -35
  79. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +33 -22
  80. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +12 -13
  81. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +73 -54
  82. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +19 -17
  83. package/packages/datadog-plugin-aws-sdk/src/util.js +22 -0
  84. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +6 -6
  85. package/packages/datadog-plugin-cucumber/src/index.js +4 -0
  86. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +1 -4
  87. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -5
  88. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +3 -1
  89. package/packages/datadog-plugin-http/src/client.js +1 -5
  90. package/packages/datadog-plugin-jest/src/util.js +1 -2
  91. package/packages/datadog-plugin-mocha/src/index.js +4 -0
  92. package/packages/datadog-plugin-mongodb-core/src/index.js +2 -1
  93. package/packages/datadog-plugin-openai/src/tracing.js +12 -23
  94. package/packages/datadog-plugin-playwright/src/index.js +1 -1
  95. package/packages/datadog-plugin-vitest/src/index.js +8 -1
  96. package/packages/datadog-shimmer/src/shimmer.js +7 -1
  97. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  98. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +81 -81
  99. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +2 -2
  100. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +2 -2
  101. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -2
  102. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  103. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -0
  104. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -3
  105. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +83 -48
  106. package/packages/dd-trace/src/appsec/index.js +21 -24
  107. package/packages/dd-trace/src/appsec/reporter.js +3 -1
  108. package/packages/dd-trace/src/appsec/rule_manager.js +4 -2
  109. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +31 -16
  110. package/packages/dd-trace/src/config/git_properties.js +2 -2
  111. package/packages/dd-trace/src/datastreams/index.js +2 -1
  112. package/packages/dd-trace/src/datastreams/processor.js +1 -2
  113. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -0
  114. package/packages/dd-trace/src/encode/0.4.js +757 -232
  115. package/packages/dd-trace/src/encode/0.5.js +13 -7
  116. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -2
  117. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +6 -3
  118. package/packages/dd-trace/src/llmobs/sdk.js +24 -26
  119. package/packages/dd-trace/src/llmobs/span_processor.js +25 -5
  120. package/packages/dd-trace/src/llmobs/util.js +1 -0
  121. package/packages/dd-trace/src/msgpack/chunk.js +6 -3
  122. package/packages/dd-trace/src/openfeature/noop.js +40 -36
  123. package/packages/dd-trace/src/openfeature/writers/exposures.js +33 -52
  124. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +1 -2
  125. package/packages/dd-trace/src/opentelemetry/tracer.js +0 -22
  126. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -11
  127. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  128. package/packages/dd-trace/src/plugins/util/git-cache.js +3 -5
  129. package/packages/dd-trace/src/plugins/util/test.js +19 -7
  130. package/packages/dd-trace/src/plugins/util/url.js +1 -3
  131. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  132. package/packages/dd-trace/src/plugins/util/web.js +5 -7
  133. package/packages/dd-trace/src/profiling/profilers/events.js +3 -23
  134. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -5
  135. package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
  136. package/packages/dd-trace/src/scope.js +3 -10
  137. package/packages/dd-trace/src/serverless.js +1 -4
  138. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +7 -1
  139. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +4 -0
  140. package/packages/dd-trace/src/tracer.js +7 -7
@@ -318,6 +318,7 @@ module.exports = {
318
318
  parseAnnotations,
319
319
  getIsFaultyEarlyFlakeDetection,
320
320
  getEfdRetryCount,
321
+ getMaxEfdRetryCount,
321
322
  TEST_BROWSER_DRIVER,
322
323
  TEST_BROWSER_DRIVER_VERSION,
323
324
  TEST_BROWSER_NAME,
@@ -922,9 +923,7 @@ function getCoveredFilenamesFromCoverage (coverage) {
922
923
  .filter(filename => {
923
924
  const fileCoverage = coverageMap.fileCoverageFor(filename)
924
925
  const lineCoverage = fileCoverage.getLineCoverage()
925
- const isAnyLineExecuted = Object.entries(lineCoverage).some(([, numExecutions]) => !!numExecutions)
926
-
927
- return isAnyLineExecuted
926
+ return Object.entries(lineCoverage).some(([, numExecutions]) => !!numExecutions)
928
927
  })
929
928
  }
930
929
 
@@ -1045,6 +1044,22 @@ function getEfdRetryCount (durationMs, slowTestRetries) {
1045
1044
  return 0 // ≥ 5 min — abort
1046
1045
  }
1047
1046
 
1047
+ /**
1048
+ * Returns the maximum retry count configured by the backend for EFD.
1049
+ *
1050
+ * @param {Record<string, number>} slowTestRetries e.g. { '5s': 10, '10s': 5, '30s': 3, '5m': 2 }
1051
+ * @returns {number}
1052
+ */
1053
+ function getMaxEfdRetryCount (slowTestRetries) {
1054
+ let maxRetries = 0
1055
+ for (const retryCount of Object.values(slowTestRetries || {})) {
1056
+ if (retryCount > maxRetries) {
1057
+ maxRetries = retryCount
1058
+ }
1059
+ }
1060
+ return maxRetries
1061
+ }
1062
+
1048
1063
  function getIsFaultyEarlyFlakeDetection (projectSuites, testsBySuiteName, faultyThresholdPercentage) {
1049
1064
  let newSuites = 0
1050
1065
  for (const suite of projectSuites) {
@@ -1276,10 +1291,7 @@ function getPullRequestBaseBranch (pullRequestBaseBranch) {
1276
1291
  let bestScore = Infinity
1277
1292
  for (const branch of Object.keys(metrics)) {
1278
1293
  const score = metrics[branch].ahead
1279
- if (score < bestScore) {
1280
- bestScore = score
1281
- bestBranch = branch
1282
- } else if (score === bestScore && isDefaultBranch(branch)) {
1294
+ if (score < bestScore || score === bestScore && isDefaultBranch(branch)) {
1283
1295
  bestScore = score
1284
1296
  bestBranch = branch
1285
1297
  }
@@ -108,11 +108,9 @@ function calculateHttpEndpoint (url) {
108
108
  return element
109
109
  })
110
110
 
111
- const endpoint = normalizedElements.length > 0
111
+ return normalizedElements.length > 0
112
112
  ? '/' + normalizedElements.join('/')
113
113
  : '/'
114
-
115
- return endpoint
116
114
  }
117
115
 
118
116
  function filterSensitiveInfoFromRepository (repositoryUrl) {
@@ -36,7 +36,7 @@ function removeEmptyValues (tagsAndValues) {
36
36
  // https://github.com/jonschlinkert/is-git-url/blob/396965ffabf2f46656c8af4c47bef1d69f09292e/index.js#L9C15-L9C87
37
37
  // The `.git` suffix is optional in this version
38
38
  function validateGitRepositoryUrl (repoUrl) {
39
- return /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\/?|#[-\d\w._]+?)$/.test(repoUrl)
39
+ return /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\/?|#[-\w.]+?)$/.test(repoUrl)
40
40
  }
41
41
 
42
42
  function validateGitCommitSha (gitCommitSha) {
@@ -217,9 +217,7 @@ const web = {
217
217
  }
218
218
  }
219
219
 
220
- const span = startSpanHelper(tracer, name, { childOf }, traceCtx, config)
221
-
222
- return span
220
+ return startSpanHelper(tracer, name, { childOf }, traceCtx, config)
223
221
  },
224
222
 
225
223
  // Validate a request's status code and then add error tags if necessary
@@ -309,10 +307,10 @@ const web = {
309
307
  return contexts.get(req)
310
308
  },
311
309
  wrapRes (context, req, res, end) {
312
- return function () {
310
+ return function (...args) {
313
311
  web.finishAll(context)
314
312
 
315
- return end.apply(res, arguments)
313
+ return end.apply(res, args)
316
314
  }
317
315
  },
318
316
  wrapEnd (context) {
@@ -330,8 +328,8 @@ const web = {
330
328
  return ends.get(this)
331
329
  },
332
330
  set (value) {
333
- ends.set(this, function () {
334
- return storage('legacy').run(context.store, value, ...arguments)
331
+ ends.set(this, function (...args) {
332
+ return storage('legacy').run(context.store, value, ...args)
335
333
  })
336
334
  },
337
335
  })
@@ -174,7 +174,7 @@ class NetDecorator {
174
174
  }
175
175
  }
176
176
 
177
- class FilesystemDecorator {
177
+ class KeyValueDecorator {
178
178
  constructor (stringTable) {
179
179
  this.stringTable = stringTable
180
180
  }
@@ -205,31 +205,11 @@ class ZlibDecorator {
205
205
  }
206
206
  }
207
207
 
208
- class CryptoDecorator {
209
- constructor (stringTable) {
210
- this.stringTable = stringTable
211
- }
212
-
213
- decorateSample (sampleInput, item) {
214
- const labels = sampleInput.label
215
- const stringTable = this.stringTable
216
- for (const [key, value] of Object.entries(item.detail)) {
217
- switch (typeof value) {
218
- case 'string':
219
- labels.push(labelFromStrStr(stringTable, key, value))
220
- break
221
- case 'number':
222
- labels.push(new Label({ key: stringTable.dedup(key), num: value }))
223
- }
224
- }
225
- }
226
- }
227
-
228
208
  // Keys correspond to PerformanceEntry.entryType, values are constructor
229
209
  // functions for type-specific decorators.
230
210
  const decoratorTypes = {
231
- crypto: CryptoDecorator,
232
- fs: FilesystemDecorator,
211
+ crypto: KeyValueDecorator,
212
+ fs: KeyValueDecorator,
233
213
  dns: DNSDecorator,
234
214
  gc: GCDecorator,
235
215
  net: NetDecorator,
@@ -317,11 +317,10 @@ class NativeWallProfiler {
317
317
  }
318
318
 
319
319
  #setNewContext () {
320
- this.#pprof.time.setContext(
321
- this._currentContext = {
322
- ref: {},
323
- }
324
- )
320
+ this._currentContext = {
321
+ ref: {},
322
+ }
323
+ this.#pprof.time.setContext(this._currentContext)
325
324
  }
326
325
 
327
326
  #spanFinished (span) {
@@ -29,8 +29,8 @@ module.exports = {
29
29
 
30
30
  stop () {
31
31
  runtimeMetrics.stop()
32
-
33
- Object.setPrototypeOf(module.exports, runtimeMetrics = noop)
32
+ runtimeMetrics = noop
33
+ Object.setPrototypeOf(module.exports, noop)
34
34
  },
35
35
  }
36
36
 
@@ -3,14 +3,11 @@
3
3
  const { storage } = require('../../datadog-core')
4
4
 
5
5
  // TODO: refactor bind to use shimmer once the new internal tracer lands
6
-
7
- const originals = new WeakMap()
8
-
9
6
  class Scope {
10
7
  active () {
11
8
  const store = storage('legacy').getStore()
12
9
 
13
- return (store && store.span) || null
10
+ return store?.span ?? null
14
11
  }
15
12
 
16
13
  activate (span, callback) {
@@ -40,15 +37,11 @@ class Scope {
40
37
  const scope = this
41
38
  const spanOrActive = this._spanOrActive(span)
42
39
 
43
- const bound = function () {
40
+ return function (...args) {
44
41
  return scope.activate(spanOrActive, () => {
45
- return fn.apply(this, arguments)
42
+ return fn.apply(this, args)
46
43
  })
47
44
  }
48
-
49
- originals.set(bound, fn)
50
-
51
- return bound
52
45
  }
53
46
 
54
47
  _spanOrActive (span) {
@@ -24,11 +24,8 @@ function enableGCPPubSubPushSubscription () {
24
24
  }
25
25
 
26
26
  function getIsAzureFunction () {
27
- const isAzureFunction =
28
- getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
27
+ return getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
29
28
  getEnvironmentVariable('FUNCTIONS_WORKER_RUNTIME') !== undefined
30
-
31
- return isAzureFunction
32
29
  }
33
30
 
34
31
  function getIsFlexConsumptionAzureFunction () {
@@ -81,7 +81,13 @@ const messaging = {
81
81
  },
82
82
  'google-cloud-pubsub': {
83
83
  opName: () => 'pubsub.receive',
84
- serviceName: identityService,
84
+ serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
85
+ serviceSource: integrationSource('google-cloud-pubsub'),
86
+ },
87
+ 'google-cloud-pubsub-push-subscription': {
88
+ opName: () => 'pubsub.receive',
89
+ serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
90
+ serviceSource: integrationSource('google-cloud-pubsub'),
85
91
  },
86
92
  kafkajs: {
87
93
  opName: () => 'kafka.consume',
@@ -57,6 +57,10 @@ const messaging = {
57
57
  opName: () => 'gcp.pubsub.process',
58
58
  serviceName: identityService,
59
59
  },
60
+ 'google-cloud-pubsub-push-subscription': {
61
+ opName: () => 'gcp.pubsub.process',
62
+ serviceName: identityService,
63
+ },
60
64
  kafkajs: {
61
65
  opName: () => 'kafka.process',
62
66
  serviceName: identityService,
@@ -100,27 +100,27 @@ class DatadogTracer extends Tracer {
100
100
  wrap (name, options, fn) {
101
101
  const tracer = this
102
102
 
103
- return function () {
103
+ return function (...args) {
104
104
  let optionsObj = options
105
105
  if (typeof optionsObj === 'function' && typeof fn === 'function') {
106
- optionsObj = optionsObj.apply(this, arguments)
106
+ optionsObj = optionsObj.apply(this, args)
107
107
  }
108
108
 
109
- const lastArgId = arguments.length - 1
110
- const cb = arguments[lastArgId]
109
+ const lastArgId = args.length - 1
110
+ const cb = args[lastArgId]
111
111
 
112
112
  if (typeof cb === 'function') {
113
113
  const scopeBoundCb = tracer.scope().bind(cb)
114
114
  return tracer.trace(name, optionsObj, (span, done) => {
115
- arguments[lastArgId] = function (err) {
115
+ args[lastArgId] = function (err) {
116
116
  done(err)
117
117
  return scopeBoundCb.apply(this, arguments)
118
118
  }
119
119
 
120
- return fn.apply(this, arguments)
120
+ return fn.apply(this, args)
121
121
  })
122
122
  }
123
- return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))
123
+ return tracer.trace(name, optionsObj, () => fn.apply(this, args))
124
124
  }
125
125
  }
126
126