dd-trace 6.12.0 → 6.14.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 (251) hide show
  1. package/LICENSE-3rdparty.csv +3 -1
  2. package/ci/init.js +8 -3
  3. package/ci/test-optimization-validation/ci-package-scripts.js +2 -2
  4. package/ci/test-optimization-validation/ci-remediation.js +6 -6
  5. package/ci/test-optimization-validation/command-blocker.js +7 -5
  6. package/ci/test-optimization-validation/framework-adapters/cucumber.js +1 -1
  7. package/ci/test-optimization-validation/framework-adapters/cypress.js +9 -11
  8. package/ci/test-optimization-validation/framework-adapters/vitest.js +3 -3
  9. package/ci/test-optimization-validation/package-check.js +1 -1
  10. package/ci/test-optimization-validation/report-writer.js +7 -5
  11. package/ci/test-optimization-validation/scenarios/ci-wiring.js +5 -4
  12. package/ci/vitest-no-worker-init-runner-setup.mjs +8 -0
  13. package/ci/vitest-no-worker-init-setup.mjs +13 -13
  14. package/ci/vitest-no-worker-init-v5-setup.mjs +4 -0
  15. package/index.d.ts +127 -26
  16. package/package.json +22 -19
  17. package/packages/datadog-esbuild/index.js +3 -1
  18. package/packages/datadog-instrumentations/src/bunyan.js +4 -2
  19. package/packages/datadog-instrumentations/src/cypress-config.js +19 -17
  20. package/packages/datadog-instrumentations/src/fs.js +24 -20
  21. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -2
  22. package/packages/datadog-instrumentations/src/graphql.js +16 -16
  23. package/packages/datadog-instrumentations/src/helpers/bunyan.js +12 -3
  24. package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +504 -0
  25. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  26. package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +266 -0
  27. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +1 -2
  28. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +95 -30
  29. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/ai.js +0 -25
  30. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql-jit.js +83 -0
  31. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql.js +85 -1
  32. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  33. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/mercurius.js +30 -12
  34. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +13 -0
  35. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +279 -0
  36. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +12 -1
  37. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +562 -27
  38. package/packages/datadog-instrumentations/src/jest.js +165 -38
  39. package/packages/datadog-instrumentations/src/knex.js +76 -0
  40. package/packages/datadog-instrumentations/src/mariadb-bundle.js +1597 -0
  41. package/packages/datadog-instrumentations/src/mariadb.js +13 -0
  42. package/packages/datadog-instrumentations/src/mocha/common.js +59 -2
  43. package/packages/datadog-instrumentations/src/mocha/main.js +25 -15
  44. package/packages/datadog-instrumentations/src/mocha/utils.js +2 -1
  45. package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +98 -0
  46. package/packages/datadog-instrumentations/src/mocha/worker.js +12 -8
  47. package/packages/datadog-instrumentations/src/net.js +14 -17
  48. package/packages/datadog-instrumentations/src/next.js +212 -62
  49. package/packages/datadog-instrumentations/src/openai.js +42 -40
  50. package/packages/datadog-instrumentations/src/pg.js +15 -0
  51. package/packages/datadog-instrumentations/src/pino.js +15 -4
  52. package/packages/datadog-instrumentations/src/playwright.js +137 -27
  53. package/packages/datadog-instrumentations/src/rum-browser-scripts.js +40 -0
  54. package/packages/datadog-instrumentations/src/sequelize.js +94 -2
  55. package/packages/datadog-instrumentations/src/undici.js +53 -4
  56. package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +44 -7
  57. package/packages/datadog-instrumentations/src/vitest-main.js +92 -9
  58. package/packages/datadog-instrumentations/src/vitest-worker.js +82 -14
  59. package/packages/datadog-instrumentations/src/webdriverio.js +986 -1
  60. package/packages/datadog-instrumentations/src/winston.js +6 -3
  61. package/packages/datadog-plugin-amqp10/src/consumer.js +3 -1
  62. package/packages/datadog-plugin-amqp10/src/producer.js +3 -1
  63. package/packages/datadog-plugin-amqp10/src/util.js +2 -1
  64. package/packages/datadog-plugin-avsc/src/schema_iterator.js +6 -1
  65. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +16 -5
  66. package/packages/datadog-plugin-cassandra-driver/src/index.js +8 -3
  67. package/packages/datadog-plugin-cucumber/src/index.js +0 -2
  68. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +262 -48
  69. package/packages/datadog-plugin-cypress/src/support.js +1 -0
  70. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +4 -1
  71. package/packages/datadog-plugin-graphql/src/execute.js +998 -196
  72. package/packages/datadog-plugin-graphql/src/index.js +27 -7
  73. package/packages/datadog-plugin-graphql/src/jit.js +136 -0
  74. package/packages/datadog-plugin-graphql/src/request.js +18 -27
  75. package/packages/datadog-plugin-graphql/src/resolve-error.js +108 -0
  76. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -2
  77. package/packages/datadog-plugin-graphql/src/tools/transforms.js +45 -3
  78. package/packages/datadog-plugin-graphql/src/utils.js +208 -120
  79. package/packages/datadog-plugin-graphql/src/validate.js +10 -23
  80. package/packages/datadog-plugin-http/src/client.js +2 -15
  81. package/packages/datadog-plugin-http2/src/client.js +2 -15
  82. package/packages/datadog-plugin-jest/src/index.js +0 -6
  83. package/packages/datadog-plugin-langchain/src/tracing.js +7 -0
  84. package/packages/datadog-plugin-mocha/src/index.js +403 -75
  85. package/packages/datadog-plugin-mongodb-core/src/query.js +6 -0
  86. package/packages/datadog-plugin-mysql/src/index.js +41 -15
  87. package/packages/datadog-plugin-net/src/tcp.js +3 -1
  88. package/packages/datadog-plugin-next/src/index.js +63 -29
  89. package/packages/datadog-plugin-openai-agents/src/integration.js +15 -11
  90. package/packages/datadog-plugin-playwright/src/index.js +176 -28
  91. package/packages/datadog-plugin-undici/src/index.js +29 -56
  92. package/packages/datadog-plugin-vitest/src/index.js +6 -12
  93. package/packages/dd-trace/src/aiguard/evaluation.js +96 -21
  94. package/packages/dd-trace/src/aiguard/integrations/vercel-ai.js +2 -3
  95. package/packages/dd-trace/src/aiguard/messages/anthropic.js +29 -10
  96. package/packages/dd-trace/src/aiguard/messages/openai.js +8 -1
  97. package/packages/dd-trace/src/aiguard/messages/vercel-ai.js +20 -6
  98. package/packages/dd-trace/src/aiguard/noop.js +9 -1
  99. package/packages/dd-trace/src/aiguard/redaction.js +183 -0
  100. package/packages/dd-trace/src/aiguard/sdk.js +7 -2
  101. package/packages/dd-trace/src/aiguard/tags.js +2 -0
  102. package/packages/dd-trace/src/appsec/api_security/index.js +23 -6
  103. package/packages/dd-trace/src/appsec/api_security/sampler.js +99 -40
  104. package/packages/dd-trace/src/appsec/graphql.js +6 -2
  105. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +3 -3
  106. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -1
  107. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +8 -2
  108. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +11 -36
  109. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +1 -1
  110. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +10 -9
  111. package/packages/dd-trace/src/appsec/lambda.js +44 -26
  112. package/packages/dd-trace/src/appsec/rule_manager.js +2 -0
  113. package/packages/dd-trace/src/ci-visibility/encode/json-encoder.js +32 -2
  114. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +8 -8
  115. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +6 -4
  116. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +20 -4
  117. package/packages/dd-trace/src/ci-visibility/exporters/agentless/request-tracker.js +7 -150
  118. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +7 -6
  119. package/packages/dd-trace/src/ci-visibility/exporters/agents.js +54 -0
  120. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/writer.js +1 -2
  121. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +397 -234
  122. package/packages/dd-trace/src/ci-visibility/exporters/limits.js +9 -0
  123. package/packages/dd-trace/src/ci-visibility/exporters/request.js +323 -31
  124. package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +42 -0
  125. package/packages/dd-trace/src/ci-visibility/final-flush.js +21 -0
  126. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +57 -18
  127. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +0 -3
  128. package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +164 -71
  129. package/packages/dd-trace/src/ci-visibility/requests/video-request.js +176 -0
  130. package/packages/dd-trace/src/ci-visibility/telemetry.js +10 -7
  131. package/packages/dd-trace/src/ci-visibility/test-video.js +61 -0
  132. package/packages/dd-trace/src/config/generated-config-types.d.ts +10 -0
  133. package/packages/dd-trace/src/config/index.js +75 -14
  134. package/packages/dd-trace/src/config/parsers.js +11 -1
  135. package/packages/dd-trace/src/config/stable.js +3 -3
  136. package/packages/dd-trace/src/config/supported-configurations.json +47 -2
  137. package/packages/dd-trace/src/crashtracking/crashtracker.js +82 -18
  138. package/packages/dd-trace/src/debugger/config.js +12 -1
  139. package/packages/dd-trace/src/debugger/constants.js +1 -0
  140. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +2 -1
  141. package/packages/dd-trace/src/debugger/devtools_client/request-options.js +33 -0
  142. package/packages/dd-trace/src/debugger/devtools_client/send.js +7 -39
  143. package/packages/dd-trace/src/debugger/devtools_client/status.js +11 -6
  144. package/packages/dd-trace/src/debugger/devtools_client/tags.js +41 -0
  145. package/packages/dd-trace/src/debugger/index.js +23 -3
  146. package/packages/dd-trace/src/dogstatsd.js +532 -71
  147. package/packages/dd-trace/src/encode/0.4-cross-payload.js +170 -0
  148. package/packages/dd-trace/src/encode/0.4.js +5 -5
  149. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +9 -8
  150. package/packages/dd-trace/src/evp_proxy/direct.js +27 -23
  151. package/packages/dd-trace/src/exporters/agent/index.js +24 -3
  152. package/packages/dd-trace/src/exporters/agent/writer.js +28 -11
  153. package/packages/dd-trace/src/exporters/agentless/index.js +7 -9
  154. package/packages/dd-trace/src/exporters/agentless/writer.js +100 -118
  155. package/packages/dd-trace/src/exporters/common/agents.js +28 -6
  156. package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -2
  157. package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +191 -0
  158. package/packages/dd-trace/src/exporters/common/request.js +31 -11
  159. package/packages/dd-trace/src/exporters/common/url.js +40 -1
  160. package/packages/dd-trace/src/exporters/common/writer.js +31 -7
  161. package/packages/dd-trace/src/exporters/span-stats/index.js +23 -4
  162. package/packages/dd-trace/src/external-logger/src/index.js +4 -3
  163. package/packages/dd-trace/src/flush.js +105 -0
  164. package/packages/dd-trace/src/id.js +14 -0
  165. package/packages/dd-trace/src/index.js +5 -2
  166. package/packages/dd-trace/src/llmobs/experiments/client.js +4 -0
  167. package/packages/dd-trace/src/llmobs/experiments/dataset.js +52 -2
  168. package/packages/dd-trace/src/llmobs/experiments/experiment.js +420 -105
  169. package/packages/dd-trace/src/llmobs/experiments/index.js +54 -42
  170. package/packages/dd-trace/src/llmobs/experiments/noop.js +39 -8
  171. package/packages/dd-trace/src/llmobs/experiments/result.js +1 -0
  172. package/packages/dd-trace/src/llmobs/experiments/util.js +21 -0
  173. package/packages/dd-trace/src/llmobs/index.js +111 -48
  174. package/packages/dd-trace/src/llmobs/noop.js +2 -1
  175. package/packages/dd-trace/src/llmobs/plugins/ai/ddTelemetry.js +22 -71
  176. package/packages/dd-trace/src/llmobs/plugins/ai/vercelTelemetry.js +23 -13
  177. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +8 -4
  178. package/packages/dd-trace/src/llmobs/plugins/claude-agent-sdk/index.js +6 -3
  179. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +7 -0
  180. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +13 -6
  181. package/packages/dd-trace/src/llmobs/plugins/openai-agents/utils.js +5 -7
  182. package/packages/dd-trace/src/llmobs/util.js +0 -33
  183. package/packages/dd-trace/src/llmobs/writers/base.js +106 -53
  184. package/packages/dd-trace/src/log/index.js +7 -1
  185. package/packages/dd-trace/src/log-submission/log-submission-plugin.js +249 -0
  186. package/packages/dd-trace/src/noop/span.js +5 -0
  187. package/packages/dd-trace/src/openfeature/writers/base.js +14 -12
  188. package/packages/dd-trace/src/openfeature/writers/exposures.js +8 -1
  189. package/packages/dd-trace/src/openfeature/writers/util.js +1 -1
  190. package/packages/dd-trace/src/opentelemetry/logs/batch_log_processor.js +45 -3
  191. package/packages/dd-trace/src/opentelemetry/logs/index.js +9 -25
  192. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +7 -4
  193. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +14 -4
  194. package/packages/dd-trace/src/opentelemetry/metrics/index.js +18 -23
  195. package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +8 -0
  196. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +18 -6
  197. package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_exporter.js +14 -2
  198. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +25 -5
  199. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +61 -25
  200. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +19 -4
  201. package/packages/dd-trace/src/opentelemetry/resource-attributes.js +55 -0
  202. package/packages/dd-trace/src/opentelemetry/trace/index.js +6 -1
  203. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +10 -0
  204. package/packages/dd-trace/src/opentelemetry/tracer.js +26 -2
  205. package/packages/dd-trace/src/opentracing/propagation/text_map.js +494 -351
  206. package/packages/dd-trace/src/opentracing/span.js +28 -0
  207. package/packages/dd-trace/src/otel-thread-ctx.js +23 -5
  208. package/packages/dd-trace/src/payload-tagging/index.js +2 -1
  209. package/packages/dd-trace/src/plugin_manager.js +2 -0
  210. package/packages/dd-trace/src/plugins/ci_plugin.js +1 -6
  211. package/packages/dd-trace/src/plugins/tracing.js +12 -10
  212. package/packages/dd-trace/src/plugins/util/ci.js +3 -1
  213. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +16 -15
  214. package/packages/dd-trace/src/plugins/util/status-validator.js +98 -0
  215. package/packages/dd-trace/src/plugins/util/test.js +157 -41
  216. package/packages/dd-trace/src/plugins/util/url.js +2 -2
  217. package/packages/dd-trace/src/plugins/util/web.js +6 -74
  218. package/packages/dd-trace/src/profiling/config.js +1 -0
  219. package/packages/dd-trace/src/profiling/oom.js +11 -5
  220. package/packages/dd-trace/src/profiling/profiler.js +30 -13
  221. package/packages/dd-trace/src/profiling/profilers/events.js +3 -3
  222. package/packages/dd-trace/src/profiling/profilers/space.js +38 -11
  223. package/packages/dd-trace/src/profiling/profilers/wall.js +14 -14
  224. package/packages/dd-trace/src/profiling/webspan-utils.js +7 -4
  225. package/packages/dd-trace/src/proxy.js +108 -10
  226. package/packages/dd-trace/src/remote_config/index.js +319 -101
  227. package/packages/dd-trace/src/remote_config/scheduler.js +37 -12
  228. package/packages/dd-trace/src/runtime_metrics/client.js +37 -8
  229. package/packages/dd-trace/src/runtime_metrics/index.js +5 -0
  230. package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +10 -1
  231. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +22 -7
  232. package/packages/dd-trace/src/sampling_rule.js +36 -9
  233. package/packages/dd-trace/src/serverless/telemetry-delivery-tracker.js +51 -0
  234. package/packages/dd-trace/src/serverless/vercel.js +155 -0
  235. package/packages/dd-trace/src/serverless.js +45 -21
  236. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  237. package/packages/dd-trace/src/span_stats.js +64 -31
  238. package/packages/dd-trace/src/startup-log.js +3 -2
  239. package/packages/dd-trace/src/telemetry/agentless-url.js +28 -0
  240. package/packages/dd-trace/src/telemetry/send-data.js +18 -16
  241. package/packages/dd-trace/src/telemetry/session-propagation.js +3 -2
  242. package/packages/dd-trace/src/tracer.js +26 -5
  243. package/packages/dd-trace/src/tracer_metadata.js +11 -3
  244. package/packages/dd-trace/src/web-tags-cache.js +67 -13
  245. package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -1
  246. package/vendor/dist/@datadog/sketches-js/index.js +1 -1
  247. package/vendor/dist/protobufjs/index.js +1 -1
  248. package/vendor/dist/protobufjs/minimal/index.js +1 -1
  249. package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +0 -27
  250. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +0 -53
  251. package/packages/dd-trace/src/encode/agentless-json.js +0 -209
@@ -1,5 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ const { channel } = require('dc-polyfill')
4
+ const uuid = require('../../../vendor/dist/crypto-randomuuid')
3
5
  const NoopProxy = require('./noop/proxy')
4
6
  const DatadogTracer = require('./tracer')
5
7
  const getConfig = require('./config')
@@ -7,12 +9,18 @@ const { getEnvironmentVariable } = require('./config/helper')
7
9
  const runtimeMetrics = require('./runtime_metrics')
8
10
  const log = require('./log')
9
11
  const { setStartupLogPluginManager, startupLog } = require('./startup-log')
10
- const DynamicInstrumentation = require('./debugger')
11
12
  const telemetry = require('./telemetry')
12
13
  const nomenclature = require('./service-naming')
13
14
  const PluginManager = require('./plugin_manager')
14
15
  const NoopDogStatsDClient = require('./noop/dogstatsd')
15
- const { IS_SERVERLESS } = require('./serverless')
16
+ const {
17
+ IS_AWS_LAMBDA_MICROVM,
18
+ IS_SERVERLESS,
19
+ NODE_BUNDLES_OPENSSL,
20
+ initializeServerlessTelemetry,
21
+ supportsServerlessTelemetryRetention,
22
+ } = require('./serverless')
23
+ const { flushServerlessTelemetry, registerTelemetryFlusher } = require('./flush')
16
24
  const processTags = require('./process-tags')
17
25
  const { isTrue } = require('./util')
18
26
  const {
@@ -41,6 +49,20 @@ const OPENFEATURE_STATE_NOOP = 0
41
49
  const OPENFEATURE_STATE_LAZY = 1
42
50
  const OPENFEATURE_STATE_ACTIVE = 2
43
51
 
52
+ let dynamicInstrumentation
53
+
54
+ function getDynamicInstrumentation () {
55
+ dynamicInstrumentation ??= require('./debugger')
56
+ return dynamicInstrumentation
57
+ }
58
+
59
+ const UUID_POOL_SIZE = 128
60
+
61
+ const BUNDLED_OPENSSL_WARNING = 'This Node.js build bundles its own OpenSSL, so its random number ' +
62
+ 'generator is not reseeded when a MicroVM clone resumes and trace IDs may repeat across clones. ' +
63
+ 'Install Node.js from the Amazon Linux 2023 repositories (for example `dnf install nodejs22`) so it ' +
64
+ 'links the base image\'s snapsafe OpenSSL.'
65
+
44
66
  class LazyModule {
45
67
  constructor (provider) {
46
68
  this.provider = provider
@@ -100,6 +122,15 @@ class Tracer extends NoopProxy {
100
122
  this._pluginManager = new PluginManager(this)
101
123
  this.dogstatsd = new NoopDogStatsDClient()
102
124
  this._tracingInitialized = false
125
+ // Logs and metrics can need retention even when tracing is disabled.
126
+ if (supportsServerlessTelemetryRetention()) {
127
+ this._serverlessTelemetry = {
128
+ flushAll: (done, options) => {
129
+ if (typeof this._tracer?.flushAll === 'function') this._tracer.flushAll(done, options)
130
+ else flushServerlessTelemetry(done, options)
131
+ },
132
+ }
133
+ }
103
134
  this._flare = new LazyModule(() => require('./flare'))
104
135
  this.setBaggageItem = setBaggageItem
105
136
  this.getBaggageItem = getBaggageItem
@@ -134,6 +165,10 @@ class Tracer extends NoopProxy {
134
165
  try {
135
166
  const config = getConfig(options) // TODO: support dynamic code config
136
167
 
168
+ if (IS_AWS_LAMBDA_MICROVM) {
169
+ this.#registerMicroVmRunHook(config)
170
+ }
171
+
137
172
  // Add config dependent process tags
138
173
  processTags.initialize(config)
139
174
 
@@ -155,7 +190,7 @@ class Tracer extends NoopProxy {
155
190
 
156
191
  telemetry.start(config, this._pluginManager)
157
192
 
158
- if (config.dogstatsd && !isOfflineTestOptimizationValidation()) {
193
+ if (config.dogstatsd && !config.DD_AGENTLESS_ENABLED && !isOfflineTestOptimizationValidation()) {
159
194
  // Custom Metrics
160
195
  lazyProxy(this, 'dogstatsd', () => require('./dogstatsd').CustomMetrics, config)
161
196
  }
@@ -205,7 +240,7 @@ class Tracer extends NoopProxy {
205
240
  }
206
241
 
207
242
  if (config.dynamicInstrumentation.enabled) {
208
- DynamicInstrumentation.start(config, rc)
243
+ getDynamicInstrumentation().start(config, rc)
209
244
  }
210
245
 
211
246
  const openfeatureRemoteConfig = require('./openfeature/remote_config')
@@ -255,13 +290,20 @@ class Tracer extends NoopProxy {
255
290
 
256
291
  if (config.runtimeMetrics.enabled) {
257
292
  runtimeMetrics.start(config)
293
+ // Agent trace response metrics are recorded asynchronously, so drain
294
+ // runtime metrics after the trace export has completed.
295
+ registerTelemetryFlusher(done => runtimeMetrics.flush(done), { afterTrace: true })
258
296
  }
259
297
 
260
298
  this.#updateTracing(config)
261
299
 
262
- this._modules.rewriter.enable(config)
300
+ if (config.iast.enabled) {
301
+ this._modules.rewriter.enable(config)
302
+ }
263
303
 
264
- if (config.DD_TRACE_ENABLED && config.testOptimization.DD_CIVISIBILITY_MANUAL_API_ENABLED) {
304
+ if (config.isCiVisibility &&
305
+ config.DD_TRACE_ENABLED &&
306
+ config.testOptimization.DD_CIVISIBILITY_MANUAL_API_ENABLED) {
265
307
  const TestApiManualPlugin = require('./ci-visibility/test-api-manual/test-api-manual-plugin')
266
308
  this._testApiManualPlugin = new TestApiManualPlugin(this)
267
309
  // `shouldGetEnvironmentData` is passed as false so that we only lazily calculate it
@@ -271,8 +313,8 @@ class Tracer extends NoopProxy {
271
313
  }
272
314
  if (config.DD_AGENTLESS_LOG_SUBMISSION_ENABLED) {
273
315
  if (config.DD_API_KEY) {
274
- const LogSubmissionPlugin = require('./ci-visibility/log-submission/log-submission-plugin')
275
- const automaticLogPlugin = new LogSubmissionPlugin(this)
316
+ const LogSubmissionPlugin = require('./log-submission/log-submission-plugin')
317
+ const automaticLogPlugin = new LogSubmissionPlugin(this, config)
276
318
  automaticLogPlugin.configure({ ...config, enabled: true })
277
319
  } else {
278
320
  log.warn(
@@ -282,7 +324,7 @@ class Tracer extends NoopProxy {
282
324
  }
283
325
  }
284
326
 
285
- if (config.testOptimization.DD_TEST_FAILED_TEST_REPLAY_ENABLED) {
327
+ if (config.isCiVisibility && config.testOptimization.DD_TEST_FAILED_TEST_REPLAY_ENABLED) {
286
328
  const getDynamicInstrumentationClient = require('./ci-visibility/dynamic-instrumentation')
287
329
  // We instantiate the client but do not start the Worker here. The worker is started lazily
288
330
  getDynamicInstrumentationClient(config)
@@ -295,6 +337,42 @@ class Tracer extends NoopProxy {
295
337
  return this
296
338
  }
297
339
 
340
+ /**
341
+ * Listens for the MicroVM /run lifecycle event and triggers a one-time
342
+ * identity reset on first fire.
343
+ *
344
+ * @param {import('./config/config-base')} config
345
+ */
346
+ #registerMicroVmRunHook (config) {
347
+ // Node reseeds its CSPRNG from the kernel on clone resume only when it links the base image's
348
+ // snapsafe libcrypto; a bundled OpenSSL keeps the snapshot's DRBG state, so the refresh below
349
+ // cannot produce distinct IDs. Logged at registration, during the image build, where the
350
+ // Dockerfile can still be fixed — not once per clone.
351
+ if (NODE_BUNDLES_OPENSSL) {
352
+ log.error(BUNDLED_OPENSSL_WARNING)
353
+ }
354
+
355
+ const ch = channel('http.server.request.start')
356
+
357
+ const onHttpRequest = ({ request }) => {
358
+ if (request.method === 'POST' && request.url === '/aws/lambda-microvms/runtime/v1/run') {
359
+ ch.unsubscribe(onHttpRequest)
360
+ drainUuidPool()
361
+ channel('datadog:identity:update').publish(config)
362
+ if (this._tracingInitialized) {
363
+ const storeTracerMetadata = require('./tracer_metadata')
364
+ const metadata = storeTracerMetadata(config)
365
+ if (metadata === undefined) {
366
+ log.warn('Could not store tracer configuration for service discovery')
367
+ }
368
+ }
369
+ channel('datadog:identity:refresh').publish(config)
370
+ }
371
+ }
372
+
373
+ ch.subscribe(onHttpRequest)
374
+ }
375
+
298
376
  /**
299
377
  * @param {import('./config/config-base')} config - Tracer configuration
300
378
  */
@@ -389,10 +467,12 @@ class Tracer extends NoopProxy {
389
467
  if (this._tracingInitialized) {
390
468
  this._tracer.configure(config)
391
469
  this._pluginManager.configure(config)
392
- DynamicInstrumentation.configure(config)
470
+ dynamicInstrumentation?.configure(config)
393
471
  setStartupLogPluginManager(this._pluginManager)
394
472
  startupLog()
395
473
  }
474
+
475
+ initializeServerlessTelemetry(this._serverlessTelemetry)
396
476
  }
397
477
 
398
478
  /**
@@ -404,6 +484,9 @@ class Tracer extends NoopProxy {
404
484
  */
405
485
  #updateDebugger (config, rc) {
406
486
  const shouldBeEnabled = config.dynamicInstrumentation.enabled
487
+ if (!shouldBeEnabled && dynamicInstrumentation === undefined) return
488
+
489
+ const DynamicInstrumentation = getDynamicInstrumentation()
407
490
  const isCurrentlyStarted = DynamicInstrumentation.isStarted()
408
491
 
409
492
  if (shouldBeEnabled) {
@@ -487,4 +570,19 @@ function isOfflineValidationExporter (options) {
487
570
  return OFFLINE_VALIDATION_EXPORTERS.has(options?.experimental?.exporter)
488
571
  }
489
572
 
573
+ /**
574
+ * Discards Node's buffered UUID entropy, so the identity subscribers draw from bytes generated
575
+ * after the clone resumed.
576
+ *
577
+ * `crypto.randomUUID()` serves `kBatchSize` (128, see `lib/internal/crypto/random.js`) UUIDs from one
578
+ * process-wide pool and refills it only when its cursor wraps back to 0. A full cycle crosses the
579
+ * cursor exactly once from any starting position, and the position is not observable, so the count
580
+ * has to be the batch size rather than the number of UUIDs we need.
581
+ */
582
+ function drainUuidPool () {
583
+ for (let index = 0; index < UUID_POOL_SIZE; index++) {
584
+ uuid()
585
+ }
586
+ }
587
+
490
588
  module.exports = Tracer