dd-trace 5.8.0 → 5.10.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 (109) hide show
  1. package/LICENSE-3rdparty.csv +0 -1
  2. package/ci/init.js +3 -3
  3. package/package.json +5 -6
  4. package/packages/datadog-esbuild/index.js +2 -2
  5. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  6. package/packages/datadog-instrumentations/src/apollo.js +5 -3
  7. package/packages/datadog-instrumentations/src/aws-sdk.js +4 -1
  8. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  9. package/packages/datadog-instrumentations/src/cucumber.js +6 -2
  10. package/packages/datadog-instrumentations/src/fs.js +0 -1
  11. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +1 -1
  12. package/packages/datadog-instrumentations/src/helpers/hooks.js +56 -56
  13. package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
  14. package/packages/datadog-instrumentations/src/http/client.js +1 -0
  15. package/packages/datadog-instrumentations/src/jest.js +94 -15
  16. package/packages/datadog-instrumentations/src/kafkajs.js +6 -8
  17. package/packages/datadog-instrumentations/src/ldapjs.js +2 -1
  18. package/packages/datadog-instrumentations/src/mocha.js +1 -1
  19. package/packages/datadog-instrumentations/src/mongodb-core.js +3 -3
  20. package/packages/datadog-instrumentations/src/net.js +1 -1
  21. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  22. package/packages/datadog-instrumentations/src/passport-utils.js +1 -0
  23. package/packages/datadog-instrumentations/src/playwright.js +8 -2
  24. package/packages/datadog-instrumentations/src/rhea.js +5 -2
  25. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  26. package/packages/datadog-plugin-apollo/src/gateway/fetch.js +1 -1
  27. package/packages/datadog-plugin-apollo/src/gateway/plan.js +0 -1
  28. package/packages/datadog-plugin-apollo/src/gateway/request.js +2 -17
  29. package/packages/datadog-plugin-apollo/src/gateway/validate.js +6 -2
  30. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -3
  31. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
  32. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +2 -2
  33. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -1
  34. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -1
  35. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  36. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
  37. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
  38. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  39. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -2
  40. package/packages/datadog-plugin-child_process/src/index.js +1 -1
  41. package/packages/datadog-plugin-couchbase/src/index.js +2 -1
  42. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +1 -0
  43. package/packages/datadog-plugin-fetch/src/index.js +1 -1
  44. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  45. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  46. package/packages/datadog-plugin-grpc/src/server.js +2 -2
  47. package/packages/datadog-plugin-http/src/client.js +2 -2
  48. package/packages/datadog-plugin-http2/src/client.js +4 -3
  49. package/packages/datadog-plugin-jest/src/index.js +1 -0
  50. package/packages/datadog-plugin-kafkajs/src/consumer.js +1 -1
  51. package/packages/datadog-plugin-kafkajs/src/producer.js +1 -1
  52. package/packages/datadog-plugin-next/src/index.js +1 -1
  53. package/packages/datadog-plugin-openai/src/index.js +4 -4
  54. package/packages/datadog-plugin-playwright/src/index.js +7 -2
  55. package/packages/datadog-plugin-rhea/src/consumer.js +1 -1
  56. package/packages/datadog-plugin-rhea/src/producer.js +1 -1
  57. package/packages/datadog-plugin-router/src/index.js +1 -1
  58. package/packages/datadog-plugin-tedious/src/index.js +1 -1
  59. package/packages/dd-trace/src/appsec/blocking.js +1 -1
  60. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +17 -17
  61. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -0
  62. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +132 -132
  63. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +1 -0
  64. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +1 -1
  65. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +6 -2
  66. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +2 -1
  67. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +3 -3
  68. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +4 -4
  69. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  70. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +27 -18
  71. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +1 -1
  72. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +1 -1
  73. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +7 -4
  74. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  75. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +9 -3
  76. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -1
  77. package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +1 -0
  78. package/packages/dd-trace/src/config.js +16 -14
  79. package/packages/dd-trace/src/datastreams/pathway.js +1 -1
  80. package/packages/dd-trace/src/datastreams/processor.js +15 -15
  81. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  82. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  83. package/packages/dd-trace/src/exporters/common/request.js +1 -0
  84. package/packages/dd-trace/src/exporters/span-stats/writer.js +0 -1
  85. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  86. package/packages/dd-trace/src/opentelemetry/span.js +2 -0
  87. package/packages/dd-trace/src/opentracing/propagation/text_map.js +1 -1
  88. package/packages/dd-trace/src/opentracing/span.js +1 -1
  89. package/packages/dd-trace/src/plugins/apollo.js +3 -1
  90. package/packages/dd-trace/src/plugins/ci_plugin.js +2 -1
  91. package/packages/dd-trace/src/plugins/composite.js +3 -4
  92. package/packages/dd-trace/src/plugins/database.js +1 -0
  93. package/packages/dd-trace/src/plugins/index.js +43 -43
  94. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  95. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  96. package/packages/dd-trace/src/plugins/util/git.js +33 -11
  97. package/packages/dd-trace/src/plugins/util/test.js +2 -1
  98. package/packages/dd-trace/src/plugins/util/web.js +4 -4
  99. package/packages/dd-trace/src/profiling/config.js +1 -1
  100. package/packages/dd-trace/src/profiling/loggers/console.js +1 -1
  101. package/packages/dd-trace/src/runtime_metrics.js +8 -5
  102. package/packages/dd-trace/src/serverless.js +3 -2
  103. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +0 -1
  104. package/packages/dd-trace/src/span_processor.js +2 -2
  105. package/packages/dd-trace/src/span_stats.js +1 -1
  106. package/packages/dd-trace/src/telemetry/dependencies.js +4 -5
  107. package/packages/dd-trace/src/telemetry/index.js +12 -13
  108. package/packages/dd-trace/src/telemetry/send-data.js +0 -1
  109. package/packages/dd-trace/src/util.js +7 -7
@@ -68,7 +68,7 @@ module.exports = function extractSensitiveRanges (evidence) {
68
68
  try {
69
69
  let pattern = patterns[evidence.dialect]
70
70
  if (!pattern) {
71
- pattern = patterns['ANSI']
71
+ pattern = patterns.ANSI
72
72
  }
73
73
  pattern.lastIndex = 0
74
74
  const tokens = []
@@ -13,15 +13,18 @@ const KEYS_REGEX_WITHOUT_SENSITIVE_RANGES = new RegExp(`"(${STRINGIFY_RANGE_KEY}
13
13
 
14
14
  const sensitiveValueRegex = new RegExp(DEFAULT_IAST_REDACTION_VALUE_PATTERN, 'gmi')
15
15
 
16
- function iterateObject (target, fn, levelKeys = [], depth = 50) {
16
+ function iterateObject (target, fn, levelKeys = [], depth = 10, visited = new Set()) {
17
17
  Object.keys(target).forEach((key) => {
18
18
  const nextLevelKeys = [...levelKeys, key]
19
19
  const val = target[key]
20
20
 
21
- fn(val, nextLevelKeys, target, key)
21
+ if (typeof val !== 'object' || !visited.has(val)) {
22
+ visited.add(val)
23
+ fn(val, nextLevelKeys, target, key)
22
24
 
23
- if (val !== null && typeof val === 'object' && depth > 0) {
24
- iterateObject(val, fn, nextLevelKeys, depth - 1)
25
+ if (val !== null && typeof val === 'object' && depth > 0) {
26
+ iterateObject(val, fn, nextLevelKeys, depth - 1, visited)
27
+ }
25
28
  }
26
29
  })
27
30
  }
@@ -39,12 +39,12 @@ class WAFContextWrapper {
39
39
  }
40
40
 
41
41
  if (Object.keys(inputs).length) {
42
- payload['persistent'] = inputs
42
+ payload.persistent = inputs
43
43
  payloadHasData = true
44
44
  }
45
45
 
46
46
  if (ephemeral && Object.keys(ephemeral).length) {
47
- payload['ephemeral'] = ephemeral
47
+ payload.ephemeral = ephemeral
48
48
  payloadHasData = true
49
49
  }
50
50
 
@@ -1,4 +1,3 @@
1
-
2
1
  const fs = require('fs')
3
2
  const path = require('path')
4
3
 
@@ -115,6 +114,10 @@ function getCommitsToUpload ({ url, repositoryUrl, latestCommits, isEvpProxy, ev
115
114
 
116
115
  const commitsToUpload = getCommitsRevList(alreadySeenCommits, commitsToInclude)
117
116
 
117
+ if (commitsToUpload === null) {
118
+ return callback(new Error('git rev-list failed'))
119
+ }
120
+
118
121
  callback(null, commitsToUpload)
119
122
  })
120
123
  }
@@ -253,9 +256,8 @@ function sendGitMetadata (url, { isEvpProxy, evpProxyPrefix }, configRepositoryU
253
256
  return callback(new Error('Repository URL is empty'))
254
257
  }
255
258
 
256
- const latestCommits = getLatestCommits()
259
+ let latestCommits = getLatestCommits()
257
260
  log.debug(`There were ${latestCommits.length} commits since last month.`)
258
- const [headCommit] = latestCommits
259
261
 
260
262
  const getOnFinishGetCommitsToUpload = (hasCheckedShallow) => (err, commitsToUpload) => {
261
263
  if (err) {
@@ -269,6 +271,7 @@ function sendGitMetadata (url, { isEvpProxy, evpProxyPrefix }, configRepositoryU
269
271
 
270
272
  // If it has already unshallowed or the clone is not shallow, we move on
271
273
  if (hasCheckedShallow || !isShallowRepository()) {
274
+ const [headCommit] = latestCommits
272
275
  return generateAndUploadPackFiles({
273
276
  url,
274
277
  isEvpProxy,
@@ -281,6 +284,9 @@ function sendGitMetadata (url, { isEvpProxy, evpProxyPrefix }, configRepositoryU
281
284
  // Otherwise we unshallow and get commits to upload again
282
285
  log.debug('It is shallow clone, unshallowing...')
283
286
  unshallowRepository()
287
+
288
+ // The latest commits change after unshallowing
289
+ latestCommits = getLatestCommits()
284
290
  getCommitsToUpload({
285
291
  url,
286
292
  repositoryUrl,
@@ -102,7 +102,8 @@ function getSkippableSuites ({
102
102
  const { meta: { correlation_id: correlationId } } = parsedResponse
103
103
  incrementCountMetric(
104
104
  testLevel === 'test'
105
- ? TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_TESTS : TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_SUITES,
105
+ ? TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_TESTS
106
+ : TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_SUITES,
106
107
  {},
107
108
  skippableSuites.length
108
109
  )
@@ -10,6 +10,7 @@ class TestApiManualPlugin extends CiPlugin {
10
10
  static get id () {
11
11
  return 'test-api-manual'
12
12
  }
13
+
13
14
  constructor (...args) {
14
15
  super(...args)
15
16
  this.sourceRoot = process.cwd()
@@ -23,13 +23,11 @@ const fromEntries = Object.fromEntries || (entries =>
23
23
 
24
24
  // eslint-disable-next-line max-len
25
25
  const qsRegex = '(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:(?:\\s|%20)*(?:=|%3D)[^&]+|(?:"|%22)(?:\\s|%20)*(?::|%3A)(?:\\s|%20)*(?:"|%22)(?:%2[^2]|%[^2]|[^"%])+(?:"|%22))|bearer(?:\\s|%20)+[a-z0-9\\._\\-]+|token(?::|%3A)[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L](?:[\\w=-]|%3D)+\\.ey[I-L](?:[\\w=-]|%3D)+(?:\\.(?:[\\w.+\\/=-]|%3D|%2F|%2B)+)?|[\\-]{5}BEGIN(?:[a-z\\s]|%20)+PRIVATE(?:\\s|%20)KEY[\\-]{5}[^\\-]+[\\-]{5}END(?:[a-z\\s]|%20)+PRIVATE(?:\\s|%20)KEY|ssh-rsa(?:\\s|%20)*(?:[a-z0-9\\/\\.+]|%2F|%5C|%2B){100,}'
26
- const defaultWafObfuscatorKeyRegex = `(?i)(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?\
27
- |public_?)key)|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization`
28
- const defaultWafObfuscatorValueRegex =
29
- `(?i)(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|to\
30
- ken|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:\\s*=[^;]|"\\s*:\\s*"[^"]+")|bearer\
31
- \\s+[a-z0-9\\._\\-]+|token:[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\\w=-]+\\.ey[I-L][\\w=-]+(?:\\.[\\w.+\\/=-]+)?\
32
- |[\\-]{5}BEGIN[a-z\\s]+PRIVATE\\sKEY[\\-]{5}[^\\-]+[\\-]{5}END[a-z\\s]+PRIVATE\\sKEY|ssh-rsa\\s*[a-z0-9\\/\\.+]{100,}`
26
+ // eslint-disable-next-line max-len
27
+ const defaultWafObfuscatorKeyRegex = '(?i)(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?)key)|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization'
28
+ // eslint-disable-next-line max-len
29
+ const defaultWafObfuscatorValueRegex = '(?i)(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:\\s*=[^;]|"\\s*:\\s*"[^"]+")|bearer\\s+[a-z0-9\\._\\-]+|token:[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\\w=-]+\\.ey[I-L][\\w=-]+(?:\\.[\\w.+\\/=-]+)?|[\\-]{5}BEGIN[a-z\\s]+PRIVATE\\sKEY[\\-]{5}[^\\-]+[\\-]{5}END[a-z\\s]+PRIVATE\\sKEY|ssh-rsa\\s*[a-z0-9\\/\\.+]{100,}'
30
+ const runtimeId = uuid()
33
31
 
34
32
  function maybeFile (filepath) {
35
33
  if (!filepath) return
@@ -132,9 +130,11 @@ class Config {
132
130
 
133
131
  const DD_SERVICE_MAPPING = coalesce(
134
132
  options.serviceMapping,
135
- process.env.DD_SERVICE_MAPPING ? fromEntries(
136
- process.env.DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
137
- ) : {}
133
+ process.env.DD_SERVICE_MAPPING
134
+ ? fromEntries(
135
+ process.env.DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
136
+ )
137
+ : {}
138
138
  )
139
139
 
140
140
  const DD_API_KEY = coalesce(
@@ -292,7 +292,7 @@ class Config {
292
292
  service: this.service,
293
293
  env: this.env,
294
294
  version: this.version,
295
- 'runtime-id': uuid()
295
+ 'runtime-id': runtimeId
296
296
  })
297
297
 
298
298
  if (this.isCiVisibility) {
@@ -704,7 +704,7 @@ class Config {
704
704
  _isCiVisibility () {
705
705
  return coalesce(
706
706
  this.options.isCiVisibility,
707
- this._defaults['isCiVisibility']
707
+ this._defaults.isCiVisibility
708
708
  )
709
709
  }
710
710
 
@@ -717,7 +717,8 @@ class Config {
717
717
 
718
718
  _getHostname () {
719
719
  const DD_CIVISIBILITY_AGENTLESS_URL = process.env.DD_CIVISIBILITY_AGENTLESS_URL
720
- const url = DD_CIVISIBILITY_AGENTLESS_URL ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
720
+ const url = DD_CIVISIBILITY_AGENTLESS_URL
721
+ ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
721
722
  : getAgentUrl(this._getTraceAgentUrl(), this.options)
722
723
  const DD_AGENT_HOST = coalesce(
723
724
  this.options.hostname,
@@ -808,7 +809,7 @@ class Config {
808
809
  }
809
810
  this._setString(calc, 'dogstatsd.hostname', this._getHostname())
810
811
  this._setBoolean(calc, 'isGitUploadEnabled',
811
- calc['isIntelligentTestRunnerEnabled'] && !isFalse(this._isCiVisibilityGitUploadEnabled()))
812
+ calc.isIntelligentTestRunnerEnabled && !isFalse(this._isCiVisibilityGitUploadEnabled()))
812
813
  this._setBoolean(calc, 'spanComputePeerService', this._getSpanComputePeerService())
813
814
  this._setBoolean(calc, 'stats.enabled', this._isTraceStatsComputationEnabled())
814
815
  }
@@ -823,6 +824,7 @@ class Config {
823
824
  : undefined
824
825
 
825
826
  tagger.add(tags, options.tracing_tags)
827
+ if (Object.keys(tags).length) tags['runtime-id'] = runtimeId
826
828
 
827
829
  this._setUnit(opts, 'sampleRate', options.tracing_sampling_rate)
828
830
  this._setBoolean(opts, 'logInjection', options.log_injection_enabled)
@@ -22,7 +22,7 @@ function computeHash (service, env, edgeTags, parentHash) {
22
22
  return cache.get(key)
23
23
  }
24
24
  const currentHash = shaHash(`${service}${env}` + edgeTags.join(''))
25
- const buf = Buffer.concat([ currentHash, parentHash ], 16)
25
+ const buf = Buffer.concat([currentHash, parentHash], 16)
26
26
  const val = shaHash(buf.toString())
27
27
  cache.set(key, val)
28
28
  return val
@@ -273,12 +273,12 @@ class DataStreamsProcessor {
273
273
  const edgeLatencyNs = nowNs - edgeStartNs
274
274
  const pathwayLatencyNs = nowNs - pathwayStartNs
275
275
  const dataStreamsContext = {
276
- hash: hash,
277
- edgeStartNs: edgeStartNs,
278
- pathwayStartNs: pathwayStartNs,
276
+ hash,
277
+ edgeStartNs,
278
+ pathwayStartNs,
279
279
  previousDirection: direction,
280
- closestOppositeDirectionHash: closestOppositeDirectionHash,
281
- closestOppositeDirectionEdgeStart: closestOppositeDirectionEdgeStart
280
+ closestOppositeDirectionHash,
281
+ closestOppositeDirectionEdgeStart
282
282
  }
283
283
  if (direction === 'direction:out') {
284
284
  // Add the header for this now, as the callee doesn't have access to context when producing
@@ -289,12 +289,12 @@ class DataStreamsProcessor {
289
289
  }
290
290
  const checkpoint = {
291
291
  currentTimestamp: nowNs,
292
- parentHash: parentHash,
293
- hash: hash,
294
- edgeTags: edgeTags,
295
- edgeLatencyNs: edgeLatencyNs,
296
- pathwayLatencyNs: pathwayLatencyNs,
297
- payloadSize: payloadSize
292
+ parentHash,
293
+ hash,
294
+ edgeTags,
295
+ edgeLatencyNs,
296
+ pathwayLatencyNs,
297
+ payloadSize
298
298
  }
299
299
  this.recordCheckpoint(checkpoint, span)
300
300
  return dataStreamsContext
@@ -320,7 +320,7 @@ class DataStreamsProcessor {
320
320
  // TimeBuckets
321
321
  const serializedBuckets = []
322
322
 
323
- for (const [ timeNs, bucket ] of this.buckets.entries()) {
323
+ for (const [timeNs, bucket] of this.buckets.entries()) {
324
324
  const points = []
325
325
 
326
326
  // bucket: StatsBucket
@@ -354,9 +354,9 @@ class DataStreamsProcessor {
354
354
  }
355
355
 
356
356
  module.exports = {
357
- DataStreamsProcessor: DataStreamsProcessor,
358
- StatsPoint: StatsPoint,
359
- StatsBucket: StatsBucket,
357
+ DataStreamsProcessor,
358
+ StatsPoint,
359
+ StatsBucket,
360
360
  Backlog,
361
361
  TimeBuckets,
362
362
  getMessageSize,
@@ -328,8 +328,8 @@ class AgentlessCiVisibilityEncoder extends AgentEncoder {
328
328
  version: ENCODING_VERSION,
329
329
  metadata: {
330
330
  '*': {
331
- 'language': 'javascript',
332
- 'library_version': ddTraceVersion
331
+ language: 'javascript',
332
+ library_version: ddTraceVersion
333
333
  }
334
334
  },
335
335
  events: []
@@ -108,7 +108,7 @@ class CoverageCIVisibilityEncoder extends AgentEncoder {
108
108
  'coverage1',
109
109
  buffer,
110
110
  {
111
- filename: `coverage1.msgpack`,
111
+ filename: 'coverage1.msgpack',
112
112
  contentType: 'application/msgpack'
113
113
  }
114
114
  )
@@ -6,6 +6,7 @@
6
6
  const { Readable } = require('stream')
7
7
  const http = require('http')
8
8
  const https = require('https')
9
+ // eslint-disable-next-line n/no-deprecated-api
9
10
  const { parse: urlParse } = require('url')
10
11
  const zlib = require('zlib')
11
12
 
@@ -1,4 +1,3 @@
1
-
2
1
  const { SpanStatsEncoder } = require('../../encode/span-stats')
3
2
 
4
3
  const pkg = require('../../../../../package.json')
@@ -51,11 +51,11 @@ class ExternalLogger {
51
51
 
52
52
  const payload = {
53
53
  ...log,
54
- 'timestamp': Date.now(),
55
- 'hostname': log.hostname || this.hostname,
56
- 'ddsource': log.ddsource || this.ddsource,
57
- 'service': log.service || this.service,
58
- 'ddtags': logTags || undefined
54
+ timestamp: Date.now(),
55
+ hostname: log.hostname || this.hostname,
56
+ ddsource: log.ddsource || this.ddsource,
57
+ service: log.service || this.service,
58
+ ddtags: logTags || undefined
59
59
  }
60
60
 
61
61
  this.enqueue(payload)
@@ -161,9 +161,11 @@ class Span {
161
161
  get resource () {
162
162
  return this._parentTracer.resource
163
163
  }
164
+
164
165
  get instrumentationLibrary () {
165
166
  return this._parentTracer.instrumentationLibrary
166
167
  }
168
+
167
169
  get _spanProcessor () {
168
170
  return this._parentTracer.getActiveSpanProcessor()
169
171
  }
@@ -321,7 +321,7 @@ class TextMapPropagator {
321
321
  }
322
322
  const matches = headerValue.trim().match(traceparentExpr)
323
323
  if (matches.length) {
324
- const [ version, traceId, spanId, flags, tail ] = matches.slice(1)
324
+ const [version, traceId, spanId, flags, tail] = matches.slice(1)
325
325
  const traceparent = { version }
326
326
  const tracestate = TraceState.fromString(carrier.tracestate)
327
327
  if (invalidSegment.test(traceId)) return null
@@ -210,7 +210,7 @@ class DatadogSpan {
210
210
  // Wrap the value as a string if it's not already a string
211
211
  sanitizedAttributes[key] = typeof maybeScalar === 'string' ? maybeScalar : String(maybeScalar)
212
212
  } else {
213
- log.warn(`Dropping span link attribute. It is not of an allowed type`)
213
+ log.warn('Dropping span link attribute. It is not of an allowed type')
214
214
  }
215
215
  }
216
216
  }
@@ -25,7 +25,9 @@ class ApolloBasePlugin extends TracingPlugin {
25
25
  }
26
26
 
27
27
  end (ctx) {
28
- ctx?.currentStore?.span.finish()
28
+ // Only synchronous operations would have `result` or `error` on `end`.
29
+ if (!ctx.hasOwnProperty('result') && !ctx.hasOwnProperty('error')) return
30
+ ctx?.currentStore?.span?.finish()
29
31
  }
30
32
 
31
33
  asyncStart (ctx) {
@@ -42,7 +42,7 @@ module.exports = class CiPlugin extends Plugin {
42
42
  }
43
43
  this.tracer._exporter.getLibraryConfiguration(this.testConfiguration, (err, libraryConfig) => {
44
44
  if (err) {
45
- log.error(`Intelligent Test Runner configuration could not be fetched. ${err.message}`)
45
+ log.error(`Library configuration could not be fetched. ${err.message}`)
46
46
  } else {
47
47
  this.libraryConfig = libraryConfig
48
48
  }
@@ -123,6 +123,7 @@ module.exports = class CiPlugin extends Plugin {
123
123
  this.tracer._exporter.getKnownTests(this.testConfiguration, (err, knownTests) => {
124
124
  if (err) {
125
125
  log.error(`Known tests could not be fetched. ${err.message}`)
126
+ this.libraryConfig.isEarlyFlakeDetectionEnabled = false
126
127
  }
127
128
  onDone({ err, knownTests })
128
129
  })
@@ -14,10 +14,9 @@ class CompositePlugin extends Plugin {
14
14
  configure (config) {
15
15
  super.configure(config)
16
16
  for (const name in this.constructor.plugins) {
17
- const pluginConfig = config[name] === false ? false : {
18
- ...config,
19
- ...config[name]
20
- }
17
+ const pluginConfig = config[name] === false
18
+ ? false
19
+ : { ...config, ...config[name] }
21
20
 
22
21
  this[name].configure(pluginConfig)
23
22
  }
@@ -20,6 +20,7 @@ class DatabasePlugin extends StoragePlugin {
20
20
  encodedDdpv: ''
21
21
  }
22
22
  }
23
+
23
24
  encodingServiceTags (serviceTag, encodeATag, spanConfig) {
24
25
  if (serviceTag !== spanConfig) {
25
26
  this.serviceTags[serviceTag] = spanConfig
@@ -18,66 +18,66 @@ module.exports = {
18
18
  get '@opensearch-project/opensearch' () { return require('../../../datadog-plugin-opensearch/src') },
19
19
  get '@redis/client' () { return require('../../../datadog-plugin-redis/src') },
20
20
  get '@smithy/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
21
- get 'aerospike' () { return require('../../../datadog-plugin-aerospike/src') },
22
- get 'amqp10' () { return require('../../../datadog-plugin-amqp10/src') },
23
- get 'amqplib' () { return require('../../../datadog-plugin-amqplib/src') },
21
+ get aerospike () { return require('../../../datadog-plugin-aerospike/src') },
22
+ get amqp10 () { return require('../../../datadog-plugin-amqp10/src') },
23
+ get amqplib () { return require('../../../datadog-plugin-amqplib/src') },
24
24
  get 'aws-sdk' () { return require('../../../datadog-plugin-aws-sdk/src') },
25
- get 'bunyan' () { return require('../../../datadog-plugin-bunyan/src') },
25
+ get bunyan () { return require('../../../datadog-plugin-bunyan/src') },
26
26
  get 'cassandra-driver' () { return require('../../../datadog-plugin-cassandra-driver/src') },
27
- get 'child_process' () { return require('../../../datadog-plugin-child_process/src') },
28
- get 'connect' () { return require('../../../datadog-plugin-connect/src') },
29
- get 'couchbase' () { return require('../../../datadog-plugin-couchbase/src') },
30
- get 'cypress' () { return require('../../../datadog-plugin-cypress/src') },
31
- get 'dns' () { return require('../../../datadog-plugin-dns/src') },
32
- get 'elasticsearch' () { return require('../../../datadog-plugin-elasticsearch/src') },
33
- get 'express' () { return require('../../../datadog-plugin-express/src') },
34
- get 'fastify' () { return require('../../../datadog-plugin-fastify/src') },
27
+ get child_process () { return require('../../../datadog-plugin-child_process/src') },
28
+ get connect () { return require('../../../datadog-plugin-connect/src') },
29
+ get couchbase () { return require('../../../datadog-plugin-couchbase/src') },
30
+ get cypress () { return require('../../../datadog-plugin-cypress/src') },
31
+ get dns () { return require('../../../datadog-plugin-dns/src') },
32
+ get elasticsearch () { return require('../../../datadog-plugin-elasticsearch/src') },
33
+ get express () { return require('../../../datadog-plugin-express/src') },
34
+ get fastify () { return require('../../../datadog-plugin-fastify/src') },
35
35
  get 'find-my-way' () { return require('../../../datadog-plugin-find-my-way/src') },
36
- get 'graphql' () { return require('../../../datadog-plugin-graphql/src') },
37
- get 'grpc' () { return require('../../../datadog-plugin-grpc/src') },
38
- get 'hapi' () { return require('../../../datadog-plugin-hapi/src') },
39
- get 'http' () { return require('../../../datadog-plugin-http/src') },
40
- get 'http2' () { return require('../../../datadog-plugin-http2/src') },
41
- get 'https' () { return require('../../../datadog-plugin-http/src') },
42
- get 'ioredis' () { return require('../../../datadog-plugin-ioredis/src') },
36
+ get graphql () { return require('../../../datadog-plugin-graphql/src') },
37
+ get grpc () { return require('../../../datadog-plugin-grpc/src') },
38
+ get hapi () { return require('../../../datadog-plugin-hapi/src') },
39
+ get http () { return require('../../../datadog-plugin-http/src') },
40
+ get http2 () { return require('../../../datadog-plugin-http2/src') },
41
+ get https () { return require('../../../datadog-plugin-http/src') },
42
+ get ioredis () { return require('../../../datadog-plugin-ioredis/src') },
43
43
  get 'jest-circus' () { return require('../../../datadog-plugin-jest/src') },
44
44
  get 'jest-config' () { return require('../../../datadog-plugin-jest/src') },
45
45
  get 'jest-environment-node' () { return require('../../../datadog-plugin-jest/src') },
46
46
  get 'jest-environment-jsdom' () { return require('../../../datadog-plugin-jest/src') },
47
47
  get 'jest-jasmine2' () { return require('../../../datadog-plugin-jest/src') },
48
48
  get 'jest-worker' () { return require('../../../datadog-plugin-jest/src') },
49
- get 'koa' () { return require('../../../datadog-plugin-koa/src') },
49
+ get koa () { return require('../../../datadog-plugin-koa/src') },
50
50
  get 'koa-router' () { return require('../../../datadog-plugin-koa/src') },
51
- get 'kafkajs' () { return require('../../../datadog-plugin-kafkajs/src') },
52
- get 'mariadb' () { return require('../../../datadog-plugin-mariadb/src') },
53
- get 'memcached' () { return require('../../../datadog-plugin-memcached/src') },
51
+ get kafkajs () { return require('../../../datadog-plugin-kafkajs/src') },
52
+ get mariadb () { return require('../../../datadog-plugin-mariadb/src') },
53
+ get memcached () { return require('../../../datadog-plugin-memcached/src') },
54
54
  get 'microgateway-core' () { return require('../../../datadog-plugin-microgateway-core/src') },
55
- get 'mocha' () { return require('../../../datadog-plugin-mocha/src') },
55
+ get mocha () { return require('../../../datadog-plugin-mocha/src') },
56
56
  get 'mocha-each' () { return require('../../../datadog-plugin-mocha/src') },
57
- get 'moleculer' () { return require('../../../datadog-plugin-moleculer/src') },
58
- get 'mongodb' () { return require('../../../datadog-plugin-mongodb-core/src') },
57
+ get moleculer () { return require('../../../datadog-plugin-moleculer/src') },
58
+ get mongodb () { return require('../../../datadog-plugin-mongodb-core/src') },
59
59
  get 'mongodb-core' () { return require('../../../datadog-plugin-mongodb-core/src') },
60
- get 'mysql' () { return require('../../../datadog-plugin-mysql/src') },
61
- get 'mysql2' () { return require('../../../datadog-plugin-mysql2/src') },
62
- get 'net' () { return require('../../../datadog-plugin-net/src') },
63
- get 'next' () { return require('../../../datadog-plugin-next/src') },
60
+ get mysql () { return require('../../../datadog-plugin-mysql/src') },
61
+ get mysql2 () { return require('../../../datadog-plugin-mysql2/src') },
62
+ get net () { return require('../../../datadog-plugin-net/src') },
63
+ get next () { return require('../../../datadog-plugin-next/src') },
64
64
  get 'node:dns' () { return require('../../../datadog-plugin-dns/src') },
65
65
  get 'node:http' () { return require('../../../datadog-plugin-http/src') },
66
66
  get 'node:http2' () { return require('../../../datadog-plugin-http2/src') },
67
67
  get 'node:https' () { return require('../../../datadog-plugin-http/src') },
68
68
  get 'node:net' () { return require('../../../datadog-plugin-net/src') },
69
- get 'oracledb' () { return require('../../../datadog-plugin-oracledb/src') },
70
- get 'openai' () { return require('../../../datadog-plugin-openai/src') },
71
- get 'paperplane' () { return require('../../../datadog-plugin-paperplane/src') },
72
- get 'pg' () { return require('../../../datadog-plugin-pg/src') },
73
- get 'pino' () { return require('../../../datadog-plugin-pino/src') },
69
+ get oracledb () { return require('../../../datadog-plugin-oracledb/src') },
70
+ get openai () { return require('../../../datadog-plugin-openai/src') },
71
+ get paperplane () { return require('../../../datadog-plugin-paperplane/src') },
72
+ get pg () { return require('../../../datadog-plugin-pg/src') },
73
+ get pino () { return require('../../../datadog-plugin-pino/src') },
74
74
  get 'pino-pretty' () { return require('../../../datadog-plugin-pino/src') },
75
- get 'playwright' () { return require('../../../datadog-plugin-playwright/src') },
76
- get 'redis' () { return require('../../../datadog-plugin-redis/src') },
77
- get 'restify' () { return require('../../../datadog-plugin-restify/src') },
78
- get 'rhea' () { return require('../../../datadog-plugin-rhea/src') },
79
- get 'router' () { return require('../../../datadog-plugin-router/src') },
80
- get 'sharedb' () { return require('../../../datadog-plugin-sharedb/src') },
81
- get 'tedious' () { return require('../../../datadog-plugin-tedious/src') },
82
- get 'winston' () { return require('../../../datadog-plugin-winston/src') }
75
+ get playwright () { return require('../../../datadog-plugin-playwright/src') },
76
+ get redis () { return require('../../../datadog-plugin-redis/src') },
77
+ get restify () { return require('../../../datadog-plugin-restify/src') },
78
+ get rhea () { return require('../../../datadog-plugin-rhea/src') },
79
+ get router () { return require('../../../datadog-plugin-router/src') },
80
+ get sharedb () { return require('../../../datadog-plugin-sharedb/src') },
81
+ get tedious () { return require('../../../datadog-plugin-tedious/src') },
82
+ get winston () { return require('../../../datadog-plugin-winston/src') }
83
83
  }
@@ -84,7 +84,7 @@ module.exports = class Plugin {
84
84
 
85
85
  if (!store || !store.span) return
86
86
 
87
- if (!store.span._spanContext._tags['error']) {
87
+ if (!store.span._spanContext._tags.error) {
88
88
  store.span.setTag('error', error || 1)
89
89
  }
90
90
  }
@@ -94,7 +94,7 @@ class TracingPlugin extends Plugin {
94
94
  }
95
95
 
96
96
  addError (error, span = this.activeSpan) {
97
- if (!span._spanContext._tags['error']) {
97
+ if (!span._spanContext._tags.error) {
98
98
  // Errors may be wrapped in a context.
99
99
  error = (error && error.error) || error
100
100
  span.setTag('error', error || 1)