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
|
@@ -8,7 +8,7 @@ const { getValueFromEnvSources } = require('../config/helper')
|
|
|
8
8
|
// `config/defaults` defers its own `dns` require until after it exports, so this no longer hits
|
|
9
9
|
// the `config/defaults` <-> log parse cycle that motivated the lazy require below.
|
|
10
10
|
const { defaults } = require('../config/defaults')
|
|
11
|
-
const { traceChannel, debugChannel, infoChannel, warnChannel, errorChannel } = require('./channels')
|
|
11
|
+
const { traceChannel, debugChannel, infoChannel, warnChannel, errorChannel, errorRecordChannel } = require('./channels')
|
|
12
12
|
const logWriter = require('./writer')
|
|
13
13
|
const { Log, LogConfig, NoTransmitError } = require('./log')
|
|
14
14
|
|
|
@@ -95,10 +95,25 @@ const log = {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
function publishFormatted (ch, formatter, ...args) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
const publishRecord = ch === errorChannel && errorRecordChannel.hasSubscribers
|
|
99
|
+
const publishLog = ch.hasSubscribers
|
|
100
|
+
if (!publishLog && !publishRecord) return
|
|
101
|
+
|
|
102
|
+
let record
|
|
103
|
+
try {
|
|
104
|
+
const parsed = Log.parse(...args)
|
|
105
|
+
if (!publishLog && !parsed.sendViaTelemetry) return
|
|
106
|
+
record = getErrorLog(parsed)
|
|
107
|
+
} catch (err) {
|
|
108
|
+
// Telemetry must not expose parsing failures while the configured logger is disabled.
|
|
109
|
+
if (!publishLog) return
|
|
110
|
+
throw err
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (publishRecord) errorRecordChannel.publish(record)
|
|
101
114
|
|
|
115
|
+
if (publishLog) {
|
|
116
|
+
const { formatted, cause } = record
|
|
102
117
|
// calling twice ch.publish() because Error cause is only available in Node.js v16.9.0
|
|
103
118
|
// TODO: replace it with Error(message, { cause }) when cause has broad support
|
|
104
119
|
if (formatted) ch.publish(formatter?.(formatted) || formatted)
|
|
@@ -109,7 +124,10 @@ function publishFormatted (ch, formatter, ...args) {
|
|
|
109
124
|
function getErrorLog (err) {
|
|
110
125
|
if (typeof err?.delegate === 'function') {
|
|
111
126
|
const result = err.delegate(...err.args)
|
|
112
|
-
|
|
127
|
+
const resolved = Array.isArray(result) ? Log.parse(...result) : Log.parse(result)
|
|
128
|
+
resolved.cause ??= err.cause
|
|
129
|
+
resolved.sendViaTelemetry &&= err.sendViaTelemetry
|
|
130
|
+
return resolved
|
|
113
131
|
}
|
|
114
132
|
return err
|
|
115
133
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { Writable } = require('node:stream')
|
|
4
|
+
const { formatWithOptions } = require('node:util')
|
|
4
5
|
|
|
6
|
+
const { channel } = require('dc-polyfill')
|
|
7
|
+
|
|
8
|
+
const { LOG } = require('../../../../ext/formats')
|
|
9
|
+
const { SPAN_TYPE } = require('../../../../ext/tags')
|
|
10
|
+
const { storage } = require('../../../datadog-core')
|
|
5
11
|
const FinalFlushRequestTracker = require('../exporters/common/final-flush-request-tracker')
|
|
6
12
|
const request = require('../exporters/common/request')
|
|
7
13
|
const log = require('../log')
|
|
@@ -11,6 +17,13 @@ const MAX_BATCH_BYTES = 5 * 1024 * 1024
|
|
|
11
17
|
const MAX_BATCH_LOGS = 1000
|
|
12
18
|
const BATCH_FLUSH_INTERVAL = 1000
|
|
13
19
|
const FINAL_FLUSH_TIMEOUT = 60_000
|
|
20
|
+
const CONSOLE_METHOD_TO_STATUS = {
|
|
21
|
+
error: 'error',
|
|
22
|
+
warn: 'warn',
|
|
23
|
+
}
|
|
24
|
+
const TEST_OPTIMIZATION_SPAN_TYPES = new Set(['test', 'test_session_end', 'test_suite_end'])
|
|
25
|
+
const consoleConfigureCh = channel('ci:log-submission:console:configure')
|
|
26
|
+
const legacyStorage = storage('legacy')
|
|
14
27
|
|
|
15
28
|
/**
|
|
16
29
|
* @returns {Error & { code: string }}
|
|
@@ -59,12 +72,36 @@ function asTracerConfig (config) {
|
|
|
59
72
|
/**
|
|
60
73
|
* @param {import('../config/config-base')} config
|
|
61
74
|
* @param {string} source
|
|
62
|
-
* @returns {string}
|
|
63
75
|
*/
|
|
64
76
|
function getLogSubmissionPath (config, source) {
|
|
65
77
|
return `/api/v2/logs?${new URLSearchParams({ ddsource: source, service: config.service })}`
|
|
66
78
|
}
|
|
67
79
|
|
|
80
|
+
/**
|
|
81
|
+
* @param {object | undefined} store
|
|
82
|
+
*/
|
|
83
|
+
function getTestOptimizationSpan (store) {
|
|
84
|
+
const activeSpan = store?.span
|
|
85
|
+
if (activeSpan && TEST_OPTIMIZATION_SPAN_TYPES.has(activeSpan.context().getTag(SPAN_TYPE))) {
|
|
86
|
+
return activeSpan
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Child instrumentation spans replace store.span, so recover the enclosing test from their trace.
|
|
90
|
+
const traceSpans = activeSpan?.context()._trace?.started
|
|
91
|
+
if (traceSpans) {
|
|
92
|
+
let nestedTestSuiteSpan
|
|
93
|
+
for (const span of traceSpans) {
|
|
94
|
+
const spanType = span.context().getTag(SPAN_TYPE)
|
|
95
|
+
if (spanType === 'test') return span
|
|
96
|
+
if (spanType === 'test_suite_end') nestedTestSuiteSpan = span
|
|
97
|
+
}
|
|
98
|
+
if (nestedTestSuiteSpan) return nestedTestSuiteSpan
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const testSuiteSpan = store?.testSuiteSpan
|
|
102
|
+
if (testSuiteSpan?.context().getTag(SPAN_TYPE) === 'test_suite_end') return testSuiteSpan
|
|
103
|
+
}
|
|
104
|
+
|
|
68
105
|
class LogSubmissionPlugin extends Plugin {
|
|
69
106
|
static id = 'log-submission'
|
|
70
107
|
|
|
@@ -79,6 +116,22 @@ class LogSubmissionPlugin extends Plugin {
|
|
|
79
116
|
#timer
|
|
80
117
|
#beforeExitHandler = () => this.#flushLogs()
|
|
81
118
|
#createWinstonJsonFormat
|
|
119
|
+
#getConsoleLogHolder = () => {
|
|
120
|
+
if (!this._enabled ||
|
|
121
|
+
!this.#logSubmissionUrl ||
|
|
122
|
+
!this.#config?.isCiVisibility ||
|
|
123
|
+
!this.#config.DD_AGENTLESS_LOG_SUBMISSION_ENABLED) return
|
|
124
|
+
|
|
125
|
+
const store = legacyStorage.getStore()
|
|
126
|
+
if (store?.noop) return
|
|
127
|
+
const span = getTestOptimizationSpan(store)
|
|
128
|
+
if (!span) return
|
|
129
|
+
|
|
130
|
+
const logHolder = {}
|
|
131
|
+
this.tracer.inject(span, LOG, logHolder)
|
|
132
|
+
return logHolder.dd ? logHolder : undefined
|
|
133
|
+
}
|
|
134
|
+
|
|
82
135
|
#winstonStreamClass
|
|
83
136
|
// Winston formats records inside its transports, not at logger.write time, so (unlike Bunyan/Pino)
|
|
84
137
|
// the instrumentation can't publish a post-format line. A Stream transport pipes format.json()
|
|
@@ -135,6 +188,20 @@ class LogSubmissionPlugin extends Plugin {
|
|
|
135
188
|
this.addSub('ci:log-submission:log', (payload) => {
|
|
136
189
|
this.#enqueueLog(payload)
|
|
137
190
|
})
|
|
191
|
+
this.addSub('ci:log-submission:console', ({ args, logHolder, method }) => {
|
|
192
|
+
let message
|
|
193
|
+
try {
|
|
194
|
+
message = formatWithOptions({}, ...args)
|
|
195
|
+
} catch (error) {
|
|
196
|
+
log.error('Could not format console log for automatic submission', error)
|
|
197
|
+
return
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
this.#enqueueLog({
|
|
201
|
+
source: 'nodejs',
|
|
202
|
+
message: { dd: logHolder.dd, message, status: CONSOLE_METHOD_TO_STATUS[method] },
|
|
203
|
+
})
|
|
204
|
+
})
|
|
138
205
|
this.addSub('ci:log-submission:flush', ({ onDone } = {}) => {
|
|
139
206
|
if (!onDone) {
|
|
140
207
|
this.#flushLogs()
|
|
@@ -149,7 +216,6 @@ class LogSubmissionPlugin extends Plugin {
|
|
|
149
216
|
|
|
150
217
|
/**
|
|
151
218
|
* @param {boolean | (Record<string, unknown> & { enabled: boolean })} config
|
|
152
|
-
* @returns {void}
|
|
153
219
|
*/
|
|
154
220
|
configure (config) {
|
|
155
221
|
if (this._enabled) this.#flushLogs()
|
|
@@ -160,6 +226,12 @@ class LogSubmissionPlugin extends Plugin {
|
|
|
160
226
|
? getLogSubmissionUrl(this.#config)
|
|
161
227
|
: undefined
|
|
162
228
|
super.configure(config)
|
|
229
|
+
if (this._enabled &&
|
|
230
|
+
this.#logSubmissionUrl &&
|
|
231
|
+
this.#config?.isCiVisibility &&
|
|
232
|
+
this.#config.DD_AGENTLESS_LOG_SUBMISSION_ENABLED) {
|
|
233
|
+
consoleConfigureCh.publish({ getLogHolder: this.#getConsoleLogHolder })
|
|
234
|
+
}
|
|
163
235
|
|
|
164
236
|
const beforeExitHandlers = globalThis[Symbol.for('dd-trace')].beforeExitHandlers
|
|
165
237
|
if (this._enabled) {
|
|
@@ -171,7 +243,6 @@ class LogSubmissionPlugin extends Plugin {
|
|
|
171
243
|
|
|
172
244
|
/**
|
|
173
245
|
* @param {{ source: string, message: string | Record<string, unknown> }} payload
|
|
174
|
-
* @returns {void}
|
|
175
246
|
*/
|
|
176
247
|
#enqueueLog ({ source, message }) {
|
|
177
248
|
if (!this.#logSubmissionUrl) return
|
|
@@ -210,9 +281,6 @@ class LogSubmissionPlugin extends Plugin {
|
|
|
210
281
|
}
|
|
211
282
|
}
|
|
212
283
|
|
|
213
|
-
/**
|
|
214
|
-
* @returns {void}
|
|
215
|
-
*/
|
|
216
284
|
#flushLogs () {
|
|
217
285
|
clearTimeout(this.#timer)
|
|
218
286
|
this.#timer = undefined
|
|
@@ -64,9 +64,6 @@ class AgentlessConfigurationSource {
|
|
|
64
64
|
this.#applyConfiguration = applyConfiguration
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
/**
|
|
68
|
-
* @returns {void}
|
|
69
|
-
*/
|
|
70
67
|
start () {
|
|
71
68
|
if (this.#abortController) return
|
|
72
69
|
|
|
@@ -75,9 +72,6 @@ class AgentlessConfigurationSource {
|
|
|
75
72
|
this.#poll(abortController)
|
|
76
73
|
}
|
|
77
74
|
|
|
78
|
-
/**
|
|
79
|
-
* @returns {void}
|
|
80
|
-
*/
|
|
81
75
|
stop () {
|
|
82
76
|
this.#abortController?.abort()
|
|
83
77
|
this.#abortController = undefined
|
|
@@ -175,7 +169,6 @@ class AgentlessConfigurationSource {
|
|
|
175
169
|
|
|
176
170
|
/**
|
|
177
171
|
* @param {PollResponse} response
|
|
178
|
-
* @returns {void}
|
|
179
172
|
*/
|
|
180
173
|
#apply (response) {
|
|
181
174
|
const statusCode = response.statusCode
|
|
@@ -218,7 +211,6 @@ class AgentlessConfigurationSource {
|
|
|
218
211
|
* @param {number | undefined} statusCode
|
|
219
212
|
* @param {unknown} error
|
|
220
213
|
* @param {number} attempts
|
|
221
|
-
* @returns {void}
|
|
222
214
|
*/
|
|
223
215
|
#warnFailure (statusCode, error, attempts) {
|
|
224
216
|
const category = statusCode === 401 || statusCode === 403
|
|
@@ -279,7 +271,6 @@ function parseConfiguration (body) {
|
|
|
279
271
|
|
|
280
272
|
/**
|
|
281
273
|
* @param {unknown} error
|
|
282
|
-
* @returns {string}
|
|
283
274
|
*/
|
|
284
275
|
function errorMessage (error) {
|
|
285
276
|
return error instanceof Error ? error.message : String(error ?? 'request was not sent')
|
|
@@ -287,7 +278,6 @@ function errorMessage (error) {
|
|
|
287
278
|
|
|
288
279
|
/**
|
|
289
280
|
* @param {number | undefined} status
|
|
290
|
-
* @returns {boolean}
|
|
291
281
|
*/
|
|
292
282
|
function isRetryableStatus (status) {
|
|
293
283
|
return status === 408 || status === 429 || (status >= 500 && status <= 599)
|
|
@@ -297,7 +287,6 @@ function isRetryableStatus (status) {
|
|
|
297
287
|
* @param {number} pollIntervalMs
|
|
298
288
|
* @param {number} attempt
|
|
299
289
|
* @param {number} random
|
|
300
|
-
* @returns {number}
|
|
301
290
|
*/
|
|
302
291
|
function retryDelay (pollIntervalMs, attempt, random) {
|
|
303
292
|
const base = attempt === 1
|
|
@@ -310,7 +299,6 @@ function retryDelay (pollIntervalMs, attempt, random) {
|
|
|
310
299
|
* @param {number} value
|
|
311
300
|
* @param {number} minimum
|
|
312
301
|
* @param {number} maximum
|
|
313
|
-
* @returns {number}
|
|
314
302
|
*/
|
|
315
303
|
function clamp (value, minimum, maximum) {
|
|
316
304
|
return Math.max(minimum, Math.min(maximum, value))
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { createSiteUrl } = require('../exporters/common/url')
|
|
3
4
|
const log = require('../log')
|
|
4
5
|
|
|
5
6
|
const DEFAULT_AGENTLESS_PATH = '/api/v2/feature-flagging/config/rules-based/server'
|
|
@@ -60,7 +61,9 @@ function endpoint (config, configuredBaseUrl) {
|
|
|
60
61
|
const configured = configuredBaseUrl?.trim()
|
|
61
62
|
|
|
62
63
|
if (!configured) {
|
|
63
|
-
const url =
|
|
64
|
+
const url = createSiteUrl(config.site, 'ufc-server.ff-cdn')
|
|
65
|
+
if (url === undefined) throw new Error('Invalid DD_SITE for Feature Flagging agentless configuration')
|
|
66
|
+
url.pathname = DEFAULT_AGENTLESS_PATH
|
|
64
67
|
if (config.env) url.searchParams.set('dd_env', config.env)
|
|
65
68
|
return url
|
|
66
69
|
}
|
|
@@ -29,7 +29,6 @@ function encodeVarint (value) {
|
|
|
29
29
|
* 4. Base64 encode the result
|
|
30
30
|
*
|
|
31
31
|
* @param {Set<number>} serialIds - Set of serial IDs to encode
|
|
32
|
-
* @returns {string} Base64-encoded delta-varint string
|
|
33
32
|
*/
|
|
34
33
|
function encodeDeltaVarint (serialIds) {
|
|
35
34
|
if (!serialIds || serialIds.size === 0) {
|
|
@@ -57,7 +56,6 @@ function encodeDeltaVarint (serialIds) {
|
|
|
57
56
|
* Hash a targeting key using SHA256.
|
|
58
57
|
*
|
|
59
58
|
* @param {string} targetingKey - The targeting key to hash
|
|
60
|
-
* @returns {string} Lowercase hex digest of the SHA256 hash
|
|
61
59
|
*/
|
|
62
60
|
function hashTargetingKey (targetingKey) {
|
|
63
61
|
return crypto.createHash('sha256').update(targetingKey).digest('hex')
|
|
@@ -72,7 +72,6 @@ class EvalMetricsHook {
|
|
|
72
72
|
* @param {{ flagKey: string }} hookContext - Hook context containing the flag key
|
|
73
73
|
* @param {{ variant?: string, reason?: string, errorCode?: string, flagMetadata?: object }} evaluationDetails
|
|
74
74
|
* - Full evaluation details
|
|
75
|
-
* @returns {void}
|
|
76
75
|
*/
|
|
77
76
|
finally (hookContext, evaluationDetails) {
|
|
78
77
|
if (!this.#enabled) return
|
|
@@ -27,12 +27,12 @@ class FlaggingProvider extends DatadogNodeServerProvider {
|
|
|
27
27
|
constructor (tracer, config) {
|
|
28
28
|
super({
|
|
29
29
|
exposureChannel: channel(EXPOSURE_CHANNEL),
|
|
30
|
-
initializationTimeoutMs: config.
|
|
30
|
+
initializationTimeoutMs: config.featureFlags.DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS,
|
|
31
31
|
})
|
|
32
32
|
|
|
33
33
|
this.hooks.push(new EvalMetricsHook(config))
|
|
34
34
|
|
|
35
|
-
if (config.
|
|
35
|
+
if (config.featureFlags.DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED) {
|
|
36
36
|
this.#spanEnrichmentHook = new SpanEnrichmentHook(tracer)
|
|
37
37
|
// @ts-expect-error The upstream constructor always initializes its optional hooks property.
|
|
38
38
|
this.hooks.push(this.#spanEnrichmentHook)
|
|
@@ -42,7 +42,7 @@ class FlaggingProvider extends DatadogNodeServerProvider {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
log.debug('%s created with timeout: %dms', this.constructor.name,
|
|
45
|
-
config.
|
|
45
|
+
config.featureFlags.DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS)
|
|
46
46
|
|
|
47
47
|
this.#configurationSource = configurationSource.create(config, this.setConfiguration.bind(this))
|
|
48
48
|
this.#configurationSource?.start()
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
const { channel } = require('dc-polyfill')
|
|
4
4
|
const log = require('../log')
|
|
5
5
|
const ExposuresWriter = require('./writers/exposures')
|
|
6
|
-
const {
|
|
6
|
+
const { setEventDeliveryStrategy } = require('./writers/util')
|
|
7
7
|
|
|
8
8
|
const exposureSubmitCh = channel('ffe:exposure:submit')
|
|
9
9
|
const flushCh = channel('ffe:writers:flush')
|
|
10
10
|
|
|
11
11
|
let exposuresWriter = null
|
|
12
|
+
let stopEventDeliveryStrategy
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* @private
|
|
15
16
|
* @param {object | Array<object>} exposureEvents - Exposure events channel subscriber
|
|
16
|
-
* @returns {void}
|
|
17
17
|
*/
|
|
18
18
|
function _handleExposureSubmit (exposureEvents) {
|
|
19
19
|
if (!exposuresWriter) return
|
|
@@ -23,7 +23,6 @@ function _handleExposureSubmit (exposureEvents) {
|
|
|
23
23
|
/**
|
|
24
24
|
* Channel subscriber for manually flushing the exposures writer
|
|
25
25
|
* @private
|
|
26
|
-
* @returns {void}
|
|
27
26
|
*/
|
|
28
27
|
function _handleFlush () {
|
|
29
28
|
exposuresWriter?.flush()
|
|
@@ -32,7 +31,6 @@ function _handleFlush () {
|
|
|
32
31
|
/**
|
|
33
32
|
* Enables the OpenFeature module and sets up FF&E writer and channel subscribers
|
|
34
33
|
* @param {import('../config')} config - Tracer configuration object
|
|
35
|
-
* @returns {void}
|
|
36
34
|
*/
|
|
37
35
|
function enable (config) {
|
|
38
36
|
if (exposuresWriter) {
|
|
@@ -45,7 +43,7 @@ function enable (config) {
|
|
|
45
43
|
exposureSubmitCh.subscribe(_handleExposureSubmit)
|
|
46
44
|
flushCh.subscribe(_handleFlush)
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
stopEventDeliveryStrategy = setEventDeliveryStrategy(config, (enabled, route) => {
|
|
49
47
|
if (exposuresWriter !== writer) return
|
|
50
48
|
|
|
51
49
|
writer.setEnabled(enabled, route)
|
|
@@ -54,11 +52,13 @@ function enable (config) {
|
|
|
54
52
|
|
|
55
53
|
/**
|
|
56
54
|
* Disables the OpenFeature module and cleans up resources
|
|
57
|
-
* @returns {void}
|
|
58
55
|
*/
|
|
59
56
|
function disable () {
|
|
60
57
|
if (!exposuresWriter) return
|
|
61
58
|
|
|
59
|
+
stopEventDeliveryStrategy?.()
|
|
60
|
+
stopEventDeliveryStrategy = undefined
|
|
61
|
+
|
|
62
62
|
if (exposureSubmitCh.hasSubscribers) {
|
|
63
63
|
exposureSubmitCh.unsubscribe(_handleExposureSubmit)
|
|
64
64
|
}
|
|
@@ -69,7 +69,6 @@ class SpanEnrichmentHook {
|
|
|
69
69
|
* @param {boolean} [evaluationDetails.flagMetadata.__dd_do_log] - Whether to log subject
|
|
70
70
|
* @param {string} [evaluationDetails.variant] - Variant key if flag was found in UFC
|
|
71
71
|
* @param {boolean|string|number|object} [evaluationDetails.value] - Evaluated value
|
|
72
|
-
* @returns {void}
|
|
73
72
|
*/
|
|
74
73
|
finally (hookContext, evaluationDetails) {
|
|
75
74
|
try {
|
|
@@ -30,7 +30,6 @@ class SpanEnrichmentState {
|
|
|
30
30
|
* Add a serial ID from a flag evaluation.
|
|
31
31
|
*
|
|
32
32
|
* @param {number} serialId - The serial ID to add
|
|
33
|
-
* @returns {boolean} True if added, false if limit reached
|
|
34
33
|
*/
|
|
35
34
|
addSerialId (serialId) {
|
|
36
35
|
if (this._serialIds.size >= MAX_SERIAL_IDS) {
|
|
@@ -47,7 +46,6 @@ class SpanEnrichmentState {
|
|
|
47
46
|
*
|
|
48
47
|
* @param {string} targetingKey - The targeting key (will be hashed)
|
|
49
48
|
* @param {number} serialId - The serial ID associated with this evaluation
|
|
50
|
-
* @returns {boolean} True if added, false if limit reached
|
|
51
49
|
*/
|
|
52
50
|
addSubject (targetingKey, serialId) {
|
|
53
51
|
const hashedKey = hashTargetingKey(targetingKey)
|
|
@@ -77,7 +75,6 @@ class SpanEnrichmentState {
|
|
|
77
75
|
*
|
|
78
76
|
* @param {string} flagKey - The flag key
|
|
79
77
|
* @param {boolean|string|number|object} defaultValue - The default value used
|
|
80
|
-
* @returns {boolean} True if added, false if limit reached
|
|
81
78
|
*/
|
|
82
79
|
addDefault (flagKey, defaultValue) {
|
|
83
80
|
if (this._defaults.has(flagKey)) {
|
|
@@ -106,7 +103,6 @@ class SpanEnrichmentState {
|
|
|
106
103
|
* Note: _subjects is not checked because addSubject() is never called without first
|
|
107
104
|
* calling addSerialId(), so _subjects having data necessitates _serialIds having data.
|
|
108
105
|
*
|
|
109
|
-
* @returns {boolean} True if there is data to add
|
|
110
106
|
*/
|
|
111
107
|
hasData () {
|
|
112
108
|
return this._serialIds.size > 0 || this._defaults.size > 0
|