dd-trace 5.54.0 → 5.55.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/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/initialize.mjs +2 -2
- package/package.json +6 -6
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/kebabcase.js +3 -3
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -6
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +2 -3
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +3 -6
- package/packages/datadog-instrumentations/src/cucumber.js +21 -28
- package/packages/datadog-instrumentations/src/dns.js +4 -4
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +14 -16
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -2
- package/packages/datadog-instrumentations/src/helpers/register.js +6 -5
- package/packages/datadog-instrumentations/src/jest.js +67 -98
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/mariadb.js +11 -4
- package/packages/datadog-instrumentations/src/mocha/main.js +79 -75
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mysql.js +11 -2
- package/packages/datadog-instrumentations/src/nyc.js +2 -1
- package/packages/datadog-instrumentations/src/openai.js +2 -2
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +2 -3
- package/packages/datadog-instrumentations/src/playwright.js +19 -22
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +1 -1
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/router.js +12 -11
- package/packages/datadog-instrumentations/src/tedious.js +1 -2
- package/packages/datadog-instrumentations/src/vitest.js +15 -29
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +12 -8
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +12 -20
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +7 -10
- package/packages/datadog-plugin-cucumber/src/index.js +3 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -1
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +1 -1
- package/packages/datadog-plugin-graphql/src/index.js +3 -2
- package/packages/datadog-plugin-graphql/src/resolve.js +17 -10
- package/packages/datadog-plugin-http/src/client.js +5 -6
- package/packages/datadog-plugin-http2/src/client.js +7 -8
- package/packages/datadog-plugin-jest/src/index.js +3 -2
- package/packages/datadog-plugin-mocha/src/index.js +6 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +2 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -0
- package/packages/datadog-plugin-next/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/tracing.js +2 -4
- package/packages/datadog-plugin-playwright/src/index.js +3 -2
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +1 -3
- package/packages/datadog-plugin-vitest/src/index.js +5 -4
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +1 -2
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +11 -12
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +0 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/index.js +4 -4
- package/packages/dd-trace/src/appsec/reporter.js +5 -7
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +6 -2
- package/packages/dd-trace/src/azure_metadata.js +8 -3
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +8 -7
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +4 -3
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -3
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -1
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +77 -78
- package/packages/dd-trace/src/config_stable.js +7 -4
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +6 -6
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -1
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +3 -4
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +1 -1
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +2 -2
- package/packages/dd-trace/src/encode/0.4.js +5 -2
- package/packages/dd-trace/src/encode/0.5.js +3 -5
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +5 -5
- package/packages/dd-trace/src/exporter.js +2 -1
- package/packages/dd-trace/src/exporters/common/docker.js +3 -2
- package/packages/dd-trace/src/exporters/common/request.js +4 -1
- package/packages/dd-trace/src/exporters/common/util.js +3 -1
- package/packages/dd-trace/src/id.js +3 -3
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +2 -1
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +3 -2
- package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -2
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -2
- package/packages/dd-trace/src/llmobs/sdk.js +2 -1
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +19 -6
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/log/index.js +5 -4
- package/packages/dd-trace/src/log/writer.js +1 -2
- package/packages/dd-trace/src/msgpack/encoder.js +3 -3
- package/packages/dd-trace/src/noop/span.js +1 -1
- package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/log.js +4 -5
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +17 -18
- package/packages/dd-trace/src/opentracing/span.js +7 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +25 -1
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +7 -7
- package/packages/dd-trace/src/plugins/util/git.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +2 -2
- package/packages/dd-trace/src/plugins/util/stacktrace.js +8 -1
- package/packages/dd-trace/src/plugins/util/test.js +4 -3
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -1
- package/packages/dd-trace/src/plugins/util/web.js +3 -4
- package/packages/dd-trace/src/priority_sampler.js +46 -35
- package/packages/dd-trace/src/profiling/config.js +12 -32
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +7 -4
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +22 -12
- package/packages/dd-trace/src/proxy.js +2 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -2
- package/packages/dd-trace/src/sampler.js +10 -2
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/span_processor.js +2 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -2
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +5 -17
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +62 -57
- package/packages/dd-trace/src/telemetry/send-data.js +7 -6
- package/packages/dd-trace/src/telemetry/telemetry.js +12 -25
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +0 -5
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -120
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -27,11 +27,10 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
27
27
|
obj.needsFinish = true
|
|
28
28
|
const options = {
|
|
29
29
|
childOf: contextExtraction.datadogContext,
|
|
30
|
-
tags:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
)
|
|
30
|
+
tags: {
|
|
31
|
+
...this.requestTags.get(request),
|
|
32
|
+
'span.kind': 'server'
|
|
33
|
+
}
|
|
35
34
|
}
|
|
36
35
|
parsedMessageAttributes = contextExtraction.parsedAttributes
|
|
37
36
|
span = this.tracer.startSpan('aws.response', options)
|
|
@@ -89,20 +88,18 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
89
88
|
}
|
|
90
89
|
|
|
91
90
|
generateTags (params, operation, response) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (!params || (!params.QueueName && !params.QueueUrl)) return tags
|
|
91
|
+
if (!params || (!params.QueueName && !params.QueueUrl)) return {}
|
|
95
92
|
// 'https://sqs.us-east-1.amazonaws.com/123456789012/my-queue';
|
|
96
93
|
let queueName = params.QueueName
|
|
97
94
|
if (params.QueueUrl) {
|
|
98
95
|
queueName = params.QueueUrl.split('/').at(-1)
|
|
99
96
|
}
|
|
100
97
|
|
|
101
|
-
|
|
98
|
+
const tags = {
|
|
102
99
|
'resource.name': `${operation} ${params.QueueName || params.QueueUrl}`,
|
|
103
100
|
'aws.sqs.queue_name': params.QueueName || params.QueueUrl,
|
|
104
101
|
queuename: queueName
|
|
105
|
-
}
|
|
102
|
+
}
|
|
106
103
|
|
|
107
104
|
switch (operation) {
|
|
108
105
|
case 'receiveMessage':
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
4
4
|
const { storage } = require('../../datadog-core')
|
|
5
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
5
6
|
|
|
6
7
|
const {
|
|
7
8
|
TEST_SKIP_REASON,
|
|
@@ -58,7 +59,7 @@ const id = require('../../dd-trace/src/id')
|
|
|
58
59
|
|
|
59
60
|
const BREAKPOINT_HIT_GRACE_PERIOD_MS = 200
|
|
60
61
|
const BREAKPOINT_SET_GRACE_PERIOD_MS = 200
|
|
61
|
-
const isCucumberWorker = !!
|
|
62
|
+
const isCucumberWorker = !!getEnvironmentVariable('CUCUMBER_WORKER_ID')
|
|
62
63
|
|
|
63
64
|
function getTestSuiteTags (testSuiteSpan) {
|
|
64
65
|
const suiteTags = {
|
|
@@ -134,7 +135,7 @@ class CucumberPlugin extends CiPlugin {
|
|
|
134
135
|
finishAllTraceSpans(this.testSessionSpan)
|
|
135
136
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
136
137
|
provider: this.ciProviderName,
|
|
137
|
-
autoInjected: !!
|
|
138
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
138
139
|
})
|
|
139
140
|
|
|
140
141
|
this.libraryConfig = null
|
|
@@ -49,6 +49,7 @@ const {
|
|
|
49
49
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
50
50
|
const { isMarkedAsUnskippable } = require('../../datadog-plugin-jest/src/util')
|
|
51
51
|
const { ORIGIN_KEY, COMPONENT } = require('../../dd-trace/src/constants')
|
|
52
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
52
53
|
const { appClosing: appClosingTelemetry } = require('../../dd-trace/src/telemetry')
|
|
53
54
|
const log = require('../../dd-trace/src/log')
|
|
54
55
|
|
|
@@ -615,7 +616,7 @@ class CypressPlugin {
|
|
|
615
616
|
this.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'session')
|
|
616
617
|
incrementCountMetric(TELEMETRY_TEST_SESSION, {
|
|
617
618
|
provider: this.ciProviderName,
|
|
618
|
-
autoInjected: !!
|
|
619
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
619
620
|
})
|
|
620
621
|
|
|
621
622
|
finishAllTraceSpans(this.testSessionSpan)
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
const Plugin = require('../../dd-trace/src/plugins/plugin')
|
|
4
4
|
const telemetryMetrics = require('../../dd-trace/src/telemetry/metrics')
|
|
5
5
|
const apiMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
6
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
6
7
|
|
|
7
8
|
// api ==> here
|
|
8
9
|
const objectMap = new WeakMap()
|
|
9
10
|
|
|
10
11
|
const injectionEnabledTag =
|
|
11
|
-
`injection_enabled:${
|
|
12
|
+
`injection_enabled:${getEnvironmentVariable('DD_INJECTION_ENABLED') ? 'yes' : 'no'}`
|
|
12
13
|
|
|
13
14
|
module.exports = class DdTraceApiPlugin extends Plugin {
|
|
14
15
|
static get id () {
|
|
@@ -82,7 +82,7 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
82
82
|
|
|
83
83
|
const generationConfig = instance.generationConfig || {}
|
|
84
84
|
for (const key of Object.keys(generationConfig)) {
|
|
85
|
-
const transformedKey = key.
|
|
85
|
+
const transformedKey = key.replaceAll(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase()
|
|
86
86
|
tags[`vertexai.request.generation_config.${transformedKey}`] = JSON.stringify(generationConfig[key])
|
|
87
87
|
}
|
|
88
88
|
|
|
@@ -27,12 +27,13 @@ class GraphQLPlugin extends CompositePlugin {
|
|
|
27
27
|
// config validator helpers
|
|
28
28
|
|
|
29
29
|
function validateConfig (config) {
|
|
30
|
-
return
|
|
30
|
+
return {
|
|
31
|
+
...config,
|
|
31
32
|
depth: getDepth(config),
|
|
32
33
|
variables: getVariablesFilter(config),
|
|
33
34
|
collapse: config.collapse === undefined || !!config.collapse,
|
|
34
35
|
hooks: getHooks(config)
|
|
35
|
-
}
|
|
36
|
+
}
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
function getDepth (config) {
|
|
@@ -16,13 +16,14 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
16
16
|
const computedPathString = path.join('.')
|
|
17
17
|
|
|
18
18
|
if (this.config.collapse) {
|
|
19
|
+
if (context.fields[computedPathString]) return
|
|
20
|
+
|
|
19
21
|
if (!context[collapsedPathSym]) {
|
|
20
22
|
context[collapsedPathSym] = {}
|
|
23
|
+
} else if (context[collapsedPathSym][computedPathString]) {
|
|
24
|
+
return
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
if (context.fields[computedPathString]) return
|
|
24
|
-
if (context[collapsedPathSym][computedPathString]) return
|
|
25
|
-
|
|
26
27
|
context[collapsedPathSym][computedPathString] = true
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -47,10 +48,9 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
47
48
|
const variables = this.config.variables(info.variableValues)
|
|
48
49
|
|
|
49
50
|
fieldNode.arguments
|
|
50
|
-
.filter(arg => arg.value && arg.value.kind === 'Variable')
|
|
51
|
-
.
|
|
52
|
-
|
|
53
|
-
.forEach(name => {
|
|
51
|
+
.filter(arg => arg.value?.name && arg.value.kind === 'Variable' && variables[arg.value.name.value])
|
|
52
|
+
.forEach(arg => {
|
|
53
|
+
const name = arg.value.name.value
|
|
54
54
|
span.setTag(`graphql.variables.${name}`, variables[name])
|
|
55
55
|
})
|
|
56
56
|
}
|
|
@@ -89,7 +89,12 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
89
89
|
// helpers
|
|
90
90
|
|
|
91
91
|
function shouldInstrument (config, path) {
|
|
92
|
-
|
|
92
|
+
let depth = 0
|
|
93
|
+
for (const item of path) {
|
|
94
|
+
if (typeof item === 'string') {
|
|
95
|
+
depth += 1
|
|
96
|
+
}
|
|
97
|
+
}
|
|
93
98
|
|
|
94
99
|
return config.depth < 0 || config.depth >= depth
|
|
95
100
|
}
|
|
@@ -126,6 +131,7 @@ function getResolverInfo (info, args) {
|
|
|
126
131
|
Object.assign(resolverVars, args)
|
|
127
132
|
}
|
|
128
133
|
|
|
134
|
+
let hasResolvers = false
|
|
129
135
|
const directives = info.fieldNodes?.[0]?.directives
|
|
130
136
|
if (Array.isArray(directives)) {
|
|
131
137
|
for (const directive of directives) {
|
|
@@ -134,13 +140,14 @@ function getResolverInfo (info, args) {
|
|
|
134
140
|
argList[argument.name.value] = argument.value.value
|
|
135
141
|
}
|
|
136
142
|
|
|
137
|
-
if (
|
|
143
|
+
if (directive.arguments.length > 0) {
|
|
144
|
+
hasResolvers = true
|
|
138
145
|
resolverVars[directive.name.value] = argList
|
|
139
146
|
}
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
149
|
|
|
143
|
-
if (Object.keys(resolverVars).length) {
|
|
150
|
+
if (hasResolvers || args && Object.keys(resolverVars).length) {
|
|
144
151
|
resolverInfo = { [info.fieldName]: resolverVars }
|
|
145
152
|
}
|
|
146
153
|
|
|
@@ -63,7 +63,7 @@ class HttpClientPlugin extends ClientPlugin {
|
|
|
63
63
|
// Implemented due to aws-sdk issue where request signing is broken if we mutate the headers
|
|
64
64
|
// Explained further in:
|
|
65
65
|
// https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1609#issuecomment-1826167348
|
|
66
|
-
options.headers =
|
|
66
|
+
options.headers = { ...options.headers }
|
|
67
67
|
this.tracer.inject(span, HTTP_HEADERS, options.headers)
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -173,13 +173,14 @@ function normalizeClientConfig (config) {
|
|
|
173
173
|
const headers = getHeaders(config)
|
|
174
174
|
const hooks = getHooks(config)
|
|
175
175
|
|
|
176
|
-
return
|
|
176
|
+
return {
|
|
177
|
+
...config,
|
|
177
178
|
validateStatus,
|
|
178
179
|
filter,
|
|
179
180
|
propagationFilter,
|
|
180
181
|
headers,
|
|
181
182
|
hooks
|
|
182
|
-
}
|
|
183
|
+
}
|
|
183
184
|
}
|
|
184
185
|
|
|
185
186
|
function getStatusValidator (config) {
|
|
@@ -192,9 +193,7 @@ function getStatusValidator (config) {
|
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
function getFilter (config) {
|
|
195
|
-
config =
|
|
196
|
-
blocklist: config.blocklist || []
|
|
197
|
-
})
|
|
196
|
+
config = { ...config, blocklist: config.blocklist || [] }
|
|
198
197
|
|
|
199
198
|
return urlFilter.getFilter(config)
|
|
200
199
|
}
|
|
@@ -124,9 +124,9 @@ function extractSessionDetails (authority, options) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
const protocol = authority.protocol || options.protocol || 'https:'
|
|
127
|
-
let port =
|
|
128
|
-
?
|
|
129
|
-
: authority.port)
|
|
127
|
+
let port = authority.port === ''
|
|
128
|
+
? authority.protocol === 'http:' ? '80' : '443'
|
|
129
|
+
: String(authority.port)
|
|
130
130
|
let host = authority.hostname || authority.host || 'localhost'
|
|
131
131
|
|
|
132
132
|
if (protocol === 'https:' && options) {
|
|
@@ -174,17 +174,16 @@ function normalizeConfig (config) {
|
|
|
174
174
|
const filter = getFilter(config)
|
|
175
175
|
const headers = getHeaders(config)
|
|
176
176
|
|
|
177
|
-
return
|
|
177
|
+
return {
|
|
178
|
+
...config,
|
|
178
179
|
validateStatus,
|
|
179
180
|
filter,
|
|
180
181
|
headers
|
|
181
|
-
}
|
|
182
|
+
}
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
function getFilter (config) {
|
|
185
|
-
config =
|
|
186
|
-
blocklist: config.blocklist || []
|
|
187
|
-
})
|
|
186
|
+
config = { ...config, blocklist: config.blocklist || [] }
|
|
188
187
|
|
|
189
188
|
return urlFilter.getFilter(config)
|
|
190
189
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
2
2
|
const { storage } = require('../../datadog-core')
|
|
3
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
3
4
|
|
|
4
5
|
const {
|
|
5
6
|
TEST_STATUS,
|
|
@@ -48,7 +49,7 @@ const {
|
|
|
48
49
|
TELEMETRY_TEST_SESSION
|
|
49
50
|
} = require('../../dd-trace/src/ci-visibility/telemetry')
|
|
50
51
|
|
|
51
|
-
const isJestWorker = !!
|
|
52
|
+
const isJestWorker = !!getEnvironmentVariable('JEST_WORKER_ID')
|
|
52
53
|
|
|
53
54
|
// https://github.com/facebook/jest/blob/d6ad15b0f88a05816c2fe034dd6900d28315d570/packages/jest-worker/src/types.ts#L38
|
|
54
55
|
const CHILD_MESSAGE_END = 2
|
|
@@ -158,7 +159,7 @@ class JestPlugin extends CiPlugin {
|
|
|
158
159
|
|
|
159
160
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
160
161
|
provider: this.ciProviderName,
|
|
161
|
-
autoInjected: !!
|
|
162
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
162
163
|
})
|
|
163
164
|
|
|
164
165
|
this.tracer._exporter.flush(() => {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
4
4
|
const { storage } = require('../../datadog-core')
|
|
5
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
5
6
|
|
|
6
7
|
const {
|
|
7
8
|
TEST_STATUS,
|
|
@@ -429,7 +430,7 @@ class MochaPlugin extends CiPlugin {
|
|
|
429
430
|
finishAllTraceSpans(this.testSessionSpan)
|
|
430
431
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
431
432
|
provider: this.ciProviderName,
|
|
432
|
-
autoInjected: !!
|
|
433
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
433
434
|
})
|
|
434
435
|
}
|
|
435
436
|
this.libraryConfig = null
|
|
@@ -466,6 +467,10 @@ class MochaPlugin extends CiPlugin {
|
|
|
466
467
|
this.tracer._exporter.export(trace)
|
|
467
468
|
})
|
|
468
469
|
})
|
|
470
|
+
|
|
471
|
+
this.addBind('ci:mocha:global:run', (ctx) => {
|
|
472
|
+
return ctx.currentStore
|
|
473
|
+
})
|
|
469
474
|
}
|
|
470
475
|
|
|
471
476
|
startTestSpan (testInfo) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const { isTrue } = require('../../dd-trace/src/util')
|
|
4
4
|
const DatabasePlugin = require('../../dd-trace/src/plugins/database')
|
|
5
5
|
const coalesce = require('koalas')
|
|
6
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
6
7
|
|
|
7
8
|
class MongodbCorePlugin extends DatabasePlugin {
|
|
8
9
|
static get id () { return 'mongodb-core' }
|
|
@@ -14,7 +15,7 @@ class MongodbCorePlugin extends DatabasePlugin {
|
|
|
14
15
|
configure (config) {
|
|
15
16
|
super.configure(config)
|
|
16
17
|
|
|
17
|
-
const heartbeatFromEnv =
|
|
18
|
+
const heartbeatFromEnv = getEnvironmentVariable('DD_TRACE_MONGODB_HEARTBEAT_ENABLED')
|
|
18
19
|
|
|
19
20
|
this.config.heartbeatEnabled = coalesce(
|
|
20
21
|
config.heartbeatEnabled,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { storage } = require('../../datadog-core')
|
|
3
4
|
const CLIENT_PORT_KEY = require('../../dd-trace/src/constants')
|
|
4
5
|
const DatabasePlugin = require('../../dd-trace/src/plugins/database')
|
|
5
6
|
|
|
@@ -7,6 +8,16 @@ class MySQLPlugin extends DatabasePlugin {
|
|
|
7
8
|
static get id () { return 'mysql' }
|
|
8
9
|
static get system () { return 'mysql' }
|
|
9
10
|
|
|
11
|
+
constructor () {
|
|
12
|
+
super(...arguments)
|
|
13
|
+
|
|
14
|
+
this.addSub(`apm:${this.component}:connection:start`, ctx => {
|
|
15
|
+
ctx.parentStore = storage('legacy').getStore()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
this.addBind(`apm:${this.component}:connection:finish`, ctx => ctx.parentStore)
|
|
19
|
+
}
|
|
20
|
+
|
|
10
21
|
bindStart (ctx) {
|
|
11
22
|
const service = this.serviceName({ pluginConfig: this.config, dbConfig: ctx.conf, system: this.system })
|
|
12
23
|
const span = this.startSpan(this.operationName(), {
|
|
@@ -766,19 +766,17 @@ function usageExtraction (tags, body, methodName, openaiStore) {
|
|
|
766
766
|
} else if (body.model && ['chat.completions.create', 'completions.create'].includes(methodName)) {
|
|
767
767
|
// estimate tokens based on method name for completions and chat completions
|
|
768
768
|
const { model } = body
|
|
769
|
-
let promptEstimated = false
|
|
770
|
-
let completionEstimated = false
|
|
771
769
|
|
|
772
770
|
// prompt tokens
|
|
773
771
|
const payload = openaiStore
|
|
774
772
|
const promptTokensCount = countPromptTokens(methodName, payload, model)
|
|
775
773
|
promptTokens = promptTokensCount.promptTokens
|
|
776
|
-
promptEstimated = promptTokensCount.promptEstimated
|
|
774
|
+
const promptEstimated = promptTokensCount.promptEstimated
|
|
777
775
|
|
|
778
776
|
// completion tokens
|
|
779
777
|
const completionTokensCount = countCompletionTokens(body, model)
|
|
780
778
|
completionTokens = completionTokensCount.completionTokens
|
|
781
|
-
completionEstimated = completionTokensCount.completionEstimated
|
|
779
|
+
const completionEstimated = completionTokensCount.completionEstimated
|
|
782
780
|
|
|
783
781
|
// total tokens
|
|
784
782
|
totalTokens = promptTokens + completionTokens
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const { storage } = require('../../datadog-core')
|
|
4
4
|
const id = require('../../dd-trace/src/id')
|
|
5
5
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
6
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
6
7
|
|
|
7
8
|
const {
|
|
8
9
|
TEST_STATUS,
|
|
@@ -102,7 +103,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
102
103
|
finishAllTraceSpans(this.testSessionSpan)
|
|
103
104
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
104
105
|
provider: this.ciProviderName,
|
|
105
|
-
autoInjected: !!
|
|
106
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
106
107
|
})
|
|
107
108
|
appClosingTelemetry()
|
|
108
109
|
this.tracer._exporter.flush(onDone)
|
|
@@ -384,7 +385,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
384
385
|
span.finish()
|
|
385
386
|
|
|
386
387
|
finishAllTraceSpans(span)
|
|
387
|
-
if (
|
|
388
|
+
if (getEnvironmentVariable('DD_PLAYWRIGHT_WORKER')) {
|
|
388
389
|
this.tracer._exporter.flush(onDone)
|
|
389
390
|
}
|
|
390
391
|
})
|
|
@@ -102,17 +102,16 @@ class SchemaExtractor {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
return true
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
105
|
+
}
|
|
106
|
+
if (!builder.shouldExtractSchema(schemaName, depth)) {
|
|
107
|
+
return false
|
|
108
|
+
}
|
|
109
|
+
for (const field of schema.fieldsArray) {
|
|
110
|
+
if (!this.extractProperty(field, schemaName, field.name, builder, depth)) {
|
|
111
|
+
log.warn(`DSM: Unable to extract field with name: ${field.name} from Avro schema with name: ${schemaName}`)
|
|
113
112
|
}
|
|
114
|
-
return true
|
|
115
113
|
}
|
|
114
|
+
return true
|
|
116
115
|
}
|
|
117
116
|
|
|
118
117
|
static extractSchemas (descriptor, dataStreamsProcessor) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
2
2
|
const { storage } = require('../../datadog-core')
|
|
3
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
3
4
|
|
|
4
5
|
const {
|
|
5
6
|
TEST_STATUS,
|
|
@@ -275,11 +276,11 @@ class VitestPlugin extends CiPlugin {
|
|
|
275
276
|
this.addBind('ci:vitest:test-suite:start', (ctx) => {
|
|
276
277
|
const { testSuiteAbsolutePath, frameworkVersion } = ctx
|
|
277
278
|
|
|
278
|
-
this.command =
|
|
279
|
+
this.command = getEnvironmentVariable('DD_CIVISIBILITY_TEST_COMMAND')
|
|
279
280
|
this.frameworkVersion = frameworkVersion
|
|
280
281
|
const testSessionSpanContext = this.tracer.extract('text_map', {
|
|
281
|
-
'x-datadog-trace-id':
|
|
282
|
-
'x-datadog-parent-id':
|
|
282
|
+
'x-datadog-trace-id': getEnvironmentVariable('DD_CIVISIBILITY_TEST_SESSION_ID'),
|
|
283
|
+
'x-datadog-parent-id': getEnvironmentVariable('DD_CIVISIBILITY_TEST_MODULE_ID')
|
|
283
284
|
})
|
|
284
285
|
|
|
285
286
|
const trimmedCommand = DD_MAJOR < 6 ? this.command : 'vitest run'
|
|
@@ -396,7 +397,7 @@ class VitestPlugin extends CiPlugin {
|
|
|
396
397
|
finishAllTraceSpans(this.testSessionSpan)
|
|
397
398
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
398
399
|
provider: this.ciProviderName,
|
|
399
|
-
autoInjected: !!
|
|
400
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
400
401
|
})
|
|
401
402
|
this.tracer._exporter.flush(onFinish)
|
|
402
403
|
})
|
|
@@ -5,7 +5,6 @@ module.exports = {
|
|
|
5
5
|
COMMAND_INJECTION_ANALYZER: require('./command-injection-analyzer'),
|
|
6
6
|
HARCODED_PASSWORD_ANALYZER: require('./hardcoded-password-analyzer'),
|
|
7
7
|
HARCODED_SECRET_ANALYZER: require('./hardcoded-secret-analyzer'),
|
|
8
|
-
HEADER_INJECTION_ANALYZER: require('./header-injection-analyzer'),
|
|
9
8
|
HSTS_HEADER_MISSING_ANALYZER: require('./hsts-header-missing-analyzer'),
|
|
10
9
|
INSECURE_COOKIE_ANALYZER: require('./insecure-cookie-analyzer'),
|
|
11
10
|
LDAP_ANALYZER: require('./ldap-injection-analyzer'),
|
|
@@ -32,9 +32,8 @@ class MissingHeaderAnalyzer extends Analyzer {
|
|
|
32
32
|
const headerValue = res.getHeader(headerName)
|
|
33
33
|
if (Array.isArray(headerValue)) {
|
|
34
34
|
return headerValue
|
|
35
|
-
} else {
|
|
36
|
-
return headerValue ? [headerValue.toString()] : []
|
|
37
35
|
}
|
|
36
|
+
return headerValue ? [headerValue.toString()] : []
|
|
38
37
|
}
|
|
39
38
|
|
|
40
39
|
_getLocation () {}
|
|
@@ -150,19 +150,18 @@ function addSecureMarks (value, secureMarks, createNewTainted = true) {
|
|
|
150
150
|
|
|
151
151
|
if (typeof value === 'string') {
|
|
152
152
|
return TaintTrackingOperations.addSecureMark(iastContext, value, secureMarks, createNewTainted)
|
|
153
|
-
} else {
|
|
154
|
-
iterateObjectStrings(value, (value, levelKeys, parent, lastKey) => {
|
|
155
|
-
try {
|
|
156
|
-
const securedTainted = TaintTrackingOperations.addSecureMark(iastContext, value, secureMarks, createNewTainted)
|
|
157
|
-
if (createNewTainted) {
|
|
158
|
-
parent[lastKey] = securedTainted
|
|
159
|
-
}
|
|
160
|
-
} catch {
|
|
161
|
-
// if it is a readonly property, do nothing
|
|
162
|
-
}
|
|
163
|
-
})
|
|
164
|
-
return value
|
|
165
153
|
}
|
|
154
|
+
iterateObjectStrings(value, (value, levelKeys, parent, lastKey) => {
|
|
155
|
+
try {
|
|
156
|
+
const securedTainted = TaintTrackingOperations.addSecureMark(iastContext, value, secureMarks, createNewTainted)
|
|
157
|
+
if (createNewTainted) {
|
|
158
|
+
parent[lastKey] = securedTainted
|
|
159
|
+
}
|
|
160
|
+
} catch {
|
|
161
|
+
// if it is a readonly property, do nothing
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
return value
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
function disable () {
|
|
@@ -207,7 +207,7 @@ class TaintTrackingPlugin extends SourceIastPlugin {
|
|
|
207
207
|
|
|
208
208
|
if (Array.isArray(result)) {
|
|
209
209
|
for (let i = 0; i < result.length && i < this._rowsToTaint; i++) {
|
|
210
|
-
const nextName = name ? `${name}.${i}` :
|
|
210
|
+
const nextName = name ? `${name}.${i}` : String(i)
|
|
211
211
|
result[i] = this._taintDatabaseResult(result[i], dbOrigin, iastContext, nextName)
|
|
212
212
|
}
|
|
213
213
|
} else if (result && typeof result === 'object') {
|
|
@@ -14,6 +14,7 @@ const log = require('../../../log')
|
|
|
14
14
|
const { isMainThread } = require('worker_threads')
|
|
15
15
|
const { LOG_MESSAGE, REWRITTEN_MESSAGE } = require('./constants')
|
|
16
16
|
const orchestrionConfig = require('../../../../../datadog-instrumentations/src/orchestrion-config')
|
|
17
|
+
const { getEnvironmentVariable } = require('../../../config-helper')
|
|
17
18
|
|
|
18
19
|
let config
|
|
19
20
|
const hardcodedSecretCh = dc.channel('datadog:secrets:result')
|
|
@@ -26,7 +27,7 @@ let kSymbolPrepareStackTrace
|
|
|
26
27
|
function noop () {}
|
|
27
28
|
|
|
28
29
|
function isFlagPresent (flag) {
|
|
29
|
-
return
|
|
30
|
+
return getEnvironmentVariable('NODE_OPTIONS')?.includes(flag) ||
|
|
30
31
|
process.execArgv?.some(arg => arg.includes(flag))
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -19,9 +19,8 @@ function getVerbosity (verbosity) {
|
|
|
19
19
|
if (verbosity) {
|
|
20
20
|
verbosity = verbosity.toUpperCase()
|
|
21
21
|
return Verbosity[verbosity] === undefined ? Verbosity.INFORMATION : Verbosity[verbosity]
|
|
22
|
-
} else {
|
|
23
|
-
return Verbosity.INFORMATION
|
|
24
22
|
}
|
|
23
|
+
return Verbosity.INFORMATION
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
function getName (verbosityValue) {
|
|
@@ -16,18 +16,17 @@ function remove (range, rangeToRemove) {
|
|
|
16
16
|
return [range]
|
|
17
17
|
} else if (contains(rangeToRemove, range)) {
|
|
18
18
|
return []
|
|
19
|
-
} else {
|
|
20
|
-
const result = []
|
|
21
|
-
if (rangeToRemove.start > range.start) {
|
|
22
|
-
const offset = rangeToRemove.start - range.start
|
|
23
|
-
result.push({ start: range.start, end: range.start + offset })
|
|
24
|
-
}
|
|
25
|
-
if (rangeToRemove.end < range.end) {
|
|
26
|
-
const offset = range.end - rangeToRemove.end
|
|
27
|
-
result.push({ start: rangeToRemove.end, end: rangeToRemove.end + offset })
|
|
28
|
-
}
|
|
29
|
-
return result
|
|
30
19
|
}
|
|
20
|
+
const result = []
|
|
21
|
+
if (rangeToRemove.start > range.start) {
|
|
22
|
+
const offset = rangeToRemove.start - range.start
|
|
23
|
+
result.push({ start: range.start, end: range.start + offset })
|
|
24
|
+
}
|
|
25
|
+
if (rangeToRemove.end < range.end) {
|
|
26
|
+
const offset = range.end - rangeToRemove.end
|
|
27
|
+
result.push({ start: rangeToRemove.end, end: rangeToRemove.end + offset })
|
|
28
|
+
}
|
|
29
|
+
return result
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
module.exports = {
|