dd-trace 5.82.0 → 5.83.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 (134) hide show
  1. package/LICENSE-3rdparty.csv +78 -79
  2. package/ci/init.js +6 -6
  3. package/index.d.ts +152 -3
  4. package/loader-hook.mjs +1 -1
  5. package/package.json +58 -55
  6. package/packages/datadog-core/src/storage.js +7 -7
  7. package/packages/datadog-esbuild/index.js +6 -0
  8. package/packages/datadog-instrumentations/src/ai.js +7 -3
  9. package/packages/datadog-instrumentations/src/child_process.js +1 -1
  10. package/packages/datadog-instrumentations/src/cucumber.js +1 -1
  11. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  12. package/packages/datadog-instrumentations/src/helpers/instrumentations.js +4 -3
  13. package/packages/datadog-instrumentations/src/helpers/register.js +3 -7
  14. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +1 -1
  15. package/packages/datadog-instrumentations/src/http/client.js +2 -2
  16. package/packages/datadog-instrumentations/src/jest.js +35 -14
  17. package/packages/datadog-instrumentations/src/koa.js +2 -1
  18. package/packages/datadog-instrumentations/src/light-my-request.js +2 -2
  19. package/packages/datadog-instrumentations/src/mocha/main.js +2 -2
  20. package/packages/datadog-instrumentations/src/mocha/worker.js +1 -1
  21. package/packages/datadog-instrumentations/src/mocha.js +1 -1
  22. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  23. package/packages/datadog-instrumentations/src/mysql2.js +2 -2
  24. package/packages/datadog-instrumentations/src/net.js +13 -5
  25. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  26. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -4
  27. package/packages/datadog-instrumentations/src/pg.js +4 -2
  28. package/packages/datadog-instrumentations/src/playwright.js +3 -3
  29. package/packages/datadog-instrumentations/src/selenium.js +2 -2
  30. package/packages/datadog-instrumentations/src/undici.js +12 -1
  31. package/packages/datadog-plugin-aws-sdk/src/base.js +4 -4
  32. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +2 -2
  33. package/packages/datadog-plugin-azure-service-bus/src/producer.js +2 -2
  34. package/packages/datadog-plugin-cucumber/src/index.js +2 -2
  35. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -2
  36. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -2
  37. package/packages/datadog-plugin-express/src/code_origin.js +21 -15
  38. package/packages/datadog-plugin-fastify/src/code_origin.js +17 -4
  39. package/packages/datadog-plugin-jest/src/index.js +2 -2
  40. package/packages/datadog-plugin-mocha/src/index.js +2 -2
  41. package/packages/datadog-plugin-mongodb-core/src/index.js +2 -2
  42. package/packages/datadog-plugin-playwright/src/index.js +3 -3
  43. package/packages/datadog-plugin-undici/src/index.js +305 -2
  44. package/packages/datadog-plugin-vitest/src/index.js +5 -5
  45. package/packages/dd-trace/index.js +19 -0
  46. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +1 -1
  47. package/packages/dd-trace/src/appsec/rasp/index.js +2 -4
  48. package/packages/dd-trace/src/azure_metadata.js +8 -3
  49. package/packages/dd-trace/src/baggage.js +36 -11
  50. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -1
  51. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  52. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  53. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  54. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  55. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +3 -2
  56. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -3
  57. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +4 -4
  58. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
  59. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  60. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -4
  61. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -4
  62. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  63. package/packages/dd-trace/src/{config_defaults.js → config/defaults.js} +3 -3
  64. package/packages/dd-trace/src/{config-helper.js → config/helper.js} +88 -15
  65. package/packages/dd-trace/src/{config.js → config/index.js} +92 -45
  66. package/packages/dd-trace/src/config/remote_config.js +187 -19
  67. package/packages/dd-trace/src/{config_stable.js → config/stable.js} +20 -32
  68. package/packages/dd-trace/src/{supported-configurations.json → config/supported-configurations.json} +2 -0
  69. package/packages/dd-trace/src/crashtracking/crashtracker.js +1 -1
  70. package/packages/dd-trace/src/datastreams/processor.js +1 -1
  71. package/packages/dd-trace/src/datastreams/writer.js +1 -1
  72. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  73. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  74. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
  75. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +1 -1
  76. package/packages/dd-trace/src/debugger/index.js +83 -15
  77. package/packages/dd-trace/src/dogstatsd.js +2 -2
  78. package/packages/dd-trace/src/encode/0.4.js +2 -2
  79. package/packages/dd-trace/src/exporter.js +1 -1
  80. package/packages/dd-trace/src/exporters/agent/index.js +2 -4
  81. package/packages/dd-trace/src/exporters/agent/writer.js +9 -14
  82. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
  83. package/packages/dd-trace/src/exporters/common/docker.js +2 -2
  84. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  85. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  86. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  87. package/packages/dd-trace/src/flare/index.js +1 -1
  88. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  89. package/packages/dd-trace/src/index.js +4 -4
  90. package/packages/dd-trace/src/lambda/handler.js +2 -2
  91. package/packages/dd-trace/src/lambda/index.js +2 -2
  92. package/packages/dd-trace/src/lambda/runtime/patch.js +2 -2
  93. package/packages/dd-trace/src/lambda/runtime/ritm.js +2 -2
  94. package/packages/dd-trace/src/llmobs/constants/tags.js +8 -1
  95. package/packages/dd-trace/src/llmobs/index.js +2 -2
  96. package/packages/dd-trace/src/llmobs/noop.js +2 -0
  97. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +3 -4
  98. package/packages/dd-trace/src/llmobs/sdk.js +33 -6
  99. package/packages/dd-trace/src/llmobs/span_processor.js +17 -7
  100. package/packages/dd-trace/src/llmobs/tagger.js +175 -1
  101. package/packages/dd-trace/src/llmobs/writers/base.js +116 -37
  102. package/packages/dd-trace/src/llmobs/writers/spans.js +4 -3
  103. package/packages/dd-trace/src/log/index.js +5 -5
  104. package/packages/dd-trace/src/noop/proxy.js +3 -3
  105. package/packages/dd-trace/src/openfeature/writers/base.js +7 -8
  106. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +2 -2
  107. package/packages/dd-trace/src/opentelemetry/tracer.js +48 -6
  108. package/packages/dd-trace/src/opentracing/propagation/text_map.js +45 -21
  109. package/packages/dd-trace/src/opentracing/span.js +4 -4
  110. package/packages/dd-trace/src/plugin_manager.js +8 -6
  111. package/packages/dd-trace/src/plugins/util/ci.js +5 -8
  112. package/packages/dd-trace/src/plugins/util/git-cache.js +3 -3
  113. package/packages/dd-trace/src/plugins/util/test.js +1 -1
  114. package/packages/dd-trace/src/plugins/util/user-provided-git.js +41 -43
  115. package/packages/dd-trace/src/profiler.js +4 -39
  116. package/packages/dd-trace/src/profiling/config.js +74 -31
  117. package/packages/dd-trace/src/profiling/exporter_cli.js +5 -5
  118. package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
  119. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +9 -2
  120. package/packages/dd-trace/src/profiling/index.js +1 -1
  121. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  122. package/packages/dd-trace/src/profiling/profiler.js +57 -2
  123. package/packages/dd-trace/src/proxy.js +34 -5
  124. package/packages/dd-trace/src/remote_config/capabilities.js +3 -0
  125. package/packages/dd-trace/src/remote_config/index.js +1 -1
  126. package/packages/dd-trace/src/ritm.js +8 -4
  127. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  128. package/packages/dd-trace/src/serverless.js +2 -2
  129. package/packages/dd-trace/src/span_processor.js +2 -2
  130. package/packages/dd-trace/src/startup-log.js +6 -15
  131. package/packages/dd-trace/src/telemetry/endpoints.js +67 -5
  132. package/packages/dd-trace/src/telemetry/send-data.js +103 -4
  133. package/packages/dd-trace/src/telemetry/telemetry.js +229 -110
  134. /package/packages/dd-trace/src/{git_properties.js → config/git_properties.js} +0 -0
@@ -112,8 +112,10 @@ function wrapQuery (query) {
112
112
  arguments[0] = pgQuery
113
113
 
114
114
  const retval = query.apply(this, arguments)
115
- const queryQueue = this.queryQueue || this._queryQueue
116
- const activeQuery = this.activeQuery || this._activeQuery
115
+
116
+ const deperecated = Object.hasOwn(this, '_activeQuery')
117
+ const queryQueue = deperecated ? this._queryQueue : this.queryQueue
118
+ const activeQuery = deperecated ? this._activeQuery : this.activeQuery
117
119
 
118
120
  const newQuery = queryQueue.at(-1) || activeQuery
119
121
 
@@ -11,8 +11,8 @@ const {
11
11
  } = require('../../dd-trace/src/plugins/util/test')
12
12
  const log = require('../../dd-trace/src/log')
13
13
  const {
14
- getEnvironmentVariable
15
- } = require('../../dd-trace/src/config-helper')
14
+ getValueFromEnvSources
15
+ } = require('../../dd-trace/src/config/helper')
16
16
  const { DD_MAJOR } = require('../../../version')
17
17
  const { addHook, channel } = require('./helpers/instrument')
18
18
 
@@ -41,7 +41,7 @@ const testSuiteToTestStatuses = new Map()
41
41
  const testSuiteToErrors = new Map()
42
42
  const testsToTestStatuses = new Map()
43
43
 
44
- const RUM_FLUSH_WAIT_TIME = Number(getEnvironmentVariable('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 1000
44
+ const RUM_FLUSH_WAIT_TIME = Number(getValueFromEnvSources('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 1000
45
45
 
46
46
  let applyRepeatEachIndex = null
47
47
 
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const shimmer = require('../../datadog-shimmer')
4
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
4
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
5
5
  const { addHook, channel } = require('./helpers/instrument')
6
6
 
7
7
  const ciSeleniumDriverGetStartCh = channel('ci:selenium:driver:get')
@@ -17,7 +17,7 @@ if (window.DD_RUM && window.DD_RUM.stopSession) {
17
17
  const IS_RUM_ACTIVE_SCRIPT = 'return !!window.DD_RUM'
18
18
 
19
19
  const DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS =
20
- Number(getEnvironmentVariable('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 500
20
+ Number(getValueFromEnvSources('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 500
21
21
  const DD_CIVISIBILITY_TEST_EXECUTION_ID_COOKIE_NAME = 'datadog-ci-visibility-test-execution-id'
22
22
 
23
23
  // TODO: can we increase the supported version range?
@@ -3,6 +3,7 @@
3
3
  const tracingChannel = require('dc-polyfill').tracingChannel
4
4
 
5
5
  const shimmer = require('../../datadog-shimmer')
6
+ const satisfies = require('../../../vendor/dist/semifies')
6
7
  const {
7
8
  addHook
8
9
  } = require('./helpers/instrument')
@@ -10,9 +11,19 @@ const { createWrapFetch } = require('./helpers/fetch')
10
11
 
11
12
  const ch = tracingChannel('apm:undici:fetch')
12
13
 
14
+ // Undici 5.0.x has a bug where fetch doesn't preserve AggregateError in the error cause chain
15
+ // Use native DC only for versions where error handling works correctly
16
+ const NATIVE_DC_VERSION = '>=4.7.0 <5.0.0 || >=5.1.0'
17
+
13
18
  addHook({
14
19
  name: 'undici',
15
20
  versions: ['^4.4.1', '5', '>=6.0.0']
16
- }, undici => {
21
+ }, (undici, version) => {
22
+ // For versions with working native DC, let the plugin subscribe directly
23
+ if (satisfies(version, NATIVE_DC_VERSION)) {
24
+ return undici
25
+ }
26
+
27
+ // For older versions or those with buggy error handling, wrap fetch
17
28
  return shimmer.wrap(undici, 'fetch', createWrapFetch(undici.Request, ch))
18
29
  })
@@ -5,7 +5,7 @@ const ClientPlugin = require('../../dd-trace/src/plugins/client')
5
5
  const { storage } = require('../../datadog-core')
6
6
  const { isTrue } = require('../../dd-trace/src/util')
7
7
  const { tagsFromRequest, tagsFromResponse } = require('../../dd-trace/src/payload-tagging')
8
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
8
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
9
9
 
10
10
  class BaseAwsSdkPlugin extends ClientPlugin {
11
11
  static id = 'aws'
@@ -190,7 +190,7 @@ class BaseAwsSdkPlugin extends ClientPlugin {
190
190
 
191
191
  isEnabled (request) {
192
192
  const serviceId = this.serviceIdentifier.toUpperCase()
193
- const envVarValue = getEnvironmentVariable(`DD_TRACE_AWS_SDK_${serviceId}_ENABLED`)
193
+ const envVarValue = getValueFromEnvSources(`DD_TRACE_AWS_SDK_${serviceId}_ENABLED`)
194
194
  return envVarValue ? isTrue(envVarValue) : true
195
195
  }
196
196
 
@@ -273,9 +273,9 @@ function normalizeConfig (config, serviceIdentifier) {
273
273
  const serviceId = serviceIdentifier.toUpperCase()
274
274
  const batchPropagationEnabled = isTrue(
275
275
  specificConfig.batchPropagationEnabled ??
276
- getEnvironmentVariable(`DD_TRACE_AWS_SDK_${serviceId}_BATCH_PROPAGATION_ENABLED`) ??
276
+ getValueFromEnvSources(`DD_TRACE_AWS_SDK_${serviceId}_BATCH_PROPAGATION_ENABLED`) ??
277
277
  config.batchPropagationEnabled ??
278
- getEnvironmentVariable('DD_TRACE_AWS_SDK_BATCH_PROPAGATION_ENABLED')
278
+ getValueFromEnvSources('DD_TRACE_AWS_SDK_BATCH_PROPAGATION_ENABLED')
279
279
  )
280
280
 
281
281
  // Merge the specific config back into the main config
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
3
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
4
4
  const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
5
5
 
6
6
  const spanContexts = new WeakMap()
@@ -89,7 +89,7 @@ function injectTraceContext (tracer, span, event) {
89
89
  }
90
90
 
91
91
  function batchLinksAreEnabled () {
92
- const eh = getEnvironmentVariable('DD_TRACE_AZURE_EVENTHUBS_BATCH_LINKS_ENABLED')
92
+ const eh = getValueFromEnvSources('DD_TRACE_AZURE_EVENTHUBS_BATCH_LINKS_ENABLED')
93
93
  return eh !== 'false'
94
94
  }
95
95
 
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
3
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
4
4
  const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
5
5
  const spanContexts = new WeakMap()
6
6
 
@@ -90,7 +90,7 @@ function injectTraceContext (tracer, span, msg) {
90
90
  }
91
91
 
92
92
  function batchLinksAreEnabled () {
93
- const sb = getEnvironmentVariable('DD_TRACE_AZURE_SERVICEBUS_BATCH_LINKS_ENABLED')
93
+ const sb = getValueFromEnvSources('DD_TRACE_AZURE_SERVICEBUS_BATCH_LINKS_ENABLED')
94
94
  return sb !== 'false'
95
95
  }
96
96
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
4
4
  const { storage } = require('../../datadog-core')
5
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
5
+ const { getEnvironmentVariable, getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
6
6
 
7
7
  const {
8
8
  TEST_SKIP_REASON,
@@ -112,7 +112,7 @@ class CucumberPlugin extends CiPlugin {
112
112
  finishAllTraceSpans(this.testSessionSpan)
113
113
  this.telemetry.count(TELEMETRY_TEST_SESSION, {
114
114
  provider: this.ciProviderName,
115
- autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
115
+ autoInjected: !!getValueFromEnvSources('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
116
116
  })
117
117
 
118
118
  this.libraryConfig = null
@@ -51,7 +51,7 @@ const {
51
51
  } = require('../../dd-trace/src/plugins/util/test')
52
52
  const { isMarkedAsUnskippable } = require('../../datadog-plugin-jest/src/util')
53
53
  const { ORIGIN_KEY, COMPONENT } = require('../../dd-trace/src/constants')
54
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
54
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
55
55
  const { appClosing: appClosingTelemetry } = require('../../dd-trace/src/telemetry')
56
56
  const log = require('../../dd-trace/src/log')
57
57
 
@@ -644,7 +644,7 @@ class CypressPlugin {
644
644
  this.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'session')
645
645
  incrementCountMetric(TELEMETRY_TEST_SESSION, {
646
646
  provider: this.ciProviderName,
647
- autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
647
+ autoInjected: !!getValueFromEnvSources('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
648
648
  })
649
649
 
650
650
  finishAllTraceSpans(this.testSessionSpan)
@@ -3,13 +3,13 @@
3
3
  const Plugin = require('../../dd-trace/src/plugins/plugin')
4
4
  const telemetryMetrics = require('../../dd-trace/src/telemetry/metrics')
5
5
  const apiMetrics = telemetryMetrics.manager.namespace('tracers')
6
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
6
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
7
7
 
8
8
  // api ==> here
9
9
  const objectMap = new WeakMap()
10
10
 
11
11
  const injectionEnabledTag =
12
- `injection_enabled:${getEnvironmentVariable('DD_INJECTION_ENABLED') ? 'yes' : 'no'}`
12
+ `injection_enabled:${getValueFromEnvSources('DD_INJECTION_ENABLED') ? 'yes' : 'no'}`
13
13
 
14
14
  module.exports = class DdTraceApiPlugin extends Plugin {
15
15
  static id = 'dd-trace-api'
@@ -1,5 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ const dc = require('dc-polyfill')
4
+
3
5
  const { entryTags } = require('../../datadog-code-origin')
4
6
  const Plugin = require('../../dd-trace/src/plugins/plugin')
5
7
  const web = require('../../dd-trace/src/plugins/util/web')
@@ -12,29 +14,33 @@ class ExpressCodeOriginForSpansPlugin extends Plugin {
12
14
 
13
15
  const layerTags = new WeakMap()
14
16
 
15
- this.addSub('apm:express:middleware:enter', ({ req, layer }) => {
17
+ // Middleware/request handling: apply pre-computed tags to spans
18
+ const handleMiddlewareEnter = ({ req, layer }) => {
16
19
  const tags = layerTags.get(layer)
17
20
  if (!tags) return
18
21
  web.getContext(req)?.span?.addTags(tags)
19
- })
20
-
21
- this.addSub('apm:express:route:added', ({ topOfStackFunc, layer }) => {
22
- if (!layer) return
23
- if (layerTags.has(layer)) return
24
- layerTags.set(layer, entryTags(topOfStackFunc))
25
- })
22
+ }
26
23
 
27
- this.addSub('apm:router:middleware:enter', ({ req, layer }) => {
28
- const tags = layerTags.get(layer)
29
- if (!tags) return
30
- web.getContext(req)?.span?.addTags(tags)
31
- })
24
+ this.addSub('apm:express:middleware:enter', handleMiddlewareEnter)
25
+ this.addSub('apm:router:middleware:enter', handleMiddlewareEnter)
32
26
 
33
- this.addSub('apm:router:route:added', ({ topOfStackFunc, layer }) => {
27
+ // Route added handling: compute and cache tags
28
+ const handleRouteAdded = ({ topOfStackFunc, layer }) => {
34
29
  if (!layer) return
35
30
  if (layerTags.has(layer)) return
36
31
  layerTags.set(layer, entryTags(topOfStackFunc))
37
- })
32
+ }
33
+
34
+ if (this._tracerConfig.remoteConfig?.enabled) {
35
+ // When RC is enabled, use manual subscriptions (always pre-compute)
36
+ // This allows tags to be computed even when CO is disabled, so runtime enabling works
37
+ dc.channel('apm:express:route:added').subscribe(handleRouteAdded)
38
+ dc.channel('apm:router:route:added').subscribe(handleRouteAdded)
39
+ } else {
40
+ // When RC is disabled, use addSub (only computes when CO is enabled)
41
+ this.addSub('apm:express:route:added', handleRouteAdded)
42
+ this.addSub('apm:router:route:added', handleRouteAdded)
43
+ }
38
44
  }
39
45
  }
40
46
 
@@ -1,5 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ const dc = require('dc-polyfill')
4
+
3
5
  const { entryTags } = require('../../datadog-code-origin')
4
6
  const Plugin = require('../../dd-trace/src/plugins/plugin')
5
7
  const web = require('../../dd-trace/src/plugins/util/web')
@@ -18,11 +20,22 @@ class FastifyCodeOriginForSpansPlugin extends Plugin {
18
20
  web.getContext(req)?.span?.addTags(tags)
19
21
  })
20
22
 
21
- this.addSub('apm:fastify:route:added', ({ routeOptions, onRoute }) => {
22
- if (!routeOptions.config) routeOptions.config = {}
23
- routeOptions.config[kCodeOriginForSpansTagsSym] = entryTags(onRoute)
24
- })
23
+ if (this._tracerConfig.remoteConfig?.enabled) {
24
+ // When RC is enabled, use manual subscription (always pre-computes)
25
+ // This allows tags to be computed even when CO is disabled, so runtime enabling works
26
+ dc.channel('apm:fastify:route:added').subscribe(handleRouteAdded)
27
+ } else {
28
+ // When RC is disabled, use addSub (only computes when CO is enabled)
29
+ this.addSub('apm:fastify:route:added', handleRouteAdded)
30
+ }
25
31
  }
26
32
  }
27
33
 
28
34
  module.exports = FastifyCodeOriginForSpansPlugin
35
+
36
+ // Route added handling: compute and cache tags
37
+ function handleRouteAdded ({ routeOptions, onRoute }) {
38
+ if (!routeOptions.config) routeOptions.config = {}
39
+ if (routeOptions.config[kCodeOriginForSpansTagsSym]) return
40
+ routeOptions.config[kCodeOriginForSpansTagsSym] = entryTags(onRoute)
41
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
4
4
  const { storage } = require('../../datadog-core')
5
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
5
+ const { getEnvironmentVariable, getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
6
6
 
7
7
  const {
8
8
  TEST_STATUS,
@@ -161,7 +161,7 @@ class JestPlugin extends CiPlugin {
161
161
 
162
162
  this.telemetry.count(TELEMETRY_TEST_SESSION, {
163
163
  provider: this.ciProviderName,
164
- autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
164
+ autoInjected: !!getValueFromEnvSources('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
165
165
  })
166
166
 
167
167
  this.tracer._exporter.flush(() => {
@@ -2,7 +2,7 @@
2
2
 
3
3
  const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
4
4
  const { storage } = require('../../datadog-core')
5
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
5
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
6
6
 
7
7
  const {
8
8
  TEST_STATUS,
@@ -406,7 +406,7 @@ class MochaPlugin extends CiPlugin {
406
406
  finishAllTraceSpans(this.testSessionSpan)
407
407
  this.telemetry.count(TELEMETRY_TEST_SESSION, {
408
408
  provider: this.ciProviderName,
409
- autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
409
+ autoInjected: !!getValueFromEnvSources('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
410
410
  })
411
411
  }
412
412
  this.libraryConfig = null
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { isTrue } = require('../../dd-trace/src/util')
4
4
  const DatabasePlugin = require('../../dd-trace/src/plugins/database')
5
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
5
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
6
6
 
7
7
  class MongodbCorePlugin extends DatabasePlugin {
8
8
  static id = 'mongodb-core'
@@ -20,7 +20,7 @@ class MongodbCorePlugin extends DatabasePlugin {
20
20
  configure (config) {
21
21
  super.configure(config)
22
22
 
23
- const heartbeatFromEnv = getEnvironmentVariable('DD_TRACE_MONGODB_HEARTBEAT_ENABLED')
23
+ const heartbeatFromEnv = getValueFromEnvSources('DD_TRACE_MONGODB_HEARTBEAT_ENABLED')
24
24
 
25
25
  this.config.heartbeatEnabled = config.heartbeatEnabled ??
26
26
  (heartbeatFromEnv && isTrue(heartbeatFromEnv)) ??
@@ -3,7 +3,7 @@
3
3
  const { storage } = require('../../datadog-core')
4
4
  const id = require('../../dd-trace/src/id')
5
5
  const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
6
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
6
+ const { getValueFromEnvSources } = require('../../dd-trace/src/config/helper')
7
7
 
8
8
  const {
9
9
  TEST_STATUS,
@@ -106,7 +106,7 @@ class PlaywrightPlugin extends CiPlugin {
106
106
  finishAllTraceSpans(this.testSessionSpan)
107
107
  this.telemetry.count(TELEMETRY_TEST_SESSION, {
108
108
  provider: this.ciProviderName,
109
- autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
109
+ autoInjected: !!getValueFromEnvSources('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
110
110
  })
111
111
  appClosingTelemetry()
112
112
  this.tracer._exporter.flush(onDone)
@@ -393,7 +393,7 @@ class PlaywrightPlugin extends CiPlugin {
393
393
  span.finish()
394
394
 
395
395
  finishAllTraceSpans(span)
396
- if (getEnvironmentVariable('DD_PLAYWRIGHT_WORKER')) {
396
+ if (getValueFromEnvSources('DD_PLAYWRIGHT_WORKER')) {
397
397
  this.tracer._exporter.flush(onDone)
398
398
  }
399
399
  })