@depup/dd-trace 5.90.0-depup.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 (929) hide show
  1. package/LICENSE +6 -0
  2. package/LICENSE-3rdparty.csv +102 -0
  3. package/LICENSE.Apache +200 -0
  4. package/LICENSE.BSD3 +29 -0
  5. package/README.md +25 -0
  6. package/changes.json +5 -0
  7. package/ci/cypress/after-run.js +3 -0
  8. package/ci/cypress/after-spec.js +3 -0
  9. package/ci/cypress/plugin.js +13 -0
  10. package/ci/cypress/polyfills.js +25 -0
  11. package/ci/cypress/support.js +3 -0
  12. package/ci/init.js +86 -0
  13. package/esbuild.js +3 -0
  14. package/ext/exporters.d.ts +14 -0
  15. package/ext/exporters.js +13 -0
  16. package/ext/formats.d.ts +11 -0
  17. package/ext/formats.js +9 -0
  18. package/ext/index.d.ts +8 -0
  19. package/ext/index.js +17 -0
  20. package/ext/kinds.d.ts +9 -0
  21. package/ext/kinds.js +9 -0
  22. package/ext/priority.d.ts +8 -0
  23. package/ext/priority.js +8 -0
  24. package/ext/scopes.d.ts +9 -0
  25. package/ext/scopes.js +9 -0
  26. package/ext/tags.d.ts +26 -0
  27. package/ext/tags.js +40 -0
  28. package/ext/types.d.ts +7 -0
  29. package/ext/types.js +7 -0
  30. package/index.d.ts +3811 -0
  31. package/index.js +3 -0
  32. package/init.js +7 -0
  33. package/initialize.mjs +85 -0
  34. package/loader-hook.mjs +77 -0
  35. package/package.json +215 -0
  36. package/packages/datadog-code-origin/index.js +66 -0
  37. package/packages/datadog-core/index.js +5 -0
  38. package/packages/datadog-core/src/storage.js +132 -0
  39. package/packages/datadog-core/src/utils/src/kebabcase.js +14 -0
  40. package/packages/datadog-core/src/utils/src/parse-tags.js +33 -0
  41. package/packages/datadog-core/src/utils/src/pick.js +11 -0
  42. package/packages/datadog-core/src/utils/src/set.js +18 -0
  43. package/packages/datadog-core/src/utils/src/uniq.js +5 -0
  44. package/packages/datadog-esbuild/index.js +403 -0
  45. package/packages/datadog-esbuild/src/log.js +32 -0
  46. package/packages/datadog-esbuild/src/utils.js +218 -0
  47. package/packages/datadog-instrumentations/index.js +5 -0
  48. package/packages/datadog-instrumentations/src/aerospike.js +48 -0
  49. package/packages/datadog-instrumentations/src/ai.js +119 -0
  50. package/packages/datadog-instrumentations/src/amqp10.js +73 -0
  51. package/packages/datadog-instrumentations/src/amqplib.js +146 -0
  52. package/packages/datadog-instrumentations/src/anthropic.js +127 -0
  53. package/packages/datadog-instrumentations/src/apollo-server-core.js +40 -0
  54. package/packages/datadog-instrumentations/src/apollo-server.js +135 -0
  55. package/packages/datadog-instrumentations/src/apollo.js +101 -0
  56. package/packages/datadog-instrumentations/src/avsc.js +39 -0
  57. package/packages/datadog-instrumentations/src/aws-sdk.js +264 -0
  58. package/packages/datadog-instrumentations/src/azure-durable-functions.js +75 -0
  59. package/packages/datadog-instrumentations/src/azure-event-hubs.js +38 -0
  60. package/packages/datadog-instrumentations/src/azure-functions.js +56 -0
  61. package/packages/datadog-instrumentations/src/azure-service-bus.js +71 -0
  62. package/packages/datadog-instrumentations/src/bluebird.js +26 -0
  63. package/packages/datadog-instrumentations/src/body-parser.js +44 -0
  64. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  65. package/packages/datadog-instrumentations/src/bunyan.js +22 -0
  66. package/packages/datadog-instrumentations/src/cassandra-driver.js +179 -0
  67. package/packages/datadog-instrumentations/src/child_process.js +246 -0
  68. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +421 -0
  69. package/packages/datadog-instrumentations/src/connect.js +118 -0
  70. package/packages/datadog-instrumentations/src/cookie-parser.js +36 -0
  71. package/packages/datadog-instrumentations/src/cookie.js +21 -0
  72. package/packages/datadog-instrumentations/src/couchbase.js +324 -0
  73. package/packages/datadog-instrumentations/src/crypto.js +33 -0
  74. package/packages/datadog-instrumentations/src/cucumber.js +1096 -0
  75. package/packages/datadog-instrumentations/src/cypress.js +11 -0
  76. package/packages/datadog-instrumentations/src/dd-trace-api.js +7 -0
  77. package/packages/datadog-instrumentations/src/dns.js +98 -0
  78. package/packages/datadog-instrumentations/src/elasticsearch.js +129 -0
  79. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +45 -0
  80. package/packages/datadog-instrumentations/src/express-session.js +41 -0
  81. package/packages/datadog-instrumentations/src/express.js +253 -0
  82. package/packages/datadog-instrumentations/src/fastify.js +300 -0
  83. package/packages/datadog-instrumentations/src/fetch.js +33 -0
  84. package/packages/datadog-instrumentations/src/find-my-way.js +31 -0
  85. package/packages/datadog-instrumentations/src/fs.js +372 -0
  86. package/packages/datadog-instrumentations/src/generic-pool.js +48 -0
  87. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +287 -0
  88. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +101 -0
  89. package/packages/datadog-instrumentations/src/google-genai.js +120 -0
  90. package/packages/datadog-instrumentations/src/graphql.js +382 -0
  91. package/packages/datadog-instrumentations/src/grpc/client.js +258 -0
  92. package/packages/datadog-instrumentations/src/grpc/server.js +154 -0
  93. package/packages/datadog-instrumentations/src/grpc/types.js +10 -0
  94. package/packages/datadog-instrumentations/src/grpc.js +4 -0
  95. package/packages/datadog-instrumentations/src/handlebars.js +40 -0
  96. package/packages/datadog-instrumentations/src/hapi.js +178 -0
  97. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +68 -0
  98. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +103 -0
  99. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +42 -0
  100. package/packages/datadog-instrumentations/src/helpers/fetch.js +26 -0
  101. package/packages/datadog-instrumentations/src/helpers/hook.js +75 -0
  102. package/packages/datadog-instrumentations/src/helpers/hooks.js +151 -0
  103. package/packages/datadog-instrumentations/src/helpers/instrument.js +57 -0
  104. package/packages/datadog-instrumentations/src/helpers/instrumentations.js +8 -0
  105. package/packages/datadog-instrumentations/src/helpers/promise.js +29 -0
  106. package/packages/datadog-instrumentations/src/helpers/register.js +242 -0
  107. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +70 -0
  108. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/ai.js +103 -0
  109. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.js +108 -0
  110. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +7 -0
  111. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langchain.js +237 -0
  112. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.js +9 -0
  113. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.mjs +11 -0
  114. package/packages/datadog-instrumentations/src/helpers/rewriter/orchestrion/compiler.js +74 -0
  115. package/packages/datadog-instrumentations/src/helpers/rewriter/orchestrion/index.js +43 -0
  116. package/packages/datadog-instrumentations/src/helpers/rewriter/orchestrion/matcher.js +49 -0
  117. package/packages/datadog-instrumentations/src/helpers/rewriter/orchestrion/transformer.js +121 -0
  118. package/packages/datadog-instrumentations/src/helpers/rewriter/orchestrion/transforms.js +322 -0
  119. package/packages/datadog-instrumentations/src/helpers/router-helper.js +238 -0
  120. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  121. package/packages/datadog-instrumentations/src/hono.js +150 -0
  122. package/packages/datadog-instrumentations/src/http/client.js +315 -0
  123. package/packages/datadog-instrumentations/src/http/server.js +223 -0
  124. package/packages/datadog-instrumentations/src/http.js +4 -0
  125. package/packages/datadog-instrumentations/src/http2/client.js +76 -0
  126. package/packages/datadog-instrumentations/src/http2/server.js +64 -0
  127. package/packages/datadog-instrumentations/src/http2.js +4 -0
  128. package/packages/datadog-instrumentations/src/ioredis.js +57 -0
  129. package/packages/datadog-instrumentations/src/iovalkey.js +47 -0
  130. package/packages/datadog-instrumentations/src/jest.js +1895 -0
  131. package/packages/datadog-instrumentations/src/kafkajs.js +266 -0
  132. package/packages/datadog-instrumentations/src/knex.js +86 -0
  133. package/packages/datadog-instrumentations/src/koa.js +173 -0
  134. package/packages/datadog-instrumentations/src/langchain.js +7 -0
  135. package/packages/datadog-instrumentations/src/ldapjs.js +101 -0
  136. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  137. package/packages/datadog-instrumentations/src/limitd-client.js +22 -0
  138. package/packages/datadog-instrumentations/src/lodash.js +30 -0
  139. package/packages/datadog-instrumentations/src/mariadb.js +186 -0
  140. package/packages/datadog-instrumentations/src/memcached.js +45 -0
  141. package/packages/datadog-instrumentations/src/microgateway-core.js +69 -0
  142. package/packages/datadog-instrumentations/src/mocha/common.js +50 -0
  143. package/packages/datadog-instrumentations/src/mocha/main.js +753 -0
  144. package/packages/datadog-instrumentations/src/mocha/utils.js +526 -0
  145. package/packages/datadog-instrumentations/src/mocha/worker.js +104 -0
  146. package/packages/datadog-instrumentations/src/mocha.js +13 -0
  147. package/packages/datadog-instrumentations/src/moleculer/client.js +44 -0
  148. package/packages/datadog-instrumentations/src/moleculer/server.js +58 -0
  149. package/packages/datadog-instrumentations/src/moleculer.js +4 -0
  150. package/packages/datadog-instrumentations/src/mongodb-core.js +213 -0
  151. package/packages/datadog-instrumentations/src/mongodb.js +59 -0
  152. package/packages/datadog-instrumentations/src/mongoose.js +179 -0
  153. package/packages/datadog-instrumentations/src/mquery.js +65 -0
  154. package/packages/datadog-instrumentations/src/multer.js +37 -0
  155. package/packages/datadog-instrumentations/src/mysql.js +105 -0
  156. package/packages/datadog-instrumentations/src/mysql2.js +380 -0
  157. package/packages/datadog-instrumentations/src/net.js +143 -0
  158. package/packages/datadog-instrumentations/src/next.js +320 -0
  159. package/packages/datadog-instrumentations/src/node-serialize.js +22 -0
  160. package/packages/datadog-instrumentations/src/nyc.js +59 -0
  161. package/packages/datadog-instrumentations/src/openai.js +326 -0
  162. package/packages/datadog-instrumentations/src/opensearch.js +11 -0
  163. package/packages/datadog-instrumentations/src/oracledb.js +162 -0
  164. package/packages/datadog-instrumentations/src/orchestrion-config/index.js +86 -0
  165. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +24 -0
  166. package/packages/datadog-instrumentations/src/passport-http.js +10 -0
  167. package/packages/datadog-instrumentations/src/passport-local.js +10 -0
  168. package/packages/datadog-instrumentations/src/passport-utils.js +61 -0
  169. package/packages/datadog-instrumentations/src/passport.js +45 -0
  170. package/packages/datadog-instrumentations/src/pg.js +201 -0
  171. package/packages/datadog-instrumentations/src/pino.js +117 -0
  172. package/packages/datadog-instrumentations/src/playwright.js +1383 -0
  173. package/packages/datadog-instrumentations/src/prisma.js +272 -0
  174. package/packages/datadog-instrumentations/src/process.js +29 -0
  175. package/packages/datadog-instrumentations/src/promise-js.js +15 -0
  176. package/packages/datadog-instrumentations/src/promise.js +14 -0
  177. package/packages/datadog-instrumentations/src/protobufjs.js +128 -0
  178. package/packages/datadog-instrumentations/src/pug.js +23 -0
  179. package/packages/datadog-instrumentations/src/q.js +21 -0
  180. package/packages/datadog-instrumentations/src/redis.js +161 -0
  181. package/packages/datadog-instrumentations/src/restify.js +89 -0
  182. package/packages/datadog-instrumentations/src/rhea.js +237 -0
  183. package/packages/datadog-instrumentations/src/router.js +326 -0
  184. package/packages/datadog-instrumentations/src/selenium.js +80 -0
  185. package/packages/datadog-instrumentations/src/sequelize.js +45 -0
  186. package/packages/datadog-instrumentations/src/sharedb.js +72 -0
  187. package/packages/datadog-instrumentations/src/stripe.js +92 -0
  188. package/packages/datadog-instrumentations/src/tedious.js +63 -0
  189. package/packages/datadog-instrumentations/src/undici.js +29 -0
  190. package/packages/datadog-instrumentations/src/url.js +80 -0
  191. package/packages/datadog-instrumentations/src/vitest.js +1116 -0
  192. package/packages/datadog-instrumentations/src/vm.js +49 -0
  193. package/packages/datadog-instrumentations/src/when.js +14 -0
  194. package/packages/datadog-instrumentations/src/winston.js +78 -0
  195. package/packages/datadog-instrumentations/src/ws.js +264 -0
  196. package/packages/datadog-plugin-aerospike/src/index.js +113 -0
  197. package/packages/datadog-plugin-ai/src/index.js +17 -0
  198. package/packages/datadog-plugin-ai/src/tracing.js +33 -0
  199. package/packages/datadog-plugin-ai/src/utils.js +28 -0
  200. package/packages/datadog-plugin-amqp10/src/consumer.js +34 -0
  201. package/packages/datadog-plugin-amqp10/src/index.js +17 -0
  202. package/packages/datadog-plugin-amqp10/src/producer.js +37 -0
  203. package/packages/datadog-plugin-amqp10/src/util.js +15 -0
  204. package/packages/datadog-plugin-amqplib/src/client.js +44 -0
  205. package/packages/datadog-plugin-amqplib/src/consumer.js +57 -0
  206. package/packages/datadog-plugin-amqplib/src/index.js +20 -0
  207. package/packages/datadog-plugin-amqplib/src/producer.js +63 -0
  208. package/packages/datadog-plugin-amqplib/src/util.js +14 -0
  209. package/packages/datadog-plugin-anthropic/src/index.js +17 -0
  210. package/packages/datadog-plugin-anthropic/src/tracing.js +30 -0
  211. package/packages/datadog-plugin-apollo/src/gateway/execute.js +18 -0
  212. package/packages/datadog-plugin-apollo/src/gateway/fetch.js +39 -0
  213. package/packages/datadog-plugin-apollo/src/gateway/index.js +36 -0
  214. package/packages/datadog-plugin-apollo/src/gateway/plan.js +18 -0
  215. package/packages/datadog-plugin-apollo/src/gateway/postprocessing.js +15 -0
  216. package/packages/datadog-plugin-apollo/src/gateway/request.js +122 -0
  217. package/packages/datadog-plugin-apollo/src/gateway/validate.js +23 -0
  218. package/packages/datadog-plugin-apollo/src/index.js +43 -0
  219. package/packages/datadog-plugin-avsc/src/index.js +11 -0
  220. package/packages/datadog-plugin-avsc/src/schema_iterator.js +176 -0
  221. package/packages/datadog-plugin-aws-sdk/src/base.js +335 -0
  222. package/packages/datadog-plugin-aws-sdk/src/index.js +26 -0
  223. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +16 -0
  224. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +31 -0
  225. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +487 -0
  226. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +19 -0
  227. package/packages/datadog-plugin-aws-sdk/src/services/default.js +7 -0
  228. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +197 -0
  229. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +53 -0
  230. package/packages/datadog-plugin-aws-sdk/src/services/index.js +16 -0
  231. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +214 -0
  232. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +67 -0
  233. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +19 -0
  234. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +55 -0
  235. package/packages/datadog-plugin-aws-sdk/src/services/sfn.js +7 -0
  236. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +125 -0
  237. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +298 -0
  238. package/packages/datadog-plugin-aws-sdk/src/services/states.js +7 -0
  239. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +64 -0
  240. package/packages/datadog-plugin-aws-sdk/src/util.js +151 -0
  241. package/packages/datadog-plugin-azure-durable-functions/src/index.js +49 -0
  242. package/packages/datadog-plugin-azure-event-hubs/src/index.js +15 -0
  243. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +96 -0
  244. package/packages/datadog-plugin-azure-functions/src/index.js +171 -0
  245. package/packages/datadog-plugin-azure-service-bus/src/index.js +15 -0
  246. package/packages/datadog-plugin-azure-service-bus/src/producer.js +97 -0
  247. package/packages/datadog-plugin-bullmq/src/consumer.js +82 -0
  248. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  249. package/packages/datadog-plugin-bullmq/src/producer.js +207 -0
  250. package/packages/datadog-plugin-bunyan/src/index.js +8 -0
  251. package/packages/datadog-plugin-cassandra-driver/src/index.js +47 -0
  252. package/packages/datadog-plugin-child_process/src/index.js +111 -0
  253. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +127 -0
  254. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/batch-consumer.js +9 -0
  255. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/consumer.js +9 -0
  256. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +25 -0
  257. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/producer.js +9 -0
  258. package/packages/datadog-plugin-connect/src/index.js +17 -0
  259. package/packages/datadog-plugin-couchbase/src/index.js +94 -0
  260. package/packages/datadog-plugin-cucumber/src/index.js +461 -0
  261. package/packages/datadog-plugin-cypress/src/after-run.js +5 -0
  262. package/packages/datadog-plugin-cypress/src/after-spec.js +5 -0
  263. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +1089 -0
  264. package/packages/datadog-plugin-cypress/src/index.js +11 -0
  265. package/packages/datadog-plugin-cypress/src/plugin.js +57 -0
  266. package/packages/datadog-plugin-cypress/src/source-map-utils.js +297 -0
  267. package/packages/datadog-plugin-cypress/src/support.js +303 -0
  268. package/packages/datadog-plugin-dd-trace-api/src/index.js +117 -0
  269. package/packages/datadog-plugin-dns/src/index.js +23 -0
  270. package/packages/datadog-plugin-dns/src/lookup.js +45 -0
  271. package/packages/datadog-plugin-dns/src/lookup_service.js +28 -0
  272. package/packages/datadog-plugin-dns/src/resolve.js +27 -0
  273. package/packages/datadog-plugin-dns/src/reverse.js +25 -0
  274. package/packages/datadog-plugin-elasticsearch/src/index.js +49 -0
  275. package/packages/datadog-plugin-express/src/code_origin.js +47 -0
  276. package/packages/datadog-plugin-express/src/index.js +17 -0
  277. package/packages/datadog-plugin-express/src/tracing.js +17 -0
  278. package/packages/datadog-plugin-fastify/src/code_origin.js +41 -0
  279. package/packages/datadog-plugin-fastify/src/index.js +17 -0
  280. package/packages/datadog-plugin-fastify/src/tracing.js +34 -0
  281. package/packages/datadog-plugin-fetch/src/index.js +40 -0
  282. package/packages/datadog-plugin-find-my-way/src/index.js +18 -0
  283. package/packages/datadog-plugin-fs/src/index.js +52 -0
  284. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +39 -0
  285. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +212 -0
  286. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +19 -0
  287. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +191 -0
  288. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  289. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +17 -0
  290. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +49 -0
  291. package/packages/datadog-plugin-google-cloud-vertexai/src/utils.js +21 -0
  292. package/packages/datadog-plugin-google-genai/src/index.js +17 -0
  293. package/packages/datadog-plugin-google-genai/src/tracing.js +41 -0
  294. package/packages/datadog-plugin-graphql/src/execute.js +88 -0
  295. package/packages/datadog-plugin-graphql/src/index.js +72 -0
  296. package/packages/datadog-plugin-graphql/src/parse.js +35 -0
  297. package/packages/datadog-plugin-graphql/src/resolve.js +191 -0
  298. package/packages/datadog-plugin-graphql/src/tools/index.js +6 -0
  299. package/packages/datadog-plugin-graphql/src/tools/signature.js +9 -0
  300. package/packages/datadog-plugin-graphql/src/tools/transforms.js +108 -0
  301. package/packages/datadog-plugin-graphql/src/utils.js +49 -0
  302. package/packages/datadog-plugin-graphql/src/validate.js +40 -0
  303. package/packages/datadog-plugin-grpc/src/client.js +129 -0
  304. package/packages/datadog-plugin-grpc/src/index.js +17 -0
  305. package/packages/datadog-plugin-grpc/src/server.js +112 -0
  306. package/packages/datadog-plugin-grpc/src/util.js +66 -0
  307. package/packages/datadog-plugin-hapi/src/index.js +39 -0
  308. package/packages/datadog-plugin-hono/src/index.js +26 -0
  309. package/packages/datadog-plugin-http/src/client.js +244 -0
  310. package/packages/datadog-plugin-http/src/index.js +37 -0
  311. package/packages/datadog-plugin-http/src/server.js +92 -0
  312. package/packages/datadog-plugin-http2/src/client.js +217 -0
  313. package/packages/datadog-plugin-http2/src/index.js +17 -0
  314. package/packages/datadog-plugin-http2/src/server.js +73 -0
  315. package/packages/datadog-plugin-ioredis/src/index.js +9 -0
  316. package/packages/datadog-plugin-iovalkey/src/index.js +16 -0
  317. package/packages/datadog-plugin-jest/src/index.js +558 -0
  318. package/packages/datadog-plugin-jest/src/util.js +176 -0
  319. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +28 -0
  320. package/packages/datadog-plugin-kafkajs/src/consumer.js +128 -0
  321. package/packages/datadog-plugin-kafkajs/src/index.js +19 -0
  322. package/packages/datadog-plugin-kafkajs/src/producer.js +129 -0
  323. package/packages/datadog-plugin-kafkajs/src/utils.js +27 -0
  324. package/packages/datadog-plugin-koa/src/index.js +22 -0
  325. package/packages/datadog-plugin-langchain/src/handlers/default.js +11 -0
  326. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +18 -0
  327. package/packages/datadog-plugin-langchain/src/handlers/language_models.js +18 -0
  328. package/packages/datadog-plugin-langchain/src/index.js +26 -0
  329. package/packages/datadog-plugin-langchain/src/tokens.js +35 -0
  330. package/packages/datadog-plugin-langchain/src/tracing.js +155 -0
  331. package/packages/datadog-plugin-mariadb/src/index.js +21 -0
  332. package/packages/datadog-plugin-memcached/src/index.js +54 -0
  333. package/packages/datadog-plugin-microgateway-core/src/index.js +26 -0
  334. package/packages/datadog-plugin-mocha/src/index.js +480 -0
  335. package/packages/datadog-plugin-moleculer/src/client.js +42 -0
  336. package/packages/datadog-plugin-moleculer/src/index.js +19 -0
  337. package/packages/datadog-plugin-moleculer/src/server.js +30 -0
  338. package/packages/datadog-plugin-moleculer/src/util.js +21 -0
  339. package/packages/datadog-plugin-mongodb-core/src/index.js +215 -0
  340. package/packages/datadog-plugin-mongoose/src/index.js +20 -0
  341. package/packages/datadog-plugin-mysql/src/index.js +42 -0
  342. package/packages/datadog-plugin-mysql2/src/index.js +25 -0
  343. package/packages/datadog-plugin-net/src/index.js +23 -0
  344. package/packages/datadog-plugin-net/src/ipc.js +23 -0
  345. package/packages/datadog-plugin-net/src/tcp.js +53 -0
  346. package/packages/datadog-plugin-next/src/index.js +155 -0
  347. package/packages/datadog-plugin-nyc/src/index.js +95 -0
  348. package/packages/datadog-plugin-openai/src/index.js +17 -0
  349. package/packages/datadog-plugin-openai/src/services.js +48 -0
  350. package/packages/datadog-plugin-openai/src/stream-helpers.js +159 -0
  351. package/packages/datadog-plugin-openai/src/token-estimator.js +20 -0
  352. package/packages/datadog-plugin-openai/src/tracing.js +723 -0
  353. package/packages/datadog-plugin-opensearch/src/index.js +9 -0
  354. package/packages/datadog-plugin-oracledb/src/connection-parser.js +37 -0
  355. package/packages/datadog-plugin-oracledb/src/index.js +44 -0
  356. package/packages/datadog-plugin-pg/src/index.js +41 -0
  357. package/packages/datadog-plugin-pino/src/index.js +9 -0
  358. package/packages/datadog-plugin-playwright/src/index.js +497 -0
  359. package/packages/datadog-plugin-prisma/src/datadog-tracing-helper.js +118 -0
  360. package/packages/datadog-plugin-prisma/src/index.js +144 -0
  361. package/packages/datadog-plugin-protobufjs/src/index.js +12 -0
  362. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +181 -0
  363. package/packages/datadog-plugin-redis/src/index.js +95 -0
  364. package/packages/datadog-plugin-restify/src/index.js +29 -0
  365. package/packages/datadog-plugin-rhea/src/consumer.js +68 -0
  366. package/packages/datadog-plugin-rhea/src/index.js +17 -0
  367. package/packages/datadog-plugin-rhea/src/producer.js +54 -0
  368. package/packages/datadog-plugin-router/src/index.js +170 -0
  369. package/packages/datadog-plugin-selenium/src/index.js +66 -0
  370. package/packages/datadog-plugin-sharedb/src/index.js +68 -0
  371. package/packages/datadog-plugin-tedious/src/index.js +36 -0
  372. package/packages/datadog-plugin-undici/src/index.js +313 -0
  373. package/packages/datadog-plugin-vitest/src/index.js +444 -0
  374. package/packages/datadog-plugin-web/src/index.js +18 -0
  375. package/packages/datadog-plugin-winston/src/index.js +8 -0
  376. package/packages/datadog-plugin-ws/src/close.js +121 -0
  377. package/packages/datadog-plugin-ws/src/index.js +30 -0
  378. package/packages/datadog-plugin-ws/src/producer.js +99 -0
  379. package/packages/datadog-plugin-ws/src/receiver.js +110 -0
  380. package/packages/datadog-plugin-ws/src/server.js +106 -0
  381. package/packages/datadog-plugin-ws/src/util.js +139 -0
  382. package/packages/datadog-shimmer/index.js +3 -0
  383. package/packages/datadog-shimmer/src/shimmer.js +279 -0
  384. package/packages/dd-trace/index.js +36 -0
  385. package/packages/dd-trace/src/agent/info.js +57 -0
  386. package/packages/dd-trace/src/agent/url.js +28 -0
  387. package/packages/dd-trace/src/aiguard/client.js +25 -0
  388. package/packages/dd-trace/src/aiguard/noop.js +9 -0
  389. package/packages/dd-trace/src/aiguard/sdk.js +223 -0
  390. package/packages/dd-trace/src/aiguard/tags.js +14 -0
  391. package/packages/dd-trace/src/analytics_sampler.js +15 -0
  392. package/packages/dd-trace/src/appsec/activation.js +29 -0
  393. package/packages/dd-trace/src/appsec/addresses.js +51 -0
  394. package/packages/dd-trace/src/appsec/api_security_sampler.js +117 -0
  395. package/packages/dd-trace/src/appsec/blocked_templates.js +14 -0
  396. package/packages/dd-trace/src/appsec/blocking.js +196 -0
  397. package/packages/dd-trace/src/appsec/channels.js +50 -0
  398. package/packages/dd-trace/src/appsec/downstream_requests.js +302 -0
  399. package/packages/dd-trace/src/appsec/graphql.js +166 -0
  400. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +24 -0
  401. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +36 -0
  402. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +15 -0
  403. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +62 -0
  404. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +72 -0
  405. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-analyzer.js +18 -0
  406. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +11 -0
  407. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-rule-type.js +6 -0
  408. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-analyzer.js +15 -0
  409. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +741 -0
  410. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +44 -0
  411. package/packages/dd-trace/src/appsec/iast/analyzers/index.js +23 -0
  412. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +42 -0
  413. package/packages/dd-trace/src/appsec/iast/analyzers/insecure-cookie-analyzer.js +12 -0
  414. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +22 -0
  415. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +82 -0
  416. package/packages/dd-trace/src/appsec/iast/analyzers/no-httponly-cookie-analyzer.js +12 -0
  417. package/packages/dd-trace/src/appsec/iast/analyzers/no-samesite-cookie-analyzer.js +12 -0
  418. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +192 -0
  419. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +108 -0
  420. package/packages/dd-trace/src/appsec/iast/analyzers/set-cookies-header-interceptor.js +58 -0
  421. package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +102 -0
  422. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +37 -0
  423. package/packages/dd-trace/src/appsec/iast/analyzers/stored-injection-analyzer.js +11 -0
  424. package/packages/dd-trace/src/appsec/iast/analyzers/template-injection-analyzer.js +18 -0
  425. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +16 -0
  426. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +64 -0
  427. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +181 -0
  428. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +31 -0
  429. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +64 -0
  430. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +19 -0
  431. package/packages/dd-trace/src/appsec/iast/analyzers/xcontenttype-header-missing-analyzer.js +19 -0
  432. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +89 -0
  433. package/packages/dd-trace/src/appsec/iast/context/kafka-ctx-plugin.js +14 -0
  434. package/packages/dd-trace/src/appsec/iast/iast-context.js +75 -0
  435. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +230 -0
  436. package/packages/dd-trace/src/appsec/iast/index.js +126 -0
  437. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +209 -0
  438. package/packages/dd-trace/src/appsec/iast/path-line.js +116 -0
  439. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +179 -0
  440. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +128 -0
  441. package/packages/dd-trace/src/appsec/iast/tags.js +7 -0
  442. package/packages/dd-trace/src/appsec/iast/taint-tracking/constants.js +6 -0
  443. package/packages/dd-trace/src/appsec/iast/taint-tracking/csi-methods.js +24 -0
  444. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +16 -0
  445. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +36 -0
  446. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +88 -0
  447. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +108 -0
  448. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +293 -0
  449. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +46 -0
  450. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +76 -0
  451. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-telemetry.js +13 -0
  452. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +266 -0
  453. package/packages/dd-trace/src/appsec/iast/taint-tracking/secure-marks-generator.js +13 -0
  454. package/packages/dd-trace/src/appsec/iast/taint-tracking/secure-marks.js +30 -0
  455. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +15 -0
  456. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +258 -0
  457. package/packages/dd-trace/src/appsec/iast/telemetry/iast-metric.js +113 -0
  458. package/packages/dd-trace/src/appsec/iast/telemetry/index.js +41 -0
  459. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +112 -0
  460. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +54 -0
  461. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +41 -0
  462. package/packages/dd-trace/src/appsec/iast/utils.js +24 -0
  463. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/constants.js +7 -0
  464. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +36 -0
  465. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +22 -0
  466. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/hardcoded-password-analyzer.js +13 -0
  467. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/json-sensitive-analyzer.js +12 -0
  468. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +28 -0
  469. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +112 -0
  470. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/tainted-range-based-sensitive-analyzer.js +25 -0
  471. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +40 -0
  472. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +294 -0
  473. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +126 -0
  474. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +168 -0
  475. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +24 -0
  476. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +169 -0
  477. package/packages/dd-trace/src/appsec/index.js +560 -0
  478. package/packages/dd-trace/src/appsec/rasp/command_injection.js +56 -0
  479. package/packages/dd-trace/src/appsec/rasp/fs-plugin.js +103 -0
  480. package/packages/dd-trace/src/appsec/rasp/index.js +140 -0
  481. package/packages/dd-trace/src/appsec/rasp/lfi.js +129 -0
  482. package/packages/dd-trace/src/appsec/rasp/sql_injection.js +108 -0
  483. package/packages/dd-trace/src/appsec/rasp/ssrf.js +102 -0
  484. package/packages/dd-trace/src/appsec/rasp/utils.js +85 -0
  485. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  486. package/packages/dd-trace/src/appsec/recommended.json +10731 -0
  487. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  488. package/packages/dd-trace/src/appsec/reporter.js +599 -0
  489. package/packages/dd-trace/src/appsec/rule_manager.js +168 -0
  490. package/packages/dd-trace/src/appsec/sdk/index.js +63 -0
  491. package/packages/dd-trace/src/appsec/sdk/noop.js +27 -0
  492. package/packages/dd-trace/src/appsec/sdk/set_user.js +44 -0
  493. package/packages/dd-trace/src/appsec/sdk/track_event.js +230 -0
  494. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +60 -0
  495. package/packages/dd-trace/src/appsec/sdk/utils.js +29 -0
  496. package/packages/dd-trace/src/appsec/stack_trace.js +117 -0
  497. package/packages/dd-trace/src/appsec/telemetry/common.js +28 -0
  498. package/packages/dd-trace/src/appsec/telemetry/index.js +184 -0
  499. package/packages/dd-trace/src/appsec/telemetry/rasp.js +103 -0
  500. package/packages/dd-trace/src/appsec/telemetry/user.js +32 -0
  501. package/packages/dd-trace/src/appsec/telemetry/waf.js +143 -0
  502. package/packages/dd-trace/src/appsec/user_tracking.js +190 -0
  503. package/packages/dd-trace/src/appsec/waf/diagnostics.js +15 -0
  504. package/packages/dd-trace/src/appsec/waf/index.js +149 -0
  505. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +188 -0
  506. package/packages/dd-trace/src/appsec/waf/waf_manager.js +98 -0
  507. package/packages/dd-trace/src/azure_metadata.js +137 -0
  508. package/packages/dd-trace/src/baggage.js +72 -0
  509. package/packages/dd-trace/src/ci-visibility/coverage-report-discovery.js +82 -0
  510. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +159 -0
  511. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +156 -0
  512. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +111 -0
  513. package/packages/dd-trace/src/ci-visibility/encode/json-encoder.js +27 -0
  514. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +104 -0
  515. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +78 -0
  516. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +56 -0
  517. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +52 -0
  518. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +83 -0
  519. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +420 -0
  520. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +317 -0
  521. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +114 -0
  522. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +76 -0
  523. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +120 -0
  524. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +54 -0
  525. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +156 -0
  526. package/packages/dd-trace/src/ci-visibility/requests/request.js +236 -0
  527. package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +107 -0
  528. package/packages/dd-trace/src/ci-visibility/telemetry.js +204 -0
  529. package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +63 -0
  530. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +121 -0
  531. package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +61 -0
  532. package/packages/dd-trace/src/config/defaults.js +174 -0
  533. package/packages/dd-trace/src/config/git_properties.js +120 -0
  534. package/packages/dd-trace/src/config/helper.js +214 -0
  535. package/packages/dd-trace/src/config/index.js +1676 -0
  536. package/packages/dd-trace/src/config/remote_config.js +203 -0
  537. package/packages/dd-trace/src/config/stable.js +93 -0
  538. package/packages/dd-trace/src/config/supported-configurations.json +4136 -0
  539. package/packages/dd-trace/src/constants.js +61 -0
  540. package/packages/dd-trace/src/crashtracking/crashtracker.js +120 -0
  541. package/packages/dd-trace/src/crashtracking/index.js +15 -0
  542. package/packages/dd-trace/src/crashtracking/noop.js +11 -0
  543. package/packages/dd-trace/src/datastreams/checkpointer.js +80 -0
  544. package/packages/dd-trace/src/datastreams/context.js +20 -0
  545. package/packages/dd-trace/src/datastreams/encoding.js +99 -0
  546. package/packages/dd-trace/src/datastreams/fnv.js +25 -0
  547. package/packages/dd-trace/src/datastreams/index.js +129 -0
  548. package/packages/dd-trace/src/datastreams/manager.js +36 -0
  549. package/packages/dd-trace/src/datastreams/pathway.js +187 -0
  550. package/packages/dd-trace/src/datastreams/processor.js +494 -0
  551. package/packages/dd-trace/src/datastreams/schemas/schema.js +10 -0
  552. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +140 -0
  553. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +27 -0
  554. package/packages/dd-trace/src/datastreams/size.js +53 -0
  555. package/packages/dd-trace/src/datastreams/writer.js +70 -0
  556. package/packages/dd-trace/src/debugger/config.js +18 -0
  557. package/packages/dd-trace/src/debugger/constants.js +7 -0
  558. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +320 -0
  559. package/packages/dd-trace/src/debugger/devtools_client/condition.js +294 -0
  560. package/packages/dd-trace/src/debugger/devtools_client/config.js +23 -0
  561. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +7 -0
  562. package/packages/dd-trace/src/debugger/devtools_client/index.js +336 -0
  563. package/packages/dd-trace/src/debugger/devtools_client/inspector_promises_polyfill.js +27 -0
  564. package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +41 -0
  565. package/packages/dd-trace/src/debugger/devtools_client/log.js +30 -0
  566. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +106 -0
  567. package/packages/dd-trace/src/debugger/devtools_client/send.js +138 -0
  568. package/packages/dd-trace/src/debugger/devtools_client/session.js +17 -0
  569. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +336 -0
  570. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +25 -0
  571. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +215 -0
  572. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +349 -0
  573. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +112 -0
  574. package/packages/dd-trace/src/debugger/devtools_client/snapshot/symbols.js +8 -0
  575. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +404 -0
  576. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +72 -0
  577. package/packages/dd-trace/src/debugger/devtools_client/state.js +238 -0
  578. package/packages/dd-trace/src/debugger/devtools_client/status.js +123 -0
  579. package/packages/dd-trace/src/debugger/index.js +259 -0
  580. package/packages/dd-trace/src/dogstatsd.js +412 -0
  581. package/packages/dd-trace/src/encode/0.4.js +425 -0
  582. package/packages/dd-trace/src/encode/0.5.js +77 -0
  583. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +361 -0
  584. package/packages/dd-trace/src/encode/agentless-json.js +200 -0
  585. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +131 -0
  586. package/packages/dd-trace/src/encode/span-stats.js +136 -0
  587. package/packages/dd-trace/src/encode/tags-processors.js +91 -0
  588. package/packages/dd-trace/src/exporter.js +32 -0
  589. package/packages/dd-trace/src/exporters/agent/index.js +65 -0
  590. package/packages/dd-trace/src/exporters/agent/writer.js +110 -0
  591. package/packages/dd-trace/src/exporters/agentless/index.js +132 -0
  592. package/packages/dd-trace/src/exporters/agentless/writer.js +201 -0
  593. package/packages/dd-trace/src/exporters/common/agents.js +42 -0
  594. package/packages/dd-trace/src/exporters/common/buffering-exporter.js +62 -0
  595. package/packages/dd-trace/src/exporters/common/docker.js +52 -0
  596. package/packages/dd-trace/src/exporters/common/form-data.js +59 -0
  597. package/packages/dd-trace/src/exporters/common/request.js +190 -0
  598. package/packages/dd-trace/src/exporters/common/url-to-http-options-polyfill.js +31 -0
  599. package/packages/dd-trace/src/exporters/common/util.js +13 -0
  600. package/packages/dd-trace/src/exporters/common/writer.js +49 -0
  601. package/packages/dd-trace/src/exporters/log/index.js +52 -0
  602. package/packages/dd-trace/src/exporters/span-stats/index.js +20 -0
  603. package/packages/dd-trace/src/exporters/span-stats/writer.js +54 -0
  604. package/packages/dd-trace/src/external-logger/src/index.js +139 -0
  605. package/packages/dd-trace/src/flare/file.js +40 -0
  606. package/packages/dd-trace/src/flare/index.js +101 -0
  607. package/packages/dd-trace/src/git_metadata_tagger.js +19 -0
  608. package/packages/dd-trace/src/guardrails/index.js +76 -0
  609. package/packages/dd-trace/src/guardrails/log.js +32 -0
  610. package/packages/dd-trace/src/guardrails/telemetry.js +92 -0
  611. package/packages/dd-trace/src/guardrails/util.js +8 -0
  612. package/packages/dd-trace/src/heap_snapshots.js +58 -0
  613. package/packages/dd-trace/src/histogram.js +35 -0
  614. package/packages/dd-trace/src/id.js +247 -0
  615. package/packages/dd-trace/src/iitm.js +15 -0
  616. package/packages/dd-trace/src/index.js +15 -0
  617. package/packages/dd-trace/src/lambda/context.js +27 -0
  618. package/packages/dd-trace/src/lambda/handler.js +87 -0
  619. package/packages/dd-trace/src/lambda/index.js +17 -0
  620. package/packages/dd-trace/src/lambda/runtime/errors.js +20 -0
  621. package/packages/dd-trace/src/lambda/runtime/patch.js +77 -0
  622. package/packages/dd-trace/src/lambda/runtime/ritm.js +133 -0
  623. package/packages/dd-trace/src/llmobs/constants/tags.js +55 -0
  624. package/packages/dd-trace/src/llmobs/constants/text.js +6 -0
  625. package/packages/dd-trace/src/llmobs/constants/writers.js +17 -0
  626. package/packages/dd-trace/src/llmobs/index.js +149 -0
  627. package/packages/dd-trace/src/llmobs/noop.js +88 -0
  628. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +399 -0
  629. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +218 -0
  630. package/packages/dd-trace/src/llmobs/plugins/anthropic.js +288 -0
  631. package/packages/dd-trace/src/llmobs/plugins/base.js +96 -0
  632. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +137 -0
  633. package/packages/dd-trace/src/llmobs/plugins/genai/index.js +104 -0
  634. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +486 -0
  635. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +20 -0
  636. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +111 -0
  637. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +42 -0
  638. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +106 -0
  639. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +32 -0
  640. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/tool.js +15 -0
  641. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +36 -0
  642. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +214 -0
  643. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  644. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +501 -0
  645. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +126 -0
  646. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +195 -0
  647. package/packages/dd-trace/src/llmobs/sdk.js +578 -0
  648. package/packages/dd-trace/src/llmobs/span_processor.js +311 -0
  649. package/packages/dd-trace/src/llmobs/storage.js +6 -0
  650. package/packages/dd-trace/src/llmobs/tagger.js +648 -0
  651. package/packages/dd-trace/src/llmobs/telemetry.js +174 -0
  652. package/packages/dd-trace/src/llmobs/util.js +182 -0
  653. package/packages/dd-trace/src/llmobs/writers/base.js +242 -0
  654. package/packages/dd-trace/src/llmobs/writers/evaluations.js +32 -0
  655. package/packages/dd-trace/src/llmobs/writers/spans.js +69 -0
  656. package/packages/dd-trace/src/llmobs/writers/util.js +54 -0
  657. package/packages/dd-trace/src/log/channels.js +78 -0
  658. package/packages/dd-trace/src/log/index.js +157 -0
  659. package/packages/dd-trace/src/log/log.js +76 -0
  660. package/packages/dd-trace/src/log/utils.js +16 -0
  661. package/packages/dd-trace/src/log/writer.js +72 -0
  662. package/packages/dd-trace/src/msgpack/chunk.js +69 -0
  663. package/packages/dd-trace/src/msgpack/encoder.js +308 -0
  664. package/packages/dd-trace/src/msgpack/index.js +6 -0
  665. package/packages/dd-trace/src/noop/dogstatsd.js +19 -0
  666. package/packages/dd-trace/src/noop/proxy.js +106 -0
  667. package/packages/dd-trace/src/noop/scope.js +19 -0
  668. package/packages/dd-trace/src/noop/span.js +50 -0
  669. package/packages/dd-trace/src/noop/span_context.js +16 -0
  670. package/packages/dd-trace/src/noop/tracer.js +47 -0
  671. package/packages/dd-trace/src/openfeature/constants/constants.js +51 -0
  672. package/packages/dd-trace/src/openfeature/flagging_provider.js +47 -0
  673. package/packages/dd-trace/src/openfeature/index.js +77 -0
  674. package/packages/dd-trace/src/openfeature/noop.js +101 -0
  675. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  676. package/packages/dd-trace/src/openfeature/writers/base.js +174 -0
  677. package/packages/dd-trace/src/openfeature/writers/exposures.js +173 -0
  678. package/packages/dd-trace/src/openfeature/writers/util.js +38 -0
  679. package/packages/dd-trace/src/opentelemetry/context_manager.js +91 -0
  680. package/packages/dd-trace/src/opentelemetry/logs/batch_log_processor.js +100 -0
  681. package/packages/dd-trace/src/opentelemetry/logs/index.js +87 -0
  682. package/packages/dd-trace/src/opentelemetry/logs/logger.js +83 -0
  683. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +126 -0
  684. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +55 -0
  685. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +245 -0
  686. package/packages/dd-trace/src/opentelemetry/metrics/constants.js +34 -0
  687. package/packages/dd-trace/src/opentelemetry/metrics/index.js +81 -0
  688. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +225 -0
  689. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +171 -0
  690. package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +54 -0
  691. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +62 -0
  692. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +251 -0
  693. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +557 -0
  694. package/packages/dd-trace/src/opentelemetry/otlp/common.proto +116 -0
  695. package/packages/dd-trace/src/opentelemetry/otlp/logs.proto +226 -0
  696. package/packages/dd-trace/src/opentelemetry/otlp/logs_service.proto +78 -0
  697. package/packages/dd-trace/src/opentelemetry/otlp/metrics.proto +720 -0
  698. package/packages/dd-trace/src/opentelemetry/otlp/metrics_service.proto +78 -0
  699. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +168 -0
  700. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +181 -0
  701. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +66 -0
  702. package/packages/dd-trace/src/opentelemetry/otlp/resource.proto +45 -0
  703. package/packages/dd-trace/src/opentelemetry/sampler.js +18 -0
  704. package/packages/dd-trace/src/opentelemetry/span.js +317 -0
  705. package/packages/dd-trace/src/opentelemetry/span_context.js +44 -0
  706. package/packages/dd-trace/src/opentelemetry/span_processor.js +50 -0
  707. package/packages/dd-trace/src/opentelemetry/tracer.js +226 -0
  708. package/packages/dd-trace/src/opentelemetry/tracer_provider.js +80 -0
  709. package/packages/dd-trace/src/opentracing/propagation/binary.js +11 -0
  710. package/packages/dd-trace/src/opentracing/propagation/http.js +7 -0
  711. package/packages/dd-trace/src/opentracing/propagation/log.js +54 -0
  712. package/packages/dd-trace/src/opentracing/propagation/text_map.js +818 -0
  713. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +47 -0
  714. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +103 -0
  715. package/packages/dd-trace/src/opentracing/span.js +412 -0
  716. package/packages/dd-trace/src/opentracing/span_context.js +75 -0
  717. package/packages/dd-trace/src/opentracing/tracer.js +145 -0
  718. package/packages/dd-trace/src/payload-tagging/config/aws.json +106 -0
  719. package/packages/dd-trace/src/payload-tagging/config/index.js +44 -0
  720. package/packages/dd-trace/src/payload-tagging/index.js +110 -0
  721. package/packages/dd-trace/src/payload-tagging/tagging.js +94 -0
  722. package/packages/dd-trace/src/pkg.js +44 -0
  723. package/packages/dd-trace/src/plugin_manager.js +219 -0
  724. package/packages/dd-trace/src/plugins/apollo.js +59 -0
  725. package/packages/dd-trace/src/plugins/cache.js +16 -0
  726. package/packages/dd-trace/src/plugins/ci_plugin.js +786 -0
  727. package/packages/dd-trace/src/plugins/client.js +11 -0
  728. package/packages/dd-trace/src/plugins/composite.js +29 -0
  729. package/packages/dd-trace/src/plugins/consumer.js +21 -0
  730. package/packages/dd-trace/src/plugins/database.js +123 -0
  731. package/packages/dd-trace/src/plugins/inbound.js +11 -0
  732. package/packages/dd-trace/src/plugins/index.js +117 -0
  733. package/packages/dd-trace/src/plugins/log_plugin.js +54 -0
  734. package/packages/dd-trace/src/plugins/outbound.js +159 -0
  735. package/packages/dd-trace/src/plugins/plugin.js +195 -0
  736. package/packages/dd-trace/src/plugins/producer.js +27 -0
  737. package/packages/dd-trace/src/plugins/schema.js +35 -0
  738. package/packages/dd-trace/src/plugins/server.js +11 -0
  739. package/packages/dd-trace/src/plugins/storage.js +23 -0
  740. package/packages/dd-trace/src/plugins/structured_log_plugin.js +9 -0
  741. package/packages/dd-trace/src/plugins/tracing.js +222 -0
  742. package/packages/dd-trace/src/plugins/util/ci.js +843 -0
  743. package/packages/dd-trace/src/plugins/util/env.js +31 -0
  744. package/packages/dd-trace/src/plugins/util/git-cache.js +129 -0
  745. package/packages/dd-trace/src/plugins/util/git.js +613 -0
  746. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +157 -0
  747. package/packages/dd-trace/src/plugins/util/ip_extractor.js +139 -0
  748. package/packages/dd-trace/src/plugins/util/llm.js +54 -0
  749. package/packages/dd-trace/src/plugins/util/stacktrace.js +244 -0
  750. package/packages/dd-trace/src/plugins/util/tags.js +81 -0
  751. package/packages/dd-trace/src/plugins/util/test.js +1202 -0
  752. package/packages/dd-trace/src/plugins/util/url.js +146 -0
  753. package/packages/dd-trace/src/plugins/util/urlfilter.js +32 -0
  754. package/packages/dd-trace/src/plugins/util/user-provided-git.js +91 -0
  755. package/packages/dd-trace/src/plugins/util/web.js +631 -0
  756. package/packages/dd-trace/src/priority_sampler.js +374 -0
  757. package/packages/dd-trace/src/process-tags/index.js +83 -0
  758. package/packages/dd-trace/src/profiler.js +17 -0
  759. package/packages/dd-trace/src/profiling/config.js +473 -0
  760. package/packages/dd-trace/src/profiling/constants.js +15 -0
  761. package/packages/dd-trace/src/profiling/exporter_cli.js +74 -0
  762. package/packages/dd-trace/src/profiling/exporters/agent.js +199 -0
  763. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +91 -0
  764. package/packages/dd-trace/src/profiling/exporters/file.js +35 -0
  765. package/packages/dd-trace/src/profiling/index.js +20 -0
  766. package/packages/dd-trace/src/profiling/libuv-size.js +49 -0
  767. package/packages/dd-trace/src/profiling/loggers/console.js +41 -0
  768. package/packages/dd-trace/src/profiling/profiler.js +430 -0
  769. package/packages/dd-trace/src/profiling/profilers/event_plugins/dns.js +11 -0
  770. package/packages/dd-trace/src/profiling/profilers/event_plugins/dns_lookup.js +16 -0
  771. package/packages/dd-trace/src/profiling/profilers/event_plugins/dns_lookupservice.js +16 -0
  772. package/packages/dd-trace/src/profiling/profilers/event_plugins/dns_resolve.js +24 -0
  773. package/packages/dd-trace/src/profiling/profilers/event_plugins/dns_reverse.js +16 -0
  774. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +66 -0
  775. package/packages/dd-trace/src/profiling/profilers/event_plugins/fs.js +45 -0
  776. package/packages/dd-trace/src/profiling/profilers/event_plugins/net.js +20 -0
  777. package/packages/dd-trace/src/profiling/profilers/events.js +466 -0
  778. package/packages/dd-trace/src/profiling/profilers/poisson.js +105 -0
  779. package/packages/dd-trace/src/profiling/profilers/shared.js +55 -0
  780. package/packages/dd-trace/src/profiling/profilers/space.js +77 -0
  781. package/packages/dd-trace/src/profiling/profilers/wall.js +434 -0
  782. package/packages/dd-trace/src/profiling/ssi-heuristics.js +84 -0
  783. package/packages/dd-trace/src/profiling/tagger.js +40 -0
  784. package/packages/dd-trace/src/profiling/webspan-utils.js +25 -0
  785. package/packages/dd-trace/src/propagation-hash/index.js +145 -0
  786. package/packages/dd-trace/src/proxy.js +351 -0
  787. package/packages/dd-trace/src/random_sampler.js +40 -0
  788. package/packages/dd-trace/src/rate_limiter.js +82 -0
  789. package/packages/dd-trace/src/remote_config/apply_states.js +7 -0
  790. package/packages/dd-trace/src/remote_config/capabilities.js +47 -0
  791. package/packages/dd-trace/src/remote_config/index.js +574 -0
  792. package/packages/dd-trace/src/remote_config/scheduler.js +30 -0
  793. package/packages/dd-trace/src/require-package-json.js +33 -0
  794. package/packages/dd-trace/src/ritm.js +211 -0
  795. package/packages/dd-trace/src/runtime_metrics/index.js +34 -0
  796. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +373 -0
  797. package/packages/dd-trace/src/sampler.js +63 -0
  798. package/packages/dd-trace/src/sampling_rule.js +267 -0
  799. package/packages/dd-trace/src/scope.js +63 -0
  800. package/packages/dd-trace/src/serverless.js +52 -0
  801. package/packages/dd-trace/src/service-naming/extra-services.js +24 -0
  802. package/packages/dd-trace/src/service-naming/index.js +75 -0
  803. package/packages/dd-trace/src/service-naming/schemas/definition.js +19 -0
  804. package/packages/dd-trace/src/service-naming/schemas/util.js +25 -0
  805. package/packages/dd-trace/src/service-naming/schemas/v0/graphql.js +14 -0
  806. package/packages/dd-trace/src/service-naming/schemas/v0/index.js +11 -0
  807. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +102 -0
  808. package/packages/dd-trace/src/service-naming/schemas/v0/serverless.js +18 -0
  809. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +118 -0
  810. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +92 -0
  811. package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +30 -0
  812. package/packages/dd-trace/src/service-naming/schemas/v1/graphql.js +14 -0
  813. package/packages/dd-trace/src/service-naming/schemas/v1/index.js +11 -0
  814. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +90 -0
  815. package/packages/dd-trace/src/service-naming/schemas/v1/serverless.js +18 -0
  816. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +86 -0
  817. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +92 -0
  818. package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +30 -0
  819. package/packages/dd-trace/src/span_format.js +264 -0
  820. package/packages/dd-trace/src/span_processor.js +171 -0
  821. package/packages/dd-trace/src/span_sampler.js +58 -0
  822. package/packages/dd-trace/src/span_stats.js +227 -0
  823. package/packages/dd-trace/src/spanleak.js +97 -0
  824. package/packages/dd-trace/src/standalone/index.js +70 -0
  825. package/packages/dd-trace/src/standalone/product.js +36 -0
  826. package/packages/dd-trace/src/standalone/tracesource.js +36 -0
  827. package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +59 -0
  828. package/packages/dd-trace/src/startup-log.js +146 -0
  829. package/packages/dd-trace/src/tagger.js +58 -0
  830. package/packages/dd-trace/src/telemetry/dependencies.js +174 -0
  831. package/packages/dd-trace/src/telemetry/endpoints.js +212 -0
  832. package/packages/dd-trace/src/telemetry/index.js +26 -0
  833. package/packages/dd-trace/src/telemetry/logs/index.js +90 -0
  834. package/packages/dd-trace/src/telemetry/logs/log-collector.js +128 -0
  835. package/packages/dd-trace/src/telemetry/metrics.js +288 -0
  836. package/packages/dd-trace/src/telemetry/send-data.js +225 -0
  837. package/packages/dd-trace/src/telemetry/telemetry.js +535 -0
  838. package/packages/dd-trace/src/tracer.js +171 -0
  839. package/packages/dd-trace/src/tracer_metadata.js +29 -0
  840. package/packages/dd-trace/src/util.js +94 -0
  841. package/register.js +8 -0
  842. package/scripts/preinstall.js +34 -0
  843. package/vendor/dist/@datadog/sketches-js/LICENSE +39 -0
  844. package/vendor/dist/@datadog/sketches-js/index.js +1 -0
  845. package/vendor/dist/@datadog/source-map/LICENSE +28 -0
  846. package/vendor/dist/@datadog/source-map/index.js +1 -0
  847. package/vendor/dist/@isaacs/ttlcache/LICENSE +55 -0
  848. package/vendor/dist/@isaacs/ttlcache/index.js +1 -0
  849. package/vendor/dist/@opentelemetry/core/LICENSE +201 -0
  850. package/vendor/dist/@opentelemetry/core/index.js +1 -0
  851. package/vendor/dist/@opentelemetry/resources/LICENSE +201 -0
  852. package/vendor/dist/@opentelemetry/resources/index.js +1 -0
  853. package/vendor/dist/astring/LICENSE +19 -0
  854. package/vendor/dist/astring/index.js +1 -0
  855. package/vendor/dist/crypto-randomuuid/index.js +1 -0
  856. package/vendor/dist/escape-string-regexp/LICENSE +9 -0
  857. package/vendor/dist/escape-string-regexp/index.js +1 -0
  858. package/vendor/dist/esquery/LICENSE +24 -0
  859. package/vendor/dist/esquery/index.js +1 -0
  860. package/vendor/dist/ignore/LICENSE +21 -0
  861. package/vendor/dist/ignore/index.js +1 -0
  862. package/vendor/dist/istanbul-lib-coverage/LICENSE +24 -0
  863. package/vendor/dist/istanbul-lib-coverage/index.js +1 -0
  864. package/vendor/dist/jest-docblock/LICENSE +21 -0
  865. package/vendor/dist/jest-docblock/index.js +1 -0
  866. package/vendor/dist/jsonpath-plus/LICENSE +22 -0
  867. package/vendor/dist/jsonpath-plus/index.js +1 -0
  868. package/vendor/dist/limiter/LICENSE +19 -0
  869. package/vendor/dist/limiter/index.js +1 -0
  870. package/vendor/dist/lodash.sortby/LICENSE +47 -0
  871. package/vendor/dist/lodash.sortby/index.js +1 -0
  872. package/vendor/dist/lru-cache/LICENSE +15 -0
  873. package/vendor/dist/lru-cache/index.js +1 -0
  874. package/vendor/dist/meriyah/LICENSE +7 -0
  875. package/vendor/dist/meriyah/index.js +1 -0
  876. package/vendor/dist/module-details-from-path/LICENSE +21 -0
  877. package/vendor/dist/module-details-from-path/index.js +1 -0
  878. package/vendor/dist/mutexify/promise/LICENSE +21 -0
  879. package/vendor/dist/mutexify/promise/index.js +1 -0
  880. package/vendor/dist/opentracing/LICENSE +201 -0
  881. package/vendor/dist/opentracing/binary_carrier.d.ts +11 -0
  882. package/vendor/dist/opentracing/constants.d.ts +61 -0
  883. package/vendor/dist/opentracing/examples/demo/demo.d.ts +2 -0
  884. package/vendor/dist/opentracing/ext/tags.d.ts +90 -0
  885. package/vendor/dist/opentracing/functions.d.ts +20 -0
  886. package/vendor/dist/opentracing/global_tracer.d.ts +14 -0
  887. package/vendor/dist/opentracing/index.d.ts +12 -0
  888. package/vendor/dist/opentracing/index.js +1 -0
  889. package/vendor/dist/opentracing/mock_tracer/index.d.ts +5 -0
  890. package/vendor/dist/opentracing/mock_tracer/mock_context.d.ts +13 -0
  891. package/vendor/dist/opentracing/mock_tracer/mock_report.d.ts +16 -0
  892. package/vendor/dist/opentracing/mock_tracer/mock_span.d.ts +50 -0
  893. package/vendor/dist/opentracing/mock_tracer/mock_tracer.d.ts +26 -0
  894. package/vendor/dist/opentracing/noop.d.ts +8 -0
  895. package/vendor/dist/opentracing/reference.d.ts +33 -0
  896. package/vendor/dist/opentracing/span.d.ts +147 -0
  897. package/vendor/dist/opentracing/span_context.d.ts +26 -0
  898. package/vendor/dist/opentracing/test/api_compatibility.d.ts +16 -0
  899. package/vendor/dist/opentracing/test/mocktracer_implemenation.d.ts +3 -0
  900. package/vendor/dist/opentracing/test/noop_implementation.d.ts +4 -0
  901. package/vendor/dist/opentracing/test/opentracing_api.d.ts +3 -0
  902. package/vendor/dist/opentracing/test/unittest.d.ts +2 -0
  903. package/vendor/dist/opentracing/tracer.d.ts +127 -0
  904. package/vendor/dist/path-to-regexp/LICENSE +21 -0
  905. package/vendor/dist/path-to-regexp/index.js +1 -0
  906. package/vendor/dist/pprof-format/LICENSE +8 -0
  907. package/vendor/dist/pprof-format/index.js +1 -0
  908. package/vendor/dist/protobufjs/LICENSE +39 -0
  909. package/vendor/dist/protobufjs/index.js +1 -0
  910. package/vendor/dist/protobufjs/minimal/LICENSE +39 -0
  911. package/vendor/dist/protobufjs/minimal/index.js +1 -0
  912. package/vendor/dist/retry/LICENSE +21 -0
  913. package/vendor/dist/retry/index.js +1 -0
  914. package/vendor/dist/rfdc/LICENSE +15 -0
  915. package/vendor/dist/rfdc/index.js +1 -0
  916. package/vendor/dist/semifies/LICENSE +201 -0
  917. package/vendor/dist/semifies/index.js +1 -0
  918. package/vendor/dist/shell-quote/LICENSE +24 -0
  919. package/vendor/dist/shell-quote/index.js +1 -0
  920. package/vendor/dist/source-map/LICENSE +28 -0
  921. package/vendor/dist/source-map/index.js +1 -0
  922. package/vendor/dist/source-map/lib/util/LICENSE +28 -0
  923. package/vendor/dist/source-map/lib/util/index.js +1 -0
  924. package/vendor/dist/source-map/mappings.wasm +0 -0
  925. package/vendor/dist/tlhunter-sorted-set/LICENSE +21 -0
  926. package/vendor/dist/tlhunter-sorted-set/index.js +1 -0
  927. package/vendor/dist/ttl-set/LICENSE +21 -0
  928. package/vendor/dist/ttl-set/index.js +1 -0
  929. package/version.js +18 -0
@@ -0,0 +1,1383 @@
1
+ 'use strict'
2
+
3
+ const satisfies = require('../../../vendor/dist/semifies')
4
+
5
+ const shimmer = require('../../datadog-shimmer')
6
+ const {
7
+ parseAnnotations,
8
+ getTestSuitePath,
9
+ PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE,
10
+ getIsFaultyEarlyFlakeDetection,
11
+ } = require('../../dd-trace/src/plugins/util/test')
12
+ const log = require('../../dd-trace/src/log')
13
+ const {
14
+ getValueFromEnvSources,
15
+ } = require('../../dd-trace/src/config/helper')
16
+ const { DD_MAJOR } = require('../../../version')
17
+ const { addHook, channel } = require('./helpers/instrument')
18
+
19
+ const testStartCh = channel('ci:playwright:test:start')
20
+ const testFinishCh = channel('ci:playwright:test:finish')
21
+ const testSkipCh = channel('ci:playwright:test:skip')
22
+
23
+ const testSessionStartCh = channel('ci:playwright:session:start')
24
+ const testSessionFinishCh = channel('ci:playwright:session:finish')
25
+
26
+ const libraryConfigurationCh = channel('ci:playwright:library-configuration')
27
+ const knownTestsCh = channel('ci:playwright:known-tests')
28
+ const testManagementTestsCh = channel('ci:playwright:test-management-tests')
29
+ const modifiedFilesCh = channel('ci:playwright:modified-files')
30
+ const isModifiedCh = channel('ci:playwright:test:is-modified')
31
+
32
+ const testSuiteStartCh = channel('ci:playwright:test-suite:start')
33
+ const testSuiteFinishCh = channel('ci:playwright:test-suite:finish')
34
+
35
+ const workerReportCh = channel('ci:playwright:worker:report')
36
+ const testPageGotoCh = channel('ci:playwright:test:page-goto')
37
+
38
+ const testToCtx = new WeakMap()
39
+ const testSuiteToCtx = new Map()
40
+ const testSuiteToTestStatuses = new Map()
41
+ const testSuiteToErrors = new Map()
42
+ const testsToTestStatuses = new Map()
43
+
44
+ const RUM_FLUSH_WAIT_TIME = Number(getValueFromEnvSources('DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS')) || 500
45
+
46
+ let applyRepeatEachIndex = null
47
+
48
+ let startedSuites = []
49
+
50
+ const STATUS_TO_TEST_STATUS = {
51
+ passed: 'pass',
52
+ failed: 'fail',
53
+ timedOut: 'fail',
54
+ skipped: 'skip',
55
+ }
56
+
57
+ let remainingTestsByFile = {}
58
+ let isKnownTestsEnabled = false
59
+ let isEarlyFlakeDetectionEnabled = false
60
+ let earlyFlakeDetectionNumRetries = 0
61
+ let isEarlyFlakeDetectionFaulty = false
62
+ let earlyFlakeDetectionFaultyThreshold = 0
63
+ let isFlakyTestRetriesEnabled = false
64
+ let flakyTestRetriesCount = 0
65
+ let knownTests = {}
66
+ let isTestManagementTestsEnabled = false
67
+ let testManagementAttemptToFixRetries = 0
68
+ let testManagementTests = {}
69
+ let isImpactedTestsEnabled = false
70
+ let modifiedFiles = {}
71
+ const quarantinedOrDisabledTestsAttemptToFix = []
72
+ let quarantinedButNotAttemptToFixFqns = new Set()
73
+ let rootDir = ''
74
+ let sessionProjects = []
75
+
76
+ const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0' // TODO: remove this once we drop support for v5
77
+
78
+ function isValidKnownTests (receivedKnownTests) {
79
+ return !!receivedKnownTests.playwright
80
+ }
81
+
82
+ function getTestFullyQualifiedName (test) {
83
+ const fullname = getTestFullname(test)
84
+ return `${test._requireFile} ${fullname}`
85
+ }
86
+
87
+ function getTestProperties (test) {
88
+ const testName = getTestFullname(test)
89
+ const testSuite = getTestSuitePath(test._requireFile, rootDir)
90
+
91
+ const { attempt_to_fix: attemptToFix, disabled, quarantined } =
92
+ testManagementTests?.playwright?.suites?.[testSuite]?.tests?.[testName]?.properties || {}
93
+ return { attemptToFix, disabled, quarantined }
94
+ }
95
+
96
+ function isNewTest (test) {
97
+ if (!isValidKnownTests(knownTests)) {
98
+ return false
99
+ }
100
+ const testSuite = getTestSuitePath(test._requireFile, rootDir)
101
+ const testsForSuite = knownTests.playwright[testSuite] || []
102
+
103
+ return !testsForSuite.includes(getTestFullname(test))
104
+ }
105
+
106
+ function getSuiteType (test, type) {
107
+ let suite = test.parent
108
+ while (suite && suite._type !== type) {
109
+ suite = suite.parent
110
+ }
111
+ return suite
112
+ }
113
+
114
+ // Copy of Suite#_deepClone but with a function to filter tests
115
+ function deepCloneSuite (suite, filterTest, tags = []) {
116
+ const copy = suite._clone()
117
+ for (const entry of suite._entries) {
118
+ if (entry.constructor.name === 'Suite') {
119
+ copy._addSuite(deepCloneSuite(entry, filterTest, tags))
120
+ } else {
121
+ if (filterTest(entry)) {
122
+ const copiedTest = entry._clone()
123
+ for (const tag of tags) {
124
+ const resolvedTag = typeof tag === 'function' ? tag(entry) : tag
125
+
126
+ if (resolvedTag) {
127
+ copiedTest[resolvedTag] = true
128
+ }
129
+ }
130
+ copy._addTest(copiedTest)
131
+ }
132
+ }
133
+ }
134
+ return copy
135
+ }
136
+
137
+ function getTestsBySuiteFromTestGroups (testGroups) {
138
+ return testGroups.reduce((acc, { requireFile, tests }) => {
139
+ if (acc[requireFile]) {
140
+ acc[requireFile].push(...tests)
141
+ } else {
142
+ // Copy the tests, otherwise we modify the original tests
143
+ acc[requireFile] = [...tests]
144
+ }
145
+ return acc
146
+ }, {})
147
+ }
148
+
149
+ function getTestsBySuiteFromTestsById (testsById) {
150
+ const testsByTestSuite = {}
151
+ for (const { test } of testsById.values()) {
152
+ const { _requireFile } = test
153
+ if (test._type === 'beforeAll' || test._type === 'afterAll') {
154
+ continue
155
+ }
156
+ if (testsByTestSuite[_requireFile]) {
157
+ testsByTestSuite[_requireFile].push(test)
158
+ } else {
159
+ testsByTestSuite[_requireFile] = [test]
160
+ }
161
+ }
162
+ return testsByTestSuite
163
+ }
164
+
165
+ function getPlaywrightConfig (playwrightRunner) {
166
+ try {
167
+ return playwrightRunner._configLoader.fullConfig()
168
+ } catch {
169
+ try {
170
+ return playwrightRunner._loader.fullConfig()
171
+ } catch {
172
+ return playwrightRunner._config || {}
173
+ }
174
+ }
175
+ }
176
+
177
+ function getRootDir (playwrightRunner, configArg) {
178
+ const config = configArg?.config || getPlaywrightConfig(playwrightRunner)
179
+ if (config.rootDir) {
180
+ return config.rootDir
181
+ }
182
+ if (playwrightRunner._configDir) {
183
+ return playwrightRunner._configDir
184
+ }
185
+ if (playwrightRunner._config) {
186
+ return playwrightRunner._config.config?.rootDir || process.cwd()
187
+ }
188
+ return process.cwd()
189
+ }
190
+
191
+ function getProjectsFromRunner (runner, configArg) {
192
+ const config = configArg?.projects ? configArg : getPlaywrightConfig(runner)
193
+ return config.projects?.map((project) => {
194
+ if (project.project) {
195
+ return project.project
196
+ }
197
+ return project
198
+ })
199
+ }
200
+
201
+ function getProjectsFromDispatcher (dispatcher) {
202
+ const newConfig = dispatcher._config?.config?.projects
203
+ if (newConfig) {
204
+ return newConfig
205
+ }
206
+ // old
207
+ return dispatcher._loader?.fullConfig()?.projects
208
+ }
209
+
210
+ function getBrowserNameFromProjects (projects, test) {
211
+ if (!projects || !test) {
212
+ return null
213
+ }
214
+ const { _projectIndex, _projectId: testProjectId } = test
215
+
216
+ if (_projectIndex !== undefined) {
217
+ return projects[_projectIndex]?.name
218
+ }
219
+
220
+ return projects.find(({ __projectId, _id, name }) => {
221
+ if (__projectId !== undefined) {
222
+ return __projectId === testProjectId
223
+ }
224
+ if (_id !== undefined) {
225
+ return _id === testProjectId
226
+ }
227
+ return name === testProjectId
228
+ })?.name
229
+ }
230
+
231
+ function formatTestHookError (error, hookType, isTimeout) {
232
+ let hookError = error
233
+ if (error) {
234
+ hookError.message = `Error in ${hookType} hook: ${error.message}`
235
+ }
236
+ if (!hookError && isTimeout) {
237
+ hookError = new Error(`${hookType} hook timed out`)
238
+ }
239
+ return hookError
240
+ }
241
+
242
+ function addErrorToTestSuite (testSuiteAbsolutePath, error) {
243
+ if (testSuiteToErrors.has(testSuiteAbsolutePath)) {
244
+ testSuiteToErrors.get(testSuiteAbsolutePath).push(error)
245
+ } else {
246
+ testSuiteToErrors.set(testSuiteAbsolutePath, [error])
247
+ }
248
+ }
249
+
250
+ function getTestSuiteError (testSuiteAbsolutePath) {
251
+ const errors = testSuiteToErrors.get(testSuiteAbsolutePath)
252
+ if (!errors) {
253
+ return null
254
+ }
255
+ if (errors.length === 1) {
256
+ return errors[0]
257
+ }
258
+ return new Error(`${errors.length} errors in this test suite:\n${errors.map(e => e.message).join('\n------\n')}`)
259
+ }
260
+
261
+ function getTestByTestId (dispatcher, testId) {
262
+ if (dispatcher._testById) {
263
+ return dispatcher._testById.get(testId)?.test
264
+ }
265
+ const allTests = dispatcher._allTests || dispatcher._ddAllTests
266
+ if (allTests) {
267
+ return allTests.find(({ id }) => id === testId)
268
+ }
269
+ }
270
+
271
+ function getChannelPromise (channelToPublishTo, params) {
272
+ return new Promise(resolve => {
273
+ channelToPublishTo.publish({ onDone: resolve, ...params })
274
+ })
275
+ }
276
+
277
+ // Inspired by https://github.com/microsoft/playwright/blob/2b77ed4d7aafa85a600caa0b0d101b72c8437eeb/packages/playwright/src/reporters/base.ts#L293
278
+ // We can't use test.outcome() directly because it's set on follow up handlers:
279
+ // our `testEndHandler` is called before the outcome is set.
280
+ function testWillRetry (test, testStatus) {
281
+ return testStatus === 'fail' && test.results.length <= test.retries
282
+ }
283
+
284
+ function getTestFullname (test) {
285
+ let parent = test.parent
286
+ const names = [test.title]
287
+ while (parent?._type === 'describe' || parent?._isDescribe) {
288
+ if (parent.title) {
289
+ names.unshift(parent.title)
290
+ }
291
+ parent = parent.parent
292
+ }
293
+ return names.join(' ')
294
+ }
295
+
296
+ function shouldFinishTestSuite (testSuiteAbsolutePath) {
297
+ const remainingTests = remainingTestsByFile[testSuiteAbsolutePath]
298
+ return !remainingTests.length || remainingTests.every(test => test.expectedStatus === 'skipped')
299
+ }
300
+
301
+ function testBeginHandler (test, browserName, shouldCreateTestSpan) {
302
+ const {
303
+ _requireFile: testSuiteAbsolutePath,
304
+ location: {
305
+ file: testSourceFileAbsolutePath,
306
+ line: testSourceLine,
307
+ },
308
+ _type,
309
+ } = test
310
+
311
+ if (_type === 'beforeAll' || _type === 'afterAll') {
312
+ return
313
+ }
314
+ // this means that a skipped test is being handled
315
+ if (!remainingTestsByFile[testSuiteAbsolutePath].length) {
316
+ return
317
+ }
318
+
319
+ const isNewTestSuite = !startedSuites.includes(testSuiteAbsolutePath)
320
+
321
+ if (isNewTestSuite) {
322
+ startedSuites.push(testSuiteAbsolutePath)
323
+ const testSuiteCtx = { testSuiteAbsolutePath, testSourceFileAbsolutePath }
324
+ testSuiteToCtx.set(testSuiteAbsolutePath, testSuiteCtx)
325
+ testSuiteStartCh.runStores(testSuiteCtx, () => {})
326
+ }
327
+
328
+ // We disable retries by default if attemptToFix is true
329
+ if (getTestProperties(test).attemptToFix) {
330
+ test.retries = 0
331
+ }
332
+
333
+ // this handles tests that do not go through the worker process (because they're skipped)
334
+ if (shouldCreateTestSpan) {
335
+ const testName = getTestFullname(test)
336
+ const testCtx = {
337
+ testName,
338
+ testSuiteAbsolutePath,
339
+ testSourceFileAbsolutePath,
340
+ testSourceLine,
341
+ browserName,
342
+ isDisabled: test._ddIsDisabled,
343
+ }
344
+ testToCtx.set(test, testCtx)
345
+
346
+ testStartCh.runStores(testCtx, () => {})
347
+ }
348
+ }
349
+
350
+ function testEndHandler ({
351
+ test,
352
+ annotations,
353
+ testStatus,
354
+ error,
355
+ isTimeout,
356
+ shouldCreateTestSpan,
357
+ projects,
358
+ }) {
359
+ const {
360
+ _requireFile: testSuiteAbsolutePath,
361
+ results,
362
+ _type,
363
+ } = test
364
+
365
+ let annotationTags
366
+ if (annotations.length) {
367
+ annotationTags = parseAnnotations(annotations)
368
+ }
369
+
370
+ if (_type === 'beforeAll' || _type === 'afterAll') {
371
+ const hookError = formatTestHookError(error, _type, isTimeout)
372
+
373
+ if (hookError) {
374
+ addErrorToTestSuite(testSuiteAbsolutePath, hookError)
375
+ }
376
+ return
377
+ }
378
+
379
+ const testFqn = getTestFullyQualifiedName(test)
380
+ const testStatuses = testsToTestStatuses.get(testFqn) || []
381
+
382
+ if (testStatuses.length === 0) {
383
+ testsToTestStatuses.set(testFqn, [testStatus])
384
+ } else {
385
+ testStatuses.push(testStatus)
386
+ }
387
+
388
+ const testProperties = getTestProperties(test)
389
+
390
+ if (testStatuses.length === testManagementAttemptToFixRetries + 1 && testProperties.attemptToFix) {
391
+ if (testStatuses.includes('fail')) {
392
+ test._ddHasFailedAttemptToFixRetries = true
393
+ }
394
+ if (testStatuses.every(status => status === 'fail')) {
395
+ test._ddHasFailedAllRetries = true
396
+ } else if (testStatuses.every(status => status === 'pass')) {
397
+ test._ddHasPassedAttemptToFixRetries = true
398
+ }
399
+ }
400
+
401
+ // Check if all EFD retries failed
402
+ if (testStatuses.length === earlyFlakeDetectionNumRetries + 1 &&
403
+ (test._ddIsNew || test._ddIsModified) &&
404
+ test._ddIsEfdRetry &&
405
+ testStatuses.every(status => status === 'fail')) {
406
+ test._ddHasFailedAllRetries = true
407
+ }
408
+
409
+ // ATR: set _ddHasFailedAllRetries when all auto test retries were exhausted and every attempt failed
410
+ if (isFlakyTestRetriesEnabled && !testProperties.attemptToFix && !test._ddIsEfdRetry &&
411
+ !(test._ddIsNew || test._ddIsModified) &&
412
+ flakyTestRetriesCount != null && flakyTestRetriesCount > 0 &&
413
+ testStatuses.length === flakyTestRetriesCount + 1 &&
414
+ testStatuses.every(status => status === 'fail')) {
415
+ test._ddHasFailedAllRetries = true
416
+ }
417
+
418
+ // this handles tests that do not go through the worker process (because they're skipped)
419
+ if (shouldCreateTestSpan) {
420
+ const testResult = results.at(-1)
421
+ const testCtx = testToCtx.get(test)
422
+ const isAtrRetry = testResult?.retry > 0 &&
423
+ isFlakyTestRetriesEnabled &&
424
+ !test._ddIsAttemptToFix &&
425
+ !test._ddIsEfdRetry
426
+ // if there is no testCtx, the skipped test will be created later
427
+ if (testCtx) {
428
+ testFinishCh.publish({
429
+ testStatus,
430
+ steps: testResult?.steps || [],
431
+ isRetry: testResult?.retry > 0,
432
+ error,
433
+ extraTags: annotationTags,
434
+ isNew: test._ddIsNew,
435
+ isAttemptToFix: test._ddIsAttemptToFix,
436
+ isAttemptToFixRetry: test._ddIsAttemptToFixRetry,
437
+ isQuarantined: test._ddIsQuarantined,
438
+ isEfdRetry: test._ddIsEfdRetry,
439
+ hasFailedAllRetries: test._ddHasFailedAllRetries,
440
+ hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
441
+ hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
442
+ isAtrRetry,
443
+ isModified: test._ddIsModified,
444
+ ...testCtx.currentStore,
445
+ })
446
+ }
447
+ }
448
+
449
+ if (testSuiteToTestStatuses.has(testSuiteAbsolutePath)) {
450
+ testSuiteToTestStatuses.get(testSuiteAbsolutePath).push(testStatus)
451
+ } else {
452
+ testSuiteToTestStatuses.set(testSuiteAbsolutePath, [testStatus])
453
+ }
454
+
455
+ if (error) {
456
+ addErrorToTestSuite(testSuiteAbsolutePath, error)
457
+ }
458
+
459
+ if (!testWillRetry(test, testStatus)) {
460
+ remainingTestsByFile[testSuiteAbsolutePath] = remainingTestsByFile[testSuiteAbsolutePath]
461
+ .filter(currentTest => currentTest !== test)
462
+ }
463
+
464
+ if (shouldFinishTestSuite(testSuiteAbsolutePath)) {
465
+ const skippedTests = remainingTestsByFile[testSuiteAbsolutePath]
466
+ .filter(test => test.expectedStatus === 'skipped')
467
+
468
+ for (const test of skippedTests) {
469
+ const browserName = getBrowserNameFromProjects(projects, test)
470
+ testSkipCh.publish({
471
+ testName: getTestFullname(test),
472
+ testSuiteAbsolutePath,
473
+ testSourceFileAbsolutePath: test.location.file,
474
+ testSourceLine: test.location.line,
475
+ browserName,
476
+ isNew: test._ddIsNew,
477
+ isDisabled: test._ddIsDisabled,
478
+ isModified: test._ddIsModified,
479
+ isQuarantined: test._ddIsQuarantined,
480
+ })
481
+ }
482
+ remainingTestsByFile[testSuiteAbsolutePath] = []
483
+
484
+ const testStatuses = testSuiteToTestStatuses.get(testSuiteAbsolutePath)
485
+ let testSuiteStatus = 'pass'
486
+ if (testStatuses.includes('fail')) {
487
+ testSuiteStatus = 'fail'
488
+ } else if (testStatuses.every(status => status === 'skip')) {
489
+ testSuiteStatus = 'skip'
490
+ }
491
+
492
+ const suiteError = getTestSuiteError(testSuiteAbsolutePath)
493
+ const testSuiteCtx = testSuiteToCtx.get(testSuiteAbsolutePath)
494
+ testSuiteFinishCh.publish({ status: testSuiteStatus, error: suiteError, ...testSuiteCtx.currentStore })
495
+ }
496
+ }
497
+
498
+ function dispatcherRunWrapper (run) {
499
+ return function () {
500
+ remainingTestsByFile = getTestsBySuiteFromTestsById(this._testById)
501
+ return run.apply(this, arguments)
502
+ }
503
+ }
504
+
505
+ function dispatcherRunWrapperNew (run) {
506
+ return function (testGroups) {
507
+ // Filter out disabled tests from testGroups before they get scheduled,
508
+ // unless they have attemptToFix (in which case they should still run and be retried)
509
+ if (isTestManagementTestsEnabled) {
510
+ for (const group of testGroups) {
511
+ group.tests = group.tests.filter(test => !test._ddIsDisabled || test._ddIsAttemptToFix)
512
+ }
513
+ // Remove empty groups
514
+ testGroups = testGroups.filter(group => group.tests.length > 0)
515
+ }
516
+
517
+ if (!this._allTests) {
518
+ // Removed in https://github.com/microsoft/playwright/commit/1e52c37b254a441cccf332520f60225a5acc14c7
519
+ // Not available from >=1.44.0
520
+ this._ddAllTests = testGroups.flatMap(g => g.tests)
521
+ }
522
+ remainingTestsByFile = getTestsBySuiteFromTestGroups(testGroups)
523
+ return run.apply(this, arguments)
524
+ }
525
+ }
526
+
527
+ function dispatcherHook (dispatcherExport) {
528
+ shimmer.wrap(dispatcherExport.Dispatcher.prototype, 'run', dispatcherRunWrapper)
529
+ shimmer.wrap(dispatcherExport.Dispatcher.prototype, '_createWorker', createWorker => function () {
530
+ const dispatcher = this
531
+ const worker = createWorker.apply(this, arguments)
532
+ const projects = getProjectsFromDispatcher(dispatcher)
533
+ sessionProjects = projects
534
+
535
+ // for older versions of playwright, `shouldCreateTestSpan` should always be true,
536
+ // since the `_runTest` function wrapper is not available for older versions
537
+ worker.process.on('message', ({ method, params }) => {
538
+ if (method === 'testBegin') {
539
+ const { test } = dispatcher._testById.get(params.testId)
540
+ const browser = getBrowserNameFromProjects(projects, test)
541
+ testBeginHandler(test, browser, true)
542
+ } else if (method === 'testEnd') {
543
+ const { test } = dispatcher._testById.get(params.testId)
544
+
545
+ const { results } = test
546
+ const testResult = results.at(-1)
547
+
548
+ const isTimeout = testResult.status === 'timedOut'
549
+ testEndHandler(
550
+ {
551
+ test,
552
+ annotations: params.annotations,
553
+ testStatus: STATUS_TO_TEST_STATUS[testResult.status],
554
+ error: testResult.error,
555
+ isTimeout,
556
+ shouldCreateTestSpan: true,
557
+ projects,
558
+ }
559
+ )
560
+ }
561
+ })
562
+
563
+ return worker
564
+ })
565
+ return dispatcherExport
566
+ }
567
+
568
+ function dispatcherHookNew (dispatcherExport, runWrapper) {
569
+ shimmer.wrap(dispatcherExport.Dispatcher.prototype, 'run', runWrapper)
570
+ shimmer.wrap(dispatcherExport.Dispatcher.prototype, '_createWorker', createWorker => function () {
571
+ const dispatcher = this
572
+ const worker = createWorker.apply(this, arguments)
573
+ const projects = getProjectsFromDispatcher(dispatcher)
574
+ sessionProjects = projects
575
+
576
+ worker.on('testBegin', ({ testId }) => {
577
+ const test = getTestByTestId(dispatcher, testId)
578
+ const browser = getBrowserNameFromProjects(projects, test)
579
+ const shouldCreateTestSpan = test.expectedStatus === 'skipped'
580
+ testBeginHandler(test, browser, shouldCreateTestSpan)
581
+ })
582
+ worker.on('testEnd', ({ testId, status, errors, annotations }) => {
583
+ const test = getTestByTestId(dispatcher, testId)
584
+
585
+ const isTimeout = status === 'timedOut'
586
+ const shouldCreateTestSpan = test.expectedStatus === 'skipped'
587
+ testEndHandler(
588
+ {
589
+ test,
590
+ annotations,
591
+ testStatus: STATUS_TO_TEST_STATUS[status],
592
+ error: errors && errors[0],
593
+ isTimeout,
594
+ shouldCreateTestSpan,
595
+ projects,
596
+ }
597
+ )
598
+ const testResult = test.results.at(-1)
599
+ const isAtrRetry = testResult?.retry > 0 &&
600
+ isFlakyTestRetriesEnabled &&
601
+ !test._ddIsAttemptToFix &&
602
+ !test._ddIsEfdRetry
603
+ // We want to send the ddProperties to the worker
604
+ worker.process.send({
605
+ type: 'ddProperties',
606
+ testId: test.id,
607
+ properties: {
608
+ _ddIsDisabled: test._ddIsDisabled,
609
+ _ddIsQuarantined: test._ddIsQuarantined,
610
+ _ddIsAttemptToFix: test._ddIsAttemptToFix,
611
+ _ddIsAttemptToFixRetry: test._ddIsAttemptToFixRetry,
612
+ _ddIsNew: test._ddIsNew,
613
+ _ddIsEfdRetry: test._ddIsEfdRetry,
614
+ _ddHasFailedAllRetries: test._ddHasFailedAllRetries,
615
+ _ddHasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
616
+ _ddHasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
617
+ _ddIsAtrRetry: isAtrRetry,
618
+ _ddIsModified: test._ddIsModified,
619
+ },
620
+ })
621
+ })
622
+
623
+ return worker
624
+ })
625
+ return dispatcherExport
626
+ }
627
+
628
+ function runAllTestsWrapper (runAllTests, playwrightVersion) {
629
+ // Config parameter is only available from >=1.55.0
630
+ return async function (config) {
631
+ let onDone
632
+
633
+ rootDir = getRootDir(this, config)
634
+
635
+ const processArgv = process.argv.slice(2).join(' ')
636
+ const command = `playwright ${processArgv}`
637
+ testSessionStartCh.publish({ command, frameworkVersion: playwrightVersion, rootDir })
638
+
639
+ try {
640
+ const { err, libraryConfig } = await getChannelPromise(
641
+ libraryConfigurationCh,
642
+ { frameworkVersion: playwrightVersion }
643
+ )
644
+ if (!err) {
645
+ isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
646
+ isEarlyFlakeDetectionEnabled = libraryConfig.isEarlyFlakeDetectionEnabled
647
+ earlyFlakeDetectionNumRetries = libraryConfig.earlyFlakeDetectionNumRetries
648
+ earlyFlakeDetectionFaultyThreshold = libraryConfig.earlyFlakeDetectionFaultyThreshold
649
+ isFlakyTestRetriesEnabled = libraryConfig.isFlakyTestRetriesEnabled
650
+ flakyTestRetriesCount = libraryConfig.flakyTestRetriesCount
651
+ isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
652
+ testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
653
+ isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
654
+ }
655
+ } catch (e) {
656
+ isEarlyFlakeDetectionEnabled = false
657
+ isKnownTestsEnabled = false
658
+ isTestManagementTestsEnabled = false
659
+ isImpactedTestsEnabled = false
660
+ log.error('Playwright session start error', e)
661
+ }
662
+
663
+ if (isKnownTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
664
+ try {
665
+ const { err, knownTests: receivedKnownTests } = await getChannelPromise(knownTestsCh)
666
+ if (err) {
667
+ isEarlyFlakeDetectionEnabled = false
668
+ isKnownTestsEnabled = false
669
+ } else {
670
+ knownTests = receivedKnownTests
671
+ }
672
+ if (!isValidKnownTests(receivedKnownTests)) {
673
+ isEarlyFlakeDetectionFaulty = true
674
+ isEarlyFlakeDetectionEnabled = false
675
+ isKnownTestsEnabled = false
676
+ }
677
+ } catch (err) {
678
+ isEarlyFlakeDetectionEnabled = false
679
+ isKnownTestsEnabled = false
680
+ log.error('Playwright known tests error', err)
681
+ }
682
+ }
683
+
684
+ if (isTestManagementTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
685
+ try {
686
+ const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
687
+ if (err) {
688
+ isTestManagementTestsEnabled = false
689
+ } else {
690
+ testManagementTests = receivedTestManagementTests
691
+ }
692
+ } catch (err) {
693
+ isTestManagementTestsEnabled = false
694
+ log.error('Playwright test management tests error', err)
695
+ }
696
+ }
697
+
698
+ if (isImpactedTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
699
+ try {
700
+ const { err, modifiedFiles: receivedModifiedFiles } = await getChannelPromise(modifiedFilesCh)
701
+ if (err) {
702
+ isImpactedTestsEnabled = false
703
+ } else {
704
+ modifiedFiles = receivedModifiedFiles
705
+ }
706
+ } catch (err) {
707
+ isImpactedTestsEnabled = false
708
+ log.error('Playwright impacted tests error', err)
709
+ }
710
+ }
711
+
712
+ const projects = getProjectsFromRunner(this, config)
713
+
714
+ // ATR and `--retries` are now compatible with Test Management.
715
+ // Test Management tests have their retries set to 0 at the test level,
716
+ // preventing them from being retried by ATR or `--retries`.
717
+ const shouldSetATRRetries = isFlakyTestRetriesEnabled && flakyTestRetriesCount > 0
718
+ if (shouldSetATRRetries) {
719
+ for (const project of projects) {
720
+ if (project.retries === 0) { // Only if it hasn't been set by the user
721
+ project.retries = flakyTestRetriesCount
722
+ }
723
+ }
724
+ }
725
+
726
+ let runAllTestsReturn = await runAllTests.apply(this, arguments)
727
+
728
+ // Tests that have only skipped tests may reach this point
729
+ // Skipped tests may or may not go through `testBegin` or `testEnd`
730
+ // depending on the playwright configuration
731
+ for (const tests of Object.values(remainingTestsByFile)) {
732
+ // `tests` should normally be empty, but if it isn't,
733
+ // there were tests that did not go through `testBegin` or `testEnd`,
734
+ // because they were skipped
735
+ for (const test of tests) {
736
+ const browser = getBrowserNameFromProjects(projects, test)
737
+ testBeginHandler(test, browser, true)
738
+ testEndHandler({
739
+ test,
740
+ annotations: [],
741
+ testStatus: 'skip',
742
+ error: null,
743
+ isTimeout: false,
744
+ shouldCreateTestSpan: true,
745
+ projects,
746
+ })
747
+ }
748
+ }
749
+
750
+ let preventedToFail = false
751
+
752
+ const sessionStatus = runAllTestsReturn.status || runAllTestsReturn
753
+
754
+ if (isTestManagementTestsEnabled && sessionStatus === 'failed') {
755
+ let totalFailedTestCount = 0
756
+ let totalAttemptToFixFailedTestCount = 0
757
+ let totalPureQuarantinedFailedTestCount = 0
758
+
759
+ for (const [fqn, testStatuses] of testsToTestStatuses.entries()) {
760
+ // Only count as failed if the final status (after retries) is 'fail'
761
+ const lastStatus = testStatuses[testStatuses.length - 1]
762
+ if (lastStatus === 'fail') {
763
+ totalFailedTestCount += 1
764
+ if (quarantinedButNotAttemptToFixFqns.has(fqn)) {
765
+ totalPureQuarantinedFailedTestCount += 1
766
+ }
767
+ }
768
+ }
769
+
770
+ for (const test of quarantinedOrDisabledTestsAttemptToFix) {
771
+ const testFqn = getTestFullyQualifiedName(test)
772
+ const testStatuses = testsToTestStatuses.get(testFqn)
773
+ // Only count as failed if the final status (after retries) is 'fail'
774
+ if (testStatuses && testStatuses[testStatuses.length - 1] === 'fail') {
775
+ totalAttemptToFixFailedTestCount += 1
776
+ }
777
+ }
778
+
779
+ const totalIgnorableFailures = totalAttemptToFixFailedTestCount + totalPureQuarantinedFailedTestCount
780
+
781
+ if (totalFailedTestCount > 0 && totalFailedTestCount === totalIgnorableFailures) {
782
+ runAllTestsReturn = 'passed'
783
+ preventedToFail = true
784
+ }
785
+ }
786
+
787
+ const flushWait = new Promise(resolve => {
788
+ onDone = resolve
789
+ })
790
+ testSessionFinishCh.publish({
791
+ status: preventedToFail ? 'pass' : STATUS_TO_TEST_STATUS[sessionStatus],
792
+ isEarlyFlakeDetectionEnabled,
793
+ isEarlyFlakeDetectionFaulty,
794
+ isTestManagementTestsEnabled,
795
+ onDone,
796
+ })
797
+ await flushWait
798
+
799
+ startedSuites = []
800
+ remainingTestsByFile = {}
801
+ quarantinedButNotAttemptToFixFqns = new Set()
802
+
803
+ // TODO: we can trick playwright into thinking the session passed by returning
804
+ // 'passed' here. We might be able to use this for both EFD and Test Management tests.
805
+ return runAllTestsReturn
806
+ }
807
+ }
808
+
809
+ function runnerHook (runnerExport, playwrightVersion) {
810
+ shimmer.wrap(
811
+ runnerExport.Runner.prototype,
812
+ 'runAllTests',
813
+ runAllTests => runAllTestsWrapper(runAllTests, playwrightVersion)
814
+ )
815
+ }
816
+
817
+ function runnerHookNew (runnerExport, playwrightVersion) {
818
+ runnerExport = shimmer.wrap(runnerExport, 'runAllTestsWithConfig', function (originalGetter) {
819
+ const originalFunction = originalGetter.call(this)
820
+ return function () {
821
+ return runAllTestsWrapper(originalFunction, playwrightVersion)
822
+ }
823
+ })
824
+
825
+ return runnerExport
826
+ }
827
+
828
+ if (DD_MAJOR < 6) { // <1.38.0 is only supported up to version 5
829
+ addHook({
830
+ name: '@playwright/test',
831
+ file: 'lib/runner.js',
832
+ versions: ['>=1.18.0 <=1.30.0'],
833
+ }, runnerHook)
834
+
835
+ addHook({
836
+ name: '@playwright/test',
837
+ file: 'lib/dispatcher.js',
838
+ versions: ['>=1.18.0 <1.30.0'],
839
+ }, dispatcherHook)
840
+
841
+ addHook({
842
+ name: '@playwright/test',
843
+ file: 'lib/dispatcher.js',
844
+ versions: ['>=1.30.0 <1.31.0'],
845
+ }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapper))
846
+
847
+ addHook({
848
+ name: '@playwright/test',
849
+ file: 'lib/runner/dispatcher.js',
850
+ versions: ['>=1.31.0 <1.38.0'],
851
+ }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
852
+
853
+ addHook({
854
+ name: '@playwright/test',
855
+ file: 'lib/runner/runner.js',
856
+ versions: ['>=1.31.0 <1.38.0'],
857
+ }, runnerHook)
858
+ }
859
+
860
+ addHook({
861
+ name: 'playwright',
862
+ file: 'lib/runner/runner.js',
863
+ versions: ['>=1.38.0'],
864
+ }, runnerHook)
865
+
866
+ addHook({
867
+ name: 'playwright',
868
+ file: 'lib/runner/testRunner.js',
869
+ versions: ['>=1.55.0'],
870
+ }, runnerHookNew)
871
+
872
+ addHook({
873
+ name: 'playwright',
874
+ file: 'lib/runner/dispatcher.js',
875
+ versions: ['>=1.38.0'],
876
+ }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
877
+
878
+ addHook({
879
+ name: 'playwright',
880
+ file: 'lib/common/suiteUtils.js',
881
+ versions: ['>=1.38.0'],
882
+ }, suiteUtilsPackage => {
883
+ // We grab `applyRepeatEachIndex` to use it later
884
+ // `applyRepeatEachIndex` needs to be applied to a cloned suite
885
+ applyRepeatEachIndex = suiteUtilsPackage.applyRepeatEachIndex
886
+ return suiteUtilsPackage
887
+ })
888
+
889
+ /**
890
+ * We could repeat the logic of `applyRepeatEachIndex` here, but it'd be more risky
891
+ * as playwright could change it at any time.
892
+ *
893
+ * `applyRepeatEachIndex` goes through all the tests in a suite and applies the "repeat" logic
894
+ * for a single repeat index.
895
+ *
896
+ * This means that the clone logic is cumbersome:
897
+ * - we grab the unique file suites that have new tests
898
+ * - we store its project suite
899
+ * - we clone each of these file suites for each repeat index
900
+ * - we execute `applyRepeatEachIndex` for each of these cloned file suites
901
+ * - we add the cloned file suites to the project suite
902
+ */
903
+ function applyRetriesToTests (fileSuitesWithTestsToRetry, filterTest, tagsToApply, numRetries) {
904
+ for (const [fileSuite, projectSuite] of fileSuitesWithTestsToRetry.entries()) {
905
+ for (let repeatEachIndex = 1; repeatEachIndex <= numRetries; repeatEachIndex++) {
906
+ const copyFileSuite = deepCloneSuite(fileSuite, filterTest, tagsToApply)
907
+ applyRepeatEachIndex(projectSuite._fullProject, copyFileSuite, repeatEachIndex + 1)
908
+ projectSuite._addSuite(copyFileSuite)
909
+ }
910
+ }
911
+ }
912
+
913
+ addHook({
914
+ name: 'playwright',
915
+ file: 'lib/runner/loadUtils.js',
916
+ versions: ['>=1.38.0'],
917
+ }, (loadUtilsPackage) => {
918
+ const oldCreateRootSuite = loadUtilsPackage.createRootSuite
919
+
920
+ async function newCreateRootSuite () {
921
+ if (!isKnownTestsEnabled && !isTestManagementTestsEnabled && !isImpactedTestsEnabled) {
922
+ return oldCreateRootSuite.apply(this, arguments)
923
+ }
924
+
925
+ const createRootSuiteReturnValue = await oldCreateRootSuite.apply(this, arguments)
926
+ // From v1.56.0 on, createRootSuite returns `{ rootSuite, topLevelProjects }`
927
+ const rootSuite = createRootSuiteReturnValue.rootSuite || createRootSuiteReturnValue
928
+
929
+ const allTests = rootSuite.allTests()
930
+
931
+ if (isTestManagementTestsEnabled) {
932
+ const fileSuitesWithManagedTestsToProjects = new Map()
933
+ for (const test of allTests) {
934
+ const testProperties = getTestProperties(test)
935
+ // Disabled tests are skipped unless they have attemptToFix
936
+ if (testProperties.disabled) {
937
+ test._ddIsDisabled = true
938
+ if (!testProperties.attemptToFix) {
939
+ test.expectedStatus = 'skipped'
940
+ // setting test.expectedStatus to 'skipped' does not work for every case,
941
+ // so we need to filter out disabled tests in dispatcherRunWrapperNew,
942
+ // so they don't get to the workers
943
+ continue
944
+ }
945
+ }
946
+ if (testProperties.quarantined) {
947
+ test._ddIsQuarantined = true
948
+ if (!testProperties.attemptToFix) {
949
+ // Do not skip quarantined tests, let them run and overwrite results post-run if they fail
950
+ const testFqn = getTestFullyQualifiedName(test)
951
+ quarantinedButNotAttemptToFixFqns.add(testFqn)
952
+ }
953
+ }
954
+ if (testProperties.attemptToFix) {
955
+ test._ddIsAttemptToFix = true
956
+ // Prevent ATR or `--retries` from retrying attemptToFix tests
957
+ test.retries = 0
958
+ const fileSuite = getSuiteType(test, 'file')
959
+
960
+ if (!fileSuitesWithManagedTestsToProjects.has(fileSuite)) {
961
+ fileSuitesWithManagedTestsToProjects.set(fileSuite, getSuiteType(test, 'project'))
962
+ }
963
+ if (testProperties.disabled || testProperties.quarantined) {
964
+ quarantinedOrDisabledTestsAttemptToFix.push(test)
965
+ }
966
+ }
967
+ }
968
+ applyRetriesToTests(
969
+ fileSuitesWithManagedTestsToProjects,
970
+ (test) => test._ddIsAttemptToFix,
971
+ [
972
+ (test) => test._ddIsQuarantined && '_ddIsQuarantined',
973
+ (test) => test._ddIsDisabled && '_ddIsDisabled',
974
+ '_ddIsAttemptToFix',
975
+ '_ddIsAttemptToFixRetry',
976
+ ],
977
+ testManagementAttemptToFixRetries
978
+ )
979
+ }
980
+
981
+ if (isImpactedTestsEnabled) {
982
+ const impactedTests = allTests.filter(test => {
983
+ let isImpacted = false
984
+ isModifiedCh.publish({
985
+ filePath: test._requireFile,
986
+ modifiedFiles,
987
+ onDone: (isModified) => { isImpacted = isModified },
988
+ })
989
+ return isImpacted
990
+ })
991
+
992
+ const fileSuitesWithImpactedTestsToProjects = new Map()
993
+ for (const impactedTest of impactedTests) {
994
+ impactedTest._ddIsModified = true
995
+ if (isEarlyFlakeDetectionEnabled && impactedTest.expectedStatus !== 'skipped') {
996
+ const fileSuite = getSuiteType(impactedTest, 'file')
997
+ if (!fileSuitesWithImpactedTestsToProjects.has(fileSuite)) {
998
+ fileSuitesWithImpactedTestsToProjects.set(fileSuite, getSuiteType(impactedTest, 'project'))
999
+ }
1000
+ }
1001
+ }
1002
+ // If something change in the file, all tests in the file are impacted, hence the () => true filter
1003
+ applyRetriesToTests(
1004
+ fileSuitesWithImpactedTestsToProjects,
1005
+ () => true,
1006
+ [
1007
+ '_ddIsModified',
1008
+ '_ddIsEfdRetry',
1009
+ (test) => (isKnownTestsEnabled && isNewTest(test) ? '_ddIsNew' : null),
1010
+ ],
1011
+ earlyFlakeDetectionNumRetries
1012
+ )
1013
+ }
1014
+
1015
+ if (isKnownTestsEnabled) {
1016
+ const newTests = allTests.filter(isNewTest)
1017
+
1018
+ const isFaulty = getIsFaultyEarlyFlakeDetection(
1019
+ allTests.map(test => getTestSuitePath(test._requireFile, rootDir)),
1020
+ knownTests.playwright,
1021
+ earlyFlakeDetectionFaultyThreshold
1022
+ )
1023
+
1024
+ if (isFaulty) {
1025
+ isEarlyFlakeDetectionEnabled = false
1026
+ isKnownTestsEnabled = false
1027
+ isEarlyFlakeDetectionFaulty = true
1028
+ } else {
1029
+ const fileSuitesWithNewTestsToProjects = new Map()
1030
+ for (const newTest of newTests) {
1031
+ newTest._ddIsNew = true
1032
+ if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped' && !newTest._ddIsModified) {
1033
+ // Prevent ATR or `--retries` from retrying new tests if EFD is enabled
1034
+ newTest.retries = 0
1035
+ const fileSuite = getSuiteType(newTest, 'file')
1036
+ if (!fileSuitesWithNewTestsToProjects.has(fileSuite)) {
1037
+ fileSuitesWithNewTestsToProjects.set(fileSuite, getSuiteType(newTest, 'project'))
1038
+ }
1039
+ }
1040
+ }
1041
+
1042
+ applyRetriesToTests(
1043
+ fileSuitesWithNewTestsToProjects,
1044
+ isNewTest,
1045
+ ['_ddIsNew', '_ddIsEfdRetry'],
1046
+ earlyFlakeDetectionNumRetries
1047
+ )
1048
+ }
1049
+ }
1050
+
1051
+ return createRootSuiteReturnValue
1052
+ }
1053
+
1054
+ // We need to proxy the createRootSuite function because the function is not configurable
1055
+ const proxy = new Proxy(loadUtilsPackage, {
1056
+ get (target, prop) {
1057
+ if (prop === 'createRootSuite') {
1058
+ return newCreateRootSuite
1059
+ }
1060
+ return target[prop]
1061
+ },
1062
+ })
1063
+
1064
+ return proxy
1065
+ })
1066
+
1067
+ // main process hook
1068
+ addHook({
1069
+ name: 'playwright',
1070
+ file: 'lib/runner/processHost.js',
1071
+ versions: ['>=1.38.0'],
1072
+ }, (processHostPackage) => {
1073
+ shimmer.wrap(processHostPackage.ProcessHost.prototype, 'startRunner', startRunner => async function () {
1074
+ this._extraEnv = {
1075
+ ...this._extraEnv,
1076
+ // Used to detect that we're in a playwright worker
1077
+ DD_PLAYWRIGHT_WORKER: '1',
1078
+ }
1079
+
1080
+ const res = await startRunner.apply(this, arguments)
1081
+
1082
+ // We add a new listener to `this.process`, which is represents the worker
1083
+ this.process.on('message', (message) => {
1084
+ // These messages are [code, payload]. The payload is test data
1085
+ if (Array.isArray(message) && message[0] === PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE) {
1086
+ workerReportCh.publish(message[1])
1087
+ }
1088
+ })
1089
+
1090
+ return res
1091
+ })
1092
+
1093
+ return processHostPackage
1094
+ })
1095
+
1096
+ addHook({
1097
+ name: 'playwright-core',
1098
+ file: 'lib/client/page.js',
1099
+ versions: ['>=1.38.0'],
1100
+ }, (pagePackage) => {
1101
+ shimmer.wrap(pagePackage.Page.prototype, 'goto', goto => async function (url, options) {
1102
+ const response = await goto.apply(this, arguments)
1103
+
1104
+ const page = this
1105
+
1106
+ try {
1107
+ if (page) {
1108
+ const { isRumInstrumented, isRumActive, rumSamplingRate } = await page.evaluate(() => {
1109
+ const isRumInstrumented = !!window.DD_RUM
1110
+ const isRumActive = window.DD_RUM && window.DD_RUM.getInternalContext
1111
+ ? !!window.DD_RUM.getInternalContext()
1112
+ : false
1113
+ const rumSamplingRate = window.DD_RUM && window.DD_RUM.getInitConfiguration
1114
+ ? window.DD_RUM.getInitConfiguration().sessionSampleRate
1115
+ : null
1116
+ return { isRumInstrumented, isRumActive, rumSamplingRate }
1117
+ })
1118
+ if (isRumInstrumented && rumSamplingRate < 100 && !isRumActive) {
1119
+ log.debug("RUM was detected on the page, but it isn't active because the sampling rate is below 100%")
1120
+ }
1121
+
1122
+ if (isRumActive) {
1123
+ testPageGotoCh.publish({
1124
+ isRumActive,
1125
+ page,
1126
+ })
1127
+ }
1128
+ }
1129
+ } catch (e) {
1130
+ // ignore errors such as redirects, context destroyed, etc
1131
+ log.error('goto hook error', e)
1132
+ }
1133
+
1134
+ return response
1135
+ })
1136
+
1137
+ return pagePackage
1138
+ })
1139
+
1140
+ // Only in worker
1141
+ addHook({
1142
+ name: 'playwright',
1143
+ file: 'lib/worker/workerMain.js',
1144
+ versions: ['>=1.38.0'],
1145
+ }, (workerPackage) => {
1146
+ // we assume there's only a test running at a time
1147
+ let steps = []
1148
+ const stepInfoByStepId = {}
1149
+
1150
+ shimmer.wrap(workerPackage.WorkerMain.prototype, '_runTest', _runTest => async function (test) {
1151
+ if (test.expectedStatus === 'skipped') {
1152
+ return _runTest.apply(this, arguments)
1153
+ }
1154
+ steps = []
1155
+
1156
+ const {
1157
+ _requireFile: testSuiteAbsolutePath,
1158
+ location: {
1159
+ file: testSourceFileAbsolutePath,
1160
+ line: testSourceLine,
1161
+ },
1162
+ } = test
1163
+ let res
1164
+
1165
+ let testInfo
1166
+ const testName = getTestFullname(test)
1167
+ const browserName = this._project.project.name
1168
+
1169
+ // If test events are created in the worker process I need to stop creating it in the main process
1170
+ // Probably yet another test worker exporter is needed in addition to the ones for mocha, jest and cucumber
1171
+ // it's probably hard to tell that's a playwright worker though, as I don't think there is a specific env variable
1172
+ const testCtx = {
1173
+ testName,
1174
+ testSuiteAbsolutePath,
1175
+ testSourceFileAbsolutePath,
1176
+ testSourceLine,
1177
+ browserName,
1178
+ }
1179
+ testToCtx.set(test, testCtx)
1180
+ // TODO - In the future we may need to implement a mechanism to send test properties
1181
+ // to the worker process before _runTest is called
1182
+ testStartCh.runStores(testCtx, () => {
1183
+ let existAfterEachHook = false
1184
+
1185
+ // We try to find an existing afterEach hook with _ddHook to avoid adding a new one
1186
+ for (const hook of test.parent._hooks) {
1187
+ if (hook.type === 'afterEach' && hook._ddHook) {
1188
+ existAfterEachHook = true
1189
+ break
1190
+ }
1191
+ }
1192
+
1193
+ // In cases where there is no afterEach hook with _ddHook, we need to add one
1194
+ if (!existAfterEachHook) {
1195
+ test.parent._hooks.push({
1196
+ type: 'afterEach',
1197
+ fn: async function ({ page }) {
1198
+ try {
1199
+ if (page) {
1200
+ const isRumActive = await page.evaluate(() => {
1201
+ if (window.DD_RUM && window.DD_RUM.stopSession) {
1202
+ window.DD_RUM.stopSession()
1203
+ return true
1204
+ }
1205
+ return false
1206
+ })
1207
+
1208
+ if (isRumActive) {
1209
+ // Give some time RUM to flush data, similar to what we do in selenium
1210
+ await new Promise(resolve => setTimeout(resolve, RUM_FLUSH_WAIT_TIME))
1211
+ const url = page.url()
1212
+ if (url) {
1213
+ const domain = new URL(url).hostname
1214
+ await page.context().addCookies([{
1215
+ name: 'datadog-ci-visibility-test-execution-id',
1216
+ value: '',
1217
+ domain,
1218
+ path: '/',
1219
+ }])
1220
+ } else {
1221
+ log.error('RUM is active but page.url() is not available')
1222
+ }
1223
+ }
1224
+ }
1225
+ } catch (e) {
1226
+ // ignore errors
1227
+ log.error('afterEach hook error', e)
1228
+ }
1229
+ },
1230
+ title: 'afterEach hook',
1231
+ _ddHook: true,
1232
+ })
1233
+ }
1234
+
1235
+ res = _runTest.apply(this, arguments)
1236
+
1237
+ testInfo = this._currentTest
1238
+ })
1239
+ await res
1240
+
1241
+ const { status, error, annotations, retry, testId } = testInfo
1242
+
1243
+ // testInfo.errors could be better than "error",
1244
+ // which will only include timeout error (even though the test failed because of a different error)
1245
+
1246
+ let annotationTags
1247
+ if (annotations.length) {
1248
+ annotationTags = parseAnnotations(annotations)
1249
+ }
1250
+
1251
+ let onDone
1252
+
1253
+ const flushPromise = new Promise(resolve => {
1254
+ onDone = resolve
1255
+ })
1256
+
1257
+ // Wait for ddProperties to be received and processed
1258
+ // Create a promise that will be resolved when the properties are received
1259
+ const ddPropertiesPromise = new Promise(resolve => {
1260
+ const messageHandler = ({ type, testId, properties }) => {
1261
+ if (type === 'ddProperties' && testId === test.id) {
1262
+ // Apply the properties to the test object
1263
+ if (properties) {
1264
+ Object.assign(test, properties)
1265
+ }
1266
+ process.removeListener('message', messageHandler)
1267
+ resolve()
1268
+ }
1269
+ }
1270
+
1271
+ // Add the listener
1272
+ process.on('message', messageHandler)
1273
+ })
1274
+
1275
+ // Wait for the properties to be received
1276
+ await ddPropertiesPromise
1277
+
1278
+ testFinishCh.publish({
1279
+ testStatus: STATUS_TO_TEST_STATUS[status],
1280
+ steps: steps.filter(step => step.testId === testId),
1281
+ error,
1282
+ extraTags: annotationTags,
1283
+ isNew: test._ddIsNew,
1284
+ isRetry: retry > 0,
1285
+ isEfdRetry: test._ddIsEfdRetry,
1286
+ isAttemptToFix: test._ddIsAttemptToFix,
1287
+ isDisabled: test._ddIsDisabled,
1288
+ isQuarantined: test._ddIsQuarantined,
1289
+ isAttemptToFixRetry: test._ddIsAttemptToFixRetry,
1290
+ hasFailedAllRetries: test._ddHasFailedAllRetries,
1291
+ hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
1292
+ hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
1293
+ isAtrRetry: test._ddIsAtrRetry,
1294
+ isModified: test._ddIsModified,
1295
+ onDone,
1296
+ ...testCtx.currentStore,
1297
+ })
1298
+
1299
+ await flushPromise
1300
+
1301
+ return res
1302
+ })
1303
+
1304
+ // We reproduce what happens in `Dispatcher#_onStepBegin` and `Dispatcher#_onStepEnd`,
1305
+ // since `startTime` and `duration` are not available directly in the worker process
1306
+ shimmer.wrap(workerPackage.WorkerMain.prototype, 'dispatchEvent', dispatchEvent => function (event, payload) {
1307
+ if (event === 'stepBegin') {
1308
+ stepInfoByStepId[payload.stepId] = {
1309
+ startTime: payload.wallTime,
1310
+ title: payload.title,
1311
+ testId: payload.testId,
1312
+ }
1313
+ } else if (event === 'stepEnd') {
1314
+ const stepInfo = stepInfoByStepId[payload.stepId]
1315
+ delete stepInfoByStepId[payload.stepId]
1316
+ steps.push({
1317
+ testId: stepInfo.testId,
1318
+ startTime: new Date(stepInfo.startTime),
1319
+ title: stepInfo.title,
1320
+ duration: payload.wallTime - stepInfo.startTime,
1321
+ error: payload.error,
1322
+ })
1323
+ }
1324
+ return dispatchEvent.apply(this, arguments)
1325
+ })
1326
+
1327
+ return workerPackage
1328
+ })
1329
+
1330
+ function generateSummaryWrapper (generateSummary) {
1331
+ return function () {
1332
+ for (const test of this.suite.allTests()) {
1333
+ // https://github.com/microsoft/playwright/blob/bf92ffecff6f30a292b53430dbaee0207e0c61ad/packages/playwright/src/reporters/base.ts#L279
1334
+ const didNotRun = test.outcome() === 'skipped' &&
1335
+ (!test.results.length || test.expectedStatus !== 'skipped')
1336
+ if (didNotRun) {
1337
+ const {
1338
+ _requireFile: testSuiteAbsolutePath,
1339
+ location: {
1340
+ file: testSourceFileAbsolutePath,
1341
+ line: testSourceLine,
1342
+ },
1343
+ _ddIsNew: isNew,
1344
+ _ddIsDisabled: isDisabled,
1345
+ _ddIsModified: isModified,
1346
+ _ddIsQuarantined: isQuarantined,
1347
+ } = test
1348
+ const browserName = getBrowserNameFromProjects(sessionProjects, test)
1349
+
1350
+ testSkipCh.publish({
1351
+ testName: getTestFullname(test),
1352
+ testSuiteAbsolutePath,
1353
+ testSourceFileAbsolutePath,
1354
+ testSourceLine,
1355
+ browserName,
1356
+ isNew,
1357
+ isDisabled,
1358
+ isModified,
1359
+ isQuarantined,
1360
+ })
1361
+ }
1362
+ }
1363
+ return generateSummary.apply(this, arguments)
1364
+ }
1365
+ }
1366
+
1367
+ // If a playwright project B has a dependency on project A,
1368
+ // and project A fails, the tests in project B will not run.
1369
+ // This hook is used to report tests that did not run as skipped.
1370
+ // Note: this is different from tests skipped via test.skip() or test.fixme()
1371
+ addHook({
1372
+ name: 'playwright',
1373
+ file: 'lib/reporters/base.js',
1374
+ versions: ['>=1.38.0'],
1375
+ }, (reportersPackage) => {
1376
+ // v1.50.0 changed the name of the base reporter from BaseReporter to TerminalReporter
1377
+ if (reportersPackage.TerminalReporter) {
1378
+ shimmer.wrap(reportersPackage.TerminalReporter.prototype, 'generateSummary', generateSummaryWrapper)
1379
+ } else if (reportersPackage.BaseReporter) {
1380
+ shimmer.wrap(reportersPackage.BaseReporter.prototype, 'generateSummary', generateSummaryWrapper)
1381
+ }
1382
+ return reportersPackage
1383
+ })