dd-trace 5.86.0 → 5.88.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 +60 -32
- package/ext/exporters.d.ts +1 -0
- package/ext/exporters.js +1 -0
- package/index.d.ts +243 -7
- package/package.json +9 -6
- package/packages/datadog-instrumentations/src/ai.js +54 -90
- package/packages/datadog-instrumentations/src/cucumber.js +14 -0
- package/packages/datadog-instrumentations/src/helpers/hook.js +17 -11
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +55 -14
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +15 -13
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/ai.js +103 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.js +108 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/transformer.js +21 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +138 -12
- package/packages/datadog-instrumentations/src/http/client.js +119 -1
- package/packages/datadog-instrumentations/src/jest.js +179 -15
- package/packages/datadog-instrumentations/src/kafkajs.js +20 -17
- package/packages/datadog-instrumentations/src/mocha/utils.js +6 -0
- package/packages/datadog-instrumentations/src/mysql2.js +131 -64
- package/packages/datadog-instrumentations/src/playwright.js +9 -1
- package/packages/datadog-instrumentations/src/stripe.js +92 -0
- package/packages/datadog-instrumentations/src/vitest.js +11 -0
- package/packages/datadog-plugin-amqplib/src/consumer.js +14 -10
- package/packages/datadog-plugin-amqplib/src/producer.js +23 -19
- package/packages/datadog-plugin-azure-functions/src/index.js +53 -37
- package/packages/datadog-plugin-bullmq/src/consumer.js +33 -11
- package/packages/datadog-plugin-bullmq/src/producer.js +60 -31
- package/packages/datadog-plugin-cucumber/src/index.js +9 -6
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +33 -0
- package/packages/datadog-plugin-cypress/src/support.js +48 -8
- package/packages/datadog-plugin-jest/src/index.js +12 -2
- package/packages/datadog-plugin-jest/src/util.js +2 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +22 -12
- package/packages/datadog-plugin-kafkajs/src/producer.js +33 -22
- package/packages/datadog-plugin-mocha/src/index.js +9 -6
- package/packages/datadog-plugin-playwright/src/index.js +10 -6
- package/packages/datadog-plugin-vitest/src/index.js +13 -8
- package/packages/dd-trace/src/appsec/addresses.js +11 -0
- package/packages/dd-trace/src/appsec/channels.js +5 -1
- package/packages/dd-trace/src/appsec/downstream_requests.js +302 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +4 -5
- package/packages/dd-trace/src/appsec/iast/path-line.js +36 -25
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +3 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +3 -2
- package/packages/dd-trace/src/appsec/index.js +103 -0
- package/packages/dd-trace/src/appsec/rasp/ssrf.js +66 -4
- package/packages/dd-trace/src/azure_metadata.js +0 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +14 -1
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +2 -0
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -1
- package/packages/dd-trace/src/ci-visibility/requests/request.js +236 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
- package/packages/dd-trace/src/config/defaults.js +148 -195
- package/packages/dd-trace/src/config/helper.js +43 -1
- package/packages/dd-trace/src/config/index.js +42 -14
- package/packages/dd-trace/src/config/supported-configurations.json +4115 -510
- package/packages/dd-trace/src/constants.js +0 -2
- package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -3
- package/packages/dd-trace/src/datastreams/pathway.js +22 -3
- package/packages/dd-trace/src/datastreams/processor.js +14 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +47 -2
- package/packages/dd-trace/src/debugger/devtools_client/index.js +75 -23
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +23 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +168 -36
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +18 -0
- package/packages/dd-trace/src/encode/agentless-json.js +141 -0
- package/packages/dd-trace/src/exporter.js +2 -0
- package/packages/dd-trace/src/exporters/agent/writer.js +22 -8
- package/packages/dd-trace/src/exporters/agentless/index.js +89 -0
- package/packages/dd-trace/src/exporters/agentless/writer.js +184 -0
- package/packages/dd-trace/src/exporters/common/agents.js +1 -1
- package/packages/dd-trace/src/exporters/common/request.js +4 -4
- package/packages/dd-trace/src/llmobs/constants/writers.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/ai/index.js +5 -3
- package/packages/dd-trace/src/llmobs/sdk.js +34 -5
- package/packages/dd-trace/src/opentelemetry/context_manager.js +19 -46
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +3 -4
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +3 -5
- package/packages/dd-trace/src/opentracing/span.js +6 -4
- package/packages/dd-trace/src/plugins/ci_plugin.js +57 -5
- package/packages/dd-trace/src/plugins/database.js +57 -45
- package/packages/dd-trace/src/plugins/outbound.js +27 -2
- package/packages/dd-trace/src/plugins/tracing.js +39 -4
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +7 -0
- package/packages/dd-trace/src/plugins/util/test.js +48 -0
- package/packages/dd-trace/src/plugins/util/web.js +8 -7
- package/packages/dd-trace/src/profiling/exporter_cli.js +1 -0
- package/packages/dd-trace/src/propagation-hash/index.js +145 -0
- package/packages/dd-trace/src/proxy.js +4 -0
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
- package/packages/dd-trace/src/startup-log.js +3 -3
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +0 -106
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -741
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +0 -11
- package/packages/dd-trace/src/plugins/util/serverless.js +0 -8
- package/packages/dd-trace/src/scope/noop/scope.js +0 -21
|
@@ -62,7 +62,7 @@ module.exports = getConfig
|
|
|
62
62
|
class Config {
|
|
63
63
|
/**
|
|
64
64
|
* parsed DD_TAGS, usable as a standalone tag set across products
|
|
65
|
-
* @type {Record<string, string>
|
|
65
|
+
* @type {Record<string, string>}
|
|
66
66
|
*/
|
|
67
67
|
#parsedDdTags = {}
|
|
68
68
|
#envUnprocessed = {}
|
|
@@ -89,6 +89,8 @@ class Config {
|
|
|
89
89
|
|
|
90
90
|
options = {
|
|
91
91
|
...options,
|
|
92
|
+
// TODO(BridgeAR): Remove the experimental prefix once we have a major version.
|
|
93
|
+
// That also applies to index.d.ts
|
|
92
94
|
appsec: options.appsec == null ? options.experimental?.appsec : options.appsec,
|
|
93
95
|
iast: options.iast == null ? options.experimental?.iast : options.iast,
|
|
94
96
|
}
|
|
@@ -162,7 +164,7 @@ class Config {
|
|
|
162
164
|
* Set the configuration with remote config settings.
|
|
163
165
|
* Applies remote configuration, recalculates derived values, and merges all configuration sources.
|
|
164
166
|
*
|
|
165
|
-
* @param {import('./
|
|
167
|
+
* @param {import('./remote_config').RemoteConfigOptions|null} options - Configurations received via Remote
|
|
166
168
|
* Config or null to reset all remote configuration
|
|
167
169
|
*/
|
|
168
170
|
setRemoteConfig (options) {
|
|
@@ -255,6 +257,8 @@ class Config {
|
|
|
255
257
|
DD_API_SECURITY_SAMPLE_DELAY,
|
|
256
258
|
DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED,
|
|
257
259
|
DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT,
|
|
260
|
+
DD_API_SECURITY_DOWNSTREAM_BODY_ANALYSIS_SAMPLE_RATE,
|
|
261
|
+
DD_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS,
|
|
258
262
|
DD_APM_TRACING_ENABLED,
|
|
259
263
|
DD_APP_KEY,
|
|
260
264
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
@@ -281,6 +285,7 @@ class Config {
|
|
|
281
285
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED,
|
|
282
286
|
DD_DATA_STREAMS_ENABLED,
|
|
283
287
|
DD_DBM_PROPAGATION_MODE,
|
|
288
|
+
DD_DBM_INJECT_SQL_BASEHASH,
|
|
284
289
|
DD_DOGSTATSD_HOST,
|
|
285
290
|
DD_DOGSTATSD_PORT,
|
|
286
291
|
DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS,
|
|
@@ -366,7 +371,6 @@ class Config {
|
|
|
366
371
|
DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED,
|
|
367
372
|
DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED,
|
|
368
373
|
DD_TRACE_GIT_METADATA_ENABLED,
|
|
369
|
-
DD_TRACE_GLOBAL_TAGS,
|
|
370
374
|
DD_TRACE_GRAPHQL_ERROR_EXTENSIONS,
|
|
371
375
|
DD_TRACE_HEADER_TAGS,
|
|
372
376
|
DD_TRACE_LEGACY_BAGGAGE_ENABLED,
|
|
@@ -433,13 +437,11 @@ class Config {
|
|
|
433
437
|
|
|
434
438
|
const tags = {}
|
|
435
439
|
|
|
436
|
-
const parsedDdTags = parseSpaceSeparatedTags(DD_TAGS)
|
|
437
|
-
tagger.add(this.#parsedDdTags, parsedDdTags)
|
|
438
|
-
|
|
439
440
|
tagger.add(tags, parseSpaceSeparatedTags(handleOtel(OTEL_RESOURCE_ATTRIBUTES)))
|
|
440
|
-
tagger.add(tags,
|
|
441
|
+
tagger.add(tags, parseSpaceSeparatedTags(DD_TAGS))
|
|
441
442
|
tagger.add(tags, DD_TRACE_TAGS)
|
|
442
|
-
|
|
443
|
+
|
|
444
|
+
Object.assign(this.#parsedDdTags, tags)
|
|
443
445
|
|
|
444
446
|
setString(target, 'apiKey', DD_API_KEY)
|
|
445
447
|
setBoolean(target, 'otelLogsEnabled', DD_LOGS_OTEL_ENABLED)
|
|
@@ -540,9 +542,13 @@ class Config {
|
|
|
540
542
|
unprocessedTarget['appsec.stackTrace.maxStackTraces'] = DD_APPSEC_MAX_STACK_TRACES
|
|
541
543
|
target['appsec.wafTimeout'] = maybeInt(DD_APPSEC_WAF_TIMEOUT)
|
|
542
544
|
unprocessedTarget['appsec.wafTimeout'] = DD_APPSEC_WAF_TIMEOUT
|
|
545
|
+
target['appsec.apiSecurity.downstreamBodyAnalysisSampleRate'] =
|
|
546
|
+
maybeFloat(DD_API_SECURITY_DOWNSTREAM_BODY_ANALYSIS_SAMPLE_RATE)
|
|
547
|
+
target['appsec.apiSecurity.maxDownstreamRequestBodyAnalysis'] =
|
|
548
|
+
maybeInt(DD_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS)
|
|
543
549
|
target.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
|
|
544
550
|
target.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
|
|
545
|
-
target
|
|
551
|
+
setArray(target, 'baggageTagKeys', DD_TRACE_BAGGAGE_TAG_KEYS)
|
|
546
552
|
setBoolean(target, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
547
553
|
setString(target, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
548
554
|
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING || DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
@@ -568,6 +574,7 @@ class Config {
|
|
|
568
574
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
569
575
|
)
|
|
570
576
|
setString(target, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
|
|
577
|
+
setBoolean(target, 'dbm.injectSqlBaseHash', DD_DBM_INJECT_SQL_BASEHASH)
|
|
571
578
|
setString(target, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
|
|
572
579
|
setString(target, 'dogstatsd.port', DD_DOGSTATSD_PORT)
|
|
573
580
|
setBoolean(target, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
|
|
@@ -642,6 +649,7 @@ class Config {
|
|
|
642
649
|
setString(target, 'installSignature.id', DD_INSTRUMENTATION_INSTALL_ID)
|
|
643
650
|
setString(target, 'installSignature.time', DD_INSTRUMENTATION_INSTALL_TIME)
|
|
644
651
|
setString(target, 'installSignature.type', DD_INSTRUMENTATION_INSTALL_TYPE)
|
|
652
|
+
// TODO: Why is DD_INJECTION_ENABLED a comma separated list?
|
|
645
653
|
setArray(target, 'injectionEnabled', DD_INJECTION_ENABLED)
|
|
646
654
|
if (DD_INJECTION_ENABLED !== undefined) {
|
|
647
655
|
setString(target, 'instrumentationSource', DD_INJECTION_ENABLED ? 'ssi' : 'manual')
|
|
@@ -701,8 +709,11 @@ class Config {
|
|
|
701
709
|
maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE) ??
|
|
702
710
|
safeJsonParse(DD_SPAN_SAMPLING_RULES)
|
|
703
711
|
))
|
|
704
|
-
setUnit(
|
|
705
|
-
|
|
712
|
+
setUnit(
|
|
713
|
+
target,
|
|
714
|
+
'sampleRate',
|
|
715
|
+
DD_TRACE_SAMPLE_RATE || getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG)
|
|
716
|
+
)
|
|
706
717
|
target['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
|
|
707
718
|
setSamplingRule(target, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
708
719
|
unprocessedTarget['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
@@ -743,7 +754,7 @@ class Config {
|
|
|
743
754
|
setBoolean(target, 'telemetry.debug', DD_TELEMETRY_DEBUG)
|
|
744
755
|
setBoolean(target, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
|
|
745
756
|
target['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
|
|
746
|
-
unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL
|
|
757
|
+
unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL
|
|
747
758
|
setBoolean(target, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
|
|
748
759
|
setBoolean(target, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
|
|
749
760
|
setBoolean(target, 'traceId128BitGenerationEnabled', DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED)
|
|
@@ -886,7 +897,7 @@ class Config {
|
|
|
886
897
|
opts['cloudPayloadTagging.maxDepth'] = maybeInt(options.cloudPayloadTagging?.maxDepth)
|
|
887
898
|
opts.baggageMaxBytes = options.baggageMaxBytes
|
|
888
899
|
opts.baggageMaxItems = options.baggageMaxItems
|
|
889
|
-
opts
|
|
900
|
+
setArray(opts, 'baggageTagKeys', options.baggageTagKeys)
|
|
890
901
|
setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
|
|
891
902
|
setBoolean(
|
|
892
903
|
opts,
|
|
@@ -894,6 +905,7 @@ class Config {
|
|
|
894
905
|
options.codeOriginForSpans?.experimental?.exit_spans?.enabled
|
|
895
906
|
)
|
|
896
907
|
setString(opts, 'dbmPropagationMode', options.dbmPropagationMode)
|
|
908
|
+
setBoolean(opts, 'dbm.injectSqlBaseHash', options.dbm?.injectSqlBaseHash)
|
|
897
909
|
if (options.dogstatsd) {
|
|
898
910
|
setString(opts, 'dogstatsd.hostname', options.dogstatsd.hostname)
|
|
899
911
|
setString(opts, 'dogstatsd.port', options.dogstatsd.port)
|
|
@@ -1091,6 +1103,21 @@ class Config {
|
|
|
1091
1103
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1092
1104
|
: getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
|
|
1093
1105
|
|
|
1106
|
+
// Experimental agentless APM span intake
|
|
1107
|
+
// When enabled, sends spans directly to Datadog intake without an agent
|
|
1108
|
+
const agentlessEnabled = isTrue(getEnv('_DD_APM_TRACING_AGENTLESS_ENABLED'))
|
|
1109
|
+
if (agentlessEnabled) {
|
|
1110
|
+
setString(calc, 'experimental.exporter', 'agentless')
|
|
1111
|
+
// Disable rate limiting - server-side sampling will be used
|
|
1112
|
+
calc['sampler.rateLimit'] = -1
|
|
1113
|
+
// Disable client-side stats computation
|
|
1114
|
+
setBoolean(calc, 'stats.enabled', false)
|
|
1115
|
+
// Enable hostname reporting
|
|
1116
|
+
setBoolean(calc, 'reportHostname', true)
|
|
1117
|
+
// Clear sampling rules - server-side sampling handles this
|
|
1118
|
+
calc['sampler.rules'] = []
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1094
1121
|
if (this.#isCiVisibility()) {
|
|
1095
1122
|
setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
|
|
1096
1123
|
getEnv('DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED') ?? true)
|
|
@@ -1123,6 +1150,7 @@ class Config {
|
|
|
1123
1150
|
calc.otelLogsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}`
|
|
1124
1151
|
calc.otelMetricsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}/v1/metrics`
|
|
1125
1152
|
calc.otelUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}`
|
|
1153
|
+
calc['telemetry.heartbeatInterval'] = maybeInt(Math.floor(this.#defaults['telemetry.heartbeatInterval'] * 1000))
|
|
1126
1154
|
|
|
1127
1155
|
setBoolean(calc, 'isGitUploadEnabled',
|
|
1128
1156
|
calc.isIntelligentTestRunnerEnabled && !isFalse(getEnv('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED')))
|
|
@@ -1150,7 +1178,7 @@ class Config {
|
|
|
1150
1178
|
/**
|
|
1151
1179
|
* Applies remote configuration options from APM_TRACING configs.
|
|
1152
1180
|
*
|
|
1153
|
-
* @param {import('./
|
|
1181
|
+
* @param {import('./remote_config').RemoteConfigOptions} options - Configurations received via Remote Config
|
|
1154
1182
|
*/
|
|
1155
1183
|
#applyRemoteConfig (options) {
|
|
1156
1184
|
const opts = this.#remote
|