browser-debugger-cli 0.1.0 → 0.3.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 (442) hide show
  1. package/dist/__testfixtures__/cdpMessages.d.ts +1 -1
  2. package/dist/__testfixtures__/connectionTargets.d.ts +1 -1
  3. package/dist/__tests__/fixtures/schema-v0.2.1.golden.json +47 -0
  4. package/dist/__tests__/schema.contract.test.d.ts +19 -0
  5. package/dist/__tests__/schema.contract.test.d.ts.map +1 -0
  6. package/dist/__tests__/schema.contract.test.js +236 -0
  7. package/dist/__tests__/schema.contract.test.js.map +1 -0
  8. package/dist/__testutils__/assertions.d.ts +1 -1
  9. package/dist/__testutils__/testFixtures.d.ts +1 -1
  10. package/dist/cli/commands/cdp.js +1 -1
  11. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  12. package/dist/cli/commands/cleanup.js +12 -13
  13. package/dist/cli/commands/cleanup.js.map +1 -1
  14. package/dist/cli/commands/console.js +2 -2
  15. package/dist/cli/commands/details.js +3 -3
  16. package/dist/cli/commands/details.js.map +1 -1
  17. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -1
  18. package/dist/cli/commands/dom/helpers/errorHandler.js +4 -3
  19. package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -1
  20. package/dist/cli/commands/dom/index.js +1 -1
  21. package/dist/cli/commands/dom.d.ts.map +1 -0
  22. package/dist/cli/commands/dom.js +257 -0
  23. package/dist/cli/commands/dom.js.map +1 -0
  24. package/dist/cli/commands/domErrorHandler.d.ts +45 -0
  25. package/dist/cli/commands/domErrorHandler.d.ts.map +1 -0
  26. package/dist/cli/commands/domErrorHandler.js +71 -0
  27. package/dist/cli/commands/domErrorHandler.js.map +1 -0
  28. package/dist/cli/commands/domEvalHelpers.d.ts +52 -0
  29. package/dist/cli/commands/domEvalHelpers.d.ts.map +1 -0
  30. package/dist/cli/commands/domEvalHelpers.js +76 -0
  31. package/dist/cli/commands/domEvalHelpers.js.map +1 -0
  32. package/dist/cli/commands/domOptionsBuilder.d.ts +35 -0
  33. package/dist/cli/commands/domOptionsBuilder.d.ts.map +1 -0
  34. package/dist/cli/commands/domOptionsBuilder.js +51 -0
  35. package/dist/cli/commands/domOptionsBuilder.js.map +1 -0
  36. package/dist/cli/{collectors/helpers/selectorParser.d.ts → commands/domSelectorParser.d.ts} +1 -1
  37. package/dist/cli/commands/domSelectorParser.d.ts.map +1 -0
  38. package/dist/cli/{collectors/helpers/selectorParser.js → commands/domSelectorParser.js} +1 -1
  39. package/dist/cli/commands/domSelectorParser.js.map +1 -0
  40. package/dist/cli/commands/network.d.ts.map +1 -1
  41. package/dist/cli/commands/network.js +8 -5
  42. package/dist/cli/commands/network.js.map +1 -1
  43. package/dist/cli/commands/peek.d.ts.map +1 -1
  44. package/dist/cli/commands/peek.js +7 -7
  45. package/dist/cli/commands/peek.js.map +1 -1
  46. package/dist/cli/commands/start.d.ts.map +1 -1
  47. package/dist/cli/commands/start.js +19 -2
  48. package/dist/cli/commands/start.js.map +1 -1
  49. package/dist/cli/commands/status.d.ts.map +1 -1
  50. package/dist/cli/commands/status.js +13 -10
  51. package/dist/cli/commands/status.js.map +1 -1
  52. package/dist/cli/commands/stop.d.ts.map +1 -1
  53. package/dist/cli/commands/stop.js +7 -6
  54. package/dist/cli/commands/stop.js.map +1 -1
  55. package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
  56. package/dist/cli/formatters/previewFormatter.d.ts +1 -1
  57. package/dist/cli/formatters/previewFormatter.js +1 -1
  58. package/dist/cli/formatters/previewFormatter.js.map +1 -1
  59. package/dist/cli/formatters/statusFormatter.d.ts +6 -1
  60. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
  61. package/dist/cli/formatters/statusFormatter.js +49 -4
  62. package/dist/cli/formatters/statusFormatter.js.map +1 -1
  63. package/dist/cli/handlers/CommandRunner.d.ts.map +1 -1
  64. package/dist/cli/handlers/CommandRunner.js +5 -5
  65. package/dist/cli/handlers/CommandRunner.js.map +1 -1
  66. package/dist/cli/handlers/OutputBuilder.d.ts +1 -1
  67. package/dist/cli/handlers/daemonSessionController.d.ts +1 -1
  68. package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -1
  69. package/dist/cli/handlers/daemonSessionController.js +16 -45
  70. package/dist/cli/handlers/daemonSessionController.js.map +1 -1
  71. package/dist/cli/handlers/landingPage.d.ts +8 -0
  72. package/dist/cli/handlers/landingPage.d.ts.map +1 -0
  73. package/dist/cli/handlers/landingPage.js +8 -0
  74. package/dist/cli/handlers/landingPage.js.map +1 -0
  75. package/dist/cli/registry.js +10 -10
  76. package/dist/cli/registry.js.map +1 -1
  77. package/dist/collectors/__tests__/network.contract.test.js +25 -10
  78. package/dist/collectors/__tests__/network.contract.test.js.map +1 -1
  79. package/dist/collectors/console.d.ts +1 -1
  80. package/dist/collectors/console.js.map +1 -1
  81. package/dist/collectors/dom.d.ts +1 -1
  82. package/dist/collectors/network.d.ts +1 -1
  83. package/dist/collectors/network.js.map +1 -1
  84. package/dist/commandRegistry.d.ts +11 -0
  85. package/dist/commandRegistry.d.ts.map +1 -0
  86. package/dist/commandRegistry.js +45 -0
  87. package/dist/commandRegistry.js.map +1 -0
  88. package/dist/commands/__tests__/cdp.contract.test.d.ts +24 -0
  89. package/dist/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
  90. package/dist/commands/__tests__/cdp.contract.test.js +466 -0
  91. package/dist/commands/__tests__/cdp.contract.test.js.map +1 -0
  92. package/dist/commands/__tests__/domEval.contract.test.d.ts +17 -0
  93. package/dist/commands/__tests__/domEval.contract.test.d.ts.map +1 -0
  94. package/dist/commands/__tests__/domEval.contract.test.js +231 -0
  95. package/dist/commands/__tests__/domEval.contract.test.js.map +1 -0
  96. package/dist/commands/cdp.d.ts +8 -0
  97. package/dist/commands/cdp.d.ts.map +1 -0
  98. package/dist/commands/cdp.js +45 -0
  99. package/dist/commands/cdp.js.map +1 -0
  100. package/dist/commands/cleanup.d.ts +8 -0
  101. package/dist/commands/cleanup.d.ts.map +1 -0
  102. package/dist/commands/cleanup.js +170 -0
  103. package/dist/commands/cleanup.js.map +1 -0
  104. package/dist/commands/console.d.ts +8 -0
  105. package/dist/commands/console.d.ts.map +1 -0
  106. package/dist/commands/console.js +92 -0
  107. package/dist/commands/console.js.map +1 -0
  108. package/dist/commands/details.d.ts +8 -0
  109. package/dist/commands/details.d.ts.map +1 -0
  110. package/dist/commands/details.js +68 -0
  111. package/dist/commands/details.js.map +1 -0
  112. package/dist/commands/dom.d.ts +8 -0
  113. package/dist/commands/dom.d.ts.map +1 -0
  114. package/dist/commands/dom.js +249 -0
  115. package/dist/commands/dom.js.map +1 -0
  116. package/dist/commands/domErrorHandler.d.ts +45 -0
  117. package/dist/commands/domErrorHandler.d.ts.map +1 -0
  118. package/dist/commands/domErrorHandler.js +71 -0
  119. package/dist/commands/domErrorHandler.js.map +1 -0
  120. package/dist/commands/domEvalHelpers.d.ts +48 -0
  121. package/dist/commands/domEvalHelpers.d.ts.map +1 -0
  122. package/dist/commands/domEvalHelpers.js +72 -0
  123. package/dist/commands/domEvalHelpers.js.map +1 -0
  124. package/dist/commands/domOptionsBuilder.d.ts +35 -0
  125. package/dist/commands/domOptionsBuilder.d.ts.map +1 -0
  126. package/dist/commands/domOptionsBuilder.js +51 -0
  127. package/dist/commands/domOptionsBuilder.js.map +1 -0
  128. package/dist/commands/domSelectorParser.d.ts +20 -0
  129. package/dist/commands/domSelectorParser.d.ts.map +1 -0
  130. package/dist/commands/domSelectorParser.js +20 -0
  131. package/dist/commands/domSelectorParser.js.map +1 -0
  132. package/dist/commands/network.d.ts +8 -0
  133. package/dist/commands/network.d.ts.map +1 -0
  134. package/dist/commands/network.js +41 -0
  135. package/dist/commands/network.js.map +1 -0
  136. package/dist/commands/peek.d.ts +8 -0
  137. package/dist/commands/peek.d.ts.map +1 -0
  138. package/dist/commands/peek.js +115 -0
  139. package/dist/commands/peek.js.map +1 -0
  140. package/dist/commands/shared/CommandRunner.d.ts +62 -0
  141. package/dist/commands/shared/CommandRunner.d.ts.map +1 -0
  142. package/dist/commands/shared/CommandRunner.js +97 -0
  143. package/dist/commands/shared/CommandRunner.js.map +1 -0
  144. package/dist/commands/shared/OutputBuilder.d.ts +60 -0
  145. package/dist/commands/shared/OutputBuilder.d.ts.map +1 -0
  146. package/dist/commands/shared/OutputBuilder.js +138 -0
  147. package/dist/commands/shared/OutputBuilder.js.map +1 -0
  148. package/dist/commands/shared/commonOptions.d.ts +54 -0
  149. package/dist/commands/shared/commonOptions.d.ts.map +1 -0
  150. package/dist/commands/shared/commonOptions.js +65 -0
  151. package/dist/commands/shared/commonOptions.js.map +1 -0
  152. package/dist/commands/shared/daemonSessionController.d.ts +23 -0
  153. package/dist/commands/shared/daemonSessionController.d.ts.map +1 -0
  154. package/dist/commands/shared/daemonSessionController.js +79 -0
  155. package/dist/commands/shared/daemonSessionController.js.map +1 -0
  156. package/dist/commands/shared/landingPage.d.ts +8 -0
  157. package/dist/commands/shared/landingPage.d.ts.map +1 -0
  158. package/dist/commands/shared/landingPage.js +8 -0
  159. package/dist/commands/shared/landingPage.js.map +1 -0
  160. package/dist/commands/shared/sessionController.d.ts +21 -0
  161. package/dist/commands/shared/sessionController.d.ts.map +1 -0
  162. package/dist/commands/shared/sessionController.js +54 -0
  163. package/dist/commands/shared/sessionController.js.map +1 -0
  164. package/dist/commands/start.d.ts +9 -0
  165. package/dist/commands/start.d.ts.map +1 -0
  166. package/dist/commands/start.js +85 -0
  167. package/dist/commands/start.js.map +1 -0
  168. package/dist/{cli/commands/query.d.ts → commands/status.d.ts} +3 -3
  169. package/dist/commands/status.d.ts.map +1 -0
  170. package/dist/commands/status.js +88 -0
  171. package/dist/commands/status.js.map +1 -0
  172. package/dist/commands/stop.d.ts +8 -0
  173. package/dist/commands/stop.d.ts.map +1 -0
  174. package/dist/commands/stop.js +152 -0
  175. package/dist/commands/stop.js.map +1 -0
  176. package/dist/commands.d.ts +11 -0
  177. package/dist/commands.d.ts.map +1 -0
  178. package/dist/commands.js +45 -0
  179. package/dist/commands.js.map +1 -0
  180. package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -1
  181. package/dist/connection/__tests__/cdp.contract.test.js +1 -2
  182. package/dist/connection/__tests__/cdp.contract.test.js.map +1 -1
  183. package/dist/connection/__tests__/finder.contract.test.js +1 -1
  184. package/dist/connection/__tests__/finder.contract.test.js.map +1 -1
  185. package/dist/connection/cdp.d.ts +1 -1
  186. package/dist/connection/cdp.js.map +1 -1
  187. package/dist/connection/domOperations.d.ts +48 -0
  188. package/dist/connection/domOperations.d.ts.map +1 -0
  189. package/dist/connection/domOperations.js +104 -0
  190. package/dist/connection/domOperations.js.map +1 -0
  191. package/dist/connection/finder.js.map +1 -1
  192. package/dist/connection/launcher.d.ts +7 -3
  193. package/dist/connection/launcher.d.ts.map +1 -1
  194. package/dist/connection/launcher.js +82 -21
  195. package/dist/connection/launcher.js.map +1 -1
  196. package/dist/constants.d.ts +17 -0
  197. package/dist/constants.d.ts.map +1 -1
  198. package/dist/constants.js +28 -0
  199. package/dist/constants.js.map +1 -1
  200. package/dist/daemon/__tests__/ipcServer.contract.test.js +25 -11
  201. package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -1
  202. package/dist/daemon/ipcServer.d.ts.map +1 -1
  203. package/dist/daemon/ipcServer.js +86 -6
  204. package/dist/daemon/ipcServer.js.map +1 -1
  205. package/dist/daemon/launcher.d.ts.map +1 -1
  206. package/dist/daemon/launcher.js +8 -6
  207. package/dist/daemon/launcher.js.map +1 -1
  208. package/dist/daemon/startSession.d.ts +2 -2
  209. package/dist/daemon/startSession.d.ts.map +1 -1
  210. package/dist/daemon/startSession.js +14 -11
  211. package/dist/daemon/startSession.js.map +1 -1
  212. package/dist/daemon/worker.d.ts +1 -1
  213. package/dist/daemon/worker.js +179 -52
  214. package/dist/daemon/worker.js.map +1 -1
  215. package/dist/{cli/collectors/helpers/domCache.d.ts → dom/cache.d.ts} +1 -5
  216. package/dist/dom/cache.d.ts.map +1 -0
  217. package/dist/{cli/collectors/helpers/domCache.js → dom/cache.js} +5 -19
  218. package/dist/dom/cache.js.map +1 -0
  219. package/dist/dom/index.d.ts +9 -0
  220. package/dist/dom/index.d.ts.map +1 -0
  221. package/dist/dom/index.js +9 -0
  222. package/dist/dom/index.js.map +1 -0
  223. package/dist/{cli/collectors/helpers/domQuery.d.ts → dom/query.d.ts} +5 -2
  224. package/dist/dom/query.d.ts.map +1 -0
  225. package/dist/{cli/collectors/helpers/domQuery.js → dom/query.js} +11 -7
  226. package/dist/dom/query.js.map +1 -0
  227. package/dist/index.js +117 -35
  228. package/dist/index.js.map +1 -1
  229. package/dist/ipc/__tests__/client.contract.test.js +11 -1
  230. package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
  231. package/dist/ipc/client.d.ts +17 -4
  232. package/dist/ipc/client.d.ts.map +1 -1
  233. package/dist/ipc/client.js +26 -6
  234. package/dist/ipc/client.js.map +1 -1
  235. package/dist/ipc/commands.d.ts +52 -1
  236. package/dist/ipc/commands.d.ts.map +1 -1
  237. package/dist/ipc/commands.js +8 -0
  238. package/dist/ipc/commands.js.map +1 -1
  239. package/dist/ipc/types.d.ts +34 -3
  240. package/dist/ipc/types.d.ts.map +1 -1
  241. package/dist/ipc/types.js.map +1 -1
  242. package/dist/session/metadata.d.ts +2 -2
  243. package/dist/session/metadata.d.ts.map +1 -1
  244. package/dist/session/output.d.ts +1 -1
  245. package/dist/session/process.d.ts.map +1 -1
  246. package/dist/session/process.js +4 -3
  247. package/dist/session/process.js.map +1 -1
  248. package/dist/session/queryCache.d.ts +36 -0
  249. package/dist/session/queryCache.d.ts.map +1 -0
  250. package/dist/session/queryCache.js +66 -0
  251. package/dist/session/queryCache.js.map +1 -0
  252. package/dist/telemetry/__tests__/network.contract.test.d.ts +28 -0
  253. package/dist/telemetry/__tests__/network.contract.test.d.ts.map +1 -0
  254. package/dist/telemetry/__tests__/network.contract.test.js +540 -0
  255. package/dist/telemetry/__tests__/network.contract.test.js.map +1 -0
  256. package/dist/telemetry/console.d.ts +19 -0
  257. package/dist/telemetry/console.d.ts.map +1 -0
  258. package/dist/telemetry/console.js +87 -0
  259. package/dist/telemetry/console.js.map +1 -0
  260. package/dist/telemetry/dom.d.ts +21 -0
  261. package/dist/telemetry/dom.d.ts.map +1 -0
  262. package/dist/telemetry/dom.js +99 -0
  263. package/dist/telemetry/dom.js.map +1 -0
  264. package/dist/telemetry/network.d.ts +33 -0
  265. package/dist/telemetry/network.d.ts.map +1 -0
  266. package/dist/telemetry/network.js +191 -0
  267. package/dist/telemetry/network.js.map +1 -0
  268. package/dist/types.d.ts +25 -1
  269. package/dist/types.d.ts.map +1 -1
  270. package/dist/ui/errors.d.ts +39 -0
  271. package/dist/ui/errors.d.ts.map +1 -0
  272. package/dist/ui/errors.js +48 -0
  273. package/dist/ui/errors.js.map +1 -0
  274. package/dist/ui/formatters/cookies.d.ts +32 -0
  275. package/dist/ui/formatters/cookies.d.ts.map +1 -0
  276. package/dist/ui/formatters/cookies.js +45 -0
  277. package/dist/ui/formatters/cookies.js.map +1 -0
  278. package/dist/ui/formatters/details.d.ts +10 -0
  279. package/dist/ui/formatters/details.d.ts.map +1 -0
  280. package/dist/ui/formatters/details.js +61 -0
  281. package/dist/ui/formatters/details.js.map +1 -0
  282. package/dist/ui/formatters/dom.d.ts +135 -0
  283. package/dist/ui/formatters/dom.d.ts.map +1 -0
  284. package/dist/ui/formatters/dom.js +193 -0
  285. package/dist/ui/formatters/dom.js.map +1 -0
  286. package/dist/ui/formatters/index.d.ts +11 -0
  287. package/dist/ui/formatters/index.d.ts.map +1 -0
  288. package/dist/ui/formatters/index.js +11 -0
  289. package/dist/ui/formatters/index.js.map +1 -0
  290. package/dist/ui/formatters/preview.d.ts +25 -0
  291. package/dist/ui/formatters/preview.d.ts.map +1 -0
  292. package/dist/ui/formatters/preview.js +182 -0
  293. package/dist/ui/formatters/preview.js.map +1 -0
  294. package/dist/ui/formatters/status.d.ts +39 -0
  295. package/dist/ui/formatters/status.d.ts.map +1 -0
  296. package/dist/ui/formatters/status.js +153 -0
  297. package/dist/ui/formatters/status.js.map +1 -0
  298. package/dist/ui/formatting.d.ts +300 -0
  299. package/dist/ui/formatting.d.ts.map +1 -0
  300. package/dist/ui/formatting.js +454 -0
  301. package/dist/ui/formatting.js.map +1 -0
  302. package/dist/ui/messages/chrome.d.ts +172 -0
  303. package/dist/ui/messages/chrome.d.ts.map +1 -0
  304. package/dist/ui/messages/chrome.js +253 -0
  305. package/dist/ui/messages/chrome.js.map +1 -0
  306. package/dist/ui/messages/commands.d.ts +88 -0
  307. package/dist/ui/messages/commands.d.ts.map +1 -0
  308. package/dist/ui/messages/commands.js +150 -0
  309. package/dist/ui/messages/commands.js.map +1 -0
  310. package/dist/ui/messages/consoleMessages.d.ts +39 -0
  311. package/dist/ui/messages/consoleMessages.d.ts.map +1 -0
  312. package/dist/ui/messages/consoleMessages.js +48 -0
  313. package/dist/ui/messages/consoleMessages.js.map +1 -0
  314. package/dist/ui/messages/debug.d.ts +182 -0
  315. package/dist/ui/messages/debug.d.ts.map +1 -0
  316. package/dist/ui/messages/debug.js +243 -0
  317. package/dist/ui/messages/debug.js.map +1 -0
  318. package/dist/ui/messages/errors.d.ts +91 -0
  319. package/dist/ui/messages/errors.d.ts.map +1 -0
  320. package/dist/ui/messages/errors.js +135 -0
  321. package/dist/ui/messages/errors.js.map +1 -0
  322. package/dist/ui/messages/index.d.ts +12 -0
  323. package/dist/ui/messages/index.d.ts.map +1 -0
  324. package/dist/ui/messages/index.js +12 -0
  325. package/dist/ui/messages/index.js.map +1 -0
  326. package/dist/ui/messages/internal.d.ts +30 -0
  327. package/dist/ui/messages/internal.d.ts.map +1 -0
  328. package/dist/ui/messages/internal.js +42 -0
  329. package/dist/ui/messages/internal.js.map +1 -0
  330. package/dist/ui/messages/preview.d.ts +51 -0
  331. package/dist/ui/messages/preview.d.ts.map +1 -0
  332. package/dist/ui/messages/preview.js +76 -0
  333. package/dist/ui/messages/preview.js.map +1 -0
  334. package/dist/ui/messages/session.d.ts +54 -0
  335. package/dist/ui/messages/session.d.ts.map +1 -0
  336. package/dist/ui/messages/session.js +77 -0
  337. package/dist/ui/messages/session.js.map +1 -0
  338. package/dist/ui/messages/validation.d.ts +34 -0
  339. package/dist/ui/messages/validation.d.ts.map +1 -0
  340. package/dist/ui/messages/validation.js +38 -0
  341. package/dist/ui/messages/validation.js.map +1 -0
  342. package/dist/utils/__tests__/filters.unit.test.js +1 -1
  343. package/dist/utils/cdpHandlers.d.ts +1 -1
  344. package/dist/utils/cdpHandlers.js +1 -1
  345. package/dist/utils/chromeDiagnostics.d.ts +0 -12
  346. package/dist/utils/chromeDiagnostics.d.ts.map +1 -1
  347. package/dist/utils/chromeDiagnostics.js +0 -51
  348. package/dist/utils/chromeDiagnostics.js.map +1 -1
  349. package/dist/utils/filters.js +1 -1
  350. package/dist/utils/filters.js.map +1 -1
  351. package/dist/utils/http.d.ts +1 -1
  352. package/dist/utils/http.js.map +1 -1
  353. package/dist/utils/logger.d.ts +68 -12
  354. package/dist/utils/logger.d.ts.map +1 -1
  355. package/dist/utils/logger.js +62 -12
  356. package/dist/utils/logger.js.map +1 -1
  357. package/dist/utils/pageReadiness.d.ts +46 -0
  358. package/dist/utils/pageReadiness.d.ts.map +1 -0
  359. package/dist/utils/pageReadiness.js +271 -0
  360. package/dist/utils/pageReadiness.js.map +1 -0
  361. package/dist/utils/ui.d.ts +36 -0
  362. package/dist/utils/ui.d.ts.map +1 -0
  363. package/dist/utils/ui.js +47 -0
  364. package/dist/utils/ui.js.map +1 -0
  365. package/dist/utils/url.d.ts +60 -26
  366. package/dist/utils/url.d.ts.map +1 -1
  367. package/dist/utils/url.js +130 -84
  368. package/dist/utils/url.js.map +1 -1
  369. package/package.json +2 -5
  370. package/dist/cli/collectors/dom.d.ts.map +0 -1
  371. package/dist/cli/collectors/dom.js +0 -361
  372. package/dist/cli/collectors/dom.js.map +0 -1
  373. package/dist/cli/collectors/helpers/domCache.d.ts.map +0 -1
  374. package/dist/cli/collectors/helpers/domCache.js.map +0 -1
  375. package/dist/cli/collectors/helpers/domQuery.d.ts.map +0 -1
  376. package/dist/cli/collectors/helpers/domQuery.js.map +0 -1
  377. package/dist/cli/collectors/helpers/selectorParser.d.ts.map +0 -1
  378. package/dist/cli/collectors/helpers/selectorParser.js.map +0 -1
  379. package/dist/cli/commands/__tests__/ipcTest.test.d.ts +0 -2
  380. package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +0 -1
  381. package/dist/cli/commands/__tests__/ipcTest.test.js +0 -37
  382. package/dist/cli/commands/__tests__/ipcTest.test.js.map +0 -1
  383. package/dist/cli/commands/ipcTest.d.ts +0 -23
  384. package/dist/cli/commands/ipcTest.d.ts.map +0 -1
  385. package/dist/cli/commands/ipcTest.js +0 -181
  386. package/dist/cli/commands/ipcTest.js.map +0 -1
  387. package/dist/cli/commands/query.d.ts.map +0 -1
  388. package/dist/cli/commands/query.js +0 -127
  389. package/dist/cli/commands/query.js.map +0 -1
  390. package/dist/cli/handlers/ChromeBootstrap.d.ts +0 -24
  391. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +0 -1
  392. package/dist/cli/handlers/ChromeBootstrap.js +0 -50
  393. package/dist/cli/handlers/ChromeBootstrap.js.map +0 -1
  394. package/dist/cli/handlers/OutputWriter.d.ts +0 -15
  395. package/dist/cli/handlers/OutputWriter.d.ts.map +0 -1
  396. package/dist/cli/handlers/OutputWriter.js +0 -34
  397. package/dist/cli/handlers/OutputWriter.js.map +0 -1
  398. package/dist/cli/handlers/PreviewWriter.d.ts +0 -52
  399. package/dist/cli/handlers/PreviewWriter.d.ts.map +0 -1
  400. package/dist/cli/handlers/PreviewWriter.js +0 -119
  401. package/dist/cli/handlers/PreviewWriter.js.map +0 -1
  402. package/dist/cli/handlers/SessionLock.d.ts +0 -16
  403. package/dist/cli/handlers/SessionLock.d.ts.map +0 -1
  404. package/dist/cli/handlers/SessionLock.js +0 -38
  405. package/dist/cli/handlers/SessionLock.js.map +0 -1
  406. package/dist/cli/handlers/SessionLoop.d.ts +0 -19
  407. package/dist/cli/handlers/SessionLoop.d.ts.map +0 -1
  408. package/dist/cli/handlers/SessionLoop.js +0 -47
  409. package/dist/cli/handlers/SessionLoop.js.map +0 -1
  410. package/dist/cli/handlers/ShutdownController.d.ts +0 -38
  411. package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
  412. package/dist/cli/handlers/ShutdownController.js +0 -83
  413. package/dist/cli/handlers/ShutdownController.js.map +0 -1
  414. package/dist/cli/handlers/SignalHandler.d.ts +0 -35
  415. package/dist/cli/handlers/SignalHandler.d.ts.map +0 -1
  416. package/dist/cli/handlers/SignalHandler.js +0 -81
  417. package/dist/cli/handlers/SignalHandler.js.map +0 -1
  418. package/dist/cli/handlers/TargetSetup.d.ts +0 -42
  419. package/dist/cli/handlers/TargetSetup.d.ts.map +0 -1
  420. package/dist/cli/handlers/TargetSetup.js +0 -87
  421. package/dist/cli/handlers/TargetSetup.js.map +0 -1
  422. package/dist/connection/__tests__/tabs.contract.test.d.ts +0 -2
  423. package/dist/connection/__tests__/tabs.contract.test.d.ts.map +0 -1
  424. package/dist/connection/__tests__/tabs.contract.test.js +0 -137
  425. package/dist/connection/__tests__/tabs.contract.test.js.map +0 -1
  426. package/dist/connection/tabs.d.ts +0 -82
  427. package/dist/connection/tabs.d.ts.map +0 -1
  428. package/dist/connection/tabs.js +0 -577
  429. package/dist/connection/tabs.js.map +0 -1
  430. package/dist/session/BdgSession.d.ts +0 -129
  431. package/dist/session/BdgSession.d.ts.map +0 -1
  432. package/dist/session/BdgSession.js +0 -270
  433. package/dist/session/BdgSession.js.map +0 -1
  434. package/dist/session/index.d.ts +0 -15
  435. package/dist/session/index.d.ts.map +0 -1
  436. package/dist/session/index.js +0 -23
  437. package/dist/session/index.js.map +0 -1
  438. package/dist/utils/validation.d.ts +0 -12
  439. package/dist/utils/validation.d.ts.map +0 -1
  440. package/dist/utils/validation.js +0 -20
  441. package/dist/utils/validation.js.map +0 -1
  442. /package/dist/cli/{collectors → commands}/dom.d.ts +0 -0
@@ -1,577 +0,0 @@
1
- import { PAGE_TARGET_TYPE, BLANK_PAGE_URL, CDP_NEW_WINDOW_FLAG, CDP_FLATTEN_SESSION_FLAG, HTTP_LOCALHOST, DEFAULT_TARGET_READY_TIMEOUT_MS, TARGET_READY_POLL_INTERVAL_MS, LOADING_PAGE_ADDITIONAL_WAIT_MS, DEFAULT_VERIFICATION_TIMEOUT_MS, VERIFICATION_INITIAL_DELAY_MS, VERIFICATION_MAX_DELAY_MS, VERIFICATION_BACKOFF_MULTIPLIER, DEFAULT_REUSE_TAB, } from '../constants.js';
2
- import { getErrorMessage } from '../utils/errors.js';
3
- import { fetchCDPTargetById } from '../utils/http.js';
4
- import { normalizeUrl } from '../utils/url.js';
5
- // Tab Matching Score Thresholds
6
- const EXACT_URL_MATCH_SCORE = 100;
7
- const HOST_AND_PATH_MATCH_SCORE = 90;
8
- const HOST_AND_PATH_PREFIX_MATCH_SCORE = 70;
9
- const HOST_ONLY_MATCH_SCORE = 50;
10
- const SUBSTRING_MATCH_SCORE = 30;
11
- const NO_MATCH_SCORE = 0;
12
- // Message Templates
13
- const MULTIPLE_TABS_WARNING_TEMPLATE = (score, url) => `Warning: Multiple tabs match equally (score ${score}), using: ${url}`;
14
- const FOUND_EXISTING_TAB_MESSAGE = (url) => `Found existing tab: ${url}`;
15
- const NAVIGATING_TAB_MESSAGE = (url) => `Navigating tab to: ${url}`;
16
- const CREATING_NEW_TAB_MESSAGE = (url) => `Creating new tab for: ${url}`;
17
- // Error Messages
18
- const CDP_CREATE_TARGET_FALLBACK_MESSAGE = 'CDP Target.createTarget failed, attempting HTTP fallback...';
19
- const HTTP_NEW_TAB_FAILED_ERROR = (statusText) => `HTTP /json/new failed: ${statusText}`;
20
- const FAILED_TO_CREATE_TAB_ERROR = (details) => `Failed to create new tab: ${details}`;
21
- const NAVIGATION_FAILED_ERROR = (errorText) => `Navigation failed: ${errorText}`;
22
- const TARGET_NOT_READY_ERROR = (timeoutMs) => `Target did not become ready within ${timeoutMs}ms`;
23
- // Environment variable for timeout override with validation
24
- /**
25
- * Parse and validate the BDG_TARGET_VERIFY_TIMEOUT environment variable.
26
- *
27
- * Converts string environment variable to number with validation and fallback.
28
- * Invalid values (non-numeric, negative, zero) fall back to the default timeout.
29
- *
30
- * @param envValue - Raw environment variable value (may be undefined)
31
- * @returns Parsed timeout in milliseconds, or DEFAULT_VERIFICATION_TIMEOUT_MS if invalid
32
- *
33
- * @remarks
34
- * - Accepts positive integers only
35
- * - Logs warning for invalid values before falling back
36
- * - Used to override default verification timeout via environment configuration
37
- */
38
- const parseVerificationTimeout = (envValue) => {
39
- if (!envValue) {
40
- return DEFAULT_VERIFICATION_TIMEOUT_MS;
41
- }
42
- const parsed = parseInt(envValue, 10);
43
- if (!Number.isFinite(parsed) || parsed <= 0) {
44
- console.error(`Invalid BDG_TARGET_VERIFY_TIMEOUT value: "${envValue}". Must be a positive number. Using default: ${DEFAULT_VERIFICATION_TIMEOUT_MS}ms`);
45
- return DEFAULT_VERIFICATION_TIMEOUT_MS;
46
- }
47
- return parsed;
48
- };
49
- const VERIFICATION_TIMEOUT_OVERRIDE = parseVerificationTimeout(process.env['BDG_TARGET_VERIFY_TIMEOUT']);
50
- // Strategy Names
51
- const CDP_STRATEGY = 'CDP';
52
- const HTTP_STRATEGY = 'HTTP';
53
- // Error Types
54
- const CDP_COMMAND_FAILED = 'CDP_COMMAND_FAILED';
55
- const VERIFICATION_TIMEOUT_ERROR_TYPE = 'VERIFICATION_TIMEOUT';
56
- const HTTP_REQUEST_FAILED = 'HTTP_REQUEST_FAILED';
57
- // Enhanced Error Messages
58
- const VERIFICATION_TIMEOUT_ERROR = (targetId, timeoutMs, attempts) => `Chrome acknowledged Target.createTarget (ID: ${targetId}) but target verification timed out after ${timeoutMs}ms (${attempts} attempts). The tab was created successfully but is not yet visible in Chrome's target list. This commonly occurs in headless/managed Chrome environments where target registration can take 1-5 seconds. Increase timeout with BDG_TARGET_VERIFY_TIMEOUT environment variable (e.g., BDG_TARGET_VERIFY_TIMEOUT=10000 for 10 seconds).`;
59
- /**
60
- * Score how well a tab matches the search URL.
61
- *
62
- * Uses a weighted scoring system where exact matches score highest (100),
63
- * followed by host+path matches (90), then host-only matches (50).
64
- * This prioritization ensures users get the most specific match first,
65
- * while still finding reasonable alternatives when exact matches don't exist.
66
- *
67
- * Fallback to substring matching (30) handles cases where URL parsing fails
68
- * due to malformed URLs or non-standard protocols.
69
- *
70
- * @param tab - Target to score
71
- * @param searchUrl - Normalized URL to match against
72
- * @returns Match score (0-100, higher = better match)
73
- */
74
- function scoreTabMatch(tab, searchUrl) {
75
- if (tab.url === searchUrl) {
76
- return EXACT_URL_MATCH_SCORE;
77
- }
78
- try {
79
- const currentTabUrl = new URL(tab.url);
80
- const targetUrl = new URL(searchUrl);
81
- if (currentTabUrl.host === targetUrl.host && currentTabUrl.pathname === targetUrl.pathname) {
82
- return HOST_AND_PATH_MATCH_SCORE;
83
- }
84
- if (currentTabUrl.host === targetUrl.host &&
85
- currentTabUrl.pathname.startsWith(targetUrl.pathname)) {
86
- return HOST_AND_PATH_PREFIX_MATCH_SCORE;
87
- }
88
- if (currentTabUrl.host === targetUrl.host) {
89
- return HOST_ONLY_MATCH_SCORE;
90
- }
91
- }
92
- catch {
93
- // URL parsing failed - fall back to substring matching
94
- }
95
- if (tab.url.includes(searchUrl)) {
96
- return SUBSTRING_MATCH_SCORE;
97
- }
98
- return NO_MATCH_SCORE;
99
- }
100
- /**
101
- * Find the best matching target from a list of tabs.
102
- *
103
- * Filters to page-type targets only because other target types (extensions,
104
- * service workers, etc.) cannot be navigated to user URLs. The scoring
105
- * system handles ambiguous matches by warning users when multiple tabs
106
- * have identical non-perfect scores, helping debug URL matching issues.
107
- *
108
- * @param normalizedUrl - Target URL to find (must be pre-normalized)
109
- * @param targets - List of available targets
110
- * @returns Best matching target or null if no match found
111
- */
112
- export function findBestTarget(normalizedUrl, targets) {
113
- const searchUrl = normalizedUrl;
114
- const pageTargets = targets.filter((target) => target.type === PAGE_TARGET_TYPE);
115
- if (pageTargets.length === 0) {
116
- return null;
117
- }
118
- const scored = pageTargets
119
- .map((target) => ({ target, score: scoreTabMatch(target, searchUrl) }))
120
- .filter(({ score }) => score > 0)
121
- .sort((a, b) => b.score - a.score);
122
- if (scored.length === 0) {
123
- return null;
124
- }
125
- const bestMatch = scored[0];
126
- const secondBestMatch = scored[1];
127
- if (scored.length > 1 &&
128
- bestMatch &&
129
- secondBestMatch &&
130
- bestMatch.score === secondBestMatch.score &&
131
- bestMatch.score < 100) {
132
- console.error(MULTIPLE_TABS_WARNING_TEMPLATE(bestMatch.score, bestMatch.target.url));
133
- }
134
- return bestMatch ? bestMatch.target : null;
135
- }
136
- /**
137
- * Verify target exists with configurable timeout and exponential backoff.
138
- *
139
- * Uses a timeout-based approach rather than fixed attempt count to better
140
- * handle variable Chrome registration delays in enterprise/headless environments.
141
- * Logs timing information for debugging verification issues.
142
- */
143
- async function verifyTargetWithBackoff(targetId, port, timeoutMs = VERIFICATION_TIMEOUT_OVERRIDE) {
144
- const startTime = Date.now();
145
- let attemptCount = 0;
146
- let currentDelayMs = VERIFICATION_INITIAL_DELAY_MS;
147
- while (Date.now() - startTime < timeoutMs) {
148
- attemptCount++;
149
- try {
150
- const target = await fetchCDPTargetById(targetId, port);
151
- if (target) {
152
- const totalDuration = Date.now() - startTime;
153
- console.error(`Target verification succeeded: ${targetId} (${totalDuration}ms, ${attemptCount} attempts)`);
154
- return { target };
155
- }
156
- const remainingTimeMs = timeoutMs - (Date.now() - startTime);
157
- if (remainingTimeMs <= currentDelayMs) {
158
- break;
159
- }
160
- await new Promise((resolve) => setTimeout(resolve, currentDelayMs));
161
- currentDelayMs = Math.min(currentDelayMs * VERIFICATION_BACKOFF_MULTIPLIER, VERIFICATION_MAX_DELAY_MS);
162
- }
163
- catch {
164
- const remainingTimeMs = timeoutMs - (Date.now() - startTime);
165
- if (remainingTimeMs <= currentDelayMs) {
166
- break;
167
- }
168
- await new Promise((resolve) => setTimeout(resolve, currentDelayMs));
169
- currentDelayMs = Math.min(currentDelayMs * VERIFICATION_BACKOFF_MULTIPLIER, VERIFICATION_MAX_DELAY_MS);
170
- }
171
- }
172
- const totalDuration = Date.now() - startTime;
173
- console.error(`Target verification timeout: ${targetId}`, {
174
- duration: totalDuration,
175
- attempts: attemptCount,
176
- timeout: timeoutMs,
177
- });
178
- throw new Error(VERIFICATION_TIMEOUT_ERROR(targetId, timeoutMs, attemptCount));
179
- }
180
- /**
181
- * Attempt tab creation via CDP with enhanced verification.
182
- *
183
- * Distinguishes between CDP command failures (should trigger HTTP fallback)
184
- * and verification timeouts (should fail without fallback to prevent duplicate tabs).
185
- *
186
- * Uses configurable timeout to handle Chrome registration delays in
187
- * enterprise/headless environments where targets take 0.5-5s to appear.
188
- */
189
- async function attemptCDPCreation(normalizedUrl, cdp) {
190
- const startTime = Date.now();
191
- let cdpResponse;
192
- try {
193
- cdpResponse = (await cdp.send('Target.createTarget', {
194
- url: normalizedUrl,
195
- newWindow: CDP_NEW_WINDOW_FLAG,
196
- }));
197
- }
198
- catch (error) {
199
- return {
200
- success: false,
201
- error: {
202
- type: CDP_COMMAND_FAILED,
203
- message: getErrorMessage(error),
204
- originalError: error,
205
- context: {
206
- stage: 'cdp_command',
207
- },
208
- },
209
- strategy: CDP_STRATEGY,
210
- timing: {
211
- attemptStartMs: startTime,
212
- durationMs: Date.now() - startTime,
213
- },
214
- };
215
- }
216
- try {
217
- const { target } = await verifyTargetWithBackoff(cdpResponse.targetId, cdp.getPort(), VERIFICATION_TIMEOUT_OVERRIDE);
218
- return {
219
- success: true,
220
- target,
221
- strategy: CDP_STRATEGY,
222
- timing: {
223
- attemptStartMs: startTime,
224
- durationMs: Date.now() - startTime,
225
- },
226
- };
227
- }
228
- catch (verificationError) {
229
- return {
230
- success: false,
231
- error: {
232
- type: VERIFICATION_TIMEOUT_ERROR_TYPE,
233
- message: getErrorMessage(verificationError),
234
- originalError: verificationError,
235
- context: {
236
- targetId: cdpResponse.targetId,
237
- stage: 'verification',
238
- },
239
- },
240
- strategy: CDP_STRATEGY,
241
- timing: {
242
- attemptStartMs: startTime,
243
- durationMs: Date.now() - startTime,
244
- },
245
- };
246
- }
247
- }
248
- /**
249
- * Attempt tab creation via HTTP endpoint.
250
- *
251
- * Uses Chrome's /json/new HTTP endpoint as a fallback when CDP fails.
252
- * This endpoint is more forgiving on Chrome instances with restricted
253
- * Target domain access (e.g., remote-debugging with atypical flags).
254
- * The HTTP handler waits for tab readiness before responding.
255
- */
256
- async function attemptHTTPCreation(normalizedUrl, port) {
257
- const startTime = Date.now();
258
- try {
259
- const createResponse = await fetch(`http://${HTTP_LOCALHOST}:${port}/json/new?${encodeURIComponent(normalizedUrl)}`);
260
- if (!createResponse.ok) {
261
- throw new Error(HTTP_NEW_TAB_FAILED_ERROR(createResponse.statusText));
262
- }
263
- const target = (await createResponse.json());
264
- return {
265
- success: true,
266
- target,
267
- strategy: HTTP_STRATEGY,
268
- timing: {
269
- attemptStartMs: startTime,
270
- durationMs: Date.now() - startTime,
271
- },
272
- };
273
- }
274
- catch (error) {
275
- return {
276
- success: false,
277
- error: {
278
- type: HTTP_REQUEST_FAILED,
279
- message: getErrorMessage(error),
280
- originalError: error,
281
- context: {
282
- ...(error instanceof Error &&
283
- 'status' in error &&
284
- error.status !== undefined
285
- ? { httpStatus: error.status }
286
- : {}),
287
- },
288
- },
289
- strategy: HTTP_STRATEGY,
290
- timing: {
291
- attemptStartMs: startTime,
292
- durationMs: Date.now() - startTime,
293
- },
294
- };
295
- }
296
- }
297
- /**
298
- * Create a new tab with the specified URL using CDP.
299
- *
300
- * Uses a two-phase approach with enhanced error handling:
301
- * - CDP command failures → HTTP fallback (prevents total failure)
302
- * - Verification timeouts → Fail fast with targeted error (prevents duplicate tabs)
303
- *
304
- * Configurable verification timeout via BDG_TARGET_VERIFY_TIMEOUT environment
305
- * variable to handle slow Chrome registration in enterprise/headless environments.
306
- *
307
- * @param normalizedUrl - URL to open in the new tab (must be pre-normalized)
308
- * @param cdp - CDP connection instance
309
- * @returns Target information for the new tab
310
- * @throws Error if tab creation fails or verification times out
311
- */
312
- export async function createNewTab(normalizedUrl, cdp) {
313
- const cdpPort = cdp.getPort();
314
- // Primary strategy: CDP creation with enhanced verification
315
- const cdpCreationResult = await attemptCDPCreation(normalizedUrl, cdp);
316
- if (cdpCreationResult.success && cdpCreationResult.target) {
317
- return cdpCreationResult.target;
318
- }
319
- if (cdpCreationResult.error?.type === VERIFICATION_TIMEOUT_ERROR_TYPE) {
320
- throw new Error(cdpCreationResult.error.message);
321
- }
322
- console.error(CDP_CREATE_TARGET_FALLBACK_MESSAGE, {
323
- strategy: cdpCreationResult.strategy,
324
- errorType: cdpCreationResult.error?.type,
325
- stage: cdpCreationResult.error?.context?.stage,
326
- duration: cdpCreationResult.timing.durationMs,
327
- error: cdpCreationResult.error?.message,
328
- });
329
- // Fallback strategy: HTTP creation
330
- const httpCreationResult = await attemptHTTPCreation(normalizedUrl, cdpPort);
331
- if (httpCreationResult.success && httpCreationResult.target) {
332
- return httpCreationResult.target;
333
- }
334
- throw new Error(FAILED_TO_CREATE_TAB_ERROR(`CDP command failed (${cdpCreationResult.error?.message}), HTTP fallback also failed (${httpCreationResult.error?.message})`));
335
- }
336
- /**
337
- * Fetch a specific target by ID from Chrome's target list.
338
- *
339
- * Encapsulates the HTTP fetch and JSON parsing logic with error handling.
340
- * Returns null when the target is not found or fetch fails, allowing
341
- * the caller to decide on retry logic.
342
- */
343
- async function fetchTargetById(targetId, port) {
344
- return fetchCDPTargetById(targetId, port);
345
- }
346
- /**
347
- * Check if a target is ready for interaction.
348
- *
349
- * A target is considered ready when its URL matches the expected URL
350
- * or shows a valid intermediate state. The about:blank check handles
351
- * the common case where Chrome shows a blank page during navigation.
352
- */
353
- function isTargetReady(target, expectedUrl) {
354
- return (target.url === expectedUrl ||
355
- target.url.startsWith(expectedUrl) ||
356
- target.url === BLANK_PAGE_URL);
357
- }
358
- /**
359
- * Handle the special case of about:blank pages during navigation.
360
- *
361
- * Chrome often shows about:blank briefly before loading the actual URL.
362
- * This delay allows the navigation to progress before checking again.
363
- * Returns true if additional waiting is needed, false if ready to proceed.
364
- */
365
- async function handleBlankPageDelay(target) {
366
- if (target.url === BLANK_PAGE_URL) {
367
- await new Promise((resolve) => setTimeout(resolve, LOADING_PAGE_ADDITIONAL_WAIT_MS));
368
- return true; // Need to continue waiting
369
- }
370
- return false; // Ready to proceed
371
- }
372
- /**
373
- * Navigate an existing tab to a new URL using CDP.
374
- *
375
- * Requires attaching to the target first because Page.navigate commands
376
- * must be sent within a target session context. The flatten:true option
377
- * simplifies session management by avoiding nested session hierarchies
378
- * that can complicate cleanup and event handling.
379
- *
380
- * @param targetId - CDP target ID to navigate
381
- * @param normalizedUrl - URL to navigate to (must be pre-normalized)
382
- * @param cdp - CDP connection instance
383
- * @throws Error if navigation fails (e.g., network error, invalid URL, blocked by browser)
384
- */
385
- export async function navigateToUrl(targetId, normalizedUrl, cdp) {
386
- const sessionResponse = (await cdp.send('Target.attachToTarget', {
387
- targetId,
388
- flatten: CDP_FLATTEN_SESSION_FLAG,
389
- }));
390
- const navResponse = (await cdp.send('Page.navigate', { url: normalizedUrl }, sessionResponse.sessionId));
391
- if (navResponse.errorText) {
392
- throw new Error(NAVIGATION_FAILED_ERROR(navResponse.errorText));
393
- }
394
- }
395
- /**
396
- * Wait for a target to be ready (URL matches expected).
397
- *
398
- * Polling is necessary because tab navigation is asynchronous and Chrome
399
- * may report intermediate states (like about:blank) before the final URL
400
- * loads. The 500ms additional wait for about:blank handles the common case
401
- * where Chrome briefly shows a blank page before starting navigation.
402
- *
403
- * Uses HTTP endpoint instead of CDP for target status because the HTTP
404
- * interface provides more reliable target state information during
405
- * navigation transitions.
406
- *
407
- * @param targetId - CDP target ID to wait for
408
- * @param normalizedUrl - Expected URL (must be pre-normalized)
409
- * @param cdp - CDP connection instance
410
- * @param maxWaitMs - Maximum time to wait in milliseconds
411
- * @throws Error if target doesn't become ready within maxWaitMs timeout
412
- */
413
- export async function waitForTargetReady(targetId, normalizedUrl, cdp, maxWaitMs = DEFAULT_TARGET_READY_TIMEOUT_MS) {
414
- const pollingStartTime = Date.now();
415
- const cdpPort = cdp.getPort();
416
- while (Date.now() - pollingStartTime < maxWaitMs) {
417
- const currentTarget = await fetchTargetById(targetId, cdpPort);
418
- if (!currentTarget) {
419
- await new Promise((resolve) => setTimeout(resolve, TARGET_READY_POLL_INTERVAL_MS));
420
- continue;
421
- }
422
- if (!isTargetReady(currentTarget, normalizedUrl)) {
423
- await new Promise((resolve) => setTimeout(resolve, TARGET_READY_POLL_INTERVAL_MS));
424
- continue;
425
- }
426
- const needsMoreWaiting = await handleBlankPageDelay(currentTarget);
427
- if (needsMoreWaiting) {
428
- continue;
429
- }
430
- return;
431
- }
432
- throw new Error(TARGET_NOT_READY_ERROR(maxWaitMs));
433
- }
434
- /**
435
- * Wait for network idle using CDP Page.lifecycleEvent.
436
- *
437
- * Listens for lifecycle events to detect when React hydration is likely complete.
438
- * The 'networkIdle' event indicates network activity has stopped, which typically
439
- * means async JavaScript execution (including React hydration) has finished.
440
- *
441
- * Uses a race between networkIdle event and fallback timeout to handle cases
442
- * where networkIdle doesn't fire (e.g., long-polling connections, SSE streams).
443
- *
444
- * @param cdp - CDP connection instance
445
- * @param maxWaitMs - Maximum time to wait for networkIdle (fallback timeout)
446
- * @returns Promise that resolves when networkIdle fires or timeout is reached
447
- */
448
- async function waitForNetworkIdle(cdp, maxWaitMs = DEFAULT_TARGET_READY_TIMEOUT_MS) {
449
- // Enable lifecycle events
450
- await cdp.send('Page.setLifecycleEventsEnabled', { enabled: true });
451
- return new Promise((resolve) => {
452
- let lifecycleHandlerId = null;
453
- let fallbackTimer = null;
454
- const cleanup = () => {
455
- if (lifecycleHandlerId !== null) {
456
- cdp.off('Page.lifecycleEvent', lifecycleHandlerId);
457
- }
458
- if (fallbackTimer !== null) {
459
- clearTimeout(fallbackTimer);
460
- }
461
- };
462
- // Listen for networkIdle lifecycle event
463
- lifecycleHandlerId = cdp.on('Page.lifecycleEvent', (params) => {
464
- if (params.name === 'networkIdle') {
465
- console.error('[LIFECYCLE] networkIdle event fired');
466
- cleanup();
467
- resolve();
468
- }
469
- });
470
- // Fallback timeout if networkIdle never fires
471
- fallbackTimer = setTimeout(() => {
472
- console.error(`[LIFECYCLE] networkIdle timeout (${maxWaitMs}ms), continuing anyway`);
473
- cleanup();
474
- resolve();
475
- }, maxWaitMs);
476
- });
477
- }
478
- /**
479
- * Retrieve all available targets from Chrome via CDP.
480
- *
481
- * Transforms CDP target info into the standard CDPTarget format
482
- * used throughout the pipeline. The webSocketDebuggerUrl is left
483
- * empty as it's not needed for target discovery operations.
484
- */
485
- async function getExistingTargets(cdp) {
486
- const targetsResponse = (await cdp.send('Target.getTargets'));
487
- return targetsResponse.targetInfos.map((info) => ({
488
- id: info.targetId,
489
- type: info.type,
490
- url: info.url,
491
- title: info.title,
492
- webSocketDebuggerUrl: '',
493
- }));
494
- }
495
- /**
496
- * Navigate an existing target to the desired URL if needed.
497
- *
498
- * Only performs navigation when URLs don't match exactly, avoiding
499
- * unnecessary navigation operations that could disrupt page state.
500
- * Uses the same verification logic as new tab creation to ensure
501
- * the navigation completes successfully.
502
- */
503
- async function navigateExistingTarget(target, normalizedUrl, cdp) {
504
- console.error(FOUND_EXISTING_TAB_MESSAGE(target.url));
505
- if (target.url !== normalizedUrl) {
506
- console.error(NAVIGATING_TAB_MESSAGE(normalizedUrl));
507
- await navigateToUrl(target.id, normalizedUrl, cdp);
508
- await waitForTargetReady(target.id, normalizedUrl, cdp);
509
- }
510
- // Always wait for React hydration, even if tab is already on the URL
511
- // This ensures SPA frameworks have fully initialized before capturing DOM
512
- await waitForNetworkIdle(cdp);
513
- return target;
514
- }
515
- /**
516
- * Find and optionally navigate to an existing target.
517
- *
518
- * Encapsulates the complete target reuse workflow: discovery,
519
- * matching, and navigation. Returns null when no suitable target
520
- * is found, allowing the caller to proceed with new tab creation.
521
- */
522
- async function findAndReuseTarget(normalizedUrl, cdp) {
523
- const existingTargets = await getExistingTargets(cdp);
524
- const matchingTarget = findBestTarget(normalizedUrl, existingTargets);
525
- if (!matchingTarget) {
526
- return null;
527
- }
528
- try {
529
- return await navigateExistingTarget(matchingTarget, normalizedUrl, cdp);
530
- }
531
- catch (error) {
532
- console.error(`Failed to reuse tab: ${getErrorMessage(error)}`);
533
- return null;
534
- }
535
- }
536
- /**
537
- * Create a new tab or find existing tab with the target URL.
538
- *
539
- * This is the main entry point for tab management with a clear workflow:
540
- * when reuseTab=true, attempts to find and navigate existing tabs to avoid
541
- * creating unnecessary browser tabs. When reuseTab=false or no suitable
542
- * tab exists, creates a new tab for isolated testing scenarios.
543
- *
544
- * URL normalization happens once at entry to ensure consistent matching
545
- * and navigation behavior throughout the entire workflow.
546
- *
547
- * @param url - Target URL (will be normalized once at entry)
548
- * @param cdp - CDP connection instance
549
- * @param reuseTab - If true, navigate existing tab instead of creating new one
550
- * @returns Target information
551
- */
552
- export async function createOrFindTarget(url, cdp, reuseTab = DEFAULT_REUSE_TAB) {
553
- const targetUrl = normalizeUrl(url);
554
- // Guard clause: Skip target reuse if not requested
555
- if (!reuseTab) {
556
- console.error(CREATING_NEW_TAB_MESSAGE(targetUrl));
557
- const newTarget = await createNewTab(targetUrl, cdp);
558
- await waitForTargetReady(newTarget.id, targetUrl, cdp);
559
- // Wait for React hydration to complete
560
- await waitForNetworkIdle(cdp);
561
- return newTarget;
562
- }
563
- // Attempt to find and reuse existing target
564
- const reusedTarget = await findAndReuseTarget(targetUrl, cdp);
565
- // Early return if target reuse succeeded
566
- if (reusedTarget) {
567
- return reusedTarget;
568
- }
569
- // Fallback: Create new tab when no suitable target found
570
- console.error(CREATING_NEW_TAB_MESSAGE(targetUrl));
571
- const newTarget = await createNewTab(targetUrl, cdp);
572
- await waitForTargetReady(newTarget.id, targetUrl, cdp);
573
- // Wait for React hydration to complete
574
- await waitForNetworkIdle(cdp);
575
- return newTarget;
576
- }
577
- //# sourceMappingURL=tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/connection/tabs.ts"],"names":[],"mappings":"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"}