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.
- package/LICENSE-3rdparty.csv +0 -1
- package/ext/tags.js +1 -0
- package/index.d.ts +9 -1
- package/package.json +48 -46
- package/packages/datadog-instrumentations/src/crypto.js +45 -0
- package/packages/datadog-instrumentations/src/cypress-config.js +122 -16
- package/packages/datadog-instrumentations/src/dns.js +24 -56
- package/packages/datadog-instrumentations/src/graphql.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +74 -0
- package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +4 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +10 -3
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/modelcontextprotocol-sdk.js +59 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +11 -2
- package/packages/datadog-instrumentations/src/modelcontextprotocol-sdk.js +7 -0
- package/packages/datadog-instrumentations/src/pino.js +4 -28
- package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +27 -0
- package/packages/datadog-instrumentations/src/playwright.js +5 -17
- package/packages/datadog-instrumentations/src/stripe.js +38 -24
- package/packages/datadog-instrumentations/src/vitest.js +32 -4
- package/packages/datadog-instrumentations/src/zlib.js +29 -0
- package/packages/datadog-plugin-aws-sdk/src/base.js +1 -2
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +8 -15
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -9
- package/packages/datadog-plugin-cucumber/src/index.js +2 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +5 -5
- package/packages/datadog-plugin-cypress/src/source-map-utils.js +48 -1
- package/packages/datadog-plugin-http/src/server.js +11 -11
- package/packages/datadog-plugin-jest/src/index.js +2 -2
- package/packages/datadog-plugin-mocha/src/index.js +1 -2
- package/packages/datadog-plugin-modelcontextprotocol-sdk/src/index.js +24 -0
- package/packages/datadog-plugin-modelcontextprotocol-sdk/src/tracing.js +55 -0
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -6
- package/packages/datadog-plugin-playwright/src/index.js +2 -3
- package/packages/datadog-plugin-vitest/src/index.js +14 -6
- package/packages/datadog-plugin-ws/src/close.js +2 -0
- package/packages/datadog-plugin-ws/src/producer.js +2 -0
- package/packages/datadog-plugin-ws/src/receiver.js +1 -0
- package/packages/dd-trace/src/aiguard/channels.js +8 -0
- package/packages/dd-trace/src/aiguard/index.js +7 -3
- package/packages/dd-trace/src/aiguard/sdk.js +44 -0
- package/packages/dd-trace/src/aiguard/tags.js +1 -0
- package/packages/dd-trace/src/appsec/graphql.js +6 -6
- package/packages/dd-trace/src/appsec/index.js +9 -11
- package/packages/dd-trace/src/appsec/rasp/command_injection.js +4 -5
- package/packages/dd-trace/src/appsec/rasp/lfi.js +8 -4
- package/packages/dd-trace/src/appsec/rasp/sql_injection.js +5 -10
- package/packages/dd-trace/src/appsec/rasp/ssrf.js +5 -6
- package/packages/dd-trace/src/appsec/recommended.json +2438 -13
- package/packages/dd-trace/src/appsec/reporter.js +6 -5
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +4 -8
- package/packages/dd-trace/src/appsec/store.js +50 -0
- package/packages/dd-trace/src/appsec/waf/index.js +3 -5
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -4
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -5
- package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +3 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +6 -6
- package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +2 -2
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
- package/packages/dd-trace/src/config/config-types.d.ts +0 -4
- package/packages/dd-trace/src/config/defaults.js +10 -10
- package/packages/dd-trace/src/config/generated-config-types.d.ts +13 -12
- package/packages/dd-trace/src/config/index.js +25 -35
- package/packages/dd-trace/src/config/parsers.js +26 -9
- package/packages/dd-trace/src/config/supported-configurations.json +32 -36
- package/packages/dd-trace/src/debugger/config.js +2 -0
- package/packages/dd-trace/src/debugger/devtools_client/send.js +25 -5
- package/packages/dd-trace/src/encode/0.4.js +4 -5
- package/packages/dd-trace/src/exporters/agent/index.js +0 -1
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -2
- package/packages/dd-trace/src/exporters/agentless/writer.js +3 -3
- package/packages/dd-trace/src/exporters/common/util.js +2 -2
- package/packages/dd-trace/src/id.js +2 -0
- package/packages/dd-trace/src/index.js +2 -5
- package/packages/dd-trace/src/lambda/handler.js +1 -3
- package/packages/dd-trace/src/llmobs/plugins/{anthropic.js → anthropic/index.js} +5 -63
- package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +106 -0
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +3 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +2 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +0 -49
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +2 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/messages.js +76 -0
- package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -26
- package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/index.js +68 -0
- package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +57 -0
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +103 -0
- package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -0
- package/packages/dd-trace/src/opentelemetry/logs/index.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +3 -2
- package/packages/dd-trace/src/opentelemetry/metrics/index.js +1 -1
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +3 -2
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +19 -66
- package/packages/dd-trace/src/opentelemetry/trace/index.js +11 -16
- package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +11 -3
- package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +51 -41
- package/packages/dd-trace/src/opentelemetry/tracer.js +9 -11
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +17 -10
- package/packages/dd-trace/src/opentracing/span.js +1 -1
- package/packages/dd-trace/src/opentracing/tracer.js +12 -5
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/util/test.js +126 -5
- package/packages/dd-trace/src/plugins/util/url.js +2 -1
- package/packages/dd-trace/src/profiling/profilers/event_plugins/crypto.js +32 -0
- package/packages/dd-trace/src/profiling/profilers/event_plugins/zlib.js +19 -0
- package/packages/dd-trace/src/profiling/profilers/events.js +35 -0
- package/packages/dd-trace/src/proxy.js +2 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
- package/packages/dd-trace/src/span_processor.js +1 -2
- package/packages/dd-trace/src/tagger.js +2 -2
- package/packages/dd-trace/src/telemetry/send-data.js +5 -7
- package/packages/dd-trace/src/tracer.js +2 -2
- package/vendor/dist/ignore/LICENSE +0 -21
- 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
|
-
|
|
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
|
|
262
|
-
const rootSpan =
|
|
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,
|
|
270
|
+
handleResults(results?.actions, req, web.getContext(req)?.res, rootSpan, abortController)
|
|
272
271
|
}
|
|
273
272
|
|
|
274
273
|
function onPassportDeserializeUser ({ user, abortController }) {
|
|
275
|
-
const
|
|
276
|
-
const rootSpan =
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
63
|
+
const fs = store?.fs
|
|
64
|
+
if (!fs) return
|
|
62
65
|
|
|
63
|
-
const
|
|
64
|
-
if (!req
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
71
|
-
const originatingRequest = store?.req
|
|
70
|
+
const originatingRequest = getActiveRequest()
|
|
72
71
|
if (!originatingRequest) return
|
|
73
72
|
|
|
74
73
|
// Skip body analysis for redirect responses
|