dd-trace 5.53.0 → 5.54.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/index.d.ts +33 -16
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- 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 +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
- package/packages/datadog-instrumentations/src/couchbase.js +3 -3
- package/packages/datadog-instrumentations/src/cucumber.js +87 -40
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- 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/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- 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 +5 -7
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +137 -48
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
- 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/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- 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 +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +1 -2
- package/packages/datadog-instrumentations/src/playwright.js +112 -69
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +77 -28
- 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-aws-sdk/src/base.js +3 -2
- 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/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- 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 +57 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- 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 +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- 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 +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-jest/src/index.js +23 -21
- 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 +33 -13
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -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 +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +22 -2
- package/packages/datadog-plugin-redis/src/index.js +1 -1
- 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 +47 -31
- 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/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- 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 +4 -6
- 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 +6 -13
- 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 +1 -7
- 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 +5 -7
- 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 +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- 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 -24
- 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/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +1 -1
- 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 +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- 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 +2 -2
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- 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 +2 -2
- 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 +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- 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 +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- 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 +1 -1
- 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 +74 -67
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- 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/dogstatsd.js +5 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- 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 +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- 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 +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- 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/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +110 -96
- 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 +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- 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 +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- 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/plugins/ci_plugin.js +62 -10
- 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 +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- 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 +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- 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 +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- 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/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -9
- 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 +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -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/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 +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- 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 +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- 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
|
@@ -41,47 +41,23 @@ function removeTransaction (iastContext) {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
function newTaintedString (iastContext, string, name, type) {
|
|
44
|
-
let result
|
|
45
44
|
const transactionId = iastContext?.[IAST_TRANSACTION_ID]
|
|
46
|
-
|
|
47
|
-
result = TaintedUtils.newTaintedString(transactionId, string, name, type)
|
|
48
|
-
} else {
|
|
49
|
-
result = string
|
|
50
|
-
}
|
|
51
|
-
return result
|
|
45
|
+
return transactionId ? TaintedUtils.newTaintedString(transactionId, string, name, type) : string
|
|
52
46
|
}
|
|
53
47
|
|
|
54
48
|
function newTaintedObject (iastContext, obj, name, type) {
|
|
55
|
-
let result
|
|
56
49
|
const transactionId = iastContext?.[IAST_TRANSACTION_ID]
|
|
57
|
-
|
|
58
|
-
result = TaintedUtils.newTaintedObject(transactionId, obj, name, type)
|
|
59
|
-
} else {
|
|
60
|
-
result = obj
|
|
61
|
-
}
|
|
62
|
-
return result
|
|
50
|
+
return transactionId ? TaintedUtils.newTaintedObject(transactionId, obj, name, type) : obj
|
|
63
51
|
}
|
|
64
52
|
|
|
65
53
|
function isTainted (iastContext, string) {
|
|
66
|
-
let result
|
|
67
54
|
const transactionId = iastContext?.[IAST_TRANSACTION_ID]
|
|
68
|
-
|
|
69
|
-
result = TaintedUtils.isTainted(transactionId, string)
|
|
70
|
-
} else {
|
|
71
|
-
result = false
|
|
72
|
-
}
|
|
73
|
-
return result
|
|
55
|
+
return transactionId ? TaintedUtils.isTainted(transactionId, string) : false
|
|
74
56
|
}
|
|
75
57
|
|
|
76
58
|
function getRanges (iastContext, string) {
|
|
77
|
-
let result
|
|
78
59
|
const transactionId = iastContext?.[IAST_TRANSACTION_ID]
|
|
79
|
-
|
|
80
|
-
result = TaintedUtils.getRanges(transactionId, string)
|
|
81
|
-
} else {
|
|
82
|
-
result = []
|
|
83
|
-
}
|
|
84
|
-
return result
|
|
60
|
+
return transactionId ? TaintedUtils.getRanges(transactionId, string) : []
|
|
85
61
|
}
|
|
86
62
|
|
|
87
63
|
function addSecureMark (iastContext, string, mark, createNewTainted = true) {
|
|
@@ -129,13 +129,7 @@ class TaintTrackingPlugin extends SourceIastPlugin {
|
|
|
129
129
|
{ channelName: 'datadog:url:parse:finish' },
|
|
130
130
|
({ input, base, parsed, isURL }) => {
|
|
131
131
|
const iastContext = getIastContext(storage('legacy').getStore())
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (base) {
|
|
135
|
-
ranges = getRanges(iastContext, base)
|
|
136
|
-
} else {
|
|
137
|
-
ranges = getRanges(iastContext, input)
|
|
138
|
-
}
|
|
132
|
+
const ranges = getRanges(iastContext, base || input)
|
|
139
133
|
|
|
140
134
|
if (ranges?.length) {
|
|
141
135
|
if (isURL) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const shimmer = require('../../../../../../datadog-shimmer')
|
|
4
|
-
const { storage } = require('../../../../../../datadog-core')
|
|
5
4
|
const { getIastContext } = require('../../iast-context')
|
|
6
5
|
const { KAFKA_MESSAGE_KEY, KAFKA_MESSAGE_VALUE } = require('../source-types')
|
|
7
6
|
const { newTaintedObject, newTaintedString } = require('../operations')
|
|
@@ -10,7 +9,7 @@ const { SourceIastPlugin } = require('../../iast-plugin')
|
|
|
10
9
|
class KafkaConsumerIastPlugin extends SourceIastPlugin {
|
|
11
10
|
onConfigure () {
|
|
12
11
|
this.addSub({ channelName: 'dd-trace:kafkajs:consumer:afterStart', tag: [KAFKA_MESSAGE_KEY, KAFKA_MESSAGE_VALUE] },
|
|
13
|
-
({ message }) => this.taintKafkaMessage(message)
|
|
12
|
+
({ message, currentStore }) => this.taintKafkaMessage(message, currentStore)
|
|
14
13
|
)
|
|
15
14
|
}
|
|
16
15
|
|
|
@@ -21,8 +20,8 @@ class KafkaConsumerIastPlugin extends SourceIastPlugin {
|
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
taintKafkaMessage (message) {
|
|
25
|
-
const iastContext = getIastContext(
|
|
23
|
+
taintKafkaMessage (message, currentStore) {
|
|
24
|
+
const iastContext = getIastContext(currentStore)
|
|
26
25
|
|
|
27
26
|
if (iastContext && message) {
|
|
28
27
|
const { key, value } = message
|
|
@@ -12,7 +12,7 @@ const ddTraceDir = path.join(currentUrl.pathname, '..', '..', '..', '..', '..',
|
|
|
12
12
|
let port, rewriter, iastEnabled
|
|
13
13
|
|
|
14
14
|
export async function initialize (data) {
|
|
15
|
-
if (rewriter)
|
|
15
|
+
if (rewriter) throw new Error('ALREADY INITIALIZED')
|
|
16
16
|
|
|
17
17
|
const { csiMethods, telemetryVerbosity, chainSourceMap, orchestrionConfig } = data
|
|
18
18
|
port = data.port
|
|
@@ -41,11 +41,9 @@ function setGetOriginalPathAndLineFromSourceMapFunction (chainSourceMap, { getOr
|
|
|
41
41
|
? (path, line, column) => {
|
|
42
42
|
// if --enable-source-maps is present stacktraces of the rewritten files contain the original path, file and
|
|
43
43
|
// column because the sourcemap chaining is done during the rewriting process so we can skip it
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return getOriginalPathAndLineFromSourceMap(path, line, column)
|
|
48
|
-
}
|
|
44
|
+
return isPrivateModule(path) && !isDdTrace(path)
|
|
45
|
+
? { path, line, column }
|
|
46
|
+
: getOriginalPathAndLineFromSourceMap(path, line, column)
|
|
49
47
|
}
|
|
50
48
|
: getOriginalPathAndLineFromSourceMap
|
|
51
49
|
}
|
|
@@ -138,7 +136,7 @@ function esmRewritePostProcess (rewritten, filename) {
|
|
|
138
136
|
|
|
139
137
|
if (metrics?.status === 'modified') {
|
|
140
138
|
if (filename.startsWith('file://')) {
|
|
141
|
-
filename = filename.
|
|
139
|
+
filename = filename.slice(7)
|
|
142
140
|
}
|
|
143
141
|
|
|
144
142
|
cacheRewrittenSourceMap(filename, rewritten.content)
|
|
@@ -157,7 +155,7 @@ function shimPrepareStackTrace () {
|
|
|
157
155
|
return
|
|
158
156
|
}
|
|
159
157
|
const pstDescriptor = Object.getOwnPropertyDescriptor(global.Error, 'prepareStackTrace')
|
|
160
|
-
if (pstDescriptor
|
|
158
|
+
if (!pstDescriptor || pstDescriptor.configurable || pstDescriptor.writable) {
|
|
161
159
|
Object.defineProperty(global.Error, 'prepareStackTrace', getPrepareStackTraceAccessor())
|
|
162
160
|
}
|
|
163
161
|
shimmedPrepareStackTrace = true
|
|
@@ -71,7 +71,7 @@ function notString () {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
function isValidCsiMethod (fn, protos) {
|
|
74
|
-
return protos.
|
|
74
|
+
return protos.includes(fn)
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
function getCsiFn (cb, getContext, ...protos) {
|
|
@@ -90,7 +90,7 @@ function getCsiFn (cb, getContext, ...protos) {
|
|
|
90
90
|
function csiMethodsDefaults (names, excluded, getContext) {
|
|
91
91
|
const impl = {}
|
|
92
92
|
names.forEach(name => {
|
|
93
|
-
if (excluded.
|
|
93
|
+
if (excluded.includes(name)) return
|
|
94
94
|
impl[name] = getCsiFn(
|
|
95
95
|
(transactionId, res, target, ...rest) => TaintedUtils[name](transactionId, res, target, ...rest),
|
|
96
96
|
getContext,
|
|
@@ -10,10 +10,10 @@ function addMetricsToSpan (rootSpan, metrics, tagPrefix) {
|
|
|
10
10
|
const name = taggedMetricName(data)
|
|
11
11
|
let total = flattenMap.get(name)
|
|
12
12
|
const value = flatten(data)
|
|
13
|
-
if (
|
|
14
|
-
total = value
|
|
15
|
-
} else {
|
|
13
|
+
if (total) {
|
|
16
14
|
total += value
|
|
15
|
+
} else {
|
|
16
|
+
total = value
|
|
17
17
|
}
|
|
18
18
|
flattenMap.set(name, total)
|
|
19
19
|
})
|
|
@@ -34,9 +34,9 @@ function flatten (metricData) {
|
|
|
34
34
|
function taggedMetricName (data) {
|
|
35
35
|
const metric = data.metric
|
|
36
36
|
const tags = filterTags(data.tags)
|
|
37
|
-
return
|
|
38
|
-
? metric
|
|
39
|
-
:
|
|
37
|
+
return tags?.length
|
|
38
|
+
? `${metric}.${processTagValue(tags)}`
|
|
39
|
+
: metric
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function filterTags (tags) {
|
|
@@ -18,7 +18,7 @@ function isInfoAllowed (value) {
|
|
|
18
18
|
function getVerbosity (verbosity) {
|
|
19
19
|
if (verbosity) {
|
|
20
20
|
verbosity = verbosity.toUpperCase()
|
|
21
|
-
return Verbosity[verbosity]
|
|
21
|
+
return Verbosity[verbosity] === undefined ? Verbosity.INFORMATION : Verbosity[verbosity]
|
|
22
22
|
} else {
|
|
23
23
|
return Verbosity.INFORMATION
|
|
24
24
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const log = require('../../../../../log')
|
|
4
4
|
|
|
5
|
-
const COMMAND_PATTERN =
|
|
5
|
+
const COMMAND_PATTERN = String.raw`^(?:\s*(?:sudo|doas)\s+)?\b\S+\b\s(.*)`
|
|
6
6
|
const pattern = new RegExp(COMMAND_PATTERN, 'gmi')
|
|
7
7
|
|
|
8
8
|
module.exports = function extractSensitiveRanges (evidence) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const log = require('../../../../../log')
|
|
4
4
|
|
|
5
|
-
const LDAP_PATTERN =
|
|
5
|
+
const LDAP_PATTERN = String.raw`\(.*?(?:~=|=|<=|>=)(?<LITERAL>[^)]+)\)`
|
|
6
6
|
const pattern = new RegExp(LDAP_PATTERN, 'gmi')
|
|
7
7
|
|
|
8
8
|
module.exports = function extractSensitiveRanges (evidence) {
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
const log = require('../../../../../log')
|
|
4
4
|
|
|
5
5
|
const STRING_LITERAL = '\'(?:\'\'|[^\'])*\''
|
|
6
|
-
const POSTGRESQL_ESCAPED_LITERAL =
|
|
7
|
-
const MYSQL_STRING_LITERAL =
|
|
6
|
+
const POSTGRESQL_ESCAPED_LITERAL = String.raw`\$([^$]*)\$.*?\$\1\$`
|
|
7
|
+
const MYSQL_STRING_LITERAL = String.raw`"(?:\\"|[^"])*"|'(?:\\'|[^'])*'`
|
|
8
8
|
const LINE_COMMENT = '--.*$'
|
|
9
|
-
const BLOCK_COMMENT =
|
|
10
|
-
const EXPONENT =
|
|
11
|
-
const INTEGER_NUMBER =
|
|
12
|
-
const DECIMAL_NUMBER =
|
|
9
|
+
const BLOCK_COMMENT = String.raw`/\*[\s\S]*\*/`
|
|
10
|
+
const EXPONENT = String.raw`(?:E[-+]?\d+[fd]?)?`
|
|
11
|
+
const INTEGER_NUMBER = String.raw`(?<!\w)\d+`
|
|
12
|
+
const DECIMAL_NUMBER = String.raw`\d*\.\d+`
|
|
13
13
|
const HEX_NUMBER = 'x\'[0-9a-f]+\'|0x[0-9a-f]+'
|
|
14
14
|
const BIN_NUMBER = 'b\'[0-9a-f]+\'|0b[0-9a-f]+'
|
|
15
15
|
const NUMERIC_LITERAL =
|
|
@@ -21,7 +21,7 @@ const NUMERIC_LITERAL =
|
|
|
21
21
|
INTEGER_NUMBER + EXPONENT
|
|
22
22
|
].join('|')
|
|
23
23
|
})`
|
|
24
|
-
const ORACLE_ESCAPED_LITERAL =
|
|
24
|
+
const ORACLE_ESCAPED_LITERAL = String.raw`q'<.*?>'|q'\(.*?\)'|q'\{.*?\}'|q'\[.*?\]'|q'(?<ESCAPE>.).*?\k<ESCAPE>'`
|
|
25
25
|
|
|
26
26
|
const patterns = {
|
|
27
27
|
ANSI: new RegExp( // Default
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
+
/* eslint-disable unicorn/prefer-string-slice */
|
|
2
3
|
|
|
3
4
|
const log = require('../../../../log')
|
|
4
5
|
const vulnerabilities = require('../../vulnerabilities')
|
|
@@ -82,7 +83,7 @@ class SensitiveHandler {
|
|
|
82
83
|
|
|
83
84
|
for (let i = 0; i < value.length; i++) {
|
|
84
85
|
if (nextTainted != null && nextTainted.start === i) {
|
|
85
|
-
this.writeValuePart(valueParts, value.
|
|
86
|
+
this.writeValuePart(valueParts, value.slice(start, i), sourceIndex)
|
|
86
87
|
|
|
87
88
|
sourceIndex = sourcesIndexes[nextTaintedIndex]
|
|
88
89
|
|
|
@@ -113,16 +114,14 @@ class SensitiveHandler {
|
|
|
113
114
|
nextSensitive = entries.length > 0 ? entries[0] : null
|
|
114
115
|
}
|
|
115
116
|
|
|
116
|
-
if (this.isSensibleSource(sources[sourceIndex])) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
sources[sourceIndex].redacted = true
|
|
121
|
-
}
|
|
117
|
+
if (this.isSensibleSource(sources[sourceIndex]) && !sources[sourceIndex].redacted) {
|
|
118
|
+
redactedSources.push(sourceIndex)
|
|
119
|
+
sources[sourceIndex].pattern = ''.padEnd(sources[sourceIndex].value.length, REDACTED_SOURCE_BUFFER)
|
|
120
|
+
sources[sourceIndex].redacted = true
|
|
122
121
|
}
|
|
123
122
|
|
|
124
|
-
if (redactedSources.
|
|
125
|
-
const partValue = value.
|
|
123
|
+
if (redactedSources.includes(sourceIndex)) {
|
|
124
|
+
const partValue = value.slice(i, i + (nextTainted.end - nextTainted.start))
|
|
126
125
|
this.writeRedactedValuePart(
|
|
127
126
|
valueParts,
|
|
128
127
|
partValue.length,
|
|
@@ -135,7 +134,7 @@ class SensitiveHandler {
|
|
|
135
134
|
redactedSourcesContext[sourceIndex] = []
|
|
136
135
|
} else {
|
|
137
136
|
const substringEnd = Math.min(nextTainted.end, value.length)
|
|
138
|
-
this.writeValuePart(valueParts, value.
|
|
137
|
+
this.writeValuePart(valueParts, value.slice(nextTainted.start, substringEnd), sourceIndex)
|
|
139
138
|
}
|
|
140
139
|
|
|
141
140
|
start = i + (nextTainted.end - nextTainted.start)
|
|
@@ -144,7 +143,7 @@ class SensitiveHandler {
|
|
|
144
143
|
nextTaintedIndex++
|
|
145
144
|
sourceIndex = null
|
|
146
145
|
} else if (nextSensitive != null && nextSensitive.start === i) {
|
|
147
|
-
this.writeValuePart(valueParts, value.
|
|
146
|
+
this.writeValuePart(valueParts, value.slice(start, i), sourceIndex)
|
|
148
147
|
if (nextTainted != null && intersects(nextSensitive, nextTainted)) {
|
|
149
148
|
sourceIndex = sourcesIndexes[nextTaintedIndex]
|
|
150
149
|
|
|
@@ -171,7 +170,7 @@ class SensitiveHandler {
|
|
|
171
170
|
}
|
|
172
171
|
|
|
173
172
|
if (start < value.length) {
|
|
174
|
-
this.writeValuePart(valueParts, value.
|
|
173
|
+
this.writeValuePart(valueParts, value.slice(start))
|
|
175
174
|
}
|
|
176
175
|
|
|
177
176
|
return { redactedValueParts: valueParts, redactedSources }
|
|
@@ -197,10 +196,10 @@ class SensitiveHandler {
|
|
|
197
196
|
|
|
198
197
|
writeValuePart (valueParts, value, source) {
|
|
199
198
|
if (value.length > 0) {
|
|
200
|
-
if (source
|
|
201
|
-
valueParts.push({ value, source })
|
|
202
|
-
} else {
|
|
199
|
+
if (source == null) {
|
|
203
200
|
valueParts.push({ value })
|
|
201
|
+
} else {
|
|
202
|
+
valueParts.push({ value, source })
|
|
204
203
|
}
|
|
205
204
|
}
|
|
206
205
|
}
|
|
@@ -214,7 +213,9 @@ class SensitiveHandler {
|
|
|
214
213
|
sourceRedactionContext,
|
|
215
214
|
isSensibleSource
|
|
216
215
|
) {
|
|
217
|
-
if (sourceIndex
|
|
216
|
+
if (sourceIndex == null) {
|
|
217
|
+
valueParts.push({ redacted: true })
|
|
218
|
+
} else {
|
|
218
219
|
const placeholder = source.value.includes(partValue)
|
|
219
220
|
? source.pattern
|
|
220
221
|
: '*'.repeat(length)
|
|
@@ -252,9 +253,9 @@ class SensitiveHandler {
|
|
|
252
253
|
_value.substring(_sourceRedactionContext.start - offset, _sourceRedactionContext.end - offset)
|
|
253
254
|
const indexOfPartValueInPattern = source.value.indexOf(sensitive)
|
|
254
255
|
|
|
255
|
-
const pattern = indexOfPartValueInPattern
|
|
256
|
-
? placeholder.substring(
|
|
257
|
-
: placeholder.substring(
|
|
256
|
+
const pattern = indexOfPartValueInPattern === -1
|
|
257
|
+
? placeholder.substring(_sourceRedactionContext.start, _sourceRedactionContext.end)
|
|
258
|
+
: placeholder.substring(indexOfPartValueInPattern, indexOfPartValueInPattern + sensitive.length)
|
|
258
259
|
|
|
259
260
|
valueParts.push({
|
|
260
261
|
redacted: true,
|
|
@@ -262,7 +263,7 @@ class SensitiveHandler {
|
|
|
262
263
|
pattern
|
|
263
264
|
})
|
|
264
265
|
|
|
265
|
-
_value = _value.
|
|
266
|
+
_value = _value.slice(pattern.length)
|
|
266
267
|
offset += pattern.length
|
|
267
268
|
})
|
|
268
269
|
|
|
@@ -273,8 +274,6 @@ class SensitiveHandler {
|
|
|
273
274
|
})
|
|
274
275
|
}
|
|
275
276
|
}
|
|
276
|
-
} else {
|
|
277
|
-
valueParts.push({ redacted: true })
|
|
278
277
|
}
|
|
279
278
|
}
|
|
280
279
|
|
|
@@ -282,7 +281,7 @@ class SensitiveHandler {
|
|
|
282
281
|
if (redactionNamePattern) {
|
|
283
282
|
try {
|
|
284
283
|
this._namePattern = new RegExp(redactionNamePattern, 'gmi')
|
|
285
|
-
} catch
|
|
284
|
+
} catch {
|
|
286
285
|
log.warn('[ASM] Redaction name pattern is not valid')
|
|
287
286
|
}
|
|
288
287
|
}
|
|
@@ -290,7 +289,7 @@ class SensitiveHandler {
|
|
|
290
289
|
if (redactionValuePattern) {
|
|
291
290
|
try {
|
|
292
291
|
this._valuePattern = new RegExp(redactionValuePattern, 'gmi')
|
|
293
|
-
} catch
|
|
292
|
+
} catch {
|
|
294
293
|
log.warn('[ASM] Redaction value pattern is not valid')
|
|
295
294
|
}
|
|
296
295
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// eslint-disable-next-line @stylistic/
|
|
1
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
2
2
|
const DEFAULT_IAST_REDACTION_NAME_PATTERN = '(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|(?:sur|last)name|user(?:name)?|address|e?mail)'
|
|
3
|
-
// eslint-disable-next-line @stylistic/
|
|
4
|
-
const DEFAULT_IAST_REDACTION_VALUE_PATTERN =
|
|
3
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
4
|
+
const DEFAULT_IAST_REDACTION_VALUE_PATTERN = String.raw`(?:bearer\s+[a-z0-9\._\-]+|glpat-[\w\-]{20}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\w=\-]+\.ey[I-L][\w=\-]+(?:\.[\w.+/=\-]+)?|(?:[\-]{5}BEGIN[a-z\s]+PRIVATE\sKEY[\-]{5}[^\-]+[\-]{5}END[a-z\s]+PRIVATE\sKEY[\-]{5}|ssh-rsa\s*[a-z0-9/\.+]{100,})|[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,})`
|
|
5
5
|
|
|
6
6
|
module.exports = {
|
|
7
7
|
DEFAULT_IAST_REDACTION_NAME_PATTERN,
|
|
@@ -57,14 +57,14 @@ class VulnerabilityFormatter {
|
|
|
57
57
|
|
|
58
58
|
evidence.ranges.forEach((range, rangeIndex) => {
|
|
59
59
|
if (fromIndex < range.start) {
|
|
60
|
-
valueParts.push({ value: evidence.value.
|
|
60
|
+
valueParts.push({ value: evidence.value.slice(fromIndex, range.start) })
|
|
61
61
|
}
|
|
62
|
-
valueParts.push({ value: evidence.value.
|
|
62
|
+
valueParts.push({ value: evidence.value.slice(range.start, range.end), source: sourcesIndexes[rangeIndex] })
|
|
63
63
|
fromIndex = range.end
|
|
64
64
|
})
|
|
65
65
|
|
|
66
66
|
if (fromIndex < evidence.value.length) {
|
|
67
|
-
valueParts.push({ value: evidence.value.
|
|
67
|
+
valueParts.push({ value: evidence.value.slice(fromIndex) })
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
return { valueParts }
|
|
@@ -72,7 +72,7 @@ class VulnerabilityFormatter {
|
|
|
72
72
|
|
|
73
73
|
formatEvidence (type, evidence, sourcesIndexes, sources) {
|
|
74
74
|
if (evidence.value === undefined) {
|
|
75
|
-
return
|
|
75
|
+
return
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
return this._redactVulnearbilities
|
|
@@ -7,7 +7,7 @@ const STRINGIFY_RANGE_KEY = 'DD_' + crypto.randomBytes(20).toString('hex')
|
|
|
7
7
|
const STRINGIFY_SENSITIVE_KEY = STRINGIFY_RANGE_KEY + 'SENSITIVE'
|
|
8
8
|
const STRINGIFY_SENSITIVE_NOT_STRING_KEY = STRINGIFY_SENSITIVE_KEY + 'NOTSTRING'
|
|
9
9
|
|
|
10
|
-
// eslint-disable-next-line @stylistic/
|
|
10
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
11
11
|
const KEYS_REGEX_WITH_SENSITIVE_RANGES = new RegExp(`(?:"(${STRINGIFY_RANGE_KEY}_\\d+_))|(?:"(${STRINGIFY_SENSITIVE_KEY}_\\d+_(\\d+)_))|("${STRINGIFY_SENSITIVE_NOT_STRING_KEY}_\\d+_([\\s0-9.a-zA-Z]*)")`, 'gm')
|
|
12
12
|
const KEYS_REGEX_WITHOUT_SENSITIVE_RANGES = new RegExp(`"(${STRINGIFY_RANGE_KEY}_\\d+_)`, 'gm')
|
|
13
13
|
|
|
@@ -99,22 +99,17 @@ function stringifyWithRanges (obj, objRanges, loadSensitiveRanges = false) {
|
|
|
99
99
|
} else {
|
|
100
100
|
currentLevelClone[key] = val
|
|
101
101
|
}
|
|
102
|
-
} else if (Array.isArray(val)) {
|
|
103
|
-
currentLevelClone[key] = []
|
|
104
102
|
} else {
|
|
105
|
-
currentLevelClone[key] = {}
|
|
103
|
+
currentLevelClone[key] = Array.isArray(val) ? [] : {}
|
|
106
104
|
}
|
|
107
105
|
})
|
|
108
106
|
|
|
109
107
|
value = JSON.stringify(cloneObj, null, 2)
|
|
110
108
|
|
|
111
109
|
if (counter > 0) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
} else {
|
|
116
|
-
keysRegex = KEYS_REGEX_WITHOUT_SENSITIVE_RANGES
|
|
117
|
-
}
|
|
110
|
+
const keysRegex = loadSensitiveRanges
|
|
111
|
+
? KEYS_REGEX_WITH_SENSITIVE_RANGES
|
|
112
|
+
: KEYS_REGEX_WITHOUT_SENSITIVE_RANGES
|
|
118
113
|
keysRegex.lastIndex = 0
|
|
119
114
|
|
|
120
115
|
let regexRes = keysRegex.exec(value)
|
|
@@ -141,7 +136,7 @@ function stringifyWithRanges (obj, objRanges, loadSensitiveRanges = false) {
|
|
|
141
136
|
|
|
142
137
|
sensitiveRanges.push({
|
|
143
138
|
start: offset,
|
|
144
|
-
end: offset + parseInt(regexRes[3])
|
|
139
|
+
end: offset + Number.parseInt(regexRes[3])
|
|
145
140
|
})
|
|
146
141
|
|
|
147
142
|
value = value.replace(sensitiveId, '')
|
|
@@ -79,17 +79,15 @@ function isValidVulnerability (vulnerability) {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
function sendVulnerabilities (vulnerabilities, span) {
|
|
82
|
-
if (vulnerabilities &&
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
span.addTags(tags)
|
|
92
|
-
}
|
|
82
|
+
if (vulnerabilities?.length && span?.addTags) {
|
|
83
|
+
const validatedVulnerabilities = vulnerabilities.filter(isValidVulnerability)
|
|
84
|
+
const jsonToSend = vulnerabilitiesFormatter.toJson(validatedVulnerabilities)
|
|
85
|
+
|
|
86
|
+
if (jsonToSend.vulnerabilities.length > 0) {
|
|
87
|
+
const tags = {}
|
|
88
|
+
// TODO: Store this outside of the span and set the tag in the exporter.
|
|
89
|
+
tags[IAST_JSON_TAG_KEY] = JSON.stringify(jsonToSend)
|
|
90
|
+
span.addTags(tags)
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
return IAST_JSON_TAG_KEY
|
|
@@ -22,8 +22,8 @@ function removeAllListeners (emitter, event) {
|
|
|
22
22
|
}
|
|
23
23
|
cleaned = true
|
|
24
24
|
|
|
25
|
-
for (
|
|
26
|
-
emitter.on(event,
|
|
25
|
+
for (const listener of listeners) {
|
|
26
|
+
emitter.on(event, listener)
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -41,19 +41,7 @@ function findDatadogRaspAbortError (err, deep = 10) {
|
|
|
41
41
|
function handleUncaughtExceptionMonitor (error) {
|
|
42
42
|
if (!blockOnDatadogRaspAbortError({ error })) return
|
|
43
43
|
|
|
44
|
-
if (
|
|
45
|
-
const cleanUp = removeAllListeners(process, 'uncaughtException')
|
|
46
|
-
const handler = () => {
|
|
47
|
-
process.removeListener('uncaughtException', handler)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
setTimeout(() => {
|
|
51
|
-
process.removeListener('uncaughtException', handler)
|
|
52
|
-
cleanUp()
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
process.on('uncaughtException', handler)
|
|
56
|
-
} else {
|
|
44
|
+
if (process.hasUncaughtExceptionCaptureCallback()) {
|
|
57
45
|
// uncaughtException event is not executed when hasUncaughtExceptionCaptureCallback is true
|
|
58
46
|
let previousCb
|
|
59
47
|
const cb = ({ currentCallback, abortController }) => {
|
|
@@ -78,6 +66,18 @@ function handleUncaughtExceptionMonitor (error) {
|
|
|
78
66
|
process.setUncaughtExceptionCaptureCallback(previousCb)
|
|
79
67
|
})
|
|
80
68
|
}
|
|
69
|
+
} else {
|
|
70
|
+
const cleanUp = removeAllListeners(process, 'uncaughtException')
|
|
71
|
+
const handler = () => {
|
|
72
|
+
process.removeListener('uncaughtException', handler)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
process.removeListener('uncaughtException', handler)
|
|
77
|
+
cleanUp()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
process.on('uncaughtException', handler)
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -88,6 +88,7 @@ function pathToStr (path) {
|
|
|
88
88
|
if (!path) return
|
|
89
89
|
|
|
90
90
|
if (typeof path === 'string' ||
|
|
91
|
+
// eslint-disable-next-line unicorn/no-instanceof-builtins
|
|
91
92
|
path instanceof String ||
|
|
92
93
|
path instanceof Buffer ||
|
|
93
94
|
path instanceof URL) {
|
|
@@ -104,7 +105,7 @@ function shouldAnalyze (path, fs) {
|
|
|
104
105
|
|
|
105
106
|
function shouldAnalyzeURLFile (path, fs) {
|
|
106
107
|
if (path.startsWith('file://')) {
|
|
107
|
-
return shouldAnalyze(path.
|
|
108
|
+
return shouldAnalyze(path.slice(7), fs)
|
|
108
109
|
}
|
|
109
110
|
}
|
|
110
111
|
|