@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,1202 @@
1
+ 'use strict'
2
+
3
+ const path = require('path')
4
+ const fs = require('fs')
5
+ const { URL } = require('url')
6
+ const log = require('../../log')
7
+ const { getEnvironmentVariable } = require('../../config/helper')
8
+ const satisfies = require('../../../../../vendor/dist/semifies')
9
+
10
+ const istanbul = require('../../../../../vendor/dist/istanbul-lib-coverage')
11
+ const ignore = require('../../../../../vendor/dist/ignore')
12
+
13
+ const id = require('../../id')
14
+ const {
15
+ incrementCountMetric,
16
+ TELEMETRY_GIT_COMMIT_SHA_DISCREPANCY,
17
+ TELEMETRY_GIT_SHA_MATCH,
18
+ } = require('../../ci-visibility/telemetry')
19
+
20
+ const { SPAN_TYPE, RESOURCE_NAME, SAMPLING_PRIORITY } = require('../../../../../ext/tags')
21
+ const { SAMPLING_RULE_DECISION } = require('../../constants')
22
+ const { AUTO_KEEP } = require('../../../../../ext/priority')
23
+ const { version: ddTraceVersion } = require('../../../../../package.json')
24
+ const {
25
+ GIT_BRANCH,
26
+ GIT_COMMIT_SHA,
27
+ GIT_REPOSITORY_URL,
28
+ GIT_TAG,
29
+ GIT_COMMIT_AUTHOR_EMAIL,
30
+ GIT_COMMIT_AUTHOR_NAME,
31
+ GIT_COMMIT_MESSAGE,
32
+ CI_WORKSPACE_PATH,
33
+ CI_PIPELINE_URL,
34
+ CI_JOB_NAME,
35
+ GIT_COMMIT_HEAD_SHA,
36
+ } = require('./tags')
37
+ const { getRuntimeAndOSMetadata } = require('./env')
38
+ const { getCIMetadata } = require('./ci')
39
+ const { getUserProviderGitMetadata, validateGitRepositoryUrl, validateGitCommitSha } = require('./user-provided-git')
40
+ const {
41
+ getGitMetadata,
42
+ getGitInformationDiscrepancy,
43
+ getGitDiff,
44
+ getGitRemoteName,
45
+ getSourceBranch,
46
+ checkAndFetchBranch,
47
+ getLocalBranches,
48
+ getMergeBase,
49
+ getCounts,
50
+ } = require('./git')
51
+
52
+ /**
53
+ * JSDoc types for test environment metadata helpers.
54
+ *
55
+ * @typedef {{ service?: string, isServiceUserProvided?: boolean }} TestEnvironmentConfig
56
+ * @typedef {Record<string, string|number|undefined>} TestEnvironmentMetadata
57
+ */
58
+
59
+ // session tags
60
+ const TEST_SESSION_NAME = 'test_session.name'
61
+
62
+ const TEST_FRAMEWORK = 'test.framework'
63
+ const TEST_FRAMEWORK_VERSION = 'test.framework_version'
64
+ const TEST_TYPE = 'test.type'
65
+ const TEST_NAME = 'test.name'
66
+ const TEST_SUITE = 'test.suite'
67
+ const TEST_STATUS = 'test.status'
68
+ const TEST_FINAL_STATUS = 'test.final_status'
69
+ const TEST_PARAMETERS = 'test.parameters'
70
+ const TEST_SKIP_REASON = 'test.skip_reason'
71
+ const TEST_IS_RUM_ACTIVE = 'test.is_rum_active'
72
+ const TEST_CODE_OWNERS = 'test.codeowners'
73
+ const TEST_SOURCE_FILE = 'test.source.file'
74
+ const TEST_SOURCE_START = 'test.source.start'
75
+ const LIBRARY_VERSION = 'library_version'
76
+ const TEST_COMMAND = 'test.command'
77
+ const TEST_MODULE = 'test.module'
78
+ const TEST_SESSION_ID = 'test_session_id'
79
+ const TEST_MODULE_ID = 'test_module_id'
80
+ const TEST_SUITE_ID = 'test_suite_id'
81
+ const TEST_TOOLCHAIN = 'test.toolchain'
82
+ const TEST_SKIPPED_BY_ITR = 'test.skipped_by_itr'
83
+ // Early flake detection
84
+ const TEST_IS_NEW = 'test.is_new'
85
+ const TEST_IS_RETRY = 'test.is_retry'
86
+ const TEST_EARLY_FLAKE_ENABLED = 'test.early_flake.enabled'
87
+ const TEST_EARLY_FLAKE_ABORT_REASON = 'test.early_flake.abort_reason'
88
+ const TEST_RETRY_REASON = 'test.retry_reason'
89
+ const TEST_HAS_FAILED_ALL_RETRIES = 'test.has_failed_all_retries'
90
+ const TEST_IS_MODIFIED = 'test.is_modified'
91
+ const CI_APP_ORIGIN = 'ciapp-test'
92
+
93
+ const JEST_TEST_RUNNER = 'test.jest.test_runner'
94
+ const JEST_DISPLAY_NAME = 'test.jest.display_name'
95
+
96
+ const VITEST_POOL = 'test.vitest.pool'
97
+
98
+ const CUCUMBER_IS_PARALLEL = 'test.cucumber.is_parallel'
99
+ const MOCHA_IS_PARALLEL = 'test.mocha.is_parallel'
100
+
101
+ const TEST_ITR_TESTS_SKIPPED = '_dd.ci.itr.tests_skipped'
102
+ const TEST_ITR_SKIPPING_ENABLED = 'test.itr.tests_skipping.enabled'
103
+ const TEST_ITR_SKIPPING_TYPE = 'test.itr.tests_skipping.type'
104
+ const TEST_ITR_SKIPPING_COUNT = 'test.itr.tests_skipping.count'
105
+ const TEST_CODE_COVERAGE_ENABLED = 'test.code_coverage.enabled'
106
+ const TEST_ITR_UNSKIPPABLE = 'test.itr.unskippable'
107
+ const TEST_ITR_FORCED_RUN = 'test.itr.forced_run'
108
+ const ITR_CORRELATION_ID = 'itr_correlation_id'
109
+
110
+ const TEST_CODE_COVERAGE_LINES_PCT = 'test.code_coverage.lines_pct'
111
+
112
+ // selenium tags
113
+ const TEST_BROWSER_DRIVER = 'test.browser.driver'
114
+ const TEST_BROWSER_DRIVER_VERSION = 'test.browser.driver_version'
115
+ const TEST_BROWSER_NAME = 'test.browser.name'
116
+ const TEST_BROWSER_VERSION = 'test.browser.version'
117
+
118
+ // jest worker variables
119
+ const JEST_WORKER_TRACE_PAYLOAD_CODE = 60
120
+ const JEST_WORKER_COVERAGE_PAYLOAD_CODE = 61
121
+ const JEST_WORKER_LOGS_PAYLOAD_CODE = 62
122
+ const JEST_WORKER_TELEMETRY_PAYLOAD_CODE = 63
123
+
124
+ // cucumber worker variables
125
+ const CUCUMBER_WORKER_TRACE_PAYLOAD_CODE = 70
126
+
127
+ // mocha worker variables
128
+ const MOCHA_WORKER_TRACE_PAYLOAD_CODE = 80
129
+
130
+ // playwright worker variables
131
+ const PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE = 90
132
+
133
+ // vitest worker variables
134
+ const VITEST_WORKER_TRACE_PAYLOAD_CODE = 100
135
+ const VITEST_WORKER_LOGS_PAYLOAD_CODE = 102
136
+
137
+ const TEST_IS_TEST_FRAMEWORK_WORKER = 'test.is_test_framework_worker'
138
+
139
+ // Library Capabilities Tagging
140
+ const DD_CAPABILITIES_TEST_IMPACT_ANALYSIS = '_dd.library_capabilities.test_impact_analysis'
141
+ const DD_CAPABILITIES_EARLY_FLAKE_DETECTION = '_dd.library_capabilities.early_flake_detection'
142
+ const DD_CAPABILITIES_AUTO_TEST_RETRIES = '_dd.library_capabilities.auto_test_retries'
143
+ const DD_CAPABILITIES_IMPACTED_TESTS = '_dd.library_capabilities.impacted_tests'
144
+ const DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE = '_dd.library_capabilities.test_management.quarantine'
145
+ const DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE = '_dd.library_capabilities.test_management.disable'
146
+ const DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX = '_dd.library_capabilities.test_management.attempt_to_fix'
147
+ const DD_CAPABILITIES_FAILED_TEST_REPLAY = '_dd.library_capabilities.failed_test_replay'
148
+
149
+ // Library configuration request error tag
150
+ const DD_CI_LIBRARY_CONFIGURATION_ERROR = '_dd.ci.library_configuration_error'
151
+
152
+ const UNSUPPORTED_TIA_FRAMEWORKS = new Set(['playwright', 'vitest'])
153
+ const UNSUPPORTED_TIA_FRAMEWORKS_PARALLEL_MODE = new Set(['cucumber', 'mocha'])
154
+ const MINIMUM_FRAMEWORK_VERSION_FOR_EFD = {
155
+ playwright: '>=1.38.0',
156
+ }
157
+ const MINIMUM_FRAMEWORK_VERSION_FOR_IMPACTED_TESTS = {
158
+ playwright: '>=1.38.0',
159
+ }
160
+ const MINIMUM_FRAMEWORK_VERSION_FOR_QUARANTINE = {
161
+ playwright: '>=1.38.0',
162
+ }
163
+ const MINIMUM_FRAMEWORK_VERSION_FOR_DISABLE = {
164
+ playwright: '>=1.38.0',
165
+ }
166
+ const MINIMUM_FRAMEWORK_VERSION_FOR_ATTEMPT_TO_FIX = {
167
+ playwright: '>=1.38.0',
168
+ }
169
+ const MINIMUM_FRAMEWORK_VERSION_FOR_FAILED_TEST_REPLAY = {
170
+ playwright: '>=1.38.0',
171
+ }
172
+
173
+ const UNSUPPORTED_ATTEMPT_TO_FIX_FRAMEWORKS_PARALLEL_MODE = new Set(['mocha'])
174
+ const NOT_SUPPORTED_GRANULARITY_IMPACTED_TESTS_FRAMEWORKS = new Set(['mocha', 'playwright', 'vitest'])
175
+
176
+ const TEST_LEVEL_EVENT_TYPES = [
177
+ 'test',
178
+ 'test_suite_end',
179
+ 'test_module_end',
180
+ 'test_session_end',
181
+ ]
182
+ const TEST_RETRY_REASON_TYPES = {
183
+ efd: 'early_flake_detection',
184
+ atr: 'auto_test_retry',
185
+ atf: 'attempt_to_fix',
186
+ ext: 'external',
187
+ }
188
+
189
+ const DD_TEST_IS_USER_PROVIDED_SERVICE = '_dd.test.is_user_provided_service'
190
+
191
+ // Dynamic instrumentation - Test optimization integration tags
192
+ const DI_ERROR_DEBUG_INFO_CAPTURED = 'error.debug_info_captured'
193
+ const DI_DEBUG_ERROR_PREFIX = '_dd.debug.error'
194
+ const DI_DEBUG_ERROR_SNAPSHOT_ID_SUFFIX = 'snapshot_id'
195
+ const DI_DEBUG_ERROR_FILE_SUFFIX = 'file'
196
+ const DI_DEBUG_ERROR_LINE_SUFFIX = 'line'
197
+
198
+ // Test Management tags
199
+ const TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX = 'test.test_management.is_attempt_to_fix'
200
+ const TEST_MANAGEMENT_IS_DISABLED = 'test.test_management.is_test_disabled'
201
+ const TEST_MANAGEMENT_IS_QUARANTINED = 'test.test_management.is_quarantined'
202
+ const TEST_MANAGEMENT_ENABLED = 'test.test_management.enabled'
203
+ const TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED = 'test.test_management.attempt_to_fix_passed'
204
+
205
+ // Impacted tests
206
+ const POSSIBLE_BASE_BRANCHES = ['main', 'master', 'preprod', 'prod', 'dev', 'development', 'trunk']
207
+ const BASE_LIKE_BRANCH_FILTER = /^(main|master|preprod|prod|dev|development|trunk|release\/.*|hotfix\/.*)$/
208
+
209
+ /**
210
+ * Returns request error tags from a test session span for propagation to child events.
211
+ * @param {{ context: () => { _tags?: Record<string, string> } } | undefined} sessionSpan
212
+ * @returns {Record<string, string>}
213
+ */
214
+ function getSessionRequestErrorTags (sessionSpan) {
215
+ const tags = sessionSpan?.context()._tags
216
+ if (!tags || typeof tags !== 'object') return {}
217
+ if (tags[DD_CI_LIBRARY_CONFIGURATION_ERROR] === 'true') {
218
+ return {
219
+ [DD_CI_LIBRARY_CONFIGURATION_ERROR]: 'true',
220
+ }
221
+ }
222
+ return {}
223
+ }
224
+
225
+ module.exports = {
226
+ TEST_CODE_OWNERS,
227
+ TEST_SESSION_NAME,
228
+ TEST_FRAMEWORK,
229
+ TEST_FRAMEWORK_VERSION,
230
+ JEST_TEST_RUNNER,
231
+ JEST_DISPLAY_NAME,
232
+ VITEST_POOL,
233
+ CUCUMBER_IS_PARALLEL,
234
+ MOCHA_IS_PARALLEL,
235
+ TEST_TYPE,
236
+ TEST_NAME,
237
+ TEST_SUITE,
238
+ TEST_STATUS,
239
+ TEST_FINAL_STATUS,
240
+ TEST_PARAMETERS,
241
+ TEST_SKIP_REASON,
242
+ TEST_IS_RUM_ACTIVE,
243
+ TEST_SOURCE_FILE,
244
+ CI_APP_ORIGIN,
245
+ LIBRARY_VERSION,
246
+ JEST_WORKER_TRACE_PAYLOAD_CODE,
247
+ JEST_WORKER_COVERAGE_PAYLOAD_CODE,
248
+ JEST_WORKER_LOGS_PAYLOAD_CODE,
249
+ JEST_WORKER_TELEMETRY_PAYLOAD_CODE,
250
+ CUCUMBER_WORKER_TRACE_PAYLOAD_CODE,
251
+ MOCHA_WORKER_TRACE_PAYLOAD_CODE,
252
+ PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE,
253
+ VITEST_WORKER_TRACE_PAYLOAD_CODE,
254
+ VITEST_WORKER_LOGS_PAYLOAD_CODE,
255
+ TEST_IS_TEST_FRAMEWORK_WORKER,
256
+ TEST_SOURCE_START,
257
+ TEST_SKIPPED_BY_ITR,
258
+ TEST_IS_NEW,
259
+ TEST_IS_RETRY,
260
+ TEST_EARLY_FLAKE_ENABLED,
261
+ TEST_EARLY_FLAKE_ABORT_REASON,
262
+ TEST_RETRY_REASON,
263
+ TEST_HAS_FAILED_ALL_RETRIES,
264
+ TEST_IS_MODIFIED,
265
+ getTestEnvironmentMetadata,
266
+ getTestParametersString,
267
+ finishAllTraceSpans,
268
+ getTestParentSpan,
269
+ getTestSuitePath,
270
+ getCodeOwnersFileEntries,
271
+ getCodeOwnersForFilename,
272
+ getTestCommonTags,
273
+ getTestSessionCommonTags,
274
+ getTestModuleCommonTags,
275
+ getTestSuiteCommonTags,
276
+ TEST_COMMAND,
277
+ TEST_TOOLCHAIN,
278
+ TEST_SESSION_ID,
279
+ TEST_MODULE_ID,
280
+ TEST_SUITE_ID,
281
+ TEST_ITR_TESTS_SKIPPED,
282
+ TEST_MODULE,
283
+ TEST_ITR_SKIPPING_ENABLED,
284
+ TEST_ITR_SKIPPING_TYPE,
285
+ TEST_ITR_SKIPPING_COUNT,
286
+ TEST_CODE_COVERAGE_ENABLED,
287
+ TEST_CODE_COVERAGE_LINES_PCT,
288
+ TEST_ITR_UNSKIPPABLE,
289
+ TEST_ITR_FORCED_RUN,
290
+ ITR_CORRELATION_ID,
291
+ addIntelligentTestRunnerSpanTags,
292
+ getCoveredFilenamesFromCoverage,
293
+ resetCoverage,
294
+ mergeCoverage,
295
+ fromCoverageMapToCoverage,
296
+ getTestLineStart,
297
+ getTestEndLine,
298
+ removeInvalidMetadata,
299
+ parseAnnotations,
300
+ getIsFaultyEarlyFlakeDetection,
301
+ getEfdRetryCount,
302
+ TEST_BROWSER_DRIVER,
303
+ TEST_BROWSER_DRIVER_VERSION,
304
+ TEST_BROWSER_NAME,
305
+ TEST_BROWSER_VERSION,
306
+ getTestSessionName,
307
+ DD_CAPABILITIES_TEST_IMPACT_ANALYSIS,
308
+ DD_CAPABILITIES_EARLY_FLAKE_DETECTION,
309
+ DD_CAPABILITIES_AUTO_TEST_RETRIES,
310
+ DD_CAPABILITIES_IMPACTED_TESTS,
311
+ DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
312
+ DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
313
+ DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
314
+ DD_CAPABILITIES_FAILED_TEST_REPLAY,
315
+ TEST_LEVEL_EVENT_TYPES,
316
+ TEST_RETRY_REASON_TYPES,
317
+ getNumFromKnownTests,
318
+ getFileAndLineNumberFromError,
319
+ DI_ERROR_DEBUG_INFO_CAPTURED,
320
+ DI_DEBUG_ERROR_PREFIX,
321
+ DI_DEBUG_ERROR_SNAPSHOT_ID_SUFFIX,
322
+ DI_DEBUG_ERROR_FILE_SUFFIX,
323
+ DI_DEBUG_ERROR_LINE_SUFFIX,
324
+ getFormattedError,
325
+ DD_TEST_IS_USER_PROVIDED_SERVICE,
326
+ TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
327
+ TEST_MANAGEMENT_IS_DISABLED,
328
+ TEST_MANAGEMENT_IS_QUARANTINED,
329
+ TEST_MANAGEMENT_ENABLED,
330
+ TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
331
+ getLibraryCapabilitiesTags,
332
+ getSessionRequestErrorTags,
333
+ DD_CI_LIBRARY_CONFIGURATION_ERROR,
334
+ checkShaDiscrepancies,
335
+ getPullRequestDiff,
336
+ getPullRequestBaseBranch,
337
+ getModifiedFilesFromDiff,
338
+ isModifiedTest,
339
+ POSSIBLE_BASE_BRANCHES,
340
+ GIT_COMMIT_SHA,
341
+ GIT_REPOSITORY_URL,
342
+ }
343
+
344
+ // Returns pkg manager and its version, separated by '-', e.g. npm-8.15.0 or yarn-1.22.19
345
+ function getPkgManager () {
346
+ try {
347
+ return getEnvironmentVariable('npm_config_user_agent').split(' ')[0].replace('/', '-')
348
+ } catch {
349
+ return ''
350
+ }
351
+ }
352
+
353
+ function validateUrl (url) {
354
+ try {
355
+ const urlObject = new URL(url)
356
+ return (urlObject.protocol === 'https:' || urlObject.protocol === 'http:')
357
+ } catch {
358
+ return false
359
+ }
360
+ }
361
+
362
+ /**
363
+ * @param {TestEnvironmentMetadata} metadata
364
+ * @returns {TestEnvironmentMetadata}
365
+ */
366
+ function removeInvalidMetadata (metadata) {
367
+ return Object.keys(metadata).reduce((filteredTags, tag) => {
368
+ if (tag === GIT_REPOSITORY_URL && !validateGitRepositoryUrl(metadata[GIT_REPOSITORY_URL])) {
369
+ log.error('Repository URL is not a valid repository URL: %s.', metadata[GIT_REPOSITORY_URL])
370
+ return filteredTags
371
+ }
372
+ if (tag === GIT_COMMIT_SHA && !validateGitCommitSha(metadata[GIT_COMMIT_SHA])) {
373
+ log.error('Git commit SHA must be a full-length git SHA: %s.', metadata[GIT_COMMIT_SHA])
374
+ return filteredTags
375
+ }
376
+ if (tag === CI_PIPELINE_URL && !validateUrl(metadata[CI_PIPELINE_URL])) {
377
+ return filteredTags
378
+ }
379
+ filteredTags[tag] = metadata[tag]
380
+ return filteredTags
381
+ }, {})
382
+ }
383
+
384
+ function checkShaDiscrepancies (ciMetadata, userProvidedGitMetadata) {
385
+ const {
386
+ [GIT_COMMIT_SHA]: ciCommitSHA,
387
+ [GIT_REPOSITORY_URL]: ciRepositoryUrl,
388
+ } = ciMetadata
389
+ const {
390
+ [GIT_COMMIT_SHA]: userProvidedCommitSHA,
391
+ [GIT_REPOSITORY_URL]: userProvidedRepositoryUrl,
392
+ } = userProvidedGitMetadata
393
+ const { gitRepositoryUrl, gitCommitSHA } = getGitInformationDiscrepancy()
394
+
395
+ const checkDiscrepancyAndSendMetrics = (
396
+ valueExpected,
397
+ valueDiscrepant,
398
+ discrepancyType,
399
+ expectedProvider,
400
+ discrepantProvider
401
+ ) => {
402
+ if (valueExpected && valueDiscrepant && valueExpected !== valueDiscrepant) {
403
+ incrementCountMetric(
404
+ TELEMETRY_GIT_COMMIT_SHA_DISCREPANCY,
405
+ {
406
+ type: discrepancyType,
407
+ expected_provider: expectedProvider,
408
+ discrepant_provider: discrepantProvider,
409
+ }
410
+ )
411
+ return true
412
+ }
413
+ return false
414
+ }
415
+
416
+ const checkConfigs = [
417
+ // User provided vs Git metadata
418
+ {
419
+ v1: userProvidedRepositoryUrl,
420
+ v2: gitRepositoryUrl,
421
+ type: 'repository_discrepancy',
422
+ expected: 'user_supplied',
423
+ discrepant: 'git_client',
424
+ },
425
+ {
426
+ v1: userProvidedCommitSHA,
427
+ v2: gitCommitSHA,
428
+ type: 'commit_discrepancy',
429
+ expected: 'user_supplied',
430
+ discrepant: 'git_client',
431
+ },
432
+ // User provided vs CI metadata
433
+ {
434
+ v1: userProvidedRepositoryUrl,
435
+ v2: ciRepositoryUrl,
436
+ type: 'repository_discrepancy',
437
+ expected: 'user_supplied',
438
+ discrepant: 'ci_provider',
439
+ },
440
+ {
441
+ v1: userProvidedCommitSHA,
442
+ v2: ciCommitSHA,
443
+ type: 'commit_discrepancy',
444
+ expected: 'user_supplied',
445
+ discrepant: 'ci_provider',
446
+ },
447
+ // CI metadata vs Git metadata
448
+ {
449
+ v1: ciRepositoryUrl,
450
+ v2: gitRepositoryUrl,
451
+ type: 'repository_discrepancy',
452
+ expected: 'ci_provider',
453
+ discrepant: 'git_client',
454
+ },
455
+ {
456
+ v1: ciCommitSHA,
457
+ v2: gitCommitSHA,
458
+ type: 'commit_discrepancy',
459
+ expected: 'ci_provider',
460
+ discrepant: 'git_client',
461
+ },
462
+ ]
463
+
464
+ let gitCommitShaMatch = true
465
+ for (const checkConfig of checkConfigs) {
466
+ const { v1, v2, type, expected, discrepant } = checkConfig
467
+ const discrepancy = checkDiscrepancyAndSendMetrics(v1, v2, type, expected, discrepant)
468
+ if (discrepancy) {
469
+ gitCommitShaMatch = false
470
+ }
471
+ }
472
+
473
+ incrementCountMetric(
474
+ TELEMETRY_GIT_SHA_MATCH,
475
+ { matched: gitCommitShaMatch }
476
+ )
477
+ }
478
+
479
+ /**
480
+ * Build environment metadata for tests by merging CI, Git, runtime/OS and user-provided metadata.
481
+ *
482
+ * @param {string=} testFramework
483
+ * @param {TestEnvironmentConfig=} config
484
+ * @returns {TestEnvironmentMetadata}
485
+ */
486
+ function getTestEnvironmentMetadata (testFramework, config, shouldSkipGitMetadataExtraction = false) {
487
+ const ciMetadata = getCIMetadata()
488
+ const userProvidedGitMetadata = getUserProviderGitMetadata()
489
+
490
+ let gitMetadata = {}
491
+
492
+ // We don't execute git in test framework workers since the information is in the parent process
493
+ // and git metadata does not affect the execution of the tests
494
+ if (!shouldSkipGitMetadataExtraction) {
495
+ checkShaDiscrepancies(ciMetadata, userProvidedGitMetadata)
496
+
497
+ const {
498
+ [GIT_COMMIT_SHA]: commitSHA,
499
+ [GIT_BRANCH]: branch,
500
+ [GIT_REPOSITORY_URL]: repositoryUrl,
501
+ [GIT_TAG]: tag,
502
+ [GIT_COMMIT_AUTHOR_NAME]: authorName,
503
+ [GIT_COMMIT_AUTHOR_EMAIL]: authorEmail,
504
+ [GIT_COMMIT_MESSAGE]: commitMessage,
505
+ [CI_WORKSPACE_PATH]: ciWorkspacePath,
506
+ [GIT_COMMIT_HEAD_SHA]: headCommitSha,
507
+ } = ciMetadata
508
+ gitMetadata = getGitMetadata({
509
+ commitSHA,
510
+ branch,
511
+ repositoryUrl,
512
+ tag,
513
+ authorName,
514
+ authorEmail,
515
+ commitMessage,
516
+ ciWorkspacePath,
517
+ headCommitSha,
518
+ })
519
+ }
520
+
521
+ /** @type {TestEnvironmentMetadata} */
522
+ const runtimeAndOSMetadata = getRuntimeAndOSMetadata()
523
+
524
+ const metadata = {
525
+ [TEST_FRAMEWORK]: testFramework,
526
+ [DD_TEST_IS_USER_PROVIDED_SERVICE]: (config && config.isServiceUserProvided) ? 'true' : 'false',
527
+ ...gitMetadata,
528
+ ...ciMetadata,
529
+ ...userProvidedGitMetadata,
530
+ ...runtimeAndOSMetadata,
531
+ }
532
+ if (config && config.service) {
533
+ metadata['service.name'] = config.service
534
+ }
535
+ return removeInvalidMetadata(metadata)
536
+ }
537
+
538
+ function getTestParametersString (parametersByTestName, testName) {
539
+ if (!parametersByTestName[testName]) {
540
+ return ''
541
+ }
542
+ try {
543
+ // test is invoked with each parameter set sequencially
544
+ const testParameters = parametersByTestName[testName].shift()
545
+ return JSON.stringify({ arguments: testParameters, metadata: {} })
546
+ } catch {
547
+ // We can't afford to interrupt the test if `testParameters` is not serializable to JSON,
548
+ // so we ignore the test parameters and move on
549
+ return ''
550
+ }
551
+ }
552
+
553
+ function getTestTypeFromFramework (testFramework) {
554
+ if (testFramework === 'playwright' || testFramework === 'cypress') {
555
+ return 'browser'
556
+ }
557
+ return 'test'
558
+ }
559
+
560
+ function finishAllTraceSpans (span) {
561
+ for (const traceSpan of span.context()._trace.started) {
562
+ if (traceSpan !== span) {
563
+ traceSpan.finish()
564
+ }
565
+ }
566
+ }
567
+
568
+ function getTestParentSpan (tracer) {
569
+ return tracer.extract('text_map', {
570
+ 'x-datadog-trace-id': id().toString(10),
571
+ 'x-datadog-parent-id': '0000000000000000',
572
+ })
573
+ }
574
+
575
+ function getTestCommonTags (name, suite, version, testFramework) {
576
+ return {
577
+ [SPAN_TYPE]: 'test',
578
+ [TEST_TYPE]: getTestTypeFromFramework(testFramework),
579
+ [SAMPLING_RULE_DECISION]: 1,
580
+ [SAMPLING_PRIORITY]: AUTO_KEEP,
581
+ [TEST_NAME]: name,
582
+ [TEST_SUITE]: suite,
583
+ [RESOURCE_NAME]: `${suite}.${name}`,
584
+ [TEST_FRAMEWORK_VERSION]: version,
585
+ [LIBRARY_VERSION]: ddTraceVersion,
586
+ }
587
+ }
588
+
589
+ /**
590
+ * We want to make sure that test suites are reported the same way for
591
+ * every OS, so we replace `path.sep` by `/`
592
+ */
593
+ function getTestSuitePath (testSuiteAbsolutePath, sourceRoot) {
594
+ if (!testSuiteAbsolutePath) {
595
+ return sourceRoot
596
+ }
597
+ const testSuitePath = testSuiteAbsolutePath === sourceRoot
598
+ ? testSuiteAbsolutePath
599
+ : path.relative(sourceRoot, testSuiteAbsolutePath)
600
+
601
+ return testSuitePath.replaceAll(path.sep, '/')
602
+ }
603
+
604
+ const POSSIBLE_CODEOWNERS_LOCATIONS = [
605
+ 'CODEOWNERS',
606
+ '.github/CODEOWNERS',
607
+ 'docs/CODEOWNERS',
608
+ '.gitlab/CODEOWNERS',
609
+ ]
610
+
611
+ function readCodeOwners (rootDir) {
612
+ for (const location of POSSIBLE_CODEOWNERS_LOCATIONS) {
613
+ try {
614
+ return fs.readFileSync(path.join(rootDir, location)).toString()
615
+ } catch {
616
+ // retry with next path
617
+ }
618
+ }
619
+ return ''
620
+ }
621
+
622
+ function getCodeOwnersFileEntries (rootDir) {
623
+ let codeOwnersContent
624
+ let usedRootDir = rootDir
625
+ let isTriedCwd = false
626
+
627
+ const processCwd = process.cwd()
628
+
629
+ if (!usedRootDir || usedRootDir === processCwd) {
630
+ usedRootDir = processCwd
631
+ isTriedCwd = true
632
+ }
633
+
634
+ codeOwnersContent = readCodeOwners(usedRootDir)
635
+
636
+ // If we haven't found CODEOWNERS in the provided root dir, we try with process.cwd()
637
+ if (!codeOwnersContent && !isTriedCwd) {
638
+ codeOwnersContent = readCodeOwners(processCwd)
639
+ }
640
+
641
+ if (!codeOwnersContent) {
642
+ return null
643
+ }
644
+
645
+ const entries = []
646
+ const lines = codeOwnersContent.split('\n')
647
+
648
+ for (const line of lines) {
649
+ const [content] = line.split('#')
650
+ const trimmed = content.trim()
651
+ if (trimmed === '') continue
652
+ const [pattern, ...owners] = trimmed.split(/\s+/)
653
+ entries.push({ pattern, owners })
654
+ }
655
+ // Reverse because rules defined last take precedence
656
+ return entries.reverse()
657
+ }
658
+
659
+ const codeOwnersPerFileName = new Map()
660
+
661
+ function getCodeOwnersForFilename (filename, entries) {
662
+ if (!entries) {
663
+ return null
664
+ }
665
+ if (codeOwnersPerFileName.has(filename)) {
666
+ return codeOwnersPerFileName.get(filename)
667
+ }
668
+ for (const entry of entries) {
669
+ try {
670
+ const isResponsible = ignore().add(entry.pattern).ignores(filename)
671
+ if (isResponsible) {
672
+ const codeOwners = JSON.stringify(entry.owners)
673
+ codeOwnersPerFileName.set(filename, codeOwners)
674
+ return codeOwners
675
+ }
676
+ } catch {
677
+ codeOwnersPerFileName.set(filename, null)
678
+ return null
679
+ }
680
+ }
681
+ codeOwnersPerFileName.set(filename, null)
682
+ return null
683
+ }
684
+
685
+ function getTestLevelCommonTags (command, testFrameworkVersion, testFramework) {
686
+ return {
687
+ [TEST_FRAMEWORK_VERSION]: testFrameworkVersion,
688
+ [LIBRARY_VERSION]: ddTraceVersion,
689
+ [TEST_COMMAND]: command,
690
+ [TEST_TYPE]: getTestTypeFromFramework(testFramework),
691
+ }
692
+ }
693
+
694
+ function getTestSessionCommonTags (command, testFrameworkVersion, testFramework) {
695
+ return {
696
+ [SPAN_TYPE]: 'test_session_end',
697
+ [RESOURCE_NAME]: `test_session.${command}`,
698
+ [TEST_MODULE]: testFramework,
699
+ [TEST_TOOLCHAIN]: getPkgManager(),
700
+ ...getTestLevelCommonTags(command, testFrameworkVersion, testFramework),
701
+ }
702
+ }
703
+
704
+ function getTestModuleCommonTags (command, testFrameworkVersion, testFramework) {
705
+ return {
706
+ [SPAN_TYPE]: 'test_module_end',
707
+ [RESOURCE_NAME]: `test_module.${command}`,
708
+ [TEST_MODULE]: testFramework,
709
+ ...getTestLevelCommonTags(command, testFrameworkVersion, testFramework),
710
+ }
711
+ }
712
+
713
+ function getTestSuiteCommonTags (command, testFrameworkVersion, testSuite, testFramework) {
714
+ return {
715
+ [SPAN_TYPE]: 'test_suite_end',
716
+ [RESOURCE_NAME]: `test_suite.${testSuite}`,
717
+ [TEST_MODULE]: testFramework,
718
+ [TEST_SUITE]: testSuite,
719
+ ...getTestLevelCommonTags(command, testFrameworkVersion, testFramework),
720
+ }
721
+ }
722
+
723
+ function addIntelligentTestRunnerSpanTags (
724
+ testSessionSpan,
725
+ testModuleSpan,
726
+ {
727
+ isSuitesSkipped,
728
+ isSuitesSkippingEnabled,
729
+ isCodeCoverageEnabled,
730
+ testCodeCoverageLinesTotal,
731
+ skippingCount,
732
+ skippingType = 'suite',
733
+ hasUnskippableSuites,
734
+ hasForcedToRunSuites,
735
+ }
736
+ ) {
737
+ testSessionSpan.setTag(TEST_ITR_TESTS_SKIPPED, isSuitesSkipped ? 'true' : 'false')
738
+ testSessionSpan.setTag(TEST_ITR_SKIPPING_ENABLED, isSuitesSkippingEnabled ? 'true' : 'false')
739
+ testSessionSpan.setTag(TEST_ITR_SKIPPING_TYPE, skippingType)
740
+ testSessionSpan.setTag(TEST_ITR_SKIPPING_COUNT, skippingCount)
741
+ testSessionSpan.setTag(TEST_CODE_COVERAGE_ENABLED, isCodeCoverageEnabled ? 'true' : 'false')
742
+
743
+ testModuleSpan.setTag(TEST_ITR_TESTS_SKIPPED, isSuitesSkipped ? 'true' : 'false')
744
+ testModuleSpan.setTag(TEST_ITR_SKIPPING_ENABLED, isSuitesSkippingEnabled ? 'true' : 'false')
745
+ testModuleSpan.setTag(TEST_ITR_SKIPPING_TYPE, skippingType)
746
+ testModuleSpan.setTag(TEST_ITR_SKIPPING_COUNT, skippingCount)
747
+ testModuleSpan.setTag(TEST_CODE_COVERAGE_ENABLED, isCodeCoverageEnabled ? 'true' : 'false')
748
+
749
+ if (hasUnskippableSuites) {
750
+ testSessionSpan.setTag(TEST_ITR_UNSKIPPABLE, 'true')
751
+ testModuleSpan.setTag(TEST_ITR_UNSKIPPABLE, 'true')
752
+ }
753
+ if (hasForcedToRunSuites) {
754
+ testSessionSpan.setTag(TEST_ITR_FORCED_RUN, 'true')
755
+ testModuleSpan.setTag(TEST_ITR_FORCED_RUN, 'true')
756
+ }
757
+
758
+ // This will not be reported unless the user has manually added code coverage.
759
+ // This is always the case for Mocha and Cucumber, but not for Jest.
760
+ if (testCodeCoverageLinesTotal !== undefined) {
761
+ testSessionSpan.setTag(TEST_CODE_COVERAGE_LINES_PCT, testCodeCoverageLinesTotal)
762
+ testModuleSpan.setTag(TEST_CODE_COVERAGE_LINES_PCT, testCodeCoverageLinesTotal)
763
+ }
764
+ }
765
+
766
+ function getCoveredFilenamesFromCoverage (coverage) {
767
+ const coverageMap = istanbul.createCoverageMap(coverage)
768
+
769
+ return coverageMap
770
+ .files()
771
+ .filter(filename => {
772
+ const fileCoverage = coverageMap.fileCoverageFor(filename)
773
+ const lineCoverage = fileCoverage.getLineCoverage()
774
+ const isAnyLineExecuted = Object.entries(lineCoverage).some(([, numExecutions]) => !!numExecutions)
775
+
776
+ return isAnyLineExecuted
777
+ })
778
+ }
779
+
780
+ function resetCoverage (coverage) {
781
+ const coverageMap = istanbul.createCoverageMap(coverage)
782
+
783
+ return coverageMap
784
+ .files()
785
+ // eslint-disable-next-line unicorn/no-array-for-each
786
+ .forEach(filename => {
787
+ const fileCoverage = coverageMap.fileCoverageFor(filename)
788
+ fileCoverage.resetHits()
789
+ })
790
+ }
791
+
792
+ function mergeCoverage (coverage, targetCoverage) {
793
+ const coverageMap = istanbul.createCoverageMap(coverage)
794
+ return coverageMap
795
+ .files()
796
+ // eslint-disable-next-line unicorn/no-array-for-each
797
+ .forEach(filename => {
798
+ const fileCoverage = coverageMap.fileCoverageFor(filename)
799
+
800
+ // If the fileCoverage is not there for this filename,
801
+ // we create it to force a merge between the fileCoverages
802
+ // instead of a reference assignment (which would not work if the coverage is reset later on)
803
+ if (!targetCoverage.data[filename]) {
804
+ targetCoverage.addFileCoverage(istanbul.createFileCoverage(filename))
805
+ }
806
+ targetCoverage.addFileCoverage(fileCoverage)
807
+ const targetFileCoverage = targetCoverage.fileCoverageFor(filename)
808
+
809
+ // branches (.b) are copied by reference, so `resetHits` affects the copy, so we need to copy it manually
810
+ for (const [key, value] of Object.entries(targetFileCoverage.data.b)) {
811
+ targetFileCoverage.data.b[key] = [...value]
812
+ }
813
+ })
814
+ }
815
+
816
+ function fromCoverageMapToCoverage (coverageMap) {
817
+ return Object.entries(coverageMap.data).reduce((acc, [filename, fileCoverage]) => {
818
+ acc[filename] = fileCoverage.data
819
+ return acc
820
+ }, {})
821
+ }
822
+
823
+ // Get the start line of a test by inspecting a given error's stack trace
824
+ function getTestLineStart (err, testSuitePath) {
825
+ if (!err.stack) {
826
+ return null
827
+ }
828
+ // From https://github.com/felixge/node-stack-trace/blob/ba06dcdb50d465cd440d84a563836e293b360427/index.js#L40
829
+ const testFileLine = err.stack.split('\n').find(line => line.includes(testSuitePath))
830
+ try {
831
+ const testFileLineMatch = testFileLine.match(/at (?:(.+?)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/)
832
+ return Number.parseInt(testFileLineMatch[3], 10) || null
833
+ } catch {
834
+ return null
835
+ }
836
+ }
837
+
838
+ // Get the end line of a test by inspecting a given function's source code
839
+ function getTestEndLine (testFn, startLine = 0) {
840
+ const source = testFn.toString()
841
+ const lineCount = source.split('\n').length
842
+ return startLine + lineCount - 1
843
+ }
844
+
845
+ /**
846
+ * Gets an object of test tags from an Playwright annotations array.
847
+ * @param {object[]} annotations - Annotations from a Playwright test.
848
+ * @param {string} annotations[].type - Type of annotation. A string of the shape DD_TAGS[$tag_name].
849
+ * @param {string} annotations[].description - Value of the tag.
850
+ */
851
+ function parseAnnotations (annotations) {
852
+ return annotations.reduce((tags, annotation) => {
853
+ if (!annotation?.type) {
854
+ return tags
855
+ }
856
+ const { type, description } = annotation
857
+ if (type.startsWith('DD_TAGS')) {
858
+ const regex = /\[(.*?)\]/
859
+ const match = regex.exec(type)
860
+ let tagValue = ''
861
+ if (match) {
862
+ tagValue = match[1]
863
+ }
864
+ if (tagValue) {
865
+ tags[tagValue] = description
866
+ }
867
+ }
868
+ return tags
869
+ }, {})
870
+ }
871
+
872
+ /**
873
+ * Given a test's first-execution duration (ms) and the slow_test_retries map
874
+ * from the backend, return how many EFD retries to run.
875
+ *
876
+ * Returns 0 when the test is too slow to retry (≥ 5 min).
877
+ *
878
+ * @param {number} durationMs
879
+ * @param {Record<string, number>} slowTestRetries e.g. { '5s': 10, '10s': 5, '30s': 3, '5m': 2 }
880
+ * @returns {number}
881
+ */
882
+ function getEfdRetryCount (durationMs, slowTestRetries) {
883
+ const thresholds = [
884
+ { limitMs: 5 * 1000, key: '5s' },
885
+ { limitMs: 10 * 1000, key: '10s' },
886
+ { limitMs: 30 * 1000, key: '30s' },
887
+ { limitMs: 5 * 60 * 1000, key: '5m' },
888
+ ]
889
+ for (const { limitMs, key } of thresholds) {
890
+ if (durationMs < limitMs) {
891
+ return slowTestRetries[key] ?? 0
892
+ }
893
+ }
894
+ return 0 // ≥ 5 min — abort
895
+ }
896
+
897
+ function getIsFaultyEarlyFlakeDetection (projectSuites, testsBySuiteName, faultyThresholdPercentage) {
898
+ let newSuites = 0
899
+ for (const suite of projectSuites) {
900
+ if (!testsBySuiteName[suite]) {
901
+ newSuites++
902
+ }
903
+ }
904
+ const newSuitesPercentage = (newSuites / projectSuites.length) * 100
905
+
906
+ // The faulty threshold represents a percentage, but we also want to consider
907
+ // smaller projects, where big variations in the % are more likely.
908
+ // This is why we also check the absolute number of new suites.
909
+ return (
910
+ newSuites > faultyThresholdPercentage &&
911
+ newSuitesPercentage > faultyThresholdPercentage
912
+ )
913
+ }
914
+
915
+ function getTestSessionName (config, trimmedCommand, envTags) {
916
+ if (config.ciVisibilityTestSessionName) {
917
+ return config.ciVisibilityTestSessionName
918
+ }
919
+ if (envTags[CI_JOB_NAME]) {
920
+ return `${envTags[CI_JOB_NAME]}-${trimmedCommand}`
921
+ }
922
+ return trimmedCommand
923
+ }
924
+
925
+ // Calculate the number of a tests from the known tests response, which has a shape like:
926
+ // { testModule1: { testSuite1: [test1, test2, test3] }, testModule2: { testSuite2: [test4, test5] } }
927
+ function getNumFromKnownTests (knownTests) {
928
+ if (!knownTests) {
929
+ return 0
930
+ }
931
+
932
+ let totalNumTests = 0
933
+
934
+ for (const testModule of Object.values(knownTests)) {
935
+ for (const testSuite of Object.values(testModule)) {
936
+ totalNumTests += testSuite.length
937
+ }
938
+ }
939
+
940
+ return totalNumTests
941
+ }
942
+
943
+ const DEPENDENCY_FOLDERS = [
944
+ 'node_modules',
945
+ 'node:',
946
+ '.pnpm',
947
+ '.yarn',
948
+ '.pnp',
949
+ ]
950
+
951
+ function getFileAndLineNumberFromError (error, repositoryRoot) {
952
+ // Split the stack trace into individual lines
953
+ const stackLines = error.stack.split('\n')
954
+
955
+ // Remove potential messages on top of the stack that are not frames
956
+ const frames = stackLines.filter(line => line.includes('at ') && line.includes(repositoryRoot))
957
+
958
+ const topRelevantFrameIndex = frames.findIndex(line =>
959
+ line.includes(repositoryRoot) && !DEPENDENCY_FOLDERS.some(pattern => line.includes(pattern))
960
+ )
961
+
962
+ if (topRelevantFrameIndex === -1) {
963
+ return []
964
+ }
965
+
966
+ const topFrame = frames[topRelevantFrameIndex]
967
+ // Regular expression to match the file path, line number, and column number
968
+ const regex = /\s*at\s+(?:.*\()?(.+):(\d+):(\d+)\)?/
969
+ const match = topFrame.match(regex)
970
+
971
+ if (match) {
972
+ const filePath = match[1]
973
+ const lineNumber = Number(match[2])
974
+
975
+ return [filePath, lineNumber, topRelevantFrameIndex]
976
+ }
977
+ return []
978
+ }
979
+
980
+ function getFormattedError (error, repositoryRoot) {
981
+ const newError = new Error(error.message)
982
+ if (error.stack) {
983
+ newError.stack = error.stack.split('\n').filter(line => line.includes(repositoryRoot)).join('\n')
984
+ }
985
+ newError.name = error.name
986
+
987
+ return newError
988
+ }
989
+
990
+ function isTiaSupported (testFramework, isParallel) {
991
+ return !(UNSUPPORTED_TIA_FRAMEWORKS.has(testFramework) ||
992
+ (isParallel && UNSUPPORTED_TIA_FRAMEWORKS_PARALLEL_MODE.has(testFramework)))
993
+ }
994
+
995
+ function isEarlyFlakeDetectionSupported (testFramework, frameworkVersion) {
996
+ return testFramework === 'playwright'
997
+ ? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_EFD[testFramework])
998
+ : true
999
+ }
1000
+
1001
+ function isImpactedTestsSupported (testFramework, frameworkVersion) {
1002
+ return testFramework === 'playwright'
1003
+ ? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_IMPACTED_TESTS[testFramework])
1004
+ : true
1005
+ }
1006
+
1007
+ function isQuarantineSupported (testFramework, frameworkVersion) {
1008
+ return testFramework === 'playwright'
1009
+ ? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_QUARANTINE[testFramework])
1010
+ : true
1011
+ }
1012
+
1013
+ function isDisableSupported (testFramework, frameworkVersion) {
1014
+ return testFramework === 'playwright'
1015
+ ? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_DISABLE[testFramework])
1016
+ : true
1017
+ }
1018
+
1019
+ function isAttemptToFixSupported (testFramework, isParallel, frameworkVersion) {
1020
+ if (testFramework === 'playwright') {
1021
+ return satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_ATTEMPT_TO_FIX[testFramework])
1022
+ }
1023
+
1024
+ return !(isParallel && UNSUPPORTED_ATTEMPT_TO_FIX_FRAMEWORKS_PARALLEL_MODE.has(testFramework))
1025
+ }
1026
+
1027
+ function isFailedTestReplaySupported (testFramework, frameworkVersion) {
1028
+ return testFramework === 'playwright'
1029
+ ? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_FAILED_TEST_REPLAY[testFramework])
1030
+ : true
1031
+ }
1032
+
1033
+ function getLibraryCapabilitiesTags (testFramework, isParallel, frameworkVersion) {
1034
+ return {
1035
+ [DD_CAPABILITIES_TEST_IMPACT_ANALYSIS]: isTiaSupported(testFramework, isParallel)
1036
+ ? '1'
1037
+ : undefined,
1038
+ [DD_CAPABILITIES_EARLY_FLAKE_DETECTION]: isEarlyFlakeDetectionSupported(testFramework, frameworkVersion)
1039
+ ? '1'
1040
+ : undefined,
1041
+ [DD_CAPABILITIES_AUTO_TEST_RETRIES]: '1',
1042
+ [DD_CAPABILITIES_IMPACTED_TESTS]: isImpactedTestsSupported(testFramework, frameworkVersion)
1043
+ ? '1'
1044
+ : undefined,
1045
+ [DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE]: isQuarantineSupported(testFramework, frameworkVersion)
1046
+ ? '1'
1047
+ : undefined,
1048
+ [DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE]: isDisableSupported(testFramework, frameworkVersion)
1049
+ ? '1'
1050
+ : undefined,
1051
+ [DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX]:
1052
+ isAttemptToFixSupported(testFramework, isParallel, frameworkVersion)
1053
+ ? '5'
1054
+ : undefined,
1055
+ [DD_CAPABILITIES_FAILED_TEST_REPLAY]: isFailedTestReplaySupported(testFramework, frameworkVersion)
1056
+ ? '1'
1057
+ : undefined,
1058
+ }
1059
+ }
1060
+
1061
+ function getPullRequestBaseBranch (pullRequestBaseBranch) {
1062
+ const remoteName = getGitRemoteName()
1063
+
1064
+ const sourceBranch = getSourceBranch()
1065
+ // TODO: We will get the default branch name from the backend in the future.
1066
+ const POSSIBLE_DEFAULT_BRANCHES = ['main', 'master']
1067
+
1068
+ const candidateBranches = []
1069
+ if (pullRequestBaseBranch) {
1070
+ checkAndFetchBranch(pullRequestBaseBranch, remoteName)
1071
+ candidateBranches.push(pullRequestBaseBranch)
1072
+ } else {
1073
+ for (const branch of POSSIBLE_BASE_BRANCHES) {
1074
+ checkAndFetchBranch(branch, remoteName)
1075
+ }
1076
+
1077
+ const localBranches = getLocalBranches(remoteName)
1078
+ for (const branch of localBranches) {
1079
+ const shortBranchName = branch.replace(new RegExp(`^${remoteName}/`), '')
1080
+ if (branch !== sourceBranch && BASE_LIKE_BRANCH_FILTER.test(shortBranchName)) {
1081
+ candidateBranches.push(branch)
1082
+ }
1083
+ }
1084
+ }
1085
+
1086
+ if (candidateBranches.length === 1) {
1087
+ return getMergeBase(candidateBranches[0], sourceBranch)
1088
+ }
1089
+
1090
+ const metrics = {}
1091
+ for (const candidate of candidateBranches) {
1092
+ // Find common ancestor
1093
+ const baseSha = getMergeBase(candidate, sourceBranch)
1094
+ if (!baseSha) {
1095
+ continue
1096
+ }
1097
+ // Count commits ahead/behind
1098
+ const counts = getCounts(candidate, sourceBranch)
1099
+ if (!counts) {
1100
+ continue
1101
+ }
1102
+ const behind = counts.behind
1103
+ const ahead = counts.ahead
1104
+ metrics[candidate] = {
1105
+ behind,
1106
+ ahead,
1107
+ baseSha,
1108
+ }
1109
+ }
1110
+
1111
+ function isDefaultBranch (branch) {
1112
+ return POSSIBLE_DEFAULT_BRANCHES.some(defaultBranch =>
1113
+ branch === defaultBranch || branch === `${remoteName}/${defaultBranch}`
1114
+ )
1115
+ }
1116
+
1117
+ if (Object.keys(metrics).length === 0) {
1118
+ return null
1119
+ }
1120
+ // Find branch with smallest "ahead" value, preferring default branch on tie
1121
+ let bestBranch = null
1122
+ let bestScore = Infinity
1123
+ for (const branch of Object.keys(metrics)) {
1124
+ const score = metrics[branch].ahead
1125
+ if (score < bestScore) {
1126
+ bestScore = score
1127
+ bestBranch = branch
1128
+ } else if (score === bestScore && isDefaultBranch(branch)) {
1129
+ bestScore = score
1130
+ bestBranch = branch
1131
+ }
1132
+ }
1133
+ return bestBranch ? metrics[bestBranch].baseSha : null
1134
+ }
1135
+
1136
+ function getPullRequestDiff (baseCommit, targetCommit) {
1137
+ if (!baseCommit) {
1138
+ return
1139
+ }
1140
+ return getGitDiff(baseCommit, targetCommit)
1141
+ }
1142
+
1143
+ function getModifiedFilesFromDiff (diff) {
1144
+ if (!diff) return null
1145
+ const result = {}
1146
+
1147
+ const filesRegex = /^diff --git a\/(?<file>.+) b\/(?<file2>.+)$/g
1148
+ const linesRegex = /^@@ -\d+(,\d+)? \+(?<start>\d+)(,(?<count>\d+))? @@/g
1149
+
1150
+ let currentFile = null
1151
+
1152
+ // Go line by line
1153
+ const lines = diff.split('\n')
1154
+ for (const line of lines) {
1155
+ // Check for new file
1156
+ const fileMatch = filesRegex.exec(line)
1157
+ if (fileMatch && fileMatch.groups.file) {
1158
+ currentFile = fileMatch.groups.file
1159
+ result[currentFile] = []
1160
+ continue
1161
+ }
1162
+
1163
+ // Check for changed lines
1164
+ const lineMatch = linesRegex.exec(line)
1165
+ if (lineMatch && currentFile) {
1166
+ const start = Number(lineMatch.groups.start)
1167
+ const count = lineMatch.groups.count ? Number(lineMatch.groups.count) : 1
1168
+ for (let j = 0; j < count; j++) {
1169
+ result[currentFile].push(start + j)
1170
+ }
1171
+ }
1172
+
1173
+ // Reset regexes to allow re-use
1174
+ filesRegex.lastIndex = 0
1175
+ linesRegex.lastIndex = 0
1176
+ }
1177
+
1178
+ if (Object.keys(result).length === 0) {
1179
+ return null
1180
+ }
1181
+ return result
1182
+ }
1183
+
1184
+ function isModifiedTest (testPath, testStartLine, testEndLine, modifiedFiles, testFramework) {
1185
+ if (modifiedFiles === undefined) {
1186
+ return false
1187
+ }
1188
+
1189
+ const lines = modifiedFiles[testPath]
1190
+
1191
+ if (!lines) {
1192
+ return false
1193
+ }
1194
+
1195
+ // For unsupported frameworks, consider the test modified if any lines were changed
1196
+ if (NOT_SUPPORTED_GRANULARITY_IMPACTED_TESTS_FRAMEWORKS.has(testFramework)) {
1197
+ return lines.length > 0
1198
+ }
1199
+
1200
+ // For supported frameworks, check if the test's line range overlaps with modified lines
1201
+ return lines.some(line => line >= testStartLine && line <= testEndLine)
1202
+ }