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
@@ -214,7 +214,6 @@ function createGraphqlJitRuntime ({
214
214
  * @param {string} resolverCall
215
215
  * @param {string} resolverName
216
216
  * @param {number | undefined} descriptorId
217
- * @returns {string}
218
217
  */
219
218
  function compileResolverCall (context, resolverCall, resolverName, descriptorId) {
220
219
  const openParenthesis = resolverCall.indexOf('(')
@@ -254,7 +253,6 @@ function createGraphqlJitRuntime ({
254
253
  * @param {CompiledArguments} args
255
254
  * @param {string} argumentSource
256
255
  * @param {string} compiledField
257
- * @returns {string}
258
256
  */
259
257
  function compileDefaultField (
260
258
  context,
@@ -377,7 +375,6 @@ function createDescriptor (context, compilerPath, input, fieldNode, createFieldM
377
375
  * @param {JitFieldDescriptor} descriptor
378
376
  * @param {CompiledArguments['missing']} missing
379
377
  * @param {string} argumentSource
380
- * @returns {string}
381
378
  */
382
379
  function compileArgumentFactory (context, descriptor, missing, argumentSource) {
383
380
  if (missing.length === 0 && argumentSource === '{}') return 'undefined'
@@ -418,7 +415,6 @@ function compileArgumentFactory (context, descriptor, missing, argumentSource) {
418
415
 
419
416
  /**
420
417
  * @param {ArgumentPath} path
421
- * @returns {string}
422
418
  */
423
419
  function compileArgumentPath (path) {
424
420
  let source = 'args'
@@ -430,7 +426,6 @@ function compileArgumentPath (path) {
430
426
 
431
427
  /**
432
428
  * @param {string} value
433
- * @returns {string}
434
429
  */
435
430
  function quoteString (value) {
436
431
  const json = JSON.stringify(value)
@@ -2,6 +2,12 @@
2
2
 
3
3
  module.exports = {
4
4
  // Only list unprefixed node modules. They will automatically be instrumented as prefixed and unprefixed.
5
+ '@supabase/auth-js': { esmFirst: true, fn: () => require('../supabase') },
6
+ '@supabase/functions-js': { esmFirst: true, fn: () => require('../supabase') },
7
+ '@supabase/postgrest-js': { esmFirst: true, fn: () => require('../supabase') },
8
+ '@supabase/realtime-js': { esmFirst: true, fn: () => require('../supabase') },
9
+ '@supabase/storage-js': { esmFirst: true, fn: () => require('../supabase') },
10
+ '@supabase/supabase-js': { esmFirst: true, fn: () => require('../supabase') },
5
11
  child_process: () => require('../child_process'),
6
12
  crypto: () => require('../crypto'),
7
13
  dns: () => require('../dns'),
@@ -19,14 +25,12 @@ module.exports = {
19
25
  '@anthropic-ai/sdk': { esmFirst: true, fn: () => require('../anthropic') },
20
26
  '@apollo/server': () => require('../apollo-server'),
21
27
  '@apollo/gateway': () => require('../apollo'),
22
- '@langchain/langgraph': { esmFirst: true, fn: () => require('../langgraph') },
23
28
  '@modelcontextprotocol/sdk': { esmFirst: true, fn: () => require('../modelcontextprotocol-sdk') },
24
29
  '@openai/agents': () => require('../openai-agents'),
25
30
  '@openai/agents-openai': () => require('../openai-agents'),
26
31
  'apollo-server-core': () => require('../apollo-server-core'),
27
32
  '@aws-sdk/smithy-client': () => require('../aws-sdk'),
28
33
  '@aws/durable-execution-sdk-js': () => require('../aws-durable-execution-sdk-js'),
29
- '@azure/cosmos': { esmFirst: true, fn: () => require('../azure-cosmos') },
30
34
  '@azure/event-hubs': () => require('../azure-event-hubs'),
31
35
  '@azure/functions': () => require('../azure-functions'),
32
36
  'durable-functions': () => require('../azure-durable-functions'),
@@ -42,12 +46,12 @@ module.exports = {
42
46
  '@grpc/grpc-js': () => require('../grpc'),
43
47
  '@hapi/hapi': () => require('../hapi'),
44
48
  '@happy-dom/jest-environment': () => require('../jest'),
49
+ '@jest/console': () => require('../jest'),
45
50
  '@jest/core': () => require('../jest'),
46
51
  '@jest/reporters': () => require('../jest'),
47
52
  '@jest/test-sequencer': () => require('../jest'),
48
53
  '@jest/transform': () => require('../jest'),
49
54
  '@koa/router': () => require('../koa'),
50
- '@langchain/core': { esmFirst: true, fn: () => require('../langchain') },
51
55
  '@node-redis/client': () => require('../redis'),
52
56
  '@opensearch-project/opensearch': () => require('../opensearch'),
53
57
  '@opentelemetry/sdk-trace': () => require('../otel-sdk-trace'),
@@ -71,7 +75,6 @@ module.exports = {
71
75
  bluebird: () => require('../bluebird'),
72
76
  'body-parser': () => require('../body-parser'),
73
77
  'browser-bunyan': () => require('../browser-bunyan'),
74
- bullmq: () => require('../bullmq'),
75
78
  bunyan: () => require('../bunyan'),
76
79
  'cassandra-driver': () => require('../cassandra-driver'),
77
80
  connect: () => require('../connect'),
@@ -107,14 +110,12 @@ module.exports = {
107
110
  'koa-router': () => require('../koa'),
108
111
  '@confluentinc/kafka-javascript': () => require('../confluentinc-kafka-javascript'),
109
112
  kafkajs: () => require('../kafkajs'),
110
- langchain: () => require('../langchain'),
111
113
  ldapjs: () => require('../ldapjs'),
112
114
  'light-my-request': () => require('../light-my-request'),
113
115
  'limitd-client': () => require('../limitd-client'),
114
116
  lodash: () => require('../lodash'),
115
117
  mariadb: { esmFirst: true, fn: () => require('../mariadb') },
116
118
  memcached: () => require('../memcached'),
117
- mercurius: () => require('../mercurius'),
118
119
  'microgateway-core': () => require('../microgateway-core'),
119
120
  mocha: () => require('../mocha'),
120
121
  'mocha-each': () => require('../mocha'),
@@ -141,6 +142,7 @@ module.exports = {
141
142
  'pino-pretty': () => require('../pino'),
142
143
  playwright: () => require('../playwright'),
143
144
  'playwright-core': () => require('../playwright'),
145
+ postgres: { esmFirst: true, fn: () => require('../postgres') },
144
146
  'promise-js': () => require('../promise-js'),
145
147
  promise: () => require('../promise'),
146
148
  protobufjs: () => require('../protobufjs'),
@@ -9,7 +9,6 @@ const { isRelativeRequire } = require('./shared-utils')
9
9
  /**
10
10
  * @param {string|undefined} version
11
11
  * @param {string[]|undefined} ranges
12
- * @returns {boolean}
13
12
  */
14
13
  function matchVersion (version, ranges) {
15
14
  return !version || !ranges || ranges.some(range => satisfies(version, range))
@@ -18,7 +17,6 @@ function matchVersion (version, ranges) {
18
17
  /**
19
18
  * @param {string} name
20
19
  * @param {string} [file]
21
- * @returns {string}
22
20
  */
23
21
  function filename (name, file) {
24
22
  return file ? `${name}/${file}` : name
@@ -29,7 +27,6 @@ function filename (name, file) {
29
27
  * @param {string|undefined} version
30
28
  * @param {string} moduleName
31
29
  * @param {{ file?: string, filePattern?: string, versions?: string[] }} instrumentation
32
- * @returns {boolean}
33
30
  */
34
31
  function matchesInstrumentation (name, version, moduleName, instrumentation) {
35
32
  const { file, filePattern, versions } = instrumentation
@@ -400,9 +400,6 @@ function getConnectionForAcquire (getConnection, pool, args, acquireCtx, start,
400
400
  }
401
401
  }
402
402
 
403
- /**
404
- * @returns {boolean}
405
- */
406
403
  function isPoolQueryAcquire () {
407
404
  return currentPoolQueryAcquire !== undefined
408
405
  }
@@ -436,7 +433,6 @@ function runWithPoolQueryAcquire (acquire, method, receiver, args) {
436
433
 
437
434
  /**
438
435
  * @param {object} pool
439
- * @returns {boolean}
440
436
  */
441
437
  function takeDeferredPoolQueryAcquire (pool) {
442
438
  const acquire = deferredPoolQueryAcquireStorage?.getStore()
@@ -579,7 +575,6 @@ function setPoolAcquireCaptureWaitTime (capture, waitTime) {
579
575
  * @param {Record<string, unknown>} receiver
580
576
  * @param {string} acquireMethod
581
577
  * @param {unknown[]} args
582
- * @returns {boolean}
583
578
  */
584
579
  function dispatchesAcquireSynchronously (method, receiver, acquireMethod, args) {
585
580
  let dispatched = false
@@ -618,7 +613,6 @@ function acquireStart (pool, acquire) {
618
613
 
619
614
  /**
620
615
  * @param {number|undefined} start
621
- * @returns {number}
622
616
  */
623
617
  function acquireWait (start) {
624
618
  return start === undefined ? 0 : performance.now() - start
@@ -25,6 +25,7 @@ const pathSepExpr = new RegExp(`\\${path.sep}`, 'g')
25
25
  const disabledInstrumentations = getDisabledInstrumentations()
26
26
 
27
27
  const loadChannel = channel('dd-trace:instrumentation:load')
28
+ const orchestrionLoadChannel = channel('dd-trace:instrumentation:load:orchestrion')
28
29
 
29
30
  // Globals
30
31
  if (!disabledInstrumentations.has('fetch')) {
@@ -35,6 +36,10 @@ if (!disabledInstrumentations.has('process')) {
35
36
  require('../process')
36
37
  }
37
38
 
39
+ if (!disabledInstrumentations.has('console')) {
40
+ require('../console')
41
+ }
42
+
38
43
  const debugEnabled = DD_TRACE_DEBUG
39
44
  checkRequireCache.checkForRequiredModules()
40
45
  if (debugEnabled) {
@@ -51,6 +56,25 @@ const instrumentedNodeModules = new Map()
51
56
  const instrumentedIntegrationsSuccess = new Map()
52
57
  /** @type {Set<string>} */
53
58
  const alreadyLoggedIncompatibleIntegrations = new Set()
59
+ /** @type {Set<string>} */
60
+ const compatibleOrchestrionTargets = new Set()
61
+
62
+ orchestrionLoadChannel.subscribe(({ moduleName, version, result }) => {
63
+ const nameVersion = `${moduleName}@${version}`
64
+
65
+ if (result === 'unsupported') {
66
+ if (!compatibleOrchestrionTargets.has(nameVersion) && !instrumentedIntegrationsSuccess.has(nameVersion)) {
67
+ instrumentedIntegrationsSuccess.set(nameVersion, false)
68
+ }
69
+ return
70
+ }
71
+
72
+ if (result === 'matched' || result === 'rewritten') {
73
+ compatibleOrchestrionTargets.add(nameVersion)
74
+ instrumentedIntegrationsSuccess.set(nameVersion, true)
75
+ if (result === 'rewritten') loadChannel.publish({ name: moduleName })
76
+ }
77
+ })
54
78
 
55
79
  for (const name of names) {
56
80
  if (disabledInstrumentations.has(name)) continue
@@ -2,9 +2,10 @@
2
2
 
3
3
  const { readFileSync } = require('node:fs')
4
4
  const { join } = require('node:path')
5
- const { pathToFileURL } = require('node:url')
5
+ const { fileURLToPath, pathToFileURL } = require('node:url')
6
6
 
7
7
  const log = require('../../../../dd-trace/src/log')
8
+ const { getDisabledInstrumentations } = require('../instrumentation-utils')
8
9
  const instrumentations = require('./instrumentations')
9
10
  const { getRewriteTarget } = require('./targets')
10
11
 
@@ -18,7 +19,7 @@ const { getRewriteTarget } = require('./targets')
18
19
  * { code: string, map?: string|object }} transform
19
20
  *
20
21
  * @typedef {(content: string|Buffer|ArrayBuffer|Uint8Array, filename: string, format?: string,
21
- * target?: { moduleName: string, filePath: string }, sourceMap?: string|object) =>
22
+ * target?: { moduleName: string, filePath: string, activate?: boolean }, sourceMap?: string|object) =>
22
23
  * { code: string|Buffer|ArrayBuffer|Uint8Array, map?: string|object }} BundlerRewriter
23
24
  */
24
25
 
@@ -26,7 +27,8 @@ const { getRewriteTarget } = require('./targets')
26
27
  * @type {Record<string, string>} map of module base name to version
27
28
  */
28
29
  const moduleVersions = {}
29
- const disabled = new Set()
30
+ // Asynchronous loader workers have their own module graph and cannot receive disable() calls made on the main thread.
31
+ const disabled = getDisabledInstrumentations()
30
32
 
31
33
  // Matchers are built on the first module that actually needs rewriting. The
32
34
  // vendored transformer is a quarter megabyte of bundle that an application
@@ -42,40 +44,76 @@ let matcherEsm
42
44
  // eslint-disable-next-line unicorn/no-useless-concat -- Keep the source-map marker non-contiguous.
43
45
  const SOURCE_MAP_PREFIX = '//# sourceMapping' + 'URL=data:application/json;base64,'
44
46
 
47
+ /**
48
+ * Loader hooks hand `file://` URLs to the rewriter while CommonJS and bundler
49
+ * callers pass plain paths. `fileURLToPath` is the only correct conversion: a
50
+ * plain scheme strip leaves Windows paths rooted at `/C:/` and keeps
51
+ * percent-encoded characters undecoded, which breaks version resolution.
52
+ * Rewrite-target paths use forward slashes, including on Windows.
53
+ *
54
+ * @param {string} filename
55
+ */
56
+ function normalizeFilename (filename) {
57
+ const path = filename.startsWith('file://') ? fileURLToPath(filename) : filename
58
+ return path.replaceAll('\\', '/')
59
+ }
60
+
45
61
  /**
46
62
  * @param {string|Buffer|ArrayBuffer|Uint8Array} content
47
63
  * @param {string} filename
48
64
  * @param {string} [format]
49
- * @param {{ moduleName: string, filePath: string }} [target]
65
+ * @param {{ moduleName: string, filePath: string, activate?: boolean }} [target]
50
66
  * @returns {string|Buffer|ArrayBuffer|Uint8Array}
51
67
  */
52
68
  function rewrite (content, filename, format, target) {
53
69
  if (!content) return content
54
70
 
55
- target ||= getRewriteTarget(filename)
56
- if (!target) return content
57
-
58
- filename = filename.replace('file://', '')
71
+ try {
72
+ filename = normalizeFilename(filename)
73
+ target ||= getRewriteTarget(filename)
74
+ if (!target) return content
59
75
 
60
- const moduleType = format === 'module' ? 'esm' : 'cjs'
61
- const { moduleName, filePath } = target
62
- const version = getVersion(filename, filePath)
76
+ const moduleType = format === 'module' ? 'esm' : 'cjs'
77
+ const { moduleName, filePath, activate } = target
78
+ if (disabled.has(moduleName)) return content
63
79
 
64
- if (disabled.has(moduleName)) return content
80
+ const version = getVersion(filename, filePath)
81
+ if (!version) return content
65
82
 
66
- const transformer = getMatcher(moduleType).getTransformer(moduleName, version, filePath)
83
+ const transformer = getMatcher(moduleType).getTransformer(moduleName, version, filePath)
67
84
 
68
- if (!transformer) return content
85
+ if (!transformer && !activate) return content
69
86
 
70
- try {
71
87
  const source = getSourceText(content)
72
88
 
89
+ if (!transformer) {
90
+ return appendOrchestrionLoad(
91
+ source,
92
+ { moduleName, version, result: 'unsupported' },
93
+ moduleType
94
+ )
95
+ }
96
+
73
97
  // TODO: pass existing sourcemap as input for remapping
74
- const { code, map } = transformer.transform(source, moduleType)
98
+ let { code, map } = transformer.transform(source, moduleType)
99
+
100
+ if (source.startsWith('#!') && !code.startsWith('#!')) {
101
+ // A shebang must be the entire first line, and JavaScript recognizes
102
+ // exactly four line terminators: \n, \r, \u2028 (line separator), and
103
+ // \u2029 (paragraph separator). Any of the four can end the shebang line.
104
+ const shebangEnd = source.search(/[\r\n\u2028\u2029]/)
105
+ code = (shebangEnd === -1 ? source : source.slice(0, shebangEnd)) + '\n' + code
106
+ map = shiftSourceMapLine(map)
107
+ }
108
+
109
+ if (activate) {
110
+ const result = code === source ? 'matched' : 'rewritten'
111
+ code = appendOrchestrionLoad(code, { moduleName, version, result }, moduleType)
112
+ }
75
113
 
76
114
  if (!map) return code
77
115
 
78
- const inlineMap = Buffer.from(map).toString('base64')
116
+ const inlineMap = Buffer.from(typeof map === 'string' ? map : JSON.stringify(map)).toString('base64')
79
117
 
80
118
  return code + '\n' + SOURCE_MAP_PREFIX + inlineMap
81
119
  } catch (e) {
@@ -95,16 +133,19 @@ function createBundlerRewriter (dcModule) {
95
133
  return function rewriteBundled (content, filename, format, target, sourceMap) {
96
134
  if (!content) return { code: content, map: sourceMap }
97
135
 
98
- target ||= getRewriteTarget(filename)
99
- if (!target) return { code: content, map: sourceMap }
136
+ try {
137
+ filename = normalizeFilename(filename)
138
+ target ||= getRewriteTarget(filename)
139
+ if (!target) return { code: content, map: sourceMap }
100
140
 
101
- filename = filename.replace('file://', '')
102
- const moduleType = format === 'module' ? 'esm' : 'cjs'
103
- const { moduleName, filePath } = target
104
- const transformer = matcher.getTransformer(moduleName, getVersion(filename, filePath), filePath)
105
- if (!transformer) return { code: content, map: sourceMap }
141
+ const moduleType = format === 'module' ? 'esm' : 'cjs'
142
+ const { moduleName, filePath } = target
143
+ const version = getVersion(filename, filePath)
144
+ if (!version) return { code: content, map: sourceMap }
145
+
146
+ const transformer = matcher.getTransformer(moduleName, version, filePath)
147
+ if (!transformer) return { code: content, map: sourceMap }
106
148
 
107
- try {
108
149
  return transformer.transform(getSourceText(content), moduleType, sourceMap)
109
150
  } catch (error) {
110
151
  log.error(error)
@@ -146,6 +187,11 @@ function createMatcher (dcModule) {
146
187
  publishDurableOrchestrationFailure,
147
188
  waitForAsyncEnd,
148
189
  } = require('./transforms')
190
+ const {
191
+ postgresQueryHandlers,
192
+ postgresQueryLifecycle,
193
+ postgresQueryPreparation,
194
+ } = require('./transforms/postgres')
149
195
 
150
196
  const matcher = create(instrumentations, dcModule)
151
197
 
@@ -158,6 +204,9 @@ function createMatcher (dcModule) {
158
204
  matcher.addTransform('configureGraphqlJitRuntime', configureGraphqlJitRuntime)
159
205
  matcher.addTransform('configureMercuriusRequest', configureMercuriusRequest)
160
206
  matcher.addTransform('publishDurableOrchestrationFailure', publishDurableOrchestrationFailure)
207
+ matcher.addTransform('postgresQueryHandlers', postgresQueryHandlers)
208
+ matcher.addTransform('postgresQueryLifecycle', postgresQueryLifecycle)
209
+ matcher.addTransform('postgresQueryPreparation', postgresQueryPreparation)
161
210
 
162
211
  return matcher
163
212
  }
@@ -191,7 +240,6 @@ function getDcPolyfillSpecifier (moduleType) {
191
240
  * Convert the source representations accepted by Node.js loader hooks to text.
192
241
  *
193
242
  * @param {string | ArrayBuffer | BufferView} source
194
- * @returns {string}
195
243
  */
196
244
  function getSourceText (source) {
197
245
  if (typeof source === 'string') return source
@@ -201,6 +249,43 @@ function getSourceText (source) {
201
249
  return Buffer.from(source).toString('utf8')
202
250
  }
203
251
 
252
+ /**
253
+ * Publish target-level compatibility on the application thread when a pure target is evaluated.
254
+ *
255
+ * @param {string} source
256
+ * @param {{ moduleName: string, version: string,
257
+ * result: 'unsupported'|'matched'|'rewritten' }} payload
258
+ * @param {'cjs'|'esm'} moduleType
259
+ */
260
+ function appendOrchestrionLoad (source, payload, moduleType) {
261
+ const dcModule = JSON.stringify(getDcPolyfillSpecifier(moduleType) ?? 'diagnostics_channel')
262
+ const message = JSON.stringify(payload)
263
+
264
+ if (moduleType === 'esm') {
265
+ let binding = 'ddTraceOrchestrionDc'
266
+ let suffix = 0
267
+ while (source.includes(binding)) binding = `ddTraceOrchestrionDc${++suffix}`
268
+
269
+ return `${source};import ${binding} from ${dcModule};` +
270
+ `${binding}.channel('dd-trace:instrumentation:load:orchestrion').publish(${message});`
271
+ }
272
+
273
+ return `${source};require(${dcModule}).channel('dd-trace:instrumentation:load:orchestrion').publish(${message});`
274
+ }
275
+
276
+ /**
277
+ * Account for a shebang restored ahead of the generated program. The transformer already maps original positions
278
+ * past the input shebang, so only the generated side needs an additional empty line.
279
+ *
280
+ * @param {string|object|undefined} map
281
+ */
282
+ function shiftSourceMapLine (map) {
283
+ if (!map) return map
284
+ const sourceMap = typeof map === 'string' ? JSON.parse(map) : map
285
+ const shifted = { ...sourceMap, mappings: `;${sourceMap.mappings}` }
286
+ return typeof map === 'string' ? JSON.stringify(shifted) : shifted
287
+ }
288
+
204
289
  function disable (instrumentation) {
205
290
  disabled.add(instrumentation)
206
291
  }
@@ -0,0 +1,41 @@
1
+ 'use strict'
2
+
3
+ // Activated rewrites publish their module name to the plugin manager after evaluation.
4
+ // Only pure Orchestrion integrations that need this activation set activate: true.
5
+ // Other entries use hooks or another activation path, or do not need activation from a rewrite.
6
+ const registry = [
7
+ { instrumentations: require('./instrumentations/ai') },
8
+ { activate: true, instrumentations: require('./instrumentations/azure-cosmos') },
9
+ { instrumentations: require('./instrumentations/azure-durable-functions') },
10
+ { activate: true, instrumentations: require('./instrumentations/bullmq') },
11
+ { instrumentations: require('./instrumentations/claude-agent-sdk') },
12
+ { instrumentations: require('./instrumentations/graphql') },
13
+ { instrumentations: require('./instrumentations/graphql-jit') },
14
+ { activate: true, instrumentations: require('./instrumentations/langchain') },
15
+ { activate: true, instrumentations: require('./instrumentations/langgraph') },
16
+ { activate: true, instrumentations: require('./instrumentations/mercurius') },
17
+ { instrumentations: require('./instrumentations/modelcontextprotocol-sdk') },
18
+ { instrumentations: require('./instrumentations/openai-agents') },
19
+ { instrumentations: require('./instrumentations/playwright') },
20
+ { instrumentations: require('./instrumentations/postgres') },
21
+ { instrumentations: require('./instrumentations/webdriverio') },
22
+ { instrumentations: require('./instrumentations/aws-durable-execution-sdk-js') },
23
+ { instrumentations: require('./instrumentations/supabase') },
24
+ ]
25
+
26
+ const activatedModules = new Set()
27
+ for (const { activate, instrumentations } of registry) {
28
+ if (!activate) continue
29
+ for (const { module } of instrumentations) activatedModules.add(module.name)
30
+ }
31
+
32
+ const instrumentations = registry.flatMap(entry => entry.instrumentations)
33
+
34
+ /**
35
+ * @param {string} moduleName
36
+ */
37
+ function isRewriteActivationEnabled (moduleName) {
38
+ return activatedModules.has(moduleName)
39
+ }
40
+
41
+ module.exports = { isRewriteActivationEnabled, instrumentations, registry }
@@ -1,19 +1,5 @@
1
1
  'use strict'
2
2
 
3
- module.exports = [
4
- ...require('./ai'),
5
- ...require('./azure-cosmos'),
6
- ...require('./azure-durable-functions'),
7
- ...require('./bullmq'),
8
- ...require('./claude-agent-sdk'),
9
- ...require('./graphql'),
10
- ...require('./graphql-jit'),
11
- ...require('./langchain'),
12
- ...require('./langgraph'),
13
- ...require('./mercurius'),
14
- ...require('./modelcontextprotocol-sdk'),
15
- ...require('./openai-agents'),
16
- ...require('./playwright'),
17
- ...require('./webdriverio'),
18
- ...require('./aws-durable-execution-sdk-js'),
19
- ]
3
+ const { instrumentations } = require('../instrumentation-registry')
4
+
5
+ module.exports = instrumentations
@@ -3,6 +3,49 @@
3
3
  // Playwright keeps several hook targets in private local classes/functions.
4
4
  // Keep these rewrites limited to bundled internals that addHook cannot wrap.
5
5
  module.exports = [
6
+ {
7
+ module: {
8
+ name: '@playwright/test',
9
+ versionRange: '>=1.18.0 <1.38.0',
10
+ filePath: 'lib/reporters/multiplexer.js',
11
+ },
12
+ functionQuery: {
13
+ className: 'Multiplexer',
14
+ methodName: 'onError',
15
+ kind: 'Sync',
16
+ },
17
+ channelName: 'Multiplexer_onError',
18
+ },
19
+ {
20
+ module: {
21
+ name: 'playwright',
22
+ versionRange: '>=1.44.0 <1.60.0',
23
+ filePath: 'lib/runner/runner.js',
24
+ },
25
+ astQuery: 'FunctionDeclaration[id.name="writeLastRunInfo"] ' +
26
+ 'CallExpression[callee.property.name="map"] > ArrowFunctionExpression',
27
+ channelName: 'lastRunTestId',
28
+ },
29
+ {
30
+ module: {
31
+ name: 'playwright',
32
+ versionRange: '>=1.44.0 <1.60.0',
33
+ filePath: 'lib/runner/lastRun.js',
34
+ },
35
+ astQuery: 'ClassDeclaration[id.name="LastRunReporter"] ' +
36
+ 'CallExpression[callee.property.name="map"] > ArrowFunctionExpression',
37
+ channelName: 'lastRunTestId',
38
+ },
39
+ {
40
+ module: {
41
+ name: 'playwright',
42
+ versionRange: '>=1.60.0',
43
+ filePath: 'lib/runner/index.js',
44
+ },
45
+ astQuery: 'VariableDeclarator[id.name="LastRunReporter"] ' +
46
+ 'CallExpression[callee.property.name="map"] > ArrowFunctionExpression',
47
+ channelName: 'lastRunTestId',
48
+ },
6
49
  {
7
50
  module: {
8
51
  name: 'playwright',
@@ -93,6 +136,18 @@ module.exports = [
93
136
  },
94
137
  channelName: 'createRootSuite',
95
138
  },
139
+ {
140
+ module: {
141
+ name: 'playwright',
142
+ versionRange: '>=1.60.0',
143
+ filePath: 'lib/runner/index.js',
144
+ },
145
+ functionQuery: {
146
+ functionName: 'filterForShard',
147
+ kind: 'Sync',
148
+ },
149
+ channelName: 'filterForShard',
150
+ },
96
151
  {
97
152
  module: {
98
153
  name: 'playwright-core',
@@ -0,0 +1,36 @@
1
+ 'use strict'
2
+
3
+ const handlers = ['src/index.js', 'cjs/src/index.js'].map(filePath => ({
4
+ module: {
5
+ name: 'postgres',
6
+ versionRange: '>=3.0.0',
7
+ filePath,
8
+ },
9
+ astQuery: 'Program',
10
+ transform: 'postgresQueryHandlers',
11
+ channelName: 'query',
12
+ }))
13
+
14
+ const preparations = ['src/connection.js', 'cjs/src/connection.js'].map(filePath => ({
15
+ module: {
16
+ name: 'postgres',
17
+ versionRange: '>=3.0.0',
18
+ filePath,
19
+ },
20
+ astQuery: 'Program',
21
+ transform: 'postgresQueryPreparation',
22
+ channelName: 'query:prepare',
23
+ }))
24
+
25
+ const lifecycles = ['src/query.js', 'cjs/src/query.js'].map(filePath => ({
26
+ module: {
27
+ name: 'postgres',
28
+ versionRange: '>=3.0.0',
29
+ filePath,
30
+ },
31
+ astQuery: 'Program',
32
+ transform: 'postgresQueryLifecycle',
33
+ channelName: 'query',
34
+ }))
35
+
36
+ module.exports = [...handlers, ...preparations, ...lifecycles]