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.
Files changed (321) hide show
  1. package/index.d.ts +7 -0
  2. package/loader-hook.mjs +7 -2
  3. package/package.json +13 -18
  4. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  5. package/packages/datadog-esbuild/index.js +8 -7
  6. package/packages/datadog-esbuild/src/utils.js +14 -2
  7. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  8. package/packages/datadog-instrumentations/src/ai.js +2 -2
  9. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  10. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  11. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  12. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  13. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  14. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  15. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  18. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  19. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  20. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  21. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  22. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  23. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  24. package/packages/datadog-instrumentations/src/child_process.js +2 -2
  25. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  26. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  27. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  28. package/packages/datadog-instrumentations/src/cucumber.js +12 -13
  29. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  30. package/packages/datadog-instrumentations/src/dns.js +1 -1
  31. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  32. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  33. package/packages/datadog-instrumentations/src/express.js +1 -1
  34. package/packages/datadog-instrumentations/src/fs.js +1 -1
  35. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  36. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  37. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  38. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  39. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  40. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  41. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  42. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  43. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  44. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  45. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
  47. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  48. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  49. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  50. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  51. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  52. package/packages/datadog-instrumentations/src/hono.js +55 -10
  53. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  54. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  55. package/packages/datadog-instrumentations/src/jest.js +2 -2
  56. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  57. package/packages/datadog-instrumentations/src/knex.js +1 -1
  58. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  59. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  60. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  61. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  62. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  63. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  64. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  65. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  66. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  67. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  68. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  69. package/packages/datadog-instrumentations/src/mysql2.js +1 -1
  70. package/packages/datadog-instrumentations/src/net.js +1 -1
  71. package/packages/datadog-instrumentations/src/next.js +1 -1
  72. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  73. package/packages/datadog-instrumentations/src/openai.js +2 -2
  74. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  75. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  76. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
  77. package/packages/datadog-instrumentations/src/pg.js +3 -3
  78. package/packages/datadog-instrumentations/src/pino.js +1 -1
  79. package/packages/datadog-instrumentations/src/playwright.js +1 -1
  80. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  81. package/packages/datadog-instrumentations/src/process.js +1 -1
  82. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  83. package/packages/datadog-instrumentations/src/promise.js +1 -1
  84. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  85. package/packages/datadog-instrumentations/src/q.js +1 -1
  86. package/packages/datadog-instrumentations/src/redis.js +1 -1
  87. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  88. package/packages/datadog-instrumentations/src/selenium.js +1 -1
  89. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  90. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  91. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  92. package/packages/datadog-instrumentations/src/undici.js +4 -4
  93. package/packages/datadog-instrumentations/src/url.js +1 -1
  94. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  95. package/packages/datadog-instrumentations/src/vm.js +1 -1
  96. package/packages/datadog-instrumentations/src/when.js +1 -1
  97. package/packages/datadog-instrumentations/src/winston.js +1 -1
  98. package/packages/datadog-instrumentations/src/ws.js +3 -2
  99. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  100. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  101. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  102. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  103. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  104. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  105. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  106. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  107. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
  108. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  109. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
  110. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  111. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  112. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  113. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  114. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  115. package/packages/datadog-plugin-express/src/index.js +1 -1
  116. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  117. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  118. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  119. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  120. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  121. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  122. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  123. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  124. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  125. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  126. package/packages/datadog-plugin-http/src/client.js +2 -1
  127. package/packages/datadog-plugin-http/src/index.js +25 -5
  128. package/packages/datadog-plugin-http2/src/client.js +2 -2
  129. package/packages/datadog-plugin-http2/src/index.js +1 -1
  130. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  131. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  132. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
  134. package/packages/datadog-plugin-openai/src/index.js +1 -1
  135. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  136. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  137. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  138. package/packages/datadog-plugin-ws/src/close.js +56 -3
  139. package/packages/datadog-plugin-ws/src/index.js +4 -0
  140. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  141. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  142. package/packages/datadog-plugin-ws/src/server.js +13 -1
  143. package/packages/datadog-plugin-ws/src/util.js +107 -0
  144. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  145. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  146. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  147. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  148. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  149. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  150. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  151. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  152. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  153. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  154. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  158. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  160. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  162. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  163. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  164. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  165. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +10 -14
  168. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  171. package/packages/dd-trace/src/appsec/index.js +8 -8
  172. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  173. package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
  174. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  175. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  176. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  177. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  178. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  179. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  180. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  181. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  182. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  183. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  184. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  185. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  186. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  187. package/packages/dd-trace/src/azure_metadata.js +8 -2
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  189. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  190. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
  191. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
  192. package/packages/dd-trace/src/config/remote_config.js +34 -0
  193. package/packages/dd-trace/src/config.js +29 -28
  194. package/packages/dd-trace/src/config_defaults.js +2 -1
  195. package/packages/dd-trace/src/constants.js +5 -0
  196. package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
  197. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  198. package/packages/dd-trace/src/datastreams/index.js +1 -1
  199. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  200. package/packages/dd-trace/src/datastreams/processor.js +2 -2
  201. package/packages/dd-trace/src/datastreams/writer.js +2 -2
  202. package/packages/dd-trace/src/debugger/config.js +1 -0
  203. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  204. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  205. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
  206. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  209. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  210. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  211. package/packages/dd-trace/src/debugger/index.js +1 -1
  212. package/packages/dd-trace/src/dogstatsd.js +3 -2
  213. package/packages/dd-trace/src/encode/0.4.js +1 -1
  214. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  215. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  216. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  217. package/packages/dd-trace/src/exporter.js +2 -2
  218. package/packages/dd-trace/src/exporters/agent/index.js +1 -1
  219. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
  220. package/packages/dd-trace/src/exporters/common/request.js +2 -2
  221. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  222. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  223. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  224. package/packages/dd-trace/src/flare/index.js +1 -1
  225. package/packages/dd-trace/src/guardrails/index.js +6 -3
  226. package/packages/dd-trace/src/id.js +1 -1
  227. package/packages/dd-trace/src/index.js +1 -1
  228. package/packages/dd-trace/src/lambda/handler.js +4 -4
  229. package/packages/dd-trace/src/lambda/index.js +1 -1
  230. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  231. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  232. package/packages/dd-trace/src/llmobs/constants/tags.js +7 -1
  233. package/packages/dd-trace/src/llmobs/index.js +8 -9
  234. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  235. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  236. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  237. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  238. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  239. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  240. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  241. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  242. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  244. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +16 -1
  245. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  246. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  247. package/packages/dd-trace/src/llmobs/sdk.js +15 -22
  248. package/packages/dd-trace/src/llmobs/span_processor.js +9 -13
  249. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  250. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  251. package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
  252. package/packages/dd-trace/src/log/index.js +1 -1
  253. package/packages/dd-trace/src/noop/proxy.js +2 -2
  254. package/packages/dd-trace/src/noop/span.js +1 -1
  255. package/packages/dd-trace/src/openfeature/index.js +2 -2
  256. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  257. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  258. package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
  259. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  260. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  261. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  262. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  263. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  264. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  265. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  266. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  267. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  268. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  269. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  270. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  271. package/packages/dd-trace/src/opentelemetry/tracer.js +3 -3
  272. package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
  273. package/packages/dd-trace/src/opentracing/span.js +3 -3
  274. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  275. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  276. package/packages/dd-trace/src/plugin_manager.js +1 -1
  277. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  278. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  279. package/packages/dd-trace/src/plugins/database.js +1 -1
  280. package/packages/dd-trace/src/plugins/index.js +5 -1
  281. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  282. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  283. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  284. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  286. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/test.js +24 -24
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  289. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  290. package/packages/dd-trace/src/priority_sampler.js +15 -16
  291. package/packages/dd-trace/src/process-tags/index.js +31 -29
  292. package/packages/dd-trace/src/profiling/config.js +32 -21
  293. package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
  294. package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
  295. package/packages/dd-trace/src/profiling/index.js +1 -1
  296. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  297. package/packages/dd-trace/src/profiling/profiler.js +4 -5
  298. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  299. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  300. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  301. package/packages/dd-trace/src/proxy.js +12 -18
  302. package/packages/dd-trace/src/remote_config/index.js +541 -137
  303. package/packages/dd-trace/src/require-package-json.js +1 -1
  304. package/packages/dd-trace/src/ritm.js +50 -27
  305. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
  306. package/packages/dd-trace/src/serverless.js +16 -0
  307. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  308. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  309. package/packages/dd-trace/src/span_format.js +1 -1
  310. package/packages/dd-trace/src/span_processor.js +2 -2
  311. package/packages/dd-trace/src/span_stats.js +6 -4
  312. package/packages/dd-trace/src/standalone/index.js +1 -1
  313. package/packages/dd-trace/src/startup-log.js +3 -3
  314. package/packages/dd-trace/src/supported-configurations.json +3 -0
  315. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  316. package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
  317. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  318. package/packages/dd-trace/src/telemetry/telemetry.js +11 -6
  319. package/packages/dd-trace/src/tracer.js +3 -3
  320. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  321. 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 {*} contents
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 {*} contents
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
  const LLM = 'llm'
8
8
 
@@ -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 { extractChatTemplateFromInstructions, normalizePromptVariables, extractTextFromContentItem } = require('./utils')
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 IMAGE_FALLBACK = '[image]'
4
- const FILE_FALLBACK = '[file]'
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<Object>} instructions - From Response.instructions (array of ResponseInputMessageItem)
15
- * @param {Object<string, string>} variables - Normalized variables (output of normalizePromptVariables)
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 {Object} contentItem - Content item from Response.instructions[].content (ResponseInputContentItem)
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 === 'input_image') {
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 === 'input_file') {
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 {Object<string, string|Object>} variables - From ResponsePrompt.variables
97
- * @returns {Object<string, string>} Normalized variables with simple string values
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 { SPAN_KIND, OUTPUT_VALUE, INPUT_VALUE } = require('./constants/tags')
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
- const llmobsConfig = {
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
- this._config.llmobs.enabled = true
72
- this._config.configure({ ...this._config, llmobs: llmobsConfig })
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 {Object|Array<Object>} exposureEvents - Exposure events channel subscriber
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 {Object} [noopTracer] - Optional noop tracer instance
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 {Object} context - Evaluation context
26
- * @param {Object} logger - Logger instance
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 {Object} context - Evaluation context
40
- * @param {Object} logger - Logger instance
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 {Object} context - Evaluation context
54
- * @param {Object} logger - Logger instance
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 {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
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 {Object} Current configuration
79
+ * @returns {object} Current configuration
80
80
  */
81
81
  getConfiguration () {
82
82
  return this._config
83
83
  }
84
84
 
85
85
  /**
86
- * @param {Object} config - Configuration to set
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 {Object} ufc - Universal Flag Configuration object
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 {Object} BaseFFEWriterOptions
10
+ * @typedef {object} BaseFFEWriterOptions
11
11
  * @property {number} [interval] - Flush interval in milliseconds
12
12
  * @property {number} [timeout] - Request timeout in milliseconds
13
- * @property {Object} config - Tracer configuration object
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 {Object} [headers] - Additional HTTP headers
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|Object} events - Event object(s) to append to buffer
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 {Object} ExposureEvent
14
+ * @typedef {object} ExposureEvent
15
15
  * @property {number} timestamp - Unix timestamp in milliseconds
16
- * @property {Object} allocation - Allocation information
16
+ * @property {object} allocation - Allocation information
17
17
  * @property {string} allocation.key - Allocation key
18
- * @property {Object} flag - Flag information
18
+ * @property {object} flag - Flag information
19
19
  * @property {string} flag.key - Flag key
20
- * @property {Object} variant - Variant information
20
+ * @property {object} variant - Variant information
21
21
  * @property {string} variant.key - Variant key
22
- * @property {Object} subject - Subject (user/entity) information
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 {Object} [subject.attributes] - Additional subject attributes
25
+ * @property {object} [subject.attributes] - Additional subject attributes
26
26
  */
27
27
 
28
28
  /**
29
- * @typedef {Object} ExposureContext
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 {Object} ExposureEventPayload
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
  /**