dd-trace 6.16.0 → 6.17.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 (334) 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 +165 -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 +72 -12
  42. package/packages/datadog-instrumentations/src/cypress-config.js +0 -23
  43. package/packages/datadog-instrumentations/src/helpers/channel.js +0 -2
  44. package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +0 -5
  45. package/packages/datadog-instrumentations/src/helpers/hooks.js +8 -0
  46. package/packages/datadog-instrumentations/src/helpers/instrumentation-utils.js +0 -3
  47. package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +0 -6
  48. package/packages/datadog-instrumentations/src/helpers/register.js +4 -0
  49. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +72 -24
  50. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentation-registry.js +39 -0
  51. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +3 -17
  52. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +12 -0
  53. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/postgres.js +36 -0
  54. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/supabase.js +128 -0
  55. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +16 -0
  56. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms/postgres.js +388 -0
  57. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +0 -5
  58. package/packages/datadog-instrumentations/src/helpers/router-helper.js +0 -1
  59. package/packages/datadog-instrumentations/src/jest.js +141 -51
  60. package/packages/datadog-instrumentations/src/knex.js +0 -1
  61. package/packages/datadog-instrumentations/src/mariadb-bundle.js +0 -24
  62. package/packages/datadog-instrumentations/src/mariadb.js +0 -2
  63. package/packages/datadog-instrumentations/src/mocha/common.js +0 -1
  64. package/packages/datadog-instrumentations/src/mocha/main.js +22 -25
  65. package/packages/datadog-instrumentations/src/mocha/utils.js +119 -49
  66. package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +0 -6
  67. package/packages/datadog-instrumentations/src/mocha/worker.js +14 -17
  68. package/packages/datadog-instrumentations/src/mysql2.js +0 -2
  69. package/packages/datadog-instrumentations/src/openai-realtime/audio-accumulator.js +241 -0
  70. package/packages/datadog-instrumentations/src/openai-realtime/events.js +76 -0
  71. package/packages/datadog-instrumentations/src/openai-realtime/index.js +301 -0
  72. package/packages/datadog-instrumentations/src/openai-realtime/session.js +998 -0
  73. package/packages/datadog-instrumentations/src/openai-realtime/turns.js +211 -0
  74. package/packages/datadog-instrumentations/src/openai.js +51 -12
  75. package/packages/datadog-instrumentations/src/oracledb.js +9 -3
  76. package/packages/datadog-instrumentations/src/playwright-reporter.js +3 -16
  77. package/packages/datadog-instrumentations/src/playwright.js +238 -55
  78. package/packages/datadog-instrumentations/src/postgres.js +7 -0
  79. package/packages/datadog-instrumentations/src/router.js +0 -2
  80. package/packages/datadog-instrumentations/src/rum-browser-scripts.js +0 -2
  81. package/packages/datadog-instrumentations/src/sequelize.js +0 -1
  82. package/packages/datadog-instrumentations/src/supabase.js +15 -0
  83. package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +18 -18
  84. package/packages/datadog-instrumentations/src/vitest-main.js +37 -17
  85. package/packages/datadog-instrumentations/src/vitest-util.js +7 -1
  86. package/packages/datadog-instrumentations/src/vitest-worker.js +49 -13
  87. package/packages/datadog-instrumentations/src/webdriverio.js +23 -42
  88. package/packages/datadog-instrumentations/src/ws.js +0 -1
  89. package/packages/datadog-plugin-ai/src/utils.js +0 -2
  90. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/trace-checkpoint.js +0 -1
  91. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/util.js +0 -2
  92. package/packages/datadog-plugin-aws-sdk/src/base.js +0 -1
  93. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +0 -1
  94. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +0 -1
  95. package/packages/datadog-plugin-aws-sdk/src/util.js +0 -1
  96. package/packages/datadog-plugin-azure-durable-functions/src/index.js +0 -1
  97. package/packages/datadog-plugin-cucumber/src/index.js +10 -0
  98. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +171 -75
  99. package/packages/datadog-plugin-cypress/src/finalization.js +0 -3
  100. package/packages/datadog-plugin-cypress/src/source-map-utils.js +0 -4
  101. package/packages/datadog-plugin-cypress/src/support.js +52 -7
  102. package/packages/datadog-plugin-graphql/src/resolve-error.js +1 -2
  103. package/packages/datadog-plugin-graphql/src/utils.js +0 -5
  104. package/packages/datadog-plugin-jest/src/index.js +13 -0
  105. package/packages/datadog-plugin-kafkajs/src/producer.js +0 -1
  106. package/packages/datadog-plugin-mocha/src/index.js +39 -11
  107. package/packages/datadog-plugin-mongodb-core/src/query.js +0 -1
  108. package/packages/datadog-plugin-openai/src/index.js +16 -1
  109. package/packages/datadog-plugin-openai/src/realtime.js +144 -0
  110. package/packages/datadog-plugin-openai-agents/src/integration.js +0 -4
  111. package/packages/datadog-plugin-openai-agents/src/util.js +0 -1
  112. package/packages/datadog-plugin-playwright/src/index.js +76 -9
  113. package/packages/datadog-plugin-postgres/src/index.js +167 -0
  114. package/packages/datadog-plugin-prisma/src/datadog-tracing-helper.js +0 -1
  115. package/packages/datadog-plugin-redis/src/index.js +15 -1
  116. package/packages/datadog-plugin-supabase/src/error.js +18 -0
  117. package/packages/datadog-plugin-supabase/src/index.js +21 -0
  118. package/packages/datadog-plugin-supabase/src/supabase-auth-js-gotrueclient-getuser.js +69 -0
  119. package/packages/datadog-plugin-supabase/src/supabase-functions-js-functionsclient-invoke.js +70 -0
  120. package/packages/datadog-plugin-supabase/src/supabase-postgrest-js-postgrestbuilder-then.js +122 -0
  121. package/packages/datadog-plugin-supabase/src/supabase-realtime-js-realtimechannel-send.js +66 -0
  122. package/packages/datadog-plugin-supabase/src/supabase-storage-js-handle-request.js +93 -0
  123. package/packages/datadog-plugin-supabase/src/url.js +17 -0
  124. package/packages/datadog-plugin-vitest/src/index.js +10 -0
  125. package/packages/datadog-plugin-ws/src/util.js +0 -4
  126. package/packages/datadog-turbopack/index.js +0 -6
  127. package/packages/datadog-turbopack/src/loader.js +0 -16
  128. package/packages/datadog-webpack/src/loader.js +0 -1
  129. package/packages/dd-trace/src/aiguard/client.js +2 -3
  130. package/packages/dd-trace/src/aiguard/evaluation.js +6 -12
  131. package/packages/dd-trace/src/aiguard/index.js +2 -2
  132. package/packages/dd-trace/src/aiguard/integrations/index.js +1 -1
  133. package/packages/dd-trace/src/aiguard/integrations/openai.js +81 -7
  134. package/packages/dd-trace/src/aiguard/messages/anthropic.js +0 -2
  135. package/packages/dd-trace/src/aiguard/messages/openai.js +64 -1
  136. package/packages/dd-trace/src/aiguard/messages/utils.js +0 -1
  137. package/packages/dd-trace/src/aiguard/redaction.js +0 -1
  138. package/packages/dd-trace/src/aiguard/sdk.js +1 -1
  139. package/packages/dd-trace/src/appsec/activation.js +1 -1
  140. package/packages/dd-trace/src/appsec/api_security/normalized-route.js +0 -5
  141. package/packages/dd-trace/src/appsec/api_security/sampler.js +0 -4
  142. package/packages/dd-trace/src/appsec/blocking/index.js +3 -3
  143. package/packages/dd-trace/src/appsec/downstream_requests.js +1 -4
  144. package/packages/dd-trace/src/appsec/iast/index.js +1 -1
  145. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +5 -5
  146. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -1
  147. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  148. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +3 -3
  149. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +8 -10
  150. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -2
  151. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +4 -1
  152. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +7 -7
  153. package/packages/dd-trace/src/appsec/index.js +2 -2
  154. package/packages/dd-trace/src/appsec/lambda.js +71 -2
  155. package/packages/dd-trace/src/appsec/rasp/utils.js +5 -1
  156. package/packages/dd-trace/src/appsec/remote_config.js +8 -6
  157. package/packages/dd-trace/src/appsec/reporter.js +10 -6
  158. package/packages/dd-trace/src/appsec/rule_manager.js +3 -3
  159. package/packages/dd-trace/src/appsec/sdk/track_event.js +0 -2
  160. package/packages/dd-trace/src/appsec/waf/index.js +2 -2
  161. package/packages/dd-trace/src/appsec/waf/waf_manager.js +8 -5
  162. package/packages/dd-trace/src/carrier.js +0 -5
  163. package/packages/dd-trace/src/ci-visibility/dynamic-atr-retries.js +104 -0
  164. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +0 -2
  165. package/packages/dd-trace/src/ci-visibility/efd-retry-policy.js +34 -3
  166. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +0 -1
  167. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +0 -1
  168. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +0 -1
  169. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/index.js +0 -4
  170. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/msgpack-to-json.js +0 -1
  171. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/sink.js +0 -2
  172. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +37 -15
  173. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +0 -3
  174. package/packages/dd-trace/src/ci-visibility/exporters/request.js +0 -11
  175. package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +0 -1
  176. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +0 -1
  177. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +0 -6
  178. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +2 -2
  179. package/packages/dd-trace/src/ci-visibility/requests/rate-limit.js +0 -1
  180. package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +0 -5
  181. package/packages/dd-trace/src/ci-visibility/requests/video-request.js +0 -1
  182. package/packages/dd-trace/src/ci-visibility/telemetry.js +13 -0
  183. package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +0 -1
  184. package/packages/dd-trace/src/ci-visibility/test-screenshot.js +0 -2
  185. package/packages/dd-trace/src/ci-visibility/test-video.js +0 -1
  186. package/packages/dd-trace/src/config/defaults.js +3 -2
  187. package/packages/dd-trace/src/config/generated-config-types.d.ts +73 -67
  188. package/packages/dd-trace/src/config/helper.js +0 -1
  189. package/packages/dd-trace/src/config/index.js +24 -24
  190. package/packages/dd-trace/src/config/parsers.js +34 -6
  191. package/packages/dd-trace/src/config/remote_config.js +25 -109
  192. package/packages/dd-trace/src/config/supported-configurations.json +139 -10
  193. package/packages/dd-trace/src/datastreams/encoding.js +0 -1
  194. package/packages/dd-trace/src/datastreams/pathway.js +0 -1
  195. package/packages/dd-trace/src/debugger/constants.js +10 -0
  196. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +62 -10
  197. package/packages/dd-trace/src/debugger/devtools_client/config.js +2 -0
  198. package/packages/dd-trace/src/debugger/devtools_client/guardrail-metrics.js +15 -0
  199. package/packages/dd-trace/src/debugger/devtools_client/index.js +103 -27
  200. package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +50 -7
  201. package/packages/dd-trace/src/debugger/devtools_client/log.js +3 -1
  202. package/packages/dd-trace/src/debugger/devtools_client/probe_sampler.js +21 -8
  203. package/packages/dd-trace/src/debugger/devtools_client/send.js +40 -14
  204. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +53 -13
  205. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +118 -71
  206. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +0 -3
  207. package/packages/dd-trace/src/debugger/devtools_client/status.js +20 -6
  208. package/packages/dd-trace/src/debugger/guardrail-metrics.js +167 -0
  209. package/packages/dd-trace/src/debugger/index.js +50 -2
  210. package/packages/dd-trace/src/debugger/inspect-segment.js +0 -3
  211. package/packages/dd-trace/src/debugger/probe_sampler.js +133 -9
  212. package/packages/dd-trace/src/debugger/probe_sampler_constants.js +31 -1
  213. package/packages/dd-trace/src/dogstatsd.js +0 -23
  214. package/packages/dd-trace/src/encode/0.4-cross-payload.js +0 -3
  215. package/packages/dd-trace/src/encode/0.4.js +0 -7
  216. package/packages/dd-trace/src/encode/0.5.js +0 -2
  217. package/packages/dd-trace/src/encode/tags-processors.js +0 -1
  218. package/packages/dd-trace/src/evp_proxy/discovery.js +0 -1
  219. package/packages/dd-trace/src/evp_proxy/path.js +0 -2
  220. package/packages/dd-trace/src/exporters/agent/writer.js +0 -1
  221. package/packages/dd-trace/src/exporters/agentless/index.js +0 -1
  222. package/packages/dd-trace/src/exporters/agentless/intake.js +0 -1
  223. package/packages/dd-trace/src/exporters/agentless/writer.js +0 -3
  224. package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +0 -6
  225. package/packages/dd-trace/src/exporters/common/request.js +1 -0
  226. package/packages/dd-trace/src/exporters/common/url.js +0 -2
  227. package/packages/dd-trace/src/exporters/common/writer.js +0 -2
  228. package/packages/dd-trace/src/id.js +0 -11
  229. package/packages/dd-trace/src/llmobs/audio-codec.js +192 -0
  230. package/packages/dd-trace/src/llmobs/audio-utils.js +121 -0
  231. package/packages/dd-trace/src/llmobs/constants/audio.js +35 -0
  232. package/packages/dd-trace/src/llmobs/constants/prompts.js +14 -0
  233. package/packages/dd-trace/src/llmobs/constants/tags.js +17 -0
  234. package/packages/dd-trace/src/llmobs/eval-metric.js +0 -6
  235. package/packages/dd-trace/src/llmobs/experiments/dataset.js +0 -4
  236. package/packages/dd-trace/src/llmobs/experiments/experiment.js +0 -3
  237. package/packages/dd-trace/src/llmobs/experiments/index.js +7 -6
  238. package/packages/dd-trace/src/llmobs/experiments/util.js +1 -11
  239. package/packages/dd-trace/src/llmobs/index.js +1 -3
  240. package/packages/dd-trace/src/llmobs/noop.js +10 -0
  241. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +0 -4
  242. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +0 -1
  243. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +0 -4
  244. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +0 -2
  245. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +0 -2
  246. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +4 -6
  247. package/packages/dd-trace/src/llmobs/plugins/openai/realtime.js +285 -0
  248. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +16 -3
  249. package/packages/dd-trace/src/llmobs/prompts/cache.js +272 -0
  250. package/packages/dd-trace/src/llmobs/prompts/manager.js +639 -0
  251. package/packages/dd-trace/src/llmobs/prompts/noop.js +29 -0
  252. package/packages/dd-trace/src/llmobs/prompts/prompt.js +92 -0
  253. package/packages/dd-trace/src/llmobs/sdk.js +21 -6
  254. package/packages/dd-trace/src/llmobs/span_processor.js +81 -2
  255. package/packages/dd-trace/src/llmobs/tagger.js +30 -7
  256. package/packages/dd-trace/src/llmobs/telemetry.js +36 -4
  257. package/packages/dd-trace/src/llmobs/util.js +0 -34
  258. package/packages/dd-trace/src/llmobs/writers/base.js +0 -1
  259. package/packages/dd-trace/src/llmobs/writers/util.js +1 -2
  260. package/packages/dd-trace/src/log/channels.js +3 -0
  261. package/packages/dd-trace/src/log/index.js +23 -5
  262. package/packages/dd-trace/src/log-submission/log-submission-plugin.js +74 -6
  263. package/packages/dd-trace/src/msgpack/chunk.js +0 -1
  264. package/packages/dd-trace/src/openfeature/agentless_configuration_source.js +0 -12
  265. package/packages/dd-trace/src/openfeature/encoding.js +0 -2
  266. package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +0 -1
  267. package/packages/dd-trace/src/openfeature/index.js +0 -4
  268. package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +0 -1
  269. package/packages/dd-trace/src/openfeature/span-enrichment.js +0 -4
  270. package/packages/dd-trace/src/openfeature/writers/base.js +0 -6
  271. package/packages/dd-trace/src/openfeature/writers/exposures.js +0 -5
  272. package/packages/dd-trace/src/openfeature/writers/util.js +0 -4
  273. package/packages/dd-trace/src/opentelemetry/logs/logger.js +0 -1
  274. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +0 -1
  275. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +0 -1
  276. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +0 -2
  277. package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +0 -1
  278. package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_transformer.js +0 -1
  279. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +0 -1
  280. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +1 -14
  281. package/packages/dd-trace/src/opentelemetry/metrics/time.js +0 -1
  282. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +30 -13
  283. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +0 -1
  284. package/packages/dd-trace/src/opentelemetry/span-helpers.js +0 -1
  285. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +0 -1
  286. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +0 -3
  287. package/packages/dd-trace/src/opentracing/propagation/text_map.js +0 -6
  288. package/packages/dd-trace/src/opentracing/span_context.js +0 -1
  289. package/packages/dd-trace/src/otel-thread-ctx.js +38 -11
  290. package/packages/dd-trace/src/payload-tagging/tagging.js +15 -3
  291. package/packages/dd-trace/src/plugins/ci_plugin.js +0 -1
  292. package/packages/dd-trace/src/plugins/database.js +2 -6
  293. package/packages/dd-trace/src/plugins/index.js +7 -0
  294. package/packages/dd-trace/src/plugins/plugin.js +0 -4
  295. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  296. package/packages/dd-trace/src/plugins/util/git.js +1 -3
  297. package/packages/dd-trace/src/plugins/util/http-otel-semantics.js +0 -1
  298. package/packages/dd-trace/src/plugins/util/llm.js +0 -2
  299. package/packages/dd-trace/src/plugins/util/status-validator.js +0 -1
  300. package/packages/dd-trace/src/plugins/util/test.js +21 -20
  301. package/packages/dd-trace/src/plugins/util/url.js +0 -5
  302. package/packages/dd-trace/src/priority_sampler.js +0 -6
  303. package/packages/dd-trace/src/process-tags/index.js +0 -1
  304. package/packages/dd-trace/src/profiler.js +132 -35
  305. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +0 -1
  306. package/packages/dd-trace/src/profiling/profiler.js +101 -41
  307. package/packages/dd-trace/src/profiling/ssi-heuristics.js +29 -15
  308. package/packages/dd-trace/src/propagation-hash/index.js +0 -1
  309. package/packages/dd-trace/src/proxy.js +21 -45
  310. package/packages/dd-trace/src/random_sampler.js +0 -4
  311. package/packages/dd-trace/src/rate_limiter.js +0 -4
  312. package/packages/dd-trace/src/remote_config/capabilities.js +1 -9
  313. package/packages/dd-trace/src/remote_config/index.js +0 -1
  314. package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +0 -3
  315. package/packages/dd-trace/src/sampler.js +0 -4
  316. package/packages/dd-trace/src/sampling_rule.js +0 -7
  317. package/packages/dd-trace/src/serverless/vercel.js +0 -1
  318. package/packages/dd-trace/src/serverless.js +0 -1
  319. package/packages/dd-trace/src/service-naming/index.js +0 -1
  320. package/packages/dd-trace/src/service-naming/schemas/util.js +0 -1
  321. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +7 -0
  322. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +5 -0
  323. package/packages/dd-trace/src/span_processor.js +2 -2
  324. package/packages/dd-trace/src/span_sampler.js +0 -1
  325. package/packages/dd-trace/src/standalone/product.js +2 -2
  326. package/packages/dd-trace/src/standalone/tracesource.js +0 -1
  327. package/packages/dd-trace/src/startup-log.js +1 -1
  328. package/packages/dd-trace/src/telemetry/endpoints.js +0 -8
  329. package/packages/dd-trace/src/telemetry/logs/index.js +16 -5
  330. package/packages/dd-trace/src/telemetry/logs/log-collector.js +16 -6
  331. package/packages/dd-trace/src/telemetry/metrics.js +0 -2
  332. package/packages/dd-trace/src/telemetry/telemetry.js +4 -1
  333. package/packages/dd-trace/src/util.js +13 -1
  334. package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -1
@@ -0,0 +1,211 @@
1
+ 'use strict'
2
+
3
+ const AudioAccumulator = require('./audio-accumulator')
4
+
5
+ /**
6
+ * @typedef {{ name?: string, arguments?: unknown, toolId?: string, type?: string }} ToolCall
7
+ * @typedef {{ name?: string, result?: string, toolId?: string, type?: string }} ToolResult
8
+ */
9
+
10
+ /**
11
+ * One response's text or transcript, accumulated across the output items it arrives in.
12
+ *
13
+ * Deltas stream per output item, and each item ends with a `.done` carrying that item's
14
+ * authoritative final value. A single response can hold several output items — a server-side MCP
15
+ * call sits between a preamble message and the answer — so a `.done` replaces only the span its own
16
+ * item contributed rather than the whole response, which would drop every item before it.
17
+ *
18
+ * Events that carry no item id are treated as one continuous item, which is how a response with a
19
+ * single output item behaves anyway.
20
+ */
21
+ class ItemText {
22
+ /** @type {string} */
23
+ value = ''
24
+
25
+ /** @type {string | undefined} */
26
+ #itemId = undefined
27
+
28
+ /** Offset into `value` at which the current item's span begins. */
29
+ #itemStart = 0
30
+
31
+ /**
32
+ * @param {unknown} itemId
33
+ * @param {string} delta
34
+ */
35
+ appendDelta (itemId, delta) {
36
+ this.#openItem(itemId)
37
+ this.value += delta
38
+ }
39
+
40
+ /**
41
+ * Replace the current item's span with the final value the server reported for it.
42
+ *
43
+ * @param {unknown} itemId
44
+ * @param {string} final
45
+ */
46
+ complete (itemId, final) {
47
+ this.#openItem(itemId)
48
+ this.value = this.value.slice(0, this.#itemStart) + final
49
+ }
50
+
51
+ /**
52
+ * Begin a new item's span, leaving everything earlier items contributed in place.
53
+ *
54
+ * @param {unknown} itemId
55
+ */
56
+ #openItem (itemId) {
57
+ const item = itemId == null ? undefined : String(itemId)
58
+ if (item === this.#itemId) return
59
+
60
+ this.#itemId = item
61
+ this.#itemStart = this.value.length
62
+ }
63
+ }
64
+
65
+ /** Accumulated user input — audio plus transcript or text — for a single turn. */
66
+ class InputTurn {
67
+ /**
68
+ * @param {(() => boolean) | boolean} [retainAudio] - Whether anything consumes the bytes, so only
69
+ * their count is kept when not. Resolved when the segment opens. See `AudioAccumulator`.
70
+ */
71
+ constructor (retainAudio = true) {
72
+ this.audio = new AudioAccumulator(retainAudio)
73
+ }
74
+
75
+ text = ''
76
+
77
+ transcript = ''
78
+
79
+ /** @type {string | undefined} */
80
+ itemId = undefined
81
+
82
+ /**
83
+ * Wall clock (epoch ms) when the user actually started speaking, from the VAD speech-onset event.
84
+ * This is the start of the user-speech window; the first buffered frame is not, because a
85
+ * server-VAD client streams the microphone continuously.
86
+ *
87
+ * @type {number | undefined}
88
+ */
89
+ speechStartTime = undefined
90
+
91
+ /**
92
+ * Wall clock (epoch ms) when the input audio was committed (roughly the end of user speech). Lets
93
+ * response latency be measured from real speech-end rather than the padded buffer end.
94
+ *
95
+ * @type {number | undefined}
96
+ */
97
+ speechEndTime = undefined
98
+
99
+ /**
100
+ * Offset (ms) on the session's input-audio-buffer timeline of the first frame buffered for this
101
+ * turn, so a VAD offset can be converted into a byte offset into `audio`.
102
+ *
103
+ * @type {number | undefined}
104
+ */
105
+ audioBaseMs = undefined
106
+
107
+ /**
108
+ * Tool results the app fed back (`function_call_output`) before the next response.
109
+ *
110
+ * @type {ToolResult[]}
111
+ */
112
+ toolResults = []
113
+
114
+ /**
115
+ * The input audio buffer was cleared: drop the buffered audio and the speech onset derived from
116
+ * it, so neither can be attributed to the next response. A commit that already happened is left
117
+ * alone — a client that clears the buffer after committing has still ended that speech.
118
+ */
119
+ discardAudio () {
120
+ this.audio.clear()
121
+ this.speechStartTime = undefined
122
+ this.audioBaseMs = undefined
123
+ }
124
+ }
125
+
126
+ /** Accumulated assistant output for a single `response.*` lifecycle. */
127
+ class ResponseTurn {
128
+ /**
129
+ * @param {InputTurn} input
130
+ * @param {number} createdTime - Epoch ms at which `response.created` arrived. The fallback start
131
+ * for the turn root and llm spans when the turn produced no user speech to back-date to.
132
+ * @param {(() => boolean) | boolean} [retainAudio] - Whether anything consumes the bytes, so only
133
+ * their count is kept when not. Resolved when the segment opens. See `AudioAccumulator`.
134
+ */
135
+ constructor (input, createdTime, retainAudio = true) {
136
+ this.input = input
137
+ this.createdTime = createdTime
138
+ this.audio = new AudioAccumulator(retainAudio)
139
+ }
140
+
141
+ transcript = new ItemText()
142
+
143
+ text = new ItemText()
144
+
145
+ /** @type {{ input_tokens?: number, output_tokens?: number, total_tokens?: number } | undefined} */
146
+ usage = undefined
147
+
148
+ /** @type {string | undefined} */
149
+ model = undefined
150
+
151
+ /** @type {string | undefined} */
152
+ status = undefined
153
+
154
+ /**
155
+ * The provider's own account of a failure, from `response.done`'s `status_details.error`. Carried
156
+ * separately from `status` because `failed` alone leaves a span with no way to say what went wrong.
157
+ *
158
+ * @type {{ type?: string, code?: string, message?: string } | undefined}
159
+ */
160
+ error = undefined
161
+
162
+ /**
163
+ * Wall clock (epoch ms) when `response.done` arrived. The llm span ends here — generation
164
+ * complete — not when the agent finishes speaking.
165
+ *
166
+ * @type {number | undefined}
167
+ */
168
+ responseDoneTime = undefined
169
+
170
+ /**
171
+ * Byte offset into `audio` at which each output item's audio begins, so a truncation — which is
172
+ * reported per item — maps onto this turn's segment.
173
+ *
174
+ * @type {Map<string, number>}
175
+ */
176
+ audioItemStarts = new Map()
177
+
178
+ /**
179
+ * Wall clock (epoch ms) at which the agent's audio would finish playing. Set while the turn is
180
+ * held open waiting for playback to end.
181
+ *
182
+ * @type {number | undefined}
183
+ */
184
+ playbackEndTime = undefined
185
+
186
+ /**
187
+ * Runs a callback inside the async context that was active when this turn started, so the span
188
+ * tree replayed at finalize nests under the caller's own APM and LLM Observability context.
189
+ * Composed by the tracing and LLM Observability plugins off the capture-context channel; absent
190
+ * when neither is subscribed.
191
+ *
192
+ * @type {((fn: () => void) => void) | undefined}
193
+ */
194
+ runInContext = undefined
195
+
196
+ /**
197
+ * Function and MCP calls the model made this turn.
198
+ *
199
+ * @type {ToolCall[]}
200
+ */
201
+ toolCalls = []
202
+
203
+ /**
204
+ * Inline MCP results for the calls above.
205
+ *
206
+ * @type {ToolResult[]}
207
+ */
208
+ toolResults = []
209
+ }
210
+
211
+ module.exports = { InputTurn, ItemText, ResponseTurn }
@@ -3,6 +3,7 @@
3
3
  const dc = require('dc-polyfill')
4
4
  const shimmer = require('../../datadog-shimmer')
5
5
  const { addHook } = require('./helpers/instrument')
6
+ const { patchRealtimeEmitter, patchRealtimeTransport, realtimeEnabled } = require('./openai-realtime')
6
7
 
7
8
  const ch = dc.tracingChannel('apm:openai:request')
8
9
  const onStreamedChunkCh = dc.channel('apm:openai:request:chunk')
@@ -297,9 +298,10 @@ for (const extension of extensions) {
297
298
  // chat.completions and completions
298
299
  const stream = streamedResponse && getOption(args, 'stream', false)
299
300
 
300
- const intercepted = !stream && interceptChannel?.hasSubscribers
301
+ const tracing = ch.start.hasSubscribers
302
+ const intercepted = interceptChannel?.hasSubscribers
301
303
 
302
- if (!ch.start.hasSubscribers && !intercepted) {
304
+ if (!tracing && !intercepted) {
303
305
  return methodFn.apply(this, args)
304
306
  }
305
307
 
@@ -325,7 +327,7 @@ for (const extension of extensions) {
325
327
  // pagination page types reach the prototype wrappers above. A method that resolves to
326
328
  // a plain value has none, and a WeakMap rejects a non-object key.
327
329
  if (apiProm?.responsePromise) {
328
- responsePromiseContexts.set(apiProm.responsePromise, { ctx, stream, interceptCtx })
330
+ responsePromiseContexts.set(apiProm.responsePromise, { ctx, stream, interceptCtx, tracing })
329
331
  }
330
332
 
331
333
  ch.end.publish(ctx)
@@ -339,20 +341,57 @@ for (const extension of extensions) {
339
341
  }
340
342
  }
341
343
 
344
+ // The Realtime API is a bidirectional WebSocket event stream, not request/response, so it can't
345
+ // reuse the resource shims above. Every server event funnels through the emitter's `_emit`, and
346
+ // every client event through the transport's `send`.
347
+ //
348
+ // Realtime ships at two paths: the current `realtime/*` (openai >=5.17.0) and the older
349
+ // `beta/realtime/*`, which is a fully duplicated implementation with its own emitter and transport
350
+ // classes — not a re-export — and still ships alongside it. Both are hooked, so an app that has not
351
+ // moved off the beta import path is still instrumented. `addHook` on a file a given version doesn't
352
+ // have is a no-op, so the ranges only need to be loose enough.
353
+ const REALTIME_SHIMS = [
354
+ { file: 'realtime/internal-base', targetClass: 'OpenAIRealtimeEmitter', versions: ['>=5.17.0'] },
355
+ { file: 'realtime/ws', targetClass: 'OpenAIRealtimeWS', versions: ['>=5.17.0'] },
356
+ { file: 'realtime/websocket', targetClass: 'OpenAIRealtimeWebSocket', versions: ['>=5.17.0'] },
357
+ { file: 'beta/realtime/internal-base', targetClass: 'OpenAIRealtimeEmitter', versions: ['>=4'] },
358
+ { file: 'beta/realtime/ws', targetClass: 'OpenAIRealtimeWS', versions: ['>=4'] },
359
+ { file: 'beta/realtime/websocket', targetClass: 'OpenAIRealtimeWebSocket', versions: ['>=4'] },
360
+ ]
361
+
362
+ if (realtimeEnabled()) {
363
+ for (const extension of extensions) {
364
+ for (const { file, targetClass, versions } of REALTIME_SHIMS) {
365
+ addHook({ name: 'openai', file: file + extension, versions }, exports => {
366
+ const prototype = exports[targetClass]?.prototype
367
+ if (targetClass === 'OpenAIRealtimeEmitter') {
368
+ patchRealtimeEmitter(prototype)
369
+ } else {
370
+ patchRealtimeTransport(prototype)
371
+ }
372
+ return exports
373
+ })
374
+ }
375
+ }
376
+ }
377
+
342
378
  function handleUnwrappedAPIPromise (apiProm, state) {
343
- const { ctx, stream, interceptCtx } = state
379
+ const { ctx, stream, interceptCtx, tracing } = state
344
380
 
345
381
  return heldUntil(apiProm, interceptCtx?.beforeResult?.())
346
382
  .then(([{ response, options }, body]) => {
347
383
  if (stream) {
348
- const wrapIterator = wrapStreamIterator(response, options, ctx)
349
-
350
- if (body.iterator) {
351
- shimmer.wrap(body, 'iterator', wrapIterator)
352
- } else {
353
- shimmer.wrap(body.response.body, Symbol.asyncIterator, wrapIterator)
354
- }
355
- return body
384
+ return Promise.resolve(interceptCtx?.onResult ? interceptCtx.onResult(body) : body).then(streamBody => {
385
+ if (!tracing) return streamBody
386
+
387
+ const wrapIterator = wrapStreamIterator(response, options, ctx)
388
+ if (streamBody.iterator) {
389
+ shimmer.wrap(streamBody, 'iterator', wrapIterator)
390
+ } else {
391
+ shimmer.wrap(streamBody.response.body, Symbol.asyncIterator, wrapIterator)
392
+ }
393
+ return streamBody
394
+ })
356
395
  }
357
396
 
358
397
  const responseData = {
@@ -105,9 +105,13 @@ addHook({ name: 'oracledb', versions: ['>=5'], file: 'lib/oracledb.js' }, oracle
105
105
  })
106
106
  shimmer.wrap(oracledb, 'getConnection', getConnection => {
107
107
  return function wrappedGetConnection (connAttrs, callback) {
108
+ if (typeof connAttrs === 'function') {
109
+ callback = connAttrs
110
+ connAttrs = undefined
111
+ }
108
112
  if (callback) {
109
- arguments[1] = shimmer.wrapFunction(callback, callback => (err, connection) => {
110
- if (connection) {
113
+ arguments[arguments.length - 1] = shimmer.wrapFunction(callback, callback => (err, connection) => {
114
+ if (connection && !connectionAttributes.has(connection)) {
111
115
  connectionAttributes.set(connection, connAttrs)
112
116
  }
113
117
  callback(err, connection)
@@ -116,7 +120,9 @@ addHook({ name: 'oracledb', versions: ['>=5'], file: 'lib/oracledb.js' }, oracle
116
120
  getConnection.apply(this, arguments)
117
121
  } else {
118
122
  return getConnection.apply(this, arguments).then((connection) => {
119
- connectionAttributes.set(connection, connAttrs)
123
+ if (!connectionAttributes.has(connection)) {
124
+ connectionAttributes.set(connection, connAttrs)
125
+ }
120
126
  return connection
121
127
  })
122
128
  }
@@ -2,6 +2,7 @@
2
2
 
3
3
  const { channel } = require('dc-polyfill')
4
4
 
5
+ const libraryConfigurationCh = channel('ci:playwright:library-configuration')
5
6
  const reporterErrorCh = channel('ci:playwright:reporter:error')
6
7
  const reporterRunSummaryCh = channel('ci:playwright:reporter:run-summary')
7
8
  const reporterSuiteHookErrorCh = channel('ci:playwright:reporter:suite-hook-error')
@@ -15,7 +16,6 @@ const PLAYWRIGHT_REPORTER_ERROR_CALLER_RE =
15
16
  * interpreting identical user console output as a framework error.
16
17
  *
17
18
  * @param {unknown} message - First console.error argument
18
- * @returns {boolean}
19
19
  */
20
20
  function isPlaywrightReporterError (message) {
21
21
  if (message !== PLAYWRIGHT_REPORTER_ERROR_MESSAGE) return false
@@ -34,7 +34,6 @@ function isPlaywrightReporterError (message) {
34
34
  * Returns whether a finalized Playwright result contains a failed suite hook.
35
35
  *
36
36
  * @param {Array<object>} steps
37
- * @returns {boolean}
38
37
  */
39
38
  function hasFailedSuiteHook (steps) {
40
39
  if (!steps) return false
@@ -71,7 +70,6 @@ class DatadogPlaywrightReporter {
71
70
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
72
71
  *
73
72
  * @param {object} config
74
- * @returns {void}
75
73
  */
76
74
  onConfigure (config) {
77
75
  this.failOnFlakyTests = config.failOnFlakyTests
@@ -80,7 +78,6 @@ class DatadogPlaywrightReporter {
80
78
  /**
81
79
  * Restores console error after Playwright completes the reporter lifecycle.
82
80
  *
83
- * @returns {void}
84
81
  */
85
82
  static restoreConsoleError () {
86
83
  // eslint-disable-next-line no-console
@@ -99,7 +96,6 @@ class DatadogPlaywrightReporter {
99
96
  *
100
97
  * @param {object} configOrSuite
101
98
  * @param {object} [suite]
102
- * @returns {void}
103
99
  */
104
100
  onBegin (configOrSuite, suite) {
105
101
  this.suite = suite || configOrSuite
@@ -110,49 +106,42 @@ class DatadogPlaywrightReporter {
110
106
  /**
111
107
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
112
108
  *
113
- * @returns {void}
114
109
  */
115
110
  onTestBegin () {}
116
111
 
117
112
  /**
118
113
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
119
114
  *
120
- * @returns {void}
121
115
  */
122
116
  onStdOut () {}
123
117
 
124
118
  /**
125
119
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
126
120
  *
127
- * @returns {void}
128
121
  */
129
122
  onStdErr () {}
130
123
 
131
124
  /**
132
125
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
133
126
  *
134
- * @returns {void}
135
127
  */
136
128
  onTestEnd () {}
137
129
 
138
130
  /**
139
131
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
140
132
  *
141
- * @returns {void}
142
133
  */
143
134
  onStepBegin () {}
144
135
 
145
136
  /**
146
137
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
147
138
  *
148
- * @returns {void}
149
139
  */
150
140
  onStepEnd () {}
151
141
 
152
142
  /**
153
143
  * Marks the beginning of reporter finalization so later reporter errors can be identified.
154
144
  *
155
- * @returns {void}
156
145
  */
157
146
  onEnd () {
158
147
  let failureCount = this.fatalErrorCount
@@ -182,7 +171,8 @@ class DatadogPlaywrightReporter {
182
171
  reporterRunSummaryCh.publish({ failureCount, quarantinedFailureCount, hasIncompleteTests })
183
172
  suitesWithHookErrors.clear()
184
173
 
185
- if (!this.captureReporterErrors) return
174
+ // A reused config can retain this reporter after the plugin is disabled.
175
+ if (!this.captureReporterErrors || !libraryConfigurationCh.hasSubscribers) return
186
176
 
187
177
  this.isFinalizing = true
188
178
  // Playwright 1.60 and 1.61 only expose reporter errors through this exact console call.
@@ -212,7 +202,6 @@ class DatadogPlaywrightReporter {
212
202
  /**
213
203
  * Implements the reporter v2 lifecycle hook required by older Playwright versions.
214
204
  *
215
- * @returns {void}
216
205
  */
217
206
  onExit () {}
218
207
 
@@ -220,7 +209,6 @@ class DatadogPlaywrightReporter {
220
209
  * Reports errors emitted by Playwright while later reporters are finalizing.
221
210
  *
222
211
  * @param {unknown} error
223
- * @returns {void}
224
212
  */
225
213
  onError (error) {
226
214
  if (this.isFinalizing) {
@@ -233,7 +221,6 @@ class DatadogPlaywrightReporter {
233
221
  /**
234
222
  * Keeps the internal reporter from affecting Playwright's output reporter selection.
235
223
  *
236
- * @returns {boolean}
237
224
  */
238
225
  printsToStdio () {
239
226
  return false