dd-trace 5.67.0 → 5.69.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 (132) hide show
  1. package/LICENSE-3rdparty.csv +6 -4
  2. package/README.md +0 -2
  3. package/ci/init.js +52 -54
  4. package/ext/exporters.d.ts +2 -1
  5. package/ext/exporters.js +2 -1
  6. package/index.d.ts +240 -3
  7. package/initialize.mjs +1 -1
  8. package/package.json +17 -11
  9. package/packages/datadog-core/src/storage.js +14 -13
  10. package/packages/datadog-esbuild/index.js +118 -26
  11. package/packages/datadog-instrumentations/src/aws-sdk.js +42 -4
  12. package/packages/datadog-instrumentations/src/azure-functions.js +1 -1
  13. package/packages/datadog-instrumentations/src/azure-service-bus.js +1 -1
  14. package/packages/datadog-instrumentations/src/cassandra-driver.js +2 -2
  15. package/packages/datadog-instrumentations/src/connect.js +6 -2
  16. package/packages/datadog-instrumentations/src/cucumber.js +31 -6
  17. package/packages/datadog-instrumentations/src/express.js +5 -6
  18. package/packages/datadog-instrumentations/src/fastify.js +3 -3
  19. package/packages/datadog-instrumentations/src/helpers/hook.js +28 -15
  20. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  21. package/packages/datadog-instrumentations/src/helpers/instrument.js +15 -5
  22. package/packages/datadog-instrumentations/src/helpers/register.js +10 -3
  23. package/packages/datadog-instrumentations/src/http2/client.js +1 -0
  24. package/packages/datadog-instrumentations/src/http2/server.js +0 -1
  25. package/packages/datadog-instrumentations/src/ioredis.js +12 -1
  26. package/packages/datadog-instrumentations/src/jest.js +48 -36
  27. package/packages/datadog-instrumentations/src/limitd-client.js +2 -1
  28. package/packages/datadog-instrumentations/src/mocha/main.js +15 -7
  29. package/packages/datadog-instrumentations/src/mocha/utils.js +3 -0
  30. package/packages/datadog-instrumentations/src/mongoose.js +2 -1
  31. package/packages/datadog-instrumentations/src/oracledb.js +19 -13
  32. package/packages/datadog-instrumentations/src/pg.js +9 -5
  33. package/packages/datadog-instrumentations/src/pino.js +18 -6
  34. package/packages/datadog-instrumentations/src/playwright.js +15 -1
  35. package/packages/datadog-instrumentations/src/sequelize.js +1 -1
  36. package/packages/datadog-instrumentations/src/vitest.js +155 -62
  37. package/packages/datadog-plugin-ai/src/tracing.js +3 -3
  38. package/packages/datadog-plugin-aws-sdk/src/base.js +23 -8
  39. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  40. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +101 -2
  41. package/packages/datadog-plugin-aws-sdk/src/util.js +1 -1
  42. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +6 -0
  43. package/packages/datadog-plugin-cucumber/src/index.js +4 -56
  44. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +6 -3
  45. package/packages/datadog-plugin-cypress/src/support.js +4 -0
  46. package/packages/datadog-plugin-express/src/code_origin.js +2 -2
  47. package/packages/datadog-plugin-fastify/src/code_origin.js +1 -2
  48. package/packages/datadog-plugin-jest/src/index.js +0 -21
  49. package/packages/datadog-plugin-mocha/src/index.js +3 -57
  50. package/packages/datadog-plugin-mongodb-core/src/index.js +38 -12
  51. package/packages/datadog-plugin-playwright/src/index.js +11 -5
  52. package/packages/datadog-plugin-vitest/src/index.js +5 -1
  53. package/packages/datadog-plugin-ws/src/close.js +1 -1
  54. package/packages/datadog-plugin-ws/src/producer.js +6 -1
  55. package/packages/datadog-plugin-ws/src/receiver.js +6 -1
  56. package/packages/dd-trace/src/aiguard/client.js +25 -0
  57. package/packages/dd-trace/src/aiguard/noop.js +9 -0
  58. package/packages/dd-trace/src/aiguard/sdk.js +173 -0
  59. package/packages/dd-trace/src/aiguard/tags.js +11 -0
  60. package/packages/dd-trace/src/appsec/iast/path-line.js +21 -4
  61. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +1 -1
  62. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +6 -3
  63. package/packages/dd-trace/src/appsec/stack_trace.js +20 -1
  64. package/packages/dd-trace/src/appsec/telemetry/waf.js +2 -2
  65. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -4
  66. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +11 -3
  67. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +10 -1
  68. package/packages/dd-trace/src/config-helper.js +8 -1
  69. package/packages/dd-trace/src/config.js +92 -304
  70. package/packages/dd-trace/src/config_defaults.js +191 -0
  71. package/packages/dd-trace/src/crashtracking/crashtracker.js +2 -1
  72. package/packages/dd-trace/src/datastreams/fnv.js +2 -2
  73. package/packages/dd-trace/src/datastreams/index.js +23 -1
  74. package/packages/dd-trace/src/datastreams/writer.js +3 -2
  75. package/packages/dd-trace/src/debugger/devtools_client/config.js +2 -1
  76. package/packages/dd-trace/src/dogstatsd.js +4 -3
  77. package/packages/dd-trace/src/encode/0.4.js +1 -5
  78. package/packages/dd-trace/src/exporter.js +1 -0
  79. package/packages/dd-trace/src/exporters/agent/index.js +3 -2
  80. package/packages/dd-trace/src/exporters/agent/writer.js +1 -1
  81. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +3 -2
  82. package/packages/dd-trace/src/exporters/common/request.js +2 -1
  83. package/packages/dd-trace/src/exporters/span-stats/index.js +3 -2
  84. package/packages/dd-trace/src/llmobs/constants/tags.js +2 -0
  85. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +15 -4
  86. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +20 -7
  87. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +40 -13
  88. package/packages/dd-trace/src/llmobs/plugins/openai.js +7 -1
  89. package/packages/dd-trace/src/llmobs/tagger.js +8 -0
  90. package/packages/dd-trace/src/llmobs/telemetry.js +2 -1
  91. package/packages/dd-trace/src/log/index.js +27 -16
  92. package/packages/dd-trace/src/log/log.js +29 -5
  93. package/packages/dd-trace/src/log/writer.js +5 -5
  94. package/packages/dd-trace/src/noop/proxy.js +4 -0
  95. package/packages/dd-trace/src/noop/span.js +1 -0
  96. package/packages/dd-trace/src/opentelemetry/span.js +14 -3
  97. package/packages/dd-trace/src/opentracing/span.js +19 -5
  98. package/packages/dd-trace/src/payload-tagging/config/index.js +16 -0
  99. package/packages/dd-trace/src/payload-tagging/index.js +26 -15
  100. package/packages/dd-trace/src/payload-tagging/tagging.js +17 -8
  101. package/packages/dd-trace/src/pkg.js +3 -1
  102. package/packages/dd-trace/src/plugin_manager.js +20 -2
  103. package/packages/dd-trace/src/plugins/ci_plugin.js +97 -3
  104. package/packages/dd-trace/src/plugins/composite.js +3 -0
  105. package/packages/dd-trace/src/plugins/index.js +2 -0
  106. package/packages/dd-trace/src/plugins/plugin.js +67 -0
  107. package/packages/dd-trace/src/plugins/util/git-cache.js +129 -0
  108. package/packages/dd-trace/src/plugins/util/git.js +41 -27
  109. package/packages/dd-trace/src/plugins/util/test.js +56 -27
  110. package/packages/dd-trace/src/plugins/util/web.js +1 -1
  111. package/packages/dd-trace/src/priority_sampler.js +70 -46
  112. package/packages/dd-trace/src/profiler.js +4 -1
  113. package/packages/dd-trace/src/profiling/config.js +73 -42
  114. package/packages/dd-trace/src/profiling/profiler.js +3 -1
  115. package/packages/dd-trace/src/profiling/profilers/events.js +3 -8
  116. package/packages/dd-trace/src/profiling/profilers/space.js +1 -0
  117. package/packages/dd-trace/src/profiling/profilers/wall.js +196 -117
  118. package/packages/dd-trace/src/proxy.js +15 -0
  119. package/packages/dd-trace/src/rate_limiter.js +26 -1
  120. package/packages/dd-trace/src/remote_config/capabilities.js +5 -0
  121. package/packages/dd-trace/src/remote_config/manager.js +3 -2
  122. package/packages/dd-trace/src/sampling_rule.js +124 -2
  123. package/packages/dd-trace/src/span_sampler.js +19 -0
  124. package/packages/dd-trace/src/standalone/product.js +9 -0
  125. package/packages/dd-trace/src/standalone/tracesource.js +16 -1
  126. package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +13 -0
  127. package/packages/dd-trace/src/startup-log.js +21 -2
  128. package/packages/dd-trace/src/supported-configurations.json +9 -0
  129. package/packages/dd-trace/src/telemetry/logs/index.js +2 -2
  130. package/packages/dd-trace/src/util.js +1 -1
  131. package/register.js +1 -1
  132. package/version.js +4 -2
@@ -5,8 +5,6 @@ const os = require('os')
5
5
  const uuid = require('crypto-randomuuid') // we need to keep the old uuid dep because of cypress
6
6
  const { URL } = require('url')
7
7
  const log = require('./log')
8
- const pkg = require('./pkg')
9
- const coalesce = require('koalas')
10
8
  const tagger = require('./tagger')
11
9
  const set = require('../../datadog-core/src/utils/src/set')
12
10
  const { isTrue, isFalse, normalizeProfilingEnabledValue } = require('./util')
@@ -15,11 +13,10 @@ const { getGitMetadataFromGitProperties, removeUserSensitiveInfo } = require('./
15
13
  const { updateConfig } = require('./telemetry')
16
14
  const telemetryMetrics = require('./telemetry/metrics')
17
15
  const { isInServerlessEnvironment, getIsGCPFunction, getIsAzureFunction } = require('./serverless')
18
- const {
19
- ORIGIN_KEY, GRPC_CLIENT_ERROR_STATUSES, GRPC_SERVER_ERROR_STATUSES
20
- } = require('./constants')
16
+ const { ORIGIN_KEY } = require('./constants')
21
17
  const { appendRules } = require('./payload-tagging/config')
22
18
  const { getEnvironmentVariable, getEnvironmentVariables } = require('./config-helper')
19
+ const defaults = require('./config_defaults')
23
20
 
24
21
  const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
25
22
 
@@ -134,12 +131,6 @@ function checkIfBothOtelAndDdEnvVarSet () {
134
131
  }
135
132
  }
136
133
 
137
- // eslint-disable-next-line @stylistic/max-len
138
- const qsRegex = String.raw`(?: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,}`
139
- // eslint-disable-next-line @stylistic/max-len
140
- const defaultWafObfuscatorKeyRegex = String.raw`(?i)pass|pw(?:or)?d|secret|(?:api|private|public|access)[_-]?key|token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization|jsessionid|phpsessid|asp\.net[_-]sessionid|sid|jwt`
141
- // eslint-disable-next-line @stylistic/max-len
142
- const defaultWafObfuscatorValueRegex = String.raw`(?i)(?:p(?:ass)?w(?:or)?d|pass(?:[_-]?phrase)?|secret(?:[_-]?key)?|(?:(?:api|private|public|access)[_-]?)key(?:[_-]?id)?|(?:(?:auth|access|id|refresh)[_-]?)?token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|jsessionid|phpsessid|asp\.net(?:[_-]|-)sessionid|sid|jwt)(?:\s*=([^;&]+)|"\s*:\s*("[^"]+"|\d+))|bearer\s+([a-z0-9\._\-]+)|token\s*:\s*([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,})`
143
134
  const runtimeId = uuid()
144
135
 
145
136
  function maybeFile (filepath) {
@@ -222,8 +213,9 @@ function propagationStyle (key, option) {
222
213
  // Otherwise, fallback to env var parsing
223
214
  const envKey = `DD_TRACE_PROPAGATION_STYLE_${key.toUpperCase()}`
224
215
 
225
- const envVar = coalesce(getEnvironmentVariable(envKey),
226
- getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE'), getEnvironmentVariable('OTEL_PROPAGATORS'))
216
+ const envVar = getEnvironmentVariable(envKey) ??
217
+ getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') ??
218
+ getEnvironmentVariable('OTEL_PROPAGATORS')
227
219
  if (envVar !== undefined) {
228
220
  return envVar.split(',')
229
221
  .filter(v => v !== '')
@@ -277,7 +269,7 @@ class Config {
277
269
  this.stableConfig?.fleetEntries?.DD_TRACE_DEBUG,
278
270
  this.stableConfig?.localEntries?.DD_TRACE_DEBUG
279
271
  )
280
- this.logger = coalesce(options.logger, logConfig.logger)
272
+ this.logger = options.logger ?? logConfig.logger
281
273
  this.logLevel = log.getLogLevel(
282
274
  options.logLevel,
283
275
  this.stableConfig?.fleetEntries?.DD_TRACE_LOG_LEVEL,
@@ -294,6 +286,7 @@ class Config {
294
286
  checkIfBothOtelAndDdEnvVarSet()
295
287
 
296
288
  const DD_API_KEY = getEnvironmentVariable('DD_API_KEY')
289
+ const DD_APP_KEY = getEnvironmentVariable('DD_APP_KEY')
297
290
 
298
291
  if (getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') && (
299
292
  getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_INJECT') ||
@@ -323,41 +316,30 @@ class Config {
323
316
  }
324
317
  }
325
318
 
326
- const DD_INSTRUMENTATION_INSTALL_ID = coalesce(
327
- getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID'),
328
- null
329
- )
330
- const DD_INSTRUMENTATION_INSTALL_TIME = coalesce(
331
- getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TIME'),
332
- null
333
- )
334
- const DD_INSTRUMENTATION_INSTALL_TYPE = coalesce(
335
- getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TYPE'),
336
- null
337
- )
319
+ const DD_INSTRUMENTATION_INSTALL_ID = getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID') ?? null
320
+ const DD_INSTRUMENTATION_INSTALL_TIME = getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TIME') ?? null
321
+ const DD_INSTRUMENTATION_INSTALL_TYPE = getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TYPE') ?? null
338
322
 
339
323
  const DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING = splitJSONPathRules(
340
- coalesce(
341
- getEnvironmentVariable('DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING'),
342
- options.cloudPayloadTagging?.request,
343
- ''
344
- ))
324
+ getEnvironmentVariable('DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING') ??
325
+ options.cloudPayloadTagging?.request ??
326
+ ''
327
+ )
345
328
 
346
329
  const DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING = splitJSONPathRules(
347
- coalesce(
348
- getEnvironmentVariable('DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING'),
349
- options.cloudPayloadTagging?.response,
350
- ''
351
- ))
352
-
353
- const DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH = coalesce(
354
- getEnvironmentVariable('DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH'),
355
- options.cloudPayloadTagging?.maxDepth,
356
- 10
330
+ getEnvironmentVariable('DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING') ??
331
+ options.cloudPayloadTagging?.response ??
332
+ ''
357
333
  )
358
334
 
335
+ const DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH = maybeInt(
336
+ getEnvironmentVariable('DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH') ??
337
+ options.cloudPayloadTagging?.maxDepth
338
+ ) ?? 10
339
+
359
340
  // TODO: refactor
360
341
  this.apiKey = DD_API_KEY
342
+ this.appKey = DD_APP_KEY
361
343
 
362
344
  // sent in telemetry event app-started
363
345
  this.installSignature = {
@@ -399,20 +381,14 @@ class Config {
399
381
 
400
382
  if (this.gitMetadataEnabled) {
401
383
  this.repositoryUrl = removeUserSensitiveInfo(
402
- coalesce(
403
- getEnvironmentVariable('DD_GIT_REPOSITORY_URL'),
404
- this.tags[GIT_REPOSITORY_URL]
405
- )
384
+ getEnvironmentVariable('DD_GIT_REPOSITORY_URL') ??
385
+ this.tags[GIT_REPOSITORY_URL]
406
386
  )
407
- this.commitSHA = coalesce(
408
- getEnvironmentVariable('DD_GIT_COMMIT_SHA'),
387
+ this.commitSHA = getEnvironmentVariable('DD_GIT_COMMIT_SHA') ??
409
388
  this.tags[GIT_COMMIT_SHA]
410
- )
411
389
  if (!this.repositoryUrl || !this.commitSHA) {
412
- const DD_GIT_PROPERTIES_FILE = coalesce(
413
- getEnvironmentVariable('DD_GIT_PROPERTIES_FILE'),
390
+ const DD_GIT_PROPERTIES_FILE = getEnvironmentVariable('DD_GIT_PROPERTIES_FILE') ??
414
391
  `${process.cwd()}/git.properties`
415
- )
416
392
  let gitPropertiesString
417
393
  try {
418
394
  gitPropertiesString = fs.readFileSync(DD_GIT_PROPERTIES_FILE, 'utf8')
@@ -450,11 +426,8 @@ class Config {
450
426
 
451
427
  _getDefaultPropagationStyle (options) {
452
428
  // TODO: Remove the experimental env vars as a major?
453
- const DD_TRACE_B3_ENABLED = coalesce(
454
- options.experimental && options.experimental.b3,
455
- getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_B3_ENABLED'),
456
- false
457
- )
429
+ const DD_TRACE_B3_ENABLED = options.experimental?.b3 ??
430
+ getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_B3_ENABLED')
458
431
  const defaultPropagationStyle = ['datadog', 'tracecontext']
459
432
  if (isTrue(DD_TRACE_B3_ENABLED)) {
460
433
  defaultPropagationStyle.push('b3', 'b3 single header')
@@ -468,180 +441,7 @@ class Config {
468
441
 
469
442
  // for _merge to work, every config value must have a default value
470
443
  _applyDefaults () {
471
- const {
472
- AWS_LAMBDA_FUNCTION_NAME,
473
- FUNCTION_NAME,
474
- K_SERVICE,
475
- WEBSITE_SITE_NAME
476
- } = getEnvironmentVariables()
477
-
478
- const service = AWS_LAMBDA_FUNCTION_NAME ||
479
- FUNCTION_NAME || // Google Cloud Function Name set by deprecated runtimes
480
- K_SERVICE || // Google Cloud Function Name set by newer runtimes
481
- WEBSITE_SITE_NAME || // set by Azure Functions
482
- pkg.name ||
483
- 'node'
484
-
485
- const defaults = setHiddenProperty(this, '_defaults', {})
486
-
487
- defaults.apmTracingEnabled = true
488
- defaults['appsec.apiSecurity.enabled'] = true
489
- defaults['appsec.apiSecurity.sampleDelay'] = 30
490
- defaults['appsec.apiSecurity.endpointCollectionEnabled'] = true
491
- defaults['appsec.apiSecurity.endpointCollectionMessageLimit'] = 300
492
- defaults['appsec.blockedTemplateGraphql'] = undefined
493
- defaults['appsec.blockedTemplateHtml'] = undefined
494
- defaults['appsec.blockedTemplateJson'] = undefined
495
- defaults['appsec.enabled'] = undefined
496
- defaults['appsec.eventTracking.mode'] = 'identification'
497
- defaults['appsec.extendedHeadersCollection.enabled'] = false
498
- defaults['appsec.extendedHeadersCollection.redaction'] = true
499
- defaults['appsec.extendedHeadersCollection.maxHeaders'] = 50
500
- defaults['appsec.obfuscatorKeyRegex'] = defaultWafObfuscatorKeyRegex
501
- defaults['appsec.obfuscatorValueRegex'] = defaultWafObfuscatorValueRegex
502
- defaults['appsec.rasp.enabled'] = true
503
- defaults['appsec.rasp.bodyCollection'] = false
504
- defaults['appsec.rateLimit'] = 100
505
- defaults['appsec.rules'] = undefined
506
- defaults['appsec.sca.enabled'] = null
507
- defaults['appsec.stackTrace.enabled'] = true
508
- defaults['appsec.stackTrace.maxDepth'] = 32
509
- defaults['appsec.stackTrace.maxStackTraces'] = 2
510
- defaults['appsec.wafTimeout'] = 5e3 // µs
511
- defaults.baggageMaxBytes = 8192
512
- defaults.baggageMaxItems = 64
513
- defaults.baggageTagKeys = 'user.id,session.id,account.id'
514
- defaults.ciVisibilityTestSessionName = ''
515
- defaults.clientIpEnabled = false
516
- defaults.clientIpHeader = null
517
- defaults['crashtracking.enabled'] = true
518
- defaults['codeOriginForSpans.enabled'] = true
519
- defaults['codeOriginForSpans.experimental.exit_spans.enabled'] = false
520
- defaults.dbmPropagationMode = 'disabled'
521
- defaults['dogstatsd.hostname'] = '127.0.0.1'
522
- defaults['dogstatsd.port'] = '8125'
523
- defaults.dsmEnabled = false
524
- defaults['dynamicInstrumentation.enabled'] = false
525
- defaults['dynamicInstrumentation.probeFile'] = undefined
526
- defaults['dynamicInstrumentation.redactedIdentifiers'] = []
527
- defaults['dynamicInstrumentation.redactionExcludedIdentifiers'] = []
528
- defaults['dynamicInstrumentation.uploadIntervalSeconds'] = 1
529
- defaults.env = undefined
530
- defaults['experimental.enableGetRumData'] = false
531
- defaults['experimental.exporter'] = undefined
532
- defaults.flushInterval = 2000
533
- defaults.flushMinSpans = 1000
534
- defaults.gitMetadataEnabled = true
535
- defaults.graphqlErrorExtensions = []
536
- defaults['grpc.client.error.statuses'] = GRPC_CLIENT_ERROR_STATUSES
537
- defaults['grpc.server.error.statuses'] = GRPC_SERVER_ERROR_STATUSES
538
- defaults.headerTags = []
539
- defaults['heapSnapshot.count'] = 0
540
- defaults['heapSnapshot.destination'] = ''
541
- defaults['heapSnapshot.interval'] = 3600
542
- defaults.hostname = '127.0.0.1'
543
- defaults['iast.dbRowsToTaint'] = 1
544
- defaults['iast.deduplicationEnabled'] = true
545
- defaults['iast.enabled'] = false
546
- defaults['iast.maxConcurrentRequests'] = 2
547
- defaults['iast.maxContextOperations'] = 2
548
- defaults['iast.redactionEnabled'] = true
549
- defaults['iast.redactionNamePattern'] = null
550
- defaults['iast.redactionValuePattern'] = null
551
- defaults['iast.requestSampling'] = 30
552
- defaults['iast.securityControlsConfiguration'] = null
553
- defaults['iast.telemetryVerbosity'] = 'INFORMATION'
554
- defaults['iast.stackTrace.enabled'] = true
555
- defaults.injectionEnabled = []
556
- defaults.instrumentationSource = 'manual'
557
- defaults.injectForce = null
558
- defaults.isAzureFunction = false
559
- defaults.isCiVisibility = false
560
- defaults.isEarlyFlakeDetectionEnabled = false
561
- defaults.isFlakyTestRetriesEnabled = false
562
- defaults.flakyTestRetriesCount = 5
563
- defaults.isGCPFunction = false
564
- defaults.isGitUploadEnabled = false
565
- defaults.isIntelligentTestRunnerEnabled = false
566
- defaults.isManualApiEnabled = false
567
- defaults['langchain.spanCharLimit'] = 128
568
- defaults['langchain.spanPromptCompletionSampleRate'] = 1
569
- defaults['llmobs.agentlessEnabled'] = undefined
570
- defaults['llmobs.enabled'] = false
571
- defaults['llmobs.mlApp'] = undefined
572
- defaults.ciVisibilityTestSessionName = ''
573
- defaults.ciVisAgentlessLogSubmissionEnabled = false
574
- defaults.legacyBaggageEnabled = true
575
- defaults.isTestDynamicInstrumentationEnabled = false
576
- defaults.isServiceUserProvided = false
577
- defaults.testManagementAttemptToFixRetries = 20
578
- defaults.isTestManagementEnabled = false
579
- defaults.isImpactedTestsEnabled = false
580
- defaults.logInjection = true
581
- defaults.lookup = undefined
582
- defaults.inferredProxyServicesEnabled = false
583
- defaults.memcachedCommandEnabled = false
584
- defaults.middlewareTracingEnabled = true
585
- defaults.openAiLogsEnabled = false
586
- defaults['openai.spanCharLimit'] = 128
587
- defaults.peerServiceMapping = {}
588
- defaults.plugins = true
589
- defaults.port = '8126'
590
- defaults['profiling.enabled'] = undefined
591
- defaults['profiling.exporters'] = 'agent'
592
- defaults['profiling.sourceMap'] = true
593
- defaults['profiling.longLivedThreshold'] = undefined
594
- defaults.protocolVersion = '0.4'
595
- defaults.queryStringObfuscation = qsRegex
596
- defaults['remoteConfig.enabled'] = true
597
- defaults['remoteConfig.pollInterval'] = 5 // seconds
598
- defaults.reportHostname = false
599
- defaults['runtimeMetrics.enabled'] = false
600
- defaults['runtimeMetrics.eventLoop'] = true
601
- defaults['runtimeMetrics.gc'] = true
602
- defaults.runtimeMetricsRuntimeId = false
603
- defaults.sampleRate = undefined
604
- defaults['sampler.rateLimit'] = 100
605
- defaults['sampler.rules'] = []
606
- defaults['sampler.spanSamplingRules'] = []
607
- defaults.scope = undefined
608
- defaults.service = service
609
- defaults.serviceMapping = {}
610
- defaults.site = 'datadoghq.com'
611
- defaults.spanAttributeSchema = 'v0'
612
- defaults.spanComputePeerService = false
613
- defaults.spanLeakDebug = 0
614
- defaults.spanRemoveIntegrationFromService = false
615
- defaults.startupLogs = false
616
- defaults['stats.enabled'] = false
617
- defaults.tags = {}
618
- defaults.tagsHeaderMaxLength = 512
619
- defaults['telemetry.debug'] = false
620
- defaults['telemetry.dependencyCollection'] = true
621
- defaults['telemetry.enabled'] = true
622
- defaults['telemetry.heartbeatInterval'] = 60_000
623
- defaults['telemetry.logCollection'] = true
624
- defaults['telemetry.metrics'] = true
625
- defaults.traceEnabled = true
626
- defaults.traceId128BitGenerationEnabled = true
627
- defaults.traceId128BitLoggingEnabled = true
628
- defaults.tracePropagationExtractFirst = false
629
- defaults.tracePropagationBehaviorExtract = 'continue'
630
- defaults['tracePropagationStyle.inject'] = ['datadog', 'tracecontext', 'baggage']
631
- defaults['tracePropagationStyle.extract'] = ['datadog', 'tracecontext', 'baggage']
632
- defaults['tracePropagationStyle.otelPropagators'] = false
633
- defaults.traceWebsocketMessagesEnabled = true
634
- defaults.traceWebsocketMessagesInheritSampling = true
635
- defaults.traceWebsocketMessagesSeparateTraces = true
636
- defaults.tracing = true
637
- defaults.url = undefined
638
- defaults.version = pkg.version
639
- defaults.instrumentation_config_id = undefined
640
- defaults['vertexai.spanCharLimit'] = 128
641
- defaults['vertexai.spanPromptCompletionSampleRate'] = 1
642
- defaults['trace.aws.addSpanPointers'] = true
643
- defaults['trace.dynamoDb.tablePrimaryKeys'] = undefined
644
- defaults['trace.nativeSpanEvents'] = false
444
+ setHiddenProperty(this, '_defaults', defaults)
645
445
  }
646
446
 
647
447
  _applyLocalStableConfig () {
@@ -687,6 +487,11 @@ class Config {
687
487
  const {
688
488
  AWS_LAMBDA_FUNCTION_NAME,
689
489
  DD_AGENT_HOST,
490
+ DD_AI_GUARD_ENABLED,
491
+ DD_AI_GUARD_ENDPOINT,
492
+ DD_AI_GUARD_MAX_CONTENT_SIZE,
493
+ DD_AI_GUARD_MAX_MESSAGES_LENGTH,
494
+ DD_AI_GUARD_TIMEOUT,
690
495
  DD_API_SECURITY_ENABLED,
691
496
  DD_API_SECURITY_SAMPLE_DELAY,
692
497
  DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED,
@@ -844,10 +649,12 @@ class Config {
844
649
  tagger.add(tags, DD_TRACE_TAGS)
845
650
  tagger.add(tags, DD_TRACE_GLOBAL_TAGS)
846
651
 
847
- this._setBoolean(env, 'apmTracingEnabled', coalesce(
848
- DD_APM_TRACING_ENABLED,
849
- DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED)
850
- ))
652
+ this._setBoolean(
653
+ env,
654
+ 'apmTracingEnabled',
655
+ DD_APM_TRACING_ENABLED ??
656
+ (DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED))
657
+ )
851
658
  this._setBoolean(env, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
852
659
  env['appsec.apiSecurity.sampleDelay'] = maybeFloat(DD_API_SECURITY_SAMPLE_DELAY)
853
660
  this._setBoolean(env, 'appsec.apiSecurity.endpointCollectionEnabled',
@@ -890,10 +697,7 @@ class Config {
890
697
  env.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
891
698
  this._setBoolean(env, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
892
699
  this._setString(env, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
893
- this._setBoolean(env, 'crashtracking.enabled', coalesce(
894
- DD_CRASHTRACKING_ENABLED,
895
- !this._isInServerlessEnvironment()
896
- ))
700
+ this._setBoolean(env, 'crashtracking.enabled', DD_CRASHTRACKING_ENABLED ?? !this._isInServerlessEnvironment())
897
701
  this._setBoolean(env, 'codeOriginForSpans.enabled', DD_CODE_ORIGIN_FOR_SPANS_ENABLED)
898
702
  this._setBoolean(
899
703
  env,
@@ -916,6 +720,14 @@ class Config {
916
720
  this._envUnprocessed['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
917
721
  this._setString(env, 'env', DD_ENV || tags.env)
918
722
  this._setBoolean(env, 'traceEnabled', DD_TRACE_ENABLED)
723
+ this._setBoolean(env, 'experimental.aiguard.enabled', DD_AI_GUARD_ENABLED)
724
+ this._setString(env, 'experimental.aiguard.endpoint', DD_AI_GUARD_ENDPOINT)
725
+ env['experimental.aiguard.maxContentSize'] = maybeInt(DD_AI_GUARD_MAX_CONTENT_SIZE)
726
+ this._envUnprocessed['experimental.aiguard.maxContentSize'] = DD_AI_GUARD_MAX_CONTENT_SIZE
727
+ env['experimental.aiguard.maxMessagesLength'] = maybeInt(DD_AI_GUARD_MAX_MESSAGES_LENGTH)
728
+ this._envUnprocessed['experimental.aiguard.maxMessagesLength'] = DD_AI_GUARD_MAX_MESSAGES_LENGTH
729
+ env['experimental.aiguard.timeout'] = maybeInt(DD_AI_GUARD_TIMEOUT)
730
+ this._envUnprocessed['experimental.aiguard.timeout'] = DD_AI_GUARD_TIMEOUT
919
731
  this._setBoolean(env, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
920
732
  this._setString(env, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
921
733
  if (AWS_LAMBDA_FUNCTION_NAME) env.flushInterval = 0
@@ -973,10 +785,8 @@ class Config {
973
785
  }
974
786
  this._setString(env, 'port', DD_TRACE_AGENT_PORT)
975
787
  const profilingEnabled = normalizeProfilingEnabledValue(
976
- coalesce(
977
- DD_PROFILING_ENABLED,
978
- this._isInServerlessEnvironment() ? 'false' : undefined
979
- )
788
+ DD_PROFILING_ENABLED ??
789
+ (this._isInServerlessEnvironment() ? 'false' : undefined)
980
790
  )
981
791
  this._setString(env, 'profiling.enabled', profilingEnabled)
982
792
  this._setString(env, 'profiling.exporters', DD_PROFILING_EXPORTERS)
@@ -988,10 +798,7 @@ class Config {
988
798
 
989
799
  this._setString(env, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
990
800
  this._setString(env, 'queryStringObfuscation', DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP)
991
- this._setBoolean(env, 'remoteConfig.enabled', coalesce(
992
- DD_REMOTE_CONFIGURATION_ENABLED,
993
- !this._isInServerlessEnvironment()
994
- ))
801
+ this._setBoolean(env, 'remoteConfig.enabled', DD_REMOTE_CONFIGURATION_ENABLED ?? !this._isInServerlessEnvironment())
995
802
  env['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
996
803
  this._envUnprocessed['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
997
804
  this._setBoolean(env, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
@@ -1004,10 +811,10 @@ class Config {
1004
811
  this._setBoolean(env, 'runtimeMetrics.eventLoop', DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED)
1005
812
  this._setBoolean(env, 'runtimeMetrics.gc', DD_RUNTIME_METRICS_GC_ENABLED)
1006
813
  this._setBoolean(env, 'runtimeMetricsRuntimeId', DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED)
1007
- this._setArray(env, 'sampler.spanSamplingRules', reformatSpanSamplingRules(coalesce(
1008
- maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE),
814
+ this._setArray(env, 'sampler.spanSamplingRules', reformatSpanSamplingRules(
815
+ maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE) ??
1009
816
  safeJsonParse(DD_SPAN_SAMPLING_RULES)
1010
- )))
817
+ ))
1011
818
  this._setUnit(env, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
1012
819
  getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
1013
820
  env['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
@@ -1031,10 +838,8 @@ class Config {
1031
838
  this._setBoolean(env, 'startupLogs', DD_TRACE_STARTUP_LOGS)
1032
839
  this._setTags(env, 'tags', tags)
1033
840
  env.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
1034
- this._setBoolean(env, 'telemetry.enabled', coalesce(
1035
- DD_INSTRUMENTATION_TELEMETRY_ENABLED,
1036
- !(this._isInServerlessEnvironment() || JEST_WORKER_ID)
1037
- ))
841
+ this._setBoolean(env, 'telemetry.enabled', DD_INSTRUMENTATION_TELEMETRY_ENABLED ??
842
+ !(this._isInServerlessEnvironment() || JEST_WORKER_ID))
1038
843
  this._setString(env, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
1039
844
  this._setBoolean(env, 'telemetry.debug', DD_TELEMETRY_DEBUG)
1040
845
  this._setBoolean(env, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
@@ -1079,10 +884,9 @@ class Config {
1079
884
 
1080
885
  tagger.add(tags, options.tags)
1081
886
 
1082
- this._setBoolean(opts, 'apmTracingEnabled', coalesce(
1083
- options.apmTracingEnabled,
1084
- options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled
1085
- ))
887
+ this._setBoolean(opts, 'apmTracingEnabled', options.apmTracingEnabled ??
888
+ (options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled)
889
+ )
1086
890
  this._setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
1087
891
  this._setBoolean(opts, 'appsec.apiSecurity.endpointCollectionEnabled',
1088
892
  options.appsec?.apiSecurity?.endpointCollectionEnabled)
@@ -1154,9 +958,16 @@ class Config {
1154
958
  this._optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
1155
959
  options.dynamicInstrumentation?.uploadIntervalSeconds
1156
960
  this._setString(opts, 'env', options.env || tags.env)
961
+ this._setBoolean(opts, 'experimental.aiguard.enabled', options.experimental?.aiguard?.enabled)
962
+ this._setString(opts, 'experimental.aiguard.endpoint', options.experimental?.aiguard?.endpoint)
963
+ opts['experimental.aiguard.maxMessagesLength'] = maybeInt(options.experimental?.aiguard?.maxMessagesLength)
964
+ this._optsUnprocessed['experimental.aiguard.maxMessagesLength'] = options.experimental?.aiguard?.maxMessagesLength
965
+ opts['experimental.aiguard.maxContentSize'] = maybeInt(options.experimental?.aiguard?.maxContentSize)
966
+ this._optsUnprocessed['experimental.aiguard.maxContentSize'] = options.experimental?.aiguard?.maxContentSize
967
+ opts['experimental.aiguard.timeout'] = maybeInt(options.experimental?.aiguard?.timeout)
968
+ this._optsUnprocessed['experimental.aiguard.timeout'] = options.experimental?.aiguard?.timeout
1157
969
  this._setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
1158
970
  this._setString(opts, 'experimental.exporter', options.experimental?.exporter)
1159
- this._setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
1160
971
  opts.flushInterval = maybeInt(options.flushInterval)
1161
972
  this._optsUnprocessed.flushInterval = options.flushInterval
1162
973
  opts.flushMinSpans = maybeInt(options.flushMinSpans)
@@ -1208,9 +1019,8 @@ class Config {
1208
1019
  this._setBoolean(opts, 'runtimeMetrics.gc', options.runtimeMetrics?.gc)
1209
1020
  this._setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
1210
1021
  this._setArray(opts, 'sampler.spanSamplingRules', reformatSpanSamplingRules(options.spanSamplingRules))
1211
- this._setUnit(opts, 'sampleRate', coalesce(options.sampleRate, options.ingestion.sampleRate))
1212
- const ingestion = options.ingestion || {}
1213
- opts['sampler.rateLimit'] = coalesce(options.rateLimit, ingestion.rateLimit)
1022
+ this._setUnit(opts, 'sampleRate', options.sampleRate ?? options.ingestion.sampleRate)
1023
+ opts['sampler.rateLimit'] = maybeInt(options.rateLimit ?? options.ingestion.rateLimit)
1214
1024
  this._setSamplingRule(opts, 'sampler.rules', options.samplingRules)
1215
1025
  this._setString(opts, 'service', options.service || tags.service)
1216
1026
  opts.serviceMapping = options.serviceMapping
@@ -1243,17 +1053,11 @@ class Config {
1243
1053
  }
1244
1054
 
1245
1055
  _isCiVisibility () {
1246
- return coalesce(
1247
- this._optionsArg.isCiVisibility,
1248
- this._defaults.isCiVisibility
1249
- )
1056
+ return this._optionsArg.isCiVisibility ?? this._defaults.isCiVisibility
1250
1057
  }
1251
1058
 
1252
1059
  _isCiVisibilityItrEnabled () {
1253
- return coalesce(
1254
- getEnvironmentVariable('DD_CIVISIBILITY_ITR_ENABLED'),
1255
- true
1256
- )
1060
+ return getEnvironmentVariable('DD_CIVISIBILITY_ITR_ENABLED') ?? true
1257
1061
  }
1258
1062
 
1259
1063
  _getHostname () {
@@ -1261,30 +1065,24 @@ class Config {
1261
1065
  const url = DD_CIVISIBILITY_AGENTLESS_URL
1262
1066
  ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
1263
1067
  : getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
1264
- const DD_AGENT_HOST = coalesce(
1265
- this._optionsArg.hostname,
1266
- getEnvironmentVariable('DD_AGENT_HOST'),
1267
- '127.0.0.1'
1268
- )
1269
- return DD_AGENT_HOST || (url && url.hostname)
1068
+ const DD_AGENT_HOST = this._optionsArg.hostname ??
1069
+ getEnvironmentVariable('DD_AGENT_HOST') ??
1070
+ defaults.hostname
1071
+ return DD_AGENT_HOST || url?.hostname
1270
1072
  }
1271
1073
 
1272
1074
  _getSpanComputePeerService () {
1273
1075
  const DD_TRACE_SPAN_ATTRIBUTE_SCHEMA = validateNamingVersion(
1274
- coalesce(
1275
- this._optionsArg.spanAttributeSchema,
1276
- getEnvironmentVariable('DD_TRACE_SPAN_ATTRIBUTE_SCHEMA')
1277
- )
1076
+ this._optionsArg.spanAttributeSchema ??
1077
+ getEnvironmentVariable('DD_TRACE_SPAN_ATTRIBUTE_SCHEMA')
1278
1078
  )
1279
1079
 
1280
1080
  const peerServiceSet = (
1281
1081
  this._optionsArg.hasOwnProperty('spanComputePeerService') ||
1282
1082
  getEnvironmentVariables().hasOwnProperty('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
1283
1083
  )
1284
- const peerServiceValue = coalesce(
1285
- this._optionsArg.spanComputePeerService,
1084
+ const peerServiceValue = this._optionsArg.spanComputePeerService ??
1286
1085
  getEnvironmentVariable('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
1287
- )
1288
1086
 
1289
1087
  const spanComputePeerService = (
1290
1088
  DD_TRACE_SPAN_ATTRIBUTE_SCHEMA === 'v0'
@@ -1298,36 +1096,28 @@ class Config {
1298
1096
  }
1299
1097
 
1300
1098
  _isCiVisibilityGitUploadEnabled () {
1301
- return coalesce(
1302
- getEnvironmentVariable('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED'),
1303
- true
1304
- )
1099
+ return getEnvironmentVariable('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED') ?? true
1305
1100
  }
1306
1101
 
1307
1102
  _isCiVisibilityManualApiEnabled () {
1308
- return coalesce(
1309
- getEnvironmentVariable('DD_CIVISIBILITY_MANUAL_API_ENABLED'),
1310
- true
1311
- )
1103
+ return getEnvironmentVariable('DD_CIVISIBILITY_MANUAL_API_ENABLED') ?? true
1312
1104
  }
1313
1105
 
1314
1106
  _isTraceStatsComputationEnabled () {
1315
1107
  const apmTracingEnabled = this._options.apmTracingEnabled !== false &&
1316
1108
  this._env.apmTracingEnabled !== false
1317
1109
 
1318
- return apmTracingEnabled && coalesce(
1319
- this._optionsArg.stats,
1320
- getEnvironmentVariable('DD_TRACE_STATS_COMPUTATION_ENABLED'),
1321
- getIsGCPFunction() || getIsAzureFunction()
1110
+ return apmTracingEnabled && (
1111
+ this._optionsArg.stats ??
1112
+ getEnvironmentVariable('DD_TRACE_STATS_COMPUTATION_ENABLED') ??
1113
+ (getIsGCPFunction() || getIsAzureFunction())
1322
1114
  )
1323
1115
  }
1324
1116
 
1325
1117
  _getTraceAgentUrl () {
1326
- return coalesce(
1327
- this._optionsArg.url,
1328
- getEnvironmentVariable('DD_TRACE_AGENT_URL'),
1118
+ return this._optionsArg.url ??
1119
+ getEnvironmentVariable('DD_TRACE_AGENT_URL') ??
1329
1120
  null
1330
- )
1331
1121
  }
1332
1122
 
1333
1123
  // handles values calculated from a mixture of options and env vars
@@ -1351,11 +1141,9 @@ class Config {
1351
1141
  ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
1352
1142
  : getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
1353
1143
  if (this._isCiVisibility()) {
1354
- this._setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
1355
- coalesce(DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED, true))
1356
- this._setBoolean(calc, 'isFlakyTestRetriesEnabled',
1357
- coalesce(DD_CIVISIBILITY_FLAKY_RETRY_ENABLED, true))
1358
- calc.flakyTestRetriesCount = coalesce(maybeInt(DD_CIVISIBILITY_FLAKY_RETRY_COUNT), 5)
1144
+ this._setBoolean(calc, 'isEarlyFlakeDetectionEnabled', DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED ?? true)
1145
+ this._setBoolean(calc, 'isFlakyTestRetriesEnabled', DD_CIVISIBILITY_FLAKY_RETRY_ENABLED ?? true)
1146
+ calc.flakyTestRetriesCount = maybeInt(DD_CIVISIBILITY_FLAKY_RETRY_COUNT) ?? 5
1359
1147
  this._setBoolean(calc, 'isIntelligentTestRunnerEnabled', isTrue(this._isCiVisibilityItrEnabled()))
1360
1148
  this._setBoolean(calc, 'isManualApiEnabled', !isFalse(this._isCiVisibilityManualApiEnabled()))
1361
1149
  this._setString(calc, 'ciVisibilityTestSessionName', DD_TEST_SESSION_NAME)
@@ -1363,7 +1151,7 @@ class Config {
1363
1151
  this._setBoolean(calc, 'isTestDynamicInstrumentationEnabled', !isFalse(DD_TEST_FAILED_TEST_REPLAY_ENABLED))
1364
1152
  this._setBoolean(calc, 'isServiceUserProvided', !!this._env.service)
1365
1153
  this._setBoolean(calc, 'isTestManagementEnabled', !isFalse(DD_TEST_MANAGEMENT_ENABLED))
1366
- calc.testManagementAttemptToFixRetries = coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
1154
+ calc.testManagementAttemptToFixRetries = maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES) ?? 20
1367
1155
  this._setBoolean(calc, 'isImpactedTestsEnabled', !isFalse(DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED))
1368
1156
  }
1369
1157
  calc['dogstatsd.hostname'] = this._getHostname()