dd-trace 5.108.0 → 5.110.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 (174) hide show
  1. package/ci/init.js +4 -3
  2. package/index.d.ts +88 -25
  3. package/loader-hook.mjs +88 -2
  4. package/package.json +19 -14
  5. package/packages/datadog-esbuild/index.js +26 -0
  6. package/packages/datadog-esbuild/src/utils.js +46 -3
  7. package/packages/datadog-instrumentations/src/ai.js +43 -48
  8. package/packages/datadog-instrumentations/src/aws-durable-execution-sdk-js-context-methods.js +18 -0
  9. package/packages/datadog-instrumentations/src/aws-durable-execution-sdk-js.js +111 -0
  10. package/packages/datadog-instrumentations/src/aws-sdk.js +3 -1
  11. package/packages/datadog-instrumentations/src/connect.js +4 -3
  12. package/packages/datadog-instrumentations/src/electron.js +1 -1
  13. package/packages/datadog-instrumentations/src/fastify.js +4 -12
  14. package/packages/datadog-instrumentations/src/graphql.js +17 -6
  15. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +81 -8
  16. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  17. package/packages/datadog-instrumentations/src/helpers/instrument.js +27 -2
  18. package/packages/datadog-instrumentations/src/helpers/optional-peer-bundler.js +65 -0
  19. package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
  20. package/packages/datadog-instrumentations/src/helpers/require-optional-peer.js +17 -0
  21. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/aws-durable-execution-sdk-js.js +31 -0
  22. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  23. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.mjs +18 -2
  24. package/packages/datadog-instrumentations/src/http/client.js +12 -2
  25. package/packages/datadog-instrumentations/src/ioredis.js +0 -1
  26. package/packages/datadog-instrumentations/src/iovalkey.js +1 -2
  27. package/packages/datadog-instrumentations/src/koa.js +3 -2
  28. package/packages/datadog-instrumentations/src/mariadb.js +4 -2
  29. package/packages/datadog-instrumentations/src/mocha/main.js +3 -3
  30. package/packages/datadog-instrumentations/src/next.js +44 -10
  31. package/packages/datadog-instrumentations/src/openai.js +77 -18
  32. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +7 -6
  33. package/packages/datadog-instrumentations/src/playwright.js +1 -1
  34. package/packages/datadog-instrumentations/src/redis.js +0 -1
  35. package/packages/datadog-instrumentations/src/restify.js +4 -3
  36. package/packages/datadog-instrumentations/src/router.js +18 -5
  37. package/packages/datadog-instrumentations/src/selenium.js +1 -2
  38. package/packages/datadog-instrumentations/src/tedious.js +28 -0
  39. package/packages/datadog-instrumentations/src/vitest.js +323 -7
  40. package/packages/datadog-plugin-avsc/src/schema_iterator.js +2 -2
  41. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/checkpoint.js +31 -0
  42. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/client.js +55 -0
  43. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/context.js +114 -0
  44. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/handler.js +128 -0
  45. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/index.js +19 -0
  46. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/trace-checkpoint.js +224 -0
  47. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/util.js +43 -0
  48. package/packages/datadog-plugin-aws-sdk/src/base.js +14 -16
  49. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +43 -6
  50. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +100 -37
  51. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +108 -99
  52. package/packages/datadog-plugin-bullmq/src/filter.js +35 -0
  53. package/packages/datadog-plugin-bullmq/src/producer.js +84 -4
  54. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +9 -1
  55. package/packages/datadog-plugin-fs/src/index.js +1 -0
  56. package/packages/datadog-plugin-http/src/client.js +8 -3
  57. package/packages/datadog-plugin-http2/src/client.js +5 -2
  58. package/packages/datadog-plugin-mysql/src/index.js +7 -2
  59. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +2 -2
  60. package/packages/datadog-plugin-redis/src/index.js +1 -2
  61. package/packages/datadog-plugin-undici/src/index.js +5 -2
  62. package/packages/datadog-plugin-vitest/src/index.js +11 -2
  63. package/packages/datadog-webpack/index.js +17 -1
  64. package/packages/datadog-webpack/src/optional-peer-loader.js +17 -0
  65. package/packages/dd-trace/src/aiguard/channels.js +0 -1
  66. package/packages/dd-trace/src/aiguard/index.js +11 -49
  67. package/packages/dd-trace/src/aiguard/integrations/evaluate.js +46 -0
  68. package/packages/dd-trace/src/aiguard/integrations/openai.js +66 -0
  69. package/packages/dd-trace/src/aiguard/integrations/vercel-ai.js +78 -0
  70. package/packages/{datadog-instrumentations/src/helpers/ai-messages.js → dd-trace/src/aiguard/messages/openai.js} +85 -193
  71. package/packages/dd-trace/src/aiguard/messages/vercel-ai.js +185 -0
  72. package/packages/dd-trace/src/aiguard/sdk.js +13 -1
  73. package/packages/dd-trace/src/appsec/api_security/index.js +55 -0
  74. package/packages/dd-trace/src/appsec/api_security/sampler.js +147 -0
  75. package/packages/dd-trace/src/appsec/channels.js +1 -0
  76. package/packages/dd-trace/src/appsec/downstream_requests.js +111 -58
  77. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +54 -12
  78. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +5 -1
  79. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +29 -4
  80. package/packages/dd-trace/src/appsec/index.js +10 -6
  81. package/packages/dd-trace/src/appsec/rasp/ssrf.js +19 -11
  82. package/packages/dd-trace/src/appsec/reporter.js +1 -0
  83. package/packages/dd-trace/src/appsec/telemetry/api_security.js +34 -0
  84. package/packages/dd-trace/src/appsec/telemetry/index.js +26 -0
  85. package/packages/dd-trace/src/ci-visibility/requests/request.js +1 -17
  86. package/packages/dd-trace/src/config/defaults.js +22 -3
  87. package/packages/dd-trace/src/config/generated-config-types.d.ts +538 -1
  88. package/packages/dd-trace/src/config/helper.js +133 -33
  89. package/packages/dd-trace/src/config/index.js +4 -1
  90. package/packages/dd-trace/src/config/parsers.js +19 -1
  91. package/packages/dd-trace/src/config/supported-configurations.json +45 -5
  92. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +49 -35
  93. package/packages/dd-trace/src/debugger/devtools_client/index.js +31 -66
  94. package/packages/dd-trace/src/debugger/devtools_client/probe_sampler.js +83 -0
  95. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -0
  96. package/packages/dd-trace/src/debugger/index.js +5 -0
  97. package/packages/dd-trace/src/debugger/probe_sampler.js +112 -0
  98. package/packages/dd-trace/src/debugger/probe_sampler_constants.js +19 -0
  99. package/packages/dd-trace/src/dogstatsd.js +15 -8
  100. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +77 -26
  101. package/packages/dd-trace/src/exporters/agentless/index.js +7 -5
  102. package/packages/dd-trace/src/exporters/agentless/intake.js +43 -0
  103. package/packages/dd-trace/src/exporters/agentless/writer.js +5 -4
  104. package/packages/dd-trace/src/exporters/common/request.js +1 -20
  105. package/packages/dd-trace/src/exporters/common/url.js +34 -0
  106. package/packages/dd-trace/src/exporters/span-stats/writer.js +1 -3
  107. package/packages/dd-trace/src/guardrails/index.js +8 -5
  108. package/packages/dd-trace/src/index.js +6 -4
  109. package/packages/dd-trace/src/llmobs/constants/tags.js +6 -0
  110. package/packages/dd-trace/src/llmobs/index.js +16 -5
  111. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +3 -3
  112. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +5 -1
  113. package/packages/dd-trace/src/llmobs/sdk.js +5 -3
  114. package/packages/dd-trace/src/llmobs/span_processor.js +4 -0
  115. package/packages/dd-trace/src/llmobs/tagger.js +55 -0
  116. package/packages/dd-trace/src/llmobs/telemetry.js +1 -0
  117. package/packages/dd-trace/src/log/index.js +18 -20
  118. package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -1
  119. package/packages/dd-trace/src/opentelemetry/bridge-span-base.js +5 -4
  120. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +2 -1
  121. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +4 -3
  122. package/packages/dd-trace/src/opentelemetry/metrics/time.js +19 -0
  123. package/packages/dd-trace/src/opentelemetry/otlp/common.proto +2 -2
  124. package/packages/dd-trace/src/opentelemetry/otlp/logs.proto +1 -1
  125. package/packages/dd-trace/src/opentelemetry/otlp/logs_service.proto +1 -1
  126. package/packages/dd-trace/src/opentelemetry/otlp/metrics.proto +1 -1
  127. package/packages/dd-trace/src/opentelemetry/otlp/metrics_service.proto +1 -1
  128. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +11 -4
  129. package/packages/dd-trace/src/opentelemetry/span-helpers.js +29 -13
  130. package/packages/dd-trace/src/opentelemetry/span.js +14 -3
  131. package/packages/dd-trace/src/opentelemetry/span_context.js +1 -0
  132. package/packages/dd-trace/src/opentelemetry/trace/index.js +2 -1
  133. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +3 -2
  134. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +26 -13
  135. package/packages/dd-trace/src/opentracing/propagation/text_map.js +3 -3
  136. package/packages/dd-trace/src/opentracing/span_context.js +17 -0
  137. package/packages/dd-trace/src/plugin_manager.js +7 -1
  138. package/packages/dd-trace/src/plugins/ci_plugin.js +36 -3
  139. package/packages/dd-trace/src/plugins/index.js +3 -0
  140. package/packages/dd-trace/src/plugins/util/http-otel-semantics.js +276 -0
  141. package/packages/dd-trace/src/plugins/util/test.js +80 -0
  142. package/packages/dd-trace/src/plugins/util/url.js +68 -1
  143. package/packages/dd-trace/src/plugins/util/web.js +19 -36
  144. package/packages/dd-trace/src/priority_sampler.js +1 -13
  145. package/packages/dd-trace/src/profiling/config.js +129 -198
  146. package/packages/dd-trace/src/profiling/constants.js +4 -7
  147. package/packages/dd-trace/src/profiling/exporter_cli.js +10 -10
  148. package/packages/dd-trace/src/profiling/exporters/agent.js +23 -16
  149. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +45 -14
  150. package/packages/dd-trace/src/profiling/exporters/file.js +16 -5
  151. package/packages/dd-trace/src/profiling/oom.js +71 -0
  152. package/packages/dd-trace/src/profiling/profiler.js +35 -23
  153. package/packages/dd-trace/src/profiling/profilers/events.js +14 -7
  154. package/packages/dd-trace/src/profiling/profilers/space.js +27 -18
  155. package/packages/dd-trace/src/profiling/profilers/wall.js +35 -25
  156. package/packages/dd-trace/src/ritm.js +4 -2
  157. package/packages/dd-trace/src/serverless.js +1 -2
  158. package/packages/dd-trace/src/service-naming/schemas/util.js +36 -5
  159. package/packages/dd-trace/src/service-naming/schemas/v0/serverless.js +12 -0
  160. package/packages/dd-trace/src/service-naming/schemas/v1/serverless.js +12 -0
  161. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +5 -3
  162. package/packages/dd-trace/src/span_format.js +2 -1
  163. package/packages/dd-trace/src/span_processor.js +6 -0
  164. package/packages/dd-trace/src/telemetry/send-data.js +12 -10
  165. package/packages/dd-trace/src/tracer.js +15 -1
  166. package/packages/dd-trace/src/util.js +14 -0
  167. package/register.js +58 -1
  168. package/vendor/dist/@apm-js-collab/code-transformer/index.js +1 -1
  169. package/vendor/dist/@datadog/sketches-js/index.js +1 -1
  170. package/vendor/dist/pprof-format/index.js +1 -1
  171. package/vendor/dist/protobufjs/index.js +1 -1
  172. package/vendor/dist/protobufjs/minimal/index.js +1 -1
  173. package/packages/datadog-instrumentations/src/helpers/openai-ai-guard.js +0 -284
  174. package/packages/dd-trace/src/appsec/api_security_sampler.js +0 -117
@@ -0,0 +1,34 @@
1
+ 'use strict'
2
+
3
+ const telemetryMetrics = require('../../telemetry/metrics')
4
+
5
+ const appsecMetrics = telemetryMetrics.manager.namespace('appsec')
6
+
7
+ const normalizedFrameworkCache = new Map()
8
+
9
+ function normalizeFramework (framework) {
10
+ let normalized = normalizedFrameworkCache.get(framework)
11
+ if (normalized === undefined) {
12
+ normalized = framework ? framework.toLowerCase().replaceAll(' ', '_') : 'unknown'
13
+ normalizedFrameworkCache.set(framework, normalized)
14
+ }
15
+ return normalized
16
+ }
17
+
18
+ function incrementApiSecRequestSchema (framework) {
19
+ appsecMetrics.count('api_security.request.schema', { framework: normalizeFramework(framework) }).inc()
20
+ }
21
+
22
+ function incrementApiSecRequestNoSchema (framework) {
23
+ appsecMetrics.count('api_security.request.no_schema', { framework: normalizeFramework(framework) }).inc()
24
+ }
25
+
26
+ function incrementApiSecMissingRoute (framework) {
27
+ appsecMetrics.count('api_security.missing_route', { framework: normalizeFramework(framework) }).inc()
28
+ }
29
+
30
+ module.exports = {
31
+ incrementApiSecRequestSchema,
32
+ incrementApiSecRequestNoSchema,
33
+ incrementApiSecMissingRoute,
34
+ }
@@ -1,5 +1,10 @@
1
1
  'use strict'
2
2
 
3
+ const {
4
+ incrementApiSecMissingRoute,
5
+ incrementApiSecRequestNoSchema,
6
+ incrementApiSecRequestSchema,
7
+ } = require('./api_security')
3
8
  const { DD_TELEMETRY_REQUEST_METRICS } = require('./common')
4
9
  const { incrementMissingUserId, incrementMissingUserLogin, incrementSdkEvent } = require('./user')
5
10
  const {
@@ -155,6 +160,24 @@ function incrementSdkEventMetric (eventType, sdkVersion) {
155
160
  incrementSdkEvent(eventType, sdkVersion)
156
161
  }
157
162
 
163
+ function incrementApiSecRequestSchemaMetric (framework) {
164
+ if (!enabled) return
165
+
166
+ incrementApiSecRequestSchema(framework)
167
+ }
168
+
169
+ function incrementApiSecRequestNoSchemaMetric (framework) {
170
+ if (!enabled) return
171
+
172
+ incrementApiSecRequestNoSchema(framework)
173
+ }
174
+
175
+ function incrementApiSecMissingRouteMetric (framework) {
176
+ if (!enabled) return
177
+
178
+ incrementApiSecMissingRoute(framework)
179
+ }
180
+
158
181
  function getRequestMetrics (req) {
159
182
  if (req) {
160
183
  const store = getStore(req)
@@ -179,6 +202,9 @@ module.exports = {
179
202
  incrementMissingUserLoginMetric,
180
203
  incrementMissingUserIdMetric,
181
204
  incrementSdkEventMetric,
205
+ incrementApiSecRequestSchemaMetric,
206
+ incrementApiSecRequestNoSchemaMetric,
207
+ incrementApiSecMissingRouteMetric,
182
208
 
183
209
  getRequestMetrics,
184
210
  }
@@ -12,26 +12,10 @@ const {
12
12
  isRetriableNetworkError,
13
13
  singleJitteredDelay,
14
14
  } = require('../../exporters/common/retry')
15
- const { urlToHttpOptions } = require('../../exporters/common/url-to-http-options-polyfill')
15
+ const { parseUrl } = require('../../exporters/common/url')
16
16
 
17
17
  const legacyStorage = storage('legacy')
18
18
 
19
- function parseUrl (urlObjOrString) {
20
- if (urlObjOrString !== null && typeof urlObjOrString === 'object') {
21
- return urlToHttpOptions(urlObjOrString)
22
- }
23
-
24
- const url = urlToHttpOptions(new URL(urlObjOrString))
25
-
26
- if (url.protocol === 'unix:' && url.hostname === '.') {
27
- const udsPath = urlObjOrString.slice(5)
28
- url.path = udsPath
29
- url.pathname = udsPath
30
- }
31
-
32
- return url
33
- }
34
-
35
19
  /**
36
20
  * Simplified HTTP request for test optimization (library config). Uses common HTTP agents.
37
21
  * Retries: 429 (with X-ratelimit-reset, max 30s wait),
@@ -1,6 +1,5 @@
1
1
  'use strict'
2
2
 
3
- const dns = require('dns')
4
3
  const util = require('util')
5
4
 
6
5
  const { DD_MAJOR } = require('../../../../version')
@@ -51,7 +50,6 @@ const defaults = {
51
50
  isServiceUserProvided: false,
52
51
  plugins: true,
53
52
  isCiVisibility: false,
54
- lookup: dns.lookup,
55
53
  logger: undefined,
56
54
  }
57
55
 
@@ -218,6 +216,14 @@ for (const [canonicalName, entries] of Object.entries(supportedConfigurations))
218
216
  )
219
217
  }
220
218
  for (const entry of entries) {
219
+ // A deprecated entry that only aliases a canonical option must not surface as
220
+ // its own Config property/default: the canonical entry already owns the value
221
+ // and the alias is resolved by helper.js. helper.js drops these from the shared
222
+ // supported-configurations object (after registering the deprecation), but that
223
+ // mutation is order-dependent on which module loads first. Skip here too so
224
+ // `defaults` is identical regardless of load order (it differed in v5, where
225
+ // major-overrides keeps these entries instead of deleting them outright).
226
+ if (entry.deprecated && entry.aliases) continue
221
227
  if (entry.sensitive) {
222
228
  sensitiveConfigurations.add(canonicalName)
223
229
  }
@@ -285,7 +291,7 @@ for (const [canonicalName, entries] of Object.entries(supportedConfigurations))
285
291
 
286
292
  // Replace the alias with the canonical property name.
287
293
  for (const [fullPropertyName, alias] of fallbackConfigurations) {
288
- if (configurationsTable[alias].property) {
294
+ if (configurationsTable[alias]?.property) {
289
295
  fallbackConfigurations.set(fullPropertyName, configurationsTable[alias].property)
290
296
  }
291
297
  }
@@ -347,3 +353,16 @@ module.exports = {
347
353
 
348
354
  generateTelemetry,
349
355
  }
356
+
357
+ // `dns` is instrumented, so requiring it pulls in the dns plugin, which loads
358
+ // `log`, whose bootstrap calls back into `require('./defaults')`. Resolve the
359
+ // `lookup` default last — after the exports above are fully built — so that the
360
+ // re-entrant require during that cascade sees the complete module instead of a
361
+ // half-initialized one.
362
+ defaults.lookup = require('dns').lookup
363
+ configWithOrigin.set('lookupdefault', {
364
+ name: 'lookup',
365
+ value: defaults.lookup,
366
+ origin: 'default',
367
+ seq_id: seqId++,
368
+ })