dd-trace 6.16.0 → 6.18.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 (356) hide show
  1. package/ci/diagnose.js +0 -23
  2. package/ci/test-optimization-validation/approval-artifacts.js +0 -3
  3. package/ci/test-optimization-validation/approval.js +0 -6
  4. package/ci/test-optimization-validation/artifact-id.js +0 -1
  5. package/ci/test-optimization-validation/bounded-json.js +0 -1
  6. package/ci/test-optimization-validation/cli.js +0 -12
  7. package/ci/test-optimization-validation/command-output-policy.js +0 -1
  8. package/ci/test-optimization-validation/command-runner.js +0 -3
  9. package/ci/test-optimization-validation/environment.js +0 -4
  10. package/ci/test-optimization-validation/executable-approval.js +0 -1
  11. package/ci/test-optimization-validation/executable.js +0 -5
  12. package/ci/test-optimization-validation/framework-adapters/cucumber.js +0 -6
  13. package/ci/test-optimization-validation/framework-adapters/cypress.js +0 -3
  14. package/ci/test-optimization-validation/framework-adapters/playwright.js +0 -6
  15. package/ci/test-optimization-validation/framework-adapters/vitest.js +0 -4
  16. package/ci/test-optimization-validation/generated-test-contract.js +0 -5
  17. package/ci/test-optimization-validation/generated-verifier.js +0 -1
  18. package/ci/test-optimization-validation/literal-environment.js +0 -1
  19. package/ci/test-optimization-validation/manifest-scaffold.js +0 -17
  20. package/ci/test-optimization-validation/manifest-schema.js +0 -21
  21. package/ci/test-optimization-validation/offline-fixtures.js +0 -4
  22. package/ci/test-optimization-validation/plan-writer.js +0 -11
  23. package/ci/test-optimization-validation/preflight-runner.js +0 -1
  24. package/ci/test-optimization-validation/redaction.js +0 -4
  25. package/ci/test-optimization-validation/report-writer.js +0 -16
  26. package/ci/test-optimization-validation/runner-command.js +0 -3
  27. package/ci/test-optimization-validation/runner-contract.js +0 -4
  28. package/ci/test-optimization-validation/safe-files.js +0 -1
  29. package/ci/test-optimization-validation/scenarios/basic-reporting.js +0 -1
  30. package/ci/test-optimization-validation/scenarios/ci-wiring.js +0 -1
  31. package/ci/test-optimization-validation/source-text.js +0 -3
  32. package/ci/vitest-no-worker-init-setup.mjs +41 -16
  33. package/index.d.ts +208 -0
  34. package/package.json +17 -16
  35. package/packages/datadog-esbuild/src/utils.js +0 -2
  36. package/packages/datadog-instrumentations/src/aerospike.js +28 -6
  37. package/packages/datadog-instrumentations/src/aws-durable-execution-sdk-js.js +0 -2
  38. package/packages/datadog-instrumentations/src/aws-sdk.js +0 -2
  39. package/packages/datadog-instrumentations/src/claude-agent-sdk.js +0 -2
  40. package/packages/datadog-instrumentations/src/console.js +97 -0
  41. package/packages/datadog-instrumentations/src/cucumber.js +77 -12
  42. package/packages/datadog-instrumentations/src/cypress-config.js +27 -38
  43. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +6 -0
  44. package/packages/datadog-instrumentations/src/helpers/channel.js +0 -2
  45. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -1
  46. package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +0 -5
  47. package/packages/datadog-instrumentations/src/helpers/hooks.js +8 -6
  48. package/packages/datadog-instrumentations/src/helpers/instrumentation-utils.js +0 -3
  49. package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +0 -6
  50. package/packages/datadog-instrumentations/src/helpers/register.js +24 -0
  51. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +111 -26
  52. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentation-registry.js +41 -0
  53. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +3 -17
  54. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +55 -0
  55. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/postgres.js +36 -0
  56. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/supabase.js +128 -0
  57. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +13 -0
  58. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.js +28 -3
  59. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +20 -0
  60. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms/postgres.js +388 -0
  61. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +0 -5
  62. package/packages/datadog-instrumentations/src/helpers/router-helper.js +0 -1
  63. package/packages/datadog-instrumentations/src/jest.js +165 -51
  64. package/packages/datadog-instrumentations/src/knex.js +0 -1
  65. package/packages/datadog-instrumentations/src/mariadb-bundle.js +0 -24
  66. package/packages/datadog-instrumentations/src/mariadb.js +0 -2
  67. package/packages/datadog-instrumentations/src/mocha/common.js +0 -1
  68. package/packages/datadog-instrumentations/src/mocha/main.js +25 -26
  69. package/packages/datadog-instrumentations/src/mocha/utils.js +119 -49
  70. package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +0 -6
  71. package/packages/datadog-instrumentations/src/mocha/worker.js +14 -17
  72. package/packages/datadog-instrumentations/src/mysql2.js +0 -2
  73. package/packages/datadog-instrumentations/src/openai-realtime/audio-accumulator.js +241 -0
  74. package/packages/datadog-instrumentations/src/openai-realtime/events.js +76 -0
  75. package/packages/datadog-instrumentations/src/openai-realtime/index.js +301 -0
  76. package/packages/datadog-instrumentations/src/openai-realtime/session.js +998 -0
  77. package/packages/datadog-instrumentations/src/openai-realtime/turns.js +211 -0
  78. package/packages/datadog-instrumentations/src/openai.js +51 -12
  79. package/packages/datadog-instrumentations/src/oracledb.js +9 -3
  80. package/packages/datadog-instrumentations/src/playwright-reporter.js +6 -20
  81. package/packages/datadog-instrumentations/src/playwright.js +280 -56
  82. package/packages/datadog-instrumentations/src/{azure-cosmos.js → postgres.js} +1 -1
  83. package/packages/datadog-instrumentations/src/router.js +0 -2
  84. package/packages/datadog-instrumentations/src/rum-browser-scripts.js +0 -2
  85. package/packages/datadog-instrumentations/src/sequelize.js +0 -1
  86. package/packages/datadog-instrumentations/src/supabase.js +15 -0
  87. package/packages/datadog-instrumentations/src/undici.js +7 -3
  88. package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +18 -18
  89. package/packages/datadog-instrumentations/src/vitest-main.js +121 -30
  90. package/packages/datadog-instrumentations/src/vitest-util.js +7 -1
  91. package/packages/datadog-instrumentations/src/vitest-worker.js +49 -13
  92. package/packages/datadog-instrumentations/src/webdriverio.js +44 -47
  93. package/packages/datadog-instrumentations/src/ws.js +41 -2
  94. package/packages/datadog-plugin-ai/src/utils.js +0 -2
  95. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/trace-checkpoint.js +0 -1
  96. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/util.js +0 -2
  97. package/packages/datadog-plugin-aws-sdk/src/base.js +0 -1
  98. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +0 -1
  99. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +0 -1
  100. package/packages/datadog-plugin-aws-sdk/src/util.js +0 -1
  101. package/packages/datadog-plugin-azure-durable-functions/src/index.js +0 -1
  102. package/packages/datadog-plugin-cucumber/src/index.js +9 -0
  103. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +211 -85
  104. package/packages/datadog-plugin-cypress/src/finalization.js +0 -3
  105. package/packages/datadog-plugin-cypress/src/index.js +3 -1
  106. package/packages/datadog-plugin-cypress/src/source-map-utils.js +0 -4
  107. package/packages/datadog-plugin-cypress/src/support.js +52 -7
  108. package/packages/datadog-plugin-graphql/src/resolve-error.js +1 -2
  109. package/packages/datadog-plugin-graphql/src/utils.js +0 -5
  110. package/packages/datadog-plugin-jest/src/index.js +12 -0
  111. package/packages/datadog-plugin-kafkajs/src/producer.js +0 -1
  112. package/packages/datadog-plugin-mocha/src/index.js +38 -11
  113. package/packages/datadog-plugin-mongodb-core/src/query.js +0 -1
  114. package/packages/datadog-plugin-openai/src/index.js +16 -1
  115. package/packages/datadog-plugin-openai/src/realtime.js +144 -0
  116. package/packages/datadog-plugin-openai-agents/src/integration.js +0 -4
  117. package/packages/datadog-plugin-openai-agents/src/util.js +0 -1
  118. package/packages/datadog-plugin-playwright/src/index.js +81 -9
  119. package/packages/datadog-plugin-postgres/src/index.js +167 -0
  120. package/packages/datadog-plugin-prisma/src/datadog-tracing-helper.js +0 -1
  121. package/packages/datadog-plugin-redis/src/index.js +15 -1
  122. package/packages/datadog-plugin-supabase/src/error.js +18 -0
  123. package/packages/datadog-plugin-supabase/src/index.js +21 -0
  124. package/packages/datadog-plugin-supabase/src/supabase-auth-js-gotrueclient-getuser.js +69 -0
  125. package/packages/datadog-plugin-supabase/src/supabase-functions-js-functionsclient-invoke.js +70 -0
  126. package/packages/datadog-plugin-supabase/src/supabase-postgrest-js-postgrestbuilder-then.js +122 -0
  127. package/packages/datadog-plugin-supabase/src/supabase-realtime-js-realtimechannel-send.js +66 -0
  128. package/packages/datadog-plugin-supabase/src/supabase-storage-js-handle-request.js +93 -0
  129. package/packages/datadog-plugin-supabase/src/url.js +17 -0
  130. package/packages/datadog-plugin-vitest/src/index.js +9 -0
  131. package/packages/datadog-plugin-ws/src/producer.js +1 -1
  132. package/packages/datadog-plugin-ws/src/util.js +0 -4
  133. package/packages/datadog-shimmer/src/shimmer.js +14 -10
  134. package/packages/datadog-turbopack/index.js +4 -7
  135. package/packages/datadog-turbopack/src/loader.js +6 -18
  136. package/packages/datadog-webpack/src/loader.js +0 -1
  137. package/packages/dd-trace/src/agent/info.js +5 -4
  138. package/packages/dd-trace/src/aiguard/client.js +2 -3
  139. package/packages/dd-trace/src/aiguard/evaluation.js +6 -12
  140. package/packages/dd-trace/src/aiguard/index.js +2 -2
  141. package/packages/dd-trace/src/aiguard/integrations/index.js +1 -1
  142. package/packages/dd-trace/src/aiguard/integrations/openai.js +81 -7
  143. package/packages/dd-trace/src/aiguard/messages/anthropic.js +0 -2
  144. package/packages/dd-trace/src/aiguard/messages/openai.js +64 -1
  145. package/packages/dd-trace/src/aiguard/messages/utils.js +0 -1
  146. package/packages/dd-trace/src/aiguard/redaction.js +0 -1
  147. package/packages/dd-trace/src/aiguard/sdk.js +1 -1
  148. package/packages/dd-trace/src/appsec/activation.js +1 -1
  149. package/packages/dd-trace/src/appsec/api_security/normalized-route.js +0 -5
  150. package/packages/dd-trace/src/appsec/api_security/sampler.js +0 -4
  151. package/packages/dd-trace/src/appsec/blocking/index.js +3 -3
  152. package/packages/dd-trace/src/appsec/downstream_requests.js +1 -4
  153. package/packages/dd-trace/src/appsec/iast/index.js +1 -1
  154. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +5 -5
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -1
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  157. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +3 -3
  158. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +8 -10
  159. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -2
  160. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +4 -1
  161. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +7 -7
  162. package/packages/dd-trace/src/appsec/index.js +2 -2
  163. package/packages/dd-trace/src/appsec/lambda.js +71 -2
  164. package/packages/dd-trace/src/appsec/rasp/utils.js +5 -1
  165. package/packages/dd-trace/src/appsec/remote_config.js +8 -6
  166. package/packages/dd-trace/src/appsec/reporter.js +10 -6
  167. package/packages/dd-trace/src/appsec/rule_manager.js +3 -3
  168. package/packages/dd-trace/src/appsec/sdk/track_event.js +0 -2
  169. package/packages/dd-trace/src/appsec/waf/index.js +2 -2
  170. package/packages/dd-trace/src/appsec/waf/waf_manager.js +8 -5
  171. package/packages/dd-trace/src/carrier.js +0 -5
  172. package/packages/dd-trace/src/ci-visibility/dynamic-atr-retries.js +104 -0
  173. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +0 -2
  174. package/packages/dd-trace/src/ci-visibility/efd-retry-policy.js +34 -3
  175. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +0 -1
  176. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +0 -1
  177. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +0 -1
  178. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/index.js +0 -4
  179. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/msgpack-to-json.js +0 -1
  180. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/sink.js +0 -2
  181. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +37 -15
  182. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +0 -3
  183. package/packages/dd-trace/src/ci-visibility/exporters/request.js +0 -11
  184. package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +0 -1
  185. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +0 -1
  186. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +0 -6
  187. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +2 -2
  188. package/packages/dd-trace/src/ci-visibility/requests/rate-limit.js +0 -1
  189. package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +0 -5
  190. package/packages/dd-trace/src/ci-visibility/requests/video-request.js +0 -1
  191. package/packages/dd-trace/src/ci-visibility/telemetry.js +13 -0
  192. package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +0 -1
  193. package/packages/dd-trace/src/ci-visibility/test-screenshot.js +0 -2
  194. package/packages/dd-trace/src/ci-visibility/test-video.js +0 -1
  195. package/packages/dd-trace/src/config/defaults.js +3 -2
  196. package/packages/dd-trace/src/config/generated-config-types.d.ts +88 -82
  197. package/packages/dd-trace/src/config/helper.js +0 -1
  198. package/packages/dd-trace/src/config/index.js +31 -30
  199. package/packages/dd-trace/src/config/parsers.js +34 -6
  200. package/packages/dd-trace/src/config/remote_config.js +25 -109
  201. package/packages/dd-trace/src/config/supported-configurations.json +150 -10
  202. package/packages/dd-trace/src/datastreams/encoding.js +0 -1
  203. package/packages/dd-trace/src/datastreams/pathway.js +0 -1
  204. package/packages/dd-trace/src/debugger/constants.js +10 -0
  205. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +62 -10
  206. package/packages/dd-trace/src/debugger/devtools_client/config.js +4 -1
  207. package/packages/dd-trace/src/debugger/devtools_client/guardrail-metrics.js +15 -0
  208. package/packages/dd-trace/src/debugger/devtools_client/index.js +103 -27
  209. package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +50 -7
  210. package/packages/dd-trace/src/debugger/devtools_client/log.js +3 -1
  211. package/packages/dd-trace/src/debugger/devtools_client/probe_sampler.js +21 -8
  212. package/packages/dd-trace/src/debugger/devtools_client/send.js +41 -15
  213. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +53 -13
  214. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +118 -71
  215. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +5 -3
  216. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +0 -3
  217. package/packages/dd-trace/src/debugger/devtools_client/status.js +21 -7
  218. package/packages/dd-trace/src/debugger/guardrail-metrics.js +167 -0
  219. package/packages/dd-trace/src/debugger/index.js +51 -3
  220. package/packages/dd-trace/src/debugger/inspect-segment.js +0 -3
  221. package/packages/dd-trace/src/debugger/probe_sampler.js +133 -9
  222. package/packages/dd-trace/src/debugger/probe_sampler_constants.js +31 -1
  223. package/packages/dd-trace/src/dogstatsd.js +0 -23
  224. package/packages/dd-trace/src/encode/0.4-cross-payload.js +0 -3
  225. package/packages/dd-trace/src/encode/0.4.js +0 -7
  226. package/packages/dd-trace/src/encode/0.5.js +0 -2
  227. package/packages/dd-trace/src/encode/tags-processors.js +0 -1
  228. package/packages/dd-trace/src/evp_proxy/constants.js +2 -0
  229. package/packages/dd-trace/src/evp_proxy/direct.js +17 -13
  230. package/packages/dd-trace/src/evp_proxy/discovery.js +14 -11
  231. package/packages/dd-trace/src/evp_proxy/path.js +21 -9
  232. package/packages/dd-trace/src/exporters/agent/writer.js +0 -1
  233. package/packages/dd-trace/src/exporters/agentless/index.js +0 -1
  234. package/packages/dd-trace/src/exporters/agentless/intake.js +0 -1
  235. package/packages/dd-trace/src/exporters/agentless/writer.js +0 -3
  236. package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +0 -6
  237. package/packages/dd-trace/src/exporters/common/request.js +1 -0
  238. package/packages/dd-trace/src/exporters/common/url.js +33 -4
  239. package/packages/dd-trace/src/exporters/common/writer.js +0 -2
  240. package/packages/dd-trace/src/id.js +0 -11
  241. package/packages/dd-trace/src/llmobs/audio-codec.js +192 -0
  242. package/packages/dd-trace/src/llmobs/audio-utils.js +121 -0
  243. package/packages/dd-trace/src/llmobs/constants/audio.js +35 -0
  244. package/packages/dd-trace/src/llmobs/constants/prompts.js +14 -0
  245. package/packages/dd-trace/src/llmobs/constants/tags.js +17 -0
  246. package/packages/dd-trace/src/llmobs/eval-metric.js +0 -6
  247. package/packages/dd-trace/src/llmobs/experiments/dataset.js +0 -4
  248. package/packages/dd-trace/src/llmobs/experiments/experiment.js +0 -3
  249. package/packages/dd-trace/src/llmobs/experiments/index.js +7 -6
  250. package/packages/dd-trace/src/llmobs/experiments/util.js +1 -11
  251. package/packages/dd-trace/src/llmobs/index.js +1 -3
  252. package/packages/dd-trace/src/llmobs/noop.js +10 -0
  253. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +0 -4
  254. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +0 -1
  255. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +0 -4
  256. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +0 -2
  257. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +0 -2
  258. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +4 -6
  259. package/packages/dd-trace/src/llmobs/plugins/openai/realtime.js +285 -0
  260. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +16 -3
  261. package/packages/dd-trace/src/llmobs/prompts/cache.js +272 -0
  262. package/packages/dd-trace/src/llmobs/prompts/manager.js +647 -0
  263. package/packages/dd-trace/src/llmobs/prompts/noop.js +29 -0
  264. package/packages/dd-trace/src/llmobs/prompts/prompt.js +158 -0
  265. package/packages/dd-trace/src/llmobs/sdk.js +21 -6
  266. package/packages/dd-trace/src/llmobs/span_processor.js +81 -2
  267. package/packages/dd-trace/src/llmobs/tagger.js +39 -11
  268. package/packages/dd-trace/src/llmobs/telemetry.js +36 -4
  269. package/packages/dd-trace/src/llmobs/util.js +0 -34
  270. package/packages/dd-trace/src/llmobs/writers/base.js +0 -1
  271. package/packages/dd-trace/src/llmobs/writers/util.js +1 -2
  272. package/packages/dd-trace/src/log/channels.js +3 -0
  273. package/packages/dd-trace/src/log/index.js +23 -5
  274. package/packages/dd-trace/src/log-submission/log-submission-plugin.js +74 -6
  275. package/packages/dd-trace/src/msgpack/chunk.js +0 -1
  276. package/packages/dd-trace/src/openfeature/agentless_configuration_source.js +0 -12
  277. package/packages/dd-trace/src/openfeature/configuration_source.js +4 -1
  278. package/packages/dd-trace/src/openfeature/encoding.js +0 -2
  279. package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +0 -1
  280. package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -3
  281. package/packages/dd-trace/src/openfeature/index.js +6 -6
  282. package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +0 -1
  283. package/packages/dd-trace/src/openfeature/span-enrichment.js +0 -4
  284. package/packages/dd-trace/src/openfeature/writers/base.js +90 -23
  285. package/packages/dd-trace/src/openfeature/writers/exposures.js +4 -5
  286. package/packages/dd-trace/src/openfeature/writers/util.js +104 -37
  287. package/packages/dd-trace/src/opentelemetry/logs/logger.js +0 -1
  288. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +0 -1
  289. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +0 -1
  290. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +0 -2
  291. package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +0 -1
  292. package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_transformer.js +0 -1
  293. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +0 -1
  294. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +1 -14
  295. package/packages/dd-trace/src/opentelemetry/metrics/time.js +0 -1
  296. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +30 -13
  297. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +0 -1
  298. package/packages/dd-trace/src/opentelemetry/span-helpers.js +0 -1
  299. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +0 -1
  300. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +0 -3
  301. package/packages/dd-trace/src/opentracing/propagation/text_map.js +0 -6
  302. package/packages/dd-trace/src/opentracing/span_context.js +0 -1
  303. package/packages/dd-trace/src/opentracing/tracer.js +3 -3
  304. package/packages/dd-trace/src/otel-thread-ctx.js +38 -11
  305. package/packages/dd-trace/src/payload-tagging/tagging.js +15 -3
  306. package/packages/dd-trace/src/plugin_manager.js +27 -8
  307. package/packages/dd-trace/src/plugins/ci_plugin.js +1 -2
  308. package/packages/dd-trace/src/plugins/database.js +2 -6
  309. package/packages/dd-trace/src/plugins/index.js +7 -0
  310. package/packages/dd-trace/src/plugins/plugin.js +0 -4
  311. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  312. package/packages/dd-trace/src/plugins/util/git.js +1 -3
  313. package/packages/dd-trace/src/plugins/util/http-otel-semantics.js +0 -1
  314. package/packages/dd-trace/src/plugins/util/llm.js +0 -2
  315. package/packages/dd-trace/src/plugins/util/status-validator.js +0 -1
  316. package/packages/dd-trace/src/plugins/util/test.js +26 -20
  317. package/packages/dd-trace/src/plugins/util/url.js +0 -5
  318. package/packages/dd-trace/src/priority_sampler.js +0 -6
  319. package/packages/dd-trace/src/process-tags/index.js +0 -1
  320. package/packages/dd-trace/src/profiler.js +132 -35
  321. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +0 -1
  322. package/packages/dd-trace/src/profiling/profiler.js +101 -41
  323. package/packages/dd-trace/src/profiling/ssi-heuristics.js +29 -15
  324. package/packages/dd-trace/src/propagation-hash/index.js +0 -1
  325. package/packages/dd-trace/src/proxy.js +23 -47
  326. package/packages/dd-trace/src/random_sampler.js +0 -4
  327. package/packages/dd-trace/src/rate_limiter.js +0 -4
  328. package/packages/dd-trace/src/remote_config/capabilities.js +1 -9
  329. package/packages/dd-trace/src/remote_config/index.js +0 -1
  330. package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +0 -3
  331. package/packages/dd-trace/src/sampler.js +0 -4
  332. package/packages/dd-trace/src/sampling_rule.js +0 -7
  333. package/packages/dd-trace/src/serverless/vercel.js +0 -1
  334. package/packages/dd-trace/src/serverless.js +0 -1
  335. package/packages/dd-trace/src/service-naming/index.js +0 -1
  336. package/packages/dd-trace/src/service-naming/schemas/util.js +0 -1
  337. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +7 -0
  338. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +5 -0
  339. package/packages/dd-trace/src/span_processor.js +2 -2
  340. package/packages/dd-trace/src/span_sampler.js +0 -1
  341. package/packages/dd-trace/src/standalone/product.js +2 -2
  342. package/packages/dd-trace/src/standalone/tracesource.js +0 -1
  343. package/packages/dd-trace/src/startup-log.js +1 -1
  344. package/packages/dd-trace/src/telemetry/endpoints.js +0 -8
  345. package/packages/dd-trace/src/telemetry/logs/index.js +16 -5
  346. package/packages/dd-trace/src/telemetry/logs/log-collector.js +16 -6
  347. package/packages/dd-trace/src/telemetry/metrics.js +0 -2
  348. package/packages/dd-trace/src/telemetry/send-data.js +2 -1
  349. package/packages/dd-trace/src/telemetry/telemetry.js +4 -1
  350. package/packages/dd-trace/src/tracer.js +5 -4
  351. package/packages/dd-trace/src/util.js +13 -1
  352. package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -1
  353. package/packages/datadog-instrumentations/src/bullmq.js +0 -11
  354. package/packages/datadog-instrumentations/src/langchain.js +0 -7
  355. package/packages/datadog-instrumentations/src/langgraph.js +0 -7
  356. package/packages/datadog-instrumentations/src/mercurius.js +0 -11
@@ -207,7 +207,6 @@ class DogStatsDClient {
207
207
  /**
208
208
  * @param {boolean|(() => void)} [forceTelemetry] - Whether to ignore the telemetry interval, or completion callback
209
209
  * @param {() => void} [done] - Called after serverless deliveries complete
210
- * @returns {void}
211
210
  */
212
211
  flush (forceTelemetry = false, done) {
213
212
  if (typeof forceTelemetry === 'function') {
@@ -238,7 +237,6 @@ class DogStatsDClient {
238
237
  /**
239
238
  * @param {boolean} force - Whether to ignore the telemetry interval
240
239
  * @param {((send: (done?: () => void) => void) => void)} [track] - Tracks a non-serverless delivery
241
- * @returns {void}
242
240
  */
243
241
  #flushTelemetry (force, track) {
244
242
  const telemetry = this.telemetry
@@ -291,7 +289,6 @@ class DogStatsDClient {
291
289
  * @param {DogStatsDBufferState} state - Payload state to flush
292
290
  * @param {boolean} recordTelemetry - Whether to record the transport outcome
293
291
  * @param {((send: (done?: () => void) => void) => void)} [track] - Tracks a non-serverless delivery
294
- * @returns {void}
295
292
  */
296
293
  #flush (state, recordTelemetry, track) {
297
294
  const queue = this._enqueue(state)
@@ -314,7 +311,6 @@ class DogStatsDClient {
314
311
 
315
312
  /**
316
313
  * @param {number} bytes - Number of bytes sent
317
- * @returns {void}
318
314
  */
319
315
  #recordSent (bytes) {
320
316
  const telemetry = this.telemetry
@@ -326,7 +322,6 @@ class DogStatsDClient {
326
322
  /**
327
323
  * @param {number} bytes - Number of bytes dropped
328
324
  * @param {number} [packets] - Number of packets dropped
329
- * @returns {void}
330
325
  */
331
326
  #recordDropped (bytes, packets = 1) {
332
327
  const telemetry = this.telemetry
@@ -341,7 +336,6 @@ class DogStatsDClient {
341
336
  * @param {Buffer[]} queue - The metrics to send
342
337
  * @param {boolean} recordTelemetry - Whether to record the transport outcome
343
338
  * @param {() => void} [done] - Called after delivery completes
344
- * @returns {void}
345
339
  * @memberof DogStatsDClient
346
340
  */
347
341
  _sendHttp (queue, recordTelemetry, done) {
@@ -375,7 +369,6 @@ class DogStatsDClient {
375
369
  * @param {Buffer[]} queue - The metrics to send
376
370
  * @param {boolean} recordTelemetry - Whether to record the transport outcome
377
371
  * @param {() => void} [done] - Called after delivery completes
378
- * @returns {void}
379
372
  * @memberof DogStatsDClient
380
373
  */
381
374
  _sendUdp (queue, recordTelemetry, done) {
@@ -411,7 +404,6 @@ class DogStatsDClient {
411
404
  * @param {number} family - The family of the address
412
405
  * @param {boolean} recordTelemetry - Whether to record the transport outcome
413
406
  * @param {() => void} [done] - Called after every packet completes
414
- * @returns {void}
415
407
  * @memberof DogStatsDClient
416
408
  */
417
409
  _sendUdpFromQueue (queue, address, family, recordTelemetry, done) {
@@ -457,7 +449,6 @@ class DogStatsDClient {
457
449
  * @param {string[]} tags - The metric tags
458
450
  * @param {string} [tagsPrefix] - Serialized global tags
459
451
  * @param {DogStatsDBufferState} [state] - Payload state receiving the metric
460
- * @returns {void}
461
452
  * @memberof DogStatsDClient
462
453
  */
463
454
  _add (stat, value, type, tags, tagsPrefix = this.#tagsPrefix, state = this.#metrics) {
@@ -482,7 +473,6 @@ class DogStatsDClient {
482
473
  * @param {string} stat - Telemetry metric name
483
474
  * @param {number} value - Telemetry metric value
484
475
  * @param {string} [typeLabel] - Submitted or aggregated metric type
485
- * @returns {void}
486
476
  */
487
477
  #addTelemetry (stat, value, typeLabel) {
488
478
  const tags = typeLabel === undefined ? undefined : [`metrics_type:${typeLabel}`]
@@ -496,7 +486,6 @@ class DogStatsDClient {
496
486
  *
497
487
  * @param {string} message - The message to write
498
488
  * @param {DogStatsDBufferState} [state] - Payload state receiving the message
499
- * @returns {void}
500
489
  * @memberof DogStatsDClient
501
490
  */
502
491
  _write (message, state = this.#metrics) {
@@ -605,7 +594,6 @@ class MetricsAggregationClient {
605
594
  /**
606
595
  * @param {boolean|(() => void)} [forceTelemetry] - Whether to ignore the telemetry interval, or completion callback
607
596
  * @param {() => void} [done] - Called after serverless deliveries complete
608
- * @returns {void}
609
597
  */
610
598
  flush (forceTelemetry = false, done) {
611
599
  if (typeof forceTelemetry === 'function') {
@@ -680,9 +668,6 @@ class MetricsAggregationClient {
680
668
  this.count(name, -count, tags)
681
669
  }
682
670
 
683
- /**
684
- * @returns {number} Number of gauge contexts flushed
685
- */
686
671
  _captureGauges () {
687
672
  let metrics = 0
688
673
  const contexts = this._captureTree(this._gauges, (node, name, tags) => {
@@ -696,9 +681,6 @@ class MetricsAggregationClient {
696
681
  return contexts
697
682
  }
698
683
 
699
- /**
700
- * @returns {number} Number of counter contexts flushed
701
- */
702
684
  _captureCounters () {
703
685
  let metrics = 0
704
686
  const contexts = this._captureTree(this._counters, (node, name, tags) => {
@@ -712,9 +694,6 @@ class MetricsAggregationClient {
712
694
  return contexts
713
695
  }
714
696
 
715
- /**
716
- * @returns {number} Number of histogram contexts flushed
717
- */
718
697
  _captureHistograms () {
719
698
  let metrics = 0
720
699
  const contexts = this._captureTree(this._histograms, (node, name, tags) => {
@@ -740,7 +719,6 @@ class MetricsAggregationClient {
740
719
  /**
741
720
  * @param {Map<string, MetricNode>} tree - Metric context tree
742
721
  * @param {CaptureMetric} fn - Called for every context with submissions
743
- * @returns {number} Number of contexts with submissions
744
722
  */
745
723
  _captureTree (tree, fn) {
746
724
  let contexts = 0
@@ -757,7 +735,6 @@ class MetricsAggregationClient {
757
735
  * @param {string} name - Metric name
758
736
  * @param {string[]} tags - Current metric tags
759
737
  * @param {CaptureMetric} fn - Called for every context with submissions
760
- * @returns {number} Number of contexts with submissions
761
738
  */
762
739
  _captureNode (node, name, tags, fn) {
763
740
  let contexts = 0
@@ -74,13 +74,11 @@ class CrossPayloadAgentEncoder extends AgentEncoder {
74
74
  return super.makePayload()
75
75
  }
76
76
 
77
- /** @returns {void} */
78
77
  reset () {
79
78
  this.#prepareReset()
80
79
  super.reset()
81
80
  }
82
81
 
83
- /** @returns {void} */
84
82
  #prepareReset () {
85
83
  const crossPayloadState = this.#crossPayloadState
86
84
  if (crossPayloadState !== undefined && !prepareCrossPayloadReset(crossPayloadState)) {
@@ -129,7 +127,6 @@ function markPayloadString (crossPayloadState, value) {
129
127
 
130
128
  /**
131
129
  * @param {ReturnType<typeof createCrossPayloadState>} crossPayloadState
132
- * @returns {boolean}
133
130
  */
134
131
  function prepareCrossPayloadReset (crossPayloadState) {
135
132
  const learning = crossPayloadState.learningPayloadCount < CROSS_PAYLOAD_LEARNING_PAYLOAD_LIMIT
@@ -136,7 +136,6 @@ function formatSpanWithLegacyEvents (span) {
136
136
  * replacer hooks).
137
137
  *
138
138
  * @param {Array<{ name: unknown, startTime: number, attributes?: object }>} spanEvents
139
- * @returns {string}
140
139
  */
141
140
  function stringifySpanEvents (spanEvents) {
142
141
  let result = '['
@@ -200,7 +199,6 @@ function stringifyAttributeValue (value) {
200
199
  * conversion (which is what `JSON.stringify` calls internally).
201
200
  *
202
201
  * @param {number} value
203
- * @returns {string}
204
202
  */
205
203
  function jsonNumber (value) {
206
204
  if (Number.isFinite(value)) return String(value)
@@ -215,7 +213,6 @@ function jsonNumber (value) {
215
213
  * lone surrogates, etc.).
216
214
  *
217
215
  * @param {string} value
218
- * @returns {string}
219
216
  */
220
217
  function escapeJsonString (value) {
221
218
  for (let index = 0; index < value.length; index++) {
@@ -649,7 +646,6 @@ class AgentEncoder {
649
646
  * @param {number} offset
650
647
  * @param {Buffer} keyPrefix Precomputed `[key, 0xCF]`.
651
648
  * @param {{ toBuffer: () => Uint8Array | number[] }} identifier
652
- * @returns {number}
653
649
  */
654
650
  #writeIdAt (target, offset, keyPrefix, identifier) {
655
651
  target.set(keyPrefix, offset)
@@ -871,7 +867,6 @@ class AgentEncoder {
871
867
  * @param {MsgpackChunk} bytes
872
868
  * @param {string} key
873
869
  * @param {unknown} value
874
- * @returns {boolean}
875
870
  */
876
871
  #emitAttribute (bytes, key, value) {
877
872
  if (typeof value === 'string') {
@@ -911,7 +906,6 @@ class AgentEncoder {
911
906
  * @param {MsgpackChunk} bytes
912
907
  * @param {string} key
913
908
  * @param {Array<unknown>} array
914
- * @returns {boolean}
915
909
  */
916
910
  #emitArrayAttribute (bytes, key, array) {
917
911
  const sectionStart = bytes.length
@@ -946,7 +940,6 @@ class AgentEncoder {
946
940
  * @param {MsgpackChunk} bytes
947
941
  * @param {string} key
948
942
  * @param {unknown} value
949
- * @returns {boolean}
950
943
  */
951
944
  #emitArrayItem (bytes, key, value) {
952
945
  if (typeof value === 'string') {
@@ -173,7 +173,6 @@ class AgentEncoder extends BaseEncoder {
173
173
  * @param {Uint8Array} target
174
174
  * @param {number} offset
175
175
  * @param {number} index
176
- * @returns {number}
177
176
  */
178
177
  #writeIndexAt (target, offset, index) {
179
178
  target[offset] = 0xCE
@@ -192,7 +191,6 @@ class AgentEncoder extends BaseEncoder {
192
191
  * @param {Uint8Array} target
193
192
  * @param {number} offset
194
193
  * @param {{ toBuffer: () => Uint8Array | number[] }} identifier
195
- * @returns {number}
196
194
  */
197
195
  #writeIdAt (target, offset, identifier) {
198
196
  target[offset] = 0xCF
@@ -53,7 +53,6 @@ function truncateSpanTestOpt (span) {
53
53
  * the formatter no longer reshapes events, it hands the raw array through.
54
54
  *
55
55
  * @param {{ startTime: number }} event
56
- * @returns {number}
57
56
  */
58
57
  function eventTimeNano (event) {
59
58
  return Math.round(event.startTime * 1e6)
@@ -1,6 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  module.exports = {
4
+ EVP_ORIGIN_HEADER_NAME: 'DD-EVP-ORIGIN',
5
+ EVP_ORIGIN_VERSION_HEADER_NAME: 'DD-EVP-ORIGIN-VERSION',
4
6
  EVP_PROXY_PATH_V2: '/evp_proxy/v2',
5
7
  EVP_PROXY_PATH_V4: '/evp_proxy/v4',
6
8
  EVP_SUBDOMAIN_HEADER_NAME: 'X-Datadog-EVP-Subdomain',
@@ -3,6 +3,8 @@
3
3
  const { createSiteUrl } = require('../exporters/common/url')
4
4
  const log = require('../log')
5
5
 
6
+ let invalidSiteWarningLogged = false
7
+
6
8
  /**
7
9
  * @typedef {object} DirectEVPRoute
8
10
  * @property {URL} url - Direct intake URL
@@ -21,21 +23,23 @@ const log = require('../log')
21
23
  */
22
24
  function createDirectEVPRoute (config, intake) {
23
25
  const apiKey = config.DD_API_KEY
24
- if (!apiKey || !config.site) return
25
-
26
- try {
27
- const url = createSiteUrl(config.site, intake)
28
- if (url === undefined) throw new Error('Invalid direct EVP intake URL')
26
+ if (!apiKey) return
29
27
 
30
- return {
31
- url,
32
- basePath: '',
33
- headers: {
34
- 'DD-API-KEY': apiKey,
35
- },
28
+ const url = createSiteUrl(config.site, intake)
29
+ if (url === undefined) {
30
+ if (!invalidSiteWarningLogged) {
31
+ invalidSiteWarningLogged = true
32
+ log.warn('Feature Flags direct event delivery is disabled because DD_SITE is invalid.')
36
33
  }
37
- } catch (error) {
38
- log.debug('Unable to configure direct EVP intake: %s', error.message)
34
+ return
35
+ }
36
+
37
+ return {
38
+ url,
39
+ basePath: '',
40
+ headers: {
41
+ 'DD-API-KEY': apiKey,
42
+ },
39
43
  }
40
44
  }
41
45
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { fetchAgentInfo } = require('../agent/info')
4
4
  const log = require('../log')
5
- const { stripTrailingSlashes } = require('./path')
5
+ const { joinAgentURLPath, stripTrailingSlashes } = require('./path')
6
6
 
7
7
  /**
8
8
  * Receiver discovery contract
@@ -25,13 +25,13 @@ const { stripTrailingSlashes } = require('./path')
25
25
  * serverless-init image or deployment type.
26
26
  *
27
27
  * This module only discovers a candidate route. A missing or unresponsive
28
- * `/info` endpoint returns an error through the shared request timeout and
29
- * retry policy. A valid response without a compatible path returns no route.
28
+ * `/info` endpoint returns an error after the request's bounded retry policy.
29
+ * Callers can disable retries to make discovery a single attempt. A valid
30
+ * response without a compatible path returns no route.
30
31
  * Discovery sends no events, so the caller can safely select direct intake
31
32
  * after either result. The caller also owns later delivery failures. Exposure
32
- * delivery uses retries and can therefore produce duplicates. After local
33
- * retries fail, the caller can retry through direct intake and use that route
34
- * for future batches.
33
+ * delivery decides whether a failed batch can be replayed and which route
34
+ * future batches use.
35
35
  *
36
36
  * Reference implementations:
37
37
  *
@@ -62,17 +62,17 @@ function selectEVPProxyPath (agentInfo, { supportedPaths, requiredHeaders = [] }
62
62
  }
63
63
 
64
64
  const allowedHeaders = agentInfo.evp_proxy_allowed_headers
65
- if (allowedHeaders !== undefined) {
65
+ if (requiredHeaders.length > 0 || allowedHeaders !== undefined) {
66
66
  if (!Array.isArray(allowedHeaders)) return
67
67
 
68
68
  const normalizedHeaders = new Set()
69
69
  for (const header of allowedHeaders) {
70
70
  if (typeof header === 'string') {
71
- normalizedHeaders.add(header.toLowerCase())
71
+ normalizedHeaders.add(header.trim().toLowerCase())
72
72
  }
73
73
  }
74
74
 
75
- if (requiredHeaders.some(header => !normalizedHeaders.has(header.toLowerCase()))) {
75
+ if (requiredHeaders.some(header => !normalizedHeaders.has(header.trim().toLowerCase()))) {
76
76
  return
77
77
  }
78
78
  }
@@ -105,8 +105,8 @@ function selectEVPProxyPath (agentInfo, { supportedPaths, requiredHeaders = [] }
105
105
  * @param {string[]} options.supportedPaths - Supported paths in preference order
106
106
  * @param {string[]} [options.requiredHeaders] - Headers that the proxy must forward unchanged to intake. Each
107
107
  * header must appear in `evp_proxy_allowed_headers`. Do not include routing headers that the Agent consumes.
108
+ * @param {boolean} [options.retry] - Set false to disable the request's default bounded retries
108
109
  * @param {(error: Error|null, route?: {url: URL, basePath: string}) => void} callback - Result callback
109
- * @returns {void}
110
110
  */
111
111
  function discoverEVPProxy (url, options, callback) {
112
112
  fetchAgentInfo(url, (error, agentInfo) => {
@@ -122,7 +122,10 @@ function discoverEVPProxy (url, options, callback) {
122
122
  }
123
123
 
124
124
  log.debug('EVP proxy route %s discovered through the configured local receiver', basePath)
125
- callback(null, { url, basePath })
125
+ callback(null, { url, basePath: joinAgentURLPath(url, basePath) })
126
+ }, {
127
+ path: joinAgentURLPath(url, '/info'),
128
+ retry: options.retry,
126
129
  })
127
130
  }
128
131
 
@@ -4,7 +4,6 @@ const LEADING_SLASHES = /^\/+/
4
4
 
5
5
  /**
6
6
  * @param {string} value
7
- * @returns {string}
8
7
  */
9
8
  function stripTrailingSlashes (value) {
10
9
  let end = value.length
@@ -17,15 +16,28 @@ function stripTrailingSlashes (value) {
17
16
  *
18
17
  * This utility does not perform EVP proxy discovery.
19
18
  *
20
- * @param {string} basePath - EVP proxy base path
21
- * @param {string} endpoint - Product intake endpoint
22
- * @returns {string} Joined request path
19
+ * @param {...string} paths - URL path components
23
20
  */
24
- function joinEVPProxyPath (basePath, endpoint) {
25
- const normalizedBasePath = stripTrailingSlashes(basePath)
26
- const normalizedEndpoint = endpoint.replace(LEADING_SLASHES, '')
21
+ function joinEVPProxyPath (...paths) {
22
+ let joined = ''
23
+ for (const path of paths) {
24
+ const normalized = stripTrailingSlashes(path).replace(LEADING_SLASHES, '')
25
+ if (normalized) joined += `/${normalized}`
26
+ }
27
27
 
28
- return `${normalizedBasePath}/${normalizedEndpoint}`
28
+ return joined || '/'
29
29
  }
30
30
 
31
- module.exports = { joinEVPProxyPath, stripTrailingSlashes }
31
+ /**
32
+ * Joins an HTTP Agent URL path prefix with an EVP proxy path.
33
+ * Unix URL pathnames identify the socket itself and are not HTTP path prefixes.
34
+ *
35
+ * @param {URL} url - Configured Agent URL
36
+ * @param {...string} paths - EVP path components
37
+ */
38
+ function joinAgentURLPath (url, ...paths) {
39
+ const prefix = url.protocol === 'http:' || url.protocol === 'https:' ? url.pathname : ''
40
+ return joinEVPProxyPath(prefix, ...paths)
41
+ }
42
+
43
+ module.exports = { joinAgentURLPath, joinEVPProxyPath, stripTrailingSlashes }
@@ -44,7 +44,6 @@ class AgentWriter extends BaseWriter {
44
44
  * Test Optimization owns its own request lifecycle tracking.
45
45
  * @param {(error?: Error) => void} [done]
46
46
  * @param {{ deadline?: number }} [options]
47
- * @returns {void}
48
47
  */
49
48
  flushDirect (done, options) {
50
49
  if (this.#requestTracker) {
@@ -63,7 +63,6 @@ class AgentlessExporter {
63
63
  /**
64
64
  * Sets the intake URL.
65
65
  * @param {string} urlString - The new intake URL
66
- * @returns {boolean} True if URL was set successfully
67
66
  */
68
67
  setUrl (urlString) {
69
68
  try {
@@ -25,7 +25,6 @@ const INTAKE_PATH = '/api/v2/spans'
25
25
  * reattach the TLD, e.g. 'us2.ddog-gov.com' -> 'https://browser-intake-us2-ddog-gov.com'.
26
26
  *
27
27
  * @param {string} [site] - The Datadog site, e.g. 'us3.datadoghq.com'. Defaults to 'datadoghq.com'.
28
- * @returns {string} The intake origin, without a path.
29
28
  */
30
29
  function computeIntakeUrl (site = 'datadoghq.com') {
31
30
  const normalized = site.toLowerCase()
@@ -117,9 +117,6 @@ class AgentlessWriter extends BaseWriter {
117
117
  }
118
118
  }
119
119
 
120
- /**
121
- * @returns {string} The full agentless intake endpoint.
122
- */
123
120
  #endpoint () {
124
121
  const endpoint = new URL(this._url)
125
122
  endpoint.pathname = INTAKE_PATH
@@ -45,7 +45,6 @@ class FinalFlushRequestTracker {
45
45
  *
46
46
  * @param {(error?: Error) => void} [done]
47
47
  * @param {{ deadline?: number }} [options]
48
- * @returns {void}
49
48
  */
50
49
  flush (done, options) {
51
50
  if (options?.deadline === undefined) {
@@ -112,7 +111,6 @@ class FinalFlushRequestTracker {
112
111
  * @param {RequestOptions} options
113
112
  * @param {(error: Error|null, result?: string|null, statusCode?: number,
114
113
  * headers?: import('node:http').IncomingHttpHeaders) => void} callback
115
- * @returns {void}
116
114
  */
117
115
  send (request, data, options, callback) {
118
116
  const controller = new AbortController()
@@ -141,7 +139,6 @@ class FinalFlushRequestTracker {
141
139
 
142
140
  /**
143
141
  * @param {PendingRequest} pendingRequest
144
- * @returns {void}
145
142
  */
146
143
  #dropRequest (pendingRequest) {
147
144
  this.#pendingRequests.delete(pendingRequest)
@@ -155,7 +152,6 @@ class FinalFlushRequestTracker {
155
152
  /**
156
153
  * @param {FinalFlush} finalFlush
157
154
  * @param {PendingRequest} pendingRequest
158
- * @returns {void}
159
155
  */
160
156
  #attachRequest (finalFlush, pendingRequest) {
161
157
  finalFlush.requests.add(pendingRequest)
@@ -165,7 +161,6 @@ class FinalFlushRequestTracker {
165
161
 
166
162
  /**
167
163
  * @param {PendingRequest} pendingRequest
168
- * @returns {void}
169
164
  */
170
165
  #updateRequestDeadline (pendingRequest) {
171
166
  let deadline = 0
@@ -177,7 +172,6 @@ class FinalFlushRequestTracker {
177
172
 
178
173
  /**
179
174
  * @param {FinalFlush} finalFlush
180
- * @returns {void}
181
175
  */
182
176
  #finishFinalFlush (finalFlush) {
183
177
  if (!this.#finalFlushes.has(finalFlush) || !finalFlush.writerDone || finalFlush.requests.size !== 0) return
@@ -170,6 +170,7 @@ function request (data, options, callback) {
170
170
  }
171
171
  const error = new log.NoTransmitError(errorMessage)
172
172
  error.status = res.statusCode
173
+ if (options.includeErrorResponseBody) error.responseBody = responseData
173
174
 
174
175
  complete(error, null, res.statusCode, res.headers)
175
176
  }
@@ -5,9 +5,11 @@ const { format } = require('node:url')
5
5
 
6
6
  const { urlToHttpOptions } = require('./url-to-http-options-polyfill')
7
7
 
8
+ const DEFAULT_SITE = 'datadoghq.com'
9
+ const DNS_LABEL = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/
10
+
8
11
  /**
9
12
  * @param {string} hostname
10
- * @returns {boolean}
11
13
  */
12
14
  function isLoopbackHost (hostname) {
13
15
  // Gate the 127/8 prefix on an IPv4 literal so names such as 127.example.com cannot pass.
@@ -20,7 +22,6 @@ function isLoopbackHost (hostname) {
20
22
  /**
21
23
  * @param {string|undefined} protocol
22
24
  * @param {string|undefined} hostname
23
- * @returns {boolean}
24
25
  */
25
26
  function canSendApiKey (protocol, hostname) {
26
27
  return protocol === 'https:' || protocol === 'unix:' ||
@@ -33,7 +34,11 @@ function canSendApiKey (protocol, hostname) {
33
34
  * @returns {URL | undefined}
34
35
  */
35
36
  function createSiteUrl (site, intake) {
36
- const hostname = `${intake === undefined ? '' : `${intake}.`}${site}`.toLowerCase()
37
+ const normalizedSite = normalizeSite(site)
38
+ if (normalizedSite === undefined) return
39
+
40
+ const hostname = `${intake === undefined ? '' : `${intake}.`}${normalizedSite}`
41
+ if (hostname.length > 253) return
37
42
 
38
43
  try {
39
44
  const url = new URL(format({
@@ -55,6 +60,30 @@ function createSiteUrl (site, intake) {
55
60
  } catch {}
56
61
  }
57
62
 
63
+ /**
64
+ * Normalizes a Datadog site as a DNS suffix.
65
+ *
66
+ * @param {string | undefined} site
67
+ * @returns {string | undefined}
68
+ */
69
+ function normalizeSite (site) {
70
+ if (site === undefined) return DEFAULT_SITE
71
+ if (typeof site !== 'string') return
72
+ for (let index = 0; index < site.length; index++) {
73
+ if (site.charCodeAt(index) > 127) return
74
+ }
75
+
76
+ const normalized = site.trim().toLowerCase() || DEFAULT_SITE
77
+ if (normalized.length > 253) return
78
+
79
+ const labels = normalized.split('.')
80
+ for (const label of labels) {
81
+ if (!DNS_LABEL.test(label)) return
82
+ }
83
+
84
+ return normalized
85
+ }
86
+
58
87
  /**
59
88
  * Convert an agent/intake URL into Node http(s) request options.
60
89
  *
@@ -82,4 +111,4 @@ function parseUrl (urlObjOrString) {
82
111
  return url
83
112
  }
84
113
 
85
- module.exports = { canSendApiKey, createSiteUrl, isLoopbackHost, parseUrl }
114
+ module.exports = { canSendApiKey, createSiteUrl, isLoopbackHost, normalizeSite, parseUrl }
@@ -27,7 +27,6 @@ class Writer {
27
27
  * Flushes queued telemetry, retaining delivery on supported serverless platforms.
28
28
  * @param {(error?: Error) => void} [done]
29
29
  * @param {{ deadline?: number }} [options]
30
- * @returns {void}
31
30
  */
32
31
  flush (done, options) {
33
32
  if (this.#deliveryTracker) {
@@ -40,7 +39,6 @@ class Writer {
40
39
  * Flushes queued telemetry without registering serverless delivery retention.
41
40
  * @param {(error?: Error) => void} [done]
42
41
  * @param {{ deadline?: number }} [options]
43
- * @returns {void}
44
42
  */
45
43
  flushDirect (done = noop, options) {
46
44
  const count = this._encoder.count()
@@ -36,7 +36,6 @@ class Identifier {
36
36
 
37
37
  /**
38
38
  * @param {number} [radix]
39
- * @returns {string}
40
39
  */
41
40
  toString (radix = 16) {
42
41
  if (radix === 16) {
@@ -50,9 +49,6 @@ class Identifier {
50
49
  return toNumberString(this.#buffer, radix)
51
50
  }
52
51
 
53
- /**
54
- * @returns {bigint}
55
- */
56
52
  toBigInt () {
57
53
  this.#bigInt ??= Buffer.from(this.#buffer).readBigUInt64BE(0)
58
54
  return this.#bigInt
@@ -75,9 +71,6 @@ class Identifier {
75
71
  return this.#buffer.slice(-8)
76
72
  }
77
73
 
78
- /**
79
- * @returns {string}
80
- */
81
74
  toJSON () {
82
75
  return this.toString()
83
76
  }
@@ -88,7 +81,6 @@ class Identifier {
88
81
  * only this identifier's hex representation.
89
82
  *
90
83
  * @param {string | undefined} traceIdHigh - 16-char hex of the upper 64 bits, or undefined
91
- * @returns {string}
92
84
  */
93
85
  toTraceIdHex (traceIdHigh) {
94
86
  if (traceIdHigh && this.#buffer.length <= 8) {
@@ -99,7 +91,6 @@ class Identifier {
99
91
 
100
92
  /**
101
93
  * @param {Identifier} other
102
- * @returns {boolean}
103
94
  */
104
95
  equals (other) {
105
96
  // Big-endian suffix compare: when buffers differ in length, only the
@@ -182,7 +173,6 @@ function fromString (str, raddix) {
182
173
  /**
183
174
  * @param {number[] | Uint8Array} buffer
184
175
  * @param {number} [radix]
185
- * @returns {string}
186
176
  */
187
177
  function toNumberString (buffer, radix) {
188
178
  let high = readInt32(buffer, buffer.length - 8)
@@ -233,7 +223,6 @@ function pseudoRandom () {
233
223
  /**
234
224
  * @param {number[] | Uint8Array} buffer
235
225
  * @param {number} offset
236
- * @returns {number}
237
226
  */
238
227
  function readInt32 (buffer, offset) {
239
228
  return (buffer[offset + 0] * 16_777_216) +