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,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
+ const session = require('../session')
3
4
  const { collectionSizeSym, largeCollectionSkipThresholdSym, fieldCountSym, timeBudgetSym } = require('./symbols')
4
5
  const { LARGE_OBJECT_SKIP_THRESHOLD } = require('./constants')
5
- const session = require('../session')
6
6
 
7
7
  const LEAF_SUBTYPES = new Set(['date', 'regexp'])
8
8
  const ITERABLE_SUBTYPES = new Set(['map', 'set', 'weakmap', 'weakset'])
@@ -13,12 +13,12 @@ module.exports = {
13
13
  }
14
14
 
15
15
  /**
16
- * @typedef {Object} GetObjectOptions
17
- * @property {Object} maxReferenceDepth - The maximum depth of the object to traverse
16
+ * @typedef {object} GetObjectOptions
17
+ * @property {object} maxReferenceDepth - The maximum depth of the object to traverse
18
18
  * @property {number} maxCollectionSize - The maximum size of a collection to include in the snapshot
19
19
  * @property {number} maxFieldCount - The maximum number of properties on an object to include in the snapshot
20
20
  * @property {bigint} deadlineNs - The deadline in nanoseconds compared to `process.hrtime.bigint()`
21
- * @property {Object} ctx - A context object to track the state/progress of the snapshot collection.
21
+ * @property {object} ctx - A context object to track the state/progress of the snapshot collection.
22
22
  * @property {boolean} ctx.deadlineReached - Will be set to `true` if the deadline has been reached.
23
23
  * @property {Error[]} ctx.captureErrors - An array on which errors can be pushed if an issue is detected while
24
24
  * collecting the snapshot.
@@ -34,7 +34,7 @@ module.exports = {
34
34
  * and should not be set by the caller.
35
35
  * @param {boolean} [collection=false] - Whether the object is a collection. Only used internally by this module to
36
36
  * track the current object type and should not be set by the caller.
37
- * @returns {Promise<Object[]>} The properties of the object
37
+ * @returns {Promise<object[]>} The properties of the object
38
38
  */
39
39
  async function collectObjectProperties (objectId, opts, depth = 0, collection = false) {
40
40
  const { result, privateProperties } = await session.post('Runtime.getProperties', {
@@ -16,7 +16,7 @@ module.exports = {
16
16
  }
17
17
 
18
18
  /**
19
- * @typedef {Object} GetLocalStateForCallFrameOptions
19
+ * @typedef {object} GetLocalStateForCallFrameOptions
20
20
  * @property {number} [maxReferenceDepth] - The maximum depth of the object to traverse. Defaults to
21
21
  * {@link DEFAULT_MAX_REFERENCE_DEPTH}.
22
22
  * @property {number} [maxCollectionSize] - The maximum size of a collection to include in the snapshot. Defaults to
@@ -34,7 +34,7 @@ module.exports = {
34
34
  *
35
35
  * @param {import('inspector').Debugger.CallFrame} callFrame - The call frame to get the local state for
36
36
  * @param {GetLocalStateForCallFrameOptions} [opts] - The options for the snapshot
37
- * @returns {Promise<Object>} The local state for the call frame
37
+ * @returns {Promise<object>} The local state for the call frame
38
38
  */
39
39
  async function getLocalStateForCallFrame (
40
40
  callFrame,
@@ -24,7 +24,7 @@ module.exports = {
24
24
  * Find the script to inspect based on a partial or absolute path. Handles both Windows and POSIX paths.
25
25
  *
26
26
  * @param {string} path - Partial or absolute path to match against loaded scripts
27
- * @returns {Object | null} - Object containing `url`, `scriptId`, `sourceMapURL`, and `source` - or null if no match
27
+ * @returns {object | null} - Object containing `url`, `scriptId`, `sourceMapURL`, and `source` - or null if no match
28
28
  */
29
29
  findScriptFromPartialPath (path) {
30
30
  if (!path) return null // This shouldn't happen, but better safe than sorry
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
3
  const TTLSet = require('../../../../../vendor/dist/ttl-set')
4
- const config = require('./config')
5
- const JSONBuffer = require('./json-buffer')
6
4
  const request = require('../../exporters/common/request')
7
5
  const FormData = require('../../exporters/common/form-data')
6
+ const config = require('./config')
7
+ const JSONBuffer = require('./json-buffer')
8
8
  const log = require('./log')
9
9
 
10
10
  module.exports = {
@@ -4,8 +4,8 @@ const { readFile } = require('fs')
4
4
  const { types } = require('util')
5
5
  const { join } = require('path')
6
6
  const { Worker, MessageChannel, threadId: parentThreadId } = require('worker_threads')
7
- const getDebuggerConfig = require('./config')
8
7
  const log = require('../log')
8
+ const getDebuggerConfig = require('./config')
9
9
 
10
10
  let worker = null
11
11
  let configChannel = null
@@ -1,11 +1,12 @@
1
1
  'use strict'
2
2
 
3
3
  const lookup = require('dns').lookup // cache to avoid instrumentation
4
- const request = require('./exporters/common/request')
5
4
  const dgram = require('dgram')
6
5
  const isIP = require('net').isIP
7
- const log = require('./log')
8
6
  const { URL, format } = require('url')
7
+
8
+ const request = require('./exporters/common/request')
9
+ const log = require('./log')
9
10
  const Histogram = require('./histogram')
10
11
  const defaults = require('./config_defaults')
11
12
 
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
- const { truncateSpan, normalizeSpan } = require('./tags-processors')
4
3
  const { MsgpackChunk, MsgpackEncoder } = require('../msgpack')
5
4
  const log = require('../log')
6
5
  const { isTrue } = require('../util')
7
6
  const { memoize } = require('../log/utils')
8
7
  const { getEnvironmentVariable } = require('../config-helper')
8
+ const { truncateSpan, normalizeSpan } = require('./tags-processors')
9
9
 
10
10
  const SOFT_LIMIT = 8 * 1024 * 1024 // 8MB
11
11
 
@@ -1,6 +1,4 @@
1
1
  'use strict'
2
- const { truncateSpan, normalizeSpan } = require('./tags-processors')
3
- const { AgentEncoder } = require('./0.4')
4
2
  const { version: ddTraceVersion } = require('../../../../package.json')
5
3
  const { ITR_CORRELATION_ID } = require('../../src/plugins/util/test')
6
4
  const id = require('../../src/id')
@@ -9,6 +7,8 @@ const {
9
7
  TELEMETRY_ENDPOINT_PAYLOAD_SERIALIZATION_MS,
10
8
  TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT
11
9
  } = require('../ci-visibility/telemetry')
10
+ const { AgentEncoder } = require('./0.4')
11
+ const { truncateSpan, normalizeSpan } = require('./tags-processors')
12
12
 
13
13
  const ENCODING_VERSION = 1
14
14
  const ALLOWED_CONTENT_TYPES = new Set(['test_session_end', 'test_module_end', 'test_suite_end', 'test'])
@@ -1,5 +1,4 @@
1
1
  'use strict'
2
- const { AgentEncoder } = require('./0.4')
3
2
  const { MsgpackChunk } = require('../msgpack')
4
3
 
5
4
  const {
@@ -8,6 +7,7 @@ const {
8
7
  TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT
9
8
  } = require('../ci-visibility/telemetry')
10
9
  const FormData = require('../exporters/common/form-data')
10
+ const { AgentEncoder } = require('./0.4')
11
11
 
12
12
  const COVERAGE_PAYLOAD_VERSION = 2
13
13
  const COVERAGE_KEYS_LENGTH = 2
@@ -95,7 +95,7 @@ class SpanStatsEncoder extends AgentEncoder {
95
95
  }
96
96
 
97
97
  _encode (bytes, stats) {
98
- this._encodeMapPrefix(bytes, 8)
98
+ this._encodeMapPrefix(bytes, stats.ProcessTags ? 9 : 8)
99
99
 
100
100
  this._encodeString(bytes, 'Hostname')
101
101
  this._encodeString(bytes, stats.Hostname)
@@ -123,6 +123,11 @@ class SpanStatsEncoder extends AgentEncoder {
123
123
 
124
124
  this._encodeString(bytes, 'Sequence')
125
125
  this._encodeLong(bytes, stats.Sequence)
126
+
127
+ if (stats.ProcessTags) {
128
+ this._encodeString(bytes, 'ProcessTags')
129
+ this._encodeString(bytes, stats.ProcessTags)
130
+ }
126
131
  }
127
132
  }
128
133
 
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const exporters = require('../../../ext/exporters')
4
3
  const fs = require('fs')
5
- const constants = require('./constants')
4
+ const exporters = require('../../../ext/exporters')
6
5
  const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
6
+ const constants = require('./constants')
7
7
 
8
8
  module.exports = function getExporter (name) {
9
9
  switch (name) {
@@ -2,8 +2,8 @@
2
2
 
3
3
  const { URL, format } = require('url')
4
4
  const log = require('../../log')
5
- const Writer = require('./writer')
6
5
  const defaults = require('../../config_defaults')
6
+ const Writer = require('./writer')
7
7
 
8
8
  class AgentExporter {
9
9
  #timer
@@ -2,9 +2,9 @@
2
2
 
3
3
  const { URL, format } = require('url')
4
4
 
5
- const request = require('./request')
6
5
  const defaults = require('../../config_defaults')
7
6
  const { incrementCountMetric, TELEMETRY_EVENTS_ENQUEUED_FOR_SERIALIZATION } = require('../../ci-visibility/telemetry')
7
+ const request = require('./request')
8
8
 
9
9
  function fetchAgentInfo (url, callback) {
10
10
  request('', {
@@ -8,11 +8,11 @@ const http = require('http')
8
8
  const https = require('https')
9
9
  const zlib = require('zlib')
10
10
 
11
+ const { storage } = require('../../../../datadog-core')
12
+ const log = require('../../log')
11
13
  const { urlToHttpOptions } = require('./url-to-http-options-polyfill')
12
14
  const docker = require('./docker')
13
15
  const { httpAgent, httpsAgent } = require('./agents')
14
- const { storage } = require('../../../../datadog-core')
15
- const log = require('../../log')
16
16
 
17
17
  const maxActiveRequests = 8
18
18
 
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const request = require('./request')
4
3
  const log = require('../../log')
4
+ const request = require('./request')
5
5
  const { safeJSONStringify } = require('./util')
6
6
 
7
7
  class Writer {
@@ -2,8 +2,8 @@
2
2
 
3
3
  const { URL, format } = require('url')
4
4
 
5
- const { Writer } = require('./writer')
6
5
  const defaults = require('../../config_defaults')
6
+ const { Writer } = require('./writer')
7
7
 
8
8
  class SpanStatsExporter {
9
9
  constructor (config) {
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const tracerLogger = require('../../log')// path to require tracer logger
4
-
5
3
  const https = require('https')
4
+ const tracerLogger = require('../../log')// path to require tracer logger
6
5
 
7
6
  class ExternalLogger {
8
7
  // Note: these attribute names match the corresponding entry in the JSON payload.
@@ -2,10 +2,10 @@
2
2
 
3
3
  const log = require('../log')
4
4
  const startupLog = require('../startup-log')
5
- const FlareFile = require('./file')
6
5
  const { LogChannel } = require('../log/channels')
7
6
  const request = require('../exporters/common/request')
8
7
  const FormData = require('../exporters/common/form-data')
8
+ const FlareFile = require('./file')
9
9
 
10
10
  const MAX_LOG_SIZE = 12 * 1024 * 1024 // 12MB soft limit
11
11
  const TIMEOUT = 20 * 1000 * 60
@@ -2,10 +2,11 @@
2
2
 
3
3
  var path = require('path')
4
4
  var Module = require('module')
5
+
6
+ var nodeVersion = require('../../../../version')
5
7
  var isTrue = require('./util').isTrue
6
8
  var log = require('./log')
7
9
  var telemetry = require('./telemetry')
8
- var nodeVersion = require('../../../../version')
9
10
 
10
11
  var NODE_MAJOR = nodeVersion.NODE_MAJOR
11
12
 
@@ -14,7 +15,9 @@ function guard (fn) {
14
15
  var clobberBailout = false
15
16
  var forced = isTrue(process.env.DD_INJECT_FORCE)
16
17
  var engines = require('../../../../package.json').engines
17
- var minMajor = parseInt(engines.node.replace(/[^0-9]/g, ''))
18
+ var versions = engines.node.match(/^>=(\d+) <(\d+)$/)
19
+ var minMajor = versions[1]
20
+ var nextMajor = versions[2]
18
21
  var version = process.versions.node
19
22
 
20
23
  if (process.env.DD_INJECTION_ENABLED) {
@@ -40,7 +43,7 @@ function guard (fn) {
40
43
 
41
44
  // If the runtime doesn't match the engines field in package.json, then we
42
45
  // should not initialize the tracer.
43
- if (!clobberBailout && NODE_MAJOR < minMajor) {
46
+ if (!clobberBailout && (NODE_MAJOR < minMajor || NODE_MAJOR >= nextMajor)) {
44
47
  initBailout = true
45
48
  telemetry([
46
49
  { name: 'abort', tags: ['reason:incompatible_runtime'] },
@@ -238,7 +238,7 @@ function writeUInt32BE (buffer, value, offset) {
238
238
  }
239
239
 
240
240
  /**
241
- * @param {string} value
241
+ * @param {string} [value]
242
242
  * @param {number} [radix]
243
243
  * @returns {Identifier}
244
244
  */
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { isFalse } = require('./util')
4
3
  const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
4
+ const { isFalse } = require('./util')
5
5
 
6
6
  // Global `jest` is only present in Jest workers.
7
7
  const inJestWorker = typeof jest !== 'undefined'
@@ -3,8 +3,8 @@
3
3
  const log = require('../log')
4
4
  const { channel } = require('../../../datadog-instrumentations/src/helpers/instrument')
5
5
  const { ERROR_MESSAGE, ERROR_TYPE } = require('../constants')
6
- const { ImpendingTimeout } = require('./runtime/errors')
7
6
  const { getEnvironmentVariable } = require('../config-helper')
7
+ const { ImpendingTimeout } = require('./runtime/errors')
8
8
 
9
9
  const globalTracer = global._ddtrace
10
10
  const tracer = globalTracer._tracer
@@ -21,7 +21,7 @@ let __lambdaTimeout
21
21
  * Publishes to the `apm:aws:lambda:timeout` channel when
22
22
  * the AWS Lambda run time is about to end.
23
23
  *
24
- * @param {*} context AWS Lambda context object.
24
+ * @param {object} context AWS Lambda context object.
25
25
  */
26
26
  function checkTimeout (context) {
27
27
  const remainingTimeInMillis = context.getRemainingTimeInMillis()
@@ -63,7 +63,7 @@ function crashFlush () {
63
63
  /**
64
64
  * Extracts the context from the given Lambda handler arguments.
65
65
  *
66
- * @param {*} args any amount of arguments
66
+ * @param {unknown[]} args any amount of arguments
67
67
  * @returns the context, if extraction was succesful.
68
68
  */
69
69
  function extractContext (args) {
@@ -80,7 +80,7 @@ function extractContext (args) {
80
80
  /**
81
81
  * Patches your AWS Lambda handler function to add some tracing support.
82
82
  *
83
- * @param {*} lambdaHandler a Lambda handler function.
83
+ * @param {Function} lambdaHandler a Lambda handler function.
84
84
  */
85
85
  exports.datadog = function datadog (lambdaHandler) {
86
86
  return (...args) => {
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { registerLambdaHook } = require('./runtime/ritm')
4
3
  const { getEnvironmentVariable } = require('../config-helper')
4
+ const { registerLambdaHook } = require('./runtime/ritm')
5
5
 
6
6
  /**
7
7
  * It is safe to do it this way, since customers will never be expected to disable
@@ -2,17 +2,17 @@
2
2
 
3
3
  const path = require('path')
4
4
 
5
- const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLambdaFilePaths } = require('./ritm')
6
5
  const { datadog } = require('../handler')
7
6
  const { addHook } = require('../../../../datadog-instrumentations/src/helpers/instrument')
8
7
  const shimmer = require('../../../../datadog-shimmer')
9
8
  const { getEnvironmentVariable } = require('../../config-helper')
9
+ const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLambdaFilePaths } = require('./ritm')
10
10
 
11
11
  /**
12
12
  * Patches a Datadog Lambda module by calling `patchDatadogLambdaHandler`
13
13
  * with the handler name `datadog`.
14
14
  *
15
- * @param {*} datadogLambdaModule node module to be patched.
15
+ * @param {object} datadogLambdaModule node module to be patched.
16
16
  * @returns a Datadog Lambda module with the `datadog` function from
17
17
  * `datadog-lambda-js` patched.
18
18
  */
@@ -27,7 +27,7 @@ const patchDatadogLambdaModule = (datadogLambdaModule) => {
27
27
  * Datadog instrumentation by getting the Lambda handler from its
28
28
  * arguments.
29
29
  *
30
- * @param {*} datadogHandler the Datadog Lambda handler to destructure.
30
+ * @param {Function} datadogHandler the Datadog Lambda handler to destructure.
31
31
  * @returns the datadogHandler with its arguments patched.
32
32
  */
33
33
  function patchDatadogLambdaHandler (datadogHandler) {
@@ -51,7 +51,7 @@ const patchLambdaModule = (handlerPath) => (lambdaModule) => {
51
51
  /**
52
52
  * Patches a Lambda handler in order to do Datadog instrumentation.
53
53
  *
54
- * @param {*} lambdaHandler the Lambda handler to be patched.
54
+ * @param {Function} lambdaHandler the Lambda handler to be patched.
55
55
  * @returns a function which patches the given Lambda handler.
56
56
  */
57
57
  function patchLambdaHandler (lambdaHandler) {
@@ -61,7 +61,7 @@ function _extractModuleNameAndHandlerPath (handler) {
61
61
  /**
62
62
  * Returns all possible paths of the files to be patched when required.
63
63
  *
64
- * @param {*} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
64
+ * @param {string} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
65
65
  * the root of the module of the Lambda handler, and the module name.
66
66
  * @returns the lambdaStylePath with appropiate extensions for the hook.
67
67
  */
@@ -36,5 +36,11 @@ module.exports = {
36
36
  CACHE_WRITE_INPUT_TOKENS_METRIC_KEY: 'cache_write_input_tokens',
37
37
  REASONING_OUTPUT_TOKENS_METRIC_KEY: 'reasoning_output_tokens',
38
38
 
39
- DROPPED_IO_COLLECTION_ERROR: 'dropped_io'
39
+ DROPPED_IO_COLLECTION_ERROR: 'dropped_io',
40
+
41
+ PROMPT_TRACKING_INSTRUMENTATION_METHOD: 'prompt_tracking_instrumentation_method',
42
+ PROMPT_MULTIMODAL: 'prompt_multimodal',
43
+ INSTRUMENTATION_METHOD_AUTO: 'auto',
44
+ INSTRUMENTATION_METHOD_ANNOTATED: 'annotated',
45
+ INSTRUMENTATION_METHOD_UNKNOWN: 'unknown'
40
46
  }
@@ -1,5 +1,9 @@
1
1
  'use strict'
2
2
 
3
+ const util = require('node:util')
4
+
5
+ const { channel } = require('dc-polyfill')
6
+
3
7
  const log = require('../log')
4
8
  const {
5
9
  ML_APP,
@@ -7,24 +11,19 @@ const {
7
11
  PROPAGATED_PARENT_ID_KEY
8
12
  } = require('./constants/tags')
9
13
  const { storage } = require('./storage')
10
-
11
14
  const telemetry = require('./telemetry')
12
15
  const LLMObsSpanProcessor = require('./span_processor')
16
+ const LLMObsEvalMetricsWriter = require('./writers/evaluations')
17
+ const LLMObsTagger = require('./tagger')
18
+ const LLMObsSpanWriter = require('./writers/spans')
19
+ const { setAgentStrategy } = require('./writers/util')
13
20
 
14
- const { channel } = require('dc-polyfill')
15
21
  const spanFinishCh = channel('dd-trace:span:finish')
16
22
  const evalMetricAppendCh = channel('llmobs:eval-metric:append')
17
23
  const flushCh = channel('llmobs:writers:flush')
18
24
  const injectCh = channel('dd-trace:span:inject')
19
25
  const registerUserSpanProcessorCh = channel('llmobs:register-processor')
20
26
 
21
- const LLMObsEvalMetricsWriter = require('./writers/evaluations')
22
- const LLMObsTagger = require('./tagger')
23
- const LLMObsSpanWriter = require('./writers/spans')
24
- const { setAgentStrategy } = require('./writers/util')
25
-
26
- const util = require('node:util')
27
-
28
27
  /**
29
28
  * Setting writers and processor globally when LLMObs is enabled
30
29
  * We're setting these in this module instead of on the SDK.
@@ -1,10 +1,9 @@
1
1
  'use strict'
2
2
 
3
+ const { channel } = require('dc-polyfill')
3
4
  const BaseLLMObsPlugin = require('../base')
4
5
  const { getModelProvider } = require('../../../../../datadog-plugin-ai/src/utils')
5
6
 
6
- const { channel } = require('dc-polyfill')
7
-
8
7
  const toolCreationCh = channel('dd-trace:vercel-ai:tool')
9
8
  const setAttributesCh = channel('dd-trace:vercel-ai:span:setAttributes')
10
9
 
@@ -21,6 +20,38 @@ const {
21
20
  getLlmObsSpanName
22
21
  } = require('./util')
23
22
 
23
+ /**
24
+ * @typedef {Record<string, unknown> & { description?: string, id?: string }} AvailableToolArgs
25
+ */
26
+
27
+ /**
28
+ * @typedef {string | number | boolean | null | undefined | string[] | number[] | boolean[]} TagValue
29
+ * @typedef {Record<string, TagValue>} SpanTags
30
+ *
31
+ * @typedef {{ name?: string, description?: string }} ToolForModel
32
+ *
33
+ * @typedef {{ type: 'text' | 'reasoning' | 'redacted-reasoning', text?: string, data?: string }} TextPart
34
+ * @typedef {{ type: 'tool-call', toolName: string, toolCallId: string, args?: unknown, input?: unknown }} ToolCallPart
35
+ * @typedef {(
36
+ * { type: 'tool-result', toolCallId: string, output?: { type: string, value?: unknown }, result?: unknown } &
37
+ * Record<string, unknown>
38
+ * )} ToolResultPart
39
+ *
40
+ * @typedef {{
41
+ * role: 'system',
42
+ * content: string
43
+ * } | {
44
+ * role: 'user',
45
+ * content: TextPart[]
46
+ * } | {
47
+ * role: 'assistant',
48
+ * content: Array<TextPart | ToolCallPart>
49
+ * } | {
50
+ * role: 'tool',
51
+ * content: ToolResultPart[]
52
+ * }} AiSdkMessage
53
+ */
54
+
24
55
  const SPAN_NAME_TO_KIND_MAPPING = {
25
56
  // embeddings
26
57
  embed: 'workflow',
@@ -47,7 +78,7 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
47
78
  /**
48
79
  * The available tools within the runtime scope of this integration.
49
80
  * This essentially acts as a global registry for all tools made through the Vercel AI SDK.
50
- * @type {Set<Record<string, any>>}
81
+ * @type {Set<AvailableToolArgs>}
51
82
  */
52
83
  #availableTools
53
84
 
@@ -80,7 +111,7 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
80
111
  * We use the tool description as the next best identifier for a tool.
81
112
  *
82
113
  * @param {string} toolName
83
- * @param {string} toolDescription
114
+ * @param {string | undefined} toolDescription
84
115
  * @returns {string | undefined}
85
116
  */
86
117
  findToolName (toolName, toolDescription) {
@@ -223,7 +254,7 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
223
254
 
224
255
  /**
225
256
  * @param {import('../../../opentracing/span')} span
226
- * @param {Record<string, unknown>} tags
257
+ * @param {SpanTags} tags
227
258
  */
228
259
  setLLMOperationTags (span, tags) {
229
260
  const toolsForModel = tags['ai.prompt.tools']?.map(getJsonStringValue)
@@ -290,8 +321,8 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
290
321
  * it is possible to have multiple tool call results in a single message that we
291
322
  * need to split into multiple messages.
292
323
  *
293
- * @param {*} message
294
- * @param {*} toolsForModel
324
+ * @param {AiSdkMessage} message
325
+ * @param {ToolForModel[] | null | undefined} toolsForModel
295
326
  * @returns {Array<{role: string, content: string, toolId?: string,
296
327
  * toolCalls?: Array<{arguments: string, name: string, toolId: string, type: string}>}>}
297
328
  */
@@ -10,16 +10,35 @@ const MODEL_METADATA_KEYS = new Set([
10
10
  'stop_sequences'
11
11
  ])
12
12
 
13
+ /**
14
+ * @typedef {import('../../../opentracing/span')} Span
15
+ *
16
+ * @typedef {string | number | boolean | null | undefined | string[] | number[] | boolean[]} TagValue
17
+ * @typedef {Record<string, TagValue>} SpanTags
18
+ *
19
+ * @typedef {{ span?: Span }} CurrentStore
20
+ * @typedef {{ currentStore?: CurrentStore, attributes?: SpanTags }} AiPluginContext
21
+ */
22
+
23
+ /**
24
+ * @typedef {{
25
+ * type: string,
26
+ * value?: unknown
27
+ * }} ToolCallOutput
28
+ *
29
+ * @typedef {{ output?: ToolCallOutput, result?: unknown } & Record<string, unknown>} ToolCallResultContent
30
+ */
31
+
13
32
  /**
14
33
  * Get the span tags from the context (either the attributes or the span tags).
15
34
  *
16
- * @param {Record<string, any>} ctx
17
- * @returns {Record<string, any>}
35
+ * @param {AiPluginContext} ctx
36
+ * @returns {SpanTags}
18
37
  */
19
38
  function getSpanTags (ctx) {
20
39
  const span = ctx.currentStore?.span
21
40
  const carrier = ctx.attributes ?? span?.context()._tags ?? {}
22
- return carrier
41
+ return /** @type {SpanTags} */ (carrier)
23
42
  }
24
43
 
25
44
  /**
@@ -88,10 +107,11 @@ function getJsonStringValue (str, defaultValue) {
88
107
 
89
108
  /**
90
109
  * Get the model metadata from the span tags (top_p, top_k, temperature, etc.)
91
- * @param {Record<string, unknown>} tags
92
- * @returns {Record<string, string> | null}
110
+ * @param {SpanTags} tags
111
+ * @returns {Record<string, unknown> | null}
93
112
  */
94
113
  function getModelMetadata (tags) {
114
+ /** @type {Record<string, unknown>} */
95
115
  const modelMetadata = {}
96
116
  for (const metadata of MODEL_METADATA_KEYS) {
97
117
  const metadataTagKey = `gen_ai.request.${metadata}`
@@ -106,10 +126,11 @@ function getModelMetadata (tags) {
106
126
 
107
127
  /**
108
128
  * Get the generation metadata from the span tags (maxSteps, maxRetries, etc.)
109
- * @param {Record<string, string>} tags
110
- * @returns {Record<string, string> | null}
129
+ * @param {SpanTags} tags
130
+ * @returns {Record<string, unknown> | null}
111
131
  */
112
132
  function getGenerationMetadata (tags) {
133
+ /** @type {Record<string, unknown>} */
113
134
  const metadata = {}
114
135
 
115
136
  for (const tag of Object.keys(tags)) {
@@ -131,7 +152,7 @@ function getGenerationMetadata (tags) {
131
152
  * If the tool name is a parsable number, or is not found, null is returned.
132
153
  * Older versions of the ai sdk would tag the tool name as its index in the tools array.
133
154
  *
134
- * @param {Record<string, string>} tags
155
+ * @param {SpanTags} tags
135
156
  * @returns {string | null}
136
157
  */
137
158
  function getToolNameFromTags (tags) {
@@ -147,7 +168,7 @@ function getToolNameFromTags (tags) {
147
168
  /**
148
169
  * Get the content of a tool call result.
149
170
  * Version 5 of the ai sdk sets this tag as `content.output`, with a `
150
- * @param {Record<string, any>} content
171
+ * @param {{ output?: { type: string, value: unknown }, result?: unknown }} content
151
172
  * @returns {string}
152
173
  */
153
174
  function getToolCallResultContent (content) {