dd-trace 6.16.0 → 6.18.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/ci/diagnose.js +0 -23
- package/ci/test-optimization-validation/approval-artifacts.js +0 -3
- package/ci/test-optimization-validation/approval.js +0 -6
- package/ci/test-optimization-validation/artifact-id.js +0 -1
- package/ci/test-optimization-validation/bounded-json.js +0 -1
- package/ci/test-optimization-validation/cli.js +0 -12
- package/ci/test-optimization-validation/command-output-policy.js +0 -1
- package/ci/test-optimization-validation/command-runner.js +0 -3
- package/ci/test-optimization-validation/environment.js +0 -4
- package/ci/test-optimization-validation/executable-approval.js +0 -1
- package/ci/test-optimization-validation/executable.js +0 -5
- package/ci/test-optimization-validation/framework-adapters/cucumber.js +0 -6
- package/ci/test-optimization-validation/framework-adapters/cypress.js +0 -3
- package/ci/test-optimization-validation/framework-adapters/playwright.js +0 -6
- package/ci/test-optimization-validation/framework-adapters/vitest.js +0 -4
- package/ci/test-optimization-validation/generated-test-contract.js +0 -5
- package/ci/test-optimization-validation/generated-verifier.js +0 -1
- package/ci/test-optimization-validation/literal-environment.js +0 -1
- package/ci/test-optimization-validation/manifest-scaffold.js +0 -17
- package/ci/test-optimization-validation/manifest-schema.js +0 -21
- package/ci/test-optimization-validation/offline-fixtures.js +0 -4
- package/ci/test-optimization-validation/plan-writer.js +0 -11
- package/ci/test-optimization-validation/preflight-runner.js +0 -1
- package/ci/test-optimization-validation/redaction.js +0 -4
- package/ci/test-optimization-validation/report-writer.js +0 -16
- package/ci/test-optimization-validation/runner-command.js +0 -3
- package/ci/test-optimization-validation/runner-contract.js +0 -4
- package/ci/test-optimization-validation/safe-files.js +0 -1
- package/ci/test-optimization-validation/scenarios/basic-reporting.js +0 -1
- package/ci/test-optimization-validation/scenarios/ci-wiring.js +0 -1
- package/ci/test-optimization-validation/source-text.js +0 -3
- package/ci/vitest-no-worker-init-setup.mjs +41 -16
- package/index.d.ts +208 -0
- package/package.json +17 -16
- package/packages/datadog-esbuild/src/utils.js +0 -2
- package/packages/datadog-instrumentations/src/aerospike.js +28 -6
- package/packages/datadog-instrumentations/src/aws-durable-execution-sdk-js.js +0 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +0 -2
- package/packages/datadog-instrumentations/src/claude-agent-sdk.js +0 -2
- package/packages/datadog-instrumentations/src/console.js +97 -0
- package/packages/datadog-instrumentations/src/cucumber.js +77 -12
- package/packages/datadog-instrumentations/src/cypress-config.js +27 -38
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +6 -0
- package/packages/datadog-instrumentations/src/helpers/channel.js +0 -2
- package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +0 -5
- package/packages/datadog-instrumentations/src/helpers/hooks.js +8 -6
- package/packages/datadog-instrumentations/src/helpers/instrumentation-utils.js +0 -3
- package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +0 -6
- package/packages/datadog-instrumentations/src/helpers/register.js +24 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +111 -26
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentation-registry.js +41 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +3 -17
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +55 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/postgres.js +36 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/supabase.js +128 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +13 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.js +28 -3
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +20 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms/postgres.js +388 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +0 -5
- package/packages/datadog-instrumentations/src/helpers/router-helper.js +0 -1
- package/packages/datadog-instrumentations/src/jest.js +165 -51
- package/packages/datadog-instrumentations/src/knex.js +0 -1
- package/packages/datadog-instrumentations/src/mariadb-bundle.js +0 -24
- package/packages/datadog-instrumentations/src/mariadb.js +0 -2
- package/packages/datadog-instrumentations/src/mocha/common.js +0 -1
- package/packages/datadog-instrumentations/src/mocha/main.js +25 -26
- package/packages/datadog-instrumentations/src/mocha/utils.js +119 -49
- package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +0 -6
- package/packages/datadog-instrumentations/src/mocha/worker.js +14 -17
- package/packages/datadog-instrumentations/src/mysql2.js +0 -2
- package/packages/datadog-instrumentations/src/openai-realtime/audio-accumulator.js +241 -0
- package/packages/datadog-instrumentations/src/openai-realtime/events.js +76 -0
- package/packages/datadog-instrumentations/src/openai-realtime/index.js +301 -0
- package/packages/datadog-instrumentations/src/openai-realtime/session.js +998 -0
- package/packages/datadog-instrumentations/src/openai-realtime/turns.js +211 -0
- package/packages/datadog-instrumentations/src/openai.js +51 -12
- package/packages/datadog-instrumentations/src/oracledb.js +9 -3
- package/packages/datadog-instrumentations/src/playwright-reporter.js +6 -20
- package/packages/datadog-instrumentations/src/playwright.js +280 -56
- package/packages/datadog-instrumentations/src/{azure-cosmos.js → postgres.js} +1 -1
- package/packages/datadog-instrumentations/src/router.js +0 -2
- package/packages/datadog-instrumentations/src/rum-browser-scripts.js +0 -2
- package/packages/datadog-instrumentations/src/sequelize.js +0 -1
- package/packages/datadog-instrumentations/src/supabase.js +15 -0
- package/packages/datadog-instrumentations/src/undici.js +7 -3
- package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +18 -18
- package/packages/datadog-instrumentations/src/vitest-main.js +121 -30
- package/packages/datadog-instrumentations/src/vitest-util.js +7 -1
- package/packages/datadog-instrumentations/src/vitest-worker.js +49 -13
- package/packages/datadog-instrumentations/src/webdriverio.js +44 -47
- package/packages/datadog-instrumentations/src/ws.js +41 -2
- package/packages/datadog-plugin-ai/src/utils.js +0 -2
- package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/trace-checkpoint.js +0 -1
- package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/util.js +0 -2
- package/packages/datadog-plugin-aws-sdk/src/base.js +0 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +0 -1
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +0 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +0 -1
- package/packages/datadog-plugin-azure-durable-functions/src/index.js +0 -1
- package/packages/datadog-plugin-cucumber/src/index.js +9 -0
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +211 -85
- package/packages/datadog-plugin-cypress/src/finalization.js +0 -3
- package/packages/datadog-plugin-cypress/src/index.js +3 -1
- package/packages/datadog-plugin-cypress/src/source-map-utils.js +0 -4
- package/packages/datadog-plugin-cypress/src/support.js +52 -7
- package/packages/datadog-plugin-graphql/src/resolve-error.js +1 -2
- package/packages/datadog-plugin-graphql/src/utils.js +0 -5
- package/packages/datadog-plugin-jest/src/index.js +12 -0
- package/packages/datadog-plugin-kafkajs/src/producer.js +0 -1
- package/packages/datadog-plugin-mocha/src/index.js +38 -11
- package/packages/datadog-plugin-mongodb-core/src/query.js +0 -1
- package/packages/datadog-plugin-openai/src/index.js +16 -1
- package/packages/datadog-plugin-openai/src/realtime.js +144 -0
- package/packages/datadog-plugin-openai-agents/src/integration.js +0 -4
- package/packages/datadog-plugin-openai-agents/src/util.js +0 -1
- package/packages/datadog-plugin-playwright/src/index.js +81 -9
- package/packages/datadog-plugin-postgres/src/index.js +167 -0
- package/packages/datadog-plugin-prisma/src/datadog-tracing-helper.js +0 -1
- package/packages/datadog-plugin-redis/src/index.js +15 -1
- package/packages/datadog-plugin-supabase/src/error.js +18 -0
- package/packages/datadog-plugin-supabase/src/index.js +21 -0
- package/packages/datadog-plugin-supabase/src/supabase-auth-js-gotrueclient-getuser.js +69 -0
- package/packages/datadog-plugin-supabase/src/supabase-functions-js-functionsclient-invoke.js +70 -0
- package/packages/datadog-plugin-supabase/src/supabase-postgrest-js-postgrestbuilder-then.js +122 -0
- package/packages/datadog-plugin-supabase/src/supabase-realtime-js-realtimechannel-send.js +66 -0
- package/packages/datadog-plugin-supabase/src/supabase-storage-js-handle-request.js +93 -0
- package/packages/datadog-plugin-supabase/src/url.js +17 -0
- package/packages/datadog-plugin-vitest/src/index.js +9 -0
- package/packages/datadog-plugin-ws/src/producer.js +1 -1
- package/packages/datadog-plugin-ws/src/util.js +0 -4
- package/packages/datadog-shimmer/src/shimmer.js +14 -10
- package/packages/datadog-turbopack/index.js +4 -7
- package/packages/datadog-turbopack/src/loader.js +6 -18
- package/packages/datadog-webpack/src/loader.js +0 -1
- package/packages/dd-trace/src/agent/info.js +5 -4
- package/packages/dd-trace/src/aiguard/client.js +2 -3
- package/packages/dd-trace/src/aiguard/evaluation.js +6 -12
- package/packages/dd-trace/src/aiguard/index.js +2 -2
- package/packages/dd-trace/src/aiguard/integrations/index.js +1 -1
- package/packages/dd-trace/src/aiguard/integrations/openai.js +81 -7
- package/packages/dd-trace/src/aiguard/messages/anthropic.js +0 -2
- package/packages/dd-trace/src/aiguard/messages/openai.js +64 -1
- package/packages/dd-trace/src/aiguard/messages/utils.js +0 -1
- package/packages/dd-trace/src/aiguard/redaction.js +0 -1
- package/packages/dd-trace/src/aiguard/sdk.js +1 -1
- package/packages/dd-trace/src/appsec/activation.js +1 -1
- package/packages/dd-trace/src/appsec/api_security/normalized-route.js +0 -5
- package/packages/dd-trace/src/appsec/api_security/sampler.js +0 -4
- package/packages/dd-trace/src/appsec/blocking/index.js +3 -3
- package/packages/dd-trace/src/appsec/downstream_requests.js +1 -4
- package/packages/dd-trace/src/appsec/iast/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +5 -5
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.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 +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +8 -10
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +4 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +7 -7
- package/packages/dd-trace/src/appsec/index.js +2 -2
- package/packages/dd-trace/src/appsec/lambda.js +71 -2
- package/packages/dd-trace/src/appsec/rasp/utils.js +5 -1
- package/packages/dd-trace/src/appsec/remote_config.js +8 -6
- package/packages/dd-trace/src/appsec/reporter.js +10 -6
- package/packages/dd-trace/src/appsec/rule_manager.js +3 -3
- package/packages/dd-trace/src/appsec/sdk/track_event.js +0 -2
- package/packages/dd-trace/src/appsec/waf/index.js +2 -2
- package/packages/dd-trace/src/appsec/waf/waf_manager.js +8 -5
- package/packages/dd-trace/src/carrier.js +0 -5
- package/packages/dd-trace/src/ci-visibility/dynamic-atr-retries.js +104 -0
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +0 -2
- package/packages/dd-trace/src/ci-visibility/efd-retry-policy.js +34 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +0 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +0 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +0 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/index.js +0 -4
- package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/msgpack-to-json.js +0 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/sink.js +0 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +37 -15
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +0 -3
- package/packages/dd-trace/src/ci-visibility/exporters/request.js +0 -11
- package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +0 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +0 -1
- package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +0 -6
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +2 -2
- package/packages/dd-trace/src/ci-visibility/requests/rate-limit.js +0 -1
- package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +0 -5
- package/packages/dd-trace/src/ci-visibility/requests/video-request.js +0 -1
- package/packages/dd-trace/src/ci-visibility/telemetry.js +13 -0
- package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +0 -1
- package/packages/dd-trace/src/ci-visibility/test-screenshot.js +0 -2
- package/packages/dd-trace/src/ci-visibility/test-video.js +0 -1
- package/packages/dd-trace/src/config/defaults.js +3 -2
- package/packages/dd-trace/src/config/generated-config-types.d.ts +88 -82
- package/packages/dd-trace/src/config/helper.js +0 -1
- package/packages/dd-trace/src/config/index.js +31 -30
- package/packages/dd-trace/src/config/parsers.js +34 -6
- package/packages/dd-trace/src/config/remote_config.js +25 -109
- package/packages/dd-trace/src/config/supported-configurations.json +150 -10
- package/packages/dd-trace/src/datastreams/encoding.js +0 -1
- package/packages/dd-trace/src/datastreams/pathway.js +0 -1
- package/packages/dd-trace/src/debugger/constants.js +10 -0
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +62 -10
- package/packages/dd-trace/src/debugger/devtools_client/config.js +4 -1
- package/packages/dd-trace/src/debugger/devtools_client/guardrail-metrics.js +15 -0
- package/packages/dd-trace/src/debugger/devtools_client/index.js +103 -27
- package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +50 -7
- package/packages/dd-trace/src/debugger/devtools_client/log.js +3 -1
- package/packages/dd-trace/src/debugger/devtools_client/probe_sampler.js +21 -8
- package/packages/dd-trace/src/debugger/devtools_client/send.js +41 -15
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +53 -13
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +118 -71
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +5 -3
- package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +0 -3
- package/packages/dd-trace/src/debugger/devtools_client/status.js +21 -7
- package/packages/dd-trace/src/debugger/guardrail-metrics.js +167 -0
- package/packages/dd-trace/src/debugger/index.js +51 -3
- package/packages/dd-trace/src/debugger/inspect-segment.js +0 -3
- package/packages/dd-trace/src/debugger/probe_sampler.js +133 -9
- package/packages/dd-trace/src/debugger/probe_sampler_constants.js +31 -1
- package/packages/dd-trace/src/dogstatsd.js +0 -23
- package/packages/dd-trace/src/encode/0.4-cross-payload.js +0 -3
- package/packages/dd-trace/src/encode/0.4.js +0 -7
- package/packages/dd-trace/src/encode/0.5.js +0 -2
- package/packages/dd-trace/src/encode/tags-processors.js +0 -1
- package/packages/dd-trace/src/evp_proxy/constants.js +2 -0
- package/packages/dd-trace/src/evp_proxy/direct.js +17 -13
- package/packages/dd-trace/src/evp_proxy/discovery.js +14 -11
- package/packages/dd-trace/src/evp_proxy/path.js +21 -9
- package/packages/dd-trace/src/exporters/agent/writer.js +0 -1
- package/packages/dd-trace/src/exporters/agentless/index.js +0 -1
- package/packages/dd-trace/src/exporters/agentless/intake.js +0 -1
- package/packages/dd-trace/src/exporters/agentless/writer.js +0 -3
- package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +0 -6
- package/packages/dd-trace/src/exporters/common/request.js +1 -0
- package/packages/dd-trace/src/exporters/common/url.js +33 -4
- package/packages/dd-trace/src/exporters/common/writer.js +0 -2
- package/packages/dd-trace/src/id.js +0 -11
- package/packages/dd-trace/src/llmobs/audio-codec.js +192 -0
- package/packages/dd-trace/src/llmobs/audio-utils.js +121 -0
- package/packages/dd-trace/src/llmobs/constants/audio.js +35 -0
- package/packages/dd-trace/src/llmobs/constants/prompts.js +14 -0
- package/packages/dd-trace/src/llmobs/constants/tags.js +17 -0
- package/packages/dd-trace/src/llmobs/eval-metric.js +0 -6
- package/packages/dd-trace/src/llmobs/experiments/dataset.js +0 -4
- package/packages/dd-trace/src/llmobs/experiments/experiment.js +0 -3
- package/packages/dd-trace/src/llmobs/experiments/index.js +7 -6
- package/packages/dd-trace/src/llmobs/experiments/util.js +1 -11
- package/packages/dd-trace/src/llmobs/index.js +1 -3
- package/packages/dd-trace/src/llmobs/noop.js +10 -0
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +0 -4
- package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +0 -1
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +0 -4
- package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +0 -2
- package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +0 -2
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +4 -6
- package/packages/dd-trace/src/llmobs/plugins/openai/realtime.js +285 -0
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +16 -3
- package/packages/dd-trace/src/llmobs/prompts/cache.js +272 -0
- package/packages/dd-trace/src/llmobs/prompts/manager.js +647 -0
- package/packages/dd-trace/src/llmobs/prompts/noop.js +29 -0
- package/packages/dd-trace/src/llmobs/prompts/prompt.js +158 -0
- package/packages/dd-trace/src/llmobs/sdk.js +21 -6
- package/packages/dd-trace/src/llmobs/span_processor.js +81 -2
- package/packages/dd-trace/src/llmobs/tagger.js +39 -11
- package/packages/dd-trace/src/llmobs/telemetry.js +36 -4
- package/packages/dd-trace/src/llmobs/util.js +0 -34
- package/packages/dd-trace/src/llmobs/writers/base.js +0 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -2
- package/packages/dd-trace/src/log/channels.js +3 -0
- package/packages/dd-trace/src/log/index.js +23 -5
- package/packages/dd-trace/src/log-submission/log-submission-plugin.js +74 -6
- package/packages/dd-trace/src/msgpack/chunk.js +0 -1
- package/packages/dd-trace/src/openfeature/agentless_configuration_source.js +0 -12
- package/packages/dd-trace/src/openfeature/configuration_source.js +4 -1
- package/packages/dd-trace/src/openfeature/encoding.js +0 -2
- package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +0 -1
- package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -3
- package/packages/dd-trace/src/openfeature/index.js +6 -6
- package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +0 -1
- package/packages/dd-trace/src/openfeature/span-enrichment.js +0 -4
- package/packages/dd-trace/src/openfeature/writers/base.js +90 -23
- package/packages/dd-trace/src/openfeature/writers/exposures.js +4 -5
- package/packages/dd-trace/src/openfeature/writers/util.js +104 -37
- package/packages/dd-trace/src/opentelemetry/logs/logger.js +0 -1
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +0 -1
- package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +0 -1
- package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +0 -2
- package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +0 -1
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_transformer.js +0 -1
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +0 -1
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +1 -14
- package/packages/dd-trace/src/opentelemetry/metrics/time.js +0 -1
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +30 -13
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +0 -1
- package/packages/dd-trace/src/opentelemetry/span-helpers.js +0 -1
- package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +0 -1
- package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +0 -3
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +0 -6
- package/packages/dd-trace/src/opentracing/span_context.js +0 -1
- package/packages/dd-trace/src/opentracing/tracer.js +3 -3
- package/packages/dd-trace/src/otel-thread-ctx.js +38 -11
- package/packages/dd-trace/src/payload-tagging/tagging.js +15 -3
- package/packages/dd-trace/src/plugin_manager.js +27 -8
- package/packages/dd-trace/src/plugins/ci_plugin.js +1 -2
- package/packages/dd-trace/src/plugins/database.js +2 -6
- package/packages/dd-trace/src/plugins/index.js +7 -0
- package/packages/dd-trace/src/plugins/plugin.js +0 -4
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/git.js +1 -3
- package/packages/dd-trace/src/plugins/util/http-otel-semantics.js +0 -1
- package/packages/dd-trace/src/plugins/util/llm.js +0 -2
- package/packages/dd-trace/src/plugins/util/status-validator.js +0 -1
- package/packages/dd-trace/src/plugins/util/test.js +26 -20
- package/packages/dd-trace/src/plugins/util/url.js +0 -5
- package/packages/dd-trace/src/priority_sampler.js +0 -6
- package/packages/dd-trace/src/process-tags/index.js +0 -1
- package/packages/dd-trace/src/profiler.js +132 -35
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +0 -1
- package/packages/dd-trace/src/profiling/profiler.js +101 -41
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +29 -15
- package/packages/dd-trace/src/propagation-hash/index.js +0 -1
- package/packages/dd-trace/src/proxy.js +23 -47
- package/packages/dd-trace/src/random_sampler.js +0 -4
- package/packages/dd-trace/src/rate_limiter.js +0 -4
- package/packages/dd-trace/src/remote_config/capabilities.js +1 -9
- package/packages/dd-trace/src/remote_config/index.js +0 -1
- package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +0 -3
- package/packages/dd-trace/src/sampler.js +0 -4
- package/packages/dd-trace/src/sampling_rule.js +0 -7
- package/packages/dd-trace/src/serverless/vercel.js +0 -1
- package/packages/dd-trace/src/serverless.js +0 -1
- package/packages/dd-trace/src/service-naming/index.js +0 -1
- package/packages/dd-trace/src/service-naming/schemas/util.js +0 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +7 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +5 -0
- package/packages/dd-trace/src/span_processor.js +2 -2
- package/packages/dd-trace/src/span_sampler.js +0 -1
- package/packages/dd-trace/src/standalone/product.js +2 -2
- package/packages/dd-trace/src/standalone/tracesource.js +0 -1
- package/packages/dd-trace/src/startup-log.js +1 -1
- package/packages/dd-trace/src/telemetry/endpoints.js +0 -8
- package/packages/dd-trace/src/telemetry/logs/index.js +16 -5
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +16 -6
- package/packages/dd-trace/src/telemetry/metrics.js +0 -2
- package/packages/dd-trace/src/telemetry/send-data.js +2 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +4 -1
- package/packages/dd-trace/src/tracer.js +5 -4
- package/packages/dd-trace/src/util.js +13 -1
- package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -1
- package/packages/datadog-instrumentations/src/bullmq.js +0 -11
- package/packages/datadog-instrumentations/src/langchain.js +0 -7
- package/packages/datadog-instrumentations/src/langgraph.js +0 -7
- package/packages/datadog-instrumentations/src/mercurius.js +0 -11
|
@@ -214,7 +214,6 @@ function createGraphqlJitRuntime ({
|
|
|
214
214
|
* @param {string} resolverCall
|
|
215
215
|
* @param {string} resolverName
|
|
216
216
|
* @param {number | undefined} descriptorId
|
|
217
|
-
* @returns {string}
|
|
218
217
|
*/
|
|
219
218
|
function compileResolverCall (context, resolverCall, resolverName, descriptorId) {
|
|
220
219
|
const openParenthesis = resolverCall.indexOf('(')
|
|
@@ -254,7 +253,6 @@ function createGraphqlJitRuntime ({
|
|
|
254
253
|
* @param {CompiledArguments} args
|
|
255
254
|
* @param {string} argumentSource
|
|
256
255
|
* @param {string} compiledField
|
|
257
|
-
* @returns {string}
|
|
258
256
|
*/
|
|
259
257
|
function compileDefaultField (
|
|
260
258
|
context,
|
|
@@ -377,7 +375,6 @@ function createDescriptor (context, compilerPath, input, fieldNode, createFieldM
|
|
|
377
375
|
* @param {JitFieldDescriptor} descriptor
|
|
378
376
|
* @param {CompiledArguments['missing']} missing
|
|
379
377
|
* @param {string} argumentSource
|
|
380
|
-
* @returns {string}
|
|
381
378
|
*/
|
|
382
379
|
function compileArgumentFactory (context, descriptor, missing, argumentSource) {
|
|
383
380
|
if (missing.length === 0 && argumentSource === '{}') return 'undefined'
|
|
@@ -418,7 +415,6 @@ function compileArgumentFactory (context, descriptor, missing, argumentSource) {
|
|
|
418
415
|
|
|
419
416
|
/**
|
|
420
417
|
* @param {ArgumentPath} path
|
|
421
|
-
* @returns {string}
|
|
422
418
|
*/
|
|
423
419
|
function compileArgumentPath (path) {
|
|
424
420
|
let source = 'args'
|
|
@@ -430,7 +426,6 @@ function compileArgumentPath (path) {
|
|
|
430
426
|
|
|
431
427
|
/**
|
|
432
428
|
* @param {string} value
|
|
433
|
-
* @returns {string}
|
|
434
429
|
*/
|
|
435
430
|
function quoteString (value) {
|
|
436
431
|
const json = JSON.stringify(value)
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
4
|
// Only list unprefixed node modules. They will automatically be instrumented as prefixed and unprefixed.
|
|
5
|
+
'@supabase/auth-js': { esmFirst: true, fn: () => require('../supabase') },
|
|
6
|
+
'@supabase/functions-js': { esmFirst: true, fn: () => require('../supabase') },
|
|
7
|
+
'@supabase/postgrest-js': { esmFirst: true, fn: () => require('../supabase') },
|
|
8
|
+
'@supabase/realtime-js': { esmFirst: true, fn: () => require('../supabase') },
|
|
9
|
+
'@supabase/storage-js': { esmFirst: true, fn: () => require('../supabase') },
|
|
10
|
+
'@supabase/supabase-js': { esmFirst: true, fn: () => require('../supabase') },
|
|
5
11
|
child_process: () => require('../child_process'),
|
|
6
12
|
crypto: () => require('../crypto'),
|
|
7
13
|
dns: () => require('../dns'),
|
|
@@ -19,14 +25,12 @@ module.exports = {
|
|
|
19
25
|
'@anthropic-ai/sdk': { esmFirst: true, fn: () => require('../anthropic') },
|
|
20
26
|
'@apollo/server': () => require('../apollo-server'),
|
|
21
27
|
'@apollo/gateway': () => require('../apollo'),
|
|
22
|
-
'@langchain/langgraph': { esmFirst: true, fn: () => require('../langgraph') },
|
|
23
28
|
'@modelcontextprotocol/sdk': { esmFirst: true, fn: () => require('../modelcontextprotocol-sdk') },
|
|
24
29
|
'@openai/agents': () => require('../openai-agents'),
|
|
25
30
|
'@openai/agents-openai': () => require('../openai-agents'),
|
|
26
31
|
'apollo-server-core': () => require('../apollo-server-core'),
|
|
27
32
|
'@aws-sdk/smithy-client': () => require('../aws-sdk'),
|
|
28
33
|
'@aws/durable-execution-sdk-js': () => require('../aws-durable-execution-sdk-js'),
|
|
29
|
-
'@azure/cosmos': { esmFirst: true, fn: () => require('../azure-cosmos') },
|
|
30
34
|
'@azure/event-hubs': () => require('../azure-event-hubs'),
|
|
31
35
|
'@azure/functions': () => require('../azure-functions'),
|
|
32
36
|
'durable-functions': () => require('../azure-durable-functions'),
|
|
@@ -42,12 +46,12 @@ module.exports = {
|
|
|
42
46
|
'@grpc/grpc-js': () => require('../grpc'),
|
|
43
47
|
'@hapi/hapi': () => require('../hapi'),
|
|
44
48
|
'@happy-dom/jest-environment': () => require('../jest'),
|
|
49
|
+
'@jest/console': () => require('../jest'),
|
|
45
50
|
'@jest/core': () => require('../jest'),
|
|
46
51
|
'@jest/reporters': () => require('../jest'),
|
|
47
52
|
'@jest/test-sequencer': () => require('../jest'),
|
|
48
53
|
'@jest/transform': () => require('../jest'),
|
|
49
54
|
'@koa/router': () => require('../koa'),
|
|
50
|
-
'@langchain/core': { esmFirst: true, fn: () => require('../langchain') },
|
|
51
55
|
'@node-redis/client': () => require('../redis'),
|
|
52
56
|
'@opensearch-project/opensearch': () => require('../opensearch'),
|
|
53
57
|
'@opentelemetry/sdk-trace': () => require('../otel-sdk-trace'),
|
|
@@ -71,7 +75,6 @@ module.exports = {
|
|
|
71
75
|
bluebird: () => require('../bluebird'),
|
|
72
76
|
'body-parser': () => require('../body-parser'),
|
|
73
77
|
'browser-bunyan': () => require('../browser-bunyan'),
|
|
74
|
-
bullmq: () => require('../bullmq'),
|
|
75
78
|
bunyan: () => require('../bunyan'),
|
|
76
79
|
'cassandra-driver': () => require('../cassandra-driver'),
|
|
77
80
|
connect: () => require('../connect'),
|
|
@@ -107,14 +110,12 @@ module.exports = {
|
|
|
107
110
|
'koa-router': () => require('../koa'),
|
|
108
111
|
'@confluentinc/kafka-javascript': () => require('../confluentinc-kafka-javascript'),
|
|
109
112
|
kafkajs: () => require('../kafkajs'),
|
|
110
|
-
langchain: () => require('../langchain'),
|
|
111
113
|
ldapjs: () => require('../ldapjs'),
|
|
112
114
|
'light-my-request': () => require('../light-my-request'),
|
|
113
115
|
'limitd-client': () => require('../limitd-client'),
|
|
114
116
|
lodash: () => require('../lodash'),
|
|
115
117
|
mariadb: { esmFirst: true, fn: () => require('../mariadb') },
|
|
116
118
|
memcached: () => require('../memcached'),
|
|
117
|
-
mercurius: () => require('../mercurius'),
|
|
118
119
|
'microgateway-core': () => require('../microgateway-core'),
|
|
119
120
|
mocha: () => require('../mocha'),
|
|
120
121
|
'mocha-each': () => require('../mocha'),
|
|
@@ -141,6 +142,7 @@ module.exports = {
|
|
|
141
142
|
'pino-pretty': () => require('../pino'),
|
|
142
143
|
playwright: () => require('../playwright'),
|
|
143
144
|
'playwright-core': () => require('../playwright'),
|
|
145
|
+
postgres: { esmFirst: true, fn: () => require('../postgres') },
|
|
144
146
|
'promise-js': () => require('../promise-js'),
|
|
145
147
|
promise: () => require('../promise'),
|
|
146
148
|
protobufjs: () => require('../protobufjs'),
|
|
@@ -9,7 +9,6 @@ const { isRelativeRequire } = require('./shared-utils')
|
|
|
9
9
|
/**
|
|
10
10
|
* @param {string|undefined} version
|
|
11
11
|
* @param {string[]|undefined} ranges
|
|
12
|
-
* @returns {boolean}
|
|
13
12
|
*/
|
|
14
13
|
function matchVersion (version, ranges) {
|
|
15
14
|
return !version || !ranges || ranges.some(range => satisfies(version, range))
|
|
@@ -18,7 +17,6 @@ function matchVersion (version, ranges) {
|
|
|
18
17
|
/**
|
|
19
18
|
* @param {string} name
|
|
20
19
|
* @param {string} [file]
|
|
21
|
-
* @returns {string}
|
|
22
20
|
*/
|
|
23
21
|
function filename (name, file) {
|
|
24
22
|
return file ? `${name}/${file}` : name
|
|
@@ -29,7 +27,6 @@ function filename (name, file) {
|
|
|
29
27
|
* @param {string|undefined} version
|
|
30
28
|
* @param {string} moduleName
|
|
31
29
|
* @param {{ file?: string, filePattern?: string, versions?: string[] }} instrumentation
|
|
32
|
-
* @returns {boolean}
|
|
33
30
|
*/
|
|
34
31
|
function matchesInstrumentation (name, version, moduleName, instrumentation) {
|
|
35
32
|
const { file, filePattern, versions } = instrumentation
|
|
@@ -400,9 +400,6 @@ function getConnectionForAcquire (getConnection, pool, args, acquireCtx, start,
|
|
|
400
400
|
}
|
|
401
401
|
}
|
|
402
402
|
|
|
403
|
-
/**
|
|
404
|
-
* @returns {boolean}
|
|
405
|
-
*/
|
|
406
403
|
function isPoolQueryAcquire () {
|
|
407
404
|
return currentPoolQueryAcquire !== undefined
|
|
408
405
|
}
|
|
@@ -436,7 +433,6 @@ function runWithPoolQueryAcquire (acquire, method, receiver, args) {
|
|
|
436
433
|
|
|
437
434
|
/**
|
|
438
435
|
* @param {object} pool
|
|
439
|
-
* @returns {boolean}
|
|
440
436
|
*/
|
|
441
437
|
function takeDeferredPoolQueryAcquire (pool) {
|
|
442
438
|
const acquire = deferredPoolQueryAcquireStorage?.getStore()
|
|
@@ -579,7 +575,6 @@ function setPoolAcquireCaptureWaitTime (capture, waitTime) {
|
|
|
579
575
|
* @param {Record<string, unknown>} receiver
|
|
580
576
|
* @param {string} acquireMethod
|
|
581
577
|
* @param {unknown[]} args
|
|
582
|
-
* @returns {boolean}
|
|
583
578
|
*/
|
|
584
579
|
function dispatchesAcquireSynchronously (method, receiver, acquireMethod, args) {
|
|
585
580
|
let dispatched = false
|
|
@@ -618,7 +613,6 @@ function acquireStart (pool, acquire) {
|
|
|
618
613
|
|
|
619
614
|
/**
|
|
620
615
|
* @param {number|undefined} start
|
|
621
|
-
* @returns {number}
|
|
622
616
|
*/
|
|
623
617
|
function acquireWait (start) {
|
|
624
618
|
return start === undefined ? 0 : performance.now() - start
|
|
@@ -25,6 +25,7 @@ const pathSepExpr = new RegExp(`\\${path.sep}`, 'g')
|
|
|
25
25
|
const disabledInstrumentations = getDisabledInstrumentations()
|
|
26
26
|
|
|
27
27
|
const loadChannel = channel('dd-trace:instrumentation:load')
|
|
28
|
+
const orchestrionLoadChannel = channel('dd-trace:instrumentation:load:orchestrion')
|
|
28
29
|
|
|
29
30
|
// Globals
|
|
30
31
|
if (!disabledInstrumentations.has('fetch')) {
|
|
@@ -35,6 +36,10 @@ if (!disabledInstrumentations.has('process')) {
|
|
|
35
36
|
require('../process')
|
|
36
37
|
}
|
|
37
38
|
|
|
39
|
+
if (!disabledInstrumentations.has('console')) {
|
|
40
|
+
require('../console')
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
const debugEnabled = DD_TRACE_DEBUG
|
|
39
44
|
checkRequireCache.checkForRequiredModules()
|
|
40
45
|
if (debugEnabled) {
|
|
@@ -51,6 +56,25 @@ const instrumentedNodeModules = new Map()
|
|
|
51
56
|
const instrumentedIntegrationsSuccess = new Map()
|
|
52
57
|
/** @type {Set<string>} */
|
|
53
58
|
const alreadyLoggedIncompatibleIntegrations = new Set()
|
|
59
|
+
/** @type {Set<string>} */
|
|
60
|
+
const compatibleOrchestrionTargets = new Set()
|
|
61
|
+
|
|
62
|
+
orchestrionLoadChannel.subscribe(({ moduleName, version, result }) => {
|
|
63
|
+
const nameVersion = `${moduleName}@${version}`
|
|
64
|
+
|
|
65
|
+
if (result === 'unsupported') {
|
|
66
|
+
if (!compatibleOrchestrionTargets.has(nameVersion) && !instrumentedIntegrationsSuccess.has(nameVersion)) {
|
|
67
|
+
instrumentedIntegrationsSuccess.set(nameVersion, false)
|
|
68
|
+
}
|
|
69
|
+
return
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (result === 'matched' || result === 'rewritten') {
|
|
73
|
+
compatibleOrchestrionTargets.add(nameVersion)
|
|
74
|
+
instrumentedIntegrationsSuccess.set(nameVersion, true)
|
|
75
|
+
if (result === 'rewritten') loadChannel.publish({ name: moduleName })
|
|
76
|
+
}
|
|
77
|
+
})
|
|
54
78
|
|
|
55
79
|
for (const name of names) {
|
|
56
80
|
if (disabledInstrumentations.has(name)) continue
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
const { readFileSync } = require('node:fs')
|
|
4
4
|
const { join } = require('node:path')
|
|
5
|
-
const { pathToFileURL } = require('node:url')
|
|
5
|
+
const { fileURLToPath, pathToFileURL } = require('node:url')
|
|
6
6
|
|
|
7
7
|
const log = require('../../../../dd-trace/src/log')
|
|
8
|
+
const { getDisabledInstrumentations } = require('../instrumentation-utils')
|
|
8
9
|
const instrumentations = require('./instrumentations')
|
|
9
10
|
const { getRewriteTarget } = require('./targets')
|
|
10
11
|
|
|
@@ -18,7 +19,7 @@ const { getRewriteTarget } = require('./targets')
|
|
|
18
19
|
* { code: string, map?: string|object }} transform
|
|
19
20
|
*
|
|
20
21
|
* @typedef {(content: string|Buffer|ArrayBuffer|Uint8Array, filename: string, format?: string,
|
|
21
|
-
* target?: { moduleName: string, filePath: string }, sourceMap?: string|object) =>
|
|
22
|
+
* target?: { moduleName: string, filePath: string, activate?: boolean }, sourceMap?: string|object) =>
|
|
22
23
|
* { code: string|Buffer|ArrayBuffer|Uint8Array, map?: string|object }} BundlerRewriter
|
|
23
24
|
*/
|
|
24
25
|
|
|
@@ -26,7 +27,8 @@ const { getRewriteTarget } = require('./targets')
|
|
|
26
27
|
* @type {Record<string, string>} map of module base name to version
|
|
27
28
|
*/
|
|
28
29
|
const moduleVersions = {}
|
|
29
|
-
|
|
30
|
+
// Asynchronous loader workers have their own module graph and cannot receive disable() calls made on the main thread.
|
|
31
|
+
const disabled = getDisabledInstrumentations()
|
|
30
32
|
|
|
31
33
|
// Matchers are built on the first module that actually needs rewriting. The
|
|
32
34
|
// vendored transformer is a quarter megabyte of bundle that an application
|
|
@@ -42,40 +44,76 @@ let matcherEsm
|
|
|
42
44
|
// eslint-disable-next-line unicorn/no-useless-concat -- Keep the source-map marker non-contiguous.
|
|
43
45
|
const SOURCE_MAP_PREFIX = '//# sourceMapping' + 'URL=data:application/json;base64,'
|
|
44
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Loader hooks hand `file://` URLs to the rewriter while CommonJS and bundler
|
|
49
|
+
* callers pass plain paths. `fileURLToPath` is the only correct conversion: a
|
|
50
|
+
* plain scheme strip leaves Windows paths rooted at `/C:/` and keeps
|
|
51
|
+
* percent-encoded characters undecoded, which breaks version resolution.
|
|
52
|
+
* Rewrite-target paths use forward slashes, including on Windows.
|
|
53
|
+
*
|
|
54
|
+
* @param {string} filename
|
|
55
|
+
*/
|
|
56
|
+
function normalizeFilename (filename) {
|
|
57
|
+
const path = filename.startsWith('file://') ? fileURLToPath(filename) : filename
|
|
58
|
+
return path.replaceAll('\\', '/')
|
|
59
|
+
}
|
|
60
|
+
|
|
45
61
|
/**
|
|
46
62
|
* @param {string|Buffer|ArrayBuffer|Uint8Array} content
|
|
47
63
|
* @param {string} filename
|
|
48
64
|
* @param {string} [format]
|
|
49
|
-
* @param {{ moduleName: string, filePath: string }} [target]
|
|
65
|
+
* @param {{ moduleName: string, filePath: string, activate?: boolean }} [target]
|
|
50
66
|
* @returns {string|Buffer|ArrayBuffer|Uint8Array}
|
|
51
67
|
*/
|
|
52
68
|
function rewrite (content, filename, format, target) {
|
|
53
69
|
if (!content) return content
|
|
54
70
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
try {
|
|
72
|
+
filename = normalizeFilename(filename)
|
|
73
|
+
target ||= getRewriteTarget(filename)
|
|
74
|
+
if (!target) return content
|
|
59
75
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
76
|
+
const moduleType = format === 'module' ? 'esm' : 'cjs'
|
|
77
|
+
const { moduleName, filePath, activate } = target
|
|
78
|
+
if (disabled.has(moduleName)) return content
|
|
63
79
|
|
|
64
|
-
|
|
80
|
+
const version = getVersion(filename, filePath)
|
|
81
|
+
if (!version) return content
|
|
65
82
|
|
|
66
|
-
|
|
83
|
+
const transformer = getMatcher(moduleType).getTransformer(moduleName, version, filePath)
|
|
67
84
|
|
|
68
|
-
|
|
85
|
+
if (!transformer && !activate) return content
|
|
69
86
|
|
|
70
|
-
try {
|
|
71
87
|
const source = getSourceText(content)
|
|
72
88
|
|
|
89
|
+
if (!transformer) {
|
|
90
|
+
return appendOrchestrionLoad(
|
|
91
|
+
source,
|
|
92
|
+
{ moduleName, version, result: 'unsupported' },
|
|
93
|
+
moduleType
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
73
97
|
// TODO: pass existing sourcemap as input for remapping
|
|
74
|
-
|
|
98
|
+
let { code, map } = transformer.transform(source, moduleType)
|
|
99
|
+
|
|
100
|
+
if (source.startsWith('#!') && !code.startsWith('#!')) {
|
|
101
|
+
// A shebang must be the entire first line, and JavaScript recognizes
|
|
102
|
+
// exactly four line terminators: \n, \r, \u2028 (line separator), and
|
|
103
|
+
// \u2029 (paragraph separator). Any of the four can end the shebang line.
|
|
104
|
+
const shebangEnd = source.search(/[\r\n\u2028\u2029]/)
|
|
105
|
+
code = (shebangEnd === -1 ? source : source.slice(0, shebangEnd)) + '\n' + code
|
|
106
|
+
map = shiftSourceMapLine(map)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (activate) {
|
|
110
|
+
const result = code === source ? 'matched' : 'rewritten'
|
|
111
|
+
code = appendOrchestrionLoad(code, { moduleName, version, result }, moduleType)
|
|
112
|
+
}
|
|
75
113
|
|
|
76
114
|
if (!map) return code
|
|
77
115
|
|
|
78
|
-
const inlineMap = Buffer.from(map).toString('base64')
|
|
116
|
+
const inlineMap = Buffer.from(typeof map === 'string' ? map : JSON.stringify(map)).toString('base64')
|
|
79
117
|
|
|
80
118
|
return code + '\n' + SOURCE_MAP_PREFIX + inlineMap
|
|
81
119
|
} catch (e) {
|
|
@@ -95,16 +133,19 @@ function createBundlerRewriter (dcModule) {
|
|
|
95
133
|
return function rewriteBundled (content, filename, format, target, sourceMap) {
|
|
96
134
|
if (!content) return { code: content, map: sourceMap }
|
|
97
135
|
|
|
98
|
-
|
|
99
|
-
|
|
136
|
+
try {
|
|
137
|
+
filename = normalizeFilename(filename)
|
|
138
|
+
target ||= getRewriteTarget(filename)
|
|
139
|
+
if (!target) return { code: content, map: sourceMap }
|
|
100
140
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
141
|
+
const moduleType = format === 'module' ? 'esm' : 'cjs'
|
|
142
|
+
const { moduleName, filePath } = target
|
|
143
|
+
const version = getVersion(filename, filePath)
|
|
144
|
+
if (!version) return { code: content, map: sourceMap }
|
|
145
|
+
|
|
146
|
+
const transformer = matcher.getTransformer(moduleName, version, filePath)
|
|
147
|
+
if (!transformer) return { code: content, map: sourceMap }
|
|
106
148
|
|
|
107
|
-
try {
|
|
108
149
|
return transformer.transform(getSourceText(content), moduleType, sourceMap)
|
|
109
150
|
} catch (error) {
|
|
110
151
|
log.error(error)
|
|
@@ -146,6 +187,11 @@ function createMatcher (dcModule) {
|
|
|
146
187
|
publishDurableOrchestrationFailure,
|
|
147
188
|
waitForAsyncEnd,
|
|
148
189
|
} = require('./transforms')
|
|
190
|
+
const {
|
|
191
|
+
postgresQueryHandlers,
|
|
192
|
+
postgresQueryLifecycle,
|
|
193
|
+
postgresQueryPreparation,
|
|
194
|
+
} = require('./transforms/postgres')
|
|
149
195
|
|
|
150
196
|
const matcher = create(instrumentations, dcModule)
|
|
151
197
|
|
|
@@ -158,6 +204,9 @@ function createMatcher (dcModule) {
|
|
|
158
204
|
matcher.addTransform('configureGraphqlJitRuntime', configureGraphqlJitRuntime)
|
|
159
205
|
matcher.addTransform('configureMercuriusRequest', configureMercuriusRequest)
|
|
160
206
|
matcher.addTransform('publishDurableOrchestrationFailure', publishDurableOrchestrationFailure)
|
|
207
|
+
matcher.addTransform('postgresQueryHandlers', postgresQueryHandlers)
|
|
208
|
+
matcher.addTransform('postgresQueryLifecycle', postgresQueryLifecycle)
|
|
209
|
+
matcher.addTransform('postgresQueryPreparation', postgresQueryPreparation)
|
|
161
210
|
|
|
162
211
|
return matcher
|
|
163
212
|
}
|
|
@@ -191,7 +240,6 @@ function getDcPolyfillSpecifier (moduleType) {
|
|
|
191
240
|
* Convert the source representations accepted by Node.js loader hooks to text.
|
|
192
241
|
*
|
|
193
242
|
* @param {string | ArrayBuffer | BufferView} source
|
|
194
|
-
* @returns {string}
|
|
195
243
|
*/
|
|
196
244
|
function getSourceText (source) {
|
|
197
245
|
if (typeof source === 'string') return source
|
|
@@ -201,6 +249,43 @@ function getSourceText (source) {
|
|
|
201
249
|
return Buffer.from(source).toString('utf8')
|
|
202
250
|
}
|
|
203
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Publish target-level compatibility on the application thread when a pure target is evaluated.
|
|
254
|
+
*
|
|
255
|
+
* @param {string} source
|
|
256
|
+
* @param {{ moduleName: string, version: string,
|
|
257
|
+
* result: 'unsupported'|'matched'|'rewritten' }} payload
|
|
258
|
+
* @param {'cjs'|'esm'} moduleType
|
|
259
|
+
*/
|
|
260
|
+
function appendOrchestrionLoad (source, payload, moduleType) {
|
|
261
|
+
const dcModule = JSON.stringify(getDcPolyfillSpecifier(moduleType) ?? 'diagnostics_channel')
|
|
262
|
+
const message = JSON.stringify(payload)
|
|
263
|
+
|
|
264
|
+
if (moduleType === 'esm') {
|
|
265
|
+
let binding = 'ddTraceOrchestrionDc'
|
|
266
|
+
let suffix = 0
|
|
267
|
+
while (source.includes(binding)) binding = `ddTraceOrchestrionDc${++suffix}`
|
|
268
|
+
|
|
269
|
+
return `${source};import ${binding} from ${dcModule};` +
|
|
270
|
+
`${binding}.channel('dd-trace:instrumentation:load:orchestrion').publish(${message});`
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return `${source};require(${dcModule}).channel('dd-trace:instrumentation:load:orchestrion').publish(${message});`
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Account for a shebang restored ahead of the generated program. The transformer already maps original positions
|
|
278
|
+
* past the input shebang, so only the generated side needs an additional empty line.
|
|
279
|
+
*
|
|
280
|
+
* @param {string|object|undefined} map
|
|
281
|
+
*/
|
|
282
|
+
function shiftSourceMapLine (map) {
|
|
283
|
+
if (!map) return map
|
|
284
|
+
const sourceMap = typeof map === 'string' ? JSON.parse(map) : map
|
|
285
|
+
const shifted = { ...sourceMap, mappings: `;${sourceMap.mappings}` }
|
|
286
|
+
return typeof map === 'string' ? JSON.stringify(shifted) : shifted
|
|
287
|
+
}
|
|
288
|
+
|
|
204
289
|
function disable (instrumentation) {
|
|
205
290
|
disabled.add(instrumentation)
|
|
206
291
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// Activated rewrites publish their module name to the plugin manager after evaluation.
|
|
4
|
+
// Only pure Orchestrion integrations that need this activation set activate: true.
|
|
5
|
+
// Other entries use hooks or another activation path, or do not need activation from a rewrite.
|
|
6
|
+
const registry = [
|
|
7
|
+
{ instrumentations: require('./instrumentations/ai') },
|
|
8
|
+
{ activate: true, instrumentations: require('./instrumentations/azure-cosmos') },
|
|
9
|
+
{ instrumentations: require('./instrumentations/azure-durable-functions') },
|
|
10
|
+
{ activate: true, instrumentations: require('./instrumentations/bullmq') },
|
|
11
|
+
{ instrumentations: require('./instrumentations/claude-agent-sdk') },
|
|
12
|
+
{ instrumentations: require('./instrumentations/graphql') },
|
|
13
|
+
{ instrumentations: require('./instrumentations/graphql-jit') },
|
|
14
|
+
{ activate: true, instrumentations: require('./instrumentations/langchain') },
|
|
15
|
+
{ activate: true, instrumentations: require('./instrumentations/langgraph') },
|
|
16
|
+
{ activate: true, instrumentations: require('./instrumentations/mercurius') },
|
|
17
|
+
{ instrumentations: require('./instrumentations/modelcontextprotocol-sdk') },
|
|
18
|
+
{ instrumentations: require('./instrumentations/openai-agents') },
|
|
19
|
+
{ instrumentations: require('./instrumentations/playwright') },
|
|
20
|
+
{ instrumentations: require('./instrumentations/postgres') },
|
|
21
|
+
{ instrumentations: require('./instrumentations/webdriverio') },
|
|
22
|
+
{ instrumentations: require('./instrumentations/aws-durable-execution-sdk-js') },
|
|
23
|
+
{ instrumentations: require('./instrumentations/supabase') },
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
const activatedModules = new Set()
|
|
27
|
+
for (const { activate, instrumentations } of registry) {
|
|
28
|
+
if (!activate) continue
|
|
29
|
+
for (const { module } of instrumentations) activatedModules.add(module.name)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const instrumentations = registry.flatMap(entry => entry.instrumentations)
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @param {string} moduleName
|
|
36
|
+
*/
|
|
37
|
+
function isRewriteActivationEnabled (moduleName) {
|
|
38
|
+
return activatedModules.has(moduleName)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = { isRewriteActivationEnabled, instrumentations, registry }
|
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
...require('./azure-durable-functions'),
|
|
7
|
-
...require('./bullmq'),
|
|
8
|
-
...require('./claude-agent-sdk'),
|
|
9
|
-
...require('./graphql'),
|
|
10
|
-
...require('./graphql-jit'),
|
|
11
|
-
...require('./langchain'),
|
|
12
|
-
...require('./langgraph'),
|
|
13
|
-
...require('./mercurius'),
|
|
14
|
-
...require('./modelcontextprotocol-sdk'),
|
|
15
|
-
...require('./openai-agents'),
|
|
16
|
-
...require('./playwright'),
|
|
17
|
-
...require('./webdriverio'),
|
|
18
|
-
...require('./aws-durable-execution-sdk-js'),
|
|
19
|
-
]
|
|
3
|
+
const { instrumentations } = require('../instrumentation-registry')
|
|
4
|
+
|
|
5
|
+
module.exports = instrumentations
|
package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js
CHANGED
|
@@ -3,6 +3,49 @@
|
|
|
3
3
|
// Playwright keeps several hook targets in private local classes/functions.
|
|
4
4
|
// Keep these rewrites limited to bundled internals that addHook cannot wrap.
|
|
5
5
|
module.exports = [
|
|
6
|
+
{
|
|
7
|
+
module: {
|
|
8
|
+
name: '@playwright/test',
|
|
9
|
+
versionRange: '>=1.18.0 <1.38.0',
|
|
10
|
+
filePath: 'lib/reporters/multiplexer.js',
|
|
11
|
+
},
|
|
12
|
+
functionQuery: {
|
|
13
|
+
className: 'Multiplexer',
|
|
14
|
+
methodName: 'onError',
|
|
15
|
+
kind: 'Sync',
|
|
16
|
+
},
|
|
17
|
+
channelName: 'Multiplexer_onError',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
module: {
|
|
21
|
+
name: 'playwright',
|
|
22
|
+
versionRange: '>=1.44.0 <1.60.0',
|
|
23
|
+
filePath: 'lib/runner/runner.js',
|
|
24
|
+
},
|
|
25
|
+
astQuery: 'FunctionDeclaration[id.name="writeLastRunInfo"] ' +
|
|
26
|
+
'CallExpression[callee.property.name="map"] > ArrowFunctionExpression',
|
|
27
|
+
channelName: 'lastRunTestId',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
module: {
|
|
31
|
+
name: 'playwright',
|
|
32
|
+
versionRange: '>=1.44.0 <1.60.0',
|
|
33
|
+
filePath: 'lib/runner/lastRun.js',
|
|
34
|
+
},
|
|
35
|
+
astQuery: 'ClassDeclaration[id.name="LastRunReporter"] ' +
|
|
36
|
+
'CallExpression[callee.property.name="map"] > ArrowFunctionExpression',
|
|
37
|
+
channelName: 'lastRunTestId',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
module: {
|
|
41
|
+
name: 'playwright',
|
|
42
|
+
versionRange: '>=1.60.0',
|
|
43
|
+
filePath: 'lib/runner/index.js',
|
|
44
|
+
},
|
|
45
|
+
astQuery: 'VariableDeclarator[id.name="LastRunReporter"] ' +
|
|
46
|
+
'CallExpression[callee.property.name="map"] > ArrowFunctionExpression',
|
|
47
|
+
channelName: 'lastRunTestId',
|
|
48
|
+
},
|
|
6
49
|
{
|
|
7
50
|
module: {
|
|
8
51
|
name: 'playwright',
|
|
@@ -93,6 +136,18 @@ module.exports = [
|
|
|
93
136
|
},
|
|
94
137
|
channelName: 'createRootSuite',
|
|
95
138
|
},
|
|
139
|
+
{
|
|
140
|
+
module: {
|
|
141
|
+
name: 'playwright',
|
|
142
|
+
versionRange: '>=1.60.0',
|
|
143
|
+
filePath: 'lib/runner/index.js',
|
|
144
|
+
},
|
|
145
|
+
functionQuery: {
|
|
146
|
+
functionName: 'filterForShard',
|
|
147
|
+
kind: 'Sync',
|
|
148
|
+
},
|
|
149
|
+
channelName: 'filterForShard',
|
|
150
|
+
},
|
|
96
151
|
{
|
|
97
152
|
module: {
|
|
98
153
|
name: 'playwright-core',
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const handlers = ['src/index.js', 'cjs/src/index.js'].map(filePath => ({
|
|
4
|
+
module: {
|
|
5
|
+
name: 'postgres',
|
|
6
|
+
versionRange: '>=3.0.0',
|
|
7
|
+
filePath,
|
|
8
|
+
},
|
|
9
|
+
astQuery: 'Program',
|
|
10
|
+
transform: 'postgresQueryHandlers',
|
|
11
|
+
channelName: 'query',
|
|
12
|
+
}))
|
|
13
|
+
|
|
14
|
+
const preparations = ['src/connection.js', 'cjs/src/connection.js'].map(filePath => ({
|
|
15
|
+
module: {
|
|
16
|
+
name: 'postgres',
|
|
17
|
+
versionRange: '>=3.0.0',
|
|
18
|
+
filePath,
|
|
19
|
+
},
|
|
20
|
+
astQuery: 'Program',
|
|
21
|
+
transform: 'postgresQueryPreparation',
|
|
22
|
+
channelName: 'query:prepare',
|
|
23
|
+
}))
|
|
24
|
+
|
|
25
|
+
const lifecycles = ['src/query.js', 'cjs/src/query.js'].map(filePath => ({
|
|
26
|
+
module: {
|
|
27
|
+
name: 'postgres',
|
|
28
|
+
versionRange: '>=3.0.0',
|
|
29
|
+
filePath,
|
|
30
|
+
},
|
|
31
|
+
astQuery: 'Program',
|
|
32
|
+
transform: 'postgresQueryLifecycle',
|
|
33
|
+
channelName: 'query',
|
|
34
|
+
}))
|
|
35
|
+
|
|
36
|
+
module.exports = [...handlers, ...preparations, ...lifecycles]
|