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
@@ -0,0 +1,109 @@
1
+ import { formatPreview, formatNoPreviewDataMessage, } from '../formatters/previewFormatter.js';
2
+ import { OutputBuilder } from '../handlers/OutputBuilder.js';
3
+ import { jsonOption } from '../handlers/commonOptions.js';
4
+ import { getPeek } from '../../ipc/client.js';
5
+ import { validateIPCResponse } from '../../ipc/responseValidator.js';
6
+ import { EXIT_CODES } from '../../utils/exitCodes.js';
7
+ /**
8
+ * Handle errors in a consistent way for both follow and one-time modes.
9
+ *
10
+ * @param error - Error message
11
+ * @param options - Preview options
12
+ * @param exitCode - Exit code to use if not in follow mode
13
+ */
14
+ function handlePreviewError(error, options, exitCode) {
15
+ if (options.json) {
16
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(error), null, 2));
17
+ }
18
+ else {
19
+ console.error(formatNoPreviewDataMessage());
20
+ }
21
+ if (!options.follow) {
22
+ process.exit(exitCode);
23
+ }
24
+ }
25
+ /**
26
+ * Register peek command.
27
+ *
28
+ * @param program - Commander.js Command instance to register commands on
29
+ */
30
+ export function registerPeekCommand(program) {
31
+ program
32
+ .command('peek')
33
+ .description('Preview collected data without stopping the session')
34
+ .addOption(jsonOption)
35
+ .option('-v, --verbose', 'Use verbose output with full URLs and formatting')
36
+ .option('-n, --network', 'Show only network requests')
37
+ .option('-c, --console', 'Show only console messages')
38
+ .option('-f, --follow', 'Watch for updates (like tail -f)')
39
+ .option('--last <count>', 'Show last N items', '10')
40
+ .action(async (options) => {
41
+ // Validate --last parameter
42
+ const lastN = parseInt(options.last ?? '10', 10);
43
+ if (isNaN(lastN) || lastN < 1 || lastN > 1000) {
44
+ console.error('Error: --last must be between 1 and 1000');
45
+ console.error('Provided value:', options.last);
46
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
47
+ }
48
+ options.last = lastN.toString();
49
+ const showPreview = async () => {
50
+ try {
51
+ // Fetch preview data via IPC from daemon
52
+ const response = await getPeek();
53
+ // Validate IPC response (will throw on error)
54
+ try {
55
+ validateIPCResponse(response);
56
+ }
57
+ catch {
58
+ handlePreviewError(response.error ?? 'Unknown error', options, EXIT_CODES.RESOURCE_NOT_FOUND);
59
+ return;
60
+ }
61
+ // Extract preview data from response
62
+ const output = response.data?.preview;
63
+ if (!output) {
64
+ handlePreviewError('No preview data in response', options, EXIT_CODES.RESOURCE_NOT_FOUND);
65
+ return;
66
+ }
67
+ if (!options.follow) {
68
+ console.clear();
69
+ }
70
+ console.log(formatPreview(output, options));
71
+ }
72
+ catch {
73
+ // Handle IPC connection errors (daemon not running, etc.)
74
+ // Note: validateIPCResponse errors are caught above
75
+ if (options.json) {
76
+ console.log(JSON.stringify(OutputBuilder.buildJsonError('Daemon not running', {
77
+ suggestion: 'Start it with: bdg <url>',
78
+ }), null, 2));
79
+ }
80
+ else {
81
+ console.error('Error: Daemon not running');
82
+ console.error('Start it with: bdg <url>');
83
+ }
84
+ if (!options.follow) {
85
+ process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
86
+ }
87
+ }
88
+ };
89
+ if (options.follow) {
90
+ // Follow mode: update every second
91
+ console.error('Following live preview (Ctrl+C to stop)...\n');
92
+ await showPreview();
93
+ const followInterval = setInterval(() => {
94
+ void showPreview();
95
+ }, 1000);
96
+ // Handle Ctrl+C gracefully
97
+ process.on('SIGINT', () => {
98
+ clearInterval(followInterval);
99
+ console.error('\nStopped following preview');
100
+ process.exit(EXIT_CODES.SUCCESS);
101
+ });
102
+ }
103
+ else {
104
+ // One-time preview
105
+ await showPreview();
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=peek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../../src/cli/commands/peek.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register query command
4
+ *
5
+ * @param program - Commander.js Command instance to register commands on
6
+ * @returns void
7
+ */
8
+ export declare function registerQueryCommand(program: Command): void;
9
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkJ3D"}
@@ -0,0 +1,127 @@
1
+ import { OutputBuilder } from '../handlers/OutputBuilder.js';
2
+ import { DEFAULT_DEBUG_PORT, PORT_OPTION_DESCRIPTION } from '../../constants.js';
3
+ import { readPid } from '../../session/pid.js';
4
+ import { isProcessAlive } from '../../session/process.js';
5
+ import { getErrorMessage } from '../../utils/errors.js';
6
+ import { EXIT_CODES } from '../../utils/exitCodes.js';
7
+ /**
8
+ * Register query command
9
+ *
10
+ * @param program - Commander.js Command instance to register commands on
11
+ * @returns void
12
+ */
13
+ export function registerQueryCommand(program) {
14
+ program
15
+ .command('query')
16
+ .description('Execute JavaScript in the active session for live debugging')
17
+ .argument('<script>', 'JavaScript to execute (e.g., "document.querySelector(\'input[type=email]\').value")')
18
+ .option('-p, --port <number>', PORT_OPTION_DESCRIPTION, DEFAULT_DEBUG_PORT)
19
+ .option('-j, --json', 'Wrap result in version/success format')
20
+ .action(async (script, options) => {
21
+ try {
22
+ const port = parseInt(options.port, 10);
23
+ // Check if session is running
24
+ const pid = readPid();
25
+ if (!pid || !isProcessAlive(pid)) {
26
+ const errorMsg = 'No active session running';
27
+ if (options.json) {
28
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, {
29
+ suggestion: 'Start a session with: bdg <url>',
30
+ }), null, 2));
31
+ }
32
+ else {
33
+ console.error(`Error: ${errorMsg}`);
34
+ console.error('Start a session with: bdg <url>');
35
+ }
36
+ process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
37
+ }
38
+ // Read session metadata to get the target ID
39
+ const { readSessionMetadata } = await import('../../session/metadata.js');
40
+ const metadata = readSessionMetadata();
41
+ if (!metadata?.targetId || !metadata.webSocketDebuggerUrl) {
42
+ const errorMsg = 'No target information in session metadata';
43
+ if (options.json) {
44
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, {
45
+ note: 'Session may have been started with an older version',
46
+ }), null, 2));
47
+ }
48
+ else {
49
+ console.error(`Error: ${errorMsg}`);
50
+ console.error('Session may have been started with an older version');
51
+ }
52
+ process.exit(EXIT_CODES.SESSION_FILE_ERROR);
53
+ }
54
+ // Verify the target still exists
55
+ const response = await fetch(`http://127.0.0.1:${port}/json/list`);
56
+ const targetsData = await response.json();
57
+ if (!Array.isArray(targetsData)) {
58
+ const errorMsg = 'Invalid response from CDP';
59
+ if (options.json) {
60
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
61
+ }
62
+ else {
63
+ console.error(`Error: ${errorMsg}`);
64
+ }
65
+ process.exit(EXIT_CODES.CDP_CONNECTION_FAILURE);
66
+ }
67
+ const target = targetsData.find((t) => t.id === metadata.targetId);
68
+ if (!target) {
69
+ const errorMsg = 'Session target not found (tab may have been closed)';
70
+ if (options.json) {
71
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, {
72
+ suggestion: 'Start a new session with: bdg <url>',
73
+ }), null, 2));
74
+ }
75
+ else {
76
+ console.error(`Error: ${errorMsg}`);
77
+ console.error('Start a new session with: bdg <url>');
78
+ }
79
+ process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
80
+ }
81
+ // Create temporary CDP connection using stored webSocketDebuggerUrl
82
+ const { CDPConnection } = await import('../../connection/cdp.js');
83
+ const cdp = new CDPConnection();
84
+ await cdp.connect(metadata.webSocketDebuggerUrl);
85
+ // Execute JavaScript
86
+ const result = (await cdp.send('Runtime.evaluate', {
87
+ expression: script,
88
+ returnByValue: true,
89
+ awaitPromise: true,
90
+ }));
91
+ cdp.close();
92
+ // Output result
93
+ if (result.exceptionDetails) {
94
+ const errorMsg = result.exceptionDetails.exception?.description ?? 'Unknown error executing script';
95
+ if (options.json) {
96
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
97
+ }
98
+ else {
99
+ console.error('Error executing script:');
100
+ console.error(errorMsg);
101
+ }
102
+ process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
103
+ }
104
+ // Output result (wrapped if --json, raw otherwise)
105
+ if (options.json) {
106
+ console.log(JSON.stringify(OutputBuilder.buildJsonSuccess({
107
+ result: result.result?.value,
108
+ }), null, 2));
109
+ }
110
+ else {
111
+ console.log(JSON.stringify(result.result?.value, null, 2));
112
+ }
113
+ process.exit(EXIT_CODES.SUCCESS);
114
+ }
115
+ catch (error) {
116
+ const errorMsg = getErrorMessage(error);
117
+ if (options.json) {
118
+ console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
119
+ }
120
+ else {
121
+ console.error(`Error: ${errorMsg}`);
122
+ }
123
+ process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
124
+ }
125
+ });
126
+ }
127
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the start command
4
+ *
5
+ * @param program - Commander.js Command instance to register command on
6
+ * @returns void
7
+ */
8
+ export declare function registerStartCommands(program: Command): void;
9
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6GzC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO5D"}
@@ -0,0 +1,78 @@
1
+ import { startSessionViaDaemon } from '../handlers/daemonSessionController.js';
2
+ import { DEFAULT_DEBUG_PORT, PORT_OPTION_DESCRIPTION, TIMEOUT_OPTION_DESCRIPTION, USER_DATA_DIR_OPTION_DESCRIPTION, } from '../../constants.js';
3
+ /**
4
+ * Apply shared collector options to a command
5
+ *
6
+ * @param command - Commander.js Command instance to apply options to
7
+ * @returns The modified Command instance with all collector options applied
8
+ */
9
+ function applyCollectorOptions(command) {
10
+ return command
11
+ .option('-p, --port <number>', PORT_OPTION_DESCRIPTION, DEFAULT_DEBUG_PORT)
12
+ .option('-t, --timeout <seconds>', TIMEOUT_OPTION_DESCRIPTION)
13
+ .option('-u, --user-data-dir <path>', USER_DATA_DIR_OPTION_DESCRIPTION)
14
+ .option('-a, --all', 'Include all data (disable filtering of tracking/analytics)')
15
+ .option('-m, --max-body-size <megabytes>', 'Maximum response body size in MB (default: 5MB)', '5')
16
+ .option('--compact', 'Use compact JSON format (no indentation) for output files');
17
+ }
18
+ /**
19
+ * Parse a string to integer, returning undefined if not provided
20
+ * @param value - Optional string value to parse
21
+ * @param fieldName - Name of the field being parsed (for error messages)
22
+ * @returns Parsed integer or undefined if value was not provided
23
+ * @throws Error if value is provided but not a valid integer
24
+ */
25
+ function parseOptionalInt(value, fieldName) {
26
+ if (value === undefined) {
27
+ return undefined;
28
+ }
29
+ const parsed = parseInt(value, 10);
30
+ if (isNaN(parsed)) {
31
+ throw new Error(`Invalid ${fieldName}: "${value}" is not a valid integer`);
32
+ }
33
+ return parsed;
34
+ }
35
+ /**
36
+ * Transform CLI options into session options
37
+ *
38
+ * @param options - Parsed command-line options from Commander
39
+ * @returns Session options object with parsed and normalized values
40
+ */
41
+ function buildSessionOptions(options) {
42
+ const maxBodySizeMB = parseOptionalInt(options.maxBodySize, 'max-body-size');
43
+ return {
44
+ port: parseInt(options.port, 10),
45
+ timeout: parseOptionalInt(options.timeout, 'timeout'),
46
+ userDataDir: options.userDataDir,
47
+ includeAll: options.all ?? false,
48
+ maxBodySize: maxBodySizeMB !== undefined ? maxBodySizeMB * 1024 * 1024 : undefined,
49
+ compact: options.compact ?? false,
50
+ };
51
+ }
52
+ /**
53
+ * Common action handler for collector commands
54
+ *
55
+ * @param url - Target URL to collect telemetry from
56
+ * @param options - Parsed command-line options from Commander
57
+ * @returns Promise that resolves when session completes or is stopped
58
+ */
59
+ async function collectorAction(url, options) {
60
+ const sessionOptions = buildSessionOptions(options);
61
+ // Always collect all 3 types (dom, network, console)
62
+ const collectors = ['dom', 'network', 'console'];
63
+ // Dispatch to daemon via IPC instead of running in-process
64
+ await startSessionViaDaemon(url, sessionOptions, collectors);
65
+ }
66
+ /**
67
+ * Register the start command
68
+ *
69
+ * @param program - Commander.js Command instance to register command on
70
+ * @returns void
71
+ */
72
+ export function registerStartCommands(program) {
73
+ // Default command: always collects all 3 types (dom, network, console)
74
+ applyCollectorOptions(program.argument('<url>', 'Target URL (example.com or localhost:3000)')).action(async (url, options) => {
75
+ await collectorAction(url, options);
76
+ });
77
+ }
78
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,aAAa,CAAC;AAqBrB;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,OAAO,OAAO;SACX,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,CAAC;SAC1E,MAAM,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;SAC7D,MAAM,CAAC,4BAA4B,EAAE,gCAAgC,CAAC;SACtE,MAAM,CAAC,WAAW,EAAE,4DAA4D,CAAC;SACjF,MAAM,CACL,iCAAiC,EACjC,iDAAiD,EACjD,GAAG,CACJ;SACA,MAAM,CAAC,WAAW,EAAE,2DAA2D,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAyB,EAAE,SAAiB;IACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,MAAM,KAAK,0BAA0B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,OAAyB;IAQpD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7E,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QACrD,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;QAChC,WAAW,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;QAClF,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,OAAyB;IACnE,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEpD,qDAAqD;IACrD,MAAM,UAAU,GAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAElE,2DAA2D;IAC3D,MAAM,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,uEAAuE;IACvE,qBAAqB,CACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,4CAA4C,CAAC,CACxE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAyB,EAAE,EAAE;QACxD,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register status command
4
+ *
5
+ * @param program - Commander.js Command instance to register commands on
6
+ * @returns void
7
+ */
8
+ export declare function registerStatusCommand(program: Command): void;
9
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE5D"}
@@ -0,0 +1,84 @@
1
+ import { formatSessionStatus, formatStatusAsJson, formatNoSessionMessage, } from '../formatters/statusFormatter.js';
2
+ import { getStatus } from '../../ipc/client.js';
3
+ import { cleanupStaleDaemonPid } from '../../session/cleanup.js';
4
+ import { getErrorMessage } from '../../utils/errors.js';
5
+ import { EXIT_CODES } from '../../utils/exitCodes.js';
6
+ import { VERSION } from '../../utils/version.js';
7
+ /**
8
+ * Register status command
9
+ *
10
+ * @param program - Commander.js Command instance to register commands on
11
+ * @returns void
12
+ */
13
+ export function registerStatusCommand(program) {
14
+ program
15
+ .command('status')
16
+ .description('Show active session status and collection statistics')
17
+ .option('-j, --json', 'Output as JSON')
18
+ .option('-v, --verbose', 'Show detailed Chrome diagnostics')
19
+ .action(async (options) => {
20
+ try {
21
+ // Request status from daemon via IPC
22
+ const response = await getStatus();
23
+ // Handle IPC error response
24
+ if (response.status === 'error') {
25
+ console.error(`Daemon error: ${response.error ?? 'Unknown error'}`);
26
+ process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
27
+ }
28
+ // Extract data from response
29
+ const { data } = response;
30
+ if (!data) {
31
+ console.error('Invalid response from daemon: missing data');
32
+ process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
33
+ }
34
+ // Check if there's an active session
35
+ if (!data.sessionPid || !data.sessionMetadata) {
36
+ if (options.json) {
37
+ console.log(JSON.stringify({ version: VERSION, active: false }, null, 2));
38
+ }
39
+ else {
40
+ console.error(formatNoSessionMessage());
41
+ }
42
+ process.exit(EXIT_CODES.SUCCESS);
43
+ }
44
+ // Convert IPC metadata to SessionMetadata format
45
+ const metadata = {
46
+ bdgPid: data.sessionMetadata.bdgPid,
47
+ chromePid: data.sessionMetadata.chromePid,
48
+ startTime: data.sessionMetadata.startTime,
49
+ port: data.sessionMetadata.port,
50
+ targetId: data.sessionMetadata.targetId,
51
+ webSocketDebuggerUrl: data.sessionMetadata.webSocketDebuggerUrl,
52
+ activeCollectors: data.sessionMetadata.activeCollectors,
53
+ };
54
+ if (options.json) {
55
+ // JSON output
56
+ const jsonOutput = formatStatusAsJson(metadata, data.sessionPid);
57
+ console.log(JSON.stringify(jsonOutput, null, 2));
58
+ }
59
+ else {
60
+ // Human-readable output
61
+ console.log(formatSessionStatus(metadata, data.sessionPid, options.verbose ?? false));
62
+ }
63
+ process.exit(EXIT_CODES.SUCCESS);
64
+ }
65
+ catch (error) {
66
+ // Handle connection errors (daemon not running)
67
+ const errorMessage = getErrorMessage(error);
68
+ if (errorMessage.includes('ENOENT') || errorMessage.includes('ECONNREFUSED')) {
69
+ // P0 Fix #2: Auto-cleanup stale daemon PID if it exists
70
+ const cleaned = cleanupStaleDaemonPid();
71
+ if (cleaned) {
72
+ console.error('Daemon not running (stale PID cleaned up). Start it with: bdg <url>');
73
+ }
74
+ else {
75
+ console.error('Daemon not running. Start it with: bdg <url>');
76
+ }
77
+ process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
78
+ }
79
+ console.error(`Error checking status: ${errorMessage}`);
80
+ process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
81
+ }
82
+ });
83
+ }
84
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register stop command
4
+ *
5
+ * @param program - Commander.js Command instance to register commands on
6
+ */
7
+ export declare function registerStopCommand(program: Command): void;
8
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiFzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8F1D"}
@@ -0,0 +1,146 @@
1
+ import { runCommand } from '../handlers/CommandRunner.js';
2
+ import { jsonOption } from '../handlers/commonOptions.js';
3
+ import { stopSession } from '../../ipc/client.js';
4
+ import { IPCErrorCode } from '../../ipc/types.js';
5
+ import { clearChromePid } from '../../session/chrome.js';
6
+ import { killChromeProcess } from '../../session/process.js';
7
+ import { getErrorMessage } from '../../utils/errors.js';
8
+ import { EXIT_CODES } from '../../utils/exitCodes.js';
9
+ /**
10
+ * Format stop result for human-readable output.
11
+ *
12
+ * @param data - Stop result data
13
+ */
14
+ function formatStop(data) {
15
+ if (data.stopped.bdg) {
16
+ console.error('Session stopped successfully');
17
+ }
18
+ if (data.stopped.chrome) {
19
+ console.error('Killed Chrome');
20
+ }
21
+ if (data.warnings && data.warnings.length > 0) {
22
+ data.warnings.forEach((warning) => {
23
+ console.error(`Warning: ${warning}`);
24
+ });
25
+ }
26
+ }
27
+ /**
28
+ * Map daemon error codes to appropriate exit codes.
29
+ *
30
+ * @param errorCode - IPC error code from daemon response
31
+ * @returns Semantic exit code
32
+ */
33
+ function getExitCodeForDaemonError(errorCode) {
34
+ switch (errorCode) {
35
+ case IPCErrorCode.NO_SESSION:
36
+ return EXIT_CODES.RESOURCE_NOT_FOUND;
37
+ case IPCErrorCode.SESSION_KILL_FAILED:
38
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
39
+ case IPCErrorCode.DAEMON_ERROR:
40
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
41
+ case IPCErrorCode.SESSION_ALREADY_RUNNING:
42
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
43
+ case IPCErrorCode.WORKER_START_FAILED:
44
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
45
+ case IPCErrorCode.CHROME_LAUNCH_FAILED:
46
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
47
+ case IPCErrorCode.CDP_TIMEOUT:
48
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
49
+ case undefined:
50
+ return EXIT_CODES.UNHANDLED_EXCEPTION;
51
+ }
52
+ }
53
+ /**
54
+ * Register stop command
55
+ *
56
+ * @param program - Commander.js Command instance to register commands on
57
+ */
58
+ export function registerStopCommand(program) {
59
+ program
60
+ .command('stop')
61
+ .description('Stop all active sessions and free ports (does not capture output)')
62
+ .option('--kill-chrome', 'Also kill Chrome browser')
63
+ .addOption(jsonOption)
64
+ .action(async (options) => {
65
+ await runCommand(async (opts) => {
66
+ try {
67
+ // Try to stop session via IPC (daemon)
68
+ const response = await stopSession();
69
+ if (response.status === 'ok') {
70
+ // Session stopped successfully via daemon
71
+ let chromeStopped = false;
72
+ const warnings = [];
73
+ // Handle Chrome if requested (daemon captured Chrome PID before cleanup)
74
+ if (opts.killChrome) {
75
+ const chromePid = response.chromePid;
76
+ if (chromePid) {
77
+ try {
78
+ killChromeProcess(chromePid, 'SIGTERM');
79
+ chromeStopped = true;
80
+ console.error(`Killed Chrome (PID ${chromePid})`);
81
+ clearChromePid();
82
+ }
83
+ catch (chromeError) {
84
+ const errorMessage = chromeError instanceof Error ? chromeError.message : String(chromeError);
85
+ warnings.push(`Could not kill Chrome: ${errorMessage}`);
86
+ }
87
+ }
88
+ else {
89
+ warnings.push('Chrome PID not found (Chrome was not launched by bdg)');
90
+ }
91
+ }
92
+ return {
93
+ success: true,
94
+ data: {
95
+ stopped: { bdg: true, chrome: chromeStopped },
96
+ message: response.message ?? 'Session stopped successfully',
97
+ ...(warnings.length > 0 && { warnings }),
98
+ },
99
+ };
100
+ }
101
+ else {
102
+ // Daemon returned error
103
+ // Special case: NO_SESSION is not really an error - it's a success (desired state achieved)
104
+ if (response.errorCode === IPCErrorCode.NO_SESSION) {
105
+ return {
106
+ success: true,
107
+ data: {
108
+ stopped: { bdg: false, chrome: false },
109
+ message: response.message ?? 'No active session found',
110
+ },
111
+ };
112
+ }
113
+ // Other errors are actual failures
114
+ const exitCode = getExitCodeForDaemonError(response.errorCode);
115
+ return {
116
+ success: false,
117
+ error: response.message ?? 'Failed to stop session',
118
+ exitCode,
119
+ };
120
+ }
121
+ }
122
+ catch (error) {
123
+ // IPC transport failure (ENOENT, ECONNREFUSED, timeout, etc.)
124
+ const errorMessage = getErrorMessage(error);
125
+ // Check if it's a connection error (daemon not running)
126
+ if (errorMessage.includes('ENOENT') || errorMessage.includes('ECONNREFUSED')) {
127
+ return {
128
+ success: false,
129
+ error: 'Daemon not running',
130
+ exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
131
+ errorContext: {
132
+ suggestion: 'Start a session first with: bdg <url>',
133
+ },
134
+ };
135
+ }
136
+ // Other errors (timeout, parse failures, etc.)
137
+ return {
138
+ success: false,
139
+ error: `Stop session failed: ${errorMessage}`,
140
+ exitCode: EXIT_CODES.UNHANDLED_EXCEPTION,
141
+ };
142
+ }
143
+ }, options, formatStop);
144
+ });
145
+ }
146
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"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"}