dd-trace 5.53.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
const BaseAwsSdkPlugin = require('../../base')
|
|
4
4
|
const { parseModelId, extractRequestParams, extractTextAndResponseReason } = require('./utils')
|
|
5
5
|
|
|
6
|
-
const enabledOperations = ['invokeModel']
|
|
6
|
+
const enabledOperations = new Set(['invokeModel'])
|
|
7
7
|
|
|
8
8
|
class BedrockRuntime extends BaseAwsSdkPlugin {
|
|
9
9
|
static get id () { return 'bedrockruntime' }
|
|
10
10
|
|
|
11
11
|
isEnabled (request) {
|
|
12
12
|
const operation = request.operation
|
|
13
|
-
if (!enabledOperations.
|
|
13
|
+
if (!enabledOperations.has(operation)) {
|
|
14
14
|
return false
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -47,27 +47,27 @@ class Generation {
|
|
|
47
47
|
class RequestParams {
|
|
48
48
|
constructor ({
|
|
49
49
|
prompt = '',
|
|
50
|
-
temperature
|
|
51
|
-
topP
|
|
52
|
-
topK
|
|
53
|
-
maxTokens
|
|
50
|
+
temperature,
|
|
51
|
+
topP,
|
|
52
|
+
topK,
|
|
53
|
+
maxTokens,
|
|
54
54
|
stopSequences = [],
|
|
55
55
|
inputType = '',
|
|
56
56
|
truncate = '',
|
|
57
57
|
stream = '',
|
|
58
|
-
n
|
|
58
|
+
n
|
|
59
59
|
} = {}) {
|
|
60
60
|
// stringify prompt as it could be a single prompt as well as a list of message objects
|
|
61
61
|
this.prompt = typeof prompt === 'string' ? prompt : JSON.stringify(prompt) || ''
|
|
62
|
-
this.temperature = temperature
|
|
63
|
-
this.topP = topP
|
|
64
|
-
this.topK = topK
|
|
65
|
-
this.maxTokens = maxTokens
|
|
62
|
+
this.temperature = temperature === undefined ? undefined : temperature
|
|
63
|
+
this.topP = topP === undefined ? undefined : topP
|
|
64
|
+
this.topK = topK === undefined ? undefined : topK
|
|
65
|
+
this.maxTokens = maxTokens === undefined ? undefined : maxTokens
|
|
66
66
|
this.stopSequences = stopSequences || []
|
|
67
67
|
this.inputType = inputType || ''
|
|
68
68
|
this.truncate = truncate || ''
|
|
69
69
|
this.stream = stream || ''
|
|
70
|
-
this.n = n
|
|
70
|
+
this.n = n === undefined ? undefined : n
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -92,7 +92,7 @@ function parseModelId (modelId) {
|
|
|
92
92
|
if (modelMeta.length < 2) {
|
|
93
93
|
return { modelProvider: 'custom', modelName: modelMeta[0] }
|
|
94
94
|
}
|
|
95
|
-
return { modelProvider: modelMeta
|
|
95
|
+
return { modelProvider: modelMeta.at(-2), modelName: modelMeta.at(-1) }
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
for (const identifier of MODEL_TYPE_IDENTIFIERS) {
|
|
@@ -105,7 +105,7 @@ function parseModelId (modelId) {
|
|
|
105
105
|
if (modelMeta.length < 2) {
|
|
106
106
|
return { modelProvider: 'custom', modelName: modelId }
|
|
107
107
|
}
|
|
108
|
-
return { modelProvider: modelMeta
|
|
108
|
+
return { modelProvider: modelMeta.at(-2), modelName: modelMeta.at(-1) }
|
|
109
109
|
}
|
|
110
110
|
return { modelProvider: 'custom', modelName: modelId }
|
|
111
111
|
}
|
|
@@ -296,7 +296,7 @@ function extractTextAndResponseReason (response, provider, modelName) {
|
|
|
296
296
|
return new Generation()
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
|
-
} catch
|
|
299
|
+
} catch {
|
|
300
300
|
log.warn('Unable to extract text/finishReason from response body. Defaulting to empty text/finishReason.')
|
|
301
301
|
return new Generation()
|
|
302
302
|
}
|
|
@@ -6,15 +6,13 @@ class CloudwatchLogs extends BaseAwsSdkPlugin {
|
|
|
6
6
|
static get id () { return 'cloudwatchlogs' }
|
|
7
7
|
|
|
8
8
|
generateTags (params, operation) {
|
|
9
|
-
|
|
9
|
+
if (!params?.logGroupName) return {}
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return Object.assign(tags, {
|
|
11
|
+
return {
|
|
14
12
|
'resource.name': `${operation} ${params.logGroupName}`,
|
|
15
13
|
'aws.cloudwatch.logs.log_group_name': params.logGroupName,
|
|
16
14
|
loggroupname: params.logGroupName
|
|
17
|
-
}
|
|
15
|
+
}
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -14,41 +14,32 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
14
14
|
const tags = {}
|
|
15
15
|
|
|
16
16
|
if (params) {
|
|
17
|
-
|
|
18
|
-
Object.assign(tags, {
|
|
19
|
-
'resource.name': `${operation} ${params.TableName}`,
|
|
20
|
-
'aws.dynamodb.table_name': params.TableName,
|
|
21
|
-
tablename: params.TableName
|
|
22
|
-
})
|
|
23
|
-
}
|
|
17
|
+
let tableName = params.TableName
|
|
24
18
|
|
|
25
|
-
// batch operations have different format
|
|
19
|
+
// Collect table name for batch operations which have different format
|
|
26
20
|
// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#batchGetItem-property`
|
|
27
21
|
// dynamoDB batch TableName
|
|
28
|
-
if (params.RequestItems !== null) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// also add span type to match serverless convention
|
|
34
|
-
Object.assign(tags, {
|
|
35
|
-
'resource.name': `${operation} ${tableName}`,
|
|
36
|
-
'aws.dynamodb.table_name': tableName,
|
|
37
|
-
tablename: tableName
|
|
38
|
-
})
|
|
39
|
-
}
|
|
22
|
+
if (params.RequestItems !== null && typeof params.RequestItems === 'object') {
|
|
23
|
+
const requestItemsKeys = Object.keys(params.RequestItems)
|
|
24
|
+
if (requestItemsKeys.length === 1) {
|
|
25
|
+
tableName = requestItemsKeys[0]
|
|
40
26
|
}
|
|
41
27
|
}
|
|
42
28
|
|
|
29
|
+
if (tableName) {
|
|
30
|
+
// Also add span type to match serverless convention
|
|
31
|
+
tags['resource.name'] = `${operation} ${tableName}`
|
|
32
|
+
tags['aws.dynamodb.table_name'] = tableName
|
|
33
|
+
tags.tablename = tableName
|
|
34
|
+
}
|
|
35
|
+
|
|
43
36
|
// TODO: DynamoDB.DocumentClient does batches on multiple tables
|
|
44
37
|
// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#batchGet-property
|
|
45
38
|
// it may be useful to have a different resource naming convention here to show all table names
|
|
46
39
|
}
|
|
47
40
|
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
'span.type': 'dynamodb'
|
|
51
|
-
})
|
|
41
|
+
// Also add span type to match serverless convention
|
|
42
|
+
tags['span.type'] = 'dynamodb'
|
|
52
43
|
|
|
53
44
|
return tags
|
|
54
45
|
}
|
|
@@ -81,10 +72,12 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
81
72
|
const hash =
|
|
82
73
|
DynamoDb.calculatePutItemHash(item.Put.TableName, item.Put.Item, this.getPrimaryKeyConfig())
|
|
83
74
|
if (hash) hashes.push(hash)
|
|
84
|
-
} else
|
|
85
|
-
const operation = item.Update
|
|
86
|
-
|
|
87
|
-
|
|
75
|
+
} else {
|
|
76
|
+
const operation = item.Update || item.Delete
|
|
77
|
+
if (operation) {
|
|
78
|
+
const hash = DynamoDb.calculateHashWithKnownKeys(operation.TableName, operation.Key)
|
|
79
|
+
if (hash) hashes.push(hash)
|
|
80
|
+
}
|
|
88
81
|
}
|
|
89
82
|
}
|
|
90
83
|
break
|
|
@@ -136,7 +129,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
136
129
|
const config = {}
|
|
137
130
|
for (const [tableName, primaryKeys] of Object.entries(parsedConfig)) {
|
|
138
131
|
if (Array.isArray(primaryKeys) && primaryKeys.length > 0 && primaryKeys.length <= 2) {
|
|
139
|
-
config[tableName] =
|
|
132
|
+
config[tableName] = primaryKeys
|
|
140
133
|
} else {
|
|
141
134
|
log.warn(`Invalid primary key configuration for table: ${tableName}.` +
|
|
142
135
|
'Please fix the DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env var.')
|
|
@@ -154,7 +147,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
154
147
|
* Calculates a hash for DynamoDB PutItem operations using table's configured primary keys.
|
|
155
148
|
* @param {string} tableName - Name of the DynamoDB table.
|
|
156
149
|
* @param {Object} item - Complete PutItem item parameter to be put.
|
|
157
|
-
* @param {Object.<string,
|
|
150
|
+
* @param {Object.<string, Array<string>>} primaryKeyConfig - Mapping of table names to an Array of primary key names
|
|
158
151
|
* loaded from DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS.
|
|
159
152
|
* @returns {string|undefined} Hash combining table name and primary key/value pairs, or undefined if unable.
|
|
160
153
|
*/
|
|
@@ -163,19 +156,11 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
163
156
|
log.debug('Unable to calculate hash because missing required parameters')
|
|
164
157
|
return
|
|
165
158
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
const primaryKeySet = primaryKeyConfig[tableName]
|
|
170
|
-
if (!primaryKeySet || !(primaryKeySet instanceof Set) || primaryKeySet.size === 0 || primaryKeySet.size > 2) {
|
|
171
|
-
log.warn(
|
|
172
|
-
`span pointers: failed to extract PutItem span pointer: table ${tableName} ` +
|
|
173
|
-
'not found in primary key names or the DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env var was invalid.' +
|
|
174
|
-
'Please update the env var.'
|
|
175
|
-
)
|
|
159
|
+
const keyNames = primaryKeyConfig?.[tableName]
|
|
160
|
+
if (!keyNames) {
|
|
176
161
|
return
|
|
177
162
|
}
|
|
178
|
-
const keyValues = extractPrimaryKeys(
|
|
163
|
+
const keyValues = extractPrimaryKeys(keyNames, item)
|
|
179
164
|
if (keyValues) {
|
|
180
165
|
return generatePointerHash([tableName, ...keyValues])
|
|
181
166
|
}
|
|
@@ -196,8 +181,8 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
196
181
|
log.debug('Unable to calculate hash because missing parameters')
|
|
197
182
|
return
|
|
198
183
|
}
|
|
199
|
-
const
|
|
200
|
-
const keyValues = extractPrimaryKeys(
|
|
184
|
+
const keyNames = Object.keys(keysObject)
|
|
185
|
+
const keyValues = extractPrimaryKeys(keyNames, keysObject)
|
|
201
186
|
if (keyValues) {
|
|
202
187
|
return generatePointerHash([tableName, ...keyValues])
|
|
203
188
|
}
|
|
@@ -7,8 +7,8 @@ class EventBridge extends BaseAwsSdkPlugin {
|
|
|
7
7
|
static get isPayloadReporter () { return true }
|
|
8
8
|
|
|
9
9
|
generateTags (params, operation, response) {
|
|
10
|
-
if (!params
|
|
11
|
-
const rulename = params.Name
|
|
10
|
+
if (!params?.source) return {}
|
|
11
|
+
const rulename = params.Name ?? ''
|
|
12
12
|
return {
|
|
13
13
|
'resource.name': operation ? `${operation} ${params.source}` : params.source,
|
|
14
14
|
'aws.eventbridge.source': `${params.source}`,
|
|
@@ -35,11 +35,10 @@ class Kinesis extends BaseAwsSdkPlugin {
|
|
|
35
35
|
obj.needsFinish = true
|
|
36
36
|
const options = {
|
|
37
37
|
childOf: responseExtraction.maybeChildOf,
|
|
38
|
-
tags:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
)
|
|
38
|
+
tags: {
|
|
39
|
+
...this.requestTags.get(request),
|
|
40
|
+
'span.kind': 'server'
|
|
41
|
+
}
|
|
43
42
|
}
|
|
44
43
|
span = plugin.tracer.startSpan('aws.response', options)
|
|
45
44
|
this.enter(span, store)
|
|
@@ -128,12 +127,12 @@ class Kinesis extends BaseAwsSdkPlugin {
|
|
|
128
127
|
_tryParse (body) {
|
|
129
128
|
try {
|
|
130
129
|
return JSON.parse(body)
|
|
131
|
-
} catch
|
|
130
|
+
} catch {
|
|
132
131
|
log.info('Not JSON string. Trying Base64 encoded JSON string')
|
|
133
132
|
}
|
|
134
133
|
try {
|
|
135
134
|
return JSON.parse(Buffer.from(body, 'base64').toString('ascii'), true)
|
|
136
|
-
} catch
|
|
135
|
+
} catch {
|
|
137
136
|
return null
|
|
138
137
|
}
|
|
139
138
|
}
|
|
@@ -145,17 +144,17 @@ class Kinesis extends BaseAwsSdkPlugin {
|
|
|
145
144
|
let stream
|
|
146
145
|
switch (operation) {
|
|
147
146
|
case 'putRecord':
|
|
148
|
-
stream = params.StreamArn
|
|
147
|
+
stream = params.StreamArn ?? params.StreamName ?? ''
|
|
149
148
|
this.injectToMessage(span, params, stream, true)
|
|
150
149
|
break
|
|
151
150
|
case 'putRecords':
|
|
152
|
-
stream = params.StreamArn
|
|
151
|
+
stream = params.StreamArn ?? params.StreamName ?? ''
|
|
153
152
|
for (let i = 0; i < params.Records.length; i++) {
|
|
154
153
|
this.injectToMessage(
|
|
155
154
|
span,
|
|
156
155
|
params.Records[i],
|
|
157
156
|
stream,
|
|
158
|
-
i === 0 ||
|
|
157
|
+
i === 0 || this.config.batchPropagationEnabled
|
|
159
158
|
)
|
|
160
159
|
}
|
|
161
160
|
}
|
|
@@ -192,7 +191,7 @@ class Kinesis extends BaseAwsSdkPlugin {
|
|
|
192
191
|
const byteSize = finalData.length
|
|
193
192
|
// Kinesis max payload size is 1MB
|
|
194
193
|
// So we must ensure adding DD context won't go over that (512b is an estimate)
|
|
195
|
-
if (byteSize >=
|
|
194
|
+
if (byteSize >= 1_048_576) {
|
|
196
195
|
log.info('Payload size too large to pass context')
|
|
197
196
|
return
|
|
198
197
|
}
|
|
@@ -7,15 +7,13 @@ class Lambda extends BaseAwsSdkPlugin {
|
|
|
7
7
|
static get id () { return 'lambda' }
|
|
8
8
|
|
|
9
9
|
generateTags (params, operation, response) {
|
|
10
|
-
|
|
10
|
+
if (!params?.FunctionName) return {}
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return Object.assign(tags, {
|
|
12
|
+
return {
|
|
15
13
|
'resource.name': `${operation} ${params.FunctionName}`,
|
|
16
14
|
functionname: params.FunctionName,
|
|
17
15
|
'aws.lambda': params.FunctionName
|
|
18
|
-
}
|
|
16
|
+
}
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
requestInject (span, request) {
|
|
@@ -33,7 +31,7 @@ class Lambda extends BaseAwsSdkPlugin {
|
|
|
33
31
|
// Check to see if there's already a config on the request
|
|
34
32
|
let clientContext = {}
|
|
35
33
|
if (request.params.ClientContext) {
|
|
36
|
-
const clientContextJson = Buffer.from(request.params.ClientContext, 'base64').toString('
|
|
34
|
+
const clientContextJson = Buffer.from(request.params.ClientContext, 'base64').toString('utf8')
|
|
37
35
|
clientContext = JSON.parse(clientContextJson)
|
|
38
36
|
}
|
|
39
37
|
if (!clientContext.custom) {
|
|
@@ -6,15 +6,13 @@ class Redshift extends BaseAwsSdkPlugin {
|
|
|
6
6
|
static get id () { return 'redshift' }
|
|
7
7
|
|
|
8
8
|
generateTags (params, operation, response) {
|
|
9
|
-
|
|
9
|
+
if (!params?.ClusterIdentifier) return {}
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return Object.assign(tags, {
|
|
11
|
+
return {
|
|
14
12
|
'resource.name': `${operation} ${params.ClusterIdentifier}`,
|
|
15
13
|
'aws.redshift.cluster_identifier': params.ClusterIdentifier,
|
|
16
14
|
clusteridentifier: params.ClusterIdentifier
|
|
17
|
-
}
|
|
15
|
+
}
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -11,15 +11,13 @@ class S3 extends BaseAwsSdkPlugin {
|
|
|
11
11
|
static get isPayloadReporter () { return true }
|
|
12
12
|
|
|
13
13
|
generateTags (params, operation, response) {
|
|
14
|
-
|
|
14
|
+
if (!params?.Bucket) return {}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return Object.assign(tags, {
|
|
16
|
+
return {
|
|
19
17
|
'resource.name': `${operation} ${params.Bucket}`,
|
|
20
18
|
'aws.s3.bucket_name': params.Bucket,
|
|
21
19
|
bucketname: params.Bucket
|
|
22
|
-
}
|
|
20
|
+
}
|
|
23
21
|
}
|
|
24
22
|
|
|
25
23
|
addSpanPointers (span, response) {
|
|
@@ -19,7 +19,7 @@ class Sns extends BaseAwsSdkPlugin {
|
|
|
19
19
|
const arnParts = TopicArn.split(':')
|
|
20
20
|
|
|
21
21
|
// Get the topic name from the last part of the ARN
|
|
22
|
-
const topicName = arnParts
|
|
22
|
+
const topicName = arnParts.at(-1)
|
|
23
23
|
|
|
24
24
|
return {
|
|
25
25
|
'resource.name': `${operation} ${params.TopicArn || response.data.TopicArn}`,
|
|
@@ -74,8 +74,7 @@ class Sns extends BaseAwsSdkPlugin {
|
|
|
74
74
|
injectToMessage (span, params, topicArn, injectTraceContext) {
|
|
75
75
|
if (!params.MessageAttributes) {
|
|
76
76
|
params.MessageAttributes = {}
|
|
77
|
-
}
|
|
78
|
-
if (Object.keys(params.MessageAttributes).length >= 10) { // SNS quota
|
|
77
|
+
} else if (Object.keys(params.MessageAttributes).length >= 10) { // SNS quota
|
|
79
78
|
log.info('Message attributes full, skipping trace context injection')
|
|
80
79
|
return
|
|
81
80
|
}
|
|
@@ -20,7 +20,6 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
20
20
|
this.addSub('apm:aws:response:start:sqs', obj => {
|
|
21
21
|
const { request, response } = obj
|
|
22
22
|
const store = storage('legacy').getStore()
|
|
23
|
-
const plugin = this
|
|
24
23
|
const contextExtraction = this.responseExtract(request.params, request.operation, response)
|
|
25
24
|
let span
|
|
26
25
|
let parsedMessageAttributes = null
|
|
@@ -28,14 +27,13 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
28
27
|
obj.needsFinish = true
|
|
29
28
|
const options = {
|
|
30
29
|
childOf: contextExtraction.datadogContext,
|
|
31
|
-
tags:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
30
|
+
tags: {
|
|
31
|
+
...this.requestTags.get(request),
|
|
32
|
+
'span.kind': 'server'
|
|
33
|
+
}
|
|
36
34
|
}
|
|
37
35
|
parsedMessageAttributes = contextExtraction.parsedAttributes
|
|
38
|
-
span =
|
|
36
|
+
span = this.tracer.startSpan('aws.response', options)
|
|
39
37
|
this.enter(span, store)
|
|
40
38
|
}
|
|
41
39
|
// extract DSM context after as we might not have a parent-child but may have a DSM context
|
|
@@ -90,20 +88,18 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
90
88
|
}
|
|
91
89
|
|
|
92
90
|
generateTags (params, operation, response) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (!params || (!params.QueueName && !params.QueueUrl)) return tags
|
|
91
|
+
if (!params || (!params.QueueName && !params.QueueUrl)) return {}
|
|
96
92
|
// 'https://sqs.us-east-1.amazonaws.com/123456789012/my-queue';
|
|
97
93
|
let queueName = params.QueueName
|
|
98
94
|
if (params.QueueUrl) {
|
|
99
|
-
queueName = params.QueueUrl.split('/')
|
|
95
|
+
queueName = params.QueueUrl.split('/').at(-1)
|
|
100
96
|
}
|
|
101
97
|
|
|
102
|
-
|
|
98
|
+
const tags = {
|
|
103
99
|
'resource.name': `${operation} ${params.QueueName || params.QueueUrl}`,
|
|
104
100
|
'aws.sqs.queue_name': params.QueueName || params.QueueUrl,
|
|
105
101
|
queuename: queueName
|
|
106
|
-
}
|
|
102
|
+
}
|
|
107
103
|
|
|
108
104
|
switch (operation) {
|
|
109
105
|
case 'receiveMessage':
|
|
@@ -134,7 +130,7 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
134
130
|
if (body.Type === 'Notification') {
|
|
135
131
|
message = body
|
|
136
132
|
}
|
|
137
|
-
} catch
|
|
133
|
+
} catch {
|
|
138
134
|
// SQS to SQS
|
|
139
135
|
}
|
|
140
136
|
}
|
|
@@ -186,7 +182,7 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
186
182
|
if (body.Type === 'Notification') {
|
|
187
183
|
message = body
|
|
188
184
|
}
|
|
189
|
-
} catch
|
|
185
|
+
} catch {
|
|
190
186
|
// SQS to SQS
|
|
191
187
|
}
|
|
192
188
|
}
|
|
@@ -13,7 +13,7 @@ function generatePointerHash (components) {
|
|
|
13
13
|
// If passing S3's ETag as a component, make sure any quotes have already been removed!
|
|
14
14
|
const dataToHash = components.join('|')
|
|
15
15
|
const hash = crypto.createHash('sha256').update(dataToHash).digest('hex')
|
|
16
|
-
return hash.
|
|
16
|
+
return hash.slice(0, 32)
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -54,18 +54,17 @@ function encodeValue (valueObject) {
|
|
|
54
54
|
* Extracts and encodes primary key values from a DynamoDB item.
|
|
55
55
|
* Handles tables with single-key and two-key scenarios.
|
|
56
56
|
*
|
|
57
|
-
* @param {
|
|
57
|
+
* @param {Array<string>} keyNames - Set of primary key names.
|
|
58
58
|
* @param {Object} keyValuePairs - Object containing key/value pairs.
|
|
59
59
|
* @returns {Array|undefined} [key1Name, key1Value, key2Name, key2Value], or undefined if invalid input.
|
|
60
60
|
* key2 entries are empty strings in the single-key case.
|
|
61
61
|
* @example
|
|
62
|
-
* extractPrimaryKeys(
|
|
62
|
+
* extractPrimaryKeys(['userId'], {userId: {S: "user123"}})
|
|
63
63
|
* // Returns ["userId", Buffer("user123"), "", ""]
|
|
64
|
-
* extractPrimaryKeys(
|
|
64
|
+
* extractPrimaryKeys(['userId', 'timestamp'], {userId: {S: "user123"}, timestamp: {N: "1234}})
|
|
65
65
|
* // Returns ["timestamp", Buffer.from("1234"), "userId", Buffer.from("user123")]
|
|
66
66
|
*/
|
|
67
|
-
const extractPrimaryKeys = (
|
|
68
|
-
const keyNames = Array.from(keySet)
|
|
67
|
+
const extractPrimaryKeys = (keyNames, keyValuePairs) => {
|
|
69
68
|
if (keyNames.length === 0) {
|
|
70
69
|
return
|
|
71
70
|
}
|
|
@@ -17,7 +17,7 @@ function truncateCommand (cmdFields) {
|
|
|
17
17
|
|
|
18
18
|
const argLen = cmdFields[i].length
|
|
19
19
|
if (size < MAX_ARG_SIZE && size + argLen > MAX_ARG_SIZE) {
|
|
20
|
-
cmdFields[i] = cmdFields[i].
|
|
20
|
+
cmdFields[i] = cmdFields[i].slice(0, 2)
|
|
21
21
|
truncated = true
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -66,12 +66,12 @@ class ChildProcessPlugin extends TracingPlugin {
|
|
|
66
66
|
|
|
67
67
|
if (result !== undefined) {
|
|
68
68
|
exitCode = result?.status || 0
|
|
69
|
-
} else if (error
|
|
70
|
-
exitCode = error?.status || error?.code || 0
|
|
71
|
-
} else {
|
|
69
|
+
} else if (error === undefined) {
|
|
72
70
|
// TracingChannels call start, end synchronously. Later when the promise is resolved then asyncStart asyncEnd.
|
|
73
71
|
// Therefore in the case of calling end with neither result nor error means that they will come in the asyncEnd.
|
|
74
72
|
return
|
|
73
|
+
} else {
|
|
74
|
+
exitCode = error?.status || error?.code || 0
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
this.activeSpan?.setTag('cmd.exit_code', `${exitCode}`)
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
const shellParser = require('shell-quote/parse')
|
|
4
4
|
|
|
5
|
-
const ALLOWED_ENV_VARIABLES = ['LD_PRELOAD', 'LD_LIBRARY_PATH', 'PATH']
|
|
6
|
-
const PROCESS_DENYLIST = ['md5']
|
|
5
|
+
const ALLOWED_ENV_VARIABLES = new Set(['LD_PRELOAD', 'LD_LIBRARY_PATH', 'PATH'])
|
|
6
|
+
const PROCESS_DENYLIST = new Set(['md5'])
|
|
7
7
|
|
|
8
8
|
const VARNAMES_REGEX = /\$([\w\d_]*)(?:[^\w\d_]|$)/gmi
|
|
9
|
-
// eslint-disable-next-line @stylistic/
|
|
9
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
10
10
|
const PARAM_PATTERN = '^-{0,2}(?:p(?:ass(?:w(?:or)?d)?)?|address|api[-_]?key|e?mail|secret(?:[-_]?key)?|a(?:ccess|uth)[-_]?token|mysql_pwd|credentials|(?:stripe)?token)$'
|
|
11
11
|
const regexParam = new RegExp(PARAM_PATTERN, 'i')
|
|
12
|
-
const ENV_PATTERN =
|
|
12
|
+
const ENV_PATTERN = String.raw`^(\w+=\w+;)*\w+=\w+;?$`
|
|
13
13
|
const envVarRegex = new RegExp(ENV_PATTERN)
|
|
14
14
|
const REDACTED = '?'
|
|
15
15
|
|
|
@@ -71,25 +71,39 @@ function scrubChildProcessCmd (expression) {
|
|
|
71
71
|
} else if (token.comment) {
|
|
72
72
|
result.push(`#${token.comment}`)
|
|
73
73
|
}
|
|
74
|
-
} else if (
|
|
74
|
+
} else if (foundBinary) {
|
|
75
|
+
const paramKeyValue = token.split('=')
|
|
76
|
+
const paramKey = paramKeyValue[0]
|
|
77
|
+
|
|
78
|
+
if (regexParam.test(paramKey)) {
|
|
79
|
+
if (paramKeyValue.length === 1) {
|
|
80
|
+
expressionTokens[index + 1] = REDACTED
|
|
81
|
+
result.push(token)
|
|
82
|
+
} else {
|
|
83
|
+
result.push(`${paramKey}=${REDACTED}`)
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
result.push(token)
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
75
89
|
if (envVarRegex.test(token)) {
|
|
76
90
|
const envSplit = token.split('=')
|
|
77
91
|
|
|
78
|
-
if (
|
|
92
|
+
if (ALLOWED_ENV_VARIABLES.has(envSplit[0])) {
|
|
93
|
+
result.push(token)
|
|
94
|
+
} else {
|
|
79
95
|
envSplit[1] = REDACTED
|
|
80
96
|
|
|
81
97
|
const newToken = envSplit.join('=')
|
|
82
98
|
expressionTokens[index] = newToken
|
|
83
99
|
|
|
84
100
|
result.push(newToken)
|
|
85
|
-
} else {
|
|
86
|
-
result.push(token)
|
|
87
101
|
}
|
|
88
102
|
} else {
|
|
89
103
|
foundBinary = true
|
|
90
104
|
result.push(token)
|
|
91
105
|
|
|
92
|
-
if (PROCESS_DENYLIST.
|
|
106
|
+
if (PROCESS_DENYLIST.has(token)) {
|
|
93
107
|
for (index++; index < expressionTokens.length; index++) {
|
|
94
108
|
const token = expressionTokens[index]
|
|
95
109
|
|
|
@@ -103,20 +117,6 @@ function scrubChildProcessCmd (expression) {
|
|
|
103
117
|
break
|
|
104
118
|
}
|
|
105
119
|
}
|
|
106
|
-
} else {
|
|
107
|
-
const paramKeyValue = token.split('=')
|
|
108
|
-
const paramKey = paramKeyValue[0]
|
|
109
|
-
|
|
110
|
-
if (regexParam.test(paramKey)) {
|
|
111
|
-
if (paramKeyValue.length === 1) {
|
|
112
|
-
expressionTokens[index + 1] = REDACTED
|
|
113
|
-
result.push(token)
|
|
114
|
-
} else {
|
|
115
|
-
result.push(`${paramKey}=${REDACTED}`)
|
|
116
|
-
}
|
|
117
|
-
} else {
|
|
118
|
-
result.push(token)
|
|
119
|
-
}
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
})
|