dd-trace 5.83.0 → 5.85.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 (630) hide show
  1. package/LICENSE-3rdparty.csv +0 -1
  2. package/ci/cypress/polyfills.js +1 -1
  3. package/ci/init.js +5 -5
  4. package/ext/exporters.js +1 -1
  5. package/ext/formats.js +1 -1
  6. package/ext/index.js +1 -1
  7. package/ext/kinds.js +1 -1
  8. package/ext/priority.js +1 -1
  9. package/ext/scopes.js +1 -1
  10. package/ext/tags.js +1 -1
  11. package/ext/types.js +1 -1
  12. package/index.d.ts +115 -2
  13. package/initialize.mjs +47 -31
  14. package/loader-hook.mjs +35 -22
  15. package/package.json +36 -33
  16. package/packages/datadog-code-origin/index.js +12 -10
  17. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  18. package/packages/datadog-esbuild/index.js +75 -79
  19. package/packages/datadog-esbuild/src/log.js +32 -0
  20. package/packages/datadog-esbuild/src/utils.js +12 -8
  21. package/packages/datadog-instrumentations/src/aerospike.js +3 -3
  22. package/packages/datadog-instrumentations/src/ai.js +5 -5
  23. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  24. package/packages/datadog-instrumentations/src/amqplib.js +1 -1
  25. package/packages/datadog-instrumentations/src/anthropic.js +3 -3
  26. package/packages/datadog-instrumentations/src/apollo-server.js +4 -4
  27. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  28. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  29. package/packages/datadog-instrumentations/src/aws-sdk.js +4 -4
  30. package/packages/datadog-instrumentations/src/azure-event-hubs.js +2 -2
  31. package/packages/datadog-instrumentations/src/azure-functions.js +1 -1
  32. package/packages/datadog-instrumentations/src/azure-service-bus.js +1 -1
  33. package/packages/datadog-instrumentations/src/body-parser.js +2 -2
  34. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  35. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  36. package/packages/datadog-instrumentations/src/child_process.js +7 -7
  37. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +17 -16
  38. package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
  39. package/packages/datadog-instrumentations/src/couchbase.js +8 -6
  40. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  41. package/packages/datadog-instrumentations/src/cucumber.js +19 -19
  42. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  43. package/packages/datadog-instrumentations/src/dns.js +2 -2
  44. package/packages/datadog-instrumentations/src/elasticsearch.js +2 -2
  45. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +2 -2
  46. package/packages/datadog-instrumentations/src/express-session.js +1 -1
  47. package/packages/datadog-instrumentations/src/express.js +4 -4
  48. package/packages/datadog-instrumentations/src/fastify.js +1 -1
  49. package/packages/datadog-instrumentations/src/fetch.js +2 -2
  50. package/packages/datadog-instrumentations/src/fs.js +7 -7
  51. package/packages/datadog-instrumentations/src/generic-pool.js +2 -2
  52. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +8 -8
  53. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +4 -4
  54. package/packages/datadog-instrumentations/src/google-genai.js +1 -1
  55. package/packages/datadog-instrumentations/src/graphql.js +10 -10
  56. package/packages/datadog-instrumentations/src/grpc/client.js +9 -13
  57. package/packages/datadog-instrumentations/src/grpc/types.js +1 -1
  58. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  59. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +1 -1
  60. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +2 -2
  61. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
  62. package/packages/datadog-instrumentations/src/helpers/register.js +7 -7
  63. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +6 -0
  64. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +1 -0
  65. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -1
  66. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langchain.js +55 -55
  67. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +74 -17
  68. package/packages/datadog-instrumentations/src/helpers/router-helper.js +7 -7
  69. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +1 -1
  70. package/packages/datadog-instrumentations/src/hono.js +6 -6
  71. package/packages/datadog-instrumentations/src/http/client.js +1 -1
  72. package/packages/datadog-instrumentations/src/http/server.js +4 -4
  73. package/packages/datadog-instrumentations/src/http2/server.js +1 -1
  74. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  75. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  76. package/packages/datadog-instrumentations/src/jest.js +250 -106
  77. package/packages/datadog-instrumentations/src/kafkajs.js +9 -8
  78. package/packages/datadog-instrumentations/src/knex.js +2 -2
  79. package/packages/datadog-instrumentations/src/koa.js +3 -1
  80. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  81. package/packages/datadog-instrumentations/src/light-my-request.js +1 -1
  82. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  83. package/packages/datadog-instrumentations/src/mariadb.js +1 -1
  84. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  85. package/packages/datadog-instrumentations/src/mocha/common.js +3 -3
  86. package/packages/datadog-instrumentations/src/mocha/main.js +24 -24
  87. package/packages/datadog-instrumentations/src/mocha/utils.js +15 -11
  88. package/packages/datadog-instrumentations/src/mocha/worker.js +4 -4
  89. package/packages/datadog-instrumentations/src/moleculer/server.js +1 -1
  90. package/packages/datadog-instrumentations/src/mongodb-core.js +3 -3
  91. package/packages/datadog-instrumentations/src/mongodb.js +7 -7
  92. package/packages/datadog-instrumentations/src/mongoose.js +10 -10
  93. package/packages/datadog-instrumentations/src/mquery.js +6 -6
  94. package/packages/datadog-instrumentations/src/multer.js +1 -1
  95. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  96. package/packages/datadog-instrumentations/src/net.js +6 -6
  97. package/packages/datadog-instrumentations/src/next.js +6 -6
  98. package/packages/datadog-instrumentations/src/nyc.js +34 -2
  99. package/packages/datadog-instrumentations/src/openai.js +24 -24
  100. package/packages/datadog-instrumentations/src/oracledb.js +2 -2
  101. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
  102. package/packages/datadog-instrumentations/src/passport-http.js +1 -1
  103. package/packages/datadog-instrumentations/src/passport-local.js +1 -1
  104. package/packages/datadog-instrumentations/src/passport-utils.js +1 -1
  105. package/packages/datadog-instrumentations/src/passport.js +1 -1
  106. package/packages/datadog-instrumentations/src/pg.js +3 -3
  107. package/packages/datadog-instrumentations/src/pino.js +2 -2
  108. package/packages/datadog-instrumentations/src/playwright.js +71 -67
  109. package/packages/datadog-instrumentations/src/prisma.js +24 -78
  110. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  111. package/packages/datadog-instrumentations/src/promise.js +1 -1
  112. package/packages/datadog-instrumentations/src/protobufjs.js +6 -6
  113. package/packages/datadog-instrumentations/src/q.js +2 -2
  114. package/packages/datadog-instrumentations/src/redis.js +2 -2
  115. package/packages/datadog-instrumentations/src/rhea.js +5 -5
  116. package/packages/datadog-instrumentations/src/router.js +8 -8
  117. package/packages/datadog-instrumentations/src/selenium.js +3 -3
  118. package/packages/datadog-instrumentations/src/sequelize.js +1 -1
  119. package/packages/datadog-instrumentations/src/sharedb.js +2 -2
  120. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  121. package/packages/datadog-instrumentations/src/undici.js +2 -2
  122. package/packages/datadog-instrumentations/src/url.js +5 -5
  123. package/packages/datadog-instrumentations/src/vitest.js +56 -45
  124. package/packages/datadog-instrumentations/src/when.js +1 -1
  125. package/packages/datadog-instrumentations/src/winston.js +1 -1
  126. package/packages/datadog-instrumentations/src/ws.js +128 -41
  127. package/packages/datadog-plugin-aerospike/src/index.js +4 -4
  128. package/packages/datadog-plugin-ai/src/index.js +1 -1
  129. package/packages/datadog-plugin-ai/src/tracing.js +2 -2
  130. package/packages/datadog-plugin-ai/src/utils.js +1 -1
  131. package/packages/datadog-plugin-amqp10/src/consumer.js +2 -2
  132. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  133. package/packages/datadog-plugin-amqp10/src/producer.js +2 -2
  134. package/packages/datadog-plugin-amqplib/src/client.js +2 -2
  135. package/packages/datadog-plugin-amqplib/src/consumer.js +2 -2
  136. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  137. package/packages/datadog-plugin-amqplib/src/producer.js +2 -2
  138. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  139. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  140. package/packages/datadog-plugin-anthropic/src/tracing.js +2 -2
  141. package/packages/datadog-plugin-apollo/src/gateway/fetch.js +1 -1
  142. package/packages/datadog-plugin-apollo/src/gateway/index.js +1 -1
  143. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -5
  144. package/packages/datadog-plugin-apollo/src/index.js +1 -1
  145. package/packages/datadog-plugin-avsc/src/schema_iterator.js +3 -3
  146. package/packages/datadog-plugin-aws-sdk/src/base.js +11 -10
  147. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  148. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +1 -1
  149. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +24 -24
  150. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
  151. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -1
  152. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  153. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +3 -3
  154. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
  155. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
  156. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +5 -5
  157. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +12 -12
  158. package/packages/datadog-plugin-aws-sdk/src/util.js +1 -1
  159. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  160. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +3 -3
  161. package/packages/datadog-plugin-azure-functions/src/index.js +11 -10
  162. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  163. package/packages/datadog-plugin-azure-service-bus/src/producer.js +3 -3
  164. package/packages/datadog-plugin-bullmq/src/consumer.js +2 -2
  165. package/packages/datadog-plugin-bullmq/src/index.js +1 -1
  166. package/packages/datadog-plugin-bullmq/src/producer.js +11 -11
  167. package/packages/datadog-plugin-cassandra-driver/src/index.js +2 -2
  168. package/packages/datadog-plugin-child_process/src/index.js +2 -2
  169. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +5 -5
  170. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  171. package/packages/datadog-plugin-couchbase/src/index.js +3 -3
  172. package/packages/datadog-plugin-cucumber/src/index.js +46 -45
  173. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +68 -55
  174. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  175. package/packages/datadog-plugin-cypress/src/support.js +56 -9
  176. package/packages/datadog-plugin-dd-trace-api/src/index.js +1 -1
  177. package/packages/datadog-plugin-dns/src/index.js +1 -1
  178. package/packages/datadog-plugin-dns/src/lookup.js +2 -2
  179. package/packages/datadog-plugin-dns/src/lookup_service.js +3 -3
  180. package/packages/datadog-plugin-dns/src/resolve.js +2 -2
  181. package/packages/datadog-plugin-dns/src/reverse.js +2 -2
  182. package/packages/datadog-plugin-elasticsearch/src/index.js +2 -2
  183. package/packages/datadog-plugin-express/src/index.js +1 -1
  184. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  185. package/packages/datadog-plugin-fs/src/index.js +2 -2
  186. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +2 -2
  187. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +8 -6
  188. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -1
  189. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +11 -10
  190. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +6 -6
  191. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  192. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +2 -2
  193. package/packages/datadog-plugin-google-cloud-vertexai/src/utils.js +1 -1
  194. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  195. package/packages/datadog-plugin-google-genai/src/tracing.js +2 -2
  196. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  197. package/packages/datadog-plugin-graphql/src/index.js +2 -2
  198. package/packages/datadog-plugin-graphql/src/parse.js +1 -1
  199. package/packages/datadog-plugin-graphql/src/resolve.js +6 -6
  200. package/packages/datadog-plugin-graphql/src/utils.js +1 -1
  201. package/packages/datadog-plugin-graphql/src/validate.js +2 -2
  202. package/packages/datadog-plugin-grpc/src/client.js +3 -3
  203. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  204. package/packages/datadog-plugin-grpc/src/server.js +3 -3
  205. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  206. package/packages/datadog-plugin-http/src/client.js +10 -10
  207. package/packages/datadog-plugin-http/src/index.js +1 -1
  208. package/packages/datadog-plugin-http2/src/client.js +6 -6
  209. package/packages/datadog-plugin-http2/src/index.js +1 -1
  210. package/packages/datadog-plugin-http2/src/server.js +1 -1
  211. package/packages/datadog-plugin-jest/src/index.js +39 -22
  212. package/packages/datadog-plugin-jest/src/util.js +1 -1
  213. package/packages/datadog-plugin-kafkajs/src/consumer.js +5 -5
  214. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  215. package/packages/datadog-plugin-kafkajs/src/producer.js +5 -5
  216. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  217. package/packages/datadog-plugin-langchain/src/tokens.js +2 -2
  218. package/packages/datadog-plugin-langchain/src/tracing.js +4 -4
  219. package/packages/datadog-plugin-memcached/src/index.js +2 -2
  220. package/packages/datadog-plugin-mocha/src/index.js +12 -12
  221. package/packages/datadog-plugin-moleculer/src/client.js +1 -1
  222. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  223. package/packages/datadog-plugin-moleculer/src/server.js +2 -2
  224. package/packages/datadog-plugin-moleculer/src/util.js +1 -1
  225. package/packages/datadog-plugin-mongodb-core/src/index.js +5 -5
  226. package/packages/datadog-plugin-mysql/src/index.js +2 -2
  227. package/packages/datadog-plugin-net/src/ipc.js +2 -2
  228. package/packages/datadog-plugin-net/src/tcp.js +4 -4
  229. package/packages/datadog-plugin-next/src/index.js +4 -4
  230. package/packages/datadog-plugin-nyc/src/index.js +60 -0
  231. package/packages/datadog-plugin-openai/src/index.js +1 -1
  232. package/packages/datadog-plugin-openai/src/services.js +3 -3
  233. package/packages/datadog-plugin-openai/src/stream-helpers.js +1 -1
  234. package/packages/datadog-plugin-openai/src/tracing.js +10 -10
  235. package/packages/datadog-plugin-oracledb/src/connection-parser.js +1 -1
  236. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  237. package/packages/datadog-plugin-pg/src/index.js +2 -2
  238. package/packages/datadog-plugin-playwright/src/index.js +42 -42
  239. package/packages/datadog-plugin-prisma/src/datadog-tracing-helper.js +95 -0
  240. package/packages/datadog-plugin-prisma/src/index.js +129 -10
  241. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +3 -3
  242. package/packages/datadog-plugin-redis/src/index.js +2 -2
  243. package/packages/datadog-plugin-restify/src/index.js +1 -1
  244. package/packages/datadog-plugin-rhea/src/consumer.js +2 -2
  245. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  246. package/packages/datadog-plugin-rhea/src/producer.js +2 -2
  247. package/packages/datadog-plugin-router/src/index.js +3 -3
  248. package/packages/datadog-plugin-selenium/src/index.js +2 -2
  249. package/packages/datadog-plugin-sharedb/src/index.js +2 -2
  250. package/packages/datadog-plugin-tedious/src/index.js +2 -2
  251. package/packages/datadog-plugin-undici/src/index.js +5 -5
  252. package/packages/datadog-plugin-vitest/src/index.js +39 -18
  253. package/packages/datadog-plugin-ws/src/close.js +10 -11
  254. package/packages/datadog-plugin-ws/src/index.js +1 -1
  255. package/packages/datadog-plugin-ws/src/producer.js +8 -9
  256. package/packages/datadog-plugin-ws/src/receiver.js +8 -9
  257. package/packages/datadog-plugin-ws/src/server.js +17 -12
  258. package/packages/datadog-plugin-ws/src/util.js +48 -16
  259. package/packages/datadog-shimmer/src/shimmer.js +5 -8
  260. package/packages/dd-trace/index.js +2 -2
  261. package/packages/dd-trace/src/agent/info.js +57 -0
  262. package/packages/dd-trace/src/agent/url.js +28 -0
  263. package/packages/dd-trace/src/aiguard/client.js +3 -3
  264. package/packages/dd-trace/src/aiguard/sdk.js +6 -6
  265. package/packages/dd-trace/src/aiguard/tags.js +1 -1
  266. package/packages/dd-trace/src/analytics_sampler.js +1 -1
  267. package/packages/dd-trace/src/appsec/activation.js +1 -1
  268. package/packages/dd-trace/src/appsec/addresses.js +1 -1
  269. package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
  270. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  271. package/packages/dd-trace/src/appsec/blocking.js +5 -5
  272. package/packages/dd-trace/src/appsec/channels.js +1 -1
  273. package/packages/dd-trace/src/appsec/graphql.js +13 -13
  274. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +1 -1
  275. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  276. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +6 -5
  277. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +2 -2
  278. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-rule-type.js +1 -1
  279. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +148 -148
  280. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +148 -148
  281. package/packages/dd-trace/src/appsec/iast/analyzers/index.js +1 -1
  282. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +1 -1
  283. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +7 -8
  284. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +2 -2
  285. package/packages/dd-trace/src/appsec/iast/analyzers/set-cookies-header-interceptor.js +2 -2
  286. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +2 -2
  287. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +3 -3
  288. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  289. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +2 -2
  290. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +3 -3
  291. package/packages/dd-trace/src/appsec/iast/iast-context.js +6 -3
  292. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +17 -9
  293. package/packages/dd-trace/src/appsec/iast/index.js +2 -2
  294. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +9 -9
  295. package/packages/dd-trace/src/appsec/iast/path-line.js +6 -6
  296. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +11 -11
  297. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +49 -17
  298. package/packages/dd-trace/src/appsec/iast/tags.js +1 -1
  299. package/packages/dd-trace/src/appsec/iast/taint-tracking/constants.js +1 -1
  300. package/packages/dd-trace/src/appsec/iast/taint-tracking/csi-methods.js +2 -2
  301. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +1 -1
  302. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +2 -2
  303. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -6
  304. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +2 -2
  305. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +5 -5
  306. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +4 -4
  307. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -5
  308. package/packages/dd-trace/src/appsec/iast/taint-tracking/secure-marks.js +6 -4
  309. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +1 -1
  310. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +8 -8
  311. package/packages/dd-trace/src/appsec/iast/telemetry/iast-metric.js +4 -4
  312. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +2 -2
  313. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  314. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -2
  315. package/packages/dd-trace/src/appsec/iast/utils.js +3 -3
  316. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/constants.js +1 -1
  317. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +1 -1
  318. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/hardcoded-password-analyzer.js +1 -1
  319. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +6 -6
  320. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/tainted-range-based-sensitive-analyzer.js +1 -1
  321. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +8 -8
  322. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +1 -1
  323. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +12 -11
  324. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +5 -5
  325. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +1 -1
  326. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +4 -4
  327. package/packages/dd-trace/src/appsec/index.js +65 -27
  328. package/packages/dd-trace/src/appsec/rasp/command_injection.js +3 -3
  329. package/packages/dd-trace/src/appsec/rasp/fs-plugin.js +4 -4
  330. package/packages/dd-trace/src/appsec/rasp/index.js +2 -2
  331. package/packages/dd-trace/src/appsec/rasp/lfi.js +5 -5
  332. package/packages/dd-trace/src/appsec/rasp/sql_injection.js +2 -2
  333. package/packages/dd-trace/src/appsec/rasp/ssrf.js +1 -1
  334. package/packages/dd-trace/src/appsec/rasp/utils.js +4 -4
  335. package/packages/dd-trace/src/appsec/rc-products.js +1 -1
  336. package/packages/dd-trace/src/appsec/remote_config.js +3 -3
  337. package/packages/dd-trace/src/appsec/reporter.js +11 -11
  338. package/packages/dd-trace/src/appsec/rule_manager.js +1 -1
  339. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  340. package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
  341. package/packages/dd-trace/src/appsec/sdk/track_event.js +7 -7
  342. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
  343. package/packages/dd-trace/src/appsec/sdk/utils.js +1 -1
  344. package/packages/dd-trace/src/appsec/stack_trace.js +5 -5
  345. package/packages/dd-trace/src/appsec/telemetry/common.js +3 -3
  346. package/packages/dd-trace/src/appsec/telemetry/index.js +5 -5
  347. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -3
  348. package/packages/dd-trace/src/appsec/telemetry/user.js +4 -4
  349. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -3
  350. package/packages/dd-trace/src/appsec/user_tracking.js +7 -7
  351. package/packages/dd-trace/src/appsec/waf/diagnostics.js +2 -2
  352. package/packages/dd-trace/src/appsec/waf/index.js +1 -1
  353. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  354. package/packages/dd-trace/src/azure_metadata.js +16 -9
  355. package/packages/dd-trace/src/baggage.js +1 -1
  356. package/packages/dd-trace/src/ci-visibility/coverage-report-discovery.js +82 -0
  357. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -5
  358. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +9 -9
  359. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +8 -8
  360. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +11 -11
  361. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +4 -3
  362. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +8 -6
  363. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -0
  364. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +4 -3
  365. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +39 -20
  366. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +22 -22
  367. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
  368. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
  369. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +8 -8
  370. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +3 -3
  371. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +17 -12
  372. package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +92 -0
  373. package/packages/dd-trace/src/ci-visibility/telemetry.js +8 -4
  374. package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +1 -1
  375. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +6 -6
  376. package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +61 -0
  377. package/packages/dd-trace/src/config/defaults.js +1 -1
  378. package/packages/dd-trace/src/config/git_properties.js +1 -1
  379. package/packages/dd-trace/src/config/helper.js +2 -2
  380. package/packages/dd-trace/src/config/index.js +645 -641
  381. package/packages/dd-trace/src/config/remote_config.js +2 -1
  382. package/packages/dd-trace/src/config/stable.js +2 -2
  383. package/packages/dd-trace/src/config/supported-configurations.json +2 -1
  384. package/packages/dd-trace/src/constants.js +3 -3
  385. package/packages/dd-trace/src/crashtracking/crashtracker.js +8 -11
  386. package/packages/dd-trace/src/datastreams/checkpointer.js +1 -1
  387. package/packages/dd-trace/src/datastreams/context.js +1 -1
  388. package/packages/dd-trace/src/datastreams/encoding.js +1 -1
  389. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  390. package/packages/dd-trace/src/datastreams/index.js +8 -8
  391. package/packages/dd-trace/src/datastreams/pathway.js +5 -3
  392. package/packages/dd-trace/src/datastreams/processor.js +14 -12
  393. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +27 -25
  394. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +1 -1
  395. package/packages/dd-trace/src/datastreams/size.js +3 -3
  396. package/packages/dd-trace/src/datastreams/writer.js +5 -11
  397. package/packages/dd-trace/src/debugger/config.js +2 -1
  398. package/packages/dd-trace/src/debugger/constants.js +7 -0
  399. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +14 -10
  400. package/packages/dd-trace/src/debugger/devtools_client/condition.js +2 -2
  401. package/packages/dd-trace/src/debugger/devtools_client/config.js +6 -12
  402. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  403. package/packages/dd-trace/src/debugger/devtools_client/index.js +32 -25
  404. package/packages/dd-trace/src/debugger/devtools_client/inspector_promises_polyfill.js +1 -1
  405. package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +10 -11
  406. package/packages/dd-trace/src/debugger/devtools_client/log.js +1 -1
  407. package/packages/dd-trace/src/debugger/devtools_client/send.js +54 -10
  408. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +94 -37
  409. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +4 -4
  410. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +7 -7
  411. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +2 -2
  412. package/packages/dd-trace/src/debugger/devtools_client/snapshot/symbols.js +1 -1
  413. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -1
  414. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +10 -1
  415. package/packages/dd-trace/src/debugger/devtools_client/state.js +65 -8
  416. package/packages/dd-trace/src/debugger/devtools_client/status.js +9 -8
  417. package/packages/dd-trace/src/debugger/index.js +95 -37
  418. package/packages/dd-trace/src/dogstatsd.js +17 -18
  419. package/packages/dd-trace/src/encode/0.4.js +7 -6
  420. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
  421. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +3 -3
  422. package/packages/dd-trace/src/encode/span-stats.js +2 -2
  423. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  424. package/packages/dd-trace/src/exporters/agent/index.js +5 -9
  425. package/packages/dd-trace/src/exporters/agent/writer.js +5 -4
  426. package/packages/dd-trace/src/exporters/common/agents.js +1 -1
  427. package/packages/dd-trace/src/exporters/common/{agent-info-exporter.js → buffering-exporter.js} +12 -39
  428. package/packages/dd-trace/src/exporters/common/docker.js +11 -7
  429. package/packages/dd-trace/src/exporters/common/request.js +28 -8
  430. package/packages/dd-trace/src/exporters/common/url-to-http-options-polyfill.js +2 -2
  431. package/packages/dd-trace/src/exporters/common/writer.js +2 -0
  432. package/packages/dd-trace/src/exporters/span-stats/index.js +4 -11
  433. package/packages/dd-trace/src/exporters/span-stats/writer.js +3 -3
  434. package/packages/dd-trace/src/external-logger/src/index.js +4 -4
  435. package/packages/dd-trace/src/flare/index.js +3 -3
  436. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  437. package/packages/dd-trace/src/heap_snapshots.js +1 -1
  438. package/packages/dd-trace/src/id.js +1 -1
  439. package/packages/dd-trace/src/iitm.js +1 -1
  440. package/packages/dd-trace/src/lambda/handler.js +1 -1
  441. package/packages/dd-trace/src/lambda/runtime/errors.js +1 -1
  442. package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -3
  443. package/packages/dd-trace/src/llmobs/constants/tags.js +1 -1
  444. package/packages/dd-trace/src/llmobs/constants/text.js +1 -1
  445. package/packages/dd-trace/src/llmobs/constants/writers.js +1 -1
  446. package/packages/dd-trace/src/llmobs/index.js +2 -4
  447. package/packages/dd-trace/src/llmobs/noop.js +2 -2
  448. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +8 -8
  449. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +2 -2
  450. package/packages/dd-trace/src/llmobs/plugins/anthropic.js +5 -5
  451. package/packages/dd-trace/src/llmobs/plugins/base.js +1 -1
  452. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +8 -8
  453. package/packages/dd-trace/src/llmobs/plugins/genai/index.js +2 -2
  454. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +15 -15
  455. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +2 -2
  456. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +5 -5
  457. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  458. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +3 -3
  459. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +1 -1
  460. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +17 -17
  461. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +3 -3
  462. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +6 -6
  463. package/packages/dd-trace/src/llmobs/sdk.js +11 -11
  464. package/packages/dd-trace/src/llmobs/span_processor.js +6 -6
  465. package/packages/dd-trace/src/llmobs/tagger.js +4 -4
  466. package/packages/dd-trace/src/llmobs/telemetry.js +8 -8
  467. package/packages/dd-trace/src/llmobs/util.js +1 -1
  468. package/packages/dd-trace/src/llmobs/writers/base.js +11 -17
  469. package/packages/dd-trace/src/llmobs/writers/evaluations.js +5 -5
  470. package/packages/dd-trace/src/llmobs/writers/spans.js +3 -3
  471. package/packages/dd-trace/src/llmobs/writers/util.js +4 -10
  472. package/packages/dd-trace/src/log/channels.js +2 -2
  473. package/packages/dd-trace/src/log/index.js +46 -31
  474. package/packages/dd-trace/src/log/log.js +1 -1
  475. package/packages/dd-trace/src/log/writer.js +14 -79
  476. package/packages/dd-trace/src/noop/span.js +2 -2
  477. package/packages/dd-trace/src/openfeature/constants/constants.js +1 -1
  478. package/packages/dd-trace/src/openfeature/flagging_provider.js +4 -4
  479. package/packages/dd-trace/src/openfeature/index.js +2 -2
  480. package/packages/dd-trace/src/openfeature/noop.js +3 -3
  481. package/packages/dd-trace/src/openfeature/remote_config.js +1 -1
  482. package/packages/dd-trace/src/openfeature/writers/base.js +14 -20
  483. package/packages/dd-trace/src/openfeature/writers/exposures.js +10 -10
  484. package/packages/dd-trace/src/openfeature/writers/util.js +4 -9
  485. package/packages/dd-trace/src/opentelemetry/context_manager.js +48 -29
  486. package/packages/dd-trace/src/opentelemetry/logs/index.js +2 -2
  487. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +2 -2
  488. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +10 -10
  489. package/packages/dd-trace/src/opentelemetry/metrics/constants.js +3 -3
  490. package/packages/dd-trace/src/opentelemetry/metrics/index.js +2 -2
  491. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  492. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +1 -1
  493. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +11 -11
  494. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +18 -18
  495. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +6 -6
  496. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +10 -7
  497. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +3 -3
  498. package/packages/dd-trace/src/opentelemetry/span.js +8 -8
  499. package/packages/dd-trace/src/opentelemetry/span_context.js +1 -1
  500. package/packages/dd-trace/src/opentelemetry/span_processor.js +1 -1
  501. package/packages/dd-trace/src/opentelemetry/tracer.js +4 -4
  502. package/packages/dd-trace/src/opentracing/propagation/log.js +2 -2
  503. package/packages/dd-trace/src/opentracing/propagation/text_map.js +14 -12
  504. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -0
  505. package/packages/dd-trace/src/opentracing/span.js +20 -20
  506. package/packages/dd-trace/src/opentracing/span_context.js +3 -3
  507. package/packages/dd-trace/src/opentracing/tracer.js +3 -3
  508. package/packages/dd-trace/src/payload-tagging/config/index.js +1 -1
  509. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  510. package/packages/dd-trace/src/payload-tagging/tagging.js +2 -2
  511. package/packages/dd-trace/src/plugin_manager.js +6 -6
  512. package/packages/dd-trace/src/plugins/apollo.js +4 -4
  513. package/packages/dd-trace/src/plugins/ci_plugin.js +101 -36
  514. package/packages/dd-trace/src/plugins/database.js +1 -1
  515. package/packages/dd-trace/src/plugins/index.js +1 -1
  516. package/packages/dd-trace/src/plugins/log_plugin.js +2 -2
  517. package/packages/dd-trace/src/plugins/outbound.js +9 -8
  518. package/packages/dd-trace/src/plugins/plugin.js +17 -7
  519. package/packages/dd-trace/src/plugins/producer.js +6 -5
  520. package/packages/dd-trace/src/plugins/tracing.js +37 -8
  521. package/packages/dd-trace/src/plugins/util/ci.js +40 -40
  522. package/packages/dd-trace/src/plugins/util/env.js +2 -2
  523. package/packages/dd-trace/src/plugins/util/git-cache.js +2 -2
  524. package/packages/dd-trace/src/plugins/util/git.js +20 -18
  525. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +6 -6
  526. package/packages/dd-trace/src/plugins/util/ip_extractor.js +3 -3
  527. package/packages/dd-trace/src/plugins/util/llm.js +1 -1
  528. package/packages/dd-trace/src/plugins/util/stacktrace.js +3 -3
  529. package/packages/dd-trace/src/plugins/util/tags.js +1 -1
  530. package/packages/dd-trace/src/plugins/util/test.js +46 -40
  531. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  532. package/packages/dd-trace/src/plugins/util/urlfilter.js +1 -1
  533. package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -2
  534. package/packages/dd-trace/src/plugins/util/web.js +12 -12
  535. package/packages/dd-trace/src/priority_sampler.js +4 -4
  536. package/packages/dd-trace/src/process-tags/index.js +2 -2
  537. package/packages/dd-trace/src/profiler.js +1 -1
  538. package/packages/dd-trace/src/profiling/config.js +11 -14
  539. package/packages/dd-trace/src/profiling/constants.js +2 -2
  540. package/packages/dd-trace/src/profiling/exporter_cli.js +3 -3
  541. package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
  542. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +8 -8
  543. package/packages/dd-trace/src/profiling/index.js +1 -1
  544. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  545. package/packages/dd-trace/src/profiling/loggers/console.js +1 -1
  546. package/packages/dd-trace/src/profiling/profiler.js +21 -23
  547. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  548. package/packages/dd-trace/src/profiling/profilers/event_plugins/fs.js +3 -3
  549. package/packages/dd-trace/src/profiling/profilers/events.js +27 -19
  550. package/packages/dd-trace/src/profiling/profilers/shared.js +2 -2
  551. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  552. package/packages/dd-trace/src/profiling/tagger.js +1 -1
  553. package/packages/dd-trace/src/profiling/webspan-utils.js +2 -2
  554. package/packages/dd-trace/src/proxy.js +13 -13
  555. package/packages/dd-trace/src/remote_config/apply_states.js +1 -1
  556. package/packages/dd-trace/src/remote_config/capabilities.js +1 -0
  557. package/packages/dd-trace/src/remote_config/index.js +17 -22
  558. package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
  559. package/packages/dd-trace/src/ritm.js +1 -1
  560. package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
  561. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -3
  562. package/packages/dd-trace/src/serverless.js +1 -1
  563. package/packages/dd-trace/src/service-naming/extra-services.js +1 -1
  564. package/packages/dd-trace/src/service-naming/index.js +1 -1
  565. package/packages/dd-trace/src/service-naming/schemas/v0/graphql.js +3 -3
  566. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +25 -25
  567. package/packages/dd-trace/src/service-naming/schemas/v0/serverless.js +3 -3
  568. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +18 -18
  569. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +23 -23
  570. package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +9 -9
  571. package/packages/dd-trace/src/service-naming/schemas/v1/graphql.js +3 -3
  572. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +21 -21
  573. package/packages/dd-trace/src/service-naming/schemas/v1/serverless.js +3 -3
  574. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +17 -17
  575. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +23 -23
  576. package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +9 -9
  577. package/packages/dd-trace/src/span_format.js +4 -4
  578. package/packages/dd-trace/src/span_sampler.js +1 -1
  579. package/packages/dd-trace/src/span_stats.js +11 -11
  580. package/packages/dd-trace/src/spanleak.js +1 -1
  581. package/packages/dd-trace/src/standalone/index.js +1 -1
  582. package/packages/dd-trace/src/standalone/product.js +2 -2
  583. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  584. package/packages/dd-trace/src/startup-log.js +4 -4
  585. package/packages/dd-trace/src/tagger.js +3 -1
  586. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  587. package/packages/dd-trace/src/telemetry/endpoints.js +4 -4
  588. package/packages/dd-trace/src/telemetry/index.js +1 -1
  589. package/packages/dd-trace/src/telemetry/logs/index.js +2 -2
  590. package/packages/dd-trace/src/telemetry/logs/log-collector.js +2 -2
  591. package/packages/dd-trace/src/telemetry/metrics.js +6 -6
  592. package/packages/dd-trace/src/telemetry/send-data.js +5 -5
  593. package/packages/dd-trace/src/telemetry/telemetry.js +10 -10
  594. package/packages/dd-trace/src/tracer.js +3 -2
  595. package/packages/dd-trace/src/util.js +1 -1
  596. package/scripts/preinstall.js +1 -1
  597. package/vendor/dist/@datadog/sketches-js/index.js +1 -1
  598. package/vendor/dist/@datadog/source-map/index.js +1 -1
  599. package/vendor/dist/@isaacs/ttlcache/index.js +1 -1
  600. package/vendor/dist/@opentelemetry/core/index.js +1 -1
  601. package/vendor/dist/@opentelemetry/resources/index.js +1 -1
  602. package/vendor/dist/astring/index.js +1 -1
  603. package/vendor/dist/crypto-randomuuid/index.js +1 -1
  604. package/vendor/dist/escape-string-regexp/index.js +1 -1
  605. package/vendor/dist/esquery/index.js +1 -1
  606. package/vendor/dist/ignore/index.js +1 -1
  607. package/vendor/dist/istanbul-lib-coverage/index.js +1 -1
  608. package/vendor/dist/jest-docblock/index.js +1 -1
  609. package/vendor/dist/jsonpath-plus/index.js +1 -1
  610. package/vendor/dist/limiter/index.js +1 -1
  611. package/vendor/dist/lodash.sortby/index.js +1 -1
  612. package/vendor/dist/lru-cache/index.js +1 -1
  613. package/vendor/dist/meriyah/index.js +1 -1
  614. package/vendor/dist/module-details-from-path/index.js +1 -1
  615. package/vendor/dist/mutexify/promise/index.js +1 -1
  616. package/vendor/dist/opentracing/index.js +1 -1
  617. package/vendor/dist/path-to-regexp/index.js +1 -1
  618. package/vendor/dist/pprof-format/index.js +1 -1
  619. package/vendor/dist/protobufjs/index.js +1 -1
  620. package/vendor/dist/protobufjs/minimal/index.js +1 -1
  621. package/vendor/dist/retry/index.js +1 -1
  622. package/vendor/dist/rfdc/index.js +1 -1
  623. package/vendor/dist/semifies/index.js +1 -1
  624. package/vendor/dist/shell-quote/index.js +1 -1
  625. package/vendor/dist/source-map/index.js +1 -1
  626. package/vendor/dist/source-map/lib/util/index.js +1 -1
  627. package/vendor/dist/tlhunter-sorted-set/index.js +1 -1
  628. package/vendor/dist/ttl-set/index.js +1 -1
  629. package/packages/datadog-plugin-prisma/src/client.js +0 -60
  630. package/packages/datadog-plugin-prisma/src/engine.js +0 -81
@@ -1,9 +1,10 @@
1
1
  'use strict'
2
2
 
3
- const fs = require('fs')
4
- const os = require('os')
5
- const { URL } = require('url')
6
- const path = require('path')
3
+ const fs = require('node:fs')
4
+ const os = require('node:os')
5
+ const { URL } = require('node:url')
6
+ const path = require('node:path')
7
+
7
8
  const uuid = require('../../../../vendor/dist/crypto-randomuuid') // we need to keep the old uuid dep because of cypress
8
9
 
9
10
  const set = require('../../../datadog-core/src/utils/src/set')
@@ -15,10 +16,10 @@ const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('../plugins/util/tags')
15
16
  const { updateConfig } = require('../telemetry')
16
17
  const telemetryMetrics = require('../telemetry/metrics')
17
18
  const {
18
- isInServerlessEnvironment,
19
+ IS_SERVERLESS,
19
20
  getIsGCPFunction,
20
21
  getIsAzureFunction,
21
- enableGCPPubSubPushSubscription
22
+ enableGCPPubSubPushSubscription,
22
23
  } = require('../serverless')
23
24
  const { ORIGIN_KEY } = require('../constants')
24
25
  const { appendRules } = require('../payload-tagging/config')
@@ -27,221 +28,36 @@ const { getGitMetadataFromGitProperties, removeUserSensitiveInfo, getRemoteOrigi
27
28
  const { getEnvironmentVariable: getEnv, getEnvironmentVariables, getStableConfigSources } = require('./helper')
28
29
  const defaults = require('./defaults')
29
30
 
30
- const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
31
-
32
- const changeTracker = {}
33
-
34
- const telemetryCounters = {
35
- 'otel.env.hiding': {},
36
- 'otel.env.invalid': {}
37
- }
38
-
39
- function getCounter (event, ddVar, otelVar) {
40
- const counters = telemetryCounters[event]
41
- const tags = []
42
- const ddVarPrefix = 'config_datadog:'
43
- const otelVarPrefix = 'config_opentelemetry:'
44
- if (ddVar) {
45
- ddVar = ddVarPrefix + ddVar.toLowerCase()
46
- tags.push(ddVar)
47
- }
48
- if (otelVar) {
49
- otelVar = otelVarPrefix + otelVar.toLowerCase()
50
- tags.push(otelVar)
51
- }
52
-
53
- if (!(otelVar in counters)) counters[otelVar] = {}
54
-
55
- const counter = tracerMetrics.count(event, tags)
56
- counters[otelVar][ddVar] = counter
57
- return counter
58
- }
59
-
60
- const otelDdEnvMapping = {
61
- OTEL_LOG_LEVEL: 'DD_TRACE_LOG_LEVEL',
62
- OTEL_PROPAGATORS: 'DD_TRACE_PROPAGATION_STYLE',
63
- OTEL_SERVICE_NAME: 'DD_SERVICE',
64
- OTEL_TRACES_SAMPLER: 'DD_TRACE_SAMPLE_RATE',
65
- OTEL_TRACES_SAMPLER_ARG: 'DD_TRACE_SAMPLE_RATE',
66
- OTEL_TRACES_EXPORTER: 'DD_TRACE_ENABLED',
67
- OTEL_METRICS_EXPORTER: 'DD_RUNTIME_METRICS_ENABLED',
68
- OTEL_RESOURCE_ATTRIBUTES: 'DD_TAGS',
69
- OTEL_SDK_DISABLED: 'DD_TRACE_OTEL_ENABLED',
70
- OTEL_LOGS_EXPORTER: undefined
71
- }
72
-
31
+ const TELEMETRY_COUNTERS = new Map([
32
+ ['otel.env.hiding', {}],
33
+ ['otel.env.invalid', {}],
34
+ ])
35
+ const OTEL_DD_ENV_MAPPING = new Map([
36
+ ['OTEL_LOG_LEVEL', 'DD_TRACE_LOG_LEVEL'],
37
+ ['OTEL_PROPAGATORS', 'DD_TRACE_PROPAGATION_STYLE'],
38
+ ['OTEL_SERVICE_NAME', 'DD_SERVICE'],
39
+ ['OTEL_TRACES_SAMPLER', 'DD_TRACE_SAMPLE_RATE'],
40
+ ['OTEL_TRACES_SAMPLER_ARG', 'DD_TRACE_SAMPLE_RATE'],
41
+ ['OTEL_TRACES_EXPORTER', 'DD_TRACE_ENABLED'],
42
+ ['OTEL_METRICS_EXPORTER', 'DD_RUNTIME_METRICS_ENABLED'],
43
+ ['OTEL_RESOURCE_ATTRIBUTES', 'DD_TAGS'],
44
+ ['OTEL_SDK_DISABLED', 'DD_TRACE_OTEL_ENABLED'],
45
+ ['OTEL_LOGS_EXPORTER', undefined],
46
+ ])
73
47
  const VALID_PROPAGATION_STYLES = new Set(['datadog', 'tracecontext', 'b3', 'b3 single header', 'none'])
74
-
75
48
  const VALID_PROPAGATION_BEHAVIOR_EXTRACT = new Set(['continue', 'restart', 'ignore'])
76
-
77
49
  const VALID_LOG_LEVELS = new Set(['debug', 'info', 'warn', 'error'])
78
-
79
50
  const DEFAULT_OTLP_PORT = 4318
51
+ const RUNTIME_ID = uuid()
52
+ const NAMING_VERSIONS = new Set(['v0', 'v1'])
53
+ const DEFAULT_NAMING_VERSION = 'v0'
80
54
 
81
- function getFromOtelSamplerMap (otelTracesSampler, otelTracesSamplerArg) {
82
- const OTEL_TRACES_SAMPLER_MAPPING = {
83
- always_on: '1.0',
84
- always_off: '0.0',
85
- traceidratio: otelTracesSamplerArg,
86
- parentbased_always_on: '1.0',
87
- parentbased_always_off: '0.0',
88
- parentbased_traceidratio: otelTracesSamplerArg
89
- }
90
- return OTEL_TRACES_SAMPLER_MAPPING[otelTracesSampler]
91
- }
92
-
93
- /**
94
- * Validate the type of an environment variable
95
- * @param {string} envVar - The name of the environment variable
96
- * @param {string} [value] - The value of the environment variable
97
- * @returns {boolean} - True if the value is valid, false otherwise
98
- */
99
- function isInvalidOtelEnvironmentVariable (envVar, value) {
100
- // Skip validation if the value is undefined (it was not set as environment variable)
101
- if (value === undefined) return false
102
-
103
- switch (envVar) {
104
- case 'OTEL_LOG_LEVEL':
105
- return !VALID_LOG_LEVELS.has(value)
106
- case 'OTEL_PROPAGATORS':
107
- case 'OTEL_RESOURCE_ATTRIBUTES':
108
- case 'OTEL_SERVICE_NAME':
109
- return typeof value !== 'string'
110
- case 'OTEL_TRACES_SAMPLER':
111
- return getFromOtelSamplerMap(value, getEnv('OTEL_TRACES_SAMPLER_ARG')) === undefined
112
- case 'OTEL_TRACES_SAMPLER_ARG':
113
- return Number.isNaN(Number.parseFloat(value))
114
- case 'OTEL_SDK_DISABLED':
115
- return value.toLowerCase() !== 'true' && value.toLowerCase() !== 'false'
116
- case 'OTEL_TRACES_EXPORTER':
117
- case 'OTEL_METRICS_EXPORTER':
118
- case 'OTEL_LOGS_EXPORTER':
119
- return value.toLowerCase() !== 'none'
120
- default:
121
- return true
122
- }
123
- }
124
-
125
- function checkIfBothOtelAndDdEnvVarSet () {
126
- for (const [otelEnvVar, ddEnvVar] of Object.entries(otelDdEnvMapping)) {
127
- const otelValue = getEnv(otelEnvVar)
128
-
129
- if (ddEnvVar && getEnv(ddEnvVar) && otelValue) {
130
- log.warn('both %s and %s environment variables are set', ddEnvVar, otelEnvVar)
131
- getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
132
- }
133
-
134
- if (isInvalidOtelEnvironmentVariable(otelEnvVar, otelValue)) {
135
- log.warn('unexpected value %s for %s environment variable', otelValue, otelEnvVar)
136
- getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
137
- }
138
- }
139
- }
140
-
141
- const runtimeId = uuid()
142
-
143
- function maybeFile (filepath) {
144
- if (!filepath) return
145
- try {
146
- return fs.readFileSync(filepath, 'utf8')
147
- } catch (e) {
148
- log.error('Error reading file %s', filepath, e)
149
- }
150
- }
151
-
152
- function maybeJsonFile (filepath) {
153
- const file = maybeFile(filepath)
154
- if (!file) return
155
- try {
156
- return JSON.parse(file)
157
- } catch (e) {
158
- log.error('Error parsing JSON file %s', filepath, e)
159
- }
160
- }
161
-
162
- function safeJsonParse (input) {
163
- try {
164
- return JSON.parse(input)
165
- } catch {}
166
- }
167
-
168
- const namingVersions = new Set(['v0', 'v1'])
169
- const defaultNamingVersion = 'v0'
170
-
171
- function validateNamingVersion (versionString) {
172
- if (!versionString) {
173
- return defaultNamingVersion
174
- }
175
- if (!namingVersions.has(versionString)) {
176
- log.warn('Unexpected input for config.spanAttributeSchema, picked default', defaultNamingVersion)
177
- return defaultNamingVersion
178
- }
179
- return versionString
180
- }
181
-
182
- /**
183
- * Given a string of comma-separated paths, return the array of paths.
184
- * If a blank path is provided a null is returned to signal that the feature is disabled.
185
- * An empty array means the feature is enabled but that no rules need to be applied.
186
- *
187
- * @param {string | string[]} input
188
- */
189
- function splitJSONPathRules (input) {
190
- if (!input || input === '$') return
191
- if (Array.isArray(input)) return input
192
- if (input === 'all') return []
193
- return input.split(',')
194
- }
195
-
196
- // Shallow clone with property name remapping
197
- function remapify (input, mappings) {
198
- if (!input) return
199
- const output = {}
200
- for (const [key, value] of Object.entries(input)) {
201
- output[key in mappings ? mappings[key] : key] = value
202
- }
203
- return output
204
- }
205
-
206
- /**
207
- * Normalizes propagation style values to a lowercase array.
208
- * Handles both string (comma-separated) and array inputs.
209
- */
210
- function normalizePropagationStyle (value) {
211
- if (Array.isArray(value)) {
212
- return value.map(v => v.toLowerCase())
213
- }
214
- if (typeof value === 'string') {
215
- return value.split(',')
216
- .filter(v => v !== '')
217
- .map(v => v.trim().toLowerCase())
218
- }
219
- if (value !== undefined) {
220
- log.warn('Unexpected input for config.tracePropagationStyle')
221
- }
222
- }
55
+ const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
56
+ const changeTracker = {}
223
57
 
224
- /**
225
- * Warns if both DD_TRACE_PROPAGATION_STYLE and specific inject/extract vars are set.
226
- */
227
- function warnIfPropagationStyleConflict (general, inject, extract) {
228
- if (general && (inject || extract)) {
229
- log.warn(
230
- // eslint-disable-next-line @stylistic/max-len
231
- 'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
232
- )
233
- }
234
- }
58
+ let configInstance = null
235
59
 
236
- function reformatSpanSamplingRules (rules) {
237
- if (!rules) return rules
238
- return rules.map(rule => {
239
- return remapify(rule, {
240
- sample_rate: 'sampleRate',
241
- max_per_second: 'maxPerSecond'
242
- })
243
- })
244
- }
60
+ module.exports = getConfig
245
61
 
246
62
  class Config {
247
63
  /**
@@ -249,7 +65,6 @@ class Config {
249
65
  * @type {Record<string, string> | undefined}
250
66
  */
251
67
  #parsedDdTags = {}
252
-
253
68
  #envUnprocessed = {}
254
69
  #optsUnprocessed = {}
255
70
  #remoteUnprocessed = {}
@@ -262,32 +77,20 @@ class Config {
262
77
  #fleetStableConfig = {}
263
78
  #calculated = {}
264
79
 
265
- #getSourcesInOrder () {
266
- return [
267
- { container: this.#remote, origin: 'remote_config', unprocessed: this.#remoteUnprocessed },
268
- { container: this.#options, origin: 'code', unprocessed: this.#optsUnprocessed },
269
- { container: this.#fleetStableConfig, origin: 'fleet_stable_config' },
270
- { container: this.#env, origin: 'env_var', unprocessed: this.#envUnprocessed },
271
- { container: this.#localStableConfig, origin: 'local_stable_config' },
272
- { container: this.#calculated, origin: 'calculated' },
273
- { container: this.#defaults, origin: 'default' }
274
- ]
275
- }
276
-
277
80
  constructor (options = {}) {
278
- if (!isInServerlessEnvironment()) {
81
+ if (!IS_SERVERLESS) {
279
82
  const configEnvSources = getStableConfigSources()
280
83
  this.stableConfig = {
281
84
  fleetEntries: configEnvSources.fleetStableConfig,
282
85
  localEntries: configEnvSources.localStableConfig,
283
- warnings: configEnvSources.stableConfigWarnings
86
+ warnings: configEnvSources.stableConfigWarnings,
284
87
  }
285
88
  }
286
89
 
287
90
  options = {
288
91
  ...options,
289
92
  appsec: options.appsec == null ? options.experimental?.appsec : options.appsec,
290
- iast: options.iast == null ? options.experimental?.iast : options.iast
93
+ iast: options.iast == null ? options.experimental?.iast : options.iast,
291
94
  }
292
95
 
293
96
  // Configure the logger first so it can be used to warn about other configs
@@ -314,13 +117,13 @@ class Config {
314
117
 
315
118
  if (typeof options.appsec === 'boolean') {
316
119
  options.appsec = {
317
- enabled: options.appsec
120
+ enabled: options.appsec,
318
121
  }
319
122
  }
320
123
 
321
124
  if (typeof options.runtimeMetrics === 'boolean') {
322
125
  options.runtimeMetrics = {
323
- enabled: options.runtimeMetrics
126
+ enabled: options.runtimeMetrics,
324
127
  }
325
128
  }
326
129
 
@@ -337,12 +140,12 @@ class Config {
337
140
  service: this.service,
338
141
  env: this.env,
339
142
  version: this.version,
340
- 'runtime-id': runtimeId
143
+ 'runtime-id': RUNTIME_ID,
341
144
  })
342
145
 
343
146
  if (this.isCiVisibility) {
344
147
  tagger.add(this.tags, {
345
- [ORIGIN_KEY]: 'ciapp-test'
148
+ [ORIGIN_KEY]: 'ciapp-test',
346
149
  })
347
150
  }
348
151
 
@@ -391,19 +194,25 @@ class Config {
391
194
  this.#merge()
392
195
  }
393
196
 
394
- #getDefaultPropagationStyle (options) {
395
- // TODO: Remove the experimental env vars as a major?
396
- const DD_TRACE_B3_ENABLED = options.experimental?.b3 ??
397
- getEnv('DD_TRACE_EXPERIMENTAL_B3_ENABLED')
398
- const defaultPropagationStyle = ['datadog', 'tracecontext']
399
- if (isTrue(DD_TRACE_B3_ENABLED)) {
400
- defaultPropagationStyle.push('b3', 'b3 single header')
197
+ getOrigin (name) {
198
+ for (const { container, origin } of this.#getSourcesInOrder()) {
199
+ const value = container[name]
200
+ if (value != null || container === this.#defaults) {
201
+ return origin
202
+ }
401
203
  }
402
- return defaultPropagationStyle
403
204
  }
404
205
 
405
- _isInServerlessEnvironment () {
406
- return isInServerlessEnvironment()
206
+ #getSourcesInOrder () {
207
+ return [
208
+ { container: this.#remote, origin: 'remote_config', unprocessed: this.#remoteUnprocessed },
209
+ { container: this.#options, origin: 'code', unprocessed: this.#optsUnprocessed },
210
+ { container: this.#fleetStableConfig, origin: 'fleet_stable_config' },
211
+ { container: this.#env, origin: 'env_var', unprocessed: this.#envUnprocessed },
212
+ { container: this.#localStableConfig, origin: 'local_stable_config' },
213
+ { container: this.#calculated, origin: 'calculated' },
214
+ { container: this.#defaults, origin: 'default' },
215
+ ]
407
216
  }
408
217
 
409
218
  #applyStableConfig (config, obj) {
@@ -414,17 +223,17 @@ class Config {
414
223
  #applyDefaults () {
415
224
  const defaults = this.#defaults
416
225
 
417
- if (isInServerlessEnvironment()) {
418
- this.#setBoolean(defaults, 'crashtracking.enabled', false)
419
- this.#setString(defaults, 'profiling.enabled', 'false')
420
- this.#setBoolean(defaults, 'telemetry.enabled', false)
421
- this.#setBoolean(defaults, 'remoteConfig.enabled', false)
226
+ if (IS_SERVERLESS) {
227
+ setBoolean(defaults, 'crashtracking.enabled', false)
228
+ setString(defaults, 'profiling.enabled', 'false')
229
+ setBoolean(defaults, 'telemetry.enabled', false)
230
+ setBoolean(defaults, 'remoteConfig.enabled', false)
422
231
  } else {
423
- this.#setBoolean(defaults, 'crashtracking.enabled', true)
232
+ setBoolean(defaults, 'crashtracking.enabled', true)
424
233
  }
425
234
 
426
235
  if (getEnv('JEST_WORKER_ID')) {
427
- this.#setBoolean(defaults, 'telemetry.enabled', false)
236
+ setBoolean(defaults, 'telemetry.enabled', false)
428
237
  }
429
238
  }
430
239
 
@@ -600,6 +409,7 @@ class Config {
600
409
  OTEL_TRACES_SAMPLER,
601
410
  OTEL_TRACES_SAMPLER_ARG,
602
411
  DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED,
412
+ DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS,
603
413
  OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
604
414
  OTEL_EXPORTER_OTLP_LOGS_HEADERS,
605
415
  OTEL_EXPORTER_OTLP_LOGS_PROTOCOL,
@@ -618,7 +428,7 @@ class Config {
618
428
  OTEL_BSP_MAX_EXPORT_BATCH_SIZE,
619
429
  OTEL_BSP_MAX_QUEUE_SIZE,
620
430
  OTEL_METRIC_EXPORT_INTERVAL,
621
- NX_TASK_TARGET_PROJECT
431
+ NX_TASK_TARGET_PROJECT,
622
432
  } = source
623
433
 
624
434
  const tags = {}
@@ -631,20 +441,20 @@ class Config {
631
441
  tagger.add(tags, DD_TRACE_TAGS)
632
442
  tagger.add(tags, DD_TRACE_GLOBAL_TAGS)
633
443
 
634
- this.#setString(target, 'apiKey', DD_API_KEY)
635
- this.#setBoolean(target, 'otelLogsEnabled', DD_LOGS_OTEL_ENABLED)
444
+ setString(target, 'apiKey', DD_API_KEY)
445
+ setBoolean(target, 'otelLogsEnabled', DD_LOGS_OTEL_ENABLED)
636
446
  // Set OpenTelemetry logs configuration with specific _LOGS_ vars taking precedence over generic _EXPORTERS_ vars
637
447
  if (OTEL_EXPORTER_OTLP_ENDPOINT) {
638
448
  // Only set if there's a custom URL, otherwise let calc phase handle the default
639
- this.#setString(target, 'otelUrl', OTEL_EXPORTER_OTLP_ENDPOINT)
449
+ setString(target, 'otelUrl', OTEL_EXPORTER_OTLP_ENDPOINT)
640
450
  }
641
451
  if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_LOGS_ENDPOINT) {
642
- this.#setString(target, 'otelLogsUrl', OTEL_EXPORTER_OTLP_LOGS_ENDPOINT || target.otelUrl)
452
+ setString(target, 'otelLogsUrl', OTEL_EXPORTER_OTLP_LOGS_ENDPOINT || target.otelUrl)
643
453
  }
644
- this.#setString(target, 'otelHeaders', OTEL_EXPORTER_OTLP_HEADERS)
645
- this.#setString(target, 'otelLogsHeaders', OTEL_EXPORTER_OTLP_LOGS_HEADERS || target.otelHeaders)
646
- this.#setString(target, 'otelProtocol', OTEL_EXPORTER_OTLP_PROTOCOL)
647
- this.#setString(target, 'otelLogsProtocol', OTEL_EXPORTER_OTLP_LOGS_PROTOCOL || target.otelProtocol)
454
+ setString(target, 'otelHeaders', OTEL_EXPORTER_OTLP_HEADERS)
455
+ setString(target, 'otelLogsHeaders', OTEL_EXPORTER_OTLP_LOGS_HEADERS || target.otelHeaders)
456
+ setString(target, 'otelProtocol', OTEL_EXPORTER_OTLP_PROTOCOL)
457
+ setString(target, 'otelLogsProtocol', OTEL_EXPORTER_OTLP_LOGS_PROTOCOL || target.otelProtocol)
648
458
  const otelTimeout = nonNegInt(OTEL_EXPORTER_OTLP_TIMEOUT, 'OTEL_EXPORTER_OTLP_TIMEOUT')
649
459
  if (otelTimeout !== undefined) {
650
460
  target.otelTimeout = otelTimeout
@@ -659,7 +469,7 @@ class Config {
659
469
  target.otelMaxQueueSize = nonNegInt(OTEL_BSP_MAX_QUEUE_SIZE, 'OTEL_BSP_MAX_QUEUE_SIZE', false)
660
470
 
661
471
  const otelMetricsExporterEnabled = OTEL_METRICS_EXPORTER?.toLowerCase() !== 'none'
662
- this.#setBoolean(
472
+ setBoolean(
663
473
  target,
664
474
  'otelMetricsEnabled',
665
475
  DD_METRICS_OTEL_ENABLED && isTrue(DD_METRICS_OTEL_ENABLED) && otelMetricsExporterEnabled
@@ -667,10 +477,10 @@ class Config {
667
477
  // Set OpenTelemetry metrics configuration with specific _METRICS_ vars
668
478
  // taking precedence over generic _EXPORTERS_ vars
669
479
  if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_METRICS_ENDPOINT) {
670
- this.#setString(target, 'otelMetricsUrl', OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || target.otelUrl)
480
+ setString(target, 'otelMetricsUrl', OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || target.otelUrl)
671
481
  }
672
- this.#setString(target, 'otelMetricsHeaders', OTEL_EXPORTER_OTLP_METRICS_HEADERS || target.otelHeaders)
673
- this.#setString(target, 'otelMetricsProtocol', OTEL_EXPORTER_OTLP_METRICS_PROTOCOL || target.otelProtocol)
482
+ setString(target, 'otelMetricsHeaders', OTEL_EXPORTER_OTLP_METRICS_HEADERS || target.otelHeaders)
483
+ setString(target, 'otelMetricsProtocol', OTEL_EXPORTER_OTLP_METRICS_PROTOCOL || target.otelProtocol)
674
484
  const otelMetricsTimeout = nonNegInt(OTEL_EXPORTER_OTLP_METRICS_TIMEOUT, 'OTEL_EXPORTER_OTLP_METRICS_TIMEOUT')
675
485
  target.otelMetricsTimeout = otelMetricsTimeout === undefined ? target.otelTimeout : otelMetricsTimeout
676
486
  target.otelMetricsExportTimeout = nonNegInt(OTEL_METRIC_EXPORT_TIMEOUT, 'OTEL_METRIC_EXPORT_TIMEOUT')
@@ -680,20 +490,20 @@ class Config {
680
490
  if (OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE) {
681
491
  const temporalityPref = OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.toUpperCase()
682
492
  if (['DELTA', 'CUMULATIVE', 'LOWMEMORY'].includes(temporalityPref)) {
683
- this.#setString(target, 'otelMetricsTemporalityPreference', temporalityPref)
493
+ setString(target, 'otelMetricsTemporalityPreference', temporalityPref)
684
494
  }
685
495
  }
686
- this.#setBoolean(
496
+ setBoolean(
687
497
  target,
688
498
  'apmTracingEnabled',
689
499
  DD_APM_TRACING_ENABLED ??
690
500
  (DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED))
691
501
  )
692
- this.#setBoolean(target, 'propagateProcessTags.enabled', DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED)
693
- this.#setString(target, 'appKey', DD_APP_KEY)
694
- this.#setBoolean(target, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
502
+ setBoolean(target, 'propagateProcessTags.enabled', DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED)
503
+ setString(target, 'appKey', DD_APP_KEY)
504
+ setBoolean(target, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
695
505
  target['appsec.apiSecurity.sampleDelay'] = maybeFloat(DD_API_SECURITY_SAMPLE_DELAY)
696
- this.#setBoolean(target, 'appsec.apiSecurity.endpointCollectionEnabled',
506
+ setBoolean(target, 'appsec.apiSecurity.endpointCollectionEnabled',
697
507
  DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED)
698
508
  target['appsec.apiSecurity.endpointCollectionMessageLimit'] =
699
509
  maybeInt(DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT)
@@ -702,28 +512,28 @@ class Config {
702
512
  unprocessedTarget['appsec.blockedTemplateHtml'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML
703
513
  target['appsec.blockedTemplateJson'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON)
704
514
  unprocessedTarget['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
705
- this.#setBoolean(target, 'appsec.enabled', DD_APPSEC_ENABLED)
706
- this.#setString(target, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
515
+ setBoolean(target, 'appsec.enabled', DD_APPSEC_ENABLED)
516
+ setString(target, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
707
517
  // TODO appsec.extendedHeadersCollection are deprecated, to delete in a major
708
- this.#setBoolean(target, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
709
- this.#setBoolean(
518
+ setBoolean(target, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
519
+ setBoolean(
710
520
  target,
711
521
  'appsec.extendedHeadersCollection.redaction',
712
522
  DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
713
523
  )
714
524
  target['appsec.extendedHeadersCollection.maxHeaders'] = maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS)
715
525
  unprocessedTarget['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
716
- this.#setString(target, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
717
- this.#setString(target, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
718
- this.#setBoolean(target, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
526
+ setString(target, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
527
+ setString(target, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
528
+ setBoolean(target, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
719
529
  // TODO Deprecated, to delete in a major
720
- this.#setBoolean(target, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
530
+ setBoolean(target, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
721
531
  target['appsec.rateLimit'] = maybeInt(DD_APPSEC_TRACE_RATE_LIMIT)
722
532
  unprocessedTarget['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
723
- this.#setString(target, 'appsec.rules', DD_APPSEC_RULES)
533
+ setString(target, 'appsec.rules', DD_APPSEC_RULES)
724
534
  // DD_APPSEC_SCA_ENABLED is never used locally, but only sent to the backend
725
- this.#setBoolean(target, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
726
- this.#setBoolean(target, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
535
+ setBoolean(target, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
536
+ setBoolean(target, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
727
537
  target['appsec.stackTrace.maxDepth'] = maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH)
728
538
  unprocessedTarget['appsec.stackTrace.maxDepth'] = DD_APPSEC_MAX_STACK_TRACE_DEPTH
729
539
  target['appsec.stackTrace.maxStackTraces'] = maybeInt(DD_APPSEC_MAX_STACK_TRACES)
@@ -733,14 +543,14 @@ class Config {
733
543
  target.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
734
544
  target.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
735
545
  target.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
736
- this.#setBoolean(target, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
737
- this.#setString(target, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
546
+ setBoolean(target, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
547
+ setString(target, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
738
548
  if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING || DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
739
549
  if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING) {
740
- this.#setBoolean(target, 'cloudPayloadTagging.requestsEnabled', true)
550
+ setBoolean(target, 'cloudPayloadTagging.requestsEnabled', true)
741
551
  }
742
552
  if (DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
743
- this.#setBoolean(target, 'cloudPayloadTagging.responsesEnabled', true)
553
+ setBoolean(target, 'cloudPayloadTagging.responsesEnabled', true)
744
554
  }
745
555
  target['cloudPayloadTagging.rules'] = appendRules(
746
556
  splitJSONPathRules(DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING),
@@ -750,24 +560,24 @@ class Config {
750
560
  if (DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH) {
751
561
  target['cloudPayloadTagging.maxDepth'] = maybeInt(DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH)
752
562
  }
753
- this.#setBoolean(target, 'crashtracking.enabled', DD_CRASHTRACKING_ENABLED)
754
- this.#setBoolean(target, 'codeOriginForSpans.enabled', DD_CODE_ORIGIN_FOR_SPANS_ENABLED)
755
- this.#setBoolean(
563
+ setBoolean(target, 'crashtracking.enabled', DD_CRASHTRACKING_ENABLED)
564
+ setBoolean(target, 'codeOriginForSpans.enabled', DD_CODE_ORIGIN_FOR_SPANS_ENABLED)
565
+ setBoolean(
756
566
  target,
757
567
  'codeOriginForSpans.experimental.exit_spans.enabled',
758
568
  DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
759
569
  )
760
- this.#setString(target, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
761
- this.#setString(target, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
762
- this.#setString(target, 'dogstatsd.port', DD_DOGSTATSD_PORT)
763
- this.#setBoolean(target, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
570
+ setString(target, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
571
+ setString(target, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
572
+ setString(target, 'dogstatsd.port', DD_DOGSTATSD_PORT)
573
+ setBoolean(target, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
764
574
  target['dynamicInstrumentation.captureTimeoutMs'] = maybeInt(DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS)
765
575
  unprocessedTarget['dynamicInstrumentation.captureTimeoutMs'] = DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS
766
- this.#setBoolean(target, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
767
- this.#setString(target, 'dynamicInstrumentation.probeFile', DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE)
768
- this.#setArray(target, 'dynamicInstrumentation.redactedIdentifiers',
576
+ setBoolean(target, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
577
+ setString(target, 'dynamicInstrumentation.probeFile', DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE)
578
+ setArray(target, 'dynamicInstrumentation.redactedIdentifiers',
769
579
  DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS)
770
- this.#setArray(
580
+ setArray(
771
581
  target,
772
582
  'dynamicInstrumentation.redactionExcludedIdentifiers',
773
583
  DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
@@ -775,19 +585,27 @@ class Config {
775
585
  target['dynamicInstrumentation.uploadIntervalSeconds'] =
776
586
  maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
777
587
  unprocessedTarget['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
778
- this.#setString(target, 'env', DD_ENV || tags.env)
779
- this.#setBoolean(target, 'experimental.flaggingProvider.enabled', DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED)
780
- this.#setBoolean(target, 'traceEnabled', DD_TRACE_ENABLED)
781
- this.#setBoolean(target, 'experimental.aiguard.enabled', DD_AI_GUARD_ENABLED)
782
- this.#setString(target, 'experimental.aiguard.endpoint', DD_AI_GUARD_ENDPOINT)
588
+ setString(target, 'env', DD_ENV || tags.env)
589
+ setBoolean(
590
+ target,
591
+ 'experimental.flaggingProvider.enabled',
592
+ DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
593
+ )
594
+ if (DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS != null) {
595
+ target['experimental.flaggingProvider.initializationTimeoutMs'] =
596
+ maybeInt(DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS)
597
+ }
598
+ setBoolean(target, 'traceEnabled', DD_TRACE_ENABLED)
599
+ setBoolean(target, 'experimental.aiguard.enabled', DD_AI_GUARD_ENABLED)
600
+ setString(target, 'experimental.aiguard.endpoint', DD_AI_GUARD_ENDPOINT)
783
601
  target['experimental.aiguard.maxContentSize'] = maybeInt(DD_AI_GUARD_MAX_CONTENT_SIZE)
784
602
  unprocessedTarget['experimental.aiguard.maxContentSize'] = DD_AI_GUARD_MAX_CONTENT_SIZE
785
603
  target['experimental.aiguard.maxMessagesLength'] = maybeInt(DD_AI_GUARD_MAX_MESSAGES_LENGTH)
786
604
  unprocessedTarget['experimental.aiguard.maxMessagesLength'] = DD_AI_GUARD_MAX_MESSAGES_LENGTH
787
605
  target['experimental.aiguard.timeout'] = maybeInt(DD_AI_GUARD_TIMEOUT)
788
606
  unprocessedTarget['experimental.aiguard.timeout'] = DD_AI_GUARD_TIMEOUT
789
- this.#setBoolean(target, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
790
- this.#setString(target, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
607
+ setBoolean(target, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
608
+ setString(target, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
791
609
  if (AWS_LAMBDA_FUNCTION_NAME) {
792
610
  target.flushInterval = 0
793
611
  } else if (DD_TRACE_FLUSH_INTERVAL) {
@@ -795,54 +613,54 @@ class Config {
795
613
  }
796
614
  target.flushMinSpans = maybeInt(DD_TRACE_PARTIAL_FLUSH_MIN_SPANS)
797
615
  unprocessedTarget.flushMinSpans = DD_TRACE_PARTIAL_FLUSH_MIN_SPANS
798
- this.#setBoolean(target, 'gitMetadataEnabled', DD_TRACE_GIT_METADATA_ENABLED)
799
- this.#setIntegerRangeSet(target, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
800
- this.#setIntegerRangeSet(target, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
801
- this.#setArray(target, 'headerTags', DD_TRACE_HEADER_TAGS)
616
+ setBoolean(target, 'gitMetadataEnabled', DD_TRACE_GIT_METADATA_ENABLED)
617
+ setIntegerRangeSet(target, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
618
+ setIntegerRangeSet(target, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
619
+ setArray(target, 'headerTags', DD_TRACE_HEADER_TAGS)
802
620
  target['heapSnapshot.count'] = maybeInt(DD_HEAP_SNAPSHOT_COUNT)
803
- this.#setString(target, 'heapSnapshot.destination', DD_HEAP_SNAPSHOT_DESTINATION)
621
+ setString(target, 'heapSnapshot.destination', DD_HEAP_SNAPSHOT_DESTINATION)
804
622
  target['heapSnapshot.interval'] = maybeInt(DD_HEAP_SNAPSHOT_INTERVAL)
805
- this.#setString(target, 'hostname', DD_AGENT_HOST)
623
+ setString(target, 'hostname', DD_AGENT_HOST)
806
624
  target['iast.dbRowsToTaint'] = maybeInt(DD_IAST_DB_ROWS_TO_TAINT)
807
- this.#setBoolean(target, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
808
- this.#setBoolean(target, 'iast.enabled', DD_IAST_ENABLED)
625
+ setBoolean(target, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
626
+ setBoolean(target, 'iast.enabled', DD_IAST_ENABLED)
809
627
  target['iast.maxConcurrentRequests'] = maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS)
810
628
  unprocessedTarget['iast.maxConcurrentRequests'] = DD_IAST_MAX_CONCURRENT_REQUESTS
811
629
  target['iast.maxContextOperations'] = maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS)
812
630
  unprocessedTarget['iast.maxContextOperations'] = DD_IAST_MAX_CONTEXT_OPERATIONS
813
- this.#setBoolean(target, 'iast.redactionEnabled', DD_IAST_REDACTION_ENABLED && !isFalse(DD_IAST_REDACTION_ENABLED))
814
- this.#setString(target, 'iast.redactionNamePattern', DD_IAST_REDACTION_NAME_PATTERN)
815
- this.#setString(target, 'iast.redactionValuePattern', DD_IAST_REDACTION_VALUE_PATTERN)
631
+ setBoolean(target, 'iast.redactionEnabled', DD_IAST_REDACTION_ENABLED && !isFalse(DD_IAST_REDACTION_ENABLED))
632
+ setString(target, 'iast.redactionNamePattern', DD_IAST_REDACTION_NAME_PATTERN)
633
+ setString(target, 'iast.redactionValuePattern', DD_IAST_REDACTION_VALUE_PATTERN)
816
634
  const iastRequestSampling = maybeInt(DD_IAST_REQUEST_SAMPLING)
817
635
  if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
818
636
  target['iast.requestSampling'] = iastRequestSampling
819
637
  }
820
638
  unprocessedTarget['iast.requestSampling'] = DD_IAST_REQUEST_SAMPLING
821
- this.#setString(target, 'iast.securityControlsConfiguration', DD_IAST_SECURITY_CONTROLS_CONFIGURATION)
822
- this.#setString(target, 'iast.telemetryVerbosity', DD_IAST_TELEMETRY_VERBOSITY)
823
- this.#setBoolean(target, 'iast.stackTrace.enabled', DD_IAST_STACK_TRACE_ENABLED)
824
- this.#setString(target, 'installSignature.id', DD_INSTRUMENTATION_INSTALL_ID)
825
- this.#setString(target, 'installSignature.time', DD_INSTRUMENTATION_INSTALL_TIME)
826
- this.#setString(target, 'installSignature.type', DD_INSTRUMENTATION_INSTALL_TYPE)
827
- this.#setArray(target, 'injectionEnabled', DD_INJECTION_ENABLED)
639
+ setString(target, 'iast.securityControlsConfiguration', DD_IAST_SECURITY_CONTROLS_CONFIGURATION)
640
+ setString(target, 'iast.telemetryVerbosity', DD_IAST_TELEMETRY_VERBOSITY)
641
+ setBoolean(target, 'iast.stackTrace.enabled', DD_IAST_STACK_TRACE_ENABLED)
642
+ setString(target, 'installSignature.id', DD_INSTRUMENTATION_INSTALL_ID)
643
+ setString(target, 'installSignature.time', DD_INSTRUMENTATION_INSTALL_TIME)
644
+ setString(target, 'installSignature.type', DD_INSTRUMENTATION_INSTALL_TYPE)
645
+ setArray(target, 'injectionEnabled', DD_INJECTION_ENABLED)
828
646
  if (DD_INJECTION_ENABLED !== undefined) {
829
- this.#setString(target, 'instrumentationSource', DD_INJECTION_ENABLED ? 'ssi' : 'manual')
647
+ setString(target, 'instrumentationSource', DD_INJECTION_ENABLED ? 'ssi' : 'manual')
830
648
  }
831
- this.#setBoolean(target, 'injectForce', DD_INJECT_FORCE)
832
- this.#setBoolean(target, 'isAzureFunction', getIsAzureFunction())
833
- this.#setBoolean(target, 'isGCPFunction', getIsGCPFunction())
834
- this.#setBoolean(target, 'gcpPubSubPushSubscriptionEnabled', enableGCPPubSubPushSubscription())
649
+ setBoolean(target, 'injectForce', DD_INJECT_FORCE)
650
+ setBoolean(target, 'isAzureFunction', getIsAzureFunction())
651
+ setBoolean(target, 'isGCPFunction', getIsGCPFunction())
652
+ setBoolean(target, 'gcpPubSubPushSubscriptionEnabled', enableGCPPubSubPushSubscription())
835
653
  target['langchain.spanCharLimit'] = maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT)
836
654
  target['langchain.spanPromptCompletionSampleRate'] = maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
837
- this.#setBoolean(target, 'legacyBaggageEnabled', DD_TRACE_LEGACY_BAGGAGE_ENABLED)
838
- this.#setBoolean(target, 'llmobs.agentlessEnabled', DD_LLMOBS_AGENTLESS_ENABLED)
839
- this.#setBoolean(target, 'llmobs.enabled', DD_LLMOBS_ENABLED)
840
- this.#setString(target, 'llmobs.mlApp', DD_LLMOBS_ML_APP)
841
- this.#setBoolean(target, 'logInjection', DD_LOGS_INJECTION)
655
+ setBoolean(target, 'legacyBaggageEnabled', DD_TRACE_LEGACY_BAGGAGE_ENABLED)
656
+ setBoolean(target, 'llmobs.agentlessEnabled', DD_LLMOBS_AGENTLESS_ENABLED)
657
+ setBoolean(target, 'llmobs.enabled', DD_LLMOBS_ENABLED)
658
+ setString(target, 'llmobs.mlApp', DD_LLMOBS_ML_APP)
659
+ setBoolean(target, 'logInjection', DD_LOGS_INJECTION)
842
660
  // Requires an accompanying DD_APM_OBFUSCATION_MEMCACHED_KEEP_COMMAND=true in the agent
843
- this.#setBoolean(target, 'memcachedCommandEnabled', DD_TRACE_MEMCACHED_COMMAND_ENABLED)
844
- this.#setBoolean(target, 'middlewareTracingEnabled', DD_TRACE_MIDDLEWARE_TRACING_ENABLED)
845
- this.#setBoolean(target, 'openAiLogsEnabled', DD_OPENAI_LOGS_ENABLED)
661
+ setBoolean(target, 'memcachedCommandEnabled', DD_TRACE_MEMCACHED_COMMAND_ENABLED)
662
+ setBoolean(target, 'middlewareTracingEnabled', DD_TRACE_MIDDLEWARE_TRACING_ENABLED)
663
+ setBoolean(target, 'openAiLogsEnabled', DD_OPENAI_LOGS_ENABLED)
846
664
  target['openai.spanCharLimit'] = maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT)
847
665
  unprocessedTarget.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
848
666
  if (DD_TRACE_PEER_SERVICE_MAPPING) {
@@ -851,44 +669,44 @@ class Config {
851
669
  )
852
670
  unprocessedTarget.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
853
671
  }
854
- this.#setString(target, 'port', DD_TRACE_AGENT_PORT)
672
+ setString(target, 'port', DD_TRACE_AGENT_PORT)
855
673
  const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
856
- this.#setString(target, 'profiling.enabled', profilingEnabled)
857
- this.#setString(target, 'profiling.exporters', DD_PROFILING_EXPORTERS)
858
- this.#setBoolean(target, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
674
+ setString(target, 'profiling.enabled', profilingEnabled)
675
+ setString(target, 'profiling.exporters', DD_PROFILING_EXPORTERS)
676
+ setBoolean(target, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
859
677
  if (DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD) {
860
678
  // This is only used in testing to not have to wait 30s
861
679
  target['profiling.longLivedThreshold'] = Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD)
862
680
  }
863
681
 
864
- this.#setString(target, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
865
- this.#setString(target, 'queryStringObfuscation', DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP)
866
- this.#setBoolean(target, 'remoteConfig.enabled', DD_REMOTE_CONFIGURATION_ENABLED)
682
+ setString(target, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
683
+ setString(target, 'queryStringObfuscation', DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP)
684
+ setBoolean(target, 'remoteConfig.enabled', DD_REMOTE_CONFIGURATION_ENABLED)
867
685
  target['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
868
686
  unprocessedTarget['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
869
- this.#setBoolean(target, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
687
+ setBoolean(target, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
870
688
  if (DD_TRACE_RESOURCE_RENAMING_ENABLED !== undefined) {
871
- this.#setBoolean(target, 'resourceRenamingEnabled', DD_TRACE_RESOURCE_RENAMING_ENABLED)
689
+ setBoolean(target, 'resourceRenamingEnabled', DD_TRACE_RESOURCE_RENAMING_ENABLED)
872
690
  }
873
691
  // only used to explicitly set runtimeMetrics to false
874
692
  const otelSetRuntimeMetrics = String(OTEL_METRICS_EXPORTER).toLowerCase() === 'none'
875
693
  ? false
876
694
  : undefined
877
- this.#setBoolean(target, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
695
+ setBoolean(target, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
878
696
  otelSetRuntimeMetrics)
879
- this.#setBoolean(target, 'runtimeMetrics.eventLoop', DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED)
880
- this.#setBoolean(target, 'runtimeMetrics.gc', DD_RUNTIME_METRICS_GC_ENABLED)
881
- this.#setBoolean(target, 'runtimeMetricsRuntimeId', DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED)
882
- this.#setArray(target, 'sampler.spanSamplingRules', reformatSpanSamplingRules(
697
+ setBoolean(target, 'runtimeMetrics.eventLoop', DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED)
698
+ setBoolean(target, 'runtimeMetrics.gc', DD_RUNTIME_METRICS_GC_ENABLED)
699
+ setBoolean(target, 'runtimeMetricsRuntimeId', DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED)
700
+ setArray(target, 'sampler.spanSamplingRules', reformatSpanSamplingRules(
883
701
  maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE) ??
884
702
  safeJsonParse(DD_SPAN_SAMPLING_RULES)
885
703
  ))
886
- this.#setUnit(target, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
704
+ setUnit(target, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
887
705
  getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
888
706
  target['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
889
- this.#setSamplingRule(target, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
707
+ setSamplingRule(target, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
890
708
  unprocessedTarget['sampler.rules'] = DD_TRACE_SAMPLING_RULES
891
- this.#setString(target, 'scope', DD_TRACE_SCOPE)
709
+ setString(target, 'scope', DD_TRACE_SCOPE)
892
710
  // Priority:
893
711
  // DD_SERVICE > tags.service > OTEL_SERVICE_NAME > NX_TASK_TARGET_PROJECT (if DD_ENABLE_NX_SERVICE_NAME) > default
894
712
  let serviceName = DD_SERVICE || tags.service || OTEL_SERVICE_NAME
@@ -898,57 +716,56 @@ class Config {
898
716
  } else if (DD_MAJOR < 6) {
899
717
  // Warn about v6 behavior change for Nx projects
900
718
  log.warn(
901
- 'NX_TASK_TARGET_PROJECT is set but no service name was configured. ' +
902
- 'In v6, NX_TASK_TARGET_PROJECT will be used as the default service name. ' +
903
- 'Set DD_ENABLE_NX_SERVICE_NAME=true to opt-in to this behavior now, or set a service name explicitly.'
719
+ // eslint-disable-next-line @stylistic/max-len
720
+ 'NX_TASK_TARGET_PROJECT is set but no service name was configured. In v6, NX_TASK_TARGET_PROJECT will be used as the default service name. Set DD_ENABLE_NX_SERVICE_NAME=true to opt-in to this behavior now, or set a service name explicitly.'
904
721
  )
905
722
  }
906
723
  }
907
- this.#setString(target, 'service', serviceName)
724
+ setString(target, 'service', serviceName)
908
725
  if (DD_SERVICE_MAPPING) {
909
726
  target.serviceMapping = Object.fromEntries(
910
727
  DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
911
728
  )
912
729
  }
913
- this.#setString(target, 'site', DD_SITE)
730
+ setString(target, 'site', DD_SITE)
914
731
  if (DD_TRACE_SPAN_ATTRIBUTE_SCHEMA) {
915
- this.#setString(target, 'spanAttributeSchema', validateNamingVersion(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA))
732
+ setString(target, 'spanAttributeSchema', validateNamingVersion(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA))
916
733
  unprocessedTarget.spanAttributeSchema = DD_TRACE_SPAN_ATTRIBUTE_SCHEMA
917
734
  }
918
735
  // 0: disabled, 1: logging, 2: garbage collection + logging
919
736
  target.spanLeakDebug = maybeInt(DD_TRACE_SPAN_LEAK_DEBUG)
920
- this.#setBoolean(target, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
921
- this.#setBoolean(target, 'startupLogs', DD_TRACE_STARTUP_LOGS)
922
- this.#setTags(target, 'tags', tags)
737
+ setBoolean(target, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
738
+ setBoolean(target, 'startupLogs', DD_TRACE_STARTUP_LOGS)
739
+ setTags(target, 'tags', tags)
923
740
  target.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
924
- this.#setBoolean(target, 'telemetry.enabled', DD_INSTRUMENTATION_TELEMETRY_ENABLED)
925
- this.#setString(target, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
926
- this.#setBoolean(target, 'telemetry.debug', DD_TELEMETRY_DEBUG)
927
- this.#setBoolean(target, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
741
+ setBoolean(target, 'telemetry.enabled', DD_INSTRUMENTATION_TELEMETRY_ENABLED)
742
+ setString(target, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
743
+ setBoolean(target, 'telemetry.debug', DD_TELEMETRY_DEBUG)
744
+ setBoolean(target, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
928
745
  target['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
929
746
  unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000
930
- this.#setBoolean(target, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
931
- this.#setBoolean(target, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
932
- this.#setBoolean(target, 'traceId128BitGenerationEnabled', DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED)
933
- this.#setBoolean(target, 'traceId128BitLoggingEnabled', DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED)
747
+ setBoolean(target, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
748
+ setBoolean(target, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
749
+ setBoolean(target, 'traceId128BitGenerationEnabled', DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED)
750
+ setBoolean(target, 'traceId128BitLoggingEnabled', DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED)
934
751
  warnIfPropagationStyleConflict(
935
752
  DD_TRACE_PROPAGATION_STYLE,
936
753
  DD_TRACE_PROPAGATION_STYLE_INJECT,
937
754
  DD_TRACE_PROPAGATION_STYLE_EXTRACT
938
755
  )
939
756
  if (DD_TRACE_PROPAGATION_STYLE !== undefined) {
940
- this.#setArray(target, 'tracePropagationStyle.inject', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
941
- this.#setArray(target, 'tracePropagationStyle.extract', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
757
+ setArray(target, 'tracePropagationStyle.inject', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
758
+ setArray(target, 'tracePropagationStyle.extract', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
942
759
  }
943
760
  if (DD_TRACE_PROPAGATION_STYLE_INJECT !== undefined) {
944
- this.#setArray(target, 'tracePropagationStyle.inject',
761
+ setArray(target, 'tracePropagationStyle.inject',
945
762
  normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_INJECT))
946
763
  }
947
764
  if (DD_TRACE_PROPAGATION_STYLE_EXTRACT !== undefined) {
948
- this.#setArray(target, 'tracePropagationStyle.extract',
765
+ setArray(target, 'tracePropagationStyle.extract',
949
766
  normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_EXTRACT))
950
767
  }
951
- this.#setBoolean(target, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
768
+ setBoolean(target, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
952
769
  if (DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT !== undefined) {
953
770
  const stringPropagationBehaviorExtract = String(DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT)
954
771
  target.tracePropagationBehaviorExtract =
@@ -964,7 +781,7 @@ class Config {
964
781
  const useDdStyle = DD_TRACE_PROPAGATION_STYLE ||
965
782
  DD_TRACE_PROPAGATION_STYLE_INJECT ||
966
783
  DD_TRACE_PROPAGATION_STYLE_EXTRACT
967
- this.#setBoolean(target, 'tracePropagationStyle.otelPropagators',
784
+ setBoolean(target, 'tracePropagationStyle.otelPropagators',
968
785
  useDdStyle ? false : !!OTEL_PROPAGATORS)
969
786
 
970
787
  // Use OTEL_PROPAGATORS if no DD-specific vars are set
@@ -979,21 +796,21 @@ class Config {
979
796
  }
980
797
  // Set inject/extract from OTEL_PROPAGATORS
981
798
  if (otelStyles) {
982
- this.#setArray(target, 'tracePropagationStyle.inject', otelStyles)
983
- this.#setArray(target, 'tracePropagationStyle.extract', otelStyles)
799
+ setArray(target, 'tracePropagationStyle.inject', otelStyles)
800
+ setArray(target, 'tracePropagationStyle.extract', otelStyles)
984
801
  }
985
802
  }
986
803
  }
987
- this.#setBoolean(target, 'traceWebsocketMessagesEnabled', DD_TRACE_WEBSOCKET_MESSAGES_ENABLED)
988
- this.#setBoolean(target, 'traceWebsocketMessagesInheritSampling', DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING)
989
- this.#setBoolean(target, 'traceWebsocketMessagesSeparateTraces', DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES)
990
- this.#setBoolean(target, 'tracing', DD_TRACING_ENABLED)
991
- this.#setString(target, 'version', DD_VERSION || tags.version)
992
- this.#setBoolean(target, 'inferredProxyServicesEnabled', DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED)
993
- this.#setBoolean(target, 'trace.aws.addSpanPointers', DD_TRACE_AWS_ADD_SPAN_POINTERS)
994
- this.#setString(target, 'trace.dynamoDb.tablePrimaryKeys', DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS)
995
- this.#setArray(target, 'graphqlErrorExtensions', DD_TRACE_GRAPHQL_ERROR_EXTENSIONS)
996
- this.#setBoolean(target, 'trace.nativeSpanEvents', DD_TRACE_NATIVE_SPAN_EVENTS)
804
+ setBoolean(target, 'traceWebsocketMessagesEnabled', DD_TRACE_WEBSOCKET_MESSAGES_ENABLED)
805
+ setBoolean(target, 'traceWebsocketMessagesInheritSampling', DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING)
806
+ setBoolean(target, 'traceWebsocketMessagesSeparateTraces', DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES)
807
+ setBoolean(target, 'tracing', DD_TRACING_ENABLED)
808
+ setString(target, 'version', DD_VERSION || tags.version)
809
+ setBoolean(target, 'inferredProxyServicesEnabled', DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED)
810
+ setBoolean(target, 'trace.aws.addSpanPointers', DD_TRACE_AWS_ADD_SPAN_POINTERS)
811
+ setString(target, 'trace.dynamoDb.tablePrimaryKeys', DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS)
812
+ setArray(target, 'graphqlErrorExtensions', DD_TRACE_GRAPHQL_ERROR_EXTENSIONS)
813
+ setBoolean(target, 'trace.nativeSpanEvents', DD_TRACE_NATIVE_SPAN_EVENTS)
997
814
  target['vertexai.spanPromptCompletionSampleRate'] = maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
998
815
  target['vertexai.spanCharLimit'] = maybeInt(DD_VERTEXAI_SPAN_CHAR_LIMIT)
999
816
  }
@@ -1006,11 +823,11 @@ class Config {
1006
823
 
1007
824
  tagger.add(tags, options.tags)
1008
825
 
1009
- this.#setBoolean(opts, 'apmTracingEnabled', options.apmTracingEnabled ??
826
+ setBoolean(opts, 'apmTracingEnabled', options.apmTracingEnabled ??
1010
827
  (options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled)
1011
828
  )
1012
- this.#setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
1013
- this.#setBoolean(opts, 'appsec.apiSecurity.endpointCollectionEnabled',
829
+ setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
830
+ setBoolean(opts, 'appsec.apiSecurity.endpointCollectionEnabled',
1014
831
  options.appsec?.apiSecurity?.endpointCollectionEnabled)
1015
832
  opts['appsec.apiSecurity.endpointCollectionMessageLimit'] =
1016
833
  maybeInt(options.appsec?.apiSecurity?.endpointCollectionMessageLimit)
@@ -1019,41 +836,41 @@ class Config {
1019
836
  this.#optsUnprocessed['appsec.blockedTemplateHtml'] = options.appsec?.blockedTemplateHtml
1020
837
  opts['appsec.blockedTemplateJson'] = maybeFile(options.appsec?.blockedTemplateJson)
1021
838
  this.#optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
1022
- this.#setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
1023
- this.#setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
1024
- this.#setBoolean(
839
+ setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
840
+ setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
841
+ setBoolean(
1025
842
  opts,
1026
843
  'appsec.extendedHeadersCollection.enabled',
1027
844
  options.appsec?.extendedHeadersCollection?.enabled
1028
845
  )
1029
- this.#setBoolean(
846
+ setBoolean(
1030
847
  opts,
1031
848
  'appsec.extendedHeadersCollection.redaction',
1032
849
  options.appsec?.extendedHeadersCollection?.redaction
1033
850
  )
1034
851
  opts['appsec.extendedHeadersCollection.maxHeaders'] = options.appsec?.extendedHeadersCollection?.maxHeaders
1035
- this.#setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
1036
- this.#setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
1037
- this.#setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
1038
- this.#setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
852
+ setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
853
+ setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
854
+ setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
855
+ setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
1039
856
  opts['appsec.rateLimit'] = maybeInt(options.appsec?.rateLimit)
1040
857
  this.#optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
1041
- this.#setString(opts, 'appsec.rules', options.appsec?.rules)
1042
- this.#setBoolean(opts, 'appsec.stackTrace.enabled', options.appsec?.stackTrace?.enabled)
858
+ setString(opts, 'appsec.rules', options.appsec?.rules)
859
+ setBoolean(opts, 'appsec.stackTrace.enabled', options.appsec?.stackTrace?.enabled)
1043
860
  opts['appsec.stackTrace.maxDepth'] = maybeInt(options.appsec?.stackTrace?.maxDepth)
1044
861
  this.#optsUnprocessed['appsec.stackTrace.maxDepth'] = options.appsec?.stackTrace?.maxDepth
1045
862
  opts['appsec.stackTrace.maxStackTraces'] = maybeInt(options.appsec?.stackTrace?.maxStackTraces)
1046
863
  this.#optsUnprocessed['appsec.stackTrace.maxStackTraces'] = options.appsec?.stackTrace?.maxStackTraces
1047
864
  opts['appsec.wafTimeout'] = maybeInt(options.appsec?.wafTimeout)
1048
865
  this.#optsUnprocessed['appsec.wafTimeout'] = options.appsec?.wafTimeout
1049
- this.#setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
1050
- this.#setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
866
+ setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
867
+ setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
1051
868
  if (options.cloudPayloadTagging?.request || options.cloudPayloadTagging?.response) {
1052
869
  if (options.cloudPayloadTagging.request) {
1053
- this.#setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', true)
870
+ setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', true)
1054
871
  }
1055
872
  if (options.cloudPayloadTagging.response) {
1056
- this.#setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', true)
873
+ setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', true)
1057
874
  }
1058
875
  opts['cloudPayloadTagging.rules'] = appendRules(
1059
876
  splitJSONPathRules(options.cloudPayloadTagging.request),
@@ -1061,37 +878,37 @@ class Config {
1061
878
  )
1062
879
  }
1063
880
  if (options.cloudPayloadTagging?.requestsEnabled !== undefined) {
1064
- this.#setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', options.cloudPayloadTagging.requestsEnabled)
881
+ setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', options.cloudPayloadTagging.requestsEnabled)
1065
882
  }
1066
883
  if (options.cloudPayloadTagging?.responsesEnabled !== undefined) {
1067
- this.#setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', options.cloudPayloadTagging.responsesEnabled)
884
+ setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', options.cloudPayloadTagging.responsesEnabled)
1068
885
  }
1069
886
  opts['cloudPayloadTagging.maxDepth'] = maybeInt(options.cloudPayloadTagging?.maxDepth)
1070
887
  opts.baggageMaxBytes = options.baggageMaxBytes
1071
888
  opts.baggageMaxItems = options.baggageMaxItems
1072
889
  opts.baggageTagKeys = options.baggageTagKeys
1073
- this.#setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
1074
- this.#setBoolean(
890
+ setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
891
+ setBoolean(
1075
892
  opts,
1076
893
  'codeOriginForSpans.experimental.exit_spans.enabled',
1077
894
  options.codeOriginForSpans?.experimental?.exit_spans?.enabled
1078
895
  )
1079
- this.#setString(opts, 'dbmPropagationMode', options.dbmPropagationMode)
896
+ setString(opts, 'dbmPropagationMode', options.dbmPropagationMode)
1080
897
  if (options.dogstatsd) {
1081
- this.#setString(opts, 'dogstatsd.hostname', options.dogstatsd.hostname)
1082
- this.#setString(opts, 'dogstatsd.port', options.dogstatsd.port)
898
+ setString(opts, 'dogstatsd.hostname', options.dogstatsd.hostname)
899
+ setString(opts, 'dogstatsd.port', options.dogstatsd.port)
1083
900
  }
1084
- this.#setBoolean(opts, 'dsmEnabled', options.dsmEnabled)
901
+ setBoolean(opts, 'dsmEnabled', options.dsmEnabled)
1085
902
  opts['dynamicInstrumentation.captureTimeoutMs'] = maybeInt(options.dynamicInstrumentation?.captureTimeoutMs)
1086
903
  this.#optsUnprocessed['dynamicInstrumentation.captureTimeoutMs'] = options.dynamicInstrumentation?.captureTimeoutMs
1087
- this.#setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamicInstrumentation?.enabled)
1088
- this.#setString(opts, 'dynamicInstrumentation.probeFile', options.dynamicInstrumentation?.probeFile)
1089
- this.#setArray(
904
+ setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamicInstrumentation?.enabled)
905
+ setString(opts, 'dynamicInstrumentation.probeFile', options.dynamicInstrumentation?.probeFile)
906
+ setArray(
1090
907
  opts,
1091
908
  'dynamicInstrumentation.redactedIdentifiers',
1092
909
  options.dynamicInstrumentation?.redactedIdentifiers
1093
910
  )
1094
- this.#setArray(
911
+ setArray(
1095
912
  opts,
1096
913
  'dynamicInstrumentation.redactionExcludedIdentifiers',
1097
914
  options.dynamicInstrumentation?.redactionExcludedIdentifiers
@@ -1100,35 +917,40 @@ class Config {
1100
917
  maybeFloat(options.dynamicInstrumentation?.uploadIntervalSeconds)
1101
918
  this.#optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
1102
919
  options.dynamicInstrumentation?.uploadIntervalSeconds
1103
- this.#setString(opts, 'env', options.env || tags.env)
1104
- this.#setBoolean(opts, 'experimental.aiguard.enabled', options.experimental?.aiguard?.enabled)
1105
- this.#setString(opts, 'experimental.aiguard.endpoint', options.experimental?.aiguard?.endpoint)
920
+ setString(opts, 'env', options.env || tags.env)
921
+ setBoolean(opts, 'experimental.aiguard.enabled', options.experimental?.aiguard?.enabled)
922
+ setString(opts, 'experimental.aiguard.endpoint', options.experimental?.aiguard?.endpoint)
1106
923
  opts['experimental.aiguard.maxMessagesLength'] = maybeInt(options.experimental?.aiguard?.maxMessagesLength)
1107
924
  this.#optsUnprocessed['experimental.aiguard.maxMessagesLength'] = options.experimental?.aiguard?.maxMessagesLength
1108
925
  opts['experimental.aiguard.maxContentSize'] = maybeInt(options.experimental?.aiguard?.maxContentSize)
1109
926
  this.#optsUnprocessed['experimental.aiguard.maxContentSize'] = options.experimental?.aiguard?.maxContentSize
1110
927
  opts['experimental.aiguard.timeout'] = maybeInt(options.experimental?.aiguard?.timeout)
1111
928
  this.#optsUnprocessed['experimental.aiguard.timeout'] = options.experimental?.aiguard?.timeout
1112
- this.#setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
1113
- this.#setString(opts, 'experimental.exporter', options.experimental?.exporter)
1114
- this.#setBoolean(opts, 'experimental.flaggingProvider.enabled', options.experimental?.flaggingProvider?.enabled)
929
+ setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
930
+ setString(opts, 'experimental.exporter', options.experimental?.exporter)
931
+ setBoolean(opts, 'experimental.flaggingProvider.enabled', options.experimental?.flaggingProvider?.enabled)
932
+ opts['experimental.flaggingProvider.initializationTimeoutMs'] = maybeInt(
933
+ options.experimental?.flaggingProvider?.initializationTimeoutMs
934
+ )
935
+ this.#optsUnprocessed['experimental.flaggingProvider.initializationTimeoutMs'] =
936
+ options.experimental?.flaggingProvider?.initializationTimeoutMs
1115
937
  opts.flushInterval = maybeInt(options.flushInterval)
1116
938
  this.#optsUnprocessed.flushInterval = options.flushInterval
1117
939
  opts.flushMinSpans = maybeInt(options.flushMinSpans)
1118
940
  this.#optsUnprocessed.flushMinSpans = options.flushMinSpans
1119
- this.#setArray(opts, 'headerTags', options.headerTags)
1120
- this.#setString(opts, 'hostname', options.hostname)
941
+ setArray(opts, 'headerTags', options.headerTags)
942
+ setString(opts, 'hostname', options.hostname)
1121
943
  opts['iast.dbRowsToTaint'] = maybeInt(options.iast?.dbRowsToTaint)
1122
- this.#setBoolean(opts, 'iast.deduplicationEnabled', options.iast && options.iast.deduplicationEnabled)
1123
- this.#setBoolean(opts, 'iast.enabled',
944
+ setBoolean(opts, 'iast.deduplicationEnabled', options.iast && options.iast.deduplicationEnabled)
945
+ setBoolean(opts, 'iast.enabled',
1124
946
  options.iast && (options.iast === true || options.iast.enabled === true))
1125
947
  opts['iast.maxConcurrentRequests'] = maybeInt(options.iast?.maxConcurrentRequests)
1126
948
  this.#optsUnprocessed['iast.maxConcurrentRequests'] = options.iast?.maxConcurrentRequests
1127
949
  opts['iast.maxContextOperations'] = maybeInt(options.iast?.maxContextOperations)
1128
950
  this.#optsUnprocessed['iast.maxContextOperations'] = options.iast?.maxContextOperations
1129
- this.#setBoolean(opts, 'iast.redactionEnabled', options.iast?.redactionEnabled)
1130
- this.#setString(opts, 'iast.redactionNamePattern', options.iast?.redactionNamePattern)
1131
- this.#setString(opts, 'iast.redactionValuePattern', options.iast?.redactionValuePattern)
951
+ setBoolean(opts, 'iast.redactionEnabled', options.iast?.redactionEnabled)
952
+ setString(opts, 'iast.redactionNamePattern', options.iast?.redactionNamePattern)
953
+ setString(opts, 'iast.redactionValuePattern', options.iast?.redactionValuePattern)
1132
954
  const iastRequestSampling = maybeInt(options.iast?.requestSampling)
1133
955
  if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
1134
956
  opts['iast.requestSampling'] = iastRequestSampling
@@ -1137,60 +959,60 @@ class Config {
1137
959
  if (DD_MAJOR < 6) {
1138
960
  opts['iast.securityControlsConfiguration'] = options.iast?.securityControlsConfiguration
1139
961
  }
1140
- this.#setBoolean(opts, 'iast.stackTrace.enabled', options.iast?.stackTrace?.enabled)
1141
- this.#setString(opts, 'iast.telemetryVerbosity', options.iast && options.iast.telemetryVerbosity)
1142
- this.#setBoolean(opts, 'isCiVisibility', options.isCiVisibility)
1143
- this.#setBoolean(opts, 'legacyBaggageEnabled', options.legacyBaggageEnabled)
1144
- this.#setBoolean(opts, 'llmobs.agentlessEnabled', options.llmobs?.agentlessEnabled)
1145
- this.#setString(opts, 'llmobs.mlApp', options.llmobs?.mlApp)
1146
- this.#setBoolean(opts, 'logInjection', options.logInjection)
962
+ setBoolean(opts, 'iast.stackTrace.enabled', options.iast?.stackTrace?.enabled)
963
+ setString(opts, 'iast.telemetryVerbosity', options.iast && options.iast.telemetryVerbosity)
964
+ setBoolean(opts, 'isCiVisibility', options.isCiVisibility)
965
+ setBoolean(opts, 'legacyBaggageEnabled', options.legacyBaggageEnabled)
966
+ setBoolean(opts, 'llmobs.agentlessEnabled', options.llmobs?.agentlessEnabled)
967
+ setString(opts, 'llmobs.mlApp', options.llmobs?.mlApp)
968
+ setBoolean(opts, 'logInjection', options.logInjection)
1147
969
  opts.lookup = options.lookup
1148
- this.#setBoolean(opts, 'middlewareTracingEnabled', options.middlewareTracingEnabled)
1149
- this.#setBoolean(opts, 'openAiLogsEnabled', options.openAiLogsEnabled)
970
+ setBoolean(opts, 'middlewareTracingEnabled', options.middlewareTracingEnabled)
971
+ setBoolean(opts, 'openAiLogsEnabled', options.openAiLogsEnabled)
1150
972
  opts.peerServiceMapping = options.peerServiceMapping
1151
- this.#setBoolean(opts, 'plugins', options.plugins)
1152
- this.#setString(opts, 'port', options.port)
973
+ setBoolean(opts, 'plugins', options.plugins)
974
+ setString(opts, 'port', options.port)
1153
975
  const strProfiling = String(options.profiling)
1154
976
  if (['true', 'false', 'auto'].includes(strProfiling)) {
1155
- this.#setString(opts, 'profiling.enabled', strProfiling)
977
+ setString(opts, 'profiling.enabled', strProfiling)
1156
978
  }
1157
- this.#setString(opts, 'protocolVersion', options.protocolVersion)
979
+ setString(opts, 'protocolVersion', options.protocolVersion)
1158
980
  if (options.remoteConfig) {
1159
981
  opts['remoteConfig.pollInterval'] = maybeFloat(options.remoteConfig.pollInterval)
1160
982
  this.#optsUnprocessed['remoteConfig.pollInterval'] = options.remoteConfig.pollInterval
1161
983
  }
1162
- this.#setBoolean(opts, 'reportHostname', options.reportHostname)
1163
- this.#setBoolean(opts, 'runtimeMetrics.enabled', options.runtimeMetrics?.enabled)
1164
- this.#setBoolean(opts, 'runtimeMetrics.eventLoop', options.runtimeMetrics?.eventLoop)
1165
- this.#setBoolean(opts, 'runtimeMetrics.gc', options.runtimeMetrics?.gc)
1166
- this.#setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
1167
- this.#setArray(opts, 'sampler.spanSamplingRules', reformatSpanSamplingRules(options.spanSamplingRules))
1168
- this.#setUnit(opts, 'sampleRate', options.sampleRate ?? options.ingestion.sampleRate)
984
+ setBoolean(opts, 'reportHostname', options.reportHostname)
985
+ setBoolean(opts, 'runtimeMetrics.enabled', options.runtimeMetrics?.enabled)
986
+ setBoolean(opts, 'runtimeMetrics.eventLoop', options.runtimeMetrics?.eventLoop)
987
+ setBoolean(opts, 'runtimeMetrics.gc', options.runtimeMetrics?.gc)
988
+ setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
989
+ setArray(opts, 'sampler.spanSamplingRules', reformatSpanSamplingRules(options.spanSamplingRules))
990
+ setUnit(opts, 'sampleRate', options.sampleRate ?? options.ingestion.sampleRate)
1169
991
  opts['sampler.rateLimit'] = maybeInt(options.rateLimit ?? options.ingestion.rateLimit)
1170
- this.#setSamplingRule(opts, 'sampler.rules', options.samplingRules)
1171
- this.#setString(opts, 'service', options.service || tags.service)
992
+ setSamplingRule(opts, 'sampler.rules', options.samplingRules)
993
+ setString(opts, 'service', options.service || tags.service)
1172
994
  opts.serviceMapping = options.serviceMapping
1173
- this.#setString(opts, 'site', options.site)
995
+ setString(opts, 'site', options.site)
1174
996
  if (options.spanAttributeSchema) {
1175
- this.#setString(opts, 'spanAttributeSchema', validateNamingVersion(options.spanAttributeSchema))
997
+ setString(opts, 'spanAttributeSchema', validateNamingVersion(options.spanAttributeSchema))
1176
998
  this.#optsUnprocessed.spanAttributeSchema = options.spanAttributeSchema
1177
999
  }
1178
- this.#setBoolean(opts, 'spanRemoveIntegrationFromService', options.spanRemoveIntegrationFromService)
1179
- this.#setBoolean(opts, 'startupLogs', options.startupLogs)
1180
- this.#setTags(opts, 'tags', tags)
1181
- this.#setBoolean(opts, 'traceId128BitGenerationEnabled', options.traceId128BitGenerationEnabled)
1182
- this.#setBoolean(opts, 'traceId128BitLoggingEnabled', options.traceId128BitLoggingEnabled)
1183
- this.#setBoolean(opts, 'traceWebsocketMessagesEnabled', options.traceWebsocketMessagesEnabled)
1184
- this.#setBoolean(opts, 'traceWebsocketMessagesInheritSampling', options.traceWebsocketMessagesInheritSampling)
1185
- this.#setBoolean(opts, 'traceWebsocketMessagesSeparateTraces', options.traceWebsocketMessagesSeparateTraces)
1186
- this.#setString(opts, 'version', options.version || tags.version)
1187
- this.#setBoolean(opts, 'inferredProxyServicesEnabled', options.inferredProxyServicesEnabled)
1188
- this.#setBoolean(opts, 'graphqlErrorExtensions', options.graphqlErrorExtensions)
1189
- this.#setBoolean(opts, 'trace.nativeSpanEvents', options.trace?.nativeSpanEvents)
1000
+ setBoolean(opts, 'spanRemoveIntegrationFromService', options.spanRemoveIntegrationFromService)
1001
+ setBoolean(opts, 'startupLogs', options.startupLogs)
1002
+ setTags(opts, 'tags', tags)
1003
+ setBoolean(opts, 'traceId128BitGenerationEnabled', options.traceId128BitGenerationEnabled)
1004
+ setBoolean(opts, 'traceId128BitLoggingEnabled', options.traceId128BitLoggingEnabled)
1005
+ setBoolean(opts, 'traceWebsocketMessagesEnabled', options.traceWebsocketMessagesEnabled)
1006
+ setBoolean(opts, 'traceWebsocketMessagesInheritSampling', options.traceWebsocketMessagesInheritSampling)
1007
+ setBoolean(opts, 'traceWebsocketMessagesSeparateTraces', options.traceWebsocketMessagesSeparateTraces)
1008
+ setString(opts, 'version', options.version || tags.version)
1009
+ setBoolean(opts, 'inferredProxyServicesEnabled', options.inferredProxyServicesEnabled)
1010
+ setBoolean(opts, 'graphqlErrorExtensions', options.graphqlErrorExtensions)
1011
+ setBoolean(opts, 'trace.nativeSpanEvents', options.trace?.nativeSpanEvents)
1190
1012
  if (options.tracePropagationStyle) {
1191
- this.#setArray(opts, 'tracePropagationStyle.inject',
1013
+ setArray(opts, 'tracePropagationStyle.inject',
1192
1014
  normalizePropagationStyle(options.tracePropagationStyle.inject ?? options.tracePropagationStyle))
1193
- this.#setArray(opts, 'tracePropagationStyle.extract',
1015
+ setArray(opts, 'tracePropagationStyle.extract',
1194
1016
  normalizePropagationStyle(options.tracePropagationStyle.extract ?? options.tracePropagationStyle))
1195
1017
  }
1196
1018
 
@@ -1199,7 +1021,7 @@ class Config {
1199
1021
  // This is to make sure the origins of each value are tracked appropriately for telemetry.
1200
1022
  // We'll only set `llmobs.enabled` on the opts when it's not set on the environment, and options.llmobs is provided.
1201
1023
  if (this.#env['llmobs.enabled'] == null && options.llmobs) {
1202
- this.#setBoolean(opts, 'llmobs.enabled', true)
1024
+ setBoolean(opts, 'llmobs.enabled', true)
1203
1025
  }
1204
1026
  }
1205
1027
 
@@ -1207,15 +1029,11 @@ class Config {
1207
1029
  return this.#optionsArg.isCiVisibility ?? this.#defaults.isCiVisibility
1208
1030
  }
1209
1031
 
1210
- #isCiVisibilityItrEnabled () {
1211
- return getEnv('DD_CIVISIBILITY_ITR_ENABLED') ?? true
1212
- }
1213
-
1214
1032
  #getHostname () {
1215
1033
  const DD_CIVISIBILITY_AGENTLESS_URL = getEnv('DD_CIVISIBILITY_AGENTLESS_URL')
1216
1034
  const url = DD_CIVISIBILITY_AGENTLESS_URL
1217
1035
  ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
1218
- : getAgentUrl(this._getTraceAgentUrl(), this.#optionsArg)
1036
+ : getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
1219
1037
  const DD_AGENT_HOST = this.#optionsArg.hostname ??
1220
1038
  getEnv('DD_AGENT_HOST') ??
1221
1039
  defaults.hostname
@@ -1257,7 +1075,7 @@ class Config {
1257
1075
  )
1258
1076
  }
1259
1077
 
1260
- _getTraceAgentUrl () {
1078
+ #getTraceAgentUrl () {
1261
1079
  return this.#optionsArg.url ??
1262
1080
  getEnv('DD_TRACE_AGENT_URL') ??
1263
1081
  null
@@ -1271,31 +1089,31 @@ class Config {
1271
1089
 
1272
1090
  calc.url = DD_CIVISIBILITY_AGENTLESS_URL
1273
1091
  ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
1274
- : getAgentUrl(this._getTraceAgentUrl(), this.#optionsArg)
1092
+ : getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
1275
1093
 
1276
1094
  if (this.#isCiVisibility()) {
1277
- this.#setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
1095
+ setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
1278
1096
  getEnv('DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED') ?? true)
1279
- this.#setBoolean(calc, 'isFlakyTestRetriesEnabled', getEnv('DD_CIVISIBILITY_FLAKY_RETRY_ENABLED') ?? true)
1097
+ setBoolean(calc, 'isFlakyTestRetriesEnabled', getEnv('DD_CIVISIBILITY_FLAKY_RETRY_ENABLED') ?? true)
1280
1098
  calc.flakyTestRetriesCount = maybeInt(getEnv('DD_CIVISIBILITY_FLAKY_RETRY_COUNT')) ?? 5
1281
- this.#setBoolean(calc, 'isIntelligentTestRunnerEnabled', isTrue(this.#isCiVisibilityItrEnabled()))
1282
- this.#setBoolean(calc, 'isManualApiEnabled', !isFalse(getEnv('DD_CIVISIBILITY_MANUAL_API_ENABLED')))
1283
- this.#setString(calc, 'ciVisibilityTestSessionName', getEnv('DD_TEST_SESSION_NAME'))
1284
- this.#setBoolean(calc, 'ciVisAgentlessLogSubmissionEnabled',
1099
+ setBoolean(calc, 'isIntelligentTestRunnerEnabled', isTrue(isCiVisibilityItrEnabled()))
1100
+ setBoolean(calc, 'isManualApiEnabled', !isFalse(getEnv('DD_CIVISIBILITY_MANUAL_API_ENABLED')))
1101
+ setString(calc, 'ciVisibilityTestSessionName', getEnv('DD_TEST_SESSION_NAME'))
1102
+ setBoolean(calc, 'ciVisAgentlessLogSubmissionEnabled',
1285
1103
  isTrue(getEnv('DD_AGENTLESS_LOG_SUBMISSION_ENABLED')))
1286
- this.#setBoolean(calc, 'isTestDynamicInstrumentationEnabled',
1104
+ setBoolean(calc, 'isTestDynamicInstrumentationEnabled',
1287
1105
  !isFalse(getEnv('DD_TEST_FAILED_TEST_REPLAY_ENABLED')))
1288
- this.#setBoolean(calc, 'isServiceUserProvided', !!this.#env.service)
1289
- this.#setBoolean(calc, 'isTestManagementEnabled', !isFalse(getEnv('DD_TEST_MANAGEMENT_ENABLED')))
1106
+ setBoolean(calc, 'isServiceUserProvided', !!this.#env.service)
1107
+ setBoolean(calc, 'isTestManagementEnabled', !isFalse(getEnv('DD_TEST_MANAGEMENT_ENABLED')))
1290
1108
  calc.testManagementAttemptToFixRetries = maybeInt(getEnv('DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES')) ?? 20
1291
- this.#setBoolean(calc, 'isImpactedTestsEnabled',
1109
+ setBoolean(calc, 'isImpactedTestsEnabled',
1292
1110
  !isFalse(getEnv('DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED')))
1293
1111
  }
1294
1112
 
1295
1113
  // Disable log injection when OTEL logs are enabled
1296
1114
  // OTEL logs and DD log injection are mutually exclusive
1297
1115
  if (this.#env.otelLogsEnabled) {
1298
- this.#setBoolean(calc, 'logInjection', false)
1116
+ setBoolean(calc, 'logInjection', false)
1299
1117
  }
1300
1118
 
1301
1119
  calc['dogstatsd.hostname'] = this.#getHostname()
@@ -1306,7 +1124,7 @@ class Config {
1306
1124
  calc.otelMetricsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}/v1/metrics`
1307
1125
  calc.otelUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}`
1308
1126
 
1309
- this.#setBoolean(calc, 'isGitUploadEnabled',
1127
+ setBoolean(calc, 'isGitUploadEnabled',
1310
1128
  calc.isIntelligentTestRunnerEnabled && !isFalse(getEnv('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED')))
1311
1129
 
1312
1130
  // Enable resourceRenamingEnabled when appsec is enabled and only
@@ -1314,13 +1132,13 @@ class Config {
1314
1132
  if (this.#env.resourceRenamingEnabled === undefined) {
1315
1133
  const appsecEnabled = this.#options['appsec.enabled'] ?? this.#env['appsec.enabled']
1316
1134
  if (appsecEnabled) {
1317
- this.#setBoolean(calc, 'resourceRenamingEnabled', true)
1135
+ setBoolean(calc, 'resourceRenamingEnabled', true)
1318
1136
  }
1319
1137
  }
1320
1138
 
1321
- this.#setBoolean(calc, 'spanComputePeerService', this.#getSpanComputePeerService())
1322
- this.#setBoolean(calc, 'stats.enabled', this.#isTraceStatsComputationEnabled())
1323
- const defaultPropagationStyle = this.#getDefaultPropagationStyle(this.#optionsArg)
1139
+ setBoolean(calc, 'spanComputePeerService', this.#getSpanComputePeerService())
1140
+ setBoolean(calc, 'stats.enabled', this.#isTraceStatsComputationEnabled())
1141
+ const defaultPropagationStyle = getDefaultPropagationStyle(this.#optionsArg)
1324
1142
  if (defaultPropagationStyle.length > 2) {
1325
1143
  // b3 was added, so update defaults to include it
1326
1144
  // This will only be used if no other source (options, env, stable config) set the value
@@ -1337,13 +1155,13 @@ class Config {
1337
1155
  #applyRemoteConfig (options) {
1338
1156
  const opts = this.#remote
1339
1157
 
1340
- this.#setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamic_instrumentation_enabled)
1341
- this.#setBoolean(opts, 'codeOriginForSpans.enabled', options.code_origin_enabled)
1342
- this.#setUnit(opts, 'sampleRate', options.tracing_sampling_rate)
1343
- this.#setBoolean(opts, 'logInjection', options.log_injection_enabled)
1344
- this.#setBoolean(opts, 'tracing', options.tracing_enabled)
1158
+ setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamic_instrumentation_enabled)
1159
+ setBoolean(opts, 'codeOriginForSpans.enabled', options.code_origin_enabled)
1160
+ setUnit(opts, 'sampleRate', options.tracing_sampling_rate)
1161
+ setBoolean(opts, 'logInjection', options.log_injection_enabled)
1162
+ setBoolean(opts, 'tracing', options.tracing_enabled)
1345
1163
  this.#remoteUnprocessed['sampler.rules'] = options.tracing_sampling_rules
1346
- this.#setSamplingRule(opts, 'sampler.rules', this.#reformatTagsFromRC(options.tracing_sampling_rules))
1164
+ setSamplingRule(opts, 'sampler.rules', reformatTagsFromRC(options.tracing_sampling_rules))
1347
1165
 
1348
1166
  opts.headerTags = options.tracing_header_tags?.map(tag => {
1349
1167
  return tag.tag_name ? `${tag.header}:${tag.tag_name}` : tag.header
@@ -1351,148 +1169,40 @@ class Config {
1351
1169
 
1352
1170
  const tags = {}
1353
1171
  tagger.add(tags, options.tracing_tags)
1354
- if (Object.keys(tags).length) tags['runtime-id'] = runtimeId
1355
- this.#setTags(opts, 'tags', tags)
1356
- }
1357
-
1358
- #reformatTagsFromRC (samplingRules) {
1359
- for (const rule of (samplingRules || [])) {
1360
- if (rule.tags) {
1361
- const reformattedTags = {}
1362
- for (const tag of rule.tags) {
1363
- reformattedTags[tag.key] = tag.value_glob
1364
- }
1365
- rule.tags = reformattedTags
1366
- }
1367
- }
1368
- return samplingRules
1369
- }
1370
-
1371
- #setBoolean (obj, name, value) {
1372
- if (value === undefined || value === null) {
1373
- obj[name] = value
1374
- } else if (isTrue(value)) {
1375
- obj[name] = true
1376
- } else if (isFalse(value)) {
1377
- obj[name] = false
1172
+ if (Object.keys(tags).length) {
1173
+ tags['runtime-id'] = RUNTIME_ID
1378
1174
  }
1175
+ setTags(opts, 'tags', tags)
1379
1176
  }
1380
1177
 
1381
- #setUnit (obj, name, value) {
1382
- if (value === null || value === undefined) {
1383
- obj[name] = value
1384
- return
1385
- }
1386
-
1387
- value = Number.parseFloat(value)
1178
+ #setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
1179
+ set(this, name, value)
1388
1180
 
1389
- if (!Number.isNaN(value)) {
1390
- // TODO: Ignore out of range values instead of normalizing them.
1391
- obj[name] = Math.min(Math.max(value, 0), 1)
1181
+ if (!changeTracker[name]) {
1182
+ changeTracker[name] = {}
1392
1183
  }
1393
- }
1394
1184
 
1395
- #setArray (obj, name, value) {
1396
- if (value == null) {
1397
- obj[name] = null
1398
- return
1399
- }
1185
+ const originExists = origin in changeTracker[name]
1186
+ const oldValue = changeTracker[name][origin]
1400
1187
 
1401
- if (typeof value === 'string') {
1402
- value = value.split(',').map(item => {
1403
- // Trim each item and remove whitespace around the colon
1404
- const [key, val] = item.split(':').map(part => part.trim())
1405
- return val === undefined ? key : `${key}:${val}`
1188
+ if (!originExists || oldValue !== value) {
1189
+ changeTracker[name][origin] = value
1190
+ changes.push({
1191
+ name,
1192
+ value: unprocessedValue || value,
1193
+ origin,
1406
1194
  })
1407
1195
  }
1408
-
1409
- if (Array.isArray(value)) {
1410
- obj[name] = value
1411
- }
1412
1196
  }
1413
1197
 
1414
- #setIntegerRangeSet (obj, name, value) {
1415
- if (value == null) {
1416
- obj[name] = null
1417
- return
1418
- }
1419
- value = value.split(',')
1420
- const result = []
1421
-
1422
- value.forEach(val => {
1423
- if (val.includes('-')) {
1424
- const [start, end] = val.split('-').map(Number)
1425
- for (let i = start; i <= end; i++) {
1426
- result.push(i)
1427
- }
1428
- } else {
1429
- result.push(Number(val))
1430
- }
1431
- })
1432
- obj[name] = result
1433
- }
1434
-
1435
- #setSamplingRule (obj, name, value) {
1436
- if (value == null) {
1437
- obj[name] = null
1438
- return
1439
- }
1440
-
1441
- if (typeof value === 'string') {
1442
- value = value.split(',')
1443
- }
1444
-
1445
- if (Array.isArray(value)) {
1446
- value = value.map(rule => {
1447
- return remapify(rule, {
1448
- sample_rate: 'sampleRate'
1449
- })
1450
- })
1451
- obj[name] = value
1452
- }
1453
- }
1454
-
1455
- #setString (obj, name, value) {
1456
- obj[name] = value ? String(value) : undefined // unset for empty strings
1457
- }
1458
-
1459
- #setTags (obj, name, value) {
1460
- if (!value || Object.keys(value).length === 0) {
1461
- obj[name] = null
1462
- return
1463
- }
1464
-
1465
- obj[name] = value
1466
- }
1467
-
1468
- #setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
1469
- set(this, name, value)
1470
-
1471
- if (!changeTracker[name]) {
1472
- changeTracker[name] = {}
1473
- }
1474
-
1475
- const originExists = origin in changeTracker[name]
1476
- const oldValue = changeTracker[name][origin]
1477
-
1478
- if (!originExists || oldValue !== value) {
1479
- changeTracker[name][origin] = value
1480
- changes.push({
1481
- name,
1482
- value: unprocessedValue || value,
1483
- origin
1484
- })
1485
- }
1486
- }
1487
-
1488
- // TODO: Report origin changes and errors to telemetry.
1489
- // TODO: Deeply merge configurations.
1490
- // TODO: Move change tracking to telemetry.
1491
- // for telemetry reporting, `name`s in `containers` need to be keys from:
1492
- // https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
1493
- #merge () {
1494
- const changes = []
1495
- const sources = this.#getSourcesInOrder()
1198
+ // TODO: Report origin changes and errors to telemetry.
1199
+ // TODO: Deeply merge configurations.
1200
+ // TODO: Move change tracking to telemetry.
1201
+ // for telemetry reporting, `name`s in `containers` need to be keys from:
1202
+ // https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
1203
+ #merge () {
1204
+ const changes = []
1205
+ const sources = this.#getSourcesInOrder()
1496
1206
 
1497
1207
  for (const name of Object.keys(this.#defaults)) {
1498
1208
  // Use reverse order for merge (lowest priority first)
@@ -1505,7 +1215,7 @@ class Config {
1505
1215
  value,
1506
1216
  origin,
1507
1217
  unprocessedValue: unprocessed?.[name],
1508
- changes
1218
+ changes,
1509
1219
  })
1510
1220
  }
1511
1221
  }
@@ -1514,15 +1224,6 @@ class Config {
1514
1224
  updateConfig(changes, this)
1515
1225
  }
1516
1226
 
1517
- getOrigin (name) {
1518
- for (const { container, origin } of this.#getSourcesInOrder()) {
1519
- const value = container[name]
1520
- if (value != null || container === this.#defaults) {
1521
- return origin
1522
- }
1523
- }
1524
- }
1525
-
1526
1227
  #loadGitMetadata () {
1527
1228
  // try to read Git metadata from the environment variables
1528
1229
  this.repositoryUrl = removeUserSensitiveInfo(
@@ -1579,6 +1280,312 @@ class Config {
1579
1280
  }
1580
1281
  }
1581
1282
 
1283
+ function getCounter (event, ddVar, otelVar) {
1284
+ const counters = TELEMETRY_COUNTERS.get(event)
1285
+ const tags = []
1286
+ const ddVarPrefix = 'config_datadog:'
1287
+ const otelVarPrefix = 'config_opentelemetry:'
1288
+ if (ddVar) {
1289
+ ddVar = ddVarPrefix + ddVar.toLowerCase()
1290
+ tags.push(ddVar)
1291
+ }
1292
+ if (otelVar) {
1293
+ otelVar = otelVarPrefix + otelVar.toLowerCase()
1294
+ tags.push(otelVar)
1295
+ }
1296
+
1297
+ if (!(otelVar in counters)) counters[otelVar] = {}
1298
+
1299
+ const counter = tracerMetrics.count(event, tags)
1300
+ counters[otelVar][ddVar] = counter
1301
+ return counter
1302
+ }
1303
+
1304
+ function getFromOtelSamplerMap (otelTracesSampler, otelTracesSamplerArg) {
1305
+ const OTEL_TRACES_SAMPLER_MAPPING = {
1306
+ always_on: '1.0',
1307
+ always_off: '0.0',
1308
+ traceidratio: otelTracesSamplerArg,
1309
+ parentbased_always_on: '1.0',
1310
+ parentbased_always_off: '0.0',
1311
+ parentbased_traceidratio: otelTracesSamplerArg,
1312
+ }
1313
+ return OTEL_TRACES_SAMPLER_MAPPING[otelTracesSampler]
1314
+ }
1315
+
1316
+ /**
1317
+ * Validate the type of an environment variable
1318
+ * @param {string} envVar - The name of the environment variable
1319
+ * @param {string} [value] - The value of the environment variable
1320
+ * @returns {boolean} - True if the value is valid, false otherwise
1321
+ */
1322
+ function isInvalidOtelEnvironmentVariable (envVar, value) {
1323
+ // Skip validation if the value is undefined (it was not set as environment variable)
1324
+ if (value === undefined) return false
1325
+
1326
+ switch (envVar) {
1327
+ case 'OTEL_LOG_LEVEL':
1328
+ return !VALID_LOG_LEVELS.has(value)
1329
+ case 'OTEL_PROPAGATORS':
1330
+ case 'OTEL_RESOURCE_ATTRIBUTES':
1331
+ case 'OTEL_SERVICE_NAME':
1332
+ return typeof value !== 'string'
1333
+ case 'OTEL_TRACES_SAMPLER':
1334
+ return getFromOtelSamplerMap(value, getEnv('OTEL_TRACES_SAMPLER_ARG')) === undefined
1335
+ case 'OTEL_TRACES_SAMPLER_ARG':
1336
+ return Number.isNaN(Number.parseFloat(value))
1337
+ case 'OTEL_SDK_DISABLED':
1338
+ return value.toLowerCase() !== 'true' && value.toLowerCase() !== 'false'
1339
+ case 'OTEL_TRACES_EXPORTER':
1340
+ case 'OTEL_METRICS_EXPORTER':
1341
+ case 'OTEL_LOGS_EXPORTER':
1342
+ return value.toLowerCase() !== 'none'
1343
+ default:
1344
+ return true
1345
+ }
1346
+ }
1347
+
1348
+ function checkIfBothOtelAndDdEnvVarSet () {
1349
+ for (const [otelEnvVar, ddEnvVar] of OTEL_DD_ENV_MAPPING) {
1350
+ const otelValue = getEnv(otelEnvVar)
1351
+
1352
+ if (ddEnvVar && getEnv(ddEnvVar) && otelValue) {
1353
+ log.warn('both %s and %s environment variables are set', ddEnvVar, otelEnvVar)
1354
+ getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
1355
+ }
1356
+
1357
+ if (isInvalidOtelEnvironmentVariable(otelEnvVar, otelValue)) {
1358
+ log.warn('unexpected value %s for %s environment variable', otelValue, otelEnvVar)
1359
+ getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
1360
+ }
1361
+ }
1362
+ }
1363
+
1364
+ function maybeFile (filepath) {
1365
+ if (!filepath) return
1366
+ try {
1367
+ return fs.readFileSync(filepath, 'utf8')
1368
+ } catch (e) {
1369
+ log.error('Error reading file %s', filepath, e)
1370
+ }
1371
+ }
1372
+
1373
+ function maybeJsonFile (filepath) {
1374
+ const file = maybeFile(filepath)
1375
+ if (!file) return
1376
+ try {
1377
+ return JSON.parse(file)
1378
+ } catch (e) {
1379
+ log.error('Error parsing JSON file %s', filepath, e)
1380
+ }
1381
+ }
1382
+
1383
+ function safeJsonParse (input) {
1384
+ try {
1385
+ return JSON.parse(input)
1386
+ } catch {}
1387
+ }
1388
+
1389
+ function validateNamingVersion (versionString) {
1390
+ if (!versionString) {
1391
+ return DEFAULT_NAMING_VERSION
1392
+ }
1393
+ if (!NAMING_VERSIONS.has(versionString)) {
1394
+ log.warn('Unexpected input for config.spanAttributeSchema, picked default', DEFAULT_NAMING_VERSION)
1395
+ return DEFAULT_NAMING_VERSION
1396
+ }
1397
+ return versionString
1398
+ }
1399
+
1400
+ /**
1401
+ * Given a string of comma-separated paths, return the array of paths.
1402
+ * If a blank path is provided a null is returned to signal that the feature is disabled.
1403
+ * An empty array means the feature is enabled but that no rules need to be applied.
1404
+ *
1405
+ * @param {string | string[]} input
1406
+ */
1407
+ function splitJSONPathRules (input) {
1408
+ if (!input || input === '$') return
1409
+ if (Array.isArray(input)) return input
1410
+ if (input === 'all') return []
1411
+ return input.split(',')
1412
+ }
1413
+
1414
+ // Shallow clone with property name remapping
1415
+ function remapify (input, mappings) {
1416
+ if (!input) return
1417
+ const output = {}
1418
+ for (const [key, value] of Object.entries(input)) {
1419
+ output[key in mappings ? mappings[key] : key] = value
1420
+ }
1421
+ return output
1422
+ }
1423
+
1424
+ /**
1425
+ * Normalizes propagation style values to a lowercase array.
1426
+ * Handles both string (comma-separated) and array inputs.
1427
+ */
1428
+ function normalizePropagationStyle (value) {
1429
+ if (Array.isArray(value)) {
1430
+ return value.map(v => v.toLowerCase())
1431
+ }
1432
+ if (typeof value === 'string') {
1433
+ return value.split(',')
1434
+ .filter(v => v !== '')
1435
+ .map(v => v.trim().toLowerCase())
1436
+ }
1437
+ if (value !== undefined) {
1438
+ log.warn('Unexpected input for config.tracePropagationStyle')
1439
+ }
1440
+ }
1441
+
1442
+ /**
1443
+ * Warns if both DD_TRACE_PROPAGATION_STYLE and specific inject/extract vars are set.
1444
+ */
1445
+ function warnIfPropagationStyleConflict (general, inject, extract) {
1446
+ if (general && (inject || extract)) {
1447
+ log.warn(
1448
+ // eslint-disable-next-line @stylistic/max-len
1449
+ 'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
1450
+ )
1451
+ }
1452
+ }
1453
+
1454
+ function reformatSpanSamplingRules (rules) {
1455
+ if (!rules) return rules
1456
+ return rules.map(rule => {
1457
+ return remapify(rule, {
1458
+ sample_rate: 'sampleRate',
1459
+ max_per_second: 'maxPerSecond',
1460
+ })
1461
+ })
1462
+ }
1463
+
1464
+ function getDefaultPropagationStyle (options) {
1465
+ // TODO: Remove the experimental env vars as a major?
1466
+ const DD_TRACE_B3_ENABLED = options.experimental?.b3 ??
1467
+ getEnv('DD_TRACE_EXPERIMENTAL_B3_ENABLED')
1468
+ const defaultPropagationStyle = ['datadog', 'tracecontext']
1469
+ if (isTrue(DD_TRACE_B3_ENABLED)) {
1470
+ defaultPropagationStyle.push('b3', 'b3 single header')
1471
+ }
1472
+ return defaultPropagationStyle
1473
+ }
1474
+
1475
+ function isCiVisibilityItrEnabled () {
1476
+ return getEnv('DD_CIVISIBILITY_ITR_ENABLED') ?? true
1477
+ }
1478
+
1479
+ function reformatTagsFromRC (samplingRules) {
1480
+ for (const rule of (samplingRules || [])) {
1481
+ if (rule.tags) {
1482
+ const reformattedTags = {}
1483
+ for (const tag of rule.tags) {
1484
+ reformattedTags[tag.key] = tag.value_glob
1485
+ }
1486
+ rule.tags = reformattedTags
1487
+ }
1488
+ }
1489
+ return samplingRules
1490
+ }
1491
+
1492
+ function setBoolean (obj, name, value) {
1493
+ if (value === undefined || value === null) {
1494
+ obj[name] = value
1495
+ } else if (isTrue(value)) {
1496
+ obj[name] = true
1497
+ } else if (isFalse(value)) {
1498
+ obj[name] = false
1499
+ }
1500
+ }
1501
+
1502
+ function setUnit (obj, name, value) {
1503
+ if (value === null || value === undefined) {
1504
+ obj[name] = value
1505
+ return
1506
+ }
1507
+
1508
+ value = Number.parseFloat(value)
1509
+
1510
+ if (!Number.isNaN(value)) {
1511
+ // TODO: Ignore out of range values instead of normalizing them.
1512
+ obj[name] = Math.min(Math.max(value, 0), 1)
1513
+ }
1514
+ }
1515
+
1516
+ function setArray (obj, name, value) {
1517
+ if (value == null) {
1518
+ obj[name] = null
1519
+ return
1520
+ }
1521
+
1522
+ if (typeof value === 'string') {
1523
+ value = value.split(',').map(item => {
1524
+ // Trim each item and remove whitespace around the colon
1525
+ const [key, val] = item.split(':').map(part => part.trim())
1526
+ return val === undefined ? key : `${key}:${val}`
1527
+ })
1528
+ }
1529
+
1530
+ if (Array.isArray(value)) {
1531
+ obj[name] = value
1532
+ }
1533
+ }
1534
+
1535
+ function setIntegerRangeSet (obj, name, value) {
1536
+ if (value == null) {
1537
+ obj[name] = null
1538
+ return
1539
+ }
1540
+ value = value.split(',')
1541
+ const result = []
1542
+
1543
+ for (const val of value) {
1544
+ if (val.includes('-')) {
1545
+ const [start, end] = val.split('-').map(Number)
1546
+ for (let i = start; i <= end; i++) {
1547
+ result.push(i)
1548
+ }
1549
+ } else {
1550
+ result.push(Number(val))
1551
+ }
1552
+ }
1553
+ obj[name] = result
1554
+ }
1555
+
1556
+ function setSamplingRule (obj, name, value) {
1557
+ if (value == null) {
1558
+ obj[name] = null
1559
+ return
1560
+ }
1561
+
1562
+ if (typeof value === 'string') {
1563
+ value = value.split(',')
1564
+ }
1565
+
1566
+ if (Array.isArray(value)) {
1567
+ value = value.map(rule => {
1568
+ return remapify(rule, {
1569
+ sample_rate: 'sampleRate',
1570
+ })
1571
+ })
1572
+ obj[name] = value
1573
+ }
1574
+ }
1575
+
1576
+ function setString (obj, name, value) {
1577
+ obj[name] = value ? String(value) : undefined // unset for empty strings
1578
+ }
1579
+
1580
+ function setTags (obj, name, value) {
1581
+ if (!value || Object.keys(value).length === 0) {
1582
+ obj[name] = null
1583
+ return
1584
+ }
1585
+
1586
+ obj[name] = value
1587
+ }
1588
+
1582
1589
  function handleOtel (tagString) {
1583
1590
  return tagString
1584
1591
  ?.replace(/(^|,)deployment\.environment=/, '$1env:')
@@ -1608,7 +1615,7 @@ function nonNegInt (value, envVarName, allowZero = true) {
1608
1615
  if (value === undefined) return
1609
1616
  const parsed = Number.parseInt(value)
1610
1617
  if (Number.isNaN(parsed) || parsed < 0 || (parsed === 0 && !allowZero)) {
1611
- log.warn(`Invalid value ${parsed} for ${envVarName}. Using default value.`)
1618
+ log.warn('Invalid value %d for %s. Using default value.', parsed, envVarName)
1612
1619
  return
1613
1620
  }
1614
1621
  return parsed
@@ -1630,12 +1637,9 @@ function getAgentUrl (url, options) {
1630
1637
  }
1631
1638
  }
1632
1639
 
1633
- let configInstance = null
1634
1640
  function getConfig (options) {
1635
1641
  if (!configInstance) {
1636
1642
  configInstance = new Config(options)
1637
1643
  }
1638
1644
  return configInstance
1639
1645
  }
1640
-
1641
- module.exports = getConfig