dd-trace 5.52.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/README.md +5 -0
- package/index.d.ts +87 -22
- 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 +57 -37
- 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 +3 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
- package/packages/datadog-instrumentations/src/couchbase.js +5 -4
- package/packages/datadog-instrumentations/src/cucumber.js +126 -84
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +2 -6
- package/packages/datadog-instrumentations/src/fs.js +7 -6
- 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 +1 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
- package/packages/datadog-instrumentations/src/http/client.js +16 -21
- package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
- package/packages/datadog-instrumentations/src/jest.js +184 -87
- package/packages/datadog-instrumentations/src/kafkajs.js +65 -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 +85 -59
- package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
- 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 +55 -47
- package/packages/datadog-instrumentations/src/net.js +4 -2
- package/packages/datadog-instrumentations/src/next.js +7 -14
- 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 +6 -13
- package/packages/datadog-instrumentations/src/playwright.js +170 -136
- 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/url.js +9 -17
- package/packages/datadog-instrumentations/src/vitest.js +126 -97
- 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 +86 -20
- 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-iovalkey/src/index.js +18 -0
- package/packages/datadog-plugin-jest/src/index.js +36 -28
- 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 +15 -7
- 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 +88 -48
- 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 +48 -22
- package/packages/datadog-plugin-redis/src/index.js +9 -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 +99 -72
- package/packages/datadog-shimmer/src/shimmer.js +163 -36
- 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/graphql.js +2 -2
- 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 +15 -12
- package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
- 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/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
- 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 -8
- 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 +131 -72
- 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 +17 -27
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
- 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 +31 -4
- package/packages/dd-trace/src/dogstatsd.js +7 -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 +113 -99
- 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 +1 -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 -13
- 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/serverless.js +0 -48
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- 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
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const LRUCache = require('lru-cache')
|
|
4
|
+
const web = require('../../plugins/util/web')
|
|
5
|
+
const vulnerabilities = require('./vulnerabilities')
|
|
6
|
+
|
|
3
7
|
const OVERHEAD_CONTROLLER_CONTEXT_KEY = 'oce'
|
|
4
8
|
const REPORT_VULNERABILITY = 'REPORT_VULNERABILITY'
|
|
5
9
|
const INTERVAL_RESET_GLOBAL_CONTEXT = 60 * 1000
|
|
@@ -9,13 +13,62 @@ const GLOBAL_OCE_CONTEXT = {}
|
|
|
9
13
|
let resetGlobalContextInterval
|
|
10
14
|
let config = {}
|
|
11
15
|
let availableRequest = 0
|
|
16
|
+
|
|
17
|
+
const globalRouteMap = new LRUCache({ max: 4096 })
|
|
18
|
+
let vulnerabilitiesSize = 0
|
|
19
|
+
const vulnerabilityIndexes = Object.values(vulnerabilities).reduce((obj, item, index) => {
|
|
20
|
+
obj[item] = index
|
|
21
|
+
vulnerabilitiesSize++
|
|
22
|
+
return obj
|
|
23
|
+
}, {})
|
|
24
|
+
|
|
25
|
+
function newCountersArray () {
|
|
26
|
+
return (new Array(vulnerabilitiesSize)).fill(0)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function copyFromGlobalMap (route) {
|
|
30
|
+
const vulnerabilityCounters = globalRouteMap.get(route)
|
|
31
|
+
return vulnerabilityCounters ? [...vulnerabilityCounters] : newCountersArray()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// for testing purposes
|
|
35
|
+
function clearGlobalRouteMap () {
|
|
36
|
+
globalRouteMap.clear()
|
|
37
|
+
}
|
|
38
|
+
|
|
12
39
|
const OPERATIONS = {
|
|
13
40
|
REPORT_VULNERABILITY: {
|
|
14
|
-
hasQuota: (context) => {
|
|
15
|
-
const reserved = context
|
|
41
|
+
hasQuota: (context, vulnerabilityType) => {
|
|
42
|
+
const reserved = context?.tokens?.[REPORT_VULNERABILITY] > 0
|
|
43
|
+
if (reserved && context.route != null) {
|
|
44
|
+
let copyMap = context.copyMap
|
|
45
|
+
let localMap = context.localMap
|
|
46
|
+
|
|
47
|
+
if (context.loadedRoute !== context.route) {
|
|
48
|
+
context.copyMaps ??= {}
|
|
49
|
+
context.copyMaps[context.route] ??= copyFromGlobalMap(context.route)
|
|
50
|
+
context.localMaps ??= {}
|
|
51
|
+
context.localMaps[context.route] ??= newCountersArray()
|
|
52
|
+
context.loadedRoute = context.route
|
|
53
|
+
copyMap = context.copyMaps[context.route]
|
|
54
|
+
localMap = context.localMaps[context.route]
|
|
55
|
+
context.copyMap = copyMap
|
|
56
|
+
context.localMap = localMap
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const vulnerabilityIndex = vulnerabilityIndexes[vulnerabilityType]
|
|
60
|
+
const counter = localMap[vulnerabilityIndex]++
|
|
61
|
+
const storedCounter = copyMap[vulnerabilityIndex]
|
|
62
|
+
|
|
63
|
+
if (counter < storedCounter) {
|
|
64
|
+
return false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
16
68
|
if (reserved) {
|
|
17
69
|
context.tokens[REPORT_VULNERABILITY]--
|
|
18
70
|
}
|
|
71
|
+
|
|
19
72
|
return reserved
|
|
20
73
|
},
|
|
21
74
|
name: REPORT_VULNERABILITY,
|
|
@@ -41,12 +94,52 @@ function _getNewContext () {
|
|
|
41
94
|
}
|
|
42
95
|
|
|
43
96
|
function _getContext (iastContext) {
|
|
44
|
-
if (iastContext
|
|
97
|
+
if (iastContext?.[OVERHEAD_CONTROLLER_CONTEXT_KEY]) {
|
|
98
|
+
const oceContext = iastContext[OVERHEAD_CONTROLLER_CONTEXT_KEY]
|
|
99
|
+
if (!oceContext.webContext) {
|
|
100
|
+
oceContext.webContext = web.getContext(iastContext.req)
|
|
101
|
+
oceContext.method = iastContext.req?.method
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const currentPaths = oceContext.webContext?.paths
|
|
105
|
+
if (currentPaths !== oceContext.paths || !oceContext.route) {
|
|
106
|
+
oceContext.paths = currentPaths
|
|
107
|
+
oceContext.route = '#' + oceContext.method + '#' + (currentPaths?.join('') || '')
|
|
108
|
+
}
|
|
109
|
+
|
|
45
110
|
return iastContext[OVERHEAD_CONTROLLER_CONTEXT_KEY]
|
|
46
111
|
}
|
|
47
112
|
return GLOBAL_OCE_CONTEXT
|
|
48
113
|
}
|
|
49
114
|
|
|
115
|
+
function consolidateVulnerabilities (iastContext) {
|
|
116
|
+
const context = _getContext(iastContext)
|
|
117
|
+
if (!context.localMaps) return
|
|
118
|
+
|
|
119
|
+
const reserved = context.tokens?.[REPORT_VULNERABILITY] > 0
|
|
120
|
+
|
|
121
|
+
if (reserved) { // still a bit of budget available
|
|
122
|
+
Object.keys(context.localMaps).forEach(route => {
|
|
123
|
+
globalRouteMap.set(route, newCountersArray())
|
|
124
|
+
})
|
|
125
|
+
} else {
|
|
126
|
+
Object.keys(context.localMaps).forEach(route => {
|
|
127
|
+
const localMap = context.localMaps[route]
|
|
128
|
+
const globalMap = globalRouteMap.get(route)
|
|
129
|
+
if (!globalMap) {
|
|
130
|
+
globalRouteMap.set(route, localMap)
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
for (let i = 0; i < vulnerabilitiesSize; i++) {
|
|
135
|
+
if (localMap[i] > globalMap[i]) {
|
|
136
|
+
globalMap[i] = localMap[i]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
50
143
|
function _resetGlobalContext () {
|
|
51
144
|
Object.assign(GLOBAL_OCE_CONTEXT, _getNewContext())
|
|
52
145
|
}
|
|
@@ -70,9 +163,9 @@ function releaseRequest () {
|
|
|
70
163
|
}
|
|
71
164
|
}
|
|
72
165
|
|
|
73
|
-
function hasQuota (operation, iastContext) {
|
|
166
|
+
function hasQuota (operation, iastContext, vulnerabilityType) {
|
|
74
167
|
const oceContext = _getContext(iastContext)
|
|
75
|
-
return operation.hasQuota(oceContext)
|
|
168
|
+
return operation.hasQuota(oceContext, vulnerabilityType)
|
|
76
169
|
}
|
|
77
170
|
|
|
78
171
|
function initializeRequestContext (iastContext) {
|
|
@@ -90,7 +183,7 @@ function startGlobalContext () {
|
|
|
90
183
|
resetGlobalContextInterval = setInterval(() => {
|
|
91
184
|
_resetGlobalContext()
|
|
92
185
|
}, INTERVAL_RESET_GLOBAL_CONTEXT)
|
|
93
|
-
resetGlobalContextInterval.unref
|
|
186
|
+
resetGlobalContextInterval.unref?.()
|
|
94
187
|
}
|
|
95
188
|
|
|
96
189
|
function finishGlobalContext () {
|
|
@@ -110,5 +203,7 @@ module.exports = {
|
|
|
110
203
|
hasQuota,
|
|
111
204
|
acquireRequest,
|
|
112
205
|
releaseRequest,
|
|
113
|
-
configure
|
|
206
|
+
configure,
|
|
207
|
+
consolidateVulnerabilities,
|
|
208
|
+
clearGlobalRouteMap
|
|
114
209
|
}
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
const path = require('path')
|
|
4
4
|
const process = require('process')
|
|
5
|
-
const {
|
|
5
|
+
const { ddBasePath } = require('../../util')
|
|
6
6
|
const pathLine = {
|
|
7
7
|
getNodeModulesPaths,
|
|
8
8
|
getRelativePath,
|
|
9
9
|
getNonDDCallSiteFrames,
|
|
10
|
-
|
|
11
|
-
ddBasePath: calculateDDBasePath(__dirname) // Only for test purposes
|
|
10
|
+
ddBasePath // Exported only for test purposes
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
const EXCLUDED_PATHS = [
|
|
@@ -32,7 +31,7 @@ function getNonDDCallSiteFrames (callSiteFrames, externallyExcludedPaths) {
|
|
|
32
31
|
|
|
33
32
|
for (const callsite of callSiteFrames) {
|
|
34
33
|
const filepath = callsite.file
|
|
35
|
-
if (!isExcluded(callsite, externallyExcludedPaths) && filepath.
|
|
34
|
+
if (!isExcluded(callsite, externallyExcludedPaths) && !filepath.includes(pathLine.ddBasePath)) {
|
|
36
35
|
callsite.path = getRelativePath(filepath)
|
|
37
36
|
callsite.isInternal = !path.isAbsolute(filepath)
|
|
38
37
|
|
|
@@ -58,14 +57,14 @@ function isExcluded (callsite, externallyExcludedPaths) {
|
|
|
58
57
|
excludedPaths = [...excludedPaths, ...externallyExcludedPaths]
|
|
59
58
|
}
|
|
60
59
|
|
|
61
|
-
for (
|
|
62
|
-
if (filename.
|
|
60
|
+
for (const excludedPath of excludedPaths) {
|
|
61
|
+
if (filename.includes(excludedPath)) {
|
|
63
62
|
return true
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
for (
|
|
68
|
-
if (filename.indexOf(
|
|
66
|
+
for (const EXCLUDED_PATH_PREFIX of EXCLUDED_PATH_PREFIXES) {
|
|
67
|
+
if (filename.indexOf(EXCLUDED_PATH_PREFIX) === 0) {
|
|
69
68
|
return true
|
|
70
69
|
}
|
|
71
70
|
}
|
|
@@ -52,7 +52,7 @@ function onModuleLoaded (payload) {
|
|
|
52
52
|
|
|
53
53
|
function getControls (filename) {
|
|
54
54
|
if (filename.startsWith('file://')) {
|
|
55
|
-
filename = filename.
|
|
55
|
+
filename = filename.slice(7)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
let key = path.isAbsolute(filename) ? path.relative(process.cwd(), filename) : filename
|
|
@@ -74,12 +74,9 @@ function hookModule (filename, module, controlsByFile) {
|
|
|
74
74
|
return
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
} else {
|
|
81
|
-
wrapper = wrapInputValidator(target, parameters, secureMarks)
|
|
82
|
-
}
|
|
77
|
+
const wrapper = type === SANITIZER_TYPE
|
|
78
|
+
? wrapSanitizer(target, secureMarks)
|
|
79
|
+
: wrapInputValidator(target, parameters, secureMarks)
|
|
83
80
|
|
|
84
81
|
if (methodName) {
|
|
85
82
|
parent[methodName] = wrapper
|
|
@@ -97,11 +94,7 @@ function hookModule (filename, module, controlsByFile) {
|
|
|
97
94
|
function resolve (path, obj, separator = '.') {
|
|
98
95
|
if (!path) {
|
|
99
96
|
// esm module with default export
|
|
100
|
-
|
|
101
|
-
return { target: obj.default, parent: obj, methodName: 'default' }
|
|
102
|
-
} else {
|
|
103
|
-
return { target: obj, parent: obj }
|
|
104
|
-
}
|
|
97
|
+
return obj?.default ? { target: obj.default, parent: obj, methodName: 'default' } : { target: obj, parent: obj }
|
|
105
98
|
}
|
|
106
99
|
|
|
107
100
|
const properties = path.split(separator)
|
|
@@ -164,7 +157,7 @@ function addSecureMarks (value, secureMarks, createNewTainted = true) {
|
|
|
164
157
|
if (createNewTainted) {
|
|
165
158
|
parent[lastKey] = securedTainted
|
|
166
159
|
}
|
|
167
|
-
} catch
|
|
160
|
+
} catch {
|
|
168
161
|
// if it is a readonly property, do nothing
|
|
169
162
|
}
|
|
170
163
|
})
|
|
@@ -10,7 +10,7 @@ const SECURITY_CONTROL_ELEMENT_DELIMITER = ','
|
|
|
10
10
|
const INPUT_VALIDATOR_TYPE = 'INPUT_VALIDATOR'
|
|
11
11
|
const SANITIZER_TYPE = 'SANITIZER'
|
|
12
12
|
|
|
13
|
-
const validTypes = [INPUT_VALIDATOR_TYPE, SANITIZER_TYPE]
|
|
13
|
+
const validTypes = new Set([INPUT_VALIDATOR_TYPE, SANITIZER_TYPE])
|
|
14
14
|
|
|
15
15
|
function parse (securityControlsConfiguration) {
|
|
16
16
|
const controls = new Map()
|
|
@@ -42,7 +42,7 @@ function parseControl (control) {
|
|
|
42
42
|
let [type, marks, file, method, parameters] = fields
|
|
43
43
|
|
|
44
44
|
type = type.trim().toUpperCase()
|
|
45
|
-
if (!validTypes.
|
|
45
|
+
if (!validTypes.has(type)) {
|
|
46
46
|
log.warn('[ASM] Invalid security control type: %s', type)
|
|
47
47
|
return
|
|
48
48
|
}
|
|
@@ -60,7 +60,7 @@ function parseControl (control) {
|
|
|
60
60
|
|
|
61
61
|
try {
|
|
62
62
|
parameters = getParameters(parameters)
|
|
63
|
-
} catch
|
|
63
|
+
} catch {
|
|
64
64
|
log.warn('[ASM] Invalid non-numeric security control parameter %s', parameters)
|
|
65
65
|
return
|
|
66
66
|
}
|
|
@@ -77,11 +77,11 @@ function getSecureMarks (marks) {
|
|
|
77
77
|
function getParameters (parameters) {
|
|
78
78
|
return parameters?.split(SECURITY_CONTROL_ELEMENT_DELIMITER)
|
|
79
79
|
.map(param => {
|
|
80
|
-
const parsedParam = parseInt(param, 10)
|
|
80
|
+
const parsedParam = Number.parseInt(param, 10)
|
|
81
81
|
|
|
82
82
|
// discard the securityControl if there is an incorrect parameter
|
|
83
|
-
if (isNaN(parsedParam)) {
|
|
84
|
-
throw new
|
|
83
|
+
if (Number.isNaN(parsedParam)) {
|
|
84
|
+
throw new TypeError('Invalid non-numeric security control parameter')
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
return parsedParam
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
const NODE_MODULES = 'node_modules'
|
|
4
4
|
|
|
5
5
|
const isPrivateModule = function (file) {
|
|
6
|
-
return file && file.
|
|
6
|
+
return file && !file.includes(NODE_MODULES)
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const isDdTrace = function (file) {
|
|
10
|
-
return
|
|
10
|
+
return Boolean(file?.includes('dd-trace'))
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
module.exports = {
|
|
@@ -20,10 +20,10 @@ function taintObject (iastContext, object, type) {
|
|
|
20
20
|
try {
|
|
21
21
|
if (typeof value === 'string') {
|
|
22
22
|
const tainted = TaintedUtils.newTaintedString(transactionId, value, property, type)
|
|
23
|
-
if (
|
|
24
|
-
result = tainted
|
|
25
|
-
} else {
|
|
23
|
+
if (parent) {
|
|
26
24
|
parent[key] = tainted
|
|
25
|
+
} else {
|
|
26
|
+
result = tainted
|
|
27
27
|
}
|
|
28
28
|
} else if (typeof value === 'object' && !visited.has(value)) {
|
|
29
29
|
visited.add(value)
|
|
@@ -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
|