dd-trace 5.81.0 → 5.83.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 +78 -79
- package/ci/init.js +6 -6
- package/index.d.ts +159 -3
- package/loader-hook.mjs +8 -3
- package/package.json +64 -66
- package/packages/datadog-core/src/storage.js +7 -7
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-esbuild/index.js +14 -7
- package/packages/datadog-esbuild/src/utils.js +14 -2
- package/packages/datadog-instrumentations/src/aerospike.js +3 -2
- package/packages/datadog-instrumentations/src/ai.js +9 -5
- package/packages/datadog-instrumentations/src/amqp10.js +1 -1
- package/packages/datadog-instrumentations/src/amqplib.js +4 -4
- package/packages/datadog-instrumentations/src/anthropic.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
- package/packages/datadog-instrumentations/src/apollo.js +3 -2
- package/packages/datadog-instrumentations/src/avsc.js +1 -1
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
- package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
- package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
- package/packages/datadog-instrumentations/src/bluebird.js +1 -1
- package/packages/datadog-instrumentations/src/bullmq.js +11 -0
- package/packages/datadog-instrumentations/src/bunyan.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
- package/packages/datadog-instrumentations/src/child_process.js +3 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
- package/packages/datadog-instrumentations/src/couchbase.js +1 -1
- package/packages/datadog-instrumentations/src/crypto.js +1 -1
- package/packages/datadog-instrumentations/src/cucumber.js +13 -14
- package/packages/datadog-instrumentations/src/cypress.js +1 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
- package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
- package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
- package/packages/datadog-instrumentations/src/google-genai.js +3 -3
- package/packages/datadog-instrumentations/src/graphql.js +2 -2
- package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
- package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/instrumentations.js +4 -3
- package/packages/datadog-instrumentations/src/helpers/register.js +9 -11
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
- package/packages/datadog-instrumentations/src/hono.js +55 -10
- package/packages/datadog-instrumentations/src/http/client.js +2 -2
- package/packages/datadog-instrumentations/src/ioredis.js +1 -1
- package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
- package/packages/datadog-instrumentations/src/jest.js +37 -16
- package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
- package/packages/datadog-instrumentations/src/knex.js +1 -1
- package/packages/datadog-instrumentations/src/koa.js +2 -1
- package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
- package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
- package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
- package/packages/datadog-instrumentations/src/lodash.js +1 -2
- package/packages/datadog-instrumentations/src/mariadb.js +1 -2
- package/packages/datadog-instrumentations/src/memcached.js +1 -1
- package/packages/datadog-instrumentations/src/mocha/main.js +2 -2
- package/packages/datadog-instrumentations/src/mocha/worker.js +1 -1
- package/packages/datadog-instrumentations/src/mocha.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb.js +1 -1
- package/packages/datadog-instrumentations/src/mongoose.js +1 -1
- package/packages/datadog-instrumentations/src/mquery.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +2 -2
- package/packages/datadog-instrumentations/src/mysql2.js +3 -3
- package/packages/datadog-instrumentations/src/net.js +14 -6
- package/packages/datadog-instrumentations/src/next.js +1 -1
- package/packages/datadog-instrumentations/src/nyc.js +2 -2
- package/packages/datadog-instrumentations/src/openai.js +2 -2
- package/packages/datadog-instrumentations/src/opensearch.js +1 -1
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +5 -5
- package/packages/datadog-instrumentations/src/pg.js +7 -5
- package/packages/datadog-instrumentations/src/pino.js +1 -1
- package/packages/datadog-instrumentations/src/playwright.js +4 -4
- package/packages/datadog-instrumentations/src/prisma.js +52 -37
- package/packages/datadog-instrumentations/src/process.js +1 -1
- package/packages/datadog-instrumentations/src/promise-js.js +1 -1
- package/packages/datadog-instrumentations/src/promise.js +1 -1
- package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
- package/packages/datadog-instrumentations/src/q.js +1 -1
- package/packages/datadog-instrumentations/src/redis.js +1 -1
- package/packages/datadog-instrumentations/src/rhea.js +1 -1
- package/packages/datadog-instrumentations/src/selenium.js +3 -3
- package/packages/datadog-instrumentations/src/sequelize.js +1 -2
- package/packages/datadog-instrumentations/src/sharedb.js +1 -1
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/undici.js +15 -4
- package/packages/datadog-instrumentations/src/url.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +1 -1
- package/packages/datadog-instrumentations/src/vm.js +1 -1
- package/packages/datadog-instrumentations/src/when.js +1 -1
- package/packages/datadog-instrumentations/src/winston.js +1 -1
- package/packages/datadog-instrumentations/src/ws.js +3 -2
- package/packages/datadog-plugin-amqp10/src/index.js +1 -1
- package/packages/datadog-plugin-amqplib/src/index.js +1 -1
- package/packages/datadog-plugin-anthropic/src/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/base.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
- package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +21 -7
- package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +6 -2
- package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
- package/packages/datadog-plugin-bullmq/src/index.js +18 -0
- package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-cucumber/src/index.js +2 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -2
- package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -2
- package/packages/datadog-plugin-express/src/code_origin.js +21 -15
- package/packages/datadog-plugin-express/src/index.js +1 -1
- package/packages/datadog-plugin-fastify/src/code_origin.js +17 -4
- package/packages/datadog-plugin-fastify/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
- package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
- package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
- package/packages/datadog-plugin-google-genai/src/index.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-grpc/src/index.js +1 -1
- package/packages/datadog-plugin-http/src/client.js +2 -1
- package/packages/datadog-plugin-http/src/index.js +25 -5
- package/packages/datadog-plugin-http2/src/client.js +2 -2
- package/packages/datadog-plugin-http2/src/index.js +1 -1
- package/packages/datadog-plugin-jest/src/index.js +2 -2
- package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
- package/packages/datadog-plugin-langchain/src/index.js +1 -1
- package/packages/datadog-plugin-mocha/src/index.js +2 -2
- package/packages/datadog-plugin-moleculer/src/index.js +1 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +8 -4
- package/packages/datadog-plugin-openai/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
- package/packages/datadog-plugin-openai/src/tracing.js +2 -2
- package/packages/datadog-plugin-playwright/src/index.js +3 -3
- package/packages/datadog-plugin-rhea/src/index.js +1 -1
- package/packages/datadog-plugin-undici/src/index.js +305 -2
- package/packages/datadog-plugin-vitest/src/index.js +5 -5
- package/packages/datadog-plugin-ws/src/close.js +56 -3
- package/packages/datadog-plugin-ws/src/index.js +4 -0
- package/packages/datadog-plugin-ws/src/producer.js +39 -4
- package/packages/datadog-plugin-ws/src/receiver.js +39 -3
- package/packages/datadog-plugin-ws/src/server.js +13 -1
- package/packages/datadog-plugin-ws/src/util.js +107 -0
- package/packages/datadog-shimmer/src/shimmer.js +2 -2
- package/packages/dd-trace/index.js +19 -0
- package/packages/dd-trace/src/aiguard/sdk.js +3 -3
- package/packages/dd-trace/src/appsec/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +5 -5
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +11 -15
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
- package/packages/dd-trace/src/appsec/index.js +8 -8
- package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/index.js +3 -5
- package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
- package/packages/dd-trace/src/appsec/rc-products.js +10 -0
- package/packages/dd-trace/src/appsec/recommended.json +230 -3
- package/packages/dd-trace/src/appsec/remote_config.js +177 -0
- package/packages/dd-trace/src/appsec/reporter.js +3 -3
- package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
- package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
- package/packages/dd-trace/src/appsec/waf/index.js +17 -3
- package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
- package/packages/dd-trace/src/azure_metadata.js +15 -4
- package/packages/dd-trace/src/baggage.js +36 -11
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -1
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -3
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +5 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -4
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
- package/packages/dd-trace/src/{config_defaults.js → config/defaults.js} +5 -4
- package/packages/dd-trace/src/{config-helper.js → config/helper.js} +88 -15
- package/packages/dd-trace/src/{config.js → config/index.js} +115 -67
- package/packages/dd-trace/src/config/remote_config.js +202 -0
- package/packages/dd-trace/src/{config_stable.js → config/stable.js} +20 -32
- package/packages/dd-trace/src/{supported-configurations.json → config/supported-configurations.json} +5 -0
- package/packages/dd-trace/src/constants.js +5 -0
- package/packages/dd-trace/src/crashtracking/crashtracker.js +11 -2
- package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
- package/packages/dd-trace/src/datastreams/index.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +7 -7
- package/packages/dd-trace/src/datastreams/processor.js +3 -3
- package/packages/dd-trace/src/datastreams/writer.js +3 -3
- package/packages/dd-trace/src/debugger/config.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
- package/packages/dd-trace/src/debugger/devtools_client/send.js +6 -6
- package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
- package/packages/dd-trace/src/debugger/index.js +84 -16
- package/packages/dd-trace/src/dogstatsd.js +5 -4
- package/packages/dd-trace/src/encode/0.4.js +3 -3
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/span-stats.js +6 -1
- package/packages/dd-trace/src/exporter.js +2 -2
- package/packages/dd-trace/src/exporters/agent/index.js +2 -4
- package/packages/dd-trace/src/exporters/agent/writer.js +9 -14
- package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
- package/packages/dd-trace/src/exporters/common/docker.js +2 -2
- package/packages/dd-trace/src/exporters/common/request.js +3 -3
- package/packages/dd-trace/src/exporters/common/util.js +2 -2
- package/packages/dd-trace/src/exporters/common/writer.js +1 -1
- package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +1 -2
- package/packages/dd-trace/src/flare/index.js +2 -2
- package/packages/dd-trace/src/guardrails/index.js +6 -3
- package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
- package/packages/dd-trace/src/id.js +1 -1
- package/packages/dd-trace/src/index.js +4 -4
- package/packages/dd-trace/src/lambda/handler.js +5 -5
- package/packages/dd-trace/src/lambda/index.js +2 -2
- package/packages/dd-trace/src/lambda/runtime/patch.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +14 -1
- package/packages/dd-trace/src/llmobs/index.js +10 -11
- package/packages/dd-trace/src/llmobs/noop.js +2 -0
- package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +19 -5
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
- package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +46 -26
- package/packages/dd-trace/src/llmobs/span_processor.js +26 -20
- package/packages/dd-trace/src/llmobs/tagger.js +175 -1
- package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
- package/packages/dd-trace/src/llmobs/writers/base.js +117 -38
- package/packages/dd-trace/src/llmobs/writers/spans.js +5 -5
- package/packages/dd-trace/src/log/index.js +5 -5
- package/packages/dd-trace/src/noop/proxy.js +5 -5
- package/packages/dd-trace/src/noop/span.js +1 -1
- package/packages/dd-trace/src/openfeature/index.js +2 -2
- package/packages/dd-trace/src/openfeature/noop.js +14 -14
- package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
- package/packages/dd-trace/src/openfeature/writers/base.js +12 -13
- package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
- package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
- package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
- package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
- package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
- package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +2 -2
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
- package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +51 -9
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +68 -28
- package/packages/dd-trace/src/opentracing/span.js +7 -7
- package/packages/dd-trace/src/opentracing/tracer.js +5 -5
- package/packages/dd-trace/src/payload-tagging/index.js +6 -2
- package/packages/dd-trace/src/plugin_manager.js +8 -6
- package/packages/dd-trace/src/plugins/apollo.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
- package/packages/dd-trace/src/plugins/database.js +1 -1
- package/packages/dd-trace/src/plugins/index.js +5 -1
- package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
- package/packages/dd-trace/src/plugins/outbound.js +1 -1
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +5 -8
- package/packages/dd-trace/src/plugins/util/git-cache.js +3 -3
- package/packages/dd-trace/src/plugins/util/git.js +8 -8
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +25 -25
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +41 -43
- package/packages/dd-trace/src/plugins/util/web.js +8 -5
- package/packages/dd-trace/src/priority_sampler.js +15 -16
- package/packages/dd-trace/src/process-tags/index.js +31 -29
- package/packages/dd-trace/src/profiler.js +4 -39
- package/packages/dd-trace/src/profiling/config.js +104 -50
- package/packages/dd-trace/src/profiling/exporter_cli.js +8 -8
- package/packages/dd-trace/src/profiling/exporters/agent.js +6 -6
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +9 -2
- package/packages/dd-trace/src/profiling/index.js +1 -1
- package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
- package/packages/dd-trace/src/profiling/profiler.js +61 -7
- package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
- package/packages/dd-trace/src/proxy.js +43 -20
- package/packages/dd-trace/src/remote_config/capabilities.js +3 -0
- package/packages/dd-trace/src/remote_config/index.js +541 -137
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +58 -31
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -3
- package/packages/dd-trace/src/serverless.js +17 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
- package/packages/dd-trace/src/span_format.js +1 -1
- package/packages/dd-trace/src/span_processor.js +4 -4
- package/packages/dd-trace/src/span_stats.js +6 -4
- package/packages/dd-trace/src/standalone/index.js +1 -1
- package/packages/dd-trace/src/startup-log.js +7 -16
- package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
- package/packages/dd-trace/src/telemetry/endpoints.js +75 -13
- package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
- package/packages/dd-trace/src/telemetry/send-data.js +103 -4
- package/packages/dd-trace/src/telemetry/telemetry.js +238 -114
- package/packages/dd-trace/src/tracer.js +3 -3
- package/packages/dd-trace/src/tracer_metadata.js +19 -15
- package/packages/dd-trace/src/remote_config/manager.js +0 -368
- /package/packages/dd-trace/src/{git_properties.js → config/git_properties.js} +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// WeakMap to store message counters per socket without mutating the socket object
|
|
4
|
+
const socketCounters = new WeakMap()
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Initializes WebSocket message counters for a socket.
|
|
8
|
+
* @param {object} socket - The WebSocket socket object
|
|
9
|
+
*/
|
|
10
|
+
function initWebSocketMessageCounters (socket) {
|
|
11
|
+
if (!socketCounters.has(socket)) {
|
|
12
|
+
socketCounters.set(socket, {
|
|
13
|
+
receiveCounter: 0,
|
|
14
|
+
sendCounter: 0
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Increments and returns the WebSocket message counter.
|
|
21
|
+
* @param {object} socket - The WebSocket socket object
|
|
22
|
+
* @param {string} counterType - Either 'receiveCounter' or 'sendCounter'
|
|
23
|
+
* @returns {number} The incremented counter value
|
|
24
|
+
*/
|
|
25
|
+
function incrementWebSocketCounter (socket, counterType) {
|
|
26
|
+
if (!socketCounters.has(socket)) {
|
|
27
|
+
initWebSocketMessageCounters(socket)
|
|
28
|
+
}
|
|
29
|
+
const counters = socketCounters.get(socket)
|
|
30
|
+
counters[counterType]++
|
|
31
|
+
return counters[counterType]
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Builds a WebSocket span pointer hash.
|
|
36
|
+
*
|
|
37
|
+
* Format: <prefix><128 bit hex trace id><64 bit hex span id><32 bit hex counter>
|
|
38
|
+
* Prefix: 'S' for server outgoing or client incoming, 'C' for server incoming or client outgoing
|
|
39
|
+
*
|
|
40
|
+
* @param {bigint} handshakeTraceId - The trace ID from the handshake span (as a BigInt)
|
|
41
|
+
* @param {bigint} handshakeSpanId - The span ID from the handshake span (as a BigInt)
|
|
42
|
+
* @param {number} counter - The message counter
|
|
43
|
+
* @param {boolean} isServer - Whether this is a server (true) or client (false)
|
|
44
|
+
* @param {boolean} isIncoming - Whether this is an incoming message (true) or outgoing (false)
|
|
45
|
+
* @returns {string} The span pointer hash
|
|
46
|
+
*/
|
|
47
|
+
function buildWebSocketSpanPointerHash (handshakeTraceId, handshakeSpanId, counter, isServer, isIncoming) {
|
|
48
|
+
// Determine prefix based on server/client and incoming/outgoing
|
|
49
|
+
// Server outgoing or client incoming: 'S'
|
|
50
|
+
// Server incoming or client outgoing: 'C'
|
|
51
|
+
const prefix = (isServer && !isIncoming) || (!isServer && isIncoming) ? 'S' : 'C'
|
|
52
|
+
|
|
53
|
+
// Pad trace ID to 32 hex chars (128 bits)
|
|
54
|
+
const traceIdHex = handshakeTraceId.toString(16).padStart(32, '0')
|
|
55
|
+
|
|
56
|
+
// Pad span ID to 16 hex chars (64 bits)
|
|
57
|
+
const spanIdHex = handshakeSpanId.toString(16).padStart(16, '0')
|
|
58
|
+
|
|
59
|
+
// Pad counter to 8 hex chars (32 bits)
|
|
60
|
+
const counterHex = counter.toString(16).padStart(8, '0')
|
|
61
|
+
|
|
62
|
+
return `${prefix}${traceIdHex}${spanIdHex}${counterHex}`
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Checks if the handshake span has extracted distributed tracing context.
|
|
67
|
+
* A websocket server must not set the span pointer if the handshake has not extracted a context.
|
|
68
|
+
*
|
|
69
|
+
* A span has distributed tracing context if it has a parent context that was
|
|
70
|
+
* extracted from headers (remote parent).
|
|
71
|
+
*
|
|
72
|
+
* @param {object} span - The handshake span
|
|
73
|
+
* @param {object} socket - The WebSocket socket object
|
|
74
|
+
* @returns {boolean} True if the span has distributed tracing context
|
|
75
|
+
*/
|
|
76
|
+
function hasDistributedTracingContext (span, socket) {
|
|
77
|
+
if (!span) return false
|
|
78
|
+
const context = span.context()
|
|
79
|
+
if (!context) return false
|
|
80
|
+
|
|
81
|
+
// Check if this span has a parent. If the parent was extracted from remote headers,
|
|
82
|
+
// then this span is part of a distributed trace.
|
|
83
|
+
// We check if the span has a parent by looking at _parentId.
|
|
84
|
+
// In the JavaScript tracer, when a context is extracted from headers and a child span
|
|
85
|
+
// is created, the child will have _parentId set to the extracted parent's span ID.
|
|
86
|
+
//
|
|
87
|
+
// For testing purposes, we also check if Datadog trace headers are present in the socket's
|
|
88
|
+
// upgrade request, which indicates distributed tracing context was sent by the client.
|
|
89
|
+
if (context._parentId !== null) {
|
|
90
|
+
return true
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Fallback check: look for distributed tracing headers in the stored request headers
|
|
94
|
+
if (socket && socket.requestHeaders) {
|
|
95
|
+
const headers = socket.requestHeaders
|
|
96
|
+
return !!(headers['x-datadog-trace-id'] || headers.traceparent)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return false
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
module.exports = {
|
|
103
|
+
initWebSocketMessageCounters,
|
|
104
|
+
incrementWebSocketCounter,
|
|
105
|
+
buildWebSocketSpanPointerHash,
|
|
106
|
+
hasDistributedTracingContext
|
|
107
|
+
}
|
|
@@ -91,7 +91,7 @@ function wrapFunction (original, wrapper) {
|
|
|
91
91
|
* @param {Record<string | symbol, unknown> | Function | undefined} target - The target
|
|
92
92
|
* object.
|
|
93
93
|
* @param {string | symbol} name - The property key of the method to wrap.
|
|
94
|
-
* @param {(original: Function) => (...args: unknown[]) =>
|
|
94
|
+
* @param {(original: Function) => (...args: unknown[]) => unknown} wrapper - The wrapper function.
|
|
95
95
|
* @param {{ replaceGetter?: boolean }} [options] - If `replaceGetter` is set to
|
|
96
96
|
* true, the getter is accessed and the getter is replaced with one that just
|
|
97
97
|
* returns the earlier retrieved value. Use with care! This may only be done in
|
|
@@ -214,7 +214,7 @@ function wrap (target, name, wrapper, options) {
|
|
|
214
214
|
* Record<string | symbol, unknown> |
|
|
215
215
|
* Function} targets - The target objects.
|
|
216
216
|
* @param {Array<string | symbol> | string | symbol} names - The property keys of the methods to wrap.
|
|
217
|
-
* @param {(original: Function) => (...args: unknown[]) =>
|
|
217
|
+
* @param {(original: Function) => (...args: unknown[]) => unknown} wrapper - The wrapper function.
|
|
218
218
|
*/
|
|
219
219
|
function massWrap (targets, names, wrapper) {
|
|
220
220
|
targets = toArray(targets)
|
|
@@ -10,6 +10,25 @@ if (!global._ddtrace) {
|
|
|
10
10
|
writable: true
|
|
11
11
|
})
|
|
12
12
|
|
|
13
|
+
const ddTraceSymbol = Symbol.for('dd-trace')
|
|
14
|
+
|
|
15
|
+
Object.defineProperty(globalThis, ddTraceSymbol, {
|
|
16
|
+
value: {
|
|
17
|
+
beforeExitHandlers: new Set(),
|
|
18
|
+
},
|
|
19
|
+
enumerable: false,
|
|
20
|
+
configurable: true, // Allow this to be overridden by loading the tracer
|
|
21
|
+
writable: false
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
process.once('beforeExit', function mainBeforeExit () {
|
|
25
|
+
if (globalThis[ddTraceSymbol]?.beforeExitHandlers) {
|
|
26
|
+
for (const handler of globalThis[ddTraceSymbol].beforeExitHandlers) {
|
|
27
|
+
handler()
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
|
|
13
32
|
global._ddtrace.default = global._ddtrace
|
|
14
33
|
global._ddtrace.tracer = global._ddtrace
|
|
15
34
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const rfdc = require('../../../../vendor/dist/rfdc')({ proto: false, circles: false })
|
|
4
|
+
const log = require('../log')
|
|
5
|
+
const telemetryMetrics = require('../telemetry/metrics')
|
|
6
|
+
const tracerVersion = require('../../../../package.json').version
|
|
4
7
|
const NoopAIGuard = require('./noop')
|
|
5
8
|
const executeRequest = require('./client')
|
|
6
9
|
const {
|
|
@@ -14,9 +17,6 @@ const {
|
|
|
14
17
|
AI_GUARD_TELEMETRY_REQUESTS,
|
|
15
18
|
AI_GUARD_TELEMETRY_TRUNCATED
|
|
16
19
|
} = require('./tags')
|
|
17
|
-
const log = require('../log')
|
|
18
|
-
const telemetryMetrics = require('../telemetry/metrics')
|
|
19
|
-
const tracerVersion = require('../../../../package.json').version
|
|
20
20
|
|
|
21
21
|
const appsecMetrics = telemetryMetrics.manager.namespace('appsec')
|
|
22
22
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { storage } = require('../../../datadog-core')
|
|
4
|
+
const log = require('../log')
|
|
5
|
+
const web = require('../plugins/util/web')
|
|
4
6
|
const {
|
|
5
7
|
addSpecificEndpoint,
|
|
6
8
|
specificBlockingTypes,
|
|
7
9
|
getBlockingData,
|
|
8
10
|
getBlockingAction
|
|
9
11
|
} = require('./blocking')
|
|
10
|
-
const log = require('../log')
|
|
11
12
|
const waf = require('./waf')
|
|
12
13
|
const addresses = require('./addresses')
|
|
13
|
-
const web = require('../plugins/util/web')
|
|
14
14
|
const {
|
|
15
15
|
startGraphqlResolve,
|
|
16
16
|
graphqlMiddlewareChannel,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { CODE_INJECTION } = require('../vulnerabilities')
|
|
4
|
-
const StoredInjectionAnalyzer = require('./stored-injection-analyzer')
|
|
5
4
|
const { INSTRUMENTED_SINK } = require('../telemetry/iast-metric')
|
|
6
5
|
const { storage } = require('../../../../../datadog-core')
|
|
7
6
|
const { getIastContext } = require('../iast-context')
|
|
7
|
+
const StoredInjectionAnalyzer = require('./stored-injection-analyzer')
|
|
8
8
|
|
|
9
9
|
class CodeInjectionAnalyzer extends StoredInjectionAnalyzer {
|
|
10
10
|
constructor () {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const InjectionAnalyzer = require('./injection-analyzer')
|
|
3
2
|
const { COMMAND_INJECTION } = require('../vulnerabilities')
|
|
3
|
+
const InjectionAnalyzer = require('./injection-analyzer')
|
|
4
4
|
|
|
5
5
|
class CommandInjectionAnalyzer extends InjectionAnalyzer {
|
|
6
6
|
constructor () {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const Analyzer = require('./vulnerability-analyzer')
|
|
4
3
|
const { getRelativePath } = require('../path-line')
|
|
4
|
+
const Analyzer = require('./vulnerability-analyzer')
|
|
5
5
|
|
|
6
6
|
class HardcodedBaseAnalyzer extends Analyzer {
|
|
7
7
|
constructor (type, allRules = [], valueOnlyRules = []) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const Analyzer = require('./vulnerability-analyzer')
|
|
3
2
|
const { getRanges } = require('../taint-tracking/operations')
|
|
4
3
|
const { SQL_ROW_VALUE } = require('../taint-tracking/source-types')
|
|
4
|
+
const Analyzer = require('./vulnerability-analyzer')
|
|
5
5
|
|
|
6
6
|
class InjectionAnalyzer extends Analyzer {
|
|
7
7
|
_isVulnerable (value, iastContext) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const InjectionAnalyzer = require('./injection-analyzer')
|
|
3
2
|
const { LDAP_INJECTION } = require('../vulnerabilities')
|
|
4
3
|
const { getNodeModulesPaths } = require('../path-line')
|
|
4
|
+
const InjectionAnalyzer = require('./injection-analyzer')
|
|
5
5
|
|
|
6
6
|
const EXCLUDED_PATHS = getNodeModulesPaths('ldapjs-promise')
|
|
7
7
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const InjectionAnalyzer = require('./injection-analyzer')
|
|
4
3
|
const { NOSQL_MONGODB_INJECTION } = require('../vulnerabilities')
|
|
5
4
|
const { getRanges, addSecureMark } = require('../taint-tracking/operations')
|
|
6
5
|
const { getNodeModulesPaths } = require('../path-line')
|
|
7
6
|
const { storage } = require('../../../../../datadog-core')
|
|
8
7
|
const { getIastContext } = require('../iast-context')
|
|
9
8
|
const { HTTP_REQUEST_PARAMETER, HTTP_REQUEST_BODY } = require('../taint-tracking/source-types')
|
|
10
|
-
|
|
11
|
-
const EXCLUDED_PATHS_FROM_STACK = getNodeModulesPaths('mongodb', 'mongoose', 'mquery')
|
|
12
9
|
const { NOSQL_MONGODB_INJECTION_MARK } = require('../taint-tracking/secure-marks')
|
|
13
10
|
const { iterateObjectStrings } = require('../utils')
|
|
11
|
+
const InjectionAnalyzer = require('./injection-analyzer')
|
|
12
|
+
|
|
13
|
+
const EXCLUDED_PATHS_FROM_STACK = getNodeModulesPaths('mongodb', 'mongoose', 'mquery')
|
|
14
14
|
|
|
15
15
|
const SAFE_OPERATORS = new Set(['$eq', '$gt', '$gte', '$in', '$lt', '$lte', '$ne', '$nin',
|
|
16
16
|
'$exists', '$type', '$mod', '$bitsAllClear', '$bitsAllSet', '$bitsAnyClear', '$bitsAnySet'])
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
const path = require('path')
|
|
4
4
|
|
|
5
|
-
const InjectionAnalyzer = require('./injection-analyzer')
|
|
6
5
|
const { getIastContext } = require('../iast-context')
|
|
7
6
|
const { storage } = require('../../../../../datadog-core')
|
|
8
7
|
const { PATH_TRAVERSAL } = require('../vulnerabilities')
|
|
8
|
+
const InjectionAnalyzer = require('./injection-analyzer')
|
|
9
9
|
|
|
10
10
|
const ignoredOperations = new Set(['dir.close', 'close'])
|
|
11
11
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const InjectionAnalyzer = require('./injection-analyzer')
|
|
4
3
|
const { UNTRUSTED_DESERIALIZATION } = require('../vulnerabilities')
|
|
4
|
+
const InjectionAnalyzer = require('./injection-analyzer')
|
|
5
5
|
|
|
6
6
|
class UntrustedDeserializationAnalyzer extends InjectionAnalyzer {
|
|
7
7
|
constructor () {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const InjectionAnalyzer = require('./injection-analyzer')
|
|
4
3
|
const { UNVALIDATED_REDIRECT } = require('../vulnerabilities')
|
|
5
4
|
const { getNodeModulesPaths } = require('../path-line')
|
|
6
5
|
const { getRanges } = require('../taint-tracking/operations')
|
|
@@ -8,6 +7,7 @@ const {
|
|
|
8
7
|
HTTP_REQUEST_BODY,
|
|
9
8
|
HTTP_REQUEST_PARAMETER
|
|
10
9
|
} = require('../taint-tracking/source-types')
|
|
10
|
+
const InjectionAnalyzer = require('./injection-analyzer')
|
|
11
11
|
|
|
12
12
|
const EXCLUDED_PATHS = [
|
|
13
13
|
getNodeModulesPaths('express/lib/response.js'),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const Analyzer = require('./vulnerability-analyzer')
|
|
3
2
|
const { WEAK_CIPHER } = require('../vulnerabilities')
|
|
3
|
+
const Analyzer = require('./vulnerability-analyzer')
|
|
4
4
|
|
|
5
5
|
const INSECURE_CIPHERS = new Set([
|
|
6
6
|
'des', 'des-cbc', 'des-cfb', 'des-cfb1', 'des-cfb8', 'des-ecb', 'des-ede', 'des-ede-cbc', 'des-ede-cfb',
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
const path = require('path')
|
|
4
4
|
|
|
5
5
|
const { getNodeModulesPaths } = require('../path-line')
|
|
6
|
-
const Analyzer = require('./vulnerability-analyzer')
|
|
7
6
|
const { WEAK_HASH } = require('../vulnerabilities')
|
|
7
|
+
const Analyzer = require('./vulnerability-analyzer')
|
|
8
8
|
|
|
9
9
|
const INSECURE_HASH_ALGORITHMS = new Set([
|
|
10
10
|
'md4', 'md4WithRSAEncryption', 'RSA-MD4',
|
|
@@ -23,7 +23,8 @@ const EXCLUDED_LOCATIONS = getNodeModulesPaths(
|
|
|
23
23
|
'ws/lib/websocket-server.js',
|
|
24
24
|
'google-gax/build/src/grpc.js',
|
|
25
25
|
'cookie-signature/index.js',
|
|
26
|
-
'express-session/index.js'
|
|
26
|
+
'express-session/index.js',
|
|
27
|
+
'node-preload/preload-list-env.js'
|
|
27
28
|
)
|
|
28
29
|
|
|
29
30
|
const EXCLUDED_PATHS_FROM_STACK = [
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
const { channel } = require('dc-polyfill')
|
|
4
4
|
|
|
5
5
|
const Plugin = require('../../plugins/plugin')
|
|
6
|
+
const { storage } = require('../../../../datadog-core')
|
|
7
|
+
const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
|
|
8
|
+
const log = require('../../log')
|
|
6
9
|
const iastTelemetry = require('./telemetry')
|
|
7
10
|
const { getInstrumentedMetric, getExecutedMetric, TagKey, EXECUTED_SOURCE, formatTags } =
|
|
8
11
|
require('./telemetry/iast-metric')
|
|
9
|
-
const { storage } = require('../../../../datadog-core')
|
|
10
12
|
const { getIastContext } = require('./iast-context')
|
|
11
|
-
const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
|
|
12
|
-
const log = require('../../log')
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Used by vulnerability sources and sinks to subscribe diagnostic channel events
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const { enableAllAnalyzers, disableAllAnalyzers } = require('./analyzers')
|
|
3
|
+
const dc = require('dc-polyfill')
|
|
5
4
|
const web = require('../../plugins/util/web')
|
|
6
5
|
const { storage } = require('../../../../datadog-core')
|
|
6
|
+
const { enable: enableFsPlugin, disable: disableFsPlugin, IAST_MODULE } = require('../rasp/fs-plugin')
|
|
7
|
+
const { incomingHttpRequestStart, incomingHttpRequestEnd, responseWriteHead } = require('../channels')
|
|
8
|
+
const vulnerabilityReporter = require('./vulnerability-reporter')
|
|
9
|
+
const { enableAllAnalyzers, disableAllAnalyzers } = require('./analyzers')
|
|
7
10
|
const overheadController = require('./overhead-controller')
|
|
8
|
-
const dc = require('dc-polyfill')
|
|
9
11
|
const iastContextFunctions = require('./iast-context')
|
|
10
12
|
const {
|
|
11
13
|
enableTaintTracking,
|
|
@@ -16,9 +18,7 @@ const {
|
|
|
16
18
|
} = require('./taint-tracking')
|
|
17
19
|
const { IAST_ENABLED_TAG_KEY } = require('./tags')
|
|
18
20
|
const iastTelemetry = require('./telemetry')
|
|
19
|
-
const { enable: enableFsPlugin, disable: disableFsPlugin, IAST_MODULE } = require('../rasp/fs-plugin')
|
|
20
21
|
const securityControls = require('./security-controls')
|
|
21
|
-
const { incomingHttpRequestStart, incomingHttpRequestEnd, responseWriteHead } = require('../channels')
|
|
22
22
|
|
|
23
23
|
const collectedResponseHeaders = new WeakMap()
|
|
24
24
|
|
|
@@ -5,10 +5,10 @@ const dc = require('dc-polyfill')
|
|
|
5
5
|
const { storage } = require('../../../../../datadog-core')
|
|
6
6
|
const shimmer = require('../../../../../datadog-shimmer')
|
|
7
7
|
const log = require('../../../log')
|
|
8
|
-
const { parse, SANITIZER_TYPE } = require('./parser')
|
|
9
8
|
const TaintTrackingOperations = require('../taint-tracking/operations')
|
|
10
9
|
const { getIastContext } = require('../iast-context')
|
|
11
10
|
const { iterateObjectStrings } = require('../utils')
|
|
11
|
+
const { parse, SANITIZER_TYPE } = require('./parser')
|
|
12
12
|
|
|
13
13
|
// esm
|
|
14
14
|
const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const kafkaContextPlugin = require('../context/kafka-ctx-plugin')
|
|
3
4
|
const {
|
|
4
5
|
createTransaction,
|
|
5
6
|
removeTransaction,
|
|
@@ -11,8 +12,6 @@ const {
|
|
|
11
12
|
const taintTrackingPlugin = require('./plugin')
|
|
12
13
|
const kafkaConsumerPlugin = require('./plugins/kafka')
|
|
13
14
|
|
|
14
|
-
const kafkaContextPlugin = require('../context/kafka-ctx-plugin')
|
|
15
|
-
|
|
16
15
|
module.exports = {
|
|
17
16
|
enableTaintTracking (config, telemetryVerbosity) {
|
|
18
17
|
enableTaintOperations(telemetryVerbosity)
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
const TaintedUtils = require('@datadog/native-iast-taint-tracking')
|
|
4
4
|
const { IAST_TRANSACTION_ID } = require('../iast-context')
|
|
5
|
-
const { HTTP_REQUEST_PARAMETER } = require('./source-types')
|
|
6
5
|
const log = require('../../../log')
|
|
6
|
+
const { HTTP_REQUEST_PARAMETER } = require('./source-types')
|
|
7
7
|
|
|
8
8
|
const SEPARATOR = '\u0000' // Unit Separator (cannot be in URL keys)
|
|
9
9
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const { SourceIastPlugin } = require('../iast-plugin')
|
|
4
4
|
const { getIastContext } = require('../iast-context')
|
|
5
5
|
const { storage } = require('../../../../../datadog-core')
|
|
6
|
+
const { EXECUTED_SOURCE } = require('../telemetry/iast-metric')
|
|
6
7
|
const { taintObject, newTaintedString, getRanges, taintQueryWithCache } = require('./operations')
|
|
7
8
|
const {
|
|
8
9
|
HTTP_REQUEST_BODY,
|
|
@@ -15,7 +16,6 @@ const {
|
|
|
15
16
|
HTTP_REQUEST_URI,
|
|
16
17
|
SQL_ROW_VALUE
|
|
17
18
|
} = require('./source-types')
|
|
18
|
-
const { EXECUTED_SOURCE } = require('../telemetry/iast-metric')
|
|
19
19
|
|
|
20
20
|
const REQ_HEADER_TAGS = EXECUTED_SOURCE.formatTags(HTTP_REQUEST_HEADER_VALUE, HTTP_REQUEST_HEADER_NAME)
|
|
21
21
|
const REQ_URI_TAGS = EXECUTED_SOURCE.formatTags(HTTP_REQUEST_URI)
|
|
@@ -5,18 +5,18 @@
|
|
|
5
5
|
const Module = require('module')
|
|
6
6
|
const { pathToFileURL } = require('url')
|
|
7
7
|
const { MessageChannel } = require('worker_threads')
|
|
8
|
+
const { isMainThread } = require('worker_threads')
|
|
9
|
+
const dc = require('dc-polyfill')
|
|
8
10
|
const shimmer = require('../../../../../datadog-shimmer')
|
|
9
|
-
const { isPrivateModule, isDdTrace } = require('./filter')
|
|
10
|
-
const { csiMethods } = require('./csi-methods')
|
|
11
11
|
const { getName } = require('../telemetry/verbosity')
|
|
12
12
|
const telemetry = require('../telemetry')
|
|
13
|
-
const { incrementTelemetryIfNeeded } = require('./rewriter-telemetry')
|
|
14
|
-
const dc = require('dc-polyfill')
|
|
15
13
|
const log = require('../../../log')
|
|
16
|
-
const { isMainThread } = require('worker_threads')
|
|
17
|
-
const { LOG_MESSAGE, REWRITTEN_MESSAGE } = require('./constants')
|
|
18
14
|
const orchestrionConfig = require('../../../../../datadog-instrumentations/src/orchestrion-config')
|
|
19
|
-
const { getEnvironmentVariable } = require('../../../config
|
|
15
|
+
const { getEnvironmentVariable } = require('../../../config/helper')
|
|
16
|
+
const { LOG_MESSAGE, REWRITTEN_MESSAGE } = require('./constants')
|
|
17
|
+
const { incrementTelemetryIfNeeded } = require('./rewriter-telemetry')
|
|
18
|
+
const { csiMethods } = require('./csi-methods')
|
|
19
|
+
const { isPrivateModule, isDdTrace } = require('./filter')
|
|
20
20
|
|
|
21
21
|
let config
|
|
22
22
|
const hardcodedSecretCh = dc.channel('datadog:secrets:result')
|
|
@@ -183,14 +183,10 @@ function enableRewriter (telemetryVerbosity) {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
function isEsmConfigured () {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if (require.cache[`${process.cwd()}/node_modules/import-in-the-middle/hook.js`]) {
|
|
191
|
-
return true
|
|
192
|
-
}
|
|
193
|
-
return Object.keys(require.cache).some(file => file.endsWith('import-in-the-middle/hook.js'))
|
|
186
|
+
return (isFlagPresent('--loader') ||
|
|
187
|
+
isFlagPresent('--experimental-loader') ||
|
|
188
|
+
isFlagPresent('dd-trace/initialize.mjs')) ||
|
|
189
|
+
isFlagPresent('dd-trace/register.js')
|
|
194
190
|
}
|
|
195
191
|
|
|
196
192
|
let enableEsmRewriter = function (telemetryVerbosity) {
|
|
@@ -6,8 +6,8 @@ const { storage } = require('../../../../../datadog-core')
|
|
|
6
6
|
const iastContextFunctions = require('../iast-context')
|
|
7
7
|
const { EXECUTED_PROPAGATION } = require('../telemetry/iast-metric')
|
|
8
8
|
const { isDebugAllowed } = require('../telemetry/verbosity')
|
|
9
|
-
const { taintObject } = require('./operations-taint-object')
|
|
10
9
|
const log = require('../../../log')
|
|
10
|
+
const { taintObject } = require('./operations-taint-object')
|
|
11
11
|
|
|
12
12
|
const mathRandomCallCh = dc.channel('datadog:random:call')
|
|
13
13
|
const evalCallCh = dc.channel('datadog:eval:call')
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
const log = require('../../../log')
|
|
4
4
|
const { Namespace } = require('../../../telemetry/metrics')
|
|
5
|
-
const { addMetricsToSpan } = require('./span-tags')
|
|
6
5
|
const { IAST_TRACE_METRIC_PREFIX } = require('../tags')
|
|
6
|
+
const { addMetricsToSpan } = require('./span-tags')
|
|
7
7
|
|
|
8
8
|
const DD_IAST_METRICS_NAMESPACE = Symbol('_dd.iast.request.metrics.namespace')
|
|
9
9
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { LRUCache } = require('../../../../../vendor/dist/lru-cache')
|
|
4
|
-
const vulnerabilitiesFormatter = require('./vulnerabilities-formatter')
|
|
5
|
-
const { IAST_ENABLED_TAG_KEY, IAST_JSON_TAG_KEY } = require('./tags')
|
|
6
4
|
const { keepTrace } = require('../../priority_sampler')
|
|
7
5
|
const { reportStackTrace, getCallsiteFrames, canReportStackTrace, STACK_TRACE_NAMESPACES } = require('../stack_trace')
|
|
8
|
-
const { getOriginalPathAndLineFromSourceMap } = require('./taint-tracking/rewriter')
|
|
9
6
|
const { ASM } = require('../../standalone/product')
|
|
7
|
+
const vulnerabilitiesFormatter = require('./vulnerabilities-formatter')
|
|
8
|
+
const { IAST_ENABLED_TAG_KEY, IAST_JSON_TAG_KEY } = require('./tags')
|
|
9
|
+
const { getOriginalPathAndLineFromSourceMap } = require('./taint-tracking/rewriter')
|
|
10
10
|
|
|
11
11
|
const VULNERABILITIES_KEY = 'vulnerabilities'
|
|
12
12
|
const VULNERABILITY_HASHES_MAX_SIZE = 1000
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const log = require('../log')
|
|
4
|
+
const web = require('../plugins/util/web')
|
|
5
|
+
const { extractIp } = require('../plugins/util/ip_extractor')
|
|
6
|
+
const { HTTP_CLIENT_IP } = require('../../../../ext/tags')
|
|
7
|
+
const { storage } = require('../../../datadog-core')
|
|
8
|
+
const { isInServerlessEnvironment } = require('../serverless')
|
|
4
9
|
const RuleManager = require('./rule_manager')
|
|
5
|
-
const
|
|
10
|
+
const appsecRemoteConfig = require('./remote_config')
|
|
6
11
|
const {
|
|
7
12
|
bodyParser,
|
|
8
13
|
cookieParser,
|
|
@@ -31,15 +36,10 @@ const addresses = require('./addresses')
|
|
|
31
36
|
const Reporter = require('./reporter')
|
|
32
37
|
const appsecTelemetry = require('./telemetry')
|
|
33
38
|
const apiSecuritySampler = require('./api_security_sampler')
|
|
34
|
-
const web = require('../plugins/util/web')
|
|
35
|
-
const { extractIp } = require('../plugins/util/ip_extractor')
|
|
36
|
-
const { HTTP_CLIENT_IP } = require('../../../../ext/tags')
|
|
37
39
|
const { isBlocked, block, callBlockDelegation, setTemplates, getBlockingAction } = require('./blocking')
|
|
38
40
|
const UserTracking = require('./user_tracking')
|
|
39
|
-
const { storage } = require('../../../datadog-core')
|
|
40
41
|
const graphql = require('./graphql')
|
|
41
42
|
const rasp = require('./rasp')
|
|
42
|
-
const { isInServerlessEnvironment } = require('../serverless')
|
|
43
43
|
|
|
44
44
|
const responseAnalyzedSet = new WeakSet()
|
|
45
45
|
const storedResponseHeaders = new WeakMap()
|
|
@@ -63,7 +63,7 @@ function enable (_config) {
|
|
|
63
63
|
|
|
64
64
|
RuleManager.loadRules(_config.appsec)
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
appsecRemoteConfig.enableWafUpdate(_config.appsec)
|
|
67
67
|
|
|
68
68
|
Reporter.init(_config.appsec)
|
|
69
69
|
|
|
@@ -373,7 +373,7 @@ function disable () {
|
|
|
373
373
|
graphql.disable()
|
|
374
374
|
rasp.disable()
|
|
375
375
|
|
|
376
|
-
|
|
376
|
+
appsecRemoteConfig.disableWafUpdate()
|
|
377
377
|
|
|
378
378
|
apiSecuritySampler.disable()
|
|
379
379
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { childProcessExecutionTracingChannel } = require('../channels')
|
|
4
|
-
const { RULE_TYPES, handleResult } = require('./utils')
|
|
5
4
|
const { storage } = require('../../../../datadog-core')
|
|
6
5
|
const addresses = require('../addresses')
|
|
7
6
|
const waf = require('../waf')
|
|
7
|
+
const { RULE_TYPES, handleResult } = require('./utils')
|
|
8
8
|
|
|
9
9
|
let config
|
|
10
10
|
|
|
@@ -8,11 +8,11 @@ const {
|
|
|
8
8
|
routerMiddlewareError
|
|
9
9
|
} = require('../channels')
|
|
10
10
|
const { block, registerBlockDelegation, isBlocked } = require('../blocking')
|
|
11
|
+
const { updateRaspRuleMatchMetricTags } = require('../telemetry')
|
|
11
12
|
const ssrf = require('./ssrf')
|
|
12
13
|
const sqli = require('./sql_injection')
|
|
13
14
|
const lfi = require('./lfi')
|
|
14
15
|
const cmdi = require('./command_injection')
|
|
15
|
-
const { updateRaspRuleMatchMetricTags } = require('../telemetry')
|
|
16
16
|
|
|
17
17
|
const { DatadogRaspAbortError } = require('./utils')
|
|
18
18
|
|
|
@@ -73,16 +73,14 @@ function handleUncaughtExceptionMonitor (error) {
|
|
|
73
73
|
}
|
|
74
74
|
} else {
|
|
75
75
|
const cleanUp = removeAllListeners(process, 'uncaughtException')
|
|
76
|
-
const handler = () => {
|
|
77
|
-
process.removeListener('uncaughtException', handler)
|
|
78
|
-
}
|
|
76
|
+
const handler = () => {}
|
|
79
77
|
|
|
80
78
|
setTimeout(() => {
|
|
81
79
|
process.removeListener('uncaughtException', handler)
|
|
82
80
|
cleanUp()
|
|
83
81
|
})
|
|
84
82
|
|
|
85
|
-
process.
|
|
83
|
+
process.once('uncaughtException', handler)
|
|
86
84
|
}
|
|
87
85
|
}
|
|
88
86
|
|