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,33 @@
1
+ /**
2
+ * Worker IPC Message Types
3
+ *
4
+ * Defines non-command messages for communication between daemon and worker process.
5
+ * Command messages are defined in \@/ipc/commands.ts
6
+ */
7
+ /**
8
+ * Base message type for worker IPC
9
+ */
10
+ export interface WorkerIPCMessage {
11
+ type: string;
12
+ requestId: string;
13
+ }
14
+ /**
15
+ * Worker ready signal sent from worker to daemon on startup.
16
+ * This is NOT a command - it's a lifecycle signal.
17
+ */
18
+ export interface WorkerReadyMessage extends WorkerIPCMessage {
19
+ type: 'worker_ready';
20
+ workerPid: number;
21
+ chromePid: number;
22
+ port: number;
23
+ target: {
24
+ url: string;
25
+ title?: string;
26
+ };
27
+ }
28
+ /**
29
+ * Union type of all non-command worker responses.
30
+ * Command responses are defined in \@/ipc/commands.ts (WorkerResponseUnion)
31
+ */
32
+ export type WorkerIPCResponse = WorkerReadyMessage;
33
+ //# sourceMappingURL=workerIpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerIpc.d.ts","sourceRoot":"","sources":["../../src/daemon/workerIpc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Worker IPC Message Types
3
+ *
4
+ * Defines non-command messages for communication between daemon and worker process.
5
+ * Command messages are defined in \@/ipc/commands.ts
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=workerIpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerIpc.js","sourceRoot":"","sources":["../../src/daemon/workerIpc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Daemon Entry Point - Standalone IPC Server
4
+ *
5
+ * This is a minimal standalone daemon process that runs the IPC server.
6
+ * For MVP: manually start with `node dist/daemon.js`
7
+ * Future: integrate with proper daemon lifecycle management.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
package/dist/daemon.js ADDED
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Daemon Entry Point - Standalone IPC Server
4
+ *
5
+ * This is a minimal standalone daemon process that runs the IPC server.
6
+ * For MVP: manually start with `node dist/daemon.js`
7
+ * Future: integrate with proper daemon lifecycle management.
8
+ */
9
+ import { IPCServer } from './daemon/ipcServer.js';
10
+ const server = new IPCServer();
11
+ // Graceful shutdown handlers
12
+ process.on('SIGINT', () => {
13
+ console.error('\n[daemon] Received SIGINT, shutting down...');
14
+ void server.stop().then(() => process.exit(0));
15
+ });
16
+ process.on('SIGTERM', () => {
17
+ console.error('\n[daemon] Received SIGTERM, shutting down...');
18
+ void server.stop().then(() => process.exit(0));
19
+ });
20
+ // Start the server
21
+ void (async () => {
22
+ try {
23
+ await server.start();
24
+ console.error('[daemon] IPC server started successfully');
25
+ console.error('[daemon] Press Ctrl+C to stop');
26
+ }
27
+ catch (error) {
28
+ console.error('[daemon] Failed to start:', error);
29
+ process.exit(1);
30
+ }
31
+ })();
32
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAE/B,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,431 +1,52 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
- import { launchChrome, isChromeRunning } from './connection/launcher.js';
4
- import { BdgSession } from './session/BdgSession.js';
5
- import { normalizeUrl } from './utils/url.js';
6
- import { validateCollectorTypes } from './utils/validation.js';
7
- import { createOrFindTarget } from './connection/tabs.js';
8
- import { writePid, readPid, isProcessAlive, writeSessionOutput, acquireSessionLock, writeSessionMetadata, cleanupSession } from './utils/session.js';
9
- const program = new Command();
10
- // Global state for signal handling
11
- let session = null;
12
- let launchedChrome = null;
13
- let isShuttingDown = false;
14
- let shutdownKeepalive = null;
15
- async function handleStop() {
16
- if (isShuttingDown || !session) {
17
- return;
18
- }
19
- isShuttingDown = true;
20
- // Keep event loop alive during shutdown to prevent premature exit
21
- shutdownKeepalive = setInterval(() => { }, 1000);
22
- try {
23
- console.error('Stopping session...');
24
- const output = await session.stop();
25
- // Write to file for 'bdg stop' to read (synchronous to ensure it completes)
26
- try {
27
- console.error('Writing session output...');
28
- writeSessionOutput(output);
29
- console.error('Session output written successfully');
30
- }
31
- catch (writeError) {
32
- console.error('Failed to write session output:', writeError);
33
- console.error('Write error details:', writeError);
34
- }
35
- // Also output to stdout (for foreground use)
36
- console.log(JSON.stringify(output, null, 2));
37
- // Leave Chrome running for future sessions (persistent profile benefit)
38
- if (launchedChrome) {
39
- console.error('Leaving Chrome running for future sessions (use persistent profile)');
40
- console.error(`Chrome PID: ${launchedChrome.pid}, port: ${launchedChrome.port}`);
41
- }
42
- // Cleanup session files
43
- try {
44
- cleanupSession();
45
- }
46
- catch (cleanupError) {
47
- console.error('Error cleaning up session:', cleanupError);
48
- }
49
- // Clear keepalive and exit
50
- if (shutdownKeepalive) {
51
- clearInterval(shutdownKeepalive);
52
- }
53
- process.exit(0);
54
- }
55
- catch (error) {
56
- console.error('Error during shutdown:', error);
57
- const errorOutput = {
58
- success: false,
59
- timestamp: new Date().toISOString(),
60
- duration: 0,
61
- target: { url: '', title: '' },
62
- data: {},
63
- error: error instanceof Error ? error.message : String(error)
64
- };
65
- // Write error output to file (synchronous to ensure it completes)
66
- try {
67
- console.error('Writing error output...');
68
- writeSessionOutput(errorOutput);
69
- console.error('Error output written successfully');
70
- }
71
- catch (writeError) {
72
- console.error('Failed to write error output:', writeError);
73
- console.error('Write error details:', writeError);
74
- }
75
- console.log(JSON.stringify(errorOutput, null, 2));
76
- // Leave Chrome running even on error
77
- if (launchedChrome) {
78
- console.error('Leaving Chrome running (use persistent profile)');
79
- console.error(`Chrome PID: ${launchedChrome.pid}, port: ${launchedChrome.port}`);
80
- }
81
- // Cleanup session files
82
- try {
83
- cleanupSession();
84
- }
85
- catch (cleanupError) {
86
- console.error('Error cleaning up session:', cleanupError);
87
- }
88
- // Clear keepalive and exit
89
- if (shutdownKeepalive) {
90
- clearInterval(shutdownKeepalive);
91
- }
92
- process.exit(1);
93
- }
94
- }
95
- // Register signal handlers
96
- // Wrap in async IIFE to ensure handler completes before exit
97
- process.on('SIGINT', () => {
98
- // Prevent multiple signals from being processed
99
- if (!isShuttingDown) {
100
- handleStop().catch((error) => {
101
- console.error('Fatal error during shutdown:', error);
102
- process.exit(1);
103
- });
104
- }
105
- });
106
- process.on('SIGTERM', () => {
107
- if (!isShuttingDown) {
108
- handleStop().catch((error) => {
109
- console.error('Fatal error during shutdown:', error);
110
- process.exit(1);
111
- });
112
- }
113
- });
114
- async function run(url, options, collectors) {
115
- const startTime = Date.now();
116
- try {
117
- // 1. Acquire session lock
118
- if (!acquireSessionLock()) {
119
- const existingPid = readPid();
120
- throw new Error(`Session already running (PID ${existingPid}). Stop it with: bdg stop`);
121
- }
122
- // Validate collector types
123
- validateCollectorTypes(collectors);
124
- // Normalize URL - add http:// if no protocol specified
125
- const targetUrl = normalizeUrl(url);
126
- // 2. Launch or connect to Chrome
127
- const chromeRunning = await isChromeRunning(options.port);
128
- if (!chromeRunning) {
129
- // Launch Chrome with target URL
130
- launchedChrome = await launchChrome({
131
- port: options.port,
132
- headless: false,
133
- url: targetUrl,
134
- userDataDir: options.userDataDir,
135
- });
136
- console.error(`Chrome launched (PID: ${launchedChrome.pid})`);
137
- }
138
- else {
139
- console.error(`Chrome already running on port ${options.port}`);
140
- }
141
- // 3. Create session (connects to CDP)
142
- // We need a temporary target just to connect to CDP
143
- // Then we'll use createOrFindTarget to get the right tab
144
- const tempResponse = await fetch(`http://127.0.0.1:${options.port}/json/list`);
145
- const tempTargets = await tempResponse.json();
146
- if (tempTargets.length === 0) {
147
- throw new Error('No targets available in Chrome');
148
- }
149
- // Use first available target to establish CDP connection
150
- session = new BdgSession(tempTargets[0], options.port);
151
- await session.connect();
152
- if (!session.isConnected()) {
153
- throw new Error('Failed to establish CDP connection');
154
- }
155
- // 4. Create or find target tab using TabManager
156
- console.error(`Finding or creating tab for: ${targetUrl}`);
157
- const target = await createOrFindTarget(url, session.getCDP(), options.reuseTab ?? false);
158
- console.error(`Using tab: ${target.url}`);
159
- // Fetch full target info with webSocketDebuggerUrl
160
- const fullTargetResponse = await fetch(`http://127.0.0.1:${options.port}/json/list`);
161
- const fullTargets = await fullTargetResponse.json();
162
- const fullTarget = fullTargets.find((t) => t.id === target.id);
163
- if (!fullTarget || !fullTarget.webSocketDebuggerUrl) {
164
- throw new Error(`Could not find webSocketDebuggerUrl for target ${target.id}`);
165
- }
166
- // Update session with the correct target
167
- // Close current session and reconnect to the correct target
168
- await session.getCDP().close();
169
- session = new BdgSession(fullTarget, options.port);
170
- await session.connect();
171
- // 5. Start collectors
172
- for (const collector of collectors) {
173
- await session.startCollector(collector);
174
- }
175
- // 6. Write session metadata
176
- writePid(process.pid);
177
- writeSessionMetadata({
178
- bdgPid: process.pid,
179
- chromePid: launchedChrome?.pid,
180
- startTime,
181
- port: options.port,
182
- targetId: fullTarget.id,
183
- webSocketDebuggerUrl: fullTarget.webSocketDebuggerUrl,
184
- });
185
- const collectorNames = collectors.length === 3
186
- ? 'network, console, and DOM'
187
- : collectors.join(', ');
188
- if (options.timeout) {
189
- console.error(`Collecting ${collectorNames}... (Ctrl+C to stop and output, or wait ${options.timeout}s for timeout)`);
190
- // Set timeout if explicitly provided
191
- setTimeout(() => {
192
- console.error(`\nTimeout reached (${options.timeout}s)`);
193
- handleStop();
194
- }, options.timeout * 1000);
195
- }
196
- else {
197
- console.error(`Collecting ${collectorNames}... (Ctrl+C to stop and output, or use 'bdg stop')`);
198
- }
199
- // 7. Keep alive until signal or error
200
- await new Promise((_, reject) => {
201
- if (!session) {
202
- reject(new Error('Session not initialized'));
203
- return;
204
- }
205
- // Listen for WebSocket connection loss
206
- const connectionCheckInterval = setInterval(() => {
207
- if (!session) {
208
- clearInterval(connectionCheckInterval);
209
- return;
210
- }
211
- if (!session.isConnected()) {
212
- clearInterval(connectionCheckInterval);
213
- reject(new Error('WebSocket connection lost'));
214
- return;
215
- }
216
- }, 2000); // Check every 2 seconds
217
- // Listen for target destruction (tab closed/navigated)
218
- session.getCDP().on('Target.targetDestroyed', (params) => {
219
- if (params.targetId === target.id) {
220
- clearInterval(connectionCheckInterval);
221
- reject(new Error('Browser tab was closed'));
222
- }
223
- });
224
- });
225
- }
226
- catch (error) {
227
- const errorOutput = {
228
- success: false,
229
- timestamp: new Date().toISOString(),
230
- duration: Date.now() - startTime,
231
- target: { url: '', title: '' },
232
- data: {},
233
- error: error instanceof Error ? error.message : String(error)
234
- };
235
- console.log(JSON.stringify(errorOutput, null, 2));
236
- // Cleanup on error
237
- if (launchedChrome) {
3
+ import { commandRegistry } from './cli/registry.js';
4
+ import { isDaemonRunning, launchDaemon } from './daemon/launcher.js';
5
+ import { getErrorMessage } from './utils/errors.js';
6
+ import { VERSION } from './utils/version.js';
7
+ /**
8
+ * Main entry point - daemon-first architecture.
9
+ *
10
+ * This entry point:
11
+ * 1. Checks if we're running as the daemon worker (BDG_DAEMON=1)
12
+ * 2. If not, ensures the daemon is running
13
+ * 3. Initializes Commander and routes commands to the daemon
14
+ */
15
+ // If we're the daemon worker, skip the daemon launch check
16
+ const isDaemonWorker = process.env['BDG_DAEMON'] === '1';
17
+ async function main() {
18
+ if (!isDaemonWorker) {
19
+ // We're the CLI client - ensure daemon is running
20
+ if (!isDaemonRunning()) {
21
+ console.error('[bdg] Starting daemon...');
238
22
  try {
239
- await launchedChrome.kill();
23
+ await launchDaemon();
24
+ console.error('[bdg] Daemon started successfully');
240
25
  }
241
- catch { }
242
- }
243
- cleanupSession();
244
- process.exit(1);
245
- }
246
- }
247
- program
248
- .name('bdg')
249
- .description('Browser telemetry via Chrome DevTools Protocol')
250
- .version('0.1.0');
251
- program
252
- .argument('<url>', 'Target URL (example.com or localhost:3000)')
253
- .option('-p, --port <number>', 'Chrome debugging port', '9222')
254
- .option('-t, --timeout <seconds>', 'Auto-stop after timeout (optional)')
255
- .option('-r, --reuse-tab', 'Navigate existing tab instead of creating new one')
256
- .option('-u, --user-data-dir <path>', 'Chrome user data directory (default: ~/.bdg/chrome-profile)')
257
- .action(async (url, options) => {
258
- const port = parseInt(options.port);
259
- const timeout = options.timeout ? parseInt(options.timeout) : undefined;
260
- const reuseTab = options.reuseTab ?? false;
261
- const userDataDir = options.userDataDir;
262
- await run(url, { port, timeout, reuseTab, userDataDir }, ['dom', 'network', 'console']);
263
- });
264
- program
265
- .command('dom')
266
- .description('Collect DOM only')
267
- .argument('<url>', 'Target URL')
268
- .option('-p, --port <number>', 'Chrome debugging port', '9222')
269
- .option('-t, --timeout <seconds>', 'Auto-stop after timeout (optional)')
270
- .option('-r, --reuse-tab', 'Navigate existing tab instead of creating new one')
271
- .option('-u, --user-data-dir <path>', 'Chrome user data directory (default: ~/.bdg/chrome-profile)')
272
- .action(async (url, options) => {
273
- const port = parseInt(options.port);
274
- const timeout = options.timeout ? parseInt(options.timeout) : undefined;
275
- const reuseTab = options.reuseTab ?? false;
276
- const userDataDir = options.userDataDir;
277
- await run(url, { port, timeout, reuseTab, userDataDir }, ['dom']);
278
- });
279
- program
280
- .command('network')
281
- .description('Collect network requests only')
282
- .argument('<url>', 'Target URL')
283
- .option('-p, --port <number>', 'Chrome debugging port', '9222')
284
- .option('-t, --timeout <seconds>', 'Auto-stop after timeout (optional)')
285
- .option('-r, --reuse-tab', 'Navigate existing tab instead of creating new one')
286
- .option('-u, --user-data-dir <path>', 'Chrome user data directory (default: ~/.bdg/chrome-profile)')
287
- .action(async (url, options) => {
288
- const port = parseInt(options.port);
289
- const timeout = options.timeout ? parseInt(options.timeout) : undefined;
290
- const reuseTab = options.reuseTab ?? false;
291
- const userDataDir = options.userDataDir;
292
- await run(url, { port, timeout, reuseTab, userDataDir }, ['network']);
293
- });
294
- program
295
- .command('console')
296
- .description('Collect console logs only')
297
- .argument('<url>', 'Target URL')
298
- .option('-p, --port <number>', 'Chrome debugging port', '9222')
299
- .option('-t, --timeout <seconds>', 'Auto-stop after timeout (optional)')
300
- .option('-r, --reuse-tab', 'Navigate existing tab instead of creating new one')
301
- .option('-u, --user-data-dir <path>', 'Chrome user data directory (default: ~/.bdg/chrome-profile)')
302
- .action(async (url, options) => {
303
- const port = parseInt(options.port);
304
- const timeout = options.timeout ? parseInt(options.timeout) : undefined;
305
- const reuseTab = options.reuseTab ?? false;
306
- const userDataDir = options.userDataDir;
307
- await run(url, { port, timeout, reuseTab, userDataDir }, ['console']);
308
- });
309
- program
310
- .command('query')
311
- .description('Execute JavaScript in the active session for live debugging')
312
- .argument('<script>', 'JavaScript to execute (e.g., "document.querySelector(\'input[type=email]\').value")')
313
- .option('-p, --port <number>', 'Chrome debugging port', '9222')
314
- .action(async (script, options) => {
315
- try {
316
- const port = parseInt(options.port);
317
- // Check if session is running
318
- const pid = readPid();
319
- if (!pid || !isProcessAlive(pid)) {
320
- console.error('Error: No active session running');
321
- console.error('Start a session with: bdg <url>');
322
- process.exit(1);
323
- }
324
- // Read session metadata to get the target ID
325
- const { readSessionMetadata } = await import('./utils/session.js');
326
- const metadata = readSessionMetadata();
327
- if (!metadata || !metadata.targetId || !metadata.webSocketDebuggerUrl) {
328
- console.error('Error: No target information in session metadata');
329
- console.error('Session may have been started with an older version');
330
- process.exit(1);
331
- }
332
- // Verify the target still exists
333
- const response = await fetch(`http://127.0.0.1:${port}/json/list`);
334
- const targets = await response.json();
335
- const target = targets.find((t) => t.id === metadata.targetId);
336
- if (!target) {
337
- console.error('Error: Session target not found (tab may have been closed)');
338
- console.error('Start a new session with: bdg <url>');
339
- process.exit(1);
340
- }
341
- // Create temporary CDP connection using stored webSocketDebuggerUrl
342
- const { CDPConnection } = await import('./connection/cdp.js');
343
- const cdp = new CDPConnection();
344
- await cdp.connect(metadata.webSocketDebuggerUrl);
345
- // Execute JavaScript
346
- const result = await cdp.send('Runtime.evaluate', {
347
- expression: script,
348
- returnByValue: true,
349
- awaitPromise: true
350
- });
351
- await cdp.close();
352
- // Output result
353
- if (result.exceptionDetails) {
354
- console.error('Error executing script:');
355
- console.error(result.exceptionDetails.exception.description);
356
- process.exit(1);
357
- }
358
- console.log(JSON.stringify(result.result.value, null, 2));
359
- process.exit(0);
360
- }
361
- catch (error) {
362
- console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
363
- process.exit(1);
364
- }
365
- });
366
- program
367
- .command('stop')
368
- .description('Stop all active sessions and free ports (does not capture output)')
369
- .option('--kill-chrome', 'Also kill Chrome browser')
370
- .action(async (options) => {
371
- try {
372
- const { readSessionMetadata } = await import('./utils/session.js');
373
- // Read PID
374
- const pid = readPid();
375
- if (!pid) {
376
- console.error('No active session found');
377
- console.error('All ports should be free');
378
- process.exit(0);
379
- }
380
- console.error(`Stopping session (PID ${pid})...`);
381
- // Read metadata BEFORE killing the process (so we can get Chrome PID)
382
- const metadata = readSessionMetadata();
383
- // Kill the bdg process (use SIGKILL for immediate termination)
384
- if (isProcessAlive(pid)) {
385
- try {
386
- process.kill(pid, 'SIGKILL');
387
- console.error(`✓ Killed bdg session (PID ${pid})`);
388
- }
389
- catch (killError) {
390
- console.error(`Warning: Could not kill process ${pid}:`, killError);
391
- }
392
- }
393
- else {
394
- console.error(`Process ${pid} already stopped`);
395
- }
396
- // Kill Chrome if requested
397
- if (options.killChrome) {
398
- if (metadata?.chromePid) {
399
- try {
400
- if (isProcessAlive(metadata.chromePid)) {
401
- process.kill(metadata.chromePid, 'SIGTERM');
402
- console.error(`✓ Killed Chrome (PID ${metadata.chromePid})`);
403
- }
404
- else {
405
- console.error(`Chrome process (PID ${metadata.chromePid}) already stopped`);
406
- }
407
- }
408
- catch (chromeError) {
409
- console.error(`Warning: Could not kill Chrome:`, chromeError);
26
+ catch (error) {
27
+ // Handle daemon already running error
28
+ if (error instanceof Error &&
29
+ 'code' in error &&
30
+ error.code === 'DAEMON_ALREADY_RUNNING') {
31
+ console.error(`[bdg] ${error.message}`);
32
+ process.exit(error.exitCode ?? 1);
410
33
  }
411
- }
412
- else {
413
- console.error('Warning: Chrome PID not found in session metadata');
34
+ // Handle other launch failures
35
+ console.error('[bdg] Failed to start daemon:', getErrorMessage(error));
36
+ process.exit(1);
414
37
  }
415
38
  }
416
39
  else {
417
- console.error('Leaving Chrome running (use --kill-chrome to close it)');
40
+ console.error('[bdg] Daemon is already running');
418
41
  }
419
- // Clean up session files
420
- cleanupSession();
421
- console.error('✓ Cleaned up session files');
422
- console.error('\nAll sessions stopped and ports freed');
423
- process.exit(0);
424
- }
425
- catch (error) {
426
- console.error(`Error stopping session: ${error instanceof Error ? error.message : String(error)}`);
427
- process.exit(1);
428
42
  }
429
- });
430
- program.parse();
43
+ // Initialize Commander and register commands
44
+ const program = new Command()
45
+ .name('bdg')
46
+ .description('Browser telemetry via Chrome DevTools Protocol')
47
+ .version(VERSION);
48
+ commandRegistry.forEach((register) => register(program));
49
+ program.parse();
50
+ }
51
+ void main();
431
52
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,QAAQ,EACR,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,mCAAmC;AACnC,IAAI,OAAO,GAAsB,IAAI,CAAC;AACtC,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,IAAI,iBAAiB,GAA0B,IAAI,CAAC;AAEpD,KAAK,UAAU,UAAU;IACvB,IAAI,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,cAAc,GAAG,IAAI,CAAC;IAEtB,kEAAkE;IAClE,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAEpC,4EAA4E;QAC5E,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3C,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,6CAA6C;QAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,wEAAwE;QACxE,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;YACrF,OAAO,CAAC,KAAK,CAAC,eAAe,cAAc,CAAC,GAAG,WAAW,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC;YACH,cAAc,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;QAC5D,CAAC;QAED,2BAA2B;QAC3B,IAAI,iBAAiB,EAAE,CAAC;YACtB,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAc;YAC7B,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;QAEF,kEAAkE;QAClE,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAElD,qCAAqC;QACrC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,eAAe,cAAc,CAAC,GAAG,WAAW,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC;YACH,cAAc,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;QAC5D,CAAC;QAED,2BAA2B;QAC3B,IAAI,iBAAiB,EAAE,CAAC;YACtB,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,6DAA6D;AAC7D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,gDAAgD;IAChD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,GAAG,CAChB,GAAW,EACX,OAAqF,EACrF,UAA2B;IAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,gCAAgC,WAAW,2BAA2B,CACvE,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAEnC,uDAAuD;QACvD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAEpC,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,gCAAgC;YAChC,cAAc,GAAG,MAAM,YAAY,CAAC;gBAClC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,KAAK;gBACf,GAAG,EAAE,SAAS;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,yBAAyB,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,sCAAsC;QACtC,oDAAoD;QACpD,yDAAyD;QACzD,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,oBAAoB,OAAO,CAAC,IAAI,YAAY,CAC7C,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,yDAAyD;QACzD,OAAO,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,gDAAgD;QAChD,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,GAAG,EACH,OAAO,CAAC,MAAM,EAAE,EAChB,OAAO,CAAC,QAAQ,IAAI,KAAK,CAC1B,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAE1C,mDAAmD;QACnD,MAAM,kBAAkB,GAAG,MAAM,KAAK,CACpC,oBAAoB,OAAO,CAAC,IAAI,YAAY,CAC7C,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;QAEpE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,kDAAkD,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,yCAAyC;QACzC,4DAA4D;QAC5D,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,sBAAsB;QACtB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,4BAA4B;QAC5B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,oBAAoB,CAAC;YACnB,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,SAAS,EAAE,cAAc,EAAE,GAAG;YAC9B,SAAS;YACT,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,UAAU,CAAC,EAAE;YACvB,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;SACtD,CAAC,CAAC;QAEH,MAAM,cAAc,GAClB,UAAU,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,cAAc,cAAc,2CAA2C,OAAO,CAAC,OAAO,gBAAgB,CACvG,CAAC;YACF,qCAAqC;YACrC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;gBACzD,UAAU,EAAE,CAAC;YACf,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,cAAc,cAAc,oDAAoD,CACjF,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,MAAM,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,aAAa,CAAC,uBAAuB,CAAC,CAAC;oBACvC,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC3B,aAAa,CAAC,uBAAuB,CAAC,CAAC;oBACvC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBAC/C,OAAO;gBACT,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB;YAElC,uDAAuD;YACvD,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,MAAgC,EAAE,EAAE;gBACjF,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;oBAClC,aAAa,CAAC,uBAAuB,CAAC,CAAC;oBACvC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,GAAc;YAC7B,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAChC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAElD,mBAAmB;QACnB,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,cAAc,EAAE,CAAC;QAEjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,QAAQ,CAAC,OAAO,EAAE,4CAA4C,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAC9E,MAAM,CAAC,4BAA4B,EAAE,6DAA6D,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAO,EAAE,EAAE;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,kBAAkB,CAAC;KAC/B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;KAC/B,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAC9E,MAAM,CAAC,4BAA4B,EAAE,6DAA6D,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAO,EAAE,EAAE;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;KAC/B,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAC9E,MAAM,CAAC,4BAA4B,EAAE,6DAA6D,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAO,EAAE,EAAE;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2BAA2B,CAAC;KACxC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;KAC/B,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAC9E,MAAM,CAAC,4BAA4B,EAAE,6DAA6D,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAO,EAAE,EAAE;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,QAAQ,CAAC,UAAU,EAAE,qFAAqF,CAAC;KAC3G,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpC,8BAA8B;QAC9B,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6CAA6C;QAC7C,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAEvC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,YAAY,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oEAAoE;QACpE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAEjD,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAChD,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAElB,gBAAgB;QAChB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAEnE,WAAW;QACX,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,MAAM,CAAC,CAAC;QAElD,sEAAsE;QACtE,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAEvC,+DAA+D;QAC/D,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,GAAG,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,GAAG,EAAE,SAAS,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,kBAAkB,CAAC,CAAC;QAClD,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,QAAQ,EAAE,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;wBAC5C,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;oBAC/D,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,uBAAuB,QAAQ,CAAC,SAAS,mBAAmB,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC1E,CAAC;QAED,yBAAyB;QACzB,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAExD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;;;;;GAOG;AAEH,2DAA2D;AAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC;AAEzD,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,kDAAkD;QAClD,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,YAAY,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,sCAAsC;gBACtC,IACE,KAAK,YAAY,KAAK;oBACtB,MAAM,IAAI,KAAK;oBACd,KAAsD,CAAC,IAAI,KAAK,wBAAwB,EACzF,CAAC;oBACD,OAAO,CAAC,KAAK,CAAC,SAAU,KAAqC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACzE,OAAO,CAAC,IAAI,CAAE,KAAuC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,+BAA+B;gBAC/B,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,gDAAgD,CAAC;SAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzD,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,KAAK,IAAI,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * IPC Client Contract Tests
3
+ *
4
+ * Tests the public API behavior of IPC client functions WITHOUT testing implementation details.
5
+ * Follows the testing philosophy: "Test the contract, not the implementation"
6
+ *
7
+ * Contract:
8
+ * - Input: Function calls with parameters
9
+ * - Output: Responses from daemon via Unix socket
10
+ * - Behavior: Connect, send request, receive response, handle errors/timeouts
11
+ *
12
+ * What we test:
13
+ * ✅ Behavior: Client function calls → daemon responses
14
+ * ✅ Invariants: "Requests receive responses", "Errors propagate correctly"
15
+ * ✅ Edge cases: Daemon not running, timeouts, malformed responses
16
+ *
17
+ * What we DON'T test:
18
+ * ❌ Internal sendRequest() implementation
19
+ * ❌ Socket buffer handling details
20
+ * ❌ How JSONL parsing works internally
21
+ */
22
+ export {};
23
+ //# sourceMappingURL=client.contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.contract.test.d.ts","sourceRoot":"","sources":["../../../src/ipc/__tests__/client.contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}