dd-trace 5.81.0 → 5.82.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/index.d.ts +7 -0
- package/loader-hook.mjs +7 -2
- package/package.json +13 -18
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-esbuild/index.js +8 -7
- package/packages/datadog-esbuild/src/utils.js +14 -2
- package/packages/datadog-instrumentations/src/aerospike.js +3 -2
- package/packages/datadog-instrumentations/src/ai.js +2 -2
- package/packages/datadog-instrumentations/src/amqp10.js +1 -1
- package/packages/datadog-instrumentations/src/amqplib.js +4 -4
- package/packages/datadog-instrumentations/src/anthropic.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
- package/packages/datadog-instrumentations/src/apollo.js +3 -2
- package/packages/datadog-instrumentations/src/avsc.js +1 -1
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
- package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
- package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
- package/packages/datadog-instrumentations/src/bluebird.js +1 -1
- package/packages/datadog-instrumentations/src/bullmq.js +11 -0
- package/packages/datadog-instrumentations/src/bunyan.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
- package/packages/datadog-instrumentations/src/child_process.js +2 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
- package/packages/datadog-instrumentations/src/couchbase.js +1 -1
- package/packages/datadog-instrumentations/src/crypto.js +1 -1
- package/packages/datadog-instrumentations/src/cucumber.js +12 -13
- package/packages/datadog-instrumentations/src/cypress.js +1 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
- package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
- package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
- package/packages/datadog-instrumentations/src/google-genai.js +3 -3
- package/packages/datadog-instrumentations/src/graphql.js +1 -1
- package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
- package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
- package/packages/datadog-instrumentations/src/hono.js +55 -10
- package/packages/datadog-instrumentations/src/ioredis.js +1 -1
- package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
- package/packages/datadog-instrumentations/src/jest.js +2 -2
- package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
- package/packages/datadog-instrumentations/src/knex.js +1 -1
- package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
- package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
- package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
- package/packages/datadog-instrumentations/src/lodash.js +1 -2
- package/packages/datadog-instrumentations/src/mariadb.js +1 -2
- package/packages/datadog-instrumentations/src/memcached.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb.js +1 -1
- package/packages/datadog-instrumentations/src/mongoose.js +1 -1
- package/packages/datadog-instrumentations/src/mquery.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +1 -1
- package/packages/datadog-instrumentations/src/mysql2.js +1 -1
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -1
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +2 -2
- package/packages/datadog-instrumentations/src/opensearch.js +1 -1
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +3 -3
- package/packages/datadog-instrumentations/src/pino.js +1 -1
- package/packages/datadog-instrumentations/src/playwright.js +1 -1
- package/packages/datadog-instrumentations/src/prisma.js +52 -37
- package/packages/datadog-instrumentations/src/process.js +1 -1
- package/packages/datadog-instrumentations/src/promise-js.js +1 -1
- package/packages/datadog-instrumentations/src/promise.js +1 -1
- package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
- package/packages/datadog-instrumentations/src/q.js +1 -1
- package/packages/datadog-instrumentations/src/redis.js +1 -1
- package/packages/datadog-instrumentations/src/rhea.js +1 -1
- package/packages/datadog-instrumentations/src/selenium.js +1 -1
- package/packages/datadog-instrumentations/src/sequelize.js +1 -2
- package/packages/datadog-instrumentations/src/sharedb.js +1 -1
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/undici.js +4 -4
- package/packages/datadog-instrumentations/src/url.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +1 -1
- package/packages/datadog-instrumentations/src/vm.js +1 -1
- package/packages/datadog-instrumentations/src/when.js +1 -1
- package/packages/datadog-instrumentations/src/winston.js +1 -1
- package/packages/datadog-instrumentations/src/ws.js +3 -2
- package/packages/datadog-plugin-amqp10/src/index.js +1 -1
- package/packages/datadog-plugin-amqplib/src/index.js +1 -1
- package/packages/datadog-plugin-anthropic/src/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
- package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
- package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
- package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
- package/packages/datadog-plugin-bullmq/src/index.js +18 -0
- package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
- package/packages/datadog-plugin-express/src/index.js +1 -1
- package/packages/datadog-plugin-fastify/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
- package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
- package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
- package/packages/datadog-plugin-google-genai/src/index.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-grpc/src/index.js +1 -1
- package/packages/datadog-plugin-http/src/client.js +2 -1
- package/packages/datadog-plugin-http/src/index.js +25 -5
- package/packages/datadog-plugin-http2/src/client.js +2 -2
- package/packages/datadog-plugin-http2/src/index.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
- package/packages/datadog-plugin-langchain/src/index.js +1 -1
- package/packages/datadog-plugin-moleculer/src/index.js +1 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
- package/packages/datadog-plugin-openai/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
- package/packages/datadog-plugin-openai/src/tracing.js +2 -2
- package/packages/datadog-plugin-rhea/src/index.js +1 -1
- package/packages/datadog-plugin-ws/src/close.js +56 -3
- package/packages/datadog-plugin-ws/src/index.js +4 -0
- package/packages/datadog-plugin-ws/src/producer.js +39 -4
- package/packages/datadog-plugin-ws/src/receiver.js +39 -3
- package/packages/datadog-plugin-ws/src/server.js +13 -1
- package/packages/datadog-plugin-ws/src/util.js +107 -0
- package/packages/datadog-shimmer/src/shimmer.js +2 -2
- package/packages/dd-trace/src/aiguard/sdk.js +3 -3
- package/packages/dd-trace/src/appsec/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +5 -5
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +10 -14
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
- package/packages/dd-trace/src/appsec/index.js +8 -8
- package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
- package/packages/dd-trace/src/appsec/rc-products.js +10 -0
- package/packages/dd-trace/src/appsec/recommended.json +230 -3
- package/packages/dd-trace/src/appsec/remote_config.js +177 -0
- package/packages/dd-trace/src/appsec/reporter.js +3 -3
- package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
- package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
- package/packages/dd-trace/src/appsec/waf/index.js +17 -3
- package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
- package/packages/dd-trace/src/azure_metadata.js +8 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
- package/packages/dd-trace/src/config/remote_config.js +34 -0
- package/packages/dd-trace/src/config.js +29 -28
- package/packages/dd-trace/src/config_defaults.js +2 -1
- package/packages/dd-trace/src/constants.js +5 -0
- package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
- package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
- package/packages/dd-trace/src/datastreams/index.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +7 -7
- package/packages/dd-trace/src/datastreams/processor.js +2 -2
- package/packages/dd-trace/src/datastreams/writer.js +2 -2
- package/packages/dd-trace/src/debugger/config.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
- package/packages/dd-trace/src/debugger/index.js +1 -1
- package/packages/dd-trace/src/dogstatsd.js +3 -2
- package/packages/dd-trace/src/encode/0.4.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/span-stats.js +6 -1
- package/packages/dd-trace/src/exporter.js +2 -2
- package/packages/dd-trace/src/exporters/agent/index.js +1 -1
- package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
- package/packages/dd-trace/src/exporters/common/request.js +2 -2
- package/packages/dd-trace/src/exporters/common/writer.js +1 -1
- package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +1 -2
- package/packages/dd-trace/src/flare/index.js +1 -1
- package/packages/dd-trace/src/guardrails/index.js +6 -3
- package/packages/dd-trace/src/id.js +1 -1
- package/packages/dd-trace/src/index.js +1 -1
- package/packages/dd-trace/src/lambda/handler.js +4 -4
- package/packages/dd-trace/src/lambda/index.js +1 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/constants/tags.js +7 -1
- package/packages/dd-trace/src/llmobs/index.js +8 -9
- package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +16 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
- package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +15 -22
- package/packages/dd-trace/src/llmobs/span_processor.js +9 -13
- package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
- package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
- package/packages/dd-trace/src/log/index.js +1 -1
- package/packages/dd-trace/src/noop/proxy.js +2 -2
- package/packages/dd-trace/src/noop/span.js +1 -1
- package/packages/dd-trace/src/openfeature/index.js +2 -2
- package/packages/dd-trace/src/openfeature/noop.js +14 -14
- package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
- package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
- package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
- package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
- package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
- package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
- package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
- package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
- package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +3 -3
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
- package/packages/dd-trace/src/opentracing/span.js +3 -3
- package/packages/dd-trace/src/opentracing/tracer.js +5 -5
- package/packages/dd-trace/src/payload-tagging/index.js +6 -2
- package/packages/dd-trace/src/plugin_manager.js +1 -1
- package/packages/dd-trace/src/plugins/apollo.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
- package/packages/dd-trace/src/plugins/database.js +1 -1
- package/packages/dd-trace/src/plugins/index.js +5 -1
- package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
- package/packages/dd-trace/src/plugins/outbound.js +1 -1
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +1 -1
- package/packages/dd-trace/src/plugins/util/git.js +8 -8
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +24 -24
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
- package/packages/dd-trace/src/plugins/util/web.js +8 -5
- package/packages/dd-trace/src/priority_sampler.js +15 -16
- package/packages/dd-trace/src/process-tags/index.js +31 -29
- package/packages/dd-trace/src/profiling/config.js +32 -21
- package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
- package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
- package/packages/dd-trace/src/profiling/index.js +1 -1
- package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
- package/packages/dd-trace/src/profiling/profiler.js +4 -5
- package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
- package/packages/dd-trace/src/proxy.js +12 -18
- package/packages/dd-trace/src/remote_config/index.js +541 -137
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +50 -27
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
- package/packages/dd-trace/src/serverless.js +16 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
- package/packages/dd-trace/src/span_format.js +1 -1
- package/packages/dd-trace/src/span_processor.js +2 -2
- package/packages/dd-trace/src/span_stats.js +6 -4
- package/packages/dd-trace/src/standalone/index.js +1 -1
- package/packages/dd-trace/src/startup-log.js +3 -3
- package/packages/dd-trace/src/supported-configurations.json +3 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
- package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
- package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +11 -6
- package/packages/dd-trace/src/tracer.js +3 -3
- package/packages/dd-trace/src/tracer_metadata.js +19 -15
- package/packages/dd-trace/src/remote_config/manager.js +0 -368
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const BaseLLMObsPlugin = require('./base')
|
|
4
3
|
const { storage } = require('../../../../datadog-core')
|
|
5
|
-
const llmobsStore = storage('llmobs')
|
|
6
4
|
const telemetry = require('../telemetry')
|
|
7
|
-
|
|
8
5
|
const {
|
|
9
6
|
extractRequestParams,
|
|
10
7
|
extractTextAndResponseReason,
|
|
11
8
|
parseModelId,
|
|
12
9
|
extractTextAndResponseReasonFromStream
|
|
13
10
|
} = require('../../../../datadog-plugin-aws-sdk/src/services/bedrockruntime/utils')
|
|
11
|
+
const BaseLLMObsPlugin = require('./base')
|
|
12
|
+
|
|
13
|
+
const llmobsStore = storage('llmobs')
|
|
14
14
|
|
|
15
15
|
const ENABLED_OPERATIONS = new Set(['invokeModel', 'invokeModelWithResponseStream'])
|
|
16
16
|
|
|
@@ -258,7 +258,7 @@ function formatContentObject (content) {
|
|
|
258
258
|
|
|
259
259
|
/**
|
|
260
260
|
* Format input messages from contents
|
|
261
|
-
* @param {
|
|
261
|
+
* @param {[string|{text: string}|{parts: Array<string|{text: string}>}]} [contents]
|
|
262
262
|
* @returns {Array}
|
|
263
263
|
*/
|
|
264
264
|
function formatInputMessages (contents) {
|
|
@@ -285,7 +285,7 @@ function formatInputMessages (contents) {
|
|
|
285
285
|
|
|
286
286
|
/**
|
|
287
287
|
* Format embedding input from contents
|
|
288
|
-
* @param {
|
|
288
|
+
* @param {[string|{text: string}|{parts: Array<string|{text: string}>}]} [contents]
|
|
289
289
|
* @returns {Array}
|
|
290
290
|
*/
|
|
291
291
|
function formatEmbeddingInput (contents) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const LangChainLLMObsHandler = require('.')
|
|
4
3
|
const { spanHasError } = require('../../../util')
|
|
4
|
+
const LangChainLLMObsHandler = require('.')
|
|
5
5
|
|
|
6
6
|
class LangChainLLMObsChainHandler extends LangChainLLMObsHandler {
|
|
7
7
|
setMetaTags ({ span, inputs, results }) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const LangChainLLMObsHandler = require('.')
|
|
4
3
|
const LLMObsTagger = require('../../../tagger')
|
|
5
4
|
const { spanHasError } = require('../../../util')
|
|
5
|
+
const LangChainLLMObsHandler = require('.')
|
|
6
6
|
|
|
7
7
|
class LangChainLLMObsEmbeddingHandler extends LangChainLLMObsHandler {
|
|
8
8
|
setMetaTags ({ span, inputs, results }) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const LangChainLLMObsHandler = require('.')
|
|
4
3
|
const LLMObsTagger = require('../../../tagger')
|
|
5
4
|
const { spanHasError } = require('../../../util')
|
|
5
|
+
const LangChainLLMObsHandler = require('.')
|
|
6
6
|
|
|
7
7
|
class LangChainLLMObsLlmHandler extends LangChainLLMObsHandler {
|
|
8
8
|
setMetaTags ({ span, inputs, results }) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const LangChainLLMObsHandler = require('.')
|
|
4
3
|
const { spanHasError } = require('../../../util')
|
|
4
|
+
const LangChainLLMObsHandler = require('.')
|
|
5
5
|
|
|
6
6
|
class LangChainLLMObsVectorStoreHandler extends LangChainLLMObsHandler {
|
|
7
7
|
setMetaTags ({ span, inputs, results }) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const INPUT_TYPE_IMAGE = 'input_image'
|
|
4
|
+
const INPUT_TYPE_FILE = 'input_file'
|
|
5
|
+
const INPUT_TYPE_TEXT = 'input_text'
|
|
6
|
+
|
|
7
|
+
const IMAGE_FALLBACK = '[image]'
|
|
8
|
+
const FILE_FALLBACK = '[file]'
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
INPUT_TYPE_IMAGE,
|
|
12
|
+
INPUT_TYPE_FILE,
|
|
13
|
+
INPUT_TYPE_TEXT,
|
|
14
|
+
IMAGE_FALLBACK,
|
|
15
|
+
FILE_FALLBACK
|
|
16
|
+
}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const LLMObsPlugin = require('../base')
|
|
4
|
-
const {
|
|
4
|
+
const {
|
|
5
|
+
PROMPT_TRACKING_INSTRUMENTATION_METHOD,
|
|
6
|
+
PROMPT_MULTIMODAL,
|
|
7
|
+
INSTRUMENTATION_METHOD_AUTO
|
|
8
|
+
} = require('../../constants/tags')
|
|
9
|
+
const {
|
|
10
|
+
extractChatTemplateFromInstructions,
|
|
11
|
+
normalizePromptVariables,
|
|
12
|
+
extractTextFromContentItem,
|
|
13
|
+
hasMultimodalInputs
|
|
14
|
+
} = require('./utils')
|
|
5
15
|
|
|
6
16
|
const allowedParamKeys = new Set([
|
|
7
17
|
'max_output_tokens',
|
|
@@ -422,6 +432,11 @@ class OpenAiLLMObsPlugin extends LLMObsPlugin {
|
|
|
422
432
|
variables: normalizedVariables,
|
|
423
433
|
chat_template: chatTemplate
|
|
424
434
|
})
|
|
435
|
+
const tags = { [PROMPT_TRACKING_INSTRUMENTATION_METHOD]: INSTRUMENTATION_METHOD_AUTO }
|
|
436
|
+
if (hasMultimodalInputs(inputs.prompt.variables)) {
|
|
437
|
+
tags[PROMPT_MULTIMODAL] = 'true'
|
|
438
|
+
}
|
|
439
|
+
this._tagger.tagSpanTags(span, tags)
|
|
425
440
|
}
|
|
426
441
|
}
|
|
427
442
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
3
|
+
const {
|
|
4
|
+
INPUT_TYPE_IMAGE,
|
|
5
|
+
INPUT_TYPE_FILE,
|
|
6
|
+
IMAGE_FALLBACK,
|
|
7
|
+
FILE_FALLBACK
|
|
8
|
+
} = require('./constants')
|
|
5
9
|
|
|
6
10
|
const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g
|
|
7
11
|
|
|
@@ -11,8 +15,8 @@ const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g
|
|
|
11
15
|
* Performs reverse templating: reconstructs the template by replacing actual values with {{variable_name}}.
|
|
12
16
|
* For images/files: uses {{variable_name}} when values are available, falls back to [image]/[file] when stripped.
|
|
13
17
|
*
|
|
14
|
-
* @param {Array<
|
|
15
|
-
* @param {
|
|
18
|
+
* @param {Array<object>} instructions - From Response.instructions (array of ResponseInputMessageItem)
|
|
19
|
+
* @param {Record<string, string>} variables - Normalized variables (output of normalizePromptVariables)
|
|
16
20
|
* @returns {Array<{role: string, content: string}>} Chat template with placeholders
|
|
17
21
|
*/
|
|
18
22
|
function extractChatTemplateFromInstructions (instructions, variables) {
|
|
@@ -66,7 +70,7 @@ function extractChatTemplateFromInstructions (instructions, variables) {
|
|
|
66
70
|
* Used for both input messages and chat template extraction. Falls back to [image]/[file] markers
|
|
67
71
|
* when the actual values are stripped (e.g., by OpenAI's default URL stripping behavior).
|
|
68
72
|
*
|
|
69
|
-
* @param {
|
|
73
|
+
* @param {object} contentItem - Content item from Response.instructions[].content (ResponseInputContentItem)
|
|
70
74
|
* @returns {string|null} Text content, URL/file reference, or [image]/[file] fallback marker
|
|
71
75
|
*/
|
|
72
76
|
function extractTextFromContentItem (contentItem) {
|
|
@@ -77,11 +81,11 @@ function extractTextFromContentItem (contentItem) {
|
|
|
77
81
|
}
|
|
78
82
|
|
|
79
83
|
// For image/file items, extract the actual reference value
|
|
80
|
-
if (contentItem.type ===
|
|
84
|
+
if (contentItem.type === INPUT_TYPE_IMAGE) {
|
|
81
85
|
return contentItem.image_url || contentItem.file_id || IMAGE_FALLBACK
|
|
82
86
|
}
|
|
83
87
|
|
|
84
|
-
if (contentItem.type ===
|
|
88
|
+
if (contentItem.type === INPUT_TYPE_FILE) {
|
|
85
89
|
return contentItem.file_id || contentItem.file_url || contentItem.filename || FILE_FALLBACK
|
|
86
90
|
}
|
|
87
91
|
|
|
@@ -93,8 +97,8 @@ function extractTextFromContentItem (contentItem) {
|
|
|
93
97
|
*
|
|
94
98
|
* Converts ResponseInputText, ResponseInputImage, and ResponseInputFile objects to simple string values.
|
|
95
99
|
*
|
|
96
|
-
* @param {
|
|
97
|
-
* @returns {
|
|
100
|
+
* @param {Record<string, string | object>} variables - From ResponsePrompt.variables
|
|
101
|
+
* @returns {Record<string, string>} Normalized variables with simple string values
|
|
98
102
|
*/
|
|
99
103
|
function normalizePromptVariables (variables) {
|
|
100
104
|
if (!variables) return {}
|
|
@@ -107,8 +111,16 @@ function normalizePromptVariables (variables) {
|
|
|
107
111
|
)
|
|
108
112
|
}
|
|
109
113
|
|
|
114
|
+
function hasMultimodalInputs (variables) {
|
|
115
|
+
if (!variables) return false
|
|
116
|
+
return Object.values(variables).some(value =>
|
|
117
|
+
value?.type === INPUT_TYPE_IMAGE || value?.type === INPUT_TYPE_FILE
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
110
121
|
module.exports = {
|
|
111
122
|
extractChatTemplateFromInstructions,
|
|
112
123
|
normalizePromptVariables,
|
|
113
|
-
extractTextFromContentItem
|
|
124
|
+
extractTextFromContentItem,
|
|
125
|
+
hasMultimodalInputs
|
|
114
126
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const LLMObsPlugin = require('./base')
|
|
4
3
|
const {
|
|
5
4
|
extractModel,
|
|
6
5
|
extractSystemInstructions
|
|
7
6
|
} = require('../../../../datadog-plugin-google-cloud-vertexai/src/utils')
|
|
7
|
+
const LLMObsPlugin = require('./base')
|
|
8
8
|
|
|
9
9
|
class VertexAILLMObsPlugin extends LLMObsPlugin {
|
|
10
10
|
static integration = 'vertexai' // used for llmobs telemetry
|
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const {
|
|
3
|
+
const { channel } = require('dc-polyfill')
|
|
4
4
|
|
|
5
|
+
const { isTrue, isError } = require('../util')
|
|
6
|
+
const tracerVersion = require('../../../../package.json').version
|
|
7
|
+
const logger = require('../log')
|
|
8
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
9
|
+
const Span = require('../opentracing/span')
|
|
10
|
+
const { SPAN_KIND, OUTPUT_VALUE, INPUT_VALUE } = require('./constants/tags')
|
|
5
11
|
const {
|
|
6
12
|
getFunctionArguments,
|
|
7
13
|
validateKind
|
|
8
14
|
} = require('./util')
|
|
9
|
-
const { isTrue, isError } = require('../util')
|
|
10
|
-
|
|
11
15
|
const { storage } = require('./storage')
|
|
12
|
-
|
|
13
|
-
const Span = require('../opentracing/span')
|
|
14
|
-
|
|
15
|
-
const tracerVersion = require('../../../../package.json').version
|
|
16
|
-
const logger = require('../log')
|
|
17
|
-
const { getEnvironmentVariable } = require('../config-helper')
|
|
18
16
|
const telemetry = require('./telemetry')
|
|
19
|
-
|
|
20
17
|
const LLMObsTagger = require('./tagger')
|
|
21
18
|
|
|
22
19
|
// communicating with writer
|
|
23
|
-
const { channel } = require('dc-polyfill')
|
|
24
20
|
const evalMetricAppendCh = channel('llmobs:eval-metric:append')
|
|
25
21
|
const flushCh = channel('llmobs:writers:flush')
|
|
26
22
|
const registerUserSpanProcessorCh = channel('llmobs:register-processor')
|
|
@@ -53,23 +49,20 @@ class LLMObs extends NoopLLMObs {
|
|
|
53
49
|
|
|
54
50
|
logger.debug('Enabling LLMObs')
|
|
55
51
|
|
|
56
|
-
const { mlApp, agentlessEnabled } = options
|
|
57
|
-
|
|
58
52
|
const DD_LLMOBS_ENABLED = getEnvironmentVariable('DD_LLMOBS_ENABLED')
|
|
59
53
|
|
|
60
|
-
|
|
61
|
-
mlApp,
|
|
62
|
-
agentlessEnabled
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const enabled = DD_LLMOBS_ENABLED == null || isTrue(DD_LLMOBS_ENABLED)
|
|
66
|
-
if (!enabled) {
|
|
54
|
+
if (DD_LLMOBS_ENABLED != null && !isTrue(DD_LLMOBS_ENABLED)) {
|
|
67
55
|
logger.debug('LLMObs.enable() called when DD_LLMOBS_ENABLED is false. No action taken.')
|
|
68
56
|
return
|
|
69
57
|
}
|
|
70
58
|
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
const llmobs = {
|
|
60
|
+
mlApp: options.mlApp,
|
|
61
|
+
agentlessEnabled: options.agentlessEnabled
|
|
62
|
+
}
|
|
63
|
+
// TODO: This will update config telemetry with the origin 'code', which is not ideal when `enable()` is called
|
|
64
|
+
// based on `APM_TRACING` RC product updates.
|
|
65
|
+
this._config.configure({ llmobs })
|
|
73
66
|
|
|
74
67
|
// configure writers and channel subscribers
|
|
75
68
|
this._llmobsModule.enable(this._config)
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const util = require('node:util')
|
|
4
|
+
|
|
5
|
+
const tracerVersion = require('../../../../package.json').version
|
|
6
|
+
const logger = require('../log')
|
|
7
|
+
const {
|
|
8
|
+
ERROR_MESSAGE,
|
|
9
|
+
ERROR_TYPE,
|
|
10
|
+
ERROR_STACK
|
|
11
|
+
} = require('../constants')
|
|
3
12
|
const {
|
|
4
13
|
SPAN_KIND,
|
|
5
14
|
MODEL_NAME,
|
|
@@ -20,22 +29,9 @@ const {
|
|
|
20
29
|
NAME
|
|
21
30
|
} = require('./constants/tags')
|
|
22
31
|
const { UNSERIALIZABLE_VALUE_TEXT } = require('./constants/text')
|
|
23
|
-
|
|
24
|
-
const {
|
|
25
|
-
ERROR_MESSAGE,
|
|
26
|
-
ERROR_TYPE,
|
|
27
|
-
ERROR_STACK
|
|
28
|
-
} = require('../constants')
|
|
29
|
-
|
|
30
32
|
const telemetry = require('./telemetry')
|
|
31
|
-
|
|
32
33
|
const LLMObsTagger = require('./tagger')
|
|
33
34
|
|
|
34
|
-
const tracerVersion = require('../../../../package.json').version
|
|
35
|
-
const logger = require('../log')
|
|
36
|
-
|
|
37
|
-
const util = require('node:util')
|
|
38
|
-
|
|
39
35
|
class LLMObservabilitySpan {
|
|
40
36
|
constructor () {
|
|
41
37
|
this.input = []
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const ERROR_TYPE = require('../constants')
|
|
4
|
+
|
|
5
|
+
const telemetryMetrics = require('../telemetry/metrics')
|
|
3
6
|
const {
|
|
4
7
|
SPAN_KIND,
|
|
5
8
|
MODEL_PROVIDER,
|
|
@@ -10,10 +13,6 @@ const {
|
|
|
10
13
|
DECORATOR
|
|
11
14
|
} = require('./constants/tags')
|
|
12
15
|
|
|
13
|
-
const ERROR_TYPE = require('../constants')
|
|
14
|
-
|
|
15
|
-
const telemetryMetrics = require('../telemetry/metrics')
|
|
16
|
-
|
|
17
16
|
const LLMObsTagger = require('./tagger')
|
|
18
17
|
|
|
19
18
|
const llmobsMetrics = telemetryMetrics.manager.namespace('mlobs')
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const request = require('../../exporters/common/request')
|
|
4
|
-
const { getEnvironmentVariable } = require('../../config-helper')
|
|
5
3
|
const { URL, format } = require('node:url')
|
|
6
4
|
const path = require('node:path')
|
|
5
|
+
const request = require('../../exporters/common/request')
|
|
6
|
+
const { getEnvironmentVariable } = require('../../config-helper')
|
|
7
7
|
|
|
8
8
|
const logger = require('../../log')
|
|
9
9
|
|
|
@@ -9,11 +9,10 @@ const {
|
|
|
9
9
|
} = require('../constants/writers')
|
|
10
10
|
const { DROPPED_VALUE_TEXT } = require('../constants/text')
|
|
11
11
|
const { DROPPED_IO_COLLECTION_ERROR } = require('../constants/tags')
|
|
12
|
-
const BaseWriter = require('./base')
|
|
13
12
|
const telemetry = require('../telemetry')
|
|
14
13
|
const logger = require('../../log')
|
|
15
|
-
|
|
16
14
|
const tracerVersion = require('../../../../../package.json').version
|
|
15
|
+
const BaseWriter = require('./base')
|
|
17
16
|
|
|
18
17
|
class LLMObsSpanWriter extends BaseWriter {
|
|
19
18
|
constructor (config) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
const { inspect } = require('util')
|
|
3
3
|
const { isTrue } = require('../util')
|
|
4
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
4
5
|
const { traceChannel, debugChannel, infoChannel, warnChannel, errorChannel } = require('./channels')
|
|
5
6
|
const logWriter = require('./writer')
|
|
6
7
|
const { Log, LogConfig, NoTransmitError } = require('./log')
|
|
7
8
|
const { memoize } = require('./utils')
|
|
8
|
-
const { getEnvironmentVariable } = require('../config-helper')
|
|
9
9
|
|
|
10
10
|
const config = {
|
|
11
11
|
enabled: false,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const NoopTracer = require('./tracer')
|
|
4
3
|
const NoopAppsecSdk = require('../appsec/sdk/noop')
|
|
5
|
-
const NoopDogStatsDClient = require('./dogstatsd')
|
|
6
4
|
const NoopLLMObsSDK = require('../llmobs/noop')
|
|
7
5
|
const NoopFlaggingProvider = require('../openfeature/noop')
|
|
8
6
|
const NoopAIGuardSDK = require('../aiguard/noop')
|
|
7
|
+
const NoopDogStatsDClient = require('./dogstatsd')
|
|
8
|
+
const NoopTracer = require('./tracer')
|
|
9
9
|
|
|
10
10
|
const noop = new NoopTracer()
|
|
11
11
|
const noopAppsec = new NoopAppsecSdk()
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const NoopSpanContext = require('./span_context')
|
|
4
3
|
const id = require('../id')
|
|
5
4
|
const { storage } = require('../../../datadog-core') // TODO: noop storage?
|
|
5
|
+
const NoopSpanContext = require('./span_context')
|
|
6
6
|
|
|
7
7
|
class NoopSpan {
|
|
8
8
|
constructor (tracer, parent) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { channel } = require('dc-polyfill')
|
|
3
4
|
const log = require('../log')
|
|
4
5
|
const ExposuresWriter = require('./writers/exposures')
|
|
5
6
|
const { setAgentStrategy } = require('./writers/util')
|
|
6
|
-
const { channel } = require('dc-polyfill')
|
|
7
7
|
|
|
8
8
|
const exposureSubmitCh = channel('ffe:exposure:submit')
|
|
9
9
|
const flushCh = channel('ffe:writers:flush')
|
|
@@ -12,7 +12,7 @@ let exposuresWriter = null
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @private
|
|
15
|
-
* @param {
|
|
15
|
+
* @param {object | Array<object>} exposureEvents - Exposure events channel subscriber
|
|
16
16
|
* @returns {void}
|
|
17
17
|
*/
|
|
18
18
|
function _handleExposureSubmit (exposureEvents) {
|
|
@@ -9,7 +9,7 @@ const { NOOP_REASON } = require('./constants/constants')
|
|
|
9
9
|
*/
|
|
10
10
|
class NoopFlaggingProvider {
|
|
11
11
|
/**
|
|
12
|
-
* @param {
|
|
12
|
+
* @param {object} [noopTracer] - Optional noop tracer instance
|
|
13
13
|
*/
|
|
14
14
|
constructor (noopTracer) {
|
|
15
15
|
this._tracer = noopTracer
|
|
@@ -22,8 +22,8 @@ class NoopFlaggingProvider {
|
|
|
22
22
|
/**
|
|
23
23
|
* @param {string} flagKey - Flag key
|
|
24
24
|
* @param {boolean} defaultValue - Default value to return
|
|
25
|
-
* @param {
|
|
26
|
-
* @param {
|
|
25
|
+
* @param {object} context - Evaluation context
|
|
26
|
+
* @param {object} logger - Logger instance
|
|
27
27
|
* @returns {Promise<{value: boolean, reason: string}>} Resolution details
|
|
28
28
|
*/
|
|
29
29
|
resolveBooleanEvaluation (flagKey, defaultValue, context, logger) {
|
|
@@ -36,8 +36,8 @@ class NoopFlaggingProvider {
|
|
|
36
36
|
/**
|
|
37
37
|
* @param {string} flagKey - Flag key
|
|
38
38
|
* @param {string} defaultValue - Default value to return
|
|
39
|
-
* @param {
|
|
40
|
-
* @param {
|
|
39
|
+
* @param {object} context - Evaluation context
|
|
40
|
+
* @param {object} logger - Logger instance
|
|
41
41
|
* @returns {Promise<{value: string, reason: string}>} Resolution details
|
|
42
42
|
*/
|
|
43
43
|
resolveStringEvaluation (flagKey, defaultValue, context, logger) {
|
|
@@ -50,8 +50,8 @@ class NoopFlaggingProvider {
|
|
|
50
50
|
/**
|
|
51
51
|
* @param {string} flagKey - Flag key
|
|
52
52
|
* @param {number} defaultValue - Default value to return
|
|
53
|
-
* @param {
|
|
54
|
-
* @param {
|
|
53
|
+
* @param {object} context - Evaluation context
|
|
54
|
+
* @param {object} logger - Logger instance
|
|
55
55
|
* @returns {Promise<{value: number, reason: string}>} Resolution details
|
|
56
56
|
*/
|
|
57
57
|
resolveNumberEvaluation (flagKey, defaultValue, context, logger) {
|
|
@@ -63,10 +63,10 @@ class NoopFlaggingProvider {
|
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
65
|
* @param {string} flagKey - Flag key
|
|
66
|
-
* @param {
|
|
67
|
-
* @param {
|
|
68
|
-
* @param {
|
|
69
|
-
* @returns {Promise<{value:
|
|
66
|
+
* @param {object} defaultValue - Default value to return
|
|
67
|
+
* @param {object} context - Evaluation context
|
|
68
|
+
* @param {object} logger - Logger instance
|
|
69
|
+
* @returns {Promise<{value: object, reason: string}>} Resolution details
|
|
70
70
|
*/
|
|
71
71
|
resolveObjectEvaluation (flagKey, defaultValue, context, logger) {
|
|
72
72
|
return Promise.resolve({
|
|
@@ -76,14 +76,14 @@ class NoopFlaggingProvider {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
* @returns {
|
|
79
|
+
* @returns {object} Current configuration
|
|
80
80
|
*/
|
|
81
81
|
getConfiguration () {
|
|
82
82
|
return this._config
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
|
-
* @param {
|
|
86
|
+
* @param {object} config - Configuration to set
|
|
87
87
|
*/
|
|
88
88
|
setConfiguration (config) {
|
|
89
89
|
this._config = config
|
|
@@ -91,7 +91,7 @@ class NoopFlaggingProvider {
|
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
93
|
* @internal
|
|
94
|
-
* @param {
|
|
94
|
+
* @param {object} ufc - Universal Flag Configuration object
|
|
95
95
|
*/
|
|
96
96
|
_setConfiguration (ufc) {
|
|
97
97
|
this.setConfiguration(ufc)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const RemoteConfigCapabilities = require('../remote_config/capabilities')
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Configures remote config handlers for openfeature feature flagging
|
|
7
|
+
*
|
|
8
|
+
* @param {object} rc - RemoteConfig instance
|
|
9
|
+
* @param {object} config - Tracer config
|
|
10
|
+
* @param {Function} getOpenfeatureProxy - Function that returns the OpenFeature proxy from tracer
|
|
11
|
+
*/
|
|
12
|
+
function enable (rc, config, getOpenfeatureProxy) {
|
|
13
|
+
// Always enable capability for feature flag configuration
|
|
14
|
+
// This indicates the library supports this capability via remote config
|
|
15
|
+
rc.updateCapabilities(RemoteConfigCapabilities.FFE_FLAG_CONFIGURATION_RULES, true)
|
|
16
|
+
|
|
17
|
+
// Only register product handler if the experimental feature is enabled
|
|
18
|
+
if (!config.experimental.flaggingProvider.enabled) return
|
|
19
|
+
|
|
20
|
+
// Set product handler for FFE_FLAGS
|
|
21
|
+
rc.setProductHandler('FFE_FLAGS', (action, conf) => {
|
|
22
|
+
// Feed UFC config directly to OpenFeature provider
|
|
23
|
+
if (action === 'apply' || action === 'modify') {
|
|
24
|
+
getOpenfeatureProxy()._setConfiguration(conf)
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = {
|
|
30
|
+
enable
|
|
31
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { URL, format } = require('node:url')
|
|
3
4
|
const request = require('../../exporters/common/request')
|
|
4
5
|
const { safeJSONStringify } = require('../../exporters/common/util')
|
|
5
|
-
const { URL, format } = require('node:url')
|
|
6
6
|
|
|
7
7
|
const log = require('../../log')
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* @typedef {
|
|
10
|
+
* @typedef {object} BaseFFEWriterOptions
|
|
11
11
|
* @property {number} [interval] - Flush interval in milliseconds
|
|
12
12
|
* @property {number} [timeout] - Request timeout in milliseconds
|
|
13
|
-
* @property {
|
|
13
|
+
* @property {object} config - Tracer configuration object
|
|
14
14
|
* @property {string} endpoint - API endpoint path
|
|
15
15
|
* @property {URL} [agentUrl] - Base URL for the agent
|
|
16
16
|
* @property {number} [payloadSizeLimit] - Maximum payload size in bytes
|
|
17
17
|
* @property {number} [eventSizeLimit] - Maximum individual event size in bytes
|
|
18
|
-
* @property {
|
|
18
|
+
* @property {object} [headers] - Additional HTTP headers
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -67,7 +67,7 @@ class BaseFFEWriter {
|
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Appends an event array to the buffer
|
|
70
|
-
* @param {Array|
|
|
70
|
+
* @param {Array | object} events - Event object(s) to append to buffer
|
|
71
71
|
*/
|
|
72
72
|
append (events) {
|
|
73
73
|
const eventArray = Array.isArray(events) ? events : [events]
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const BaseFFEWriter = require('./base')
|
|
4
3
|
const {
|
|
5
4
|
EXPOSURES_ENDPOINT,
|
|
6
5
|
EVP_PROXY_AGENT_BASE_PATH,
|
|
@@ -9,31 +8,32 @@ const {
|
|
|
9
8
|
EVP_PAYLOAD_SIZE_LIMIT,
|
|
10
9
|
EVP_EVENT_SIZE_LIMIT
|
|
11
10
|
} = require('../constants/constants')
|
|
11
|
+
const BaseFFEWriter = require('./base')
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* @typedef {
|
|
14
|
+
* @typedef {object} ExposureEvent
|
|
15
15
|
* @property {number} timestamp - Unix timestamp in milliseconds
|
|
16
|
-
* @property {
|
|
16
|
+
* @property {object} allocation - Allocation information
|
|
17
17
|
* @property {string} allocation.key - Allocation key
|
|
18
|
-
* @property {
|
|
18
|
+
* @property {object} flag - Flag information
|
|
19
19
|
* @property {string} flag.key - Flag key
|
|
20
|
-
* @property {
|
|
20
|
+
* @property {object} variant - Variant information
|
|
21
21
|
* @property {string} variant.key - Variant key
|
|
22
|
-
* @property {
|
|
22
|
+
* @property {object} subject - Subject (user/entity) information
|
|
23
23
|
* @property {string} subject.id - Subject identifier
|
|
24
24
|
* @property {string} [subject.type] - Subject type
|
|
25
|
-
* @property {
|
|
25
|
+
* @property {object} [subject.attributes] - Additional subject attributes
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
* @typedef {
|
|
29
|
+
* @typedef {object} ExposureContext
|
|
30
30
|
* @property {string} service - Service name
|
|
31
31
|
* @property {string} [version] - Service version
|
|
32
32
|
* @property {string} [env] - Service environment
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
* @typedef {
|
|
36
|
+
* @typedef {object} ExposureEventPayload
|
|
37
37
|
* @property {ExposureContext} context - Service context metadata
|
|
38
38
|
* @property {ExposureEvent[]} exposures - Formatted exposure events
|
|
39
39
|
*/
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { storage } = require('../../../datadog-core')
|
|
4
3
|
const { trace, ROOT_CONTEXT, propagation } = require('@opentelemetry/api')
|
|
4
|
+
const { storage } = require('../../../datadog-core')
|
|
5
5
|
const DataDogSpanContext = require('../opentracing/span_context')
|
|
6
6
|
|
|
7
|
-
const SpanContext = require('./span_context')
|
|
8
7
|
const tracer = require('../../')
|
|
8
|
+
const SpanContext = require('./span_context')
|
|
9
9
|
|
|
10
10
|
class ContextManager {
|
|
11
11
|
constructor () {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { sanitizeAttributes } = require('../../../../../vendor/dist/@opentelemetry/core')
|
|
4
3
|
const { context } = require('@opentelemetry/api')
|
|
4
|
+
const { sanitizeAttributes } = require('../../../../../vendor/dist/@opentelemetry/core')
|
|
5
5
|
const { VERSION: packageVersion } = require('../../../../../version')
|
|
6
6
|
|
|
7
7
|
/**
|