dd-trace 5.98.0 → 5.99.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 (123) hide show
  1. package/LICENSE-3rdparty.csv +0 -1
  2. package/ext/tags.js +1 -0
  3. package/index.d.ts +9 -1
  4. package/package.json +48 -46
  5. package/packages/datadog-instrumentations/src/crypto.js +45 -0
  6. package/packages/datadog-instrumentations/src/cypress-config.js +122 -16
  7. package/packages/datadog-instrumentations/src/dns.js +24 -56
  8. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  9. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +74 -0
  10. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +4 -1
  11. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  12. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +10 -3
  13. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  14. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/modelcontextprotocol-sdk.js +59 -0
  15. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +11 -2
  16. package/packages/datadog-instrumentations/src/modelcontextprotocol-sdk.js +7 -0
  17. package/packages/datadog-instrumentations/src/pino.js +4 -28
  18. package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +27 -0
  19. package/packages/datadog-instrumentations/src/playwright.js +5 -17
  20. package/packages/datadog-instrumentations/src/stripe.js +38 -24
  21. package/packages/datadog-instrumentations/src/vitest.js +32 -4
  22. package/packages/datadog-instrumentations/src/zlib.js +29 -0
  23. package/packages/datadog-plugin-aws-sdk/src/base.js +1 -2
  24. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +8 -15
  25. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -9
  26. package/packages/datadog-plugin-cucumber/src/index.js +2 -2
  27. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +5 -5
  28. package/packages/datadog-plugin-cypress/src/source-map-utils.js +48 -1
  29. package/packages/datadog-plugin-http/src/server.js +11 -11
  30. package/packages/datadog-plugin-jest/src/index.js +2 -2
  31. package/packages/datadog-plugin-mocha/src/index.js +1 -2
  32. package/packages/datadog-plugin-modelcontextprotocol-sdk/src/index.js +24 -0
  33. package/packages/datadog-plugin-modelcontextprotocol-sdk/src/tracing.js +55 -0
  34. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -6
  35. package/packages/datadog-plugin-playwright/src/index.js +2 -3
  36. package/packages/datadog-plugin-vitest/src/index.js +14 -6
  37. package/packages/datadog-plugin-ws/src/close.js +2 -0
  38. package/packages/datadog-plugin-ws/src/producer.js +2 -0
  39. package/packages/datadog-plugin-ws/src/receiver.js +1 -0
  40. package/packages/dd-trace/src/aiguard/channels.js +8 -0
  41. package/packages/dd-trace/src/aiguard/index.js +7 -3
  42. package/packages/dd-trace/src/aiguard/sdk.js +44 -0
  43. package/packages/dd-trace/src/aiguard/tags.js +1 -0
  44. package/packages/dd-trace/src/appsec/graphql.js +6 -6
  45. package/packages/dd-trace/src/appsec/index.js +9 -11
  46. package/packages/dd-trace/src/appsec/rasp/command_injection.js +4 -5
  47. package/packages/dd-trace/src/appsec/rasp/lfi.js +8 -4
  48. package/packages/dd-trace/src/appsec/rasp/sql_injection.js +5 -10
  49. package/packages/dd-trace/src/appsec/rasp/ssrf.js +5 -6
  50. package/packages/dd-trace/src/appsec/recommended.json +2438 -13
  51. package/packages/dd-trace/src/appsec/reporter.js +6 -5
  52. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +4 -8
  53. package/packages/dd-trace/src/appsec/store.js +50 -0
  54. package/packages/dd-trace/src/appsec/waf/index.js +3 -5
  55. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  56. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  57. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  58. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  59. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -4
  60. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  61. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -5
  62. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +3 -4
  63. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +6 -6
  64. package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +2 -2
  65. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  66. package/packages/dd-trace/src/config/config-types.d.ts +0 -4
  67. package/packages/dd-trace/src/config/defaults.js +10 -10
  68. package/packages/dd-trace/src/config/generated-config-types.d.ts +13 -12
  69. package/packages/dd-trace/src/config/index.js +25 -35
  70. package/packages/dd-trace/src/config/parsers.js +26 -9
  71. package/packages/dd-trace/src/config/supported-configurations.json +32 -36
  72. package/packages/dd-trace/src/debugger/config.js +2 -0
  73. package/packages/dd-trace/src/debugger/devtools_client/send.js +25 -5
  74. package/packages/dd-trace/src/encode/0.4.js +4 -5
  75. package/packages/dd-trace/src/exporters/agent/index.js +0 -1
  76. package/packages/dd-trace/src/exporters/agent/writer.js +1 -2
  77. package/packages/dd-trace/src/exporters/agentless/writer.js +3 -3
  78. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  79. package/packages/dd-trace/src/id.js +2 -0
  80. package/packages/dd-trace/src/index.js +2 -5
  81. package/packages/dd-trace/src/lambda/handler.js +1 -3
  82. package/packages/dd-trace/src/llmobs/plugins/{anthropic.js → anthropic/index.js} +5 -63
  83. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +106 -0
  84. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +3 -2
  85. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -2
  86. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +2 -1
  87. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +0 -49
  88. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +2 -1
  89. package/packages/dd-trace/src/llmobs/plugins/langchain/messages.js +76 -0
  90. package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -26
  91. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/index.js +68 -0
  92. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +57 -0
  93. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  94. package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +103 -0
  95. package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -0
  96. package/packages/dd-trace/src/opentelemetry/logs/index.js +1 -1
  97. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +3 -2
  98. package/packages/dd-trace/src/opentelemetry/metrics/index.js +1 -1
  99. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +3 -2
  100. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +19 -66
  101. package/packages/dd-trace/src/opentelemetry/trace/index.js +11 -16
  102. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +11 -3
  103. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +51 -41
  104. package/packages/dd-trace/src/opentelemetry/tracer.js +9 -11
  105. package/packages/dd-trace/src/opentracing/propagation/text_map.js +17 -10
  106. package/packages/dd-trace/src/opentracing/span.js +1 -1
  107. package/packages/dd-trace/src/opentracing/tracer.js +12 -5
  108. package/packages/dd-trace/src/plugins/index.js +1 -0
  109. package/packages/dd-trace/src/plugins/util/test.js +126 -5
  110. package/packages/dd-trace/src/plugins/util/url.js +2 -1
  111. package/packages/dd-trace/src/profiling/profilers/event_plugins/crypto.js +32 -0
  112. package/packages/dd-trace/src/profiling/profilers/event_plugins/zlib.js +19 -0
  113. package/packages/dd-trace/src/profiling/profilers/events.js +35 -0
  114. package/packages/dd-trace/src/proxy.js +2 -8
  115. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  116. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  117. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  118. package/packages/dd-trace/src/span_processor.js +1 -2
  119. package/packages/dd-trace/src/tagger.js +2 -2
  120. package/packages/dd-trace/src/telemetry/send-data.js +5 -7
  121. package/packages/dd-trace/src/tracer.js +2 -2
  122. package/vendor/dist/ignore/LICENSE +0 -21
  123. package/vendor/dist/ignore/index.js +0 -1
@@ -4,7 +4,6 @@ const log = require('../log')
4
4
  const web = require('../plugins/util/web')
5
5
  const { extractIp } = require('../plugins/util/ip_extractor')
6
6
  const { HTTP_CLIENT_IP } = require('../../../../ext/tags')
7
- const { storage } = require('../../../datadog-core')
8
7
  const { IS_SERVERLESS } = require('../serverless')
9
8
  const RuleManager = require('./rule_manager')
10
9
  const appsecRemoteConfig = require('./remote_config')
@@ -40,6 +39,7 @@ const Reporter = require('./reporter')
40
39
  const appsecTelemetry = require('./telemetry')
41
40
  const apiSecuritySampler = require('./api_security_sampler')
42
41
  const { isBlocked, block, callBlockDelegation, setTemplates, getBlockingAction } = require('./blocking')
42
+ const { getActiveRequest } = require('./store')
43
43
  const UserTracking = require('./user_tracking')
44
44
  const graphql = require('./graphql')
45
45
  const rasp = require('./rasp')
@@ -116,8 +116,7 @@ function onRequestBodyParsed ({ req, res, body, abortController }) {
116
116
  if (body === undefined || body === null) return
117
117
 
118
118
  if (!req) {
119
- const store = storage('legacy').getStore()
120
- req = store?.req
119
+ req = getActiveRequest()
121
120
  }
122
121
 
123
122
  const rootSpan = web.root(req)
@@ -258,8 +257,8 @@ function incomingHttpEndTranslator ({ req, res }) {
258
257
  }
259
258
 
260
259
  function onPassportVerify ({ framework, login, user, success, abortController }) {
261
- const store = storage('legacy').getStore()
262
- const rootSpan = store?.req && web.root(store.req)
260
+ const req = getActiveRequest()
261
+ const rootSpan = req && web.root(req)
263
262
 
264
263
  if (!rootSpan) {
265
264
  log.warn('[ASM] No rootSpan found in onPassportVerify')
@@ -268,12 +267,12 @@ function onPassportVerify ({ framework, login, user, success, abortController })
268
267
 
269
268
  const results = UserTracking.trackLogin(framework, login, user, success, rootSpan)
270
269
 
271
- handleResults(results?.actions, store.req, store.req.res, rootSpan, abortController)
270
+ handleResults(results?.actions, req, web.getContext(req)?.res, rootSpan, abortController)
272
271
  }
273
272
 
274
273
  function onPassportDeserializeUser ({ user, abortController }) {
275
- const store = storage('legacy').getStore()
276
- const rootSpan = store?.req && web.root(store.req)
274
+ const req = getActiveRequest()
275
+ const rootSpan = req && web.root(req)
277
276
 
278
277
  if (!rootSpan) {
279
278
  log.warn('[ASM] No rootSpan found in onPassportDeserializeUser')
@@ -282,7 +281,7 @@ function onPassportDeserializeUser ({ user, abortController }) {
282
281
 
283
282
  const results = UserTracking.trackUser(user, rootSpan)
284
283
 
285
- handleResults(results?.actions, store.req, store.req.res, rootSpan, abortController)
284
+ handleResults(results?.actions, req, web.getContext(req)?.res, rootSpan, abortController)
286
285
  }
287
286
 
288
287
  function onExpressSession ({ req, res, sessionId, abortController }) {
@@ -308,8 +307,7 @@ function onRequestQueryParsed ({ req, res, query, abortController }) {
308
307
  if (!query || typeof query !== 'object') return
309
308
 
310
309
  if (!req) {
311
- const store = storage('legacy').getStore()
312
- req = store?.req
310
+ req = getActiveRequest()
313
311
  }
314
312
 
315
313
  const rootSpan = web.root(req)
@@ -1,8 +1,9 @@
1
1
  'use strict'
2
2
 
3
3
  const { childProcessExecutionTracingChannel } = require('../channels')
4
- const { storage } = require('../../../../datadog-core')
5
4
  const addresses = require('../addresses')
5
+ const web = require('../../plugins/util/web')
6
+ const { getActiveRequest } = require('../store')
6
7
  const waf = require('../waf')
7
8
  const { RULE_TYPES, handleResult } = require('./utils')
8
9
 
@@ -27,8 +28,7 @@ function disable () {
27
28
  function analyzeCommandInjection ({ file, fileArgs, shell, abortController }) {
28
29
  if (!file) return
29
30
 
30
- const store = storage('legacy').getStore()
31
- const req = store?.req
31
+ const req = getActiveRequest()
32
32
  if (!req) return
33
33
 
34
34
  const ephemeral = {}
@@ -46,8 +46,7 @@ function analyzeCommandInjection ({ file, fileArgs, shell, abortController }) {
46
46
 
47
47
  const result = waf.run({ ephemeral }, req, raspRule)
48
48
 
49
- const res = store?.res
50
- handleResult(result, req, res, abortController, config, raspRule)
49
+ handleResult(result, req, web.getContext(req)?.res, abortController, config, raspRule)
51
50
  }
52
51
 
53
52
  module.exports = {
@@ -4,7 +4,9 @@ const { isAbsolute } = require('path')
4
4
 
5
5
  const { fsOperationStart, incomingHttpRequestStart, expressResponseRenderStart } = require('../channels')
6
6
  const { storage } = require('../../../../datadog-core')
7
+ const web = require('../../plugins/util/web')
7
8
  const { FS_OPERATION_PATH } = require('../addresses')
9
+ const { getRequest } = require('../store')
8
10
  const waf = require('../waf')
9
11
  const { enable: enableFsPlugin, disable: disableFsPlugin, RASP_MODULE } = require('./fs-plugin')
10
12
  const { RULE_TYPES, handleResult } = require('./utils')
@@ -53,16 +55,18 @@ function analyzeLfiInResponseRender (ctx) {
53
55
  const store = storage('legacy').getStore()
54
56
  if (!store) return
55
57
 
56
- analyzeLfiPath(ctx.view, ctx.req, store.res, ctx.abortController)
58
+ analyzeLfiPath(ctx.view, ctx.req, web.getContext(ctx.req)?.res, ctx.abortController)
57
59
  }
58
60
 
59
61
  function analyzeLfi (ctx) {
60
62
  const store = storage('legacy').getStore()
61
- if (!store) return
63
+ const fs = store?.fs
64
+ if (!fs) return
62
65
 
63
- const { req, fs, res } = store
64
- if (!req || !fs) return
66
+ const req = getRequest(store)
67
+ if (!req) return
65
68
 
69
+ const res = web.getContext(req)?.res
66
70
  for (const path of getPaths(ctx, fs)) {
67
71
  analyzeLfiPath(path, req, res, ctx.abortController)
68
72
  }
@@ -6,8 +6,9 @@ const {
6
6
  wafRunFinished,
7
7
  mysql2OuterQueryStart,
8
8
  } = require('../channels')
9
- const { storage } = require('../../../../datadog-core')
10
9
  const addresses = require('../addresses')
10
+ const web = require('../../plugins/util/web')
11
+ const { getActiveRequest } = require('../store')
11
12
  const waf = require('../waf')
12
13
  const { RULE_TYPES, handleResult } = require('./utils')
13
14
 
@@ -49,10 +50,7 @@ function analyzePgSqlInjection (ctx) {
49
50
  }
50
51
 
51
52
  function analyzeSqlInjection (query, dbSystem, abortController) {
52
- const store = storage('legacy').getStore()
53
- if (!store) return
54
-
55
- const { req, res } = store
53
+ const req = getActiveRequest()
56
54
 
57
55
  if (!req) return
58
56
 
@@ -76,7 +74,7 @@ function analyzeSqlInjection (query, dbSystem, abortController) {
76
74
 
77
75
  const result = waf.run({ ephemeral }, req, raspRule)
78
76
 
79
- handleResult(result, req, res, abortController, config, raspRule)
77
+ handleResult(result, req, web.getContext(req)?.res, abortController, config, raspRule)
80
78
  }
81
79
 
82
80
  function hasInputAddress (payload) {
@@ -91,10 +89,7 @@ function hasAddressesObjectInputAddress (addressesObject) {
91
89
  function clearQuerySet ({ payload }) {
92
90
  if (!payload) return
93
91
 
94
- const store = storage('legacy').getStore()
95
- if (!store) return
96
-
97
- const { req } = store
92
+ const req = getActiveRequest()
98
93
  if (!req) return
99
94
 
100
95
  const executedQueries = reqQueryMap.get(req)
@@ -5,8 +5,9 @@ const {
5
5
  httpClientRequestStart,
6
6
  httpClientResponseFinish,
7
7
  } = require('../channels')
8
- const { storage } = require('../../../../datadog-core')
9
8
  const addresses = require('../addresses')
9
+ const web = require('../../plugins/util/web')
10
+ const { getActiveRequest } = require('../store')
10
11
  const waf = require('../waf')
11
12
  const downstream = require('../downstream_requests')
12
13
  const { updateRaspRuleMatchMetricTags } = require('../telemetry')
@@ -30,8 +31,7 @@ function disable () {
30
31
  }
31
32
 
32
33
  function analyzeSsrf (ctx) {
33
- const store = storage('legacy').getStore()
34
- const req = store?.req
34
+ const req = getActiveRequest()
35
35
  const outgoingUrl = (ctx.args.options?.uri && format(ctx.args.options.uri)) ?? ctx.args.uri
36
36
 
37
37
  if (!req || !outgoingUrl) return
@@ -50,7 +50,7 @@ function analyzeSsrf (ctx) {
50
50
 
51
51
  const result = waf.run({ ephemeral }, req, raspRule)
52
52
 
53
- handleResult(result, req, store?.res, ctx.abortController, config, raspRule)
53
+ handleResult(result, req, web.getContext(req)?.res, ctx.abortController, config, raspRule)
54
54
 
55
55
  downstream.incrementDownstreamAnalysisCount(req)
56
56
  }
@@ -67,8 +67,7 @@ function handleResponseFinish ({ ctx, res, body }) {
67
67
  // downstream response object
68
68
  if (!res) return
69
69
 
70
- const store = storage('legacy').getStore()
71
- const originatingRequest = store?.req
70
+ const originatingRequest = getActiveRequest()
72
71
  if (!originatingRequest) return
73
72
 
74
73
  // Skip body analysis for redirect responses