qa360 2.3.0 → 2.3.1

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 (507) hide show
  1. package/README.md +155 -262
  2. package/{cli/dist → dist}/commands/ai.js +1 -1
  3. package/{cli/dist → dist}/commands/coverage.js +1 -1
  4. package/{cli/dist → dist}/commands/crawl.js +2 -2
  5. package/{cli/dist → dist}/commands/doctor.js +2 -2
  6. package/{cli/dist → dist}/commands/explain.js +2 -2
  7. package/{cli/dist → dist}/commands/flakiness.js +1 -1
  8. package/{cli/dist → dist}/commands/generate.js +1 -1
  9. package/{cli/dist → dist}/commands/history.js +1 -1
  10. package/{cli/dist → dist}/commands/monitor.js +3 -3
  11. package/{cli/dist → dist}/commands/ollama.js +1 -1
  12. package/{cli/dist → dist}/commands/pack.js +2 -2
  13. package/{cli/dist → dist}/commands/regression.js +1 -1
  14. package/{cli/dist → dist}/commands/repair.js +1 -1
  15. package/{cli/dist → dist}/commands/retry.js +1 -1
  16. package/{cli/dist → dist}/commands/run.d.ts +1 -1
  17. package/{cli/dist → dist}/commands/run.js +1 -1
  18. package/{cli/dist → dist}/commands/secrets.js +1 -1
  19. package/{cli/dist → dist}/commands/serve.js +1 -1
  20. package/{cli/dist → dist}/commands/slo.js +1 -1
  21. package/{cli/dist → dist}/commands/verify.js +1 -1
  22. package/{cli/dist → dist}/core/adapters/playwright-native-api.d.ts +2 -0
  23. package/{cli/dist → dist}/core/adapters/playwright-native-api.js +20 -1
  24. package/{cli/dist → dist}/core/adapters/playwright-ui.d.ts +21 -0
  25. package/dist/core/adapters/playwright-ui.js +2050 -0
  26. package/{cli/dist → dist}/core/ai/ollama-provider.js +15 -3
  27. package/{cli/dist → dist}/core/artifacts/ui-artifacts.js +24 -4
  28. package/dist/core/auth/backup-codes-provider.d.ts +91 -0
  29. package/dist/core/auth/backup-codes-provider.js +215 -0
  30. package/{cli/dist → dist}/core/auth/basic-auth-provider.d.ts +6 -0
  31. package/{cli/dist → dist}/core/auth/basic-auth-provider.js +24 -6
  32. package/dist/core/auth/digest-auth-provider.d.ts +116 -0
  33. package/dist/core/auth/digest-auth-provider.js +244 -0
  34. package/dist/core/auth/hcaptcha-handler.d.ts +103 -0
  35. package/dist/core/auth/hcaptcha-handler.js +288 -0
  36. package/{cli/dist → dist}/core/auth/index.d.ts +81 -4
  37. package/{cli/dist → dist}/core/auth/index.js +15 -1
  38. package/dist/core/auth/oauth-handler.d.ts +408 -0
  39. package/dist/core/auth/oauth-handler.js +636 -0
  40. package/{cli/dist → dist}/core/auth/oauth2-provider.d.ts +9 -0
  41. package/dist/core/auth/oauth2-provider.js +227 -0
  42. package/dist/core/auth/otp-provider.d.ts +93 -0
  43. package/dist/core/auth/otp-provider.js +288 -0
  44. package/dist/core/auth/recaptcha-handler.d.ts +119 -0
  45. package/dist/core/auth/recaptcha-handler.js +301 -0
  46. package/dist/core/auth/remember-me-handler.d.ts +142 -0
  47. package/dist/core/auth/remember-me-handler.js +255 -0
  48. package/dist/core/auth/saml-handler.d.ts +173 -0
  49. package/dist/core/auth/saml-handler.js +364 -0
  50. package/dist/core/auth/webauthn-handler.d.ts +182 -0
  51. package/dist/core/auth/webauthn-handler.js +310 -0
  52. package/dist/core/crawler/advanced-interactions.d.ts +342 -0
  53. package/dist/core/crawler/advanced-interactions.js +1069 -0
  54. package/dist/core/crawler/blob-url-download-handler.d.ts +145 -0
  55. package/dist/core/crawler/blob-url-download-handler.js +392 -0
  56. package/dist/core/crawler/consent-handler.d.ts +49 -0
  57. package/dist/core/crawler/consent-handler.js +258 -0
  58. package/dist/core/crawler/cookie-manager.d.ts +166 -0
  59. package/dist/core/crawler/cookie-manager.js +353 -0
  60. package/dist/core/crawler/coop-coep-handler.d.ts +136 -0
  61. package/dist/core/crawler/coop-coep-handler.js +338 -0
  62. package/dist/core/crawler/csp-handler.d.ts +151 -0
  63. package/dist/core/crawler/csp-handler.js +415 -0
  64. package/dist/core/crawler/download-handler.d.ts +155 -0
  65. package/dist/core/crawler/download-handler.js +370 -0
  66. package/dist/core/crawler/email-testing-handler.d.ts +214 -0
  67. package/dist/core/crawler/email-testing-handler.js +398 -0
  68. package/dist/core/crawler/error-tracking-handler.d.ts +177 -0
  69. package/dist/core/crawler/error-tracking-handler.js +378 -0
  70. package/dist/core/crawler/form-handler.d.ts +100 -0
  71. package/dist/core/crawler/form-handler.js +465 -0
  72. package/dist/core/crawler/framework-wait-handler.d.ts +96 -0
  73. package/dist/core/crawler/framework-wait-handler.js +464 -0
  74. package/dist/core/crawler/geolocation-handler.d.ts +112 -0
  75. package/dist/core/crawler/geolocation-handler.js +276 -0
  76. package/dist/core/crawler/index.d.ts +78 -0
  77. package/{cli/dist → dist}/core/crawler/index.js +74 -1
  78. package/dist/core/crawler/intelligent-selector-generator.d.ts +164 -0
  79. package/dist/core/crawler/intelligent-selector-generator.js +612 -0
  80. package/{cli/dist → dist}/core/crawler/journey-generator.js +44 -1
  81. package/{cli/dist → dist}/core/crawler/page-analyzer.d.ts +16 -1
  82. package/{cli/dist → dist}/core/crawler/page-analyzer.js +469 -17
  83. package/dist/core/crawler/permissions-handler.d.ts +112 -0
  84. package/dist/core/crawler/permissions-handler.js +236 -0
  85. package/dist/core/crawler/permissions-policy-handler.d.ts +113 -0
  86. package/dist/core/crawler/permissions-policy-handler.js +402 -0
  87. package/dist/core/crawler/presets.d.ts +100 -0
  88. package/dist/core/crawler/presets.js +887 -0
  89. package/dist/core/crawler/repl-debug-handler.d.ts +105 -0
  90. package/dist/core/crawler/repl-debug-handler.js +552 -0
  91. package/dist/core/crawler/reporting-api-handler.d.ts +212 -0
  92. package/dist/core/crawler/reporting-api-handler.js +344 -0
  93. package/{cli/dist → dist}/core/crawler/selector-generator.d.ts +9 -0
  94. package/{cli/dist → dist}/core/crawler/selector-generator.js +99 -23
  95. package/dist/core/crawler/site-profiler.d.ts +89 -0
  96. package/dist/core/crawler/site-profiler.js +290 -0
  97. package/dist/core/crawler/sourcemaps-handler.d.ts +144 -0
  98. package/dist/core/crawler/sourcemaps-handler.js +420 -0
  99. package/dist/core/crawler/stacked-modals-handler.d.ts +118 -0
  100. package/dist/core/crawler/stacked-modals-handler.js +429 -0
  101. package/dist/core/crawler/trusted-types-handler.d.ts +149 -0
  102. package/dist/core/crawler/trusted-types-handler.js +413 -0
  103. package/{cli/dist → dist}/core/crawler/types.d.ts +68 -2
  104. package/dist/core/crawler/wait-strategies.d.ts +108 -0
  105. package/dist/core/crawler/wait-strategies.js +399 -0
  106. package/dist/core/fixtures/factories.d.ts +180 -0
  107. package/dist/core/fixtures/factories.js +279 -0
  108. package/dist/core/fixtures/index.d.ts +6 -0
  109. package/dist/core/fixtures/index.js +6 -0
  110. package/{cli/dist → dist}/core/generation/crawler-pack-generator.d.ts +13 -3
  111. package/dist/core/generation/crawler-pack-generator.js +232 -0
  112. package/{cli/dist → dist}/core/generation/index.d.ts +2 -0
  113. package/{cli/dist → dist}/core/generation/index.js +2 -0
  114. package/{cli/dist → dist}/core/index.d.ts +2 -0
  115. package/{cli/dist → dist}/core/index.js +4 -0
  116. package/dist/core/network/index.d.ts +7 -0
  117. package/dist/core/network/index.js +7 -0
  118. package/dist/core/network/network-manager.d.ts +237 -0
  119. package/dist/core/network/network-manager.js +343 -0
  120. package/dist/core/network/network-simulator.d.ts +158 -0
  121. package/dist/core/network/network-simulator.js +261 -0
  122. package/{cli/dist → dist}/core/pack/validator.js +2 -2
  123. package/{cli/dist → dist}/core/pack-v2/migrator.d.ts +5 -0
  124. package/{cli/dist → dist}/core/pack-v2/migrator.js +81 -6
  125. package/{cli/dist → dist}/core/pack-v2/validator.js +4 -3
  126. package/{cli/dist → dist}/core/pom/base-page.js +1 -1
  127. package/{cli/dist → dist}/core/pom/loader.js +1 -1
  128. package/dist/core/reporting/index.d.ts +9 -0
  129. package/dist/core/reporting/index.js +10 -0
  130. package/dist/core/reporting/junit-reporter.d.ts +114 -0
  131. package/dist/core/reporting/junit-reporter.js +306 -0
  132. package/{cli/dist → dist}/core/runner/e2e-helpers.d.ts +1 -1
  133. package/{cli/dist → dist}/core/runner/e2e-helpers.js +2 -2
  134. package/{cli/dist → dist}/core/runner/phase3-runner.d.ts +3 -0
  135. package/{cli/dist → dist}/core/runner/phase3-runner.js +45 -14
  136. package/dist/core/sharding/test-sharding.d.ts +137 -0
  137. package/dist/core/sharding/test-sharding.js +233 -0
  138. package/dist/core/storage/cookie-manager.d.ts +160 -0
  139. package/dist/core/storage/cookie-manager.js +268 -0
  140. package/dist/core/storage/index.d.ts +7 -0
  141. package/dist/core/storage/index.js +7 -0
  142. package/dist/core/storage/storage-helpers.d.ts +138 -0
  143. package/dist/core/storage/storage-helpers.js +315 -0
  144. package/dist/core/test-helpers/index.d.ts +6 -0
  145. package/dist/core/test-helpers/index.js +6 -0
  146. package/dist/core/test-helpers/state-reset.d.ts +119 -0
  147. package/dist/core/test-helpers/state-reset.js +234 -0
  148. package/{cli/dist → dist}/core/types/pack-v1.d.ts +15 -2
  149. package/{cli/dist → dist}/core/types/pack-v2.d.ts +1 -1
  150. package/dist/core/upload/chunked-uploader.d.ts +150 -0
  151. package/dist/core/upload/chunked-uploader.js +289 -0
  152. package/dist/core/upload/index.d.ts +11 -0
  153. package/dist/core/upload/index.js +8 -0
  154. package/dist/core/upload/mime-validator.d.ts +119 -0
  155. package/dist/core/upload/mime-validator.js +373 -0
  156. package/dist/core/upload/presigned-uploader.d.ts +118 -0
  157. package/dist/core/upload/presigned-uploader.js +274 -0
  158. package/dist/core/utils/device-emulation.d.ts +194 -0
  159. package/dist/core/utils/device-emulation.js +380 -0
  160. package/dist/core/utils/index.d.ts +8 -0
  161. package/dist/core/utils/index.js +8 -0
  162. package/dist/core/utils/retry.d.ts +145 -0
  163. package/dist/core/utils/retry.js +242 -0
  164. package/dist/core/utils/smart-wait.d.ts +133 -0
  165. package/dist/core/utils/smart-wait.js +417 -0
  166. package/dist/core/visual/index.d.ts +7 -0
  167. package/dist/core/visual/index.js +7 -0
  168. package/dist/core/visual/pixel-diff.d.ts +87 -0
  169. package/dist/core/visual/pixel-diff.js +213 -0
  170. package/dist/core/visual/screenshot-helper.d.ts +130 -0
  171. package/dist/core/visual/screenshot-helper.js +223 -0
  172. package/{cli/dist → dist}/utils/config.d.ts +1 -1
  173. package/examples/README.md +160 -0
  174. package/examples/accessibility.yml +48 -0
  175. package/examples/api-basic.yml +27 -0
  176. package/examples/complete.yml +146 -0
  177. package/examples/crawler.yml +38 -0
  178. package/examples/fullstack.yml +78 -0
  179. package/examples/security.yml +58 -0
  180. package/examples/ui-advanced.yml +49 -0
  181. package/examples/ui-basic.yml +24 -0
  182. package/package.json +33 -67
  183. package/CHANGELOG.md +0 -330
  184. package/CONTRIBUTING.md +0 -273
  185. package/QUICK_START.md +0 -191
  186. package/cli/CHANGELOG.md +0 -84
  187. package/cli/LICENSE +0 -24
  188. package/cli/README.md +0 -222
  189. package/cli/dist/core/adapters/playwright-ui.js +0 -864
  190. package/cli/dist/core/auth/oauth2-provider.js +0 -114
  191. package/cli/dist/core/coverage/analyzer.d.ts +0 -101
  192. package/cli/dist/core/coverage/analyzer.js +0 -415
  193. package/cli/dist/core/coverage/collector.d.ts +0 -74
  194. package/cli/dist/core/coverage/collector.js +0 -459
  195. package/cli/dist/core/coverage/config.d.ts +0 -37
  196. package/cli/dist/core/coverage/config.js +0 -156
  197. package/cli/dist/core/coverage/index.d.ts +0 -11
  198. package/cli/dist/core/coverage/index.js +0 -15
  199. package/cli/dist/core/coverage/types.d.ts +0 -267
  200. package/cli/dist/core/coverage/types.js +0 -6
  201. package/cli/dist/core/coverage/vault.d.ts +0 -95
  202. package/cli/dist/core/coverage/vault.js +0 -405
  203. package/cli/dist/core/crawler/index.d.ts +0 -57
  204. package/cli/dist/core/fixtures/index.d.ts +0 -8
  205. package/cli/dist/core/fixtures/index.js +0 -8
  206. package/cli/dist/core/generation/crawler-pack-generator.js +0 -231
  207. package/cli/dist/core/reporting/index.d.ts +0 -6
  208. package/cli/dist/core/reporting/index.js +0 -6
  209. package/cli/dist/core/visual/index.d.ts +0 -6
  210. package/cli/dist/core/visual/index.js +0 -6
  211. package/cli/package.json +0 -76
  212. package/core/LICENSE +0 -24
  213. package/core/README.md +0 -105
  214. package/core/package.json +0 -90
  215. package/core/schemas/pack.schema.json +0 -236
  216. /package/{cli/bin → bin}/qa360.js +0 -0
  217. /package/{cli/dist → dist}/cli-minimal.d.ts +0 -0
  218. /package/{cli/dist → dist}/cli-minimal.js +0 -0
  219. /package/{cli/dist → dist}/commands/ai.d.ts +0 -0
  220. /package/{cli/dist → dist}/commands/ask.d.ts +0 -0
  221. /package/{cli/dist → dist}/commands/ask.js +0 -0
  222. /package/{cli/dist → dist}/commands/coverage.d.ts +0 -0
  223. /package/{cli/dist → dist}/commands/crawl.d.ts +0 -0
  224. /package/{cli/dist → dist}/commands/doctor.d.ts +0 -0
  225. /package/{cli/dist → dist}/commands/examples.d.ts +0 -0
  226. /package/{cli/dist → dist}/commands/examples.js +0 -0
  227. /package/{cli/dist → dist}/commands/explain.d.ts +0 -0
  228. /package/{cli/dist → dist}/commands/flakiness.d.ts +0 -0
  229. /package/{cli/dist → dist}/commands/generate.d.ts +0 -0
  230. /package/{cli/dist → dist}/commands/history.d.ts +0 -0
  231. /package/{cli/dist → dist}/commands/init.d.ts +0 -0
  232. /package/{cli/dist → dist}/commands/init.js +0 -0
  233. /package/{cli/dist → dist}/commands/monitor.d.ts +0 -0
  234. /package/{cli/dist → dist}/commands/ollama.d.ts +0 -0
  235. /package/{cli/dist → dist}/commands/pack.d.ts +0 -0
  236. /package/{cli/dist → dist}/commands/regression.d.ts +0 -0
  237. /package/{cli/dist → dist}/commands/repair.d.ts +0 -0
  238. /package/{cli/dist → dist}/commands/report.d.ts +0 -0
  239. /package/{cli/dist → dist}/commands/report.js +0 -0
  240. /package/{cli/dist → dist}/commands/retry.d.ts +0 -0
  241. /package/{cli/dist → dist}/commands/scan.d.ts +0 -0
  242. /package/{cli/dist → dist}/commands/scan.js +0 -0
  243. /package/{cli/dist → dist}/commands/secrets.d.ts +0 -0
  244. /package/{cli/dist → dist}/commands/serve.d.ts +0 -0
  245. /package/{cli/dist → dist}/commands/slo.d.ts +0 -0
  246. /package/{cli/dist → dist}/commands/verify.d.ts +0 -0
  247. /package/{cli/dist → dist}/core/adapters/gitleaks-secrets.d.ts +0 -0
  248. /package/{cli/dist → dist}/core/adapters/gitleaks-secrets.js +0 -0
  249. /package/{cli/dist → dist}/core/adapters/jest-adapter.d.ts +0 -0
  250. /package/{cli/dist → dist}/core/adapters/jest-adapter.js +0 -0
  251. /package/{cli/dist → dist}/core/adapters/k6-perf.d.ts +0 -0
  252. /package/{cli/dist → dist}/core/adapters/k6-perf.js +0 -0
  253. /package/{cli/dist → dist}/core/adapters/osv-deps.d.ts +0 -0
  254. /package/{cli/dist → dist}/core/adapters/osv-deps.js +0 -0
  255. /package/{cli/dist → dist}/core/adapters/playwright-native-adapter.d.ts +0 -0
  256. /package/{cli/dist → dist}/core/adapters/playwright-native-adapter.js +0 -0
  257. /package/{cli/dist → dist}/core/adapters/pytest-adapter.d.ts +0 -0
  258. /package/{cli/dist → dist}/core/adapters/pytest-adapter.js +0 -0
  259. /package/{cli/dist → dist}/core/adapters/semgrep-sast.d.ts +0 -0
  260. /package/{cli/dist → dist}/core/adapters/semgrep-sast.js +0 -0
  261. /package/{cli/dist → dist}/core/adapters/unit-test-types.d.ts +0 -0
  262. /package/{cli/dist → dist}/core/adapters/unit-test-types.js +0 -0
  263. /package/{cli/dist → dist}/core/adapters/vitest-adapter.d.ts +0 -0
  264. /package/{cli/dist → dist}/core/adapters/vitest-adapter.js +0 -0
  265. /package/{cli/dist → dist}/core/adapters/zap-dast.d.ts +0 -0
  266. /package/{cli/dist → dist}/core/adapters/zap-dast.js +0 -0
  267. /package/{cli/dist → dist}/core/ai/anthropic-provider.d.ts +0 -0
  268. /package/{cli/dist → dist}/core/ai/anthropic-provider.js +0 -0
  269. /package/{cli/dist → dist}/core/ai/deepseek-provider.d.ts +0 -0
  270. /package/{cli/dist → dist}/core/ai/deepseek-provider.js +0 -0
  271. /package/{cli/dist → dist}/core/ai/index.d.ts +0 -0
  272. /package/{cli/dist → dist}/core/ai/index.js +0 -0
  273. /package/{cli/dist → dist}/core/ai/llm-client.d.ts +0 -0
  274. /package/{cli/dist → dist}/core/ai/llm-client.js +0 -0
  275. /package/{cli/dist → dist}/core/ai/mock-provider.d.ts +0 -0
  276. /package/{cli/dist → dist}/core/ai/mock-provider.js +0 -0
  277. /package/{cli/dist → dist}/core/ai/ollama-provider.d.ts +0 -0
  278. /package/{cli/dist → dist}/core/ai/openai-provider.d.ts +0 -0
  279. /package/{cli/dist → dist}/core/ai/openai-provider.js +0 -0
  280. /package/{cli/dist → dist}/core/ai/provider-factory.d.ts +0 -0
  281. /package/{cli/dist → dist}/core/ai/provider-factory.js +0 -0
  282. /package/{cli/dist → dist}/core/artifacts/index.d.ts +0 -0
  283. /package/{cli/dist → dist}/core/artifacts/index.js +0 -0
  284. /package/{cli/dist → dist}/core/artifacts/ui-artifacts.d.ts +0 -0
  285. /package/{cli/dist → dist}/core/assertions/engine.d.ts +0 -0
  286. /package/{cli/dist → dist}/core/assertions/engine.js +0 -0
  287. /package/{cli/dist → dist}/core/assertions/index.d.ts +0 -0
  288. /package/{cli/dist → dist}/core/assertions/index.js +0 -0
  289. /package/{cli/dist → dist}/core/assertions/types.d.ts +0 -0
  290. /package/{cli/dist → dist}/core/assertions/types.js +0 -0
  291. /package/{cli/dist → dist}/core/auth/api-key-provider.d.ts +0 -0
  292. /package/{cli/dist → dist}/core/auth/api-key-provider.js +0 -0
  293. /package/{cli/dist → dist}/core/auth/aws-iam-provider.d.ts +0 -0
  294. /package/{cli/dist → dist}/core/auth/aws-iam-provider.js +0 -0
  295. /package/{cli/dist → dist}/core/auth/azure-ad-provider.d.ts +0 -0
  296. /package/{cli/dist → dist}/core/auth/azure-ad-provider.js +0 -0
  297. /package/{cli/dist → dist}/core/auth/gcp-adc-provider.d.ts +0 -0
  298. /package/{cli/dist → dist}/core/auth/gcp-adc-provider.js +0 -0
  299. /package/{cli/dist → dist}/core/auth/jwt-provider.d.ts +0 -0
  300. /package/{cli/dist → dist}/core/auth/jwt-provider.js +0 -0
  301. /package/{cli/dist → dist}/core/auth/manager.d.ts +0 -0
  302. /package/{cli/dist → dist}/core/auth/manager.js +0 -0
  303. /package/{cli/dist → dist}/core/auth/totp-provider.d.ts +0 -0
  304. /package/{cli/dist → dist}/core/auth/totp-provider.js +0 -0
  305. /package/{cli/dist → dist}/core/auth/ui-login-provider.d.ts +0 -0
  306. /package/{cli/dist → dist}/core/auth/ui-login-provider.js +0 -0
  307. /package/{cli/dist → dist}/core/cache/index.d.ts +0 -0
  308. /package/{cli/dist → dist}/core/cache/index.js +0 -0
  309. /package/{cli/dist → dist}/core/cache/lru-cache.d.ts +0 -0
  310. /package/{cli/dist → dist}/core/cache/lru-cache.js +0 -0
  311. /package/{cli/dist/core → dist}/core/coverage/analyzer.d.ts +0 -0
  312. /package/{cli/dist/core → dist}/core/coverage/analyzer.js +0 -0
  313. /package/{cli/dist/core → dist}/core/coverage/collector.d.ts +0 -0
  314. /package/{cli/dist/core → dist}/core/coverage/collector.js +0 -0
  315. /package/{cli/dist/core → dist}/core/coverage/config.d.ts +0 -0
  316. /package/{cli/dist/core → dist}/core/coverage/config.js +0 -0
  317. /package/{cli/dist/core → dist}/core/coverage/index.d.ts +0 -0
  318. /package/{cli/dist/core → dist}/core/coverage/index.js +0 -0
  319. /package/{cli/dist/core → dist}/core/coverage/types.d.ts +0 -0
  320. /package/{cli/dist/core → dist}/core/coverage/types.js +0 -0
  321. /package/{cli/dist/core → dist}/core/coverage/vault.d.ts +0 -0
  322. /package/{cli/dist/core → dist}/core/coverage/vault.js +0 -0
  323. /package/{cli/dist → dist}/core/crawler/journey-generator.d.ts +0 -0
  324. /package/{cli/dist → dist}/core/crawler/types.js +0 -0
  325. /package/{cli/dist → dist}/core/dashboard/assets.d.ts +0 -0
  326. /package/{cli/dist → dist}/core/dashboard/assets.js +0 -0
  327. /package/{cli/dist → dist}/core/dashboard/index.d.ts +0 -0
  328. /package/{cli/dist → dist}/core/dashboard/index.js +0 -0
  329. /package/{cli/dist → dist}/core/dashboard/server.d.ts +0 -0
  330. /package/{cli/dist → dist}/core/dashboard/server.js +0 -0
  331. /package/{cli/dist → dist}/core/dashboard/types.d.ts +0 -0
  332. /package/{cli/dist → dist}/core/dashboard/types.js +0 -0
  333. /package/{cli/dist → dist}/core/discoverer/index.d.ts +0 -0
  334. /package/{cli/dist → dist}/core/discoverer/index.js +0 -0
  335. /package/{cli/dist → dist}/core/fixtures/loader.d.ts +0 -0
  336. /package/{cli/dist → dist}/core/fixtures/loader.js +0 -0
  337. /package/{cli/dist → dist}/core/fixtures/resolver.d.ts +0 -0
  338. /package/{cli/dist → dist}/core/fixtures/resolver.js +0 -0
  339. /package/{cli/dist → dist}/core/fixtures/types.d.ts +0 -0
  340. /package/{cli/dist → dist}/core/fixtures/types.js +0 -0
  341. /package/{cli/dist → dist}/core/flakiness/index.d.ts +0 -0
  342. /package/{cli/dist → dist}/core/flakiness/index.js +0 -0
  343. /package/{cli/dist → dist}/core/generation/code-formatter.d.ts +0 -0
  344. /package/{cli/dist → dist}/core/generation/code-formatter.js +0 -0
  345. /package/{cli/dist → dist}/core/generation/code-generator.d.ts +0 -0
  346. /package/{cli/dist → dist}/core/generation/code-generator.js +0 -0
  347. /package/{cli/dist → dist}/core/generation/generator.d.ts +0 -0
  348. /package/{cli/dist → dist}/core/generation/generator.js +0 -0
  349. /package/{cli/dist → dist}/core/generation/pack-generator.d.ts +0 -0
  350. /package/{cli/dist → dist}/core/generation/pack-generator.js +0 -0
  351. /package/{cli/dist → dist}/core/generation/prompt-builder.d.ts +0 -0
  352. /package/{cli/dist → dist}/core/generation/prompt-builder.js +0 -0
  353. /package/{cli/dist → dist}/core/generation/source-analyzer.d.ts +0 -0
  354. /package/{cli/dist → dist}/core/generation/source-analyzer.js +0 -0
  355. /package/{cli/dist → dist}/core/generation/test-optimizer.d.ts +0 -0
  356. /package/{cli/dist → dist}/core/generation/test-optimizer.js +0 -0
  357. /package/{cli/dist → dist}/core/generation/types.d.ts +0 -0
  358. /package/{cli/dist → dist}/core/generation/types.js +0 -0
  359. /package/{cli/dist → dist}/core/hooks/compose.d.ts +0 -0
  360. /package/{cli/dist → dist}/core/hooks/compose.js +0 -0
  361. /package/{cli/dist → dist}/core/hooks/runner.d.ts +0 -0
  362. /package/{cli/dist → dist}/core/hooks/runner.js +0 -0
  363. /package/{cli/dist → dist}/core/pack/migrator.d.ts +0 -0
  364. /package/{cli/dist → dist}/core/pack/migrator.js +0 -0
  365. /package/{cli/dist → dist}/core/pack/validator.d.ts +0 -0
  366. /package/{cli/dist → dist}/core/pack-v2/index.d.ts +0 -0
  367. /package/{cli/dist → dist}/core/pack-v2/index.js +0 -0
  368. /package/{cli/dist → dist}/core/pack-v2/loader.d.ts +0 -0
  369. /package/{cli/dist → dist}/core/pack-v2/loader.js +0 -0
  370. /package/{cli/dist → dist}/core/pack-v2/validator.d.ts +0 -0
  371. /package/{cli/dist → dist}/core/parallel/index.d.ts +0 -0
  372. /package/{cli/dist → dist}/core/parallel/index.js +0 -0
  373. /package/{cli/dist → dist}/core/parallel/parallel-runner.d.ts +0 -0
  374. /package/{cli/dist → dist}/core/parallel/parallel-runner.js +0 -0
  375. /package/{cli/dist → dist}/core/pom/base-page.d.ts +0 -0
  376. /package/{cli/dist → dist}/core/pom/index.d.ts +0 -0
  377. /package/{cli/dist → dist}/core/pom/index.js +0 -0
  378. /package/{cli/dist → dist}/core/pom/loader.d.ts +0 -0
  379. /package/{cli/dist → dist}/core/pom/types.d.ts +0 -0
  380. /package/{cli/dist → dist}/core/pom/types.js +0 -0
  381. /package/{cli/dist → dist}/core/proof/bundle.d.ts +0 -0
  382. /package/{cli/dist → dist}/core/proof/bundle.js +0 -0
  383. /package/{cli/dist → dist}/core/proof/canonicalize.d.ts +0 -0
  384. /package/{cli/dist → dist}/core/proof/canonicalize.js +0 -0
  385. /package/{cli/dist → dist}/core/proof/index.d.ts +0 -0
  386. /package/{cli/dist → dist}/core/proof/index.js +0 -0
  387. /package/{cli/dist → dist}/core/proof/schema.d.ts +0 -0
  388. /package/{cli/dist → dist}/core/proof/schema.js +0 -0
  389. /package/{cli/dist → dist}/core/proof/signer.d.ts +0 -0
  390. /package/{cli/dist → dist}/core/proof/signer.js +0 -0
  391. /package/{cli/dist → dist}/core/proof/verifier.d.ts +0 -0
  392. /package/{cli/dist → dist}/core/proof/verifier.js +0 -0
  393. /package/{cli/dist → dist}/core/regression/detector.d.ts +0 -0
  394. /package/{cli/dist → dist}/core/regression/detector.js +0 -0
  395. /package/{cli/dist → dist}/core/regression/index.d.ts +0 -0
  396. /package/{cli/dist → dist}/core/regression/index.js +0 -0
  397. /package/{cli/dist → dist}/core/regression/trend-analyzer.d.ts +0 -0
  398. /package/{cli/dist → dist}/core/regression/trend-analyzer.js +0 -0
  399. /package/{cli/dist → dist}/core/regression/types.d.ts +0 -0
  400. /package/{cli/dist → dist}/core/regression/types.js +0 -0
  401. /package/{cli/dist → dist}/core/regression/vault.d.ts +0 -0
  402. /package/{cli/dist → dist}/core/regression/vault.js +0 -0
  403. /package/{cli/dist → dist}/core/repair/engine/fixer.d.ts +0 -0
  404. /package/{cli/dist → dist}/core/repair/engine/fixer.js +0 -0
  405. /package/{cli/dist → dist}/core/repair/engine/suggestion-engine.d.ts +0 -0
  406. /package/{cli/dist → dist}/core/repair/engine/suggestion-engine.js +0 -0
  407. /package/{cli/dist → dist}/core/repair/index.d.ts +0 -0
  408. /package/{cli/dist → dist}/core/repair/index.js +0 -0
  409. /package/{cli/dist → dist}/core/repair/repairer.d.ts +0 -0
  410. /package/{cli/dist → dist}/core/repair/repairer.js +0 -0
  411. /package/{cli/dist → dist}/core/repair/types.d.ts +0 -0
  412. /package/{cli/dist → dist}/core/repair/types.js +0 -0
  413. /package/{cli/dist → dist}/core/repair/utils/error-analyzer.d.ts +0 -0
  414. /package/{cli/dist → dist}/core/repair/utils/error-analyzer.js +0 -0
  415. /package/{cli/dist → dist}/core/reporting/html-reporter.d.ts +0 -0
  416. /package/{cli/dist → dist}/core/reporting/html-reporter.js +0 -0
  417. /package/{cli/dist → dist}/core/retry/flakiness-integration.d.ts +0 -0
  418. /package/{cli/dist → dist}/core/retry/flakiness-integration.js +0 -0
  419. /package/{cli/dist → dist}/core/retry/index.d.ts +0 -0
  420. /package/{cli/dist → dist}/core/retry/index.js +0 -0
  421. /package/{cli/dist → dist}/core/retry/retry-engine.d.ts +0 -0
  422. /package/{cli/dist → dist}/core/retry/retry-engine.js +0 -0
  423. /package/{cli/dist → dist}/core/retry/types.d.ts +0 -0
  424. /package/{cli/dist → dist}/core/retry/types.js +0 -0
  425. /package/{cli/dist → dist}/core/retry/vault.d.ts +0 -0
  426. /package/{cli/dist → dist}/core/retry/vault.js +0 -0
  427. /package/{cli/dist → dist}/core/schemas/pack.schema.json +0 -0
  428. /package/{cli/dist → dist}/core/secrets/crypto.d.ts +0 -0
  429. /package/{cli/dist → dist}/core/secrets/crypto.js +0 -0
  430. /package/{cli/dist → dist}/core/secrets/manager.d.ts +0 -0
  431. /package/{cli/dist → dist}/core/secrets/manager.js +0 -0
  432. /package/{cli/dist → dist}/core/security/redaction-patterns-extended.d.ts +0 -0
  433. /package/{cli/dist → dist}/core/security/redaction-patterns-extended.js +0 -0
  434. /package/{cli/dist → dist}/core/security/redactor.d.ts +0 -0
  435. /package/{cli/dist → dist}/core/security/redactor.js +0 -0
  436. /package/{cli/dist → dist}/core/self-healing/assertion-healer.d.ts +0 -0
  437. /package/{cli/dist → dist}/core/self-healing/assertion-healer.js +0 -0
  438. /package/{cli/dist → dist}/core/self-healing/engine.d.ts +0 -0
  439. /package/{cli/dist → dist}/core/self-healing/engine.js +0 -0
  440. /package/{cli/dist → dist}/core/self-healing/index.d.ts +0 -0
  441. /package/{cli/dist → dist}/core/self-healing/index.js +0 -0
  442. /package/{cli/dist → dist}/core/self-healing/selector-healer.d.ts +0 -0
  443. /package/{cli/dist → dist}/core/self-healing/selector-healer.js +0 -0
  444. /package/{cli/dist → dist}/core/self-healing/types.d.ts +0 -0
  445. /package/{cli/dist → dist}/core/self-healing/types.js +0 -0
  446. /package/{cli/dist → dist}/core/serve/diagnostics-collector.d.ts +0 -0
  447. /package/{cli/dist → dist}/core/serve/diagnostics-collector.js +0 -0
  448. /package/{cli/dist → dist}/core/serve/health-checker.d.ts +0 -0
  449. /package/{cli/dist → dist}/core/serve/health-checker.js +0 -0
  450. /package/{cli/dist → dist}/core/serve/index.d.ts +0 -0
  451. /package/{cli/dist → dist}/core/serve/index.js +0 -0
  452. /package/{cli/dist → dist}/core/serve/metrics-collector.d.ts +0 -0
  453. /package/{cli/dist → dist}/core/serve/metrics-collector.js +0 -0
  454. /package/{cli/dist → dist}/core/serve/process-manager.d.ts +0 -0
  455. /package/{cli/dist → dist}/core/serve/process-manager.js +0 -0
  456. /package/{cli/dist → dist}/core/serve/server.d.ts +0 -0
  457. /package/{cli/dist → dist}/core/serve/server.js +0 -0
  458. /package/{cli/dist → dist}/core/slo/config.d.ts +0 -0
  459. /package/{cli/dist → dist}/core/slo/config.js +0 -0
  460. /package/{cli/dist → dist}/core/slo/index.d.ts +0 -0
  461. /package/{cli/dist → dist}/core/slo/index.js +0 -0
  462. /package/{cli/dist → dist}/core/slo/sli-calculator.d.ts +0 -0
  463. /package/{cli/dist → dist}/core/slo/sli-calculator.js +0 -0
  464. /package/{cli/dist → dist}/core/slo/slo-tracker.d.ts +0 -0
  465. /package/{cli/dist → dist}/core/slo/slo-tracker.js +0 -0
  466. /package/{cli/dist → dist}/core/slo/types.d.ts +0 -0
  467. /package/{cli/dist → dist}/core/slo/types.js +0 -0
  468. /package/{cli/dist → dist}/core/slo/vault.d.ts +0 -0
  469. /package/{cli/dist → dist}/core/slo/vault.js +0 -0
  470. /package/{cli/dist → dist}/core/tui/index.d.ts +0 -0
  471. /package/{cli/dist → dist}/core/tui/index.js +0 -0
  472. /package/{cli/dist → dist}/core/tui/monitor.d.ts +0 -0
  473. /package/{cli/dist → dist}/core/tui/monitor.js +0 -0
  474. /package/{cli/dist → dist}/core/tui/renderer.d.ts +0 -0
  475. /package/{cli/dist → dist}/core/tui/renderer.js +0 -0
  476. /package/{cli/dist → dist}/core/tui/types.d.ts +0 -0
  477. /package/{cli/dist → dist}/core/tui/types.js +0 -0
  478. /package/{cli/dist → dist}/core/types/pack-v1.js +0 -0
  479. /package/{cli/dist → dist}/core/types/pack-v2.js +0 -0
  480. /package/{cli/dist → dist}/core/types/trust-score.d.ts +0 -0
  481. /package/{cli/dist → dist}/core/types/trust-score.js +0 -0
  482. /package/{cli/dist → dist}/core/vault/cas.d.ts +0 -0
  483. /package/{cli/dist → dist}/core/vault/cas.js +0 -0
  484. /package/{cli/dist → dist}/core/vault/index.d.ts +0 -0
  485. /package/{cli/dist → dist}/core/vault/index.js +0 -0
  486. /package/{cli/dist → dist}/core/visual/visual-regression.d.ts +0 -0
  487. /package/{cli/dist → dist}/core/visual/visual-regression.js +0 -0
  488. /package/{cli/dist → dist}/core/watch/index.d.ts +0 -0
  489. /package/{cli/dist → dist}/core/watch/index.js +0 -0
  490. /package/{cli/dist → dist}/core/watch/watch-mode.d.ts +0 -0
  491. /package/{cli/dist → dist}/core/watch/watch-mode.js +0 -0
  492. /package/{cli/dist → dist}/generators/index.d.ts +0 -0
  493. /package/{cli/dist → dist}/generators/index.js +0 -0
  494. /package/{cli/dist → dist}/generators/json-reporter.d.ts +0 -0
  495. /package/{cli/dist → dist}/generators/json-reporter.js +0 -0
  496. /package/{cli/dist → dist}/generators/test-generator.d.ts +0 -0
  497. /package/{cli/dist → dist}/generators/test-generator.js +0 -0
  498. /package/{cli/dist → dist}/index.d.ts +0 -0
  499. /package/{cli/dist → dist}/index.js +0 -0
  500. /package/{cli/dist → dist}/scanners/dom-scanner.d.ts +0 -0
  501. /package/{cli/dist → dist}/scanners/dom-scanner.js +0 -0
  502. /package/{cli/dist → dist}/scanners/index.d.ts +0 -0
  503. /package/{cli/dist → dist}/scanners/index.js +0 -0
  504. /package/{cli/dist → dist}/schemas/pack.schema.json +0 -0
  505. /package/{cli/dist → dist}/types/scan.d.ts +0 -0
  506. /package/{cli/dist → dist}/types/scan.js +0 -0
  507. /package/{cli/dist → dist}/utils/config.js +0 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ * QA360 Network Manager
3
+ *
4
+ * P0 Features: Advanced network control for testing
5
+ * - Block routes: Prevent specific requests from completing
6
+ * - Mock routes: Return custom responses for specific requests
7
+ * - Wait for request: Wait until a specific request is made
8
+ * - Wait for response: Wait until a specific response is received
9
+ *
10
+ * Uses Playwright's page.route(), page.waitForRequest(), page.waitForResponse()
11
+ */
12
+ import type { Page, Request, Response } from '@playwright/test';
13
+ /**
14
+ * Route blocking configuration
15
+ */
16
+ export interface BlockRouteConfig {
17
+ /**
18
+ * URL pattern to block (regex, string, or function)
19
+ */
20
+ urlPattern: string | RegExp | ((url: string) => boolean);
21
+ /**
22
+ * Optional HTTP methods to block
23
+ * If not specified, blocks all methods
24
+ */
25
+ methods?: string[];
26
+ }
27
+ /**
28
+ * Route mocking configuration
29
+ */
30
+ export interface MockRouteConfig {
31
+ /**
32
+ * URL pattern to mock (regex, string, or function)
33
+ */
34
+ urlPattern: string | RegExp | ((url: string) => boolean);
35
+ /**
36
+ * HTTP status to return
37
+ */
38
+ status: number;
39
+ /**
40
+ * Response headers
41
+ */
42
+ headers?: Record<string, string>;
43
+ /**
44
+ * Response body (string or JSON)
45
+ */
46
+ body?: string | Record<string, unknown>;
47
+ /**
48
+ * Content type
49
+ */
50
+ contentType?: string;
51
+ /**
52
+ * Optional HTTP methods to mock
53
+ */
54
+ methods?: string[];
55
+ }
56
+ /**
57
+ * Wait for request configuration
58
+ */
59
+ export interface WaitForRequestOptions {
60
+ /**
61
+ * URL pattern to wait for
62
+ */
63
+ urlPattern?: string | RegExp | ((url: string) => boolean);
64
+ /**
65
+ * HTTP method to wait for
66
+ */
67
+ method?: string;
68
+ /**
69
+ * Timeout in milliseconds
70
+ */
71
+ timeout?: number;
72
+ }
73
+ /**
74
+ * Wait for response configuration
75
+ */
76
+ export interface WaitForResponseOptions {
77
+ /**
78
+ * URL pattern to wait for
79
+ */
80
+ urlPattern?: string | RegExp | ((url: string) => boolean);
81
+ /**
82
+ * HTTP status to wait for
83
+ */
84
+ status?: number;
85
+ /**
86
+ * Timeout in milliseconds
87
+ */
88
+ timeout?: number;
89
+ }
90
+ /**
91
+ * Network Manager class
92
+ * Provides advanced network control capabilities
93
+ */
94
+ export declare class NetworkManager {
95
+ private page;
96
+ private blockedRoutes;
97
+ private mockedRoutes;
98
+ constructor(page: Page);
99
+ /**
100
+ * Block routes matching the given pattern
101
+ * P0: Block specific requests (analytics, trackers, etc.)
102
+ */
103
+ blockRoute(config: BlockRouteConfig): Promise<void>;
104
+ /**
105
+ * Mock routes with custom responses
106
+ * P0: Return fake responses for testing
107
+ */
108
+ mockRoute(config: MockRouteConfig): Promise<void>;
109
+ /**
110
+ * Wait for a request matching the given pattern
111
+ * P0: Wait for specific API calls
112
+ */
113
+ waitForRequest(options?: WaitForRequestOptions): Promise<Request>;
114
+ /**
115
+ * Wait for a response matching the given pattern
116
+ * P0: Wait for specific API responses
117
+ */
118
+ waitForResponse(options?: WaitForResponseOptions): Promise<Response>;
119
+ /**
120
+ * Unblock all blocked routes
121
+ */
122
+ unblockRoutes(): Promise<void>;
123
+ /**
124
+ * Unmock all mocked routes
125
+ */
126
+ unmockRoutes(): Promise<void>;
127
+ /**
128
+ * Get all blocked routes
129
+ */
130
+ getBlockedRoutes(): BlockRouteConfig[];
131
+ /**
132
+ * Get all mocked routes
133
+ */
134
+ getMockedRoutes(): MockRouteConfig[];
135
+ /**
136
+ * Check if a URL matches a pattern
137
+ */
138
+ private matchPattern;
139
+ /**
140
+ * Get content type based on body
141
+ */
142
+ private getContentType;
143
+ }
144
+ /**
145
+ * Convenience function to create a network manager
146
+ */
147
+ export declare function createNetworkManager(page: Page): NetworkManager;
148
+ /**
149
+ * Predefined common blocking patterns
150
+ */
151
+ export declare const BlockPatterns: {
152
+ /**
153
+ * Block Google Analytics
154
+ */
155
+ googleAnalytics: string;
156
+ /**
157
+ * Block Google Tag Manager
158
+ */
159
+ googleTagManager: string;
160
+ /**
161
+ * Block Facebook Pixel
162
+ */
163
+ facebookPixel: string;
164
+ /**
165
+ * Block DoubleClick
166
+ */
167
+ doubleClick: string;
168
+ /**
169
+ * Block all analytics
170
+ */
171
+ allAnalytics: string[];
172
+ /**
173
+ * Block images
174
+ */
175
+ images: string;
176
+ /**
177
+ * Block fonts
178
+ */
179
+ fonts: string;
180
+ /**
181
+ * Block CSS
182
+ */
183
+ css: string;
184
+ /**
185
+ * Block JavaScript
186
+ */
187
+ javascript: string;
188
+ };
189
+ /**
190
+ * Predefined common mock responses
191
+ */
192
+ export declare const MockResponses: {
193
+ /**
194
+ * Mock successful API response
195
+ */
196
+ successResponse: (data?: Record<string, unknown>) => MockRouteConfig;
197
+ /**
198
+ * Mock error API response
199
+ */
200
+ errorResponse: (message?: string) => MockRouteConfig;
201
+ /**
202
+ * Mock empty list response
203
+ */
204
+ emptyList: () => MockRouteConfig;
205
+ /**
206
+ * Mock 404 Not Found
207
+ */
208
+ notFound: () => MockRouteConfig;
209
+ /**
210
+ * Mock 401 Unauthorized
211
+ */
212
+ unauthorized: () => MockRouteConfig;
213
+ /**
214
+ * Mock slow response (with latency)
215
+ * Note: This doesn't add actual delay, use NetworkSimulator for that
216
+ */
217
+ slowResponse: (data?: Record<string, unknown>) => MockRouteConfig;
218
+ };
219
+ /**
220
+ * Convenience functions for common operations
221
+ */
222
+ /**
223
+ * Block all analytics and tracking scripts
224
+ */
225
+ export declare function blockAnalytics(page: Page): Promise<void>;
226
+ /**
227
+ * Mock all API responses
228
+ */
229
+ export declare function mockAllAPI(page: Page, response: MockRouteConfig): Promise<void>;
230
+ /**
231
+ * Wait for API request
232
+ */
233
+ export declare function waitForAPIRequest(page: Page, urlPattern: string | RegExp, timeout?: number): Promise<Request>;
234
+ /**
235
+ * Wait for API response
236
+ */
237
+ export declare function waitForAPIResponse(page: Page, urlPattern: string | RegExp, timeout?: number): Promise<Response>;
@@ -0,0 +1,343 @@
1
+ /**
2
+ * QA360 Network Manager
3
+ *
4
+ * P0 Features: Advanced network control for testing
5
+ * - Block routes: Prevent specific requests from completing
6
+ * - Mock routes: Return custom responses for specific requests
7
+ * - Wait for request: Wait until a specific request is made
8
+ * - Wait for response: Wait until a specific response is received
9
+ *
10
+ * Uses Playwright's page.route(), page.waitForRequest(), page.waitForResponse()
11
+ */
12
+ /**
13
+ * Network Manager class
14
+ * Provides advanced network control capabilities
15
+ */
16
+ export class NetworkManager {
17
+ page;
18
+ blockedRoutes = [];
19
+ mockedRoutes = [];
20
+ constructor(page) {
21
+ this.page = page;
22
+ }
23
+ /**
24
+ * Block routes matching the given pattern
25
+ * P0: Block specific requests (analytics, trackers, etc.)
26
+ */
27
+ async blockRoute(config) {
28
+ const { urlPattern, methods } = config;
29
+ const handler = async (route) => {
30
+ const request = route.request();
31
+ const url = request.url();
32
+ const method = request.method();
33
+ // Check if URL matches pattern
34
+ const matches = this.matchPattern(url, urlPattern);
35
+ if (!matches) {
36
+ await route.continue();
37
+ return;
38
+ }
39
+ // Check if method matches
40
+ if (methods && !methods.includes(method)) {
41
+ await route.continue();
42
+ return;
43
+ }
44
+ // Abort the request
45
+ await route.abort('failed');
46
+ };
47
+ // Create URL pattern wrapper for Playwright
48
+ const playwrightUrlPattern = typeof urlPattern === 'function'
49
+ ? (url) => this.matchPattern(url.href, urlPattern)
50
+ : urlPattern;
51
+ await this.page.route(playwrightUrlPattern, handler);
52
+ this.blockedRoutes.push(config);
53
+ }
54
+ /**
55
+ * Mock routes with custom responses
56
+ * P0: Return fake responses for testing
57
+ */
58
+ async mockRoute(config) {
59
+ const { urlPattern, status, headers, body, contentType, methods } = config;
60
+ const handler = async (route) => {
61
+ const request = route.request();
62
+ const url = request.url();
63
+ const method = request.method();
64
+ // Check if URL matches pattern
65
+ const matches = this.matchPattern(url, urlPattern);
66
+ if (!matches) {
67
+ await route.continue();
68
+ return;
69
+ }
70
+ // Check if method matches
71
+ if (methods && !methods.includes(method)) {
72
+ await route.continue();
73
+ return;
74
+ }
75
+ // Prepare response
76
+ const responseHeaders = {
77
+ 'content-type': contentType || this.getContentType(body),
78
+ ...headers,
79
+ };
80
+ let responseBody;
81
+ if (typeof body === 'string') {
82
+ responseBody = body;
83
+ }
84
+ else if (body !== undefined) {
85
+ responseBody = JSON.stringify(body);
86
+ }
87
+ else {
88
+ responseBody = '';
89
+ }
90
+ await route.fulfill({
91
+ status,
92
+ headers: responseHeaders,
93
+ body: responseBody,
94
+ });
95
+ };
96
+ // Create URL pattern wrapper for Playwright
97
+ const playwrightUrlPattern = typeof urlPattern === 'function'
98
+ ? (url) => this.matchPattern(url.href, urlPattern)
99
+ : urlPattern;
100
+ await this.page.route(playwrightUrlPattern, handler);
101
+ this.mockedRoutes.push(config);
102
+ }
103
+ /**
104
+ * Wait for a request matching the given pattern
105
+ * P0: Wait for specific API calls
106
+ */
107
+ async waitForRequest(options = {}) {
108
+ const { urlPattern = /.*/, method, timeout = 30000 } = options;
109
+ if (method) {
110
+ // Wait for request with specific method
111
+ return await this.page.waitForRequest((request) => {
112
+ const urlMatches = this.matchPattern(request.url(), urlPattern);
113
+ const methodMatches = request.method() === method;
114
+ return urlMatches && methodMatches;
115
+ }, { timeout });
116
+ }
117
+ return await this.page.waitForRequest((request) => this.matchPattern(request.url(), urlPattern), { timeout });
118
+ }
119
+ /**
120
+ * Wait for a response matching the given pattern
121
+ * P0: Wait for specific API responses
122
+ */
123
+ async waitForResponse(options = {}) {
124
+ const { urlPattern = /.*/, status, timeout = 30000 } = options;
125
+ if (status) {
126
+ // Wait for response with specific status using predicate
127
+ return await this.page.waitForResponse((response) => {
128
+ const urlMatches = this.matchPattern(response.url(), urlPattern);
129
+ const statusMatches = response.status() === status;
130
+ return urlMatches && statusMatches;
131
+ }, { timeout });
132
+ }
133
+ return await this.page.waitForResponse((response) => this.matchPattern(response.url(), urlPattern), { timeout });
134
+ }
135
+ /**
136
+ * Unblock all blocked routes
137
+ */
138
+ async unblockRoutes() {
139
+ // Clear all blocked routes
140
+ this.blockedRoutes = [];
141
+ // Note: Playwright doesn't provide a way to remove specific routes,
142
+ // so we need to recreate the page or use a workaround
143
+ // For now, we track them manually and users can call this for bookkeeping
144
+ }
145
+ /**
146
+ * Unmock all mocked routes
147
+ */
148
+ async unmockRoutes() {
149
+ // Clear all mocked routes
150
+ this.mockedRoutes = [];
151
+ }
152
+ /**
153
+ * Get all blocked routes
154
+ */
155
+ getBlockedRoutes() {
156
+ return [...this.blockedRoutes];
157
+ }
158
+ /**
159
+ * Get all mocked routes
160
+ */
161
+ getMockedRoutes() {
162
+ return [...this.mockedRoutes];
163
+ }
164
+ /**
165
+ * Check if a URL matches a pattern
166
+ */
167
+ matchPattern(url, pattern) {
168
+ if (typeof pattern === 'string') {
169
+ // Convert glob pattern to regex
170
+ const regexPattern = pattern
171
+ .replace(/\*/g, '.*')
172
+ .replace(/\?/g, '.');
173
+ return new RegExp(regexPattern).test(url);
174
+ }
175
+ if (pattern instanceof RegExp) {
176
+ return pattern.test(url);
177
+ }
178
+ if (typeof pattern === 'function') {
179
+ return pattern(url);
180
+ }
181
+ return false;
182
+ }
183
+ /**
184
+ * Get content type based on body
185
+ */
186
+ getContentType(body) {
187
+ if (body === undefined) {
188
+ return 'text/plain';
189
+ }
190
+ if (typeof body === 'string') {
191
+ // Try to detect if it's JSON
192
+ try {
193
+ JSON.parse(body);
194
+ return 'application/json';
195
+ }
196
+ catch {
197
+ return 'text/plain';
198
+ }
199
+ }
200
+ return 'application/json';
201
+ }
202
+ }
203
+ /**
204
+ * Convenience function to create a network manager
205
+ */
206
+ export function createNetworkManager(page) {
207
+ return new NetworkManager(page);
208
+ }
209
+ /**
210
+ * Predefined common blocking patterns
211
+ */
212
+ export const BlockPatterns = {
213
+ /**
214
+ * Block Google Analytics
215
+ */
216
+ googleAnalytics: '**/google-analytics.com/**',
217
+ /**
218
+ * Block Google Tag Manager
219
+ */
220
+ googleTagManager: '**/googletagmanager.com/**',
221
+ /**
222
+ * Block Facebook Pixel
223
+ */
224
+ facebookPixel: '**/facebook.com/tr/**',
225
+ /**
226
+ * Block DoubleClick
227
+ */
228
+ doubleClick: '**/doubleclick.net/**',
229
+ /**
230
+ * Block all analytics
231
+ */
232
+ allAnalytics: ['**/analytics/**', '**/tracking/**', '**/telemetry/**'],
233
+ /**
234
+ * Block images
235
+ */
236
+ images: '**/*.{png,jpg,jpeg,gif,webp,svg}',
237
+ /**
238
+ * Block fonts
239
+ */
240
+ fonts: '**/*.{woff,woff2,ttf,otf,eot}',
241
+ /**
242
+ * Block CSS
243
+ */
244
+ css: '**/*.css',
245
+ /**
246
+ * Block JavaScript
247
+ */
248
+ javascript: '**/*.js',
249
+ };
250
+ /**
251
+ * Predefined common mock responses
252
+ */
253
+ export const MockResponses = {
254
+ /**
255
+ * Mock successful API response
256
+ */
257
+ successResponse: (data = {}) => ({
258
+ urlPattern: '**/api/**',
259
+ status: 200,
260
+ body: { success: true, data },
261
+ contentType: 'application/json',
262
+ }),
263
+ /**
264
+ * Mock error API response
265
+ */
266
+ errorResponse: (message = 'Error') => ({
267
+ urlPattern: '**/api/**',
268
+ status: 500,
269
+ body: { success: false, error: message },
270
+ contentType: 'application/json',
271
+ }),
272
+ /**
273
+ * Mock empty list response
274
+ */
275
+ emptyList: () => ({
276
+ urlPattern: '**/api/**',
277
+ status: 200,
278
+ body: '[]',
279
+ contentType: 'application/json',
280
+ }),
281
+ /**
282
+ * Mock 404 Not Found
283
+ */
284
+ notFound: () => ({
285
+ urlPattern: '**/api/**',
286
+ status: 404,
287
+ body: { error: 'Not Found' },
288
+ contentType: 'application/json',
289
+ }),
290
+ /**
291
+ * Mock 401 Unauthorized
292
+ */
293
+ unauthorized: () => ({
294
+ urlPattern: '**/api/**',
295
+ status: 401,
296
+ body: { error: 'Unauthorized' },
297
+ contentType: 'application/json',
298
+ }),
299
+ /**
300
+ * Mock slow response (with latency)
301
+ * Note: This doesn't add actual delay, use NetworkSimulator for that
302
+ */
303
+ slowResponse: (data = {}) => ({
304
+ urlPattern: '**/api/**',
305
+ status: 200,
306
+ body: { success: true, data },
307
+ contentType: 'application/json',
308
+ }),
309
+ };
310
+ /**
311
+ * Convenience functions for common operations
312
+ */
313
+ /**
314
+ * Block all analytics and tracking scripts
315
+ */
316
+ export async function blockAnalytics(page) {
317
+ const manager = new NetworkManager(page);
318
+ await manager.blockRoute({ urlPattern: BlockPatterns.googleAnalytics });
319
+ await manager.blockRoute({ urlPattern: BlockPatterns.googleTagManager });
320
+ await manager.blockRoute({ urlPattern: BlockPatterns.facebookPixel });
321
+ await manager.blockRoute({ urlPattern: BlockPatterns.doubleClick });
322
+ }
323
+ /**
324
+ * Mock all API responses
325
+ */
326
+ export async function mockAllAPI(page, response) {
327
+ const manager = new NetworkManager(page);
328
+ await manager.mockRoute(response);
329
+ }
330
+ /**
331
+ * Wait for API request
332
+ */
333
+ export async function waitForAPIRequest(page, urlPattern, timeout = 30000) {
334
+ const manager = new NetworkManager(page);
335
+ return await manager.waitForRequest({ urlPattern, timeout });
336
+ }
337
+ /**
338
+ * Wait for API response
339
+ */
340
+ export async function waitForAPIResponse(page, urlPattern, timeout = 30000) {
341
+ const manager = new NetworkManager(page);
342
+ return await manager.waitForResponse({ urlPattern, timeout });
343
+ }