dd-trace 5.53.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/LICENSE-3rdparty.csv +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- 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 +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- 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-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- 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/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- 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-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- 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/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- 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/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- 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/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- 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 +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -261,9 +261,11 @@ class OpenAiTracingPlugin extends TracingPlugin {
|
|
|
261
261
|
if (error) {
|
|
262
262
|
this.metrics.increment('openai.request.error', 1, tags)
|
|
263
263
|
} else {
|
|
264
|
-
tags.push(
|
|
265
|
-
|
|
266
|
-
|
|
264
|
+
tags.push(
|
|
265
|
+
`org:${headers['openai-organization']}`,
|
|
266
|
+
`endpoint:${endpoint}`,
|
|
267
|
+
`model:${headers['openai-model'] || body.model}`
|
|
268
|
+
)
|
|
267
269
|
}
|
|
268
270
|
|
|
269
271
|
this.metrics.distribution('openai.request.duration', duration * 1000, tags)
|
|
@@ -329,7 +331,7 @@ class OpenAiTracingPlugin extends TracingPlugin {
|
|
|
329
331
|
sendLog (methodName, span, tags, openaiStore, error) {
|
|
330
332
|
if (!openaiStore) return
|
|
331
333
|
if (!Object.keys(openaiStore).length) return
|
|
332
|
-
if (!this.sampler.isSampled()) return
|
|
334
|
+
if (!this.sampler.isSampled(span)) return
|
|
333
335
|
|
|
334
336
|
const log = {
|
|
335
337
|
status: error ? 'error' : 'info',
|
|
@@ -725,7 +727,7 @@ function commonCreateResponseExtraction (tags, body, openaiStore, methodName) {
|
|
|
725
727
|
const choice = body.choices[choiceIdx]
|
|
726
728
|
|
|
727
729
|
// logprobs can be null and we still want to tag it as 'returned' even when set to 'null'
|
|
728
|
-
const specifiesLogProb = Object.keys(choice).
|
|
730
|
+
const specifiesLogProb = Object.keys(choice).includes('logprobs')
|
|
729
731
|
|
|
730
732
|
tags[`openai.response.choices.${choiceIdx}.finish_reason`] = choice.finish_reason
|
|
731
733
|
tags[`openai.response.choices.${choiceIdx}.logprobs`] = specifiesLogProb ? 'returned' : undefined
|
|
@@ -764,19 +766,17 @@ function usageExtraction (tags, body, methodName, openaiStore) {
|
|
|
764
766
|
} else if (body.model && ['chat.completions.create', 'completions.create'].includes(methodName)) {
|
|
765
767
|
// estimate tokens based on method name for completions and chat completions
|
|
766
768
|
const { model } = body
|
|
767
|
-
let promptEstimated = false
|
|
768
|
-
let completionEstimated = false
|
|
769
769
|
|
|
770
770
|
// prompt tokens
|
|
771
771
|
const payload = openaiStore
|
|
772
772
|
const promptTokensCount = countPromptTokens(methodName, payload, model)
|
|
773
773
|
promptTokens = promptTokensCount.promptTokens
|
|
774
|
-
promptEstimated = promptTokensCount.promptEstimated
|
|
774
|
+
const promptEstimated = promptTokensCount.promptEstimated
|
|
775
775
|
|
|
776
776
|
// completion tokens
|
|
777
777
|
const completionTokensCount = countCompletionTokens(body, model)
|
|
778
778
|
completionTokens = completionTokensCount.completionTokens
|
|
779
|
-
completionEstimated = completionTokensCount.completionEstimated
|
|
779
|
+
const completionEstimated = completionTokensCount.completionEstimated
|
|
780
780
|
|
|
781
781
|
// total tokens
|
|
782
782
|
totalTokens = promptTokens + completionTokens
|
|
@@ -790,7 +790,7 @@ function usageExtraction (tags, body, methodName, openaiStore) {
|
|
|
790
790
|
}
|
|
791
791
|
|
|
792
792
|
function truncateApiKey (apiKey) {
|
|
793
|
-
return apiKey && `sk-...${apiKey.
|
|
793
|
+
return apiKey && `sk-...${apiKey.slice(-4)}`
|
|
794
794
|
}
|
|
795
795
|
|
|
796
796
|
function tagChatCompletionRequestContent (contents, messageIdx, tags) {
|
|
@@ -989,15 +989,9 @@ function normalizeStringOrTokenArray (input, truncate) {
|
|
|
989
989
|
|
|
990
990
|
function defensiveArrayLength (maybeArray) {
|
|
991
991
|
if (maybeArray) {
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
} else {
|
|
995
|
-
// case of a singular item (ie body.training_file vs body.training_files)
|
|
996
|
-
return 1
|
|
997
|
-
}
|
|
992
|
+
// Detect singular item (ie body.training_file vs body.training_files)
|
|
993
|
+
return Array.isArray(maybeArray) ? maybeArray.length : 1
|
|
998
994
|
}
|
|
999
|
-
|
|
1000
|
-
return undefined
|
|
1001
995
|
}
|
|
1002
996
|
|
|
1003
997
|
module.exports = OpenAiTracingPlugin
|
|
@@ -20,7 +20,7 @@ class OracledbPlugin extends DatabasePlugin {
|
|
|
20
20
|
kind: 'client',
|
|
21
21
|
meta: {
|
|
22
22
|
'db.user': this.config.user,
|
|
23
|
-
'db.instance': url.pathname && url.pathname.
|
|
23
|
+
'db.instance': url.pathname && url.pathname.slice(1),
|
|
24
24
|
'db.hostname': url.hostname,
|
|
25
25
|
[CLIENT_PORT_KEY]: url.port
|
|
26
26
|
}
|
|
@@ -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,
|
|
@@ -34,7 +35,9 @@ const {
|
|
|
34
35
|
TEST_NAME,
|
|
35
36
|
TEST_IS_RUM_ACTIVE,
|
|
36
37
|
TEST_BROWSER_VERSION,
|
|
37
|
-
TEST_RETRY_REASON_TYPES
|
|
38
|
+
TEST_RETRY_REASON_TYPES,
|
|
39
|
+
TEST_IS_MODIFIED,
|
|
40
|
+
isModifiedTest
|
|
38
41
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
39
42
|
const { RESOURCE_NAME } = require('../../../ext/tags')
|
|
40
43
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
@@ -56,6 +59,16 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
56
59
|
this.numFailedTests = 0
|
|
57
60
|
this.numFailedSuites = 0
|
|
58
61
|
|
|
62
|
+
this.addSub('ci:playwright:test:is-modified', ({
|
|
63
|
+
filePath,
|
|
64
|
+
modifiedTests,
|
|
65
|
+
onDone
|
|
66
|
+
}) => {
|
|
67
|
+
const testSuite = getTestSuitePath(filePath, this.repositoryRoot)
|
|
68
|
+
const isModified = isModifiedTest(testSuite, 0, 0, modifiedTests, this.constructor.id)
|
|
69
|
+
onDone({ isModified })
|
|
70
|
+
})
|
|
71
|
+
|
|
59
72
|
this.addSub('ci:playwright:session:finish', ({
|
|
60
73
|
status,
|
|
61
74
|
isEarlyFlakeDetectionEnabled,
|
|
@@ -90,7 +103,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
90
103
|
finishAllTraceSpans(this.testSessionSpan)
|
|
91
104
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
92
105
|
provider: this.ciProviderName,
|
|
93
|
-
autoInjected: !!
|
|
106
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
94
107
|
})
|
|
95
108
|
appClosingTelemetry()
|
|
96
109
|
this.tracer._exporter.flush(onDone)
|
|
@@ -277,6 +290,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
277
290
|
hasPassedAttemptToFixRetries,
|
|
278
291
|
hasFailedAttemptToFixRetries,
|
|
279
292
|
isAtrRetry,
|
|
293
|
+
isModified,
|
|
280
294
|
onDone
|
|
281
295
|
}) => {
|
|
282
296
|
if (!span) return
|
|
@@ -327,6 +341,13 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
327
341
|
if (isQuarantined) {
|
|
328
342
|
span.setTag(TEST_MANAGEMENT_IS_QUARANTINED, 'true')
|
|
329
343
|
}
|
|
344
|
+
if (isModified) {
|
|
345
|
+
span.setTag(TEST_IS_MODIFIED, 'true')
|
|
346
|
+
if (isEfdRetry) {
|
|
347
|
+
span.setTag(TEST_IS_RETRY, 'true')
|
|
348
|
+
span.setTag(TEST_RETRY_REASON, TEST_RETRY_REASON_TYPES.efd)
|
|
349
|
+
}
|
|
350
|
+
}
|
|
330
351
|
steps.forEach(step => {
|
|
331
352
|
const stepStartTime = step.startTime.getTime()
|
|
332
353
|
const stepSpan = this.tracer.startSpan('playwright.step', {
|
|
@@ -342,7 +363,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
342
363
|
stepSpan.setTag('error', step.error)
|
|
343
364
|
}
|
|
344
365
|
let stepDuration = step.duration
|
|
345
|
-
if (stepDuration <= 0 || isNaN(stepDuration)) {
|
|
366
|
+
if (stepDuration <= 0 || Number.isNaN(stepDuration)) {
|
|
346
367
|
stepDuration = 0
|
|
347
368
|
}
|
|
348
369
|
stepSpan.finish(stepStartTime + stepDuration)
|
|
@@ -364,7 +385,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
364
385
|
span.finish()
|
|
365
386
|
|
|
366
387
|
finishAllTraceSpans(span)
|
|
367
|
-
if (
|
|
388
|
+
if (getEnvironmentVariable('DD_PLAYWRIGHT_WORKER')) {
|
|
368
389
|
this.tracer._exporter.flush(onDone)
|
|
369
390
|
}
|
|
370
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) {
|
|
@@ -63,7 +63,7 @@ function formatArg (arg) {
|
|
|
63
63
|
|
|
64
64
|
function trim (str, maxlen) {
|
|
65
65
|
if (str.length > maxlen) {
|
|
66
|
-
str = str.
|
|
66
|
+
str = str.slice(0, maxlen - 3) + '...'
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
return str
|
|
@@ -77,9 +77,7 @@ function normalizeConfig (config) {
|
|
|
77
77
|
|
|
78
78
|
const filter = urlFilter.getFilter(config)
|
|
79
79
|
|
|
80
|
-
return
|
|
81
|
-
filter
|
|
82
|
-
})
|
|
80
|
+
return { ...config, filter }
|
|
83
81
|
}
|
|
84
82
|
|
|
85
83
|
function uppercaseAllEntries (entries) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
|
|
4
|
-
const { storage } = require('../../datadog-core')
|
|
5
4
|
const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams')
|
|
6
5
|
|
|
7
6
|
class RheaConsumerPlugin extends ConsumerPlugin {
|
|
@@ -10,13 +9,14 @@ class RheaConsumerPlugin extends ConsumerPlugin {
|
|
|
10
9
|
constructor (...args) {
|
|
11
10
|
super(...args)
|
|
12
11
|
|
|
13
|
-
this.addTraceSub('dispatch', (
|
|
14
|
-
const span =
|
|
15
|
-
span.setTag('amqp.delivery.state', state)
|
|
12
|
+
this.addTraceSub('dispatch', (ctx) => {
|
|
13
|
+
const span = ctx.currentStore.span
|
|
14
|
+
span.setTag('amqp.delivery.state', ctx.state)
|
|
16
15
|
})
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
bindStart (ctx) {
|
|
19
|
+
const { msgObj } = ctx
|
|
20
20
|
const name = getResourceNameFromMessage(msgObj)
|
|
21
21
|
const childOf = extractTextMap(msgObj, this.tracer)
|
|
22
22
|
|
|
@@ -29,7 +29,7 @@ class RheaConsumerPlugin extends ConsumerPlugin {
|
|
|
29
29
|
'amqp.link.source.address': name,
|
|
30
30
|
'amqp.link.role': 'receiver'
|
|
31
31
|
}
|
|
32
|
-
})
|
|
32
|
+
}, ctx)
|
|
33
33
|
|
|
34
34
|
if (
|
|
35
35
|
this.config.dsmEnabled &&
|
|
@@ -42,6 +42,8 @@ class RheaConsumerPlugin extends ConsumerPlugin {
|
|
|
42
42
|
this.tracer
|
|
43
43
|
.setCheckpoint(['direction:in', `topic:${name}`, 'type:rabbitmq'], span, payloadSize)
|
|
44
44
|
}
|
|
45
|
+
|
|
46
|
+
return ctx.currentStore
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
|
|
@@ -13,7 +13,8 @@ class RheaProducerPlugin extends ProducerPlugin {
|
|
|
13
13
|
this.addTraceSub('encode', this.encode.bind(this))
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
bindStart (ctx) {
|
|
17
|
+
const { targetAddress, host, port } = ctx
|
|
17
18
|
const name = targetAddress || 'amq.topic'
|
|
18
19
|
this.startSpan({
|
|
19
20
|
resource: name,
|
|
@@ -24,7 +25,9 @@ class RheaProducerPlugin extends ProducerPlugin {
|
|
|
24
25
|
'out.host': host,
|
|
25
26
|
[CLIENT_PORT_KEY]: port
|
|
26
27
|
}
|
|
27
|
-
})
|
|
28
|
+
}, ctx)
|
|
29
|
+
|
|
30
|
+
return ctx.currentStore
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
encode (msg) {
|
|
@@ -44,12 +44,7 @@ class SeleniumPlugin extends CiPlugin {
|
|
|
44
44
|
if (!span) {
|
|
45
45
|
return
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
if (isTestSpan(span)) {
|
|
49
|
-
testSpan = span
|
|
50
|
-
} else {
|
|
51
|
-
testSpan = getTestSpanFromTrace(span.context()._trace)
|
|
52
|
-
}
|
|
47
|
+
const testSpan = isTestSpan(span) ? span : getTestSpanFromTrace(span.context()._trace)
|
|
53
48
|
if (!testSpan) {
|
|
54
49
|
return
|
|
55
50
|
}
|
|
@@ -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,
|
|
@@ -26,7 +27,9 @@ const {
|
|
|
26
27
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
27
28
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
28
29
|
getLibraryCapabilitiesTags,
|
|
29
|
-
TEST_RETRY_REASON_TYPES
|
|
30
|
+
TEST_RETRY_REASON_TYPES,
|
|
31
|
+
isModifiedTest,
|
|
32
|
+
TEST_IS_MODIFIED
|
|
30
33
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
31
34
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
32
35
|
const {
|
|
@@ -34,6 +37,7 @@ const {
|
|
|
34
37
|
TELEMETRY_EVENT_FINISHED,
|
|
35
38
|
TELEMETRY_TEST_SESSION
|
|
36
39
|
} = require('../../dd-trace/src/ci-visibility/telemetry')
|
|
40
|
+
const { DD_MAJOR } = require('../../../version')
|
|
37
41
|
|
|
38
42
|
// Milliseconds that we subtract from the error test duration
|
|
39
43
|
// so that they do not overlap with the following test
|
|
@@ -82,6 +86,13 @@ class VitestPlugin extends CiPlugin {
|
|
|
82
86
|
onDone(isQuarantined)
|
|
83
87
|
})
|
|
84
88
|
|
|
89
|
+
this.addSub('ci:vitest:test:is-modified', ({ modifiedTests, testSuiteAbsolutePath, onDone }) => {
|
|
90
|
+
const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
91
|
+
const isModified = isModifiedTest(testSuite, 0, 0, modifiedTests, this.constructor.id)
|
|
92
|
+
|
|
93
|
+
onDone(isModified)
|
|
94
|
+
})
|
|
95
|
+
|
|
85
96
|
this.addSub('ci:vitest:is-early-flake-detection-faulty', ({
|
|
86
97
|
knownTests,
|
|
87
98
|
testFilepaths,
|
|
@@ -107,7 +118,8 @@ class VitestPlugin extends CiPlugin {
|
|
|
107
118
|
mightHitProbe,
|
|
108
119
|
isRetryReasonEfd,
|
|
109
120
|
isRetryReasonAttemptToFix,
|
|
110
|
-
isRetryReasonAtr
|
|
121
|
+
isRetryReasonAtr,
|
|
122
|
+
isModified
|
|
111
123
|
} = ctx
|
|
112
124
|
|
|
113
125
|
const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
@@ -140,6 +152,9 @@ class VitestPlugin extends CiPlugin {
|
|
|
140
152
|
if (isDisabled) {
|
|
141
153
|
extraTags[TEST_MANAGEMENT_IS_DISABLED] = 'true'
|
|
142
154
|
}
|
|
155
|
+
if (isModified) {
|
|
156
|
+
extraTags[TEST_IS_MODIFIED] = 'true'
|
|
157
|
+
}
|
|
143
158
|
|
|
144
159
|
const span = this.startTestSpan(
|
|
145
160
|
testName,
|
|
@@ -204,37 +219,38 @@ class VitestPlugin extends CiPlugin {
|
|
|
204
219
|
hasFailedAllRetries,
|
|
205
220
|
attemptToFixFailed
|
|
206
221
|
}) => {
|
|
207
|
-
if (span) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
222
|
+
if (!span) {
|
|
223
|
+
return
|
|
224
|
+
}
|
|
225
|
+
if (shouldSetProbe && this.di && error?.stack) {
|
|
226
|
+
const probeInformation = this.addDiProbe(error)
|
|
227
|
+
if (probeInformation) {
|
|
228
|
+
const { file, line, stackIndex, setProbePromise } = probeInformation
|
|
229
|
+
this.runningTestProbe = { file, line }
|
|
230
|
+
this.testErrorStackIndex = stackIndex
|
|
231
|
+
promises.setProbePromise = setProbePromise
|
|
216
232
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
233
|
+
}
|
|
234
|
+
this.telemetry.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'test', {
|
|
235
|
+
hasCodeowners: !!span.context()._tags[TEST_CODE_OWNERS]
|
|
236
|
+
})
|
|
237
|
+
span.setTag(TEST_STATUS, 'fail')
|
|
221
238
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
finishAllTraceSpans(span)
|
|
239
|
+
if (error) {
|
|
240
|
+
span.setTag('error', error)
|
|
241
|
+
}
|
|
242
|
+
if (hasFailedAllRetries) {
|
|
243
|
+
span.setTag(TEST_HAS_FAILED_ALL_RETRIES, 'true')
|
|
244
|
+
}
|
|
245
|
+
if (attemptToFixFailed) {
|
|
246
|
+
span.setTag(TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED, 'false')
|
|
247
|
+
}
|
|
248
|
+
if (duration) {
|
|
249
|
+
span.finish(span._startTime + duration - MILLISECONDS_TO_SUBTRACT_FROM_FAILED_TEST_DURATION) // milliseconds
|
|
250
|
+
} else {
|
|
251
|
+
span.finish() // `duration` is empty for retries, so we'll use clock time
|
|
237
252
|
}
|
|
253
|
+
finishAllTraceSpans(span)
|
|
238
254
|
})
|
|
239
255
|
|
|
240
256
|
this.addSub('ci:vitest:test:skip', ({ testName, testSuiteAbsolutePath, isNew, isDisabled }) => {
|
|
@@ -260,15 +276,16 @@ class VitestPlugin extends CiPlugin {
|
|
|
260
276
|
this.addBind('ci:vitest:test-suite:start', (ctx) => {
|
|
261
277
|
const { testSuiteAbsolutePath, frameworkVersion } = ctx
|
|
262
278
|
|
|
263
|
-
this.command =
|
|
279
|
+
this.command = getEnvironmentVariable('DD_CIVISIBILITY_TEST_COMMAND')
|
|
264
280
|
this.frameworkVersion = frameworkVersion
|
|
265
281
|
const testSessionSpanContext = this.tracer.extract('text_map', {
|
|
266
|
-
'x-datadog-trace-id':
|
|
267
|
-
'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')
|
|
268
284
|
})
|
|
269
285
|
|
|
286
|
+
const trimmedCommand = DD_MAJOR < 6 ? this.command : 'vitest run'
|
|
270
287
|
// test suites run in a different process, so they also need to init the metadata dictionary
|
|
271
|
-
const testSessionName = getTestSessionName(this.config,
|
|
288
|
+
const testSessionName = getTestSessionName(this.config, trimmedCommand, this.testEnvironmentMetadata)
|
|
272
289
|
const metadataTags = {}
|
|
273
290
|
for (const testLevel of TEST_LEVEL_EVENT_TYPES) {
|
|
274
291
|
metadataTags[testLevel] = {
|
|
@@ -380,7 +397,7 @@ class VitestPlugin extends CiPlugin {
|
|
|
380
397
|
finishAllTraceSpans(this.testSessionSpan)
|
|
381
398
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
382
399
|
provider: this.ciProviderName,
|
|
383
|
-
autoInjected: !!
|
|
400
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
384
401
|
})
|
|
385
402
|
this.tracer._exporter.flush(onFinish)
|
|
386
403
|
})
|
|
@@ -100,7 +100,7 @@ function wrapFunction (original, wrapper) {
|
|
|
100
100
|
*/
|
|
101
101
|
function wrap (target, name, wrapper, options) {
|
|
102
102
|
if (typeof wrapper !== 'function') {
|
|
103
|
-
throw new
|
|
103
|
+
throw new TypeError(wrapper ? 'Target is not a function' : 'No function provided')
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
// No descriptor means original was on the prototype. This is not totally
|
|
@@ -141,11 +141,7 @@ function wrap (target, name, wrapper, options) {
|
|
|
141
141
|
} else {
|
|
142
142
|
if (descriptor.get) {
|
|
143
143
|
// `replaceGetter` may only be used when the getter has no side effect.
|
|
144
|
-
|
|
145
|
-
descriptor.get = () => wrapped
|
|
146
|
-
} else {
|
|
147
|
-
descriptor.get = wrapped
|
|
148
|
-
}
|
|
144
|
+
descriptor.get = options?.replaceGetter ? () => wrapped : wrapped
|
|
149
145
|
} else {
|
|
150
146
|
descriptor.value = wrapped
|
|
151
147
|
}
|
|
@@ -252,7 +248,7 @@ function assertMethod (target, name, method) {
|
|
|
252
248
|
}
|
|
253
249
|
}
|
|
254
250
|
|
|
255
|
-
throw new
|
|
251
|
+
throw new TypeError(message)
|
|
256
252
|
}
|
|
257
253
|
}
|
|
258
254
|
|
|
@@ -264,7 +260,7 @@ function assertMethod (target, name, method) {
|
|
|
264
260
|
*/
|
|
265
261
|
function assertNotClass (target) {
|
|
266
262
|
if (Function.prototype.toString.call(target).startsWith('class')) {
|
|
267
|
-
throw new
|
|
263
|
+
throw new TypeError('Target is a native class constructor and cannot be wrapped.')
|
|
268
264
|
}
|
|
269
265
|
}
|
|
270
266
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* eslint-disable @stylistic/
|
|
1
|
+
/* eslint-disable @stylistic/max-len */
|
|
2
2
|
'use strict'
|
|
3
3
|
|
|
4
4
|
const html = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>You\'ve been blocked</title><style>a,body,div,html,span{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{background:-webkit-radial-gradient(26% 19%,circle,#fff,#f4f7f9);background:radial-gradient(circle at 26% 19%,#fff,#f4f7f9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;width:100%;min-height:100vh;line-height:1;flex-direction:column}p{display:block}main{text-align:center;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;flex-direction:column}p{font-size:18px;line-height:normal;color:#646464;font-family:sans-serif;font-weight:400}a{color:#4842b7}footer{width:100%;text-align:center}footer p{font-size:16px}</style></head><body><main><p>Sorry, you cannot access this page. Please contact the customer service team.</p></main><footer><p>Security provided by <a href="https://www.datadoghq.com/product/security-platform/application-security-monitoring/" target="_blank">Datadog</a></p></footer></body></html>'
|
|
@@ -93,11 +93,9 @@ function getBlockWithContentData (req, specificType, actionParameters) {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
function getBlockingData (req, specificType, actionParameters) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return getBlockWithContentData(req, specificType, actionParameters)
|
|
100
|
-
}
|
|
96
|
+
return actionParameters?.location
|
|
97
|
+
? getBlockWithRedirectData(actionParameters)
|
|
98
|
+
: getBlockWithContentData(req, specificType, actionParameters)
|
|
101
99
|
}
|
|
102
100
|
|
|
103
101
|
function block (req, res, rootSpan, abortController, actionParameters = defaultBlockingActionParameters) {
|
|
@@ -140,23 +138,11 @@ function getBlockingAction (actions) {
|
|
|
140
138
|
}
|
|
141
139
|
|
|
142
140
|
function setTemplates (config) {
|
|
143
|
-
|
|
144
|
-
templateHtml = config.appsec.blockedTemplateHtml
|
|
145
|
-
} else {
|
|
146
|
-
templateHtml = blockedTemplates.html
|
|
147
|
-
}
|
|
141
|
+
templateHtml = config.appsec.blockedTemplateHtml || blockedTemplates.html
|
|
148
142
|
|
|
149
|
-
|
|
150
|
-
templateJson = config.appsec.blockedTemplateJson
|
|
151
|
-
} else {
|
|
152
|
-
templateJson = blockedTemplates.json
|
|
153
|
-
}
|
|
143
|
+
templateJson = config.appsec.blockedTemplateJson || blockedTemplates.json
|
|
154
144
|
|
|
155
|
-
|
|
156
|
-
templateGraphqlJson = config.appsec.blockedTemplateGraphql
|
|
157
|
-
} else {
|
|
158
|
-
templateGraphqlJson = blockedTemplates.graphqlJson
|
|
159
|
-
}
|
|
145
|
+
templateGraphqlJson = config.appsec.blockedTemplateGraphql || blockedTemplates.graphqlJson
|
|
160
146
|
}
|
|
161
147
|
|
|
162
148
|
function isBlocked (res) {
|
|
@@ -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'),
|
|
@@ -19,26 +19,21 @@ class HstsHeaderMissingAnalyzer extends MissingHeaderAnalyzer {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
_isHeaderValid (headerValue) {
|
|
22
|
-
if (!headerValue) {
|
|
23
|
-
return false
|
|
24
|
-
}
|
|
25
22
|
headerValue = headerValue.trim()
|
|
26
23
|
|
|
27
|
-
if (!headerValue
|
|
24
|
+
if (!headerValue?.startsWith(HEADER_VALID_PREFIX)) {
|
|
28
25
|
return false
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
const semicolonIndex = headerValue.indexOf(';')
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
timestampString = headerValue.substring(HEADER_VALID_PREFIX.length + 1)
|
|
37
|
-
}
|
|
29
|
+
const timestampString = headerValue.slice(
|
|
30
|
+
HEADER_VALID_PREFIX.length + 1,
|
|
31
|
+
semicolonIndex === -1 ? headerValue.length : semicolonIndex
|
|
32
|
+
)
|
|
38
33
|
|
|
39
|
-
const timestamp = parseInt(timestampString)
|
|
34
|
+
const timestamp = Number.parseInt(timestampString)
|
|
40
35
|
// eslint-disable-next-line eqeqeq
|
|
41
|
-
return timestamp
|
|
36
|
+
return timestamp > 0 && timestamp == timestampString
|
|
42
37
|
}
|
|
43
38
|
|
|
44
39
|
_isHttpsProtocol (req) {
|