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,368 +0,0 @@
1
- 'use strict'
2
-
3
- const { URL, format } = require('url')
4
- const uuid = require('../../../../vendor/dist/crypto-randomuuid')
5
- const { EventEmitter } = require('events')
6
- const tracerVersion = require('../../../../package.json').version
7
- const request = require('../exporters/common/request')
8
- const log = require('../log')
9
- const { getExtraServices } = require('../service-naming/extra-services')
10
- const { UNACKNOWLEDGED, ACKNOWLEDGED, ERROR } = require('./apply_states')
11
- const Scheduler = require('./scheduler')
12
- const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('../plugins/util/tags')
13
- const tagger = require('../tagger')
14
- const defaults = require('../config_defaults')
15
-
16
- const clientId = uuid()
17
-
18
- const DEFAULT_CAPABILITY = Buffer.alloc(1).toString('base64') // 0x00
19
-
20
- const kPreUpdate = Symbol('kPreUpdate')
21
- const kSupportsAckCallback = Symbol('kSupportsAckCallback')
22
-
23
- // There MUST NOT exist separate instances of RC clients in a tracer making separate ClientGetConfigsRequest
24
- // with their own separated Client.ClientState.
25
- class RemoteConfigManager extends EventEmitter {
26
- static kPreUpdate = kPreUpdate
27
-
28
- constructor (config) {
29
- super()
30
-
31
- const pollInterval = Math.floor(config.remoteConfig.pollInterval * 1000)
32
-
33
- this.url = config.url || new URL(format({
34
- protocol: 'http:',
35
- hostname: config.hostname || defaults.hostname,
36
- port: config.port
37
- }))
38
-
39
- tagger.add(config.tags, {
40
- '_dd.rc.client_id': clientId
41
- })
42
-
43
- const tags = config.repositoryUrl
44
- ? {
45
- ...config.tags,
46
- [GIT_REPOSITORY_URL]: config.repositoryUrl,
47
- [GIT_COMMIT_SHA]: config.commitSHA
48
- }
49
- : config.tags
50
-
51
- this._handlers = new Map()
52
- const appliedConfigs = this.appliedConfigs = new Map()
53
-
54
- this.scheduler = new Scheduler((cb) => this.poll(cb), pollInterval)
55
-
56
- this.state = {
57
- client: {
58
- state: { // updated by `parseConfig()` and `poll()`
59
- root_version: 1,
60
- targets_version: 0,
61
- // Use getter so `apply_*` can be updated async and still affect the content of `config_states`
62
- get config_states () {
63
- const configs = []
64
- for (const conf of appliedConfigs.values()) {
65
- configs.push({
66
- id: conf.id,
67
- version: conf.version,
68
- product: conf.product,
69
- apply_state: conf.apply_state,
70
- apply_error: conf.apply_error
71
- })
72
- }
73
- return configs
74
- },
75
- has_error: false,
76
- error: '',
77
- backend_client_state: ''
78
- },
79
- id: clientId,
80
- products: [], // updated by `updateProducts()`
81
- is_tracer: true,
82
- client_tracer: {
83
- runtime_id: config.tags['runtime-id'],
84
- language: 'node',
85
- tracer_version: tracerVersion,
86
- service: config.service,
87
- env: config.env,
88
- app_version: config.version,
89
- extra_services: [],
90
- tags: Object.entries(tags).map((pair) => pair.join(':'))
91
- },
92
- capabilities: DEFAULT_CAPABILITY // updated by `updateCapabilities()`
93
- },
94
- cached_target_files: [] // updated by `parseConfig()`
95
- }
96
- }
97
-
98
- updateCapabilities (mask, value) {
99
- const hex = Buffer.from(this.state.client.capabilities, 'base64').toString('hex')
100
-
101
- let num = BigInt(`0x${hex}`)
102
-
103
- if (value) {
104
- num |= mask
105
- } else {
106
- num &= ~mask
107
- }
108
-
109
- let str = num.toString(16)
110
-
111
- if (str.length % 2) str = `0${str}`
112
-
113
- this.state.client.capabilities = Buffer.from(str, 'hex').toString('base64')
114
- }
115
-
116
- setProductHandler (product, handler) {
117
- this._handlers.set(product, handler)
118
- this.updateProducts()
119
- if (this.state.client.products.length === 1) {
120
- this.scheduler.start()
121
- }
122
- }
123
-
124
- removeProductHandler (product) {
125
- this._handlers.delete(product)
126
- this.updateProducts()
127
- if (this.state.client.products.length === 0) {
128
- this.scheduler.stop()
129
- }
130
- }
131
-
132
- updateProducts () {
133
- this.state.client.products = [...this._handlers.keys()]
134
- }
135
-
136
- getPayload () {
137
- this.state.client.client_tracer.extra_services = getExtraServices()
138
-
139
- return JSON.stringify(this.state)
140
- }
141
-
142
- poll (cb) {
143
- const options = {
144
- url: this.url,
145
- method: 'POST',
146
- path: '/v0.7/config',
147
- headers: {
148
- 'Content-Type': 'application/json; charset=utf-8'
149
- }
150
- }
151
-
152
- request(this.getPayload(), options, (err, data, statusCode) => {
153
- // 404 means RC is disabled, ignore it
154
- if (statusCode === 404) return cb()
155
-
156
- if (err) {
157
- log.errorWithoutTelemetry('[RC] Error in request', err)
158
- return cb()
159
- }
160
-
161
- // if error was just sent, reset the state
162
- if (this.state.client.state.has_error) {
163
- this.state.client.state.has_error = false
164
- this.state.client.state.error = ''
165
- }
166
-
167
- if (data && data !== '{}') { // '{}' means the tracer is up to date
168
- try {
169
- this.parseConfig(JSON.parse(data))
170
- } catch (err) {
171
- log.error('[RC] Could not parse remote config response', err)
172
-
173
- this.state.client.state.has_error = true
174
- this.state.client.state.error = err.toString()
175
- }
176
- }
177
-
178
- cb()
179
- })
180
- }
181
-
182
- // `client_configs` is the list of config paths to have applied
183
- // `targets` is the signed index with metadata for config files
184
- // `target_files` is the list of config files containing the actual config data
185
- parseConfig ({
186
- client_configs: clientConfigs = [],
187
- targets,
188
- target_files: targetFiles = []
189
- }) {
190
- const toUnapply = []
191
- const toApply = []
192
- const toModify = []
193
-
194
- for (const appliedConfig of this.appliedConfigs.values()) {
195
- if (!clientConfigs.includes(appliedConfig.path)) {
196
- toUnapply.push(appliedConfig)
197
- }
198
- }
199
-
200
- targets = fromBase64JSON(targets)
201
-
202
- if (targets) {
203
- for (const path of clientConfigs) {
204
- const meta = targets.signed.targets[path]
205
- if (!meta) throw new Error(`Unable to find target for path ${path}`)
206
-
207
- const current = this.appliedConfigs.get(path)
208
-
209
- const newConf = {}
210
-
211
- if (current) {
212
- if (current.hashes.sha256 === meta.hashes.sha256) continue
213
-
214
- toModify.push(newConf)
215
- } else {
216
- toApply.push(newConf)
217
- }
218
-
219
- const file = targetFiles.find(file => file.path === path)
220
- if (!file) throw new Error(`Unable to find file for path ${path}`)
221
-
222
- // TODO: verify signatures
223
- // verify length
224
- // verify hash
225
- // verify _type
226
- // TODO: new Date(meta.signed.expires) ignore the Targets data if it has expired ?
227
-
228
- const { product, id } = parseConfigPath(path)
229
-
230
- Object.assign(newConf, {
231
- path,
232
- product,
233
- id,
234
- version: meta.custom.v,
235
- apply_state: UNACKNOWLEDGED,
236
- apply_error: '',
237
- length: meta.length,
238
- hashes: meta.hashes,
239
- file: fromBase64JSON(file.raw)
240
- })
241
- }
242
-
243
- this.state.client.state.targets_version = targets.signed.version
244
- this.state.client.state.backend_client_state = targets.signed.custom.opaque_backend_state
245
- }
246
-
247
- if (toUnapply.length || toApply.length || toModify.length) {
248
- this.emit(RemoteConfigManager.kPreUpdate, { toUnapply, toApply, toModify })
249
-
250
- this.dispatch(toUnapply, 'unapply')
251
- this.dispatch(toApply, 'apply')
252
- this.dispatch(toModify, 'modify')
253
-
254
- this.state.cached_target_files = []
255
-
256
- for (const conf of this.appliedConfigs.values()) {
257
- const hashes = []
258
- for (const hash of Object.entries(conf.hashes)) {
259
- hashes.push({ algorithm: hash[0], hash: hash[1] })
260
- }
261
- this.state.cached_target_files.push({
262
- path: conf.path,
263
- length: conf.length,
264
- hashes
265
- })
266
- }
267
- }
268
- }
269
-
270
- dispatch (list, action) {
271
- for (const item of list) {
272
- // TODO: we need a way to tell if unapply configs were handled by kPreUpdate or not, because they're always
273
- // emitted unlike the apply and modify configs
274
-
275
- this._callHandlerFor(action, item)
276
-
277
- if (action === 'unapply') {
278
- this.appliedConfigs.delete(item.path)
279
- } else {
280
- this.appliedConfigs.set(item.path, item)
281
- }
282
- }
283
- }
284
-
285
- _callHandlerFor (action, item) {
286
- // in case the item was already handled by kPreUpdate
287
- if (item.apply_state !== UNACKNOWLEDGED && action !== 'unapply') return
288
-
289
- const handler = this._handlers.get(item.product)
290
-
291
- if (!handler) return
292
-
293
- try {
294
- if (supportsAckCallback(handler)) {
295
- // If the handler accepts an `ack` callback, expect that to be called and set `apply_state` accordinly
296
- // TODO: do we want to pass old and new config ?
297
- handler(action, item.file, item.id, (err) => {
298
- if (err) {
299
- item.apply_state = ERROR
300
- item.apply_error = err.toString()
301
- } else if (item.apply_state !== ERROR) {
302
- item.apply_state = ACKNOWLEDGED
303
- }
304
- })
305
- } else {
306
- // If the handler doesn't accept an `ack` callback, assume `apply_state` is `ACKNOWLEDGED`,
307
- // unless it returns a promise, in which case we wait for the promise to be resolved or rejected.
308
- // TODO: do we want to pass old and new config ?
309
- const result = handler(action, item.file, item.id)
310
- if (result instanceof Promise) {
311
- result.then(
312
- () => { item.apply_state = ACKNOWLEDGED },
313
- (err) => {
314
- item.apply_state = ERROR
315
- item.apply_error = err.toString()
316
- }
317
- )
318
- } else {
319
- item.apply_state = ACKNOWLEDGED
320
- }
321
- }
322
- } catch (err) {
323
- item.apply_state = ERROR
324
- item.apply_error = err.toString()
325
- }
326
- }
327
- }
328
-
329
- function fromBase64JSON (str) {
330
- if (!str) return null
331
-
332
- return JSON.parse(Buffer.from(str, 'base64').toString())
333
- }
334
-
335
- const configPathRegex = /^(?:datadog\/\d+|employee)\/([^/]+)\/([^/]+)\/[^/]+$/
336
-
337
- function parseConfigPath (configPath) {
338
- const match = configPathRegex.exec(configPath)
339
-
340
- if (!match || !match[1] || !match[2]) {
341
- throw new Error(`Unable to parse path ${configPath}`)
342
- }
343
-
344
- return {
345
- product: match[1],
346
- id: match[2]
347
- }
348
- }
349
-
350
- function supportsAckCallback (handler) {
351
- if (kSupportsAckCallback in handler) return handler[kSupportsAckCallback]
352
-
353
- const numOfArgs = handler.length
354
- let result = false
355
-
356
- if (numOfArgs >= 4) {
357
- result = true
358
- } else if (numOfArgs !== 0) {
359
- const source = handler.toString()
360
- result = source.slice(0, source.indexOf(')')).includes('...')
361
- }
362
-
363
- handler[kSupportsAckCallback] = result
364
-
365
- return result
366
- }
367
-
368
- module.exports = RemoteConfigManager