browser-debugger-cli 0.0.1-alpha.0 → 0.1.0-alpha.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 (421) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -52
  3. package/dist/__testfixtures__/cdpMessages.d.ts +43 -0
  4. package/dist/__testfixtures__/cdpMessages.d.ts.map +1 -0
  5. package/dist/__testfixtures__/cdpMessages.js +118 -0
  6. package/dist/__testfixtures__/cdpMessages.js.map +1 -0
  7. package/dist/__testfixtures__/connectionTargets.d.ts +21 -0
  8. package/dist/__testfixtures__/connectionTargets.d.ts.map +1 -0
  9. package/dist/__testfixtures__/connectionTargets.js +59 -0
  10. package/dist/__testfixtures__/connectionTargets.js.map +1 -0
  11. package/dist/__tests__/integration/session-files.integration.test.d.ts +2 -0
  12. package/dist/__tests__/integration/session-files.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration/session-files.integration.test.js +66 -0
  14. package/dist/__tests__/integration/session-files.integration.test.js.map +1 -0
  15. package/dist/__testutils__/FakeClock.d.ts +67 -0
  16. package/dist/__testutils__/FakeClock.d.ts.map +1 -0
  17. package/dist/__testutils__/FakeClock.js +132 -0
  18. package/dist/__testutils__/FakeClock.js.map +1 -0
  19. package/dist/__testutils__/FakeWebSocket.d.ts +106 -0
  20. package/dist/__testutils__/FakeWebSocket.d.ts.map +1 -0
  21. package/dist/__testutils__/FakeWebSocket.js +213 -0
  22. package/dist/__testutils__/FakeWebSocket.js.map +1 -0
  23. package/dist/__testutils__/assertions.d.ts +33 -0
  24. package/dist/__testutils__/assertions.d.ts.map +1 -0
  25. package/dist/__testutils__/assertions.js +57 -0
  26. package/dist/__testutils__/assertions.js.map +1 -0
  27. package/dist/__testutils__/index.d.ts +15 -0
  28. package/dist/__testutils__/index.d.ts.map +1 -0
  29. package/dist/__testutils__/index.js +15 -0
  30. package/dist/__testutils__/index.js.map +1 -0
  31. package/dist/__testutils__/testClock.d.ts +28 -0
  32. package/dist/__testutils__/testClock.d.ts.map +1 -0
  33. package/dist/__testutils__/testClock.js +81 -0
  34. package/dist/__testutils__/testClock.js.map +1 -0
  35. package/dist/__testutils__/testFixtures.d.ts +15 -0
  36. package/dist/__testutils__/testFixtures.d.ts.map +1 -0
  37. package/dist/__testutils__/testFixtures.js +23 -0
  38. package/dist/__testutils__/testFixtures.js.map +1 -0
  39. package/dist/__testutils__/testProcess.d.ts +46 -0
  40. package/dist/__testutils__/testProcess.d.ts.map +1 -0
  41. package/dist/__testutils__/testProcess.js +77 -0
  42. package/dist/__testutils__/testProcess.js.map +1 -0
  43. package/dist/cli/collectors/dom.d.ts +8 -0
  44. package/dist/cli/collectors/dom.d.ts.map +1 -0
  45. package/dist/cli/collectors/dom.js +361 -0
  46. package/dist/cli/collectors/dom.js.map +1 -0
  47. package/dist/cli/collectors/helpers/domCache.d.ts +40 -0
  48. package/dist/cli/collectors/helpers/domCache.d.ts.map +1 -0
  49. package/dist/cli/collectors/helpers/domCache.js +79 -0
  50. package/dist/cli/collectors/helpers/domCache.js.map +1 -0
  51. package/dist/cli/collectors/helpers/domQuery.d.ts +45 -0
  52. package/dist/cli/collectors/helpers/domQuery.d.ts.map +1 -0
  53. package/dist/cli/collectors/helpers/domQuery.js +100 -0
  54. package/dist/cli/collectors/helpers/domQuery.js.map +1 -0
  55. package/dist/cli/collectors/helpers/selectorParser.d.ts +20 -0
  56. package/dist/cli/collectors/helpers/selectorParser.d.ts.map +1 -0
  57. package/dist/cli/collectors/helpers/selectorParser.js +20 -0
  58. package/dist/cli/collectors/helpers/selectorParser.js.map +1 -0
  59. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +24 -0
  60. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
  61. package/dist/cli/commands/__tests__/cdp.contract.test.js +467 -0
  62. package/dist/cli/commands/__tests__/cdp.contract.test.js.map +1 -0
  63. package/dist/cli/commands/__tests__/ipcTest.test.d.ts +2 -0
  64. package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +1 -0
  65. package/dist/cli/commands/__tests__/ipcTest.test.js +37 -0
  66. package/dist/cli/commands/__tests__/ipcTest.test.js.map +1 -0
  67. package/dist/cli/commands/cdp.d.ts +8 -0
  68. package/dist/cli/commands/cdp.d.ts.map +1 -0
  69. package/dist/cli/commands/cdp.js +45 -0
  70. package/dist/cli/commands/cdp.js.map +1 -0
  71. package/dist/cli/commands/cleanup.d.ts +8 -0
  72. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  73. package/dist/cli/commands/cleanup.js +130 -0
  74. package/dist/cli/commands/cleanup.js.map +1 -0
  75. package/dist/cli/commands/console.d.ts +8 -0
  76. package/dist/cli/commands/console.d.ts.map +1 -0
  77. package/dist/cli/commands/console.js +97 -0
  78. package/dist/cli/commands/console.js.map +1 -0
  79. package/dist/cli/commands/details.d.ts +8 -0
  80. package/dist/cli/commands/details.d.ts.map +1 -0
  81. package/dist/cli/commands/details.js +68 -0
  82. package/dist/cli/commands/details.js.map +1 -0
  83. package/dist/cli/commands/dom/helpers/domCache.d.ts +36 -0
  84. package/dist/cli/commands/dom/helpers/domCache.d.ts.map +1 -0
  85. package/dist/cli/commands/dom/helpers/domCache.js +65 -0
  86. package/dist/cli/commands/dom/helpers/domCache.js.map +1 -0
  87. package/dist/cli/commands/dom/helpers/domQuery.d.ts +48 -0
  88. package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +1 -0
  89. package/dist/cli/commands/dom/helpers/domQuery.js +104 -0
  90. package/dist/cli/commands/dom/helpers/domQuery.js.map +1 -0
  91. package/dist/cli/commands/dom/helpers/errorHandler.d.ts +45 -0
  92. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -0
  93. package/dist/cli/commands/dom/helpers/errorHandler.js +70 -0
  94. package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -0
  95. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +52 -0
  96. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +1 -0
  97. package/dist/cli/commands/dom/helpers/evalHelpers.js +75 -0
  98. package/dist/cli/commands/dom/helpers/evalHelpers.js.map +1 -0
  99. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +35 -0
  100. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +1 -0
  101. package/dist/cli/commands/dom/helpers/optionsBuilder.js +51 -0
  102. package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +1 -0
  103. package/dist/cli/commands/dom/helpers/selectorParser.d.ts +20 -0
  104. package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +1 -0
  105. package/dist/cli/commands/dom/helpers/selectorParser.js +20 -0
  106. package/dist/cli/commands/dom/helpers/selectorParser.js.map +1 -0
  107. package/dist/cli/commands/dom/index.d.ts +8 -0
  108. package/dist/cli/commands/dom/index.d.ts.map +1 -0
  109. package/dist/cli/commands/dom/index.js +257 -0
  110. package/dist/cli/commands/dom/index.js.map +1 -0
  111. package/dist/cli/commands/ipcTest.d.ts +23 -0
  112. package/dist/cli/commands/ipcTest.d.ts.map +1 -0
  113. package/dist/cli/commands/ipcTest.js +181 -0
  114. package/dist/cli/commands/ipcTest.js.map +1 -0
  115. package/dist/cli/commands/network.d.ts +8 -0
  116. package/dist/cli/commands/network.d.ts.map +1 -0
  117. package/dist/cli/commands/network.js +40 -0
  118. package/dist/cli/commands/network.js.map +1 -0
  119. package/dist/cli/commands/peek.d.ts +8 -0
  120. package/dist/cli/commands/peek.d.ts.map +1 -0
  121. package/dist/cli/commands/peek.js +109 -0
  122. package/dist/cli/commands/peek.js.map +1 -0
  123. package/dist/cli/commands/query.d.ts +9 -0
  124. package/dist/cli/commands/query.d.ts.map +1 -0
  125. package/dist/cli/commands/query.js +127 -0
  126. package/dist/cli/commands/query.js.map +1 -0
  127. package/dist/cli/commands/start.d.ts +9 -0
  128. package/dist/cli/commands/start.d.ts.map +1 -0
  129. package/dist/cli/commands/start.js +78 -0
  130. package/dist/cli/commands/start.js.map +1 -0
  131. package/dist/cli/commands/status.d.ts +9 -0
  132. package/dist/cli/commands/status.d.ts.map +1 -0
  133. package/dist/cli/commands/status.js +84 -0
  134. package/dist/cli/commands/status.js.map +1 -0
  135. package/dist/cli/commands/stop.d.ts +8 -0
  136. package/dist/cli/commands/stop.d.ts.map +1 -0
  137. package/dist/cli/commands/stop.js +146 -0
  138. package/dist/cli/commands/stop.js.map +1 -0
  139. package/dist/cli/formatters/detailsFormatter.d.ts +10 -0
  140. package/dist/cli/formatters/detailsFormatter.d.ts.map +1 -0
  141. package/dist/cli/formatters/detailsFormatter.js +63 -0
  142. package/dist/cli/formatters/detailsFormatter.js.map +1 -0
  143. package/dist/cli/formatters/previewFormatter.d.ts +27 -0
  144. package/dist/cli/formatters/previewFormatter.d.ts.map +1 -0
  145. package/dist/cli/formatters/previewFormatter.js +160 -0
  146. package/dist/cli/formatters/previewFormatter.js.map +1 -0
  147. package/dist/cli/formatters/statusFormatter.d.ts +34 -0
  148. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -0
  149. package/dist/cli/formatters/statusFormatter.js +108 -0
  150. package/dist/cli/formatters/statusFormatter.js.map +1 -0
  151. package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
  152. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
  153. package/dist/cli/handlers/ChromeBootstrap.js +50 -0
  154. package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
  155. package/dist/cli/handlers/CommandRunner.d.ts +60 -0
  156. package/dist/cli/handlers/CommandRunner.d.ts.map +1 -0
  157. package/dist/cli/handlers/CommandRunner.js +81 -0
  158. package/dist/cli/handlers/CommandRunner.js.map +1 -0
  159. package/dist/cli/handlers/OutputBuilder.d.ts +60 -0
  160. package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -0
  161. package/dist/cli/handlers/OutputBuilder.js +138 -0
  162. package/dist/cli/handlers/OutputBuilder.js.map +1 -0
  163. package/dist/cli/handlers/OutputWriter.d.ts +15 -0
  164. package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
  165. package/dist/cli/handlers/OutputWriter.js +34 -0
  166. package/dist/cli/handlers/OutputWriter.js.map +1 -0
  167. package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
  168. package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
  169. package/dist/cli/handlers/PreviewWriter.js +119 -0
  170. package/dist/cli/handlers/PreviewWriter.js.map +1 -0
  171. package/dist/cli/handlers/SessionLock.d.ts +16 -0
  172. package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
  173. package/dist/cli/handlers/SessionLock.js +38 -0
  174. package/dist/cli/handlers/SessionLock.js.map +1 -0
  175. package/dist/cli/handlers/SessionLoop.d.ts +19 -0
  176. package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
  177. package/dist/cli/handlers/SessionLoop.js +47 -0
  178. package/dist/cli/handlers/SessionLoop.js.map +1 -0
  179. package/dist/cli/handlers/ShutdownController.d.ts +38 -0
  180. package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
  181. package/dist/cli/handlers/ShutdownController.js +83 -0
  182. package/dist/cli/handlers/ShutdownController.js.map +1 -0
  183. package/dist/cli/handlers/SignalHandler.d.ts +35 -0
  184. package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
  185. package/dist/cli/handlers/SignalHandler.js +81 -0
  186. package/dist/cli/handlers/SignalHandler.js.map +1 -0
  187. package/dist/cli/handlers/TargetSetup.d.ts +42 -0
  188. package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
  189. package/dist/cli/handlers/TargetSetup.js +87 -0
  190. package/dist/cli/handlers/TargetSetup.js.map +1 -0
  191. package/dist/cli/handlers/commonOptions.d.ts +54 -0
  192. package/dist/cli/handlers/commonOptions.d.ts.map +1 -0
  193. package/dist/cli/handlers/commonOptions.js +64 -0
  194. package/dist/cli/handlers/commonOptions.js.map +1 -0
  195. package/dist/cli/handlers/daemonSessionController.d.ts +23 -0
  196. package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -0
  197. package/dist/cli/handlers/daemonSessionController.js +108 -0
  198. package/dist/cli/handlers/daemonSessionController.js.map +1 -0
  199. package/dist/cli/handlers/sessionController.d.ts +21 -0
  200. package/dist/cli/handlers/sessionController.d.ts.map +1 -0
  201. package/dist/cli/handlers/sessionController.js +55 -0
  202. package/dist/cli/handlers/sessionController.js.map +1 -0
  203. package/dist/cli/registry.d.ts +11 -0
  204. package/dist/cli/registry.d.ts.map +1 -0
  205. package/dist/cli/registry.js +46 -0
  206. package/dist/cli/registry.js.map +1 -0
  207. package/dist/collectors/__tests__/network.contract.test.d.ts +28 -0
  208. package/dist/collectors/__tests__/network.contract.test.d.ts.map +1 -0
  209. package/dist/collectors/__tests__/network.contract.test.js +525 -0
  210. package/dist/collectors/__tests__/network.contract.test.js.map +1 -0
  211. package/dist/collectors/console.d.ts +5 -3
  212. package/dist/collectors/console.d.ts.map +1 -1
  213. package/dist/collectors/console.js +48 -26
  214. package/dist/collectors/console.js.map +1 -1
  215. package/dist/collectors/dom.d.ts +2 -2
  216. package/dist/collectors/dom.d.ts.map +1 -1
  217. package/dist/collectors/dom.js +23 -12
  218. package/dist/collectors/dom.js.map +1 -1
  219. package/dist/collectors/network.d.ts +18 -4
  220. package/dist/collectors/network.d.ts.map +1 -1
  221. package/dist/collectors/network.js +111 -34
  222. package/dist/collectors/network.js.map +1 -1
  223. package/dist/connection/__tests__/cdp.contract.test.d.ts +16 -0
  224. package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -0
  225. package/dist/connection/__tests__/cdp.contract.test.js +378 -0
  226. package/dist/connection/__tests__/cdp.contract.test.js.map +1 -0
  227. package/dist/connection/__tests__/finder.contract.test.d.ts +2 -0
  228. package/dist/connection/__tests__/finder.contract.test.d.ts.map +1 -0
  229. package/dist/connection/__tests__/finder.contract.test.js +239 -0
  230. package/dist/connection/__tests__/finder.contract.test.js.map +1 -0
  231. package/dist/connection/__tests__/tabs.contract.test.d.ts +2 -0
  232. package/dist/connection/__tests__/tabs.contract.test.d.ts.map +1 -0
  233. package/dist/connection/__tests__/tabs.contract.test.js +137 -0
  234. package/dist/connection/__tests__/tabs.contract.test.js.map +1 -0
  235. package/dist/connection/cdp.d.ts +165 -16
  236. package/dist/connection/cdp.d.ts.map +1 -1
  237. package/dist/connection/cdp.js +342 -122
  238. package/dist/connection/cdp.js.map +1 -1
  239. package/dist/connection/finder.d.ts +5 -4
  240. package/dist/connection/finder.d.ts.map +1 -1
  241. package/dist/connection/finder.js +10 -16
  242. package/dist/connection/finder.js.map +1 -1
  243. package/dist/connection/launcher.d.ts +18 -11
  244. package/dist/connection/launcher.d.ts.map +1 -1
  245. package/dist/connection/launcher.js +148 -82
  246. package/dist/connection/launcher.js.map +1 -1
  247. package/dist/connection/tabs.d.ts +47 -14
  248. package/dist/connection/tabs.d.ts.map +1 -1
  249. package/dist/connection/tabs.js +493 -132
  250. package/dist/connection/tabs.js.map +1 -1
  251. package/dist/constants.d.ts +209 -0
  252. package/dist/constants.d.ts.map +1 -0
  253. package/dist/constants.js +232 -0
  254. package/dist/constants.js.map +1 -0
  255. package/dist/daemon/__tests__/ipcServer.contract.test.d.ts +23 -0
  256. package/dist/daemon/__tests__/ipcServer.contract.test.d.ts.map +1 -0
  257. package/dist/daemon/__tests__/ipcServer.contract.test.js +401 -0
  258. package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -0
  259. package/dist/daemon/__tests__/launcher.unit.test.d.ts +8 -0
  260. package/dist/daemon/__tests__/launcher.unit.test.d.ts.map +1 -0
  261. package/dist/daemon/__tests__/launcher.unit.test.js +20 -0
  262. package/dist/daemon/__tests__/launcher.unit.test.js.map +1 -0
  263. package/dist/daemon/ipcServer.d.ts +83 -0
  264. package/dist/daemon/ipcServer.d.ts.map +1 -0
  265. package/dist/daemon/ipcServer.js +670 -0
  266. package/dist/daemon/ipcServer.js.map +1 -0
  267. package/dist/daemon/launcher.d.ts +31 -0
  268. package/dist/daemon/launcher.d.ts.map +1 -0
  269. package/dist/daemon/launcher.js +137 -0
  270. package/dist/daemon/launcher.js.map +1 -0
  271. package/dist/daemon/startSession.d.ts +51 -0
  272. package/dist/daemon/startSession.d.ts.map +1 -0
  273. package/dist/daemon/startSession.js +149 -0
  274. package/dist/daemon/startSession.js.map +1 -0
  275. package/dist/daemon/worker.d.ts +18 -0
  276. package/dist/daemon/worker.d.ts.map +1 -0
  277. package/dist/daemon/worker.js +623 -0
  278. package/dist/daemon/worker.js.map +1 -0
  279. package/dist/daemon/workerIpc.d.ts +33 -0
  280. package/dist/daemon/workerIpc.d.ts.map +1 -0
  281. package/dist/daemon/workerIpc.js +8 -0
  282. package/dist/daemon/workerIpc.js.map +1 -0
  283. package/dist/daemon.d.ts +10 -0
  284. package/dist/daemon.d.ts.map +1 -0
  285. package/dist/daemon.js +32 -0
  286. package/dist/daemon.js.map +1 -0
  287. package/dist/index.js +41 -420
  288. package/dist/index.js.map +1 -1
  289. package/dist/ipc/__tests__/client.contract.test.d.ts +23 -0
  290. package/dist/ipc/__tests__/client.contract.test.d.ts.map +1 -0
  291. package/dist/ipc/__tests__/client.contract.test.js +466 -0
  292. package/dist/ipc/__tests__/client.contract.test.js.map +1 -0
  293. package/dist/ipc/client.d.ts +109 -0
  294. package/dist/ipc/client.d.ts.map +1 -0
  295. package/dist/ipc/client.js +220 -0
  296. package/dist/ipc/client.js.map +1 -0
  297. package/dist/ipc/commands.d.ts +208 -0
  298. package/dist/ipc/commands.d.ts.map +1 -0
  299. package/dist/ipc/commands.js +69 -0
  300. package/dist/ipc/commands.js.map +1 -0
  301. package/dist/ipc/responseValidator.d.ts +40 -0
  302. package/dist/ipc/responseValidator.d.ts.map +1 -0
  303. package/dist/ipc/responseValidator.js +28 -0
  304. package/dist/ipc/responseValidator.js.map +1 -0
  305. package/dist/ipc/types.d.ts +193 -0
  306. package/dist/ipc/types.d.ts.map +1 -0
  307. package/dist/ipc/types.js +21 -0
  308. package/dist/ipc/types.js.map +1 -0
  309. package/dist/session/BdgSession.d.ts +71 -4
  310. package/dist/session/BdgSession.d.ts.map +1 -1
  311. package/dist/session/BdgSession.js +173 -75
  312. package/dist/session/BdgSession.js.map +1 -1
  313. package/dist/session/chrome.d.ts +46 -0
  314. package/dist/session/chrome.d.ts.map +1 -0
  315. package/dist/session/chrome.js +92 -0
  316. package/dist/session/chrome.js.map +1 -0
  317. package/dist/session/cleanup.d.ts +45 -0
  318. package/dist/session/cleanup.d.ts.map +1 -0
  319. package/dist/session/cleanup.js +230 -0
  320. package/dist/session/cleanup.js.map +1 -0
  321. package/dist/session/index.d.ts +15 -0
  322. package/dist/session/index.d.ts.map +1 -0
  323. package/dist/session/index.js +23 -0
  324. package/dist/session/index.js.map +1 -0
  325. package/dist/session/lock.d.ts +57 -0
  326. package/dist/session/lock.d.ts.map +1 -0
  327. package/dist/session/lock.js +154 -0
  328. package/dist/session/lock.js.map +1 -0
  329. package/dist/session/metadata.d.ts +59 -0
  330. package/dist/session/metadata.d.ts.map +1 -0
  331. package/dist/session/metadata.js +71 -0
  332. package/dist/session/metadata.js.map +1 -0
  333. package/dist/session/output.d.ts +18 -0
  334. package/dist/session/output.d.ts.map +1 -0
  335. package/dist/session/output.js +24 -0
  336. package/dist/session/output.js.map +1 -0
  337. package/dist/session/paths.d.ts +73 -0
  338. package/dist/session/paths.d.ts.map +1 -0
  339. package/dist/session/paths.js +84 -0
  340. package/dist/session/paths.js.map +1 -0
  341. package/dist/session/pid.d.ts +40 -0
  342. package/dist/session/pid.d.ts.map +1 -0
  343. package/dist/session/pid.js +73 -0
  344. package/dist/session/pid.js.map +1 -0
  345. package/dist/session/process.d.ts +45 -0
  346. package/dist/session/process.d.ts.map +1 -0
  347. package/dist/session/process.js +88 -0
  348. package/dist/session/process.js.map +1 -0
  349. package/dist/types.d.ts +114 -38
  350. package/dist/types.d.ts.map +1 -1
  351. package/dist/utils/__tests__/filters.unit.test.d.ts +2 -0
  352. package/dist/utils/__tests__/filters.unit.test.d.ts.map +1 -0
  353. package/dist/utils/__tests__/filters.unit.test.js +239 -0
  354. package/dist/utils/__tests__/filters.unit.test.js.map +1 -0
  355. package/dist/utils/__tests__/session.contract.test.d.ts +2 -0
  356. package/dist/utils/__tests__/session.contract.test.d.ts.map +1 -0
  357. package/dist/utils/__tests__/session.contract.test.js +234 -0
  358. package/dist/utils/__tests__/session.contract.test.js.map +1 -0
  359. package/dist/utils/atomicFile.d.ts +38 -0
  360. package/dist/utils/atomicFile.d.ts.map +1 -0
  361. package/dist/utils/atomicFile.js +71 -0
  362. package/dist/utils/atomicFile.js.map +1 -0
  363. package/dist/utils/cdpHandlers.d.ts +31 -0
  364. package/dist/utils/cdpHandlers.d.ts.map +1 -0
  365. package/dist/utils/cdpHandlers.js +38 -0
  366. package/dist/utils/cdpHandlers.js.map +1 -0
  367. package/dist/utils/chromeDiagnostics.d.ts +28 -0
  368. package/dist/utils/chromeDiagnostics.d.ts.map +1 -0
  369. package/dist/utils/chromeDiagnostics.js +88 -0
  370. package/dist/utils/chromeDiagnostics.js.map +1 -0
  371. package/dist/utils/errors.d.ts +82 -0
  372. package/dist/utils/errors.d.ts.map +1 -0
  373. package/dist/utils/errors.js +88 -0
  374. package/dist/utils/errors.js.map +1 -0
  375. package/dist/utils/exitCodes.d.ts +32 -0
  376. package/dist/utils/exitCodes.d.ts.map +1 -0
  377. package/dist/utils/exitCodes.js +36 -0
  378. package/dist/utils/exitCodes.js.map +1 -0
  379. package/dist/utils/filters.d.ts +108 -0
  380. package/dist/utils/filters.d.ts.map +1 -0
  381. package/dist/utils/filters.js +304 -0
  382. package/dist/utils/filters.js.map +1 -0
  383. package/dist/utils/formatters/network.d.ts +23 -0
  384. package/dist/utils/formatters/network.d.ts.map +1 -0
  385. package/dist/utils/formatters/network.js +35 -0
  386. package/dist/utils/formatters/network.js.map +1 -0
  387. package/dist/utils/http.d.ts +34 -0
  388. package/dist/utils/http.d.ts.map +1 -0
  389. package/dist/utils/http.js +48 -0
  390. package/dist/utils/http.js.map +1 -0
  391. package/dist/utils/logger.d.ts +42 -0
  392. package/dist/utils/logger.d.ts.map +1 -0
  393. package/dist/utils/logger.js +43 -0
  394. package/dist/utils/logger.js.map +1 -0
  395. package/dist/utils/objects.d.ts +23 -0
  396. package/dist/utils/objects.d.ts.map +1 -0
  397. package/dist/utils/objects.js +25 -0
  398. package/dist/utils/objects.js.map +1 -0
  399. package/dist/utils/url/safeParseUrl.d.ts +63 -0
  400. package/dist/utils/url/safeParseUrl.d.ts.map +1 -0
  401. package/dist/utils/url/safeParseUrl.js +84 -0
  402. package/dist/utils/url/safeParseUrl.js.map +1 -0
  403. package/dist/utils/url.d.ts +63 -1
  404. package/dist/utils/url.d.ts.map +1 -1
  405. package/dist/utils/url.js +152 -2
  406. package/dist/utils/url.js.map +1 -1
  407. package/dist/utils/validation.d.ts +1 -1
  408. package/dist/utils/validation.d.ts.map +1 -1
  409. package/dist/utils/version.d.ts +3 -0
  410. package/dist/utils/version.d.ts.map +1 -0
  411. package/dist/utils/version.js +27 -0
  412. package/dist/utils/version.js.map +1 -0
  413. package/package.json +57 -10
  414. package/dist/utils/pageLoad.d.ts +0 -21
  415. package/dist/utils/pageLoad.d.ts.map +0 -1
  416. package/dist/utils/pageLoad.js +0 -85
  417. package/dist/utils/pageLoad.js.map +0 -1
  418. package/dist/utils/session.d.ts +0 -104
  419. package/dist/utils/session.d.ts.map +0 -1
  420. package/dist/utils/session.js +0 -244
  421. package/dist/utils/session.js.map +0 -1
@@ -1,44 +1,71 @@
1
1
  import WebSocket from 'ws';
2
- /**
3
- * Chrome DevTools Protocol WebSocket connection manager.
4
- *
5
- * Handles bidirectional communication with Chrome via CDP:
6
- * - Request/response correlation with message IDs
7
- * - Event subscription and handling
8
- * - Connection lifecycle (connect, reconnect, keepalive)
9
- * - Graceful error handling and cleanup
10
- */
2
+ import { CDP_COMMAND_TIMEOUT_MS, CDP_CONNECTION_TIMEOUT_MS, CDP_KEEPALIVE_INTERVAL, CDP_MAX_CONNECTION_RETRIES, CDP_MAX_RECONNECT_ATTEMPTS, CDP_BASE_RETRY_DELAY_MS, CDP_MAX_RETRY_DELAY_MS, CDP_MAX_RECONNECT_DELAY_MS, CDP_MAX_MISSED_PONGS, CDP_PONG_TIMEOUT_MS, WEBSOCKET_NORMAL_CLOSURE, WEBSOCKET_NO_PONG_CLOSURE, UTF8_ENCODING, } from '../constants.js';
3
+ import { CDPConnectionError, CDPTimeoutError, getErrorMessage } from '../utils/errors.js';
4
+ // Error Messages
5
+ const CONNECTION_TIMEOUT_ERROR = 'Connection timeout';
6
+ const WEBSOCKET_CONNECTION_CLOSED_ERROR = 'WebSocket connection closed';
7
+ const CONNECTION_CLOSED_ERROR = 'Connection closed';
8
+ const NOT_CONNECTED_BROWSER_ERROR = 'Not connected to browser';
9
+ const NOT_CONNECTED_URL_ERROR = 'Not connected - no WebSocket URL available';
10
+ const RECONNECTED_SUCCESS_MESSAGE = 'Reconnected successfully';
11
+ const CONNECTION_LOST_MESSAGE = 'Connection lost: no pong received';
12
+ const PONG_TIMEOUT_MESSAGE = 'Pong timeout - connection may be stale';
13
+ const NO_PONG_RECEIVED_REASON = 'No pong received';
14
+ const NORMAL_CLOSURE_REASON = 'Normal closure';
15
+ // Message Templates
16
+ const CONNECTION_ATTEMPT_FAILED_MESSAGE = (attempt, delay) => `Connection attempt ${attempt + 1} failed, retrying in ${delay}ms...`;
17
+ const FAILED_CONNECT_ATTEMPTS_ERROR = (maxRetries, lastErrorMessage) => `Failed to connect after ${maxRetries} attempts: ${lastErrorMessage}`;
18
+ const WEBSOCKET_CLOSED_MESSAGE = (code, reason) => `WebSocket closed: ${code} - ${reason}`;
19
+ const RECONNECTING_MESSAGE = (delay, attempt, maxAttempts) => `Reconnecting in ${delay}ms... (attempt ${attempt}/${maxAttempts})`;
20
+ const UNEXPECTED_DATA_TYPE_ERROR = (dataType) => `Unexpected data type in CDP message: ${dataType}`;
21
+ const DATA_CONVERSION_ERROR = (errorMsg) => `Failed to convert message data: ${errorMsg}`;
22
+ const JSON_PARSE_ERROR = (errorMsg) => `Failed to parse JSON message: ${errorMsg}`;
23
+ const MESSAGE_ROUTING_ERROR = (errorMsg) => `Failed to route message: ${errorMsg}`;
24
+ const RECONNECTION_FAILED_ERROR = (errorMsg) => `Reconnection failed: ${errorMsg}`;
25
+ const INVALID_WEBSOCKET_URL_ERROR = (url, errorMsg) => `Invalid WebSocket URL: ${url}. Error: ${errorMsg}`;
26
+ const COMMAND_TIMEOUT_ERROR = (method) => `Command timeout: ${method}`;
11
27
  export class CDPConnection {
12
28
  ws = null;
13
29
  messageId = 0;
14
30
  pendingMessages = new Map();
15
31
  nextHandlerId = 0;
16
- eventHandlers = new Map(); // Event params typed at call site
17
- // Keepalive state
32
+ eventHandlers = new Map();
18
33
  pingInterval = null;
19
34
  pongTimeout = null;
20
35
  missedPongs = 0;
21
- MAX_MISSED_PONGS = 3;
22
- // Reconnection state
23
36
  wsUrl = '';
24
37
  autoReconnect = false;
25
38
  reconnectAttempts = 0;
26
- MAX_RECONNECT_ATTEMPTS = 5;
27
39
  isIntentionallyClosed = false;
28
40
  onReconnect;
41
+ onDisconnect;
42
+ connectionOptions = {};
43
+ createWebSocket;
44
+ constructor(createWebSocket = (url) => new WebSocket(url)) {
45
+ this.createWebSocket = createWebSocket;
46
+ }
29
47
  /**
30
48
  * Connect to Chrome via WebSocket.
31
49
  *
50
+ * We retry with exponential backoff because Chrome startup can be slow and
51
+ * network conditions may cause temporary failures. Auto-reconnect defaults
52
+ * to false for CLI tools where connection loss should fail fast rather than
53
+ * continue indefinitely.
54
+ *
32
55
  * @param wsUrl - WebSocket debugger URL from CDP target
33
56
  * @param options - Connection configuration options
34
57
  * @throws Error if connection fails after all retries
35
58
  */
36
59
  async connect(wsUrl, options = {}) {
37
- const { maxRetries = 3, autoReconnect = false, onReconnect } = options;
60
+ const maxRetries = options.maxRetries ?? CDP_MAX_CONNECTION_RETRIES;
61
+ const autoReconnect = options.autoReconnect ?? false;
62
+ const { onReconnect, onDisconnect } = options;
38
63
  this.wsUrl = wsUrl;
39
64
  this.autoReconnect = autoReconnect;
40
65
  this.onReconnect = onReconnect;
66
+ this.onDisconnect = onDisconnect;
41
67
  this.isIntentionallyClosed = false;
68
+ this.connectionOptions = options;
42
69
  let lastError;
43
70
  for (let attempt = 0; attempt < maxRetries; attempt++) {
44
71
  try {
@@ -49,117 +76,304 @@ export class CDPConnection {
49
76
  catch (error) {
50
77
  lastError = error;
51
78
  if (attempt < maxRetries - 1) {
52
- const delay = Math.min(1000 * Math.pow(2, attempt), 5000);
53
- console.error(`Connection attempt ${attempt + 1} failed, retrying in ${delay}ms...`);
54
- await new Promise(resolve => setTimeout(resolve, delay));
79
+ const delay = this.calculateBackoffDelay(attempt, CDP_MAX_RETRY_DELAY_MS);
80
+ console.error(CONNECTION_ATTEMPT_FAILED_MESSAGE(attempt, delay));
81
+ await new Promise((resolve) => setTimeout(resolve, delay));
55
82
  }
56
83
  }
57
84
  }
58
- throw new Error(`Failed to connect after ${maxRetries} attempts: ${lastError?.message}`);
85
+ throw new CDPConnectionError(FAILED_CONNECT_ATTEMPTS_ERROR(maxRetries, lastError?.message), lastError);
59
86
  }
87
+ /**
88
+ * Attempt a single WebSocket connection with timeout.
89
+ *
90
+ * We use a connection timeout because WebSocket connections can hang
91
+ * indefinitely without it, especially in network failure scenarios.
92
+ *
93
+ * @param wsUrl - WebSocket URL to connect to
94
+ * @param options - Connection configuration options
95
+ * @returns Promise that resolves when connection is established
96
+ * @throws CDPTimeoutError if connection times out
97
+ * @throws Error if WebSocket connection fails
98
+ */
60
99
  attemptConnection(wsUrl, options = {}) {
61
- const timeout = options.timeout ?? 10000;
100
+ const timeout = options.timeout ?? CDP_CONNECTION_TIMEOUT_MS;
62
101
  return new Promise((resolve, reject) => {
63
- this.ws = new WebSocket(wsUrl);
102
+ this.ws = this.createWebSocket(wsUrl);
64
103
  const connectTimeout = setTimeout(() => {
65
- reject(new Error('Connection timeout'));
104
+ reject(new CDPTimeoutError(CONNECTION_TIMEOUT_ERROR));
66
105
  this.ws?.close();
67
106
  }, timeout);
68
- this.ws.on('open', () => {
69
- clearTimeout(connectTimeout);
70
- this.startKeepalive(options.keepaliveInterval ?? 30000);
71
- resolve();
72
- });
73
- this.ws.on('error', (error) => {
74
- clearTimeout(connectTimeout);
75
- reject(error);
76
- });
77
- this.ws.on('close', async (code, reason) => {
107
+ this.setupWebSocketHandlers(resolve, reject, connectTimeout, options);
108
+ });
109
+ }
110
+ /**
111
+ * Configure WebSocket event handlers for connection lifecycle.
112
+ *
113
+ * We handle close events asynchronously to prevent blocking the WebSocket
114
+ * event loop during cleanup and reconnection attempts.
115
+ *
116
+ * @param resolve - Promise resolve function for successful connection
117
+ * @param reject - Promise reject function for connection failure
118
+ * @param connectTimeout - Timeout handle to clear on success/failure
119
+ * @param options - Connection options for keepalive configuration
120
+ */
121
+ setupWebSocketHandlers(resolve, reject, connectTimeout, options) {
122
+ if (!this.ws)
123
+ return;
124
+ this.ws.on('open', () => {
125
+ clearTimeout(connectTimeout);
126
+ this.missedPongs = 0;
127
+ this.startKeepalive(options.keepaliveInterval ?? CDP_KEEPALIVE_INTERVAL);
128
+ resolve();
129
+ });
130
+ this.ws.on('error', (error) => {
131
+ clearTimeout(connectTimeout);
132
+ reject(error);
133
+ });
134
+ this.ws.on('close', (code, reason) => {
135
+ void (async () => {
78
136
  this.stopKeepalive();
79
137
  if (this.isIntentionallyClosed) {
80
138
  return;
81
139
  }
82
- console.error(`WebSocket closed: ${code} - ${reason.toString()}`);
83
- // Reject all pending messages
84
- this.pendingMessages.forEach((pending) => {
85
- clearTimeout(pending.timeout);
86
- pending.reject(new Error('WebSocket connection closed'));
87
- });
88
- this.pendingMessages.clear();
89
- // Attempt reconnection if enabled
90
- if (this.autoReconnect && this.reconnectAttempts < this.MAX_RECONNECT_ATTEMPTS) {
91
- await this.attemptReconnection();
92
- }
93
- });
94
- this.ws.on('pong', () => {
95
- this.missedPongs = 0;
96
- if (this.pongTimeout) {
97
- clearTimeout(this.pongTimeout);
98
- this.pongTimeout = null;
99
- }
100
- });
101
- this.ws.on('message', (data) => {
102
- try {
103
- const message = JSON.parse(data.toString());
104
- // Handle responses
105
- if (message.id !== undefined) {
106
- const pending = this.pendingMessages.get(message.id);
107
- if (pending) {
108
- this.pendingMessages.delete(message.id);
109
- clearTimeout(pending.timeout);
110
- if (message.error) {
111
- pending.reject(new Error(message.error.message));
112
- }
113
- else {
114
- pending.resolve(message.result);
115
- }
116
- }
117
- }
118
- // Handle events
119
- if (message.method) {
120
- const handlers = this.eventHandlers.get(message.method);
121
- if (handlers) {
122
- handlers.forEach(handler => handler(message.params));
123
- }
124
- }
140
+ console.error(WEBSOCKET_CLOSED_MESSAGE(code, reason.toString()));
141
+ this.clearPendingMessages(new CDPConnectionError(WEBSOCKET_CONNECTION_CLOSED_ERROR));
142
+ // P1 Fix #1: Call onDisconnect callback if provided
143
+ // WHY: Allows worker to exit gracefully when Chrome dies
144
+ if (this.onDisconnect) {
145
+ void Promise.resolve(this.onDisconnect(code, reason.toString())).catch((error) => {
146
+ console.error('[cdp] onDisconnect callback error:', error);
147
+ });
125
148
  }
126
- catch (error) {
127
- console.error('Failed to parse CDP message:', error);
149
+ if (this.autoReconnect && this.reconnectAttempts < CDP_MAX_RECONNECT_ATTEMPTS) {
150
+ await this.attemptReconnection();
128
151
  }
129
- });
152
+ })();
153
+ });
154
+ this.ws.on('pong', () => {
155
+ this.missedPongs = 0;
156
+ if (this.pongTimeout) {
157
+ clearTimeout(this.pongTimeout);
158
+ this.pongTimeout = null;
159
+ }
130
160
  });
161
+ this.ws.on('message', (incomingData) => {
162
+ this.parseIncomingMessage(incomingData);
163
+ });
164
+ }
165
+ /**
166
+ * Parse and route incoming CDP messages.
167
+ *
168
+ * We handle both responses (with ID) and events (with method) in the same
169
+ * message stream. Error handling is liberal to prevent one bad message
170
+ * from breaking the entire connection. Uses separate error handling for
171
+ * conversion, parsing, and routing stages for better debugging.
172
+ *
173
+ * @param incomingData - Raw WebSocket message data to parse
174
+ */
175
+ parseIncomingMessage(incomingData) {
176
+ try {
177
+ const messageText = this.convertRawDataToString(incomingData);
178
+ const message = this.parseJSONMessage(messageText);
179
+ this.routeCDPMessage(message);
180
+ }
181
+ catch {
182
+ // Error already logged by specific handler, no need to log again
183
+ }
131
184
  }
185
+ /**
186
+ * Convert WebSocket raw data to string using appropriate method.
187
+ *
188
+ * Handles all WebSocket data types with a clean conversion strategy.
189
+ * Uses a lookup approach for better maintainability and performance.
190
+ *
191
+ * @param data - Raw WebSocket data to convert
192
+ * @returns Converted string message
193
+ * @throws Error if data type is unsupported
194
+ */
195
+ convertRawDataToString(data) {
196
+ try {
197
+ if (typeof data === 'string') {
198
+ return data;
199
+ }
200
+ if (Buffer.isBuffer(data)) {
201
+ return data.toString(UTF8_ENCODING);
202
+ }
203
+ if (Array.isArray(data)) {
204
+ return Buffer.concat(data).toString(UTF8_ENCODING);
205
+ }
206
+ throw new Error(UNEXPECTED_DATA_TYPE_ERROR(typeof data));
207
+ }
208
+ catch (error) {
209
+ console.error(DATA_CONVERSION_ERROR(getErrorMessage(error)));
210
+ throw error;
211
+ }
212
+ }
213
+ /**
214
+ * Parse JSON string into CDP message object.
215
+ *
216
+ * Validates basic message structure to ensure we have a valid CDP message
217
+ * before attempting to route it.
218
+ *
219
+ * @param messageText - JSON string to parse
220
+ * @returns Parsed CDP message object
221
+ * @throws Error if JSON is invalid or message structure is malformed
222
+ */
223
+ parseJSONMessage(messageText) {
224
+ try {
225
+ const message = JSON.parse(messageText);
226
+ // Basic validation - CDP messages should be objects
227
+ if (typeof message !== 'object' || message === null) {
228
+ throw new Error('CDP message must be an object');
229
+ }
230
+ return message;
231
+ }
232
+ catch (error) {
233
+ console.error(JSON_PARSE_ERROR(getErrorMessage(error)));
234
+ throw error;
235
+ }
236
+ }
237
+ /**
238
+ * Route CDP message to appropriate handler based on message type.
239
+ *
240
+ * CDP messages are either responses (have ID) or events (have method).
241
+ * Some messages may have both, which is valid and should be handled.
242
+ *
243
+ * @param message - Parsed CDP message to route
244
+ * @throws Error if routing fails
245
+ */
246
+ routeCDPMessage(message) {
247
+ try {
248
+ if (message.id !== undefined) {
249
+ this.handleCDPResponse(message);
250
+ }
251
+ if (message.method) {
252
+ this.handleCDPEvent(message);
253
+ }
254
+ // Log warning if message has neither ID nor method (unusual but not fatal)
255
+ if (message.id === undefined && !message.method) {
256
+ console.warn('Received CDP message with neither ID nor method - ignoring');
257
+ }
258
+ }
259
+ catch (error) {
260
+ console.error(MESSAGE_ROUTING_ERROR(getErrorMessage(error)));
261
+ throw error;
262
+ }
263
+ }
264
+ /**
265
+ * Handle CDP command responses by resolving pending promises.
266
+ *
267
+ * @param message - CDP message containing response data
268
+ */
269
+ handleCDPResponse(message) {
270
+ if (message.id === undefined)
271
+ return;
272
+ const pending = this.pendingMessages.get(message.id);
273
+ if (pending) {
274
+ this.pendingMessages.delete(message.id);
275
+ clearTimeout(pending.timeout);
276
+ if (message.error) {
277
+ pending.reject(new Error(message.error.message));
278
+ }
279
+ else {
280
+ pending.resolve(message.result);
281
+ }
282
+ }
283
+ }
284
+ /**
285
+ * Handle CDP events by notifying registered handlers.
286
+ *
287
+ * @param message - CDP message containing event data
288
+ */
289
+ handleCDPEvent(message) {
290
+ if (!message.method)
291
+ return;
292
+ const handlers = this.eventHandlers.get(message.method);
293
+ if (handlers) {
294
+ handlers.forEach((handler) => handler(message.params));
295
+ }
296
+ }
297
+ /**
298
+ * Calculate exponential backoff delay with maximum cap.
299
+ *
300
+ * We use exponential backoff to avoid thundering herd problems when many
301
+ * clients reconnect simultaneously. The maximum cap prevents extremely
302
+ * long delays that would make the tool unusable.
303
+ *
304
+ * @param attempt - Current attempt number (0-based)
305
+ * @param maxDelay - Maximum delay in milliseconds
306
+ * @returns Calculated delay in milliseconds (base delay * 2^attempt, capped at maxDelay)
307
+ */
308
+ calculateBackoffDelay(attempt, maxDelay) {
309
+ return Math.min(CDP_BASE_RETRY_DELAY_MS * Math.pow(2, attempt), maxDelay);
310
+ }
311
+ /**
312
+ * Clear all pending command promises with the given error.
313
+ *
314
+ * We reject pending messages rather than letting them hang indefinitely
315
+ * because callers need to know that their commands failed due to connection
316
+ * loss so they can handle the error appropriately.
317
+ *
318
+ * @param error - Error to reject all pending promises with
319
+ */
320
+ clearPendingMessages(error) {
321
+ this.pendingMessages.forEach((pending) => {
322
+ clearTimeout(pending.timeout);
323
+ pending.reject(error);
324
+ });
325
+ this.pendingMessages.clear();
326
+ }
327
+ /**
328
+ * Attempt to reconnect to the WebSocket after connection loss.
329
+ *
330
+ * Uses exponential backoff with longer delays than initial connection
331
+ * attempts because reconnection typically indicates more serious issues.
332
+ * Calls the onReconnect callback after successful reconnection to allow
333
+ * callers to re-enable CDP domains or reinitialize state.
334
+ *
335
+ * @throws Never throws - errors are logged but not propagated to avoid
336
+ * breaking reconnection loops
337
+ */
132
338
  async attemptReconnection() {
133
339
  this.reconnectAttempts++;
134
- const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts - 1), 10000);
135
- console.error(`Reconnecting in ${delay}ms... (attempt ${this.reconnectAttempts}/${this.MAX_RECONNECT_ATTEMPTS})`);
136
- await new Promise(resolve => setTimeout(resolve, delay));
340
+ const delay = this.calculateBackoffDelay(this.reconnectAttempts - 1, CDP_MAX_RECONNECT_DELAY_MS);
341
+ console.error(RECONNECTING_MESSAGE(delay, this.reconnectAttempts, CDP_MAX_RECONNECT_ATTEMPTS));
342
+ await new Promise((resolve) => setTimeout(resolve, delay));
137
343
  try {
138
- await this.attemptConnection(this.wsUrl);
344
+ await this.attemptConnection(this.wsUrl, this.connectionOptions);
139
345
  this.reconnectAttempts = 0;
140
- console.error('Reconnected successfully');
141
- // Re-enable domains
346
+ console.error(RECONNECTED_SUCCESS_MESSAGE);
142
347
  if (this.onReconnect) {
143
348
  await this.onReconnect();
144
349
  }
145
350
  }
146
351
  catch (error) {
147
- console.error('Reconnection failed:', error);
352
+ console.error(RECONNECTION_FAILED_ERROR(getErrorMessage(error)));
148
353
  }
149
354
  }
355
+ /**
356
+ * Start keepalive ping/pong mechanism.
357
+ *
358
+ * We use 3 missed pongs as the threshold because network conditions can
359
+ * cause occasional packet loss, but 3 consecutive failures likely indicates
360
+ * a dead connection that should be terminated rather than waiting longer.
361
+ */
150
362
  startKeepalive(interval) {
151
363
  this.pingInterval = setInterval(() => {
152
364
  if (this.ws && this.ws.readyState === WebSocket.OPEN) {
153
365
  this.missedPongs++;
154
- if (this.missedPongs >= this.MAX_MISSED_PONGS) {
155
- console.error('Connection lost: no pong received');
156
- this.ws.close(1001, 'No pong received');
366
+ if (this.missedPongs >= CDP_MAX_MISSED_PONGS) {
367
+ console.error(CONNECTION_LOST_MESSAGE);
368
+ this.ws.close(WEBSOCKET_NO_PONG_CLOSURE, NO_PONG_RECEIVED_REASON);
157
369
  return;
158
370
  }
159
371
  this.ws.ping();
160
372
  this.pongTimeout = setTimeout(() => {
161
- console.error('Pong timeout');
162
- }, 5000);
373
+ console.error(PONG_TIMEOUT_MESSAGE);
374
+ // Pong timeout is informational - the connection will be closed
375
+ // on the next ping cycle if no pong is received
376
+ }, CDP_PONG_TIMEOUT_MS);
163
377
  }
164
378
  }, interval);
165
379
  }
@@ -176,52 +390,55 @@ export class CDPConnection {
176
390
  /**
177
391
  * Get the CDP port from the WebSocket URL.
178
392
  *
393
+ * Used by other modules that need to make HTTP requests to the same
394
+ * Chrome instance (e.g., fetching target list via /json/list endpoint).
395
+ *
179
396
  * @returns CDP port number
180
- * @throws Error if not connected or URL is invalid
397
+ * @throws CDPConnectionError if not connected or URL is invalid
181
398
  */
182
399
  getPort() {
183
400
  if (!this.wsUrl) {
184
- throw new Error('Not connected - no WebSocket URL available');
401
+ throw new CDPConnectionError(NOT_CONNECTED_URL_ERROR);
185
402
  }
186
403
  try {
187
404
  const url = new URL(this.wsUrl);
188
405
  return parseInt(url.port, 10);
189
406
  }
190
407
  catch (error) {
191
- throw new Error(`Invalid WebSocket URL: ${this.wsUrl}`);
408
+ throw new CDPConnectionError(INVALID_WEBSOCKET_URL_ERROR(this.wsUrl, getErrorMessage(error)));
192
409
  }
193
410
  }
194
411
  /**
195
412
  * Send a CDP command and wait for the response.
196
413
  *
414
+ * Return type is unknown because CDP response structures vary dramatically
415
+ * by method (DOM.getDocument vs Page.navigate vs Runtime.evaluate all return
416
+ * completely different object shapes). Callers must type-assert based on
417
+ * the specific method being called. 30-second timeout balances responsiveness
418
+ * with allowing time for heavy operations like DOM traversal.
419
+ *
197
420
  * @param method - CDP method name (e.g., 'Page.navigate', 'DOM.getDocument')
198
421
  * @param params - Method parameters
199
422
  * @param sessionId - Optional session ID for commands sent to specific targets
423
+ * (used when controlling specific frames or workers)
200
424
  * @returns Promise resolving to the command result
201
- * @throws Error if not connected or command times out (30s)
202
- *
203
- * @remarks
204
- * Return type is `any` because CDP response structures vary by method.
205
- * Callers should type-assert the result based on the specific method called.
425
+ * @throws CDPConnectionError if not connected to browser
426
+ * @throws CDPTimeoutError if command times out (30s)
206
427
  */
207
428
  async send(method, params = {}, sessionId) {
208
429
  if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
209
- throw new Error('Not connected to browser');
430
+ throw new CDPConnectionError(NOT_CONNECTED_BROWSER_ERROR);
210
431
  }
211
432
  const id = ++this.messageId;
212
433
  const message = { id, method, params };
213
- // Add sessionId if provided (for commands sent to specific targets)
214
434
  if (sessionId) {
215
435
  message.sessionId = sessionId;
216
436
  }
217
437
  return new Promise((resolve, reject) => {
218
438
  const timeout = setTimeout(() => {
219
- const pending = this.pendingMessages.get(id);
220
- if (pending) {
221
- this.pendingMessages.delete(id);
222
- reject(new Error(`Command timeout: ${method}`));
223
- }
224
- }, 30000);
439
+ this.pendingMessages.delete(id);
440
+ reject(new CDPTimeoutError(COMMAND_TIMEOUT_ERROR(method)));
441
+ }, CDP_COMMAND_TIMEOUT_MS);
225
442
  this.pendingMessages.set(id, {
226
443
  resolve: (value) => {
227
444
  clearTimeout(timeout);
@@ -231,28 +448,33 @@ export class CDPConnection {
231
448
  clearTimeout(timeout);
232
449
  reject(error);
233
450
  },
234
- timeout
451
+ timeout,
235
452
  });
453
+ // Safe to assert non-null: we checked this.ws exists on line 543
454
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
236
455
  this.ws.send(JSON.stringify(message));
237
456
  });
238
457
  }
239
458
  /**
240
459
  * Register an event handler for CDP events.
241
460
  *
461
+ * Type casting is safe because we store handlers as (params: unknown) \> void
462
+ * and always invoke them with unknown parameters. The generic T is only for
463
+ * caller convenience and type checking at the call site.
464
+ *
242
465
  * @param event - CDP event name (e.g., 'Network.requestWillBeSent')
243
466
  * @param handler - Callback function to handle the event
244
467
  * @returns Handler ID for later removal with off()
245
- *
246
- * @remarks
247
- * Handler parameter type is `any` for flexibility. Callers should use typed
248
- * event parameter interfaces (e.g., `CDPNetworkRequestParams`) at call site.
468
+ * @typeParam T - Type of event parameters for type safety at call site
249
469
  */
250
470
  on(event, handler) {
251
- if (!this.eventHandlers.has(event)) {
252
- this.eventHandlers.set(event, new Map());
471
+ let handlersForEvent = this.eventHandlers.get(event);
472
+ if (!handlersForEvent) {
473
+ handlersForEvent = new Map();
474
+ this.eventHandlers.set(event, handlersForEvent);
253
475
  }
254
476
  const handlerId = ++this.nextHandlerId;
255
- this.eventHandlers.get(event).set(handlerId, handler);
477
+ handlersForEvent.set(handlerId, handler);
256
478
  return handlerId;
257
479
  }
258
480
  /**
@@ -286,19 +508,17 @@ export class CDPConnection {
286
508
  /**
287
509
  * Close the WebSocket connection and clean up resources.
288
510
  *
511
+ * Performs complete cleanup including stopping keepalive, rejecting pending
512
+ * messages, closing WebSocket, and removing all event handlers.
513
+ *
289
514
  * @param code - WebSocket close code (default: 1000 for normal closure)
290
515
  * @param reason - Human-readable close reason
291
516
  */
292
- close(code = 1000, reason = 'Normal closure') {
517
+ close(code = WEBSOCKET_NORMAL_CLOSURE, reason = NORMAL_CLOSURE_REASON) {
293
518
  this.isIntentionallyClosed = true;
294
519
  this.autoReconnect = false;
295
520
  this.stopKeepalive();
296
- // Clear all pending messages
297
- this.pendingMessages.forEach((pending) => {
298
- clearTimeout(pending.timeout);
299
- pending.reject(new Error('Connection closed'));
300
- });
301
- this.pendingMessages.clear();
521
+ this.clearPendingMessages(new CDPConnectionError(CONNECTION_CLOSED_ERROR));
302
522
  if (this.ws) {
303
523
  this.ws.close(code, reason);
304
524
  this.ws = null;
@@ -308,7 +528,7 @@ export class CDPConnection {
308
528
  /**
309
529
  * Check if the WebSocket connection is open and ready.
310
530
  *
311
- * @returns True if connected and ready to send/receive
531
+ * @returns True if connected and ready to send/receive messages
312
532
  */
313
533
  isConnected() {
314
534
  return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
@@ -1 +1 @@
1
- {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../src/connection/cdp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../src/connection/cdp.ts"],"names":[],"mappings":"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"}