@lhremote/core 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +124 -0
  3. package/dist/cdp/app-discovery.d.ts +22 -0
  4. package/dist/cdp/app-discovery.d.ts.map +1 -0
  5. package/dist/cdp/app-discovery.js +60 -0
  6. package/dist/cdp/app-discovery.js.map +1 -0
  7. package/dist/cdp/app-discovery.test.d.ts +2 -0
  8. package/dist/cdp/app-discovery.test.d.ts.map +1 -0
  9. package/dist/cdp/app-discovery.test.js +124 -0
  10. package/dist/cdp/app-discovery.test.js.map +1 -0
  11. package/dist/cdp/client.d.ts +114 -0
  12. package/dist/cdp/client.d.ts.map +1 -0
  13. package/dist/cdp/client.integration.test.d.ts +2 -0
  14. package/dist/cdp/client.integration.test.d.ts.map +1 -0
  15. package/dist/cdp/client.integration.test.js +77 -0
  16. package/dist/cdp/client.integration.test.js.map +1 -0
  17. package/dist/cdp/client.js +319 -0
  18. package/dist/cdp/client.js.map +1 -0
  19. package/dist/cdp/client.test.d.ts +2 -0
  20. package/dist/cdp/client.test.d.ts.map +1 -0
  21. package/dist/cdp/client.test.js +533 -0
  22. package/dist/cdp/client.test.js.map +1 -0
  23. package/dist/cdp/discovery.d.ts +14 -0
  24. package/dist/cdp/discovery.d.ts.map +1 -0
  25. package/dist/cdp/discovery.integration.test.d.ts +2 -0
  26. package/dist/cdp/discovery.integration.test.d.ts.map +1 -0
  27. package/dist/cdp/discovery.integration.test.js +27 -0
  28. package/dist/cdp/discovery.integration.test.js.map +1 -0
  29. package/dist/cdp/discovery.js +33 -0
  30. package/dist/cdp/discovery.js.map +1 -0
  31. package/dist/cdp/discovery.test.d.ts +2 -0
  32. package/dist/cdp/discovery.test.d.ts.map +1 -0
  33. package/dist/cdp/discovery.test.js +56 -0
  34. package/dist/cdp/discovery.test.js.map +1 -0
  35. package/dist/cdp/errors.d.ts +28 -0
  36. package/dist/cdp/errors.d.ts.map +1 -0
  37. package/dist/cdp/errors.js +42 -0
  38. package/dist/cdp/errors.js.map +1 -0
  39. package/dist/cdp/errors.test.d.ts +2 -0
  40. package/dist/cdp/errors.test.d.ts.map +1 -0
  41. package/dist/cdp/errors.test.js +37 -0
  42. package/dist/cdp/errors.test.js.map +1 -0
  43. package/dist/cdp/index.d.ts +6 -0
  44. package/dist/cdp/index.d.ts.map +1 -0
  45. package/dist/cdp/index.js +8 -0
  46. package/dist/cdp/index.js.map +1 -0
  47. package/dist/cdp/instance-discovery.d.ts +30 -0
  48. package/dist/cdp/instance-discovery.d.ts.map +1 -0
  49. package/dist/cdp/instance-discovery.integration.test.d.ts +2 -0
  50. package/dist/cdp/instance-discovery.integration.test.d.ts.map +1 -0
  51. package/dist/cdp/instance-discovery.integration.test.js +36 -0
  52. package/dist/cdp/instance-discovery.integration.test.js.map +1 -0
  53. package/dist/cdp/instance-discovery.js +118 -0
  54. package/dist/cdp/instance-discovery.js.map +1 -0
  55. package/dist/cdp/instance-discovery.test.d.ts +2 -0
  56. package/dist/cdp/instance-discovery.test.d.ts.map +1 -0
  57. package/dist/cdp/instance-discovery.test.js +112 -0
  58. package/dist/cdp/instance-discovery.test.js.map +1 -0
  59. package/dist/cdp/testing/launch-chromium.d.ts +24 -0
  60. package/dist/cdp/testing/launch-chromium.d.ts.map +1 -0
  61. package/dist/cdp/testing/launch-chromium.js +93 -0
  62. package/dist/cdp/testing/launch-chromium.js.map +1 -0
  63. package/dist/constants.d.ts +5 -0
  64. package/dist/constants.d.ts.map +1 -0
  65. package/dist/constants.js +7 -0
  66. package/dist/constants.js.map +1 -0
  67. package/dist/data/action-types.d.ts +39 -0
  68. package/dist/data/action-types.d.ts.map +1 -0
  69. package/dist/data/action-types.js +497 -0
  70. package/dist/data/action-types.js.map +1 -0
  71. package/dist/data/action-types.test.d.ts +2 -0
  72. package/dist/data/action-types.test.d.ts.map +1 -0
  73. package/dist/data/action-types.test.js +544 -0
  74. package/dist/data/action-types.test.js.map +1 -0
  75. package/dist/data/index.d.ts +3 -0
  76. package/dist/data/index.d.ts.map +1 -0
  77. package/dist/data/index.js +4 -0
  78. package/dist/data/index.js.map +1 -0
  79. package/dist/db/client.d.ts +27 -0
  80. package/dist/db/client.d.ts.map +1 -0
  81. package/dist/db/client.integration.test.d.ts +2 -0
  82. package/dist/db/client.integration.test.d.ts.map +1 -0
  83. package/dist/db/client.integration.test.js +63 -0
  84. package/dist/db/client.integration.test.js.map +1 -0
  85. package/dist/db/client.js +23 -0
  86. package/dist/db/client.js.map +1 -0
  87. package/dist/db/client.test.d.ts +2 -0
  88. package/dist/db/client.test.d.ts.map +1 -0
  89. package/dist/db/client.test.js +48 -0
  90. package/dist/db/client.test.js.map +1 -0
  91. package/dist/db/discovery.d.ts +14 -0
  92. package/dist/db/discovery.d.ts.map +1 -0
  93. package/dist/db/discovery.integration.test.d.ts +2 -0
  94. package/dist/db/discovery.integration.test.d.ts.map +1 -0
  95. package/dist/db/discovery.integration.test.js +101 -0
  96. package/dist/db/discovery.integration.test.js.map +1 -0
  97. package/dist/db/discovery.js +76 -0
  98. package/dist/db/discovery.js.map +1 -0
  99. package/dist/db/discovery.test.d.ts +2 -0
  100. package/dist/db/discovery.test.d.ts.map +1 -0
  101. package/dist/db/discovery.test.js +125 -0
  102. package/dist/db/discovery.test.js.map +1 -0
  103. package/dist/db/errors.d.ts +52 -0
  104. package/dist/db/errors.d.ts.map +1 -0
  105. package/dist/db/errors.js +82 -0
  106. package/dist/db/errors.js.map +1 -0
  107. package/dist/db/errors.test.d.ts +2 -0
  108. package/dist/db/errors.test.d.ts.map +1 -0
  109. package/dist/db/errors.test.js +34 -0
  110. package/dist/db/errors.test.js.map +1 -0
  111. package/dist/db/escape-like.d.ts +8 -0
  112. package/dist/db/escape-like.d.ts.map +1 -0
  113. package/dist/db/escape-like.js +12 -0
  114. package/dist/db/escape-like.js.map +1 -0
  115. package/dist/db/escape-like.test.d.ts +2 -0
  116. package/dist/db/escape-like.test.d.ts.map +1 -0
  117. package/dist/db/escape-like.test.js +25 -0
  118. package/dist/db/escape-like.test.js.map +1 -0
  119. package/dist/db/index.d.ts +5 -0
  120. package/dist/db/index.d.ts.map +1 -0
  121. package/dist/db/index.js +7 -0
  122. package/dist/db/index.js.map +1 -0
  123. package/dist/db/repositories/campaign-exclude-list.d.ts +89 -0
  124. package/dist/db/repositories/campaign-exclude-list.d.ts.map +1 -0
  125. package/dist/db/repositories/campaign-exclude-list.js +204 -0
  126. package/dist/db/repositories/campaign-exclude-list.js.map +1 -0
  127. package/dist/db/repositories/campaign-exclude-list.test.d.ts +2 -0
  128. package/dist/db/repositories/campaign-exclude-list.test.d.ts.map +1 -0
  129. package/dist/db/repositories/campaign-exclude-list.test.js +132 -0
  130. package/dist/db/repositories/campaign-exclude-list.test.js.map +1 -0
  131. package/dist/db/repositories/campaign-statistics.d.ts +58 -0
  132. package/dist/db/repositories/campaign-statistics.d.ts.map +1 -0
  133. package/dist/db/repositories/campaign-statistics.js +278 -0
  134. package/dist/db/repositories/campaign-statistics.js.map +1 -0
  135. package/dist/db/repositories/campaign-statistics.test.d.ts +2 -0
  136. package/dist/db/repositories/campaign-statistics.test.d.ts.map +1 -0
  137. package/dist/db/repositories/campaign-statistics.test.js +266 -0
  138. package/dist/db/repositories/campaign-statistics.test.js.map +1 -0
  139. package/dist/db/repositories/campaign.d.ts +103 -0
  140. package/dist/db/repositories/campaign.d.ts.map +1 -0
  141. package/dist/db/repositories/campaign.js +388 -0
  142. package/dist/db/repositories/campaign.js.map +1 -0
  143. package/dist/db/repositories/campaign.test.d.ts +2 -0
  144. package/dist/db/repositories/campaign.test.d.ts.map +1 -0
  145. package/dist/db/repositories/campaign.test.js +392 -0
  146. package/dist/db/repositories/campaign.test.js.map +1 -0
  147. package/dist/db/repositories/index.d.ts +6 -0
  148. package/dist/db/repositories/index.d.ts.map +1 -0
  149. package/dist/db/repositories/index.js +8 -0
  150. package/dist/db/repositories/index.js.map +1 -0
  151. package/dist/db/repositories/message.d.ts +57 -0
  152. package/dist/db/repositories/message.d.ts.map +1 -0
  153. package/dist/db/repositories/message.integration.test.d.ts +2 -0
  154. package/dist/db/repositories/message.integration.test.d.ts.map +1 -0
  155. package/dist/db/repositories/message.integration.test.js +137 -0
  156. package/dist/db/repositories/message.integration.test.js.map +1 -0
  157. package/dist/db/repositories/message.js +308 -0
  158. package/dist/db/repositories/message.js.map +1 -0
  159. package/dist/db/repositories/message.test.d.ts +2 -0
  160. package/dist/db/repositories/message.test.d.ts.map +1 -0
  161. package/dist/db/repositories/message.test.js +179 -0
  162. package/dist/db/repositories/message.test.js.map +1 -0
  163. package/dist/db/repositories/profile.d.ts +42 -0
  164. package/dist/db/repositories/profile.d.ts.map +1 -0
  165. package/dist/db/repositories/profile.integration.test.d.ts +2 -0
  166. package/dist/db/repositories/profile.integration.test.d.ts.map +1 -0
  167. package/dist/db/repositories/profile.integration.test.js +222 -0
  168. package/dist/db/repositories/profile.integration.test.js.map +1 -0
  169. package/dist/db/repositories/profile.js +163 -0
  170. package/dist/db/repositories/profile.js.map +1 -0
  171. package/dist/db/repositories/profile.test.d.ts +2 -0
  172. package/dist/db/repositories/profile.test.d.ts.map +1 -0
  173. package/dist/db/repositories/profile.test.js +216 -0
  174. package/dist/db/repositories/profile.test.js.map +1 -0
  175. package/dist/db/testing/create-fixture.d.ts +2 -0
  176. package/dist/db/testing/create-fixture.d.ts.map +1 -0
  177. package/dist/db/testing/create-fixture.js +745 -0
  178. package/dist/db/testing/create-fixture.js.map +1 -0
  179. package/dist/db/testing/open-fixture.d.ts +15 -0
  180. package/dist/db/testing/open-fixture.d.ts.map +1 -0
  181. package/dist/db/testing/open-fixture.js +39 -0
  182. package/dist/db/testing/open-fixture.js.map +1 -0
  183. package/dist/formats/campaign-format.d.ts +31 -0
  184. package/dist/formats/campaign-format.d.ts.map +1 -0
  185. package/dist/formats/campaign-format.js +225 -0
  186. package/dist/formats/campaign-format.js.map +1 -0
  187. package/dist/formats/campaign-format.test.d.ts +2 -0
  188. package/dist/formats/campaign-format.test.d.ts.map +1 -0
  189. package/dist/formats/campaign-format.test.js +442 -0
  190. package/dist/formats/campaign-format.test.js.map +1 -0
  191. package/dist/formats/errors.d.ts +7 -0
  192. package/dist/formats/errors.d.ts.map +1 -0
  193. package/dist/formats/errors.js +12 -0
  194. package/dist/formats/errors.js.map +1 -0
  195. package/dist/formats/index.d.ts +3 -0
  196. package/dist/formats/index.d.ts.map +1 -0
  197. package/dist/formats/index.js +5 -0
  198. package/dist/formats/index.js.map +1 -0
  199. package/dist/index.d.ts +10 -1
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +29 -1
  202. package/dist/index.js.map +1 -1
  203. package/dist/operations/campaign-add-action.d.ts +14 -0
  204. package/dist/operations/campaign-add-action.d.ts.map +1 -0
  205. package/dist/operations/campaign-add-action.js +33 -0
  206. package/dist/operations/campaign-add-action.js.map +1 -0
  207. package/dist/operations/campaign-add-action.test.d.ts +2 -0
  208. package/dist/operations/campaign-add-action.test.d.ts.map +1 -0
  209. package/dist/operations/campaign-add-action.test.js +122 -0
  210. package/dist/operations/campaign-add-action.test.js.map +1 -0
  211. package/dist/operations/campaign-create.d.ts +17 -0
  212. package/dist/operations/campaign-create.d.ts.map +1 -0
  213. package/dist/operations/campaign-create.js +21 -0
  214. package/dist/operations/campaign-create.js.map +1 -0
  215. package/dist/operations/campaign-create.test.d.ts +2 -0
  216. package/dist/operations/campaign-create.test.d.ts.map +1 -0
  217. package/dist/operations/campaign-create.test.js +113 -0
  218. package/dist/operations/campaign-create.test.js.map +1 -0
  219. package/dist/operations/campaign-delete.d.ts +20 -0
  220. package/dist/operations/campaign-delete.d.ts.map +1 -0
  221. package/dist/operations/campaign-delete.js +22 -0
  222. package/dist/operations/campaign-delete.js.map +1 -0
  223. package/dist/operations/campaign-delete.test.d.ts +2 -0
  224. package/dist/operations/campaign-delete.test.d.ts.map +1 -0
  225. package/dist/operations/campaign-delete.test.js +92 -0
  226. package/dist/operations/campaign-delete.test.js.map +1 -0
  227. package/dist/operations/campaign-exclude-add.d.ts +16 -0
  228. package/dist/operations/campaign-exclude-add.d.ts.map +1 -0
  229. package/dist/operations/campaign-exclude-add.js +27 -0
  230. package/dist/operations/campaign-exclude-add.js.map +1 -0
  231. package/dist/operations/campaign-exclude-add.test.d.ts +2 -0
  232. package/dist/operations/campaign-exclude-add.test.d.ts.map +1 -0
  233. package/dist/operations/campaign-exclude-add.test.js +114 -0
  234. package/dist/operations/campaign-exclude-add.test.js.map +1 -0
  235. package/dist/operations/campaign-exclude-list.d.ts +14 -0
  236. package/dist/operations/campaign-exclude-list.d.ts.map +1 -0
  237. package/dist/operations/campaign-exclude-list.js +26 -0
  238. package/dist/operations/campaign-exclude-list.js.map +1 -0
  239. package/dist/operations/campaign-exclude-list.test.d.ts +2 -0
  240. package/dist/operations/campaign-exclude-list.test.d.ts.map +1 -0
  241. package/dist/operations/campaign-exclude-list.test.js +113 -0
  242. package/dist/operations/campaign-exclude-list.test.js.map +1 -0
  243. package/dist/operations/campaign-exclude-remove.d.ts +16 -0
  244. package/dist/operations/campaign-exclude-remove.d.ts.map +1 -0
  245. package/dist/operations/campaign-exclude-remove.js +27 -0
  246. package/dist/operations/campaign-exclude-remove.js.map +1 -0
  247. package/dist/operations/campaign-exclude-remove.test.d.ts +2 -0
  248. package/dist/operations/campaign-exclude-remove.test.d.ts.map +1 -0
  249. package/dist/operations/campaign-exclude-remove.test.js +114 -0
  250. package/dist/operations/campaign-exclude-remove.test.js.map +1 -0
  251. package/dist/operations/campaign-export.d.ts +12 -0
  252. package/dist/operations/campaign-export.d.ts.map +1 -0
  253. package/dist/operations/campaign-export.js +24 -0
  254. package/dist/operations/campaign-export.js.map +1 -0
  255. package/dist/operations/campaign-export.test.d.ts +2 -0
  256. package/dist/operations/campaign-export.test.d.ts.map +1 -0
  257. package/dist/operations/campaign-export.test.js +134 -0
  258. package/dist/operations/campaign-export.test.js.map +1 -0
  259. package/dist/operations/campaign-get.d.ts +19 -0
  260. package/dist/operations/campaign-get.d.ts.map +1 -0
  261. package/dist/operations/campaign-get.js +23 -0
  262. package/dist/operations/campaign-get.js.map +1 -0
  263. package/dist/operations/campaign-get.test.d.ts +2 -0
  264. package/dist/operations/campaign-get.test.d.ts.map +1 -0
  265. package/dist/operations/campaign-get.test.js +99 -0
  266. package/dist/operations/campaign-get.test.js.map +1 -0
  267. package/dist/operations/campaign-list.d.ts +20 -0
  268. package/dist/operations/campaign-list.d.ts.map +1 -0
  269. package/dist/operations/campaign-list.js +23 -0
  270. package/dist/operations/campaign-list.js.map +1 -0
  271. package/dist/operations/campaign-list.test.d.ts +2 -0
  272. package/dist/operations/campaign-list.test.d.ts.map +1 -0
  273. package/dist/operations/campaign-list.test.js +106 -0
  274. package/dist/operations/campaign-list.test.js.map +1 -0
  275. package/dist/operations/campaign-move-next.d.ts +15 -0
  276. package/dist/operations/campaign-move-next.d.ts.map +1 -0
  277. package/dist/operations/campaign-move-next.js +25 -0
  278. package/dist/operations/campaign-move-next.js.map +1 -0
  279. package/dist/operations/campaign-move-next.test.d.ts +2 -0
  280. package/dist/operations/campaign-move-next.test.d.ts.map +1 -0
  281. package/dist/operations/campaign-move-next.test.js +105 -0
  282. package/dist/operations/campaign-move-next.test.js.map +1 -0
  283. package/dist/operations/campaign-remove-action.d.ts +12 -0
  284. package/dist/operations/campaign-remove-action.d.ts.map +1 -0
  285. package/dist/operations/campaign-remove-action.js +23 -0
  286. package/dist/operations/campaign-remove-action.js.map +1 -0
  287. package/dist/operations/campaign-remove-action.test.d.ts +2 -0
  288. package/dist/operations/campaign-remove-action.test.d.ts.map +1 -0
  289. package/dist/operations/campaign-remove-action.test.js +95 -0
  290. package/dist/operations/campaign-remove-action.test.js.map +1 -0
  291. package/dist/operations/campaign-reorder-actions.d.ts +13 -0
  292. package/dist/operations/campaign-reorder-actions.d.ts.map +1 -0
  293. package/dist/operations/campaign-reorder-actions.js +19 -0
  294. package/dist/operations/campaign-reorder-actions.js.map +1 -0
  295. package/dist/operations/campaign-reorder-actions.test.d.ts +2 -0
  296. package/dist/operations/campaign-reorder-actions.test.d.ts.map +1 -0
  297. package/dist/operations/campaign-reorder-actions.test.js +103 -0
  298. package/dist/operations/campaign-reorder-actions.test.js.map +1 -0
  299. package/dist/operations/campaign-retry.d.ts +13 -0
  300. package/dist/operations/campaign-retry.d.ts.map +1 -0
  301. package/dist/operations/campaign-retry.js +24 -0
  302. package/dist/operations/campaign-retry.js.map +1 -0
  303. package/dist/operations/campaign-retry.test.d.ts +2 -0
  304. package/dist/operations/campaign-retry.test.d.ts.map +1 -0
  305. package/dist/operations/campaign-retry.test.js +100 -0
  306. package/dist/operations/campaign-retry.test.js.map +1 -0
  307. package/dist/operations/campaign-start.d.ts +13 -0
  308. package/dist/operations/campaign-start.d.ts.map +1 -0
  309. package/dist/operations/campaign-start.js +24 -0
  310. package/dist/operations/campaign-start.js.map +1 -0
  311. package/dist/operations/campaign-start.test.d.ts +2 -0
  312. package/dist/operations/campaign-start.test.d.ts.map +1 -0
  313. package/dist/operations/campaign-start.test.js +96 -0
  314. package/dist/operations/campaign-start.test.js.map +1 -0
  315. package/dist/operations/campaign-statistics.d.ts +10 -0
  316. package/dist/operations/campaign-statistics.d.ts.map +1 -0
  317. package/dist/operations/campaign-statistics.js +23 -0
  318. package/dist/operations/campaign-statistics.js.map +1 -0
  319. package/dist/operations/campaign-statistics.test.d.ts +2 -0
  320. package/dist/operations/campaign-statistics.test.d.ts.map +1 -0
  321. package/dist/operations/campaign-statistics.test.js +120 -0
  322. package/dist/operations/campaign-statistics.test.js.map +1 -0
  323. package/dist/operations/campaign-status.d.ts +26 -0
  324. package/dist/operations/campaign-status.d.ts.map +1 -0
  325. package/dist/operations/campaign-status.js +32 -0
  326. package/dist/operations/campaign-status.js.map +1 -0
  327. package/dist/operations/campaign-status.test.d.ts +2 -0
  328. package/dist/operations/campaign-status.test.d.ts.map +1 -0
  329. package/dist/operations/campaign-status.test.js +142 -0
  330. package/dist/operations/campaign-status.test.js.map +1 -0
  331. package/dist/operations/campaign-stop.d.ts +11 -0
  332. package/dist/operations/campaign-stop.d.ts.map +1 -0
  333. package/dist/operations/campaign-stop.js +23 -0
  334. package/dist/operations/campaign-stop.js.map +1 -0
  335. package/dist/operations/campaign-stop.test.d.ts +2 -0
  336. package/dist/operations/campaign-stop.test.d.ts.map +1 -0
  337. package/dist/operations/campaign-stop.test.js +92 -0
  338. package/dist/operations/campaign-stop.test.js.map +1 -0
  339. package/dist/operations/campaign-update.d.ts +18 -0
  340. package/dist/operations/campaign-update.d.ts.map +1 -0
  341. package/dist/operations/campaign-update.js +21 -0
  342. package/dist/operations/campaign-update.js.map +1 -0
  343. package/dist/operations/campaign-update.test.d.ts +2 -0
  344. package/dist/operations/campaign-update.test.d.ts.map +1 -0
  345. package/dist/operations/campaign-update.test.js +105 -0
  346. package/dist/operations/campaign-update.test.js.map +1 -0
  347. package/dist/operations/check-replies.d.ts +12 -0
  348. package/dist/operations/check-replies.d.ts.map +1 -0
  349. package/dist/operations/check-replies.js +26 -0
  350. package/dist/operations/check-replies.js.map +1 -0
  351. package/dist/operations/check-replies.test.d.ts +2 -0
  352. package/dist/operations/check-replies.test.d.ts.map +1 -0
  353. package/dist/operations/check-replies.test.js +118 -0
  354. package/dist/operations/check-replies.test.js.map +1 -0
  355. package/dist/operations/import-people-from-urls.d.ts +16 -0
  356. package/dist/operations/import-people-from-urls.d.ts.map +1 -0
  357. package/dist/operations/import-people-from-urls.js +27 -0
  358. package/dist/operations/import-people-from-urls.js.map +1 -0
  359. package/dist/operations/import-people-from-urls.test.d.ts +2 -0
  360. package/dist/operations/import-people-from-urls.test.d.ts.map +1 -0
  361. package/dist/operations/import-people-from-urls.test.js +118 -0
  362. package/dist/operations/import-people-from-urls.test.js.map +1 -0
  363. package/dist/operations/index.d.ts +24 -0
  364. package/dist/operations/index.d.ts.map +1 -0
  365. package/dist/operations/index.js +30 -0
  366. package/dist/operations/index.js.map +1 -0
  367. package/dist/operations/query-messages.d.ts +23 -0
  368. package/dist/operations/query-messages.d.ts.map +1 -0
  369. package/dist/operations/query-messages.js +33 -0
  370. package/dist/operations/query-messages.js.map +1 -0
  371. package/dist/operations/query-messages.test.d.ts +2 -0
  372. package/dist/operations/query-messages.test.d.ts.map +1 -0
  373. package/dist/operations/query-messages.test.js +134 -0
  374. package/dist/operations/query-messages.test.js.map +1 -0
  375. package/dist/operations/scrape-messaging-history.d.ts +10 -0
  376. package/dist/operations/scrape-messaging-history.d.ts.map +1 -0
  377. package/dist/operations/scrape-messaging-history.js +24 -0
  378. package/dist/operations/scrape-messaging-history.js.map +1 -0
  379. package/dist/operations/scrape-messaging-history.test.d.ts +2 -0
  380. package/dist/operations/scrape-messaging-history.test.d.ts.map +1 -0
  381. package/dist/operations/scrape-messaging-history.test.js +112 -0
  382. package/dist/operations/scrape-messaging-history.test.js.map +1 -0
  383. package/dist/operations/types.d.ts +10 -0
  384. package/dist/operations/types.d.ts.map +1 -0
  385. package/dist/operations/types.js +4 -0
  386. package/dist/operations/types.js.map +1 -0
  387. package/dist/services/account-resolution.d.ts +22 -0
  388. package/dist/services/account-resolution.d.ts.map +1 -0
  389. package/dist/services/account-resolution.js +45 -0
  390. package/dist/services/account-resolution.js.map +1 -0
  391. package/dist/services/account-resolution.test.d.ts +2 -0
  392. package/dist/services/account-resolution.test.d.ts.map +1 -0
  393. package/dist/services/account-resolution.test.js +91 -0
  394. package/dist/services/account-resolution.test.js.map +1 -0
  395. package/dist/services/app.d.ts +62 -0
  396. package/dist/services/app.d.ts.map +1 -0
  397. package/dist/services/app.js +200 -0
  398. package/dist/services/app.js.map +1 -0
  399. package/dist/services/app.test.d.ts +2 -0
  400. package/dist/services/app.test.d.ts.map +1 -0
  401. package/dist/services/app.test.js +267 -0
  402. package/dist/services/app.test.js.map +1 -0
  403. package/dist/services/campaign.d.ts +143 -0
  404. package/dist/services/campaign.d.ts.map +1 -0
  405. package/dist/services/campaign.js +409 -0
  406. package/dist/services/campaign.js.map +1 -0
  407. package/dist/services/campaign.test.d.ts +2 -0
  408. package/dist/services/campaign.test.d.ts.map +1 -0
  409. package/dist/services/campaign.test.js +481 -0
  410. package/dist/services/campaign.test.js.map +1 -0
  411. package/dist/services/errors.d.ts +83 -0
  412. package/dist/services/errors.d.ts.map +1 -0
  413. package/dist/services/errors.js +126 -0
  414. package/dist/services/errors.js.map +1 -0
  415. package/dist/services/errors.test.d.ts +2 -0
  416. package/dist/services/errors.test.d.ts.map +1 -0
  417. package/dist/services/errors.test.js +123 -0
  418. package/dist/services/errors.test.js.map +1 -0
  419. package/dist/services/index.d.ts +10 -0
  420. package/dist/services/index.d.ts.map +1 -0
  421. package/dist/services/index.js +12 -0
  422. package/dist/services/index.js.map +1 -0
  423. package/dist/services/instance-context.d.ts +37 -0
  424. package/dist/services/instance-context.d.ts.map +1 -0
  425. package/dist/services/instance-context.js +49 -0
  426. package/dist/services/instance-context.js.map +1 -0
  427. package/dist/services/instance-context.test.d.ts +2 -0
  428. package/dist/services/instance-context.test.d.ts.map +1 -0
  429. package/dist/services/instance-context.test.js +203 -0
  430. package/dist/services/instance-context.test.js.map +1 -0
  431. package/dist/services/instance-lifecycle.d.ts +38 -0
  432. package/dist/services/instance-lifecycle.d.ts.map +1 -0
  433. package/dist/services/instance-lifecycle.js +87 -0
  434. package/dist/services/instance-lifecycle.js.map +1 -0
  435. package/dist/services/instance-lifecycle.test.d.ts +2 -0
  436. package/dist/services/instance-lifecycle.test.d.ts.map +1 -0
  437. package/dist/services/instance-lifecycle.test.js +158 -0
  438. package/dist/services/instance-lifecycle.test.js.map +1 -0
  439. package/dist/services/instance.d.ts +90 -0
  440. package/dist/services/instance.d.ts.map +1 -0
  441. package/dist/services/instance.js +178 -0
  442. package/dist/services/instance.js.map +1 -0
  443. package/dist/services/instance.test.d.ts +2 -0
  444. package/dist/services/instance.test.d.ts.map +1 -0
  445. package/dist/services/instance.test.js +291 -0
  446. package/dist/services/instance.test.js.map +1 -0
  447. package/dist/services/launcher.d.ts +54 -0
  448. package/dist/services/launcher.d.ts.map +1 -0
  449. package/dist/services/launcher.js +162 -0
  450. package/dist/services/launcher.js.map +1 -0
  451. package/dist/services/launcher.test.d.ts +2 -0
  452. package/dist/services/launcher.test.d.ts.map +1 -0
  453. package/dist/services/launcher.test.js +163 -0
  454. package/dist/services/launcher.test.js.map +1 -0
  455. package/dist/services/status.d.ts +37 -0
  456. package/dist/services/status.d.ts.map +1 -0
  457. package/dist/services/status.js +85 -0
  458. package/dist/services/status.js.map +1 -0
  459. package/dist/services/status.test.d.ts +2 -0
  460. package/dist/services/status.test.d.ts.map +1 -0
  461. package/dist/services/status.test.js +248 -0
  462. package/dist/services/status.test.js.map +1 -0
  463. package/dist/testing/e2e-helpers.d.ts +41 -0
  464. package/dist/testing/e2e-helpers.d.ts.map +1 -0
  465. package/dist/testing/e2e-helpers.js +114 -0
  466. package/dist/testing/e2e-helpers.js.map +1 -0
  467. package/dist/testing/index.d.ts +2 -0
  468. package/dist/testing/index.d.ts.map +1 -0
  469. package/dist/testing/index.js +4 -0
  470. package/dist/testing/index.js.map +1 -0
  471. package/dist/types/account.d.ts +13 -0
  472. package/dist/types/account.d.ts.map +1 -0
  473. package/dist/types/account.js +4 -0
  474. package/dist/types/account.js.map +1 -0
  475. package/dist/types/account.test.d.ts +2 -0
  476. package/dist/types/account.test.d.ts.map +1 -0
  477. package/dist/types/account.test.js +26 -0
  478. package/dist/types/account.test.js.map +1 -0
  479. package/dist/types/campaign.d.ts +267 -0
  480. package/dist/types/campaign.d.ts.map +1 -0
  481. package/dist/types/campaign.js +4 -0
  482. package/dist/types/campaign.js.map +1 -0
  483. package/dist/types/cdp.d.ts +18 -0
  484. package/dist/types/cdp.d.ts.map +1 -0
  485. package/dist/types/cdp.js +4 -0
  486. package/dist/types/cdp.js.map +1 -0
  487. package/dist/types/cdp.test.d.ts +2 -0
  488. package/dist/types/cdp.test.d.ts.map +1 -0
  489. package/dist/types/cdp.test.js +30 -0
  490. package/dist/types/cdp.test.js.map +1 -0
  491. package/dist/types/index.d.ts +6 -0
  492. package/dist/types/index.d.ts.map +1 -0
  493. package/dist/types/index.js +4 -0
  494. package/dist/types/index.js.map +1 -0
  495. package/dist/types/instance.d.ts +36 -0
  496. package/dist/types/instance.d.ts.map +1 -0
  497. package/dist/types/instance.js +4 -0
  498. package/dist/types/instance.js.map +1 -0
  499. package/dist/types/instance.test.d.ts +2 -0
  500. package/dist/types/instance.test.d.ts.map +1 -0
  501. package/dist/types/instance.test.js +59 -0
  502. package/dist/types/instance.test.js.map +1 -0
  503. package/dist/types/messaging.d.ts +51 -0
  504. package/dist/types/messaging.d.ts.map +1 -0
  505. package/dist/types/messaging.js +4 -0
  506. package/dist/types/messaging.js.map +1 -0
  507. package/dist/types/profile.d.ts +81 -0
  508. package/dist/types/profile.d.ts.map +1 -0
  509. package/dist/types/profile.js +4 -0
  510. package/dist/types/profile.js.map +1 -0
  511. package/dist/types/profile.test.d.ts +2 -0
  512. package/dist/types/profile.test.d.ts.map +1 -0
  513. package/dist/types/profile.test.js +105 -0
  514. package/dist/types/profile.test.js.map +1 -0
  515. package/dist/utils/cdp-port.d.ts +5 -0
  516. package/dist/utils/cdp-port.d.ts.map +1 -0
  517. package/dist/utils/cdp-port.js +15 -0
  518. package/dist/utils/cdp-port.js.map +1 -0
  519. package/dist/utils/cdp-port.test.d.ts +2 -0
  520. package/dist/utils/cdp-port.test.d.ts.map +1 -0
  521. package/dist/utils/cdp-port.test.js +23 -0
  522. package/dist/utils/cdp-port.test.js.map +1 -0
  523. package/dist/utils/delay.d.ts +5 -0
  524. package/dist/utils/delay.d.ts.map +1 -0
  525. package/dist/utils/delay.js +9 -0
  526. package/dist/utils/delay.js.map +1 -0
  527. package/dist/utils/delay.test.d.ts +2 -0
  528. package/dist/utils/delay.test.d.ts.map +1 -0
  529. package/dist/utils/delay.test.js +17 -0
  530. package/dist/utils/delay.test.js.map +1 -0
  531. package/dist/utils/error-message.d.ts +5 -0
  532. package/dist/utils/error-message.d.ts.map +1 -0
  533. package/dist/utils/error-message.js +9 -0
  534. package/dist/utils/error-message.js.map +1 -0
  535. package/dist/utils/error-message.test.d.ts +2 -0
  536. package/dist/utils/error-message.test.d.ts.map +1 -0
  537. package/dist/utils/error-message.test.js +28 -0
  538. package/dist/utils/error-message.test.js.map +1 -0
  539. package/dist/utils/index.d.ts +5 -0
  540. package/dist/utils/index.d.ts.map +1 -0
  541. package/dist/utils/index.js +7 -0
  542. package/dist/utils/index.js.map +1 -0
  543. package/dist/utils/loopback.d.ts +10 -0
  544. package/dist/utils/loopback.d.ts.map +1 -0
  545. package/dist/utils/loopback.js +28 -0
  546. package/dist/utils/loopback.js.map +1 -0
  547. package/dist/utils/loopback.test.d.ts +2 -0
  548. package/dist/utils/loopback.test.d.ts.map +1 -0
  549. package/dist/utils/loopback.test.js +34 -0
  550. package/dist/utils/loopback.test.js.map +1 -0
  551. package/package.json +26 -9
@@ -0,0 +1,163 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
+ import { LinkedHelperNotRunningError, ServiceError, StartInstanceError, WrongPortError, } from "./errors.js";
5
+ import { LauncherService } from "./launcher.js";
6
+ /**
7
+ * Shared CDPClient mocks — LauncherService creates exactly one CDPClient,
8
+ * so per-instance isolation (as in instance.test.ts) is unnecessary here.
9
+ */
10
+ const mockConnect = vi.fn();
11
+ const mockDisconnect = vi.fn();
12
+ const mockEvaluate = vi.fn();
13
+ const mockIsConnected = vi.fn().mockReturnValue(true);
14
+ vi.mock("../cdp/index.js", async (importOriginal) => {
15
+ const original = await importOriginal();
16
+ return {
17
+ CDPClient: vi.fn().mockImplementation(function () {
18
+ this.connect = mockConnect;
19
+ this.disconnect = mockDisconnect;
20
+ this.evaluate = mockEvaluate;
21
+ Object.defineProperty(this, "isConnected", {
22
+ get: mockIsConnected,
23
+ });
24
+ }),
25
+ CDPConnectionError: original.CDPConnectionError,
26
+ CDPEvaluationError: original.CDPEvaluationError,
27
+ };
28
+ });
29
+ import { CDPConnectionError, CDPEvaluationError } from "../cdp/index.js";
30
+ afterEach(() => {
31
+ vi.restoreAllMocks();
32
+ });
33
+ describe("LauncherService", () => {
34
+ let service;
35
+ beforeEach(() => {
36
+ service = new LauncherService(9222);
37
+ mockConnect.mockResolvedValue(undefined);
38
+ mockEvaluate.mockResolvedValue(undefined);
39
+ });
40
+ describe("connect", () => {
41
+ it("creates a CDPClient and connects", async () => {
42
+ await service.connect();
43
+ expect(service.isConnected).toBe(true);
44
+ });
45
+ it("wraps CDPConnectionError into LinkedHelperNotRunningError", async () => {
46
+ mockConnect.mockRejectedValue(new CDPConnectionError("connection refused"));
47
+ await expect(service.connect()).rejects.toThrow(LinkedHelperNotRunningError);
48
+ });
49
+ it("re-throws non-CDP errors as-is", async () => {
50
+ mockConnect.mockRejectedValue(new TypeError("unexpected"));
51
+ await expect(service.connect()).rejects.toThrow(TypeError);
52
+ });
53
+ });
54
+ describe("disconnect", () => {
55
+ it("disconnects the CDPClient", async () => {
56
+ await service.connect();
57
+ service.disconnect();
58
+ expect(mockDisconnect).toHaveBeenCalled();
59
+ });
60
+ it("does not throw when not connected", () => {
61
+ expect(() => service.disconnect()).not.toThrow();
62
+ });
63
+ });
64
+ describe("startInstance", () => {
65
+ it("evaluates the startInstance expression", async () => {
66
+ await service.connect();
67
+ mockEvaluate.mockResolvedValue({ success: true });
68
+ await service.startInstance(42);
69
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("startInstance"), true);
70
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("42"), true);
71
+ });
72
+ it("throws StartInstanceError on failure", async () => {
73
+ await service.connect();
74
+ mockEvaluate.mockResolvedValue({
75
+ success: false,
76
+ error: "account is already running",
77
+ });
78
+ await expect(service.startInstance(42)).rejects.toThrow(StartInstanceError);
79
+ await expect(service.startInstance(42)).rejects.toThrow(/account is already running/);
80
+ });
81
+ it("throws ServiceError when not connected", async () => {
82
+ await expect(service.startInstance(42)).rejects.toThrow(ServiceError);
83
+ });
84
+ });
85
+ describe("stopInstance", () => {
86
+ it("evaluates the stopInstance expression", async () => {
87
+ await service.connect();
88
+ await service.stopInstance(42);
89
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("stopInstance"), true);
90
+ });
91
+ it("throws ServiceError when not connected", async () => {
92
+ await expect(service.stopInstance(42)).rejects.toThrow(ServiceError);
93
+ });
94
+ });
95
+ describe("getInstanceStatus", () => {
96
+ it("returns the instance status", async () => {
97
+ await service.connect();
98
+ mockEvaluate.mockResolvedValue("running");
99
+ const status = await service.getInstanceStatus(42);
100
+ expect(status).toBe("running");
101
+ });
102
+ it("returns stopped when status is null", async () => {
103
+ await service.connect();
104
+ mockEvaluate.mockResolvedValue("stopped");
105
+ const status = await service.getInstanceStatus(42);
106
+ expect(status).toBe("stopped");
107
+ });
108
+ });
109
+ describe("listAccounts", () => {
110
+ it("returns parsed accounts", async () => {
111
+ await service.connect();
112
+ mockEvaluate.mockResolvedValue([
113
+ { id: 1, liId: 100, name: "Alice", email: "alice@test.com" },
114
+ { id: 2, liId: 200, name: "Bob" },
115
+ ]);
116
+ const accounts = await service.listAccounts();
117
+ expect(accounts).toHaveLength(2);
118
+ expect(accounts).toContainEqual(expect.objectContaining({ name: "Alice" }));
119
+ expect(accounts).toContainEqual(expect.objectContaining({ name: "Bob" }));
120
+ });
121
+ it("returns empty array when no accounts", async () => {
122
+ await service.connect();
123
+ mockEvaluate.mockResolvedValue(null);
124
+ const accounts = await service.listAccounts();
125
+ expect(accounts).toEqual([]);
126
+ });
127
+ it("throws WrongPortError when require is not defined", async () => {
128
+ await service.connect();
129
+ mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
130
+ await expect(service.listAccounts()).rejects.toThrow(WrongPortError);
131
+ await expect(service.listAccounts()).rejects.toThrow(/appears to be a LinkedHelper instance/);
132
+ });
133
+ });
134
+ describe("wrong port detection", () => {
135
+ it("throws WrongPortError from startInstance", async () => {
136
+ await service.connect();
137
+ mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
138
+ await expect(service.startInstance(42)).rejects.toThrow(WrongPortError);
139
+ });
140
+ it("throws WrongPortError from stopInstance", async () => {
141
+ await service.connect();
142
+ mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
143
+ await expect(service.stopInstance(42)).rejects.toThrow(WrongPortError);
144
+ });
145
+ it("throws WrongPortError from getInstanceStatus", async () => {
146
+ await service.connect();
147
+ mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
148
+ await expect(service.getInstanceStatus(42)).rejects.toThrow(WrongPortError);
149
+ });
150
+ it("does not catch unrelated CDPEvaluationErrors", async () => {
151
+ await service.connect();
152
+ mockEvaluate.mockRejectedValue(new CDPEvaluationError("TypeError: Cannot read property 'get' of undefined"));
153
+ await expect(service.listAccounts()).rejects.toThrow(CDPEvaluationError);
154
+ await expect(service.listAccounts()).rejects.not.toThrow(WrongPortError);
155
+ });
156
+ it("includes the port number in the error message", async () => {
157
+ await service.connect();
158
+ mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
159
+ await expect(service.listAccounts()).rejects.toThrow(/9222/);
160
+ });
161
+ });
162
+ });
163
+ //# sourceMappingURL=launcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.test.js","sourceRoot":"","sources":["../../src/services/launcher.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /** Status of the LinkedHelper launcher process. */
2
+ export interface LauncherStatus {
3
+ reachable: boolean;
4
+ port: number;
5
+ }
6
+ /** Status of a single LinkedHelper account instance. */
7
+ export interface AccountInstanceStatus {
8
+ accountId: number;
9
+ accountName: string;
10
+ cdpPort: number | null;
11
+ }
12
+ /** Status of a single LinkedHelper database. */
13
+ export interface DatabaseStatus {
14
+ accountId: number;
15
+ path: string;
16
+ profileCount: number;
17
+ }
18
+ /** Aggregated health-check result. */
19
+ export interface StatusReport {
20
+ launcher: LauncherStatus;
21
+ instances: AccountInstanceStatus[];
22
+ databases: DatabaseStatus[];
23
+ warnings?: string[];
24
+ }
25
+ /**
26
+ * Perform a health check across LinkedHelper components.
27
+ *
28
+ * The function is intentionally fault-tolerant: individual component
29
+ * failures are reported in the result rather than thrown as exceptions.
30
+ *
31
+ * @param cdpPort - The CDP port of the LinkedHelper launcher (default 9222).
32
+ */
33
+ export declare function checkStatus(cdpPort?: number, options?: {
34
+ host?: string;
35
+ allowRemote?: boolean;
36
+ }): Promise<StatusReport>;
37
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/services/status.ts"],"names":[],"mappings":"AAUA,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wDAAwD;AACxD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,OAAO,SAAmB,EAC1B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACjD,OAAO,CAAC,YAAY,CAAC,CAkEvB"}
@@ -0,0 +1,85 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { discoverInstancePort } from "../cdp/index.js";
4
+ import { DEFAULT_CDP_PORT } from "../constants.js";
5
+ import { DatabaseClient, discoverAllDatabases } from "../db/index.js";
6
+ import { ProfileRepository } from "../db/repositories/profile.js";
7
+ import { errorMessage } from "../utils/error-message.js";
8
+ import { LauncherService } from "./launcher.js";
9
+ /**
10
+ * Perform a health check across LinkedHelper components.
11
+ *
12
+ * The function is intentionally fault-tolerant: individual component
13
+ * failures are reported in the result rather than thrown as exceptions.
14
+ *
15
+ * @param cdpPort - The CDP port of the LinkedHelper launcher (default 9222).
16
+ */
17
+ export async function checkStatus(cdpPort = DEFAULT_CDP_PORT, options) {
18
+ const launcher = { reachable: false, port: cdpPort };
19
+ const instances = [];
20
+ const databases = [];
21
+ const warnings = [];
22
+ // 1. Probe launcher
23
+ const launcherService = new LauncherService(cdpPort, options);
24
+ try {
25
+ await launcherService.connect();
26
+ launcher.reachable = true;
27
+ }
28
+ catch (error) {
29
+ warnings.push(`Launcher not reachable on port ${cdpPort.toString()}: ${errorMessage(error)}`);
30
+ }
31
+ // 2. List accounts and discover instance CDP ports (only if launcher is reachable)
32
+ if (launcher.reachable) {
33
+ try {
34
+ const accounts = await launcherService.listAccounts();
35
+ const instancePort = await discoverInstancePort(cdpPort);
36
+ for (const account of accounts) {
37
+ // discoverInstancePort finds a single child-process port but cannot
38
+ // determine which account owns it. Assign the port only when there
39
+ // is exactly one account (the common case); otherwise report null.
40
+ instances.push({
41
+ accountId: account.id,
42
+ accountName: account.name,
43
+ cdpPort: accounts.length === 1 ? instancePort : null,
44
+ });
45
+ }
46
+ }
47
+ catch (error) {
48
+ warnings.push(`Failed to query accounts: ${errorMessage(error)}`);
49
+ }
50
+ finally {
51
+ launcherService.disconnect();
52
+ }
53
+ }
54
+ // 3. Check databases
55
+ try {
56
+ const dbMap = discoverAllDatabases();
57
+ for (const [accountId, dbPath] of dbMap) {
58
+ let profileCount = 0;
59
+ try {
60
+ const client = new DatabaseClient(dbPath);
61
+ try {
62
+ const repo = new ProfileRepository(client);
63
+ profileCount = repo.getProfileCount();
64
+ }
65
+ finally {
66
+ client.close();
67
+ }
68
+ }
69
+ catch (error) {
70
+ warnings.push(`Database unreadable at ${dbPath}: ${errorMessage(error)}`);
71
+ }
72
+ databases.push({ accountId, path: dbPath, profileCount });
73
+ }
74
+ }
75
+ catch (error) {
76
+ warnings.push(`Failed to discover databases: ${errorMessage(error)}`);
77
+ }
78
+ return {
79
+ launcher,
80
+ instances,
81
+ databases,
82
+ ...(warnings.length > 0 ? { warnings } : {}),
83
+ };
84
+ }
85
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/services/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.d.ts","sourceRoot":"","sources":["../../src/services/status.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,248 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
+ vi.mock("../cdp/index.js", () => ({
5
+ discoverInstancePort: vi.fn(),
6
+ }));
7
+ vi.mock("../db/index.js", () => ({
8
+ DatabaseClient: vi.fn(),
9
+ discoverAllDatabases: vi.fn(),
10
+ }));
11
+ vi.mock("./launcher.js", () => ({
12
+ LauncherService: vi.fn(),
13
+ }));
14
+ import { discoverInstancePort } from "../cdp/index.js";
15
+ import { DatabaseClient, discoverAllDatabases } from "../db/index.js";
16
+ import { LauncherService } from "./launcher.js";
17
+ import { checkStatus } from "./status.js";
18
+ const mockedLauncherService = vi.mocked(LauncherService);
19
+ const mockedDiscoverInstancePort = vi.mocked(discoverInstancePort);
20
+ const mockedDiscoverAllDatabases = vi.mocked(discoverAllDatabases);
21
+ const mockedDatabaseClient = vi.mocked(DatabaseClient);
22
+ function mockLauncher(overrides = {}) {
23
+ const disconnect = vi.fn();
24
+ mockedLauncherService.mockImplementation(function () {
25
+ return {
26
+ connect: vi.fn().mockResolvedValue(undefined),
27
+ disconnect,
28
+ listAccounts: vi.fn().mockResolvedValue([]),
29
+ ...overrides,
30
+ };
31
+ });
32
+ return { disconnect };
33
+ }
34
+ describe("checkStatus", () => {
35
+ beforeEach(() => {
36
+ vi.clearAllMocks();
37
+ });
38
+ afterEach(() => {
39
+ vi.restoreAllMocks();
40
+ });
41
+ it("reports launcher as not reachable when connect fails", async () => {
42
+ mockedLauncherService.mockImplementation(function () {
43
+ return {
44
+ connect: vi.fn().mockRejectedValue(new Error("connection refused")),
45
+ disconnect: vi.fn(),
46
+ };
47
+ });
48
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
49
+ const report = await checkStatus(9222);
50
+ expect(report.launcher).toEqual({ reachable: false, port: 9222 });
51
+ expect(report.instances).toEqual([]);
52
+ expect(report.databases).toEqual([]);
53
+ expect(report.warnings).toEqual([
54
+ "Launcher not reachable on port 9222: connection refused",
55
+ ]);
56
+ });
57
+ it("still discovers databases when launcher is not reachable", async () => {
58
+ mockedLauncherService.mockImplementation(function () {
59
+ return {
60
+ connect: vi.fn().mockRejectedValue(new Error("connection refused")),
61
+ disconnect: vi.fn(),
62
+ };
63
+ });
64
+ const dbMap = new Map();
65
+ dbMap.set(1, "/path/to/db.db");
66
+ mockedDiscoverAllDatabases.mockReturnValue(dbMap);
67
+ const mockClose = vi.fn();
68
+ const mockPrepare = vi.fn().mockReturnValue({
69
+ get: vi.fn().mockReturnValue({ cnt: 10 }),
70
+ });
71
+ mockedDatabaseClient.mockImplementation(function () {
72
+ return { db: { prepare: mockPrepare }, close: mockClose };
73
+ });
74
+ const report = await checkStatus(9222);
75
+ expect(report.launcher.reachable).toBe(false);
76
+ expect(report.instances).toEqual([]);
77
+ expect(report.databases).toEqual([
78
+ { accountId: 1, path: "/path/to/db.db", profileCount: 10 },
79
+ ]);
80
+ expect(report.warnings).toEqual([
81
+ "Launcher not reachable on port 9222: connection refused",
82
+ ]);
83
+ expect(mockedDiscoverAllDatabases).toHaveBeenCalledOnce();
84
+ });
85
+ it("reports launcher as reachable when connect succeeds", async () => {
86
+ mockLauncher();
87
+ mockedDiscoverInstancePort.mockResolvedValue(null);
88
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
89
+ const report = await checkStatus(9222);
90
+ expect(report.launcher).toEqual({ reachable: true, port: 9222 });
91
+ });
92
+ it("uses provided cdpPort", async () => {
93
+ mockLauncher();
94
+ mockedDiscoverInstancePort.mockResolvedValue(null);
95
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
96
+ const report = await checkStatus(4567);
97
+ expect(report.launcher.port).toBe(4567);
98
+ expect(mockedLauncherService).toHaveBeenCalledWith(4567, undefined);
99
+ });
100
+ it("defaults cdpPort to 9222", async () => {
101
+ mockLauncher();
102
+ mockedDiscoverInstancePort.mockResolvedValue(null);
103
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
104
+ const report = await checkStatus();
105
+ expect(report.launcher.port).toBe(9222);
106
+ });
107
+ it("reports single account with instance port", async () => {
108
+ mockLauncher({
109
+ listAccounts: vi.fn().mockResolvedValue([
110
+ { id: 1, liId: 100, name: "Alice" },
111
+ ]),
112
+ });
113
+ mockedDiscoverInstancePort.mockResolvedValue(54321);
114
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
115
+ const report = await checkStatus(9222);
116
+ expect(report.instances).toEqual([
117
+ { accountId: 1, accountName: "Alice", cdpPort: 54321 },
118
+ ]);
119
+ });
120
+ it("reports null cdpPort for all accounts when multiple accounts exist", async () => {
121
+ mockLauncher({
122
+ listAccounts: vi.fn().mockResolvedValue([
123
+ { id: 1, liId: 100, name: "Alice" },
124
+ { id: 2, liId: 200, name: "Bob" },
125
+ ]),
126
+ });
127
+ mockedDiscoverInstancePort.mockResolvedValue(54321);
128
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
129
+ const report = await checkStatus(9222);
130
+ expect(report.instances).toEqual([
131
+ { accountId: 1, accountName: "Alice", cdpPort: null },
132
+ { accountId: 2, accountName: "Bob", cdpPort: null },
133
+ ]);
134
+ });
135
+ it("reports null cdpPort when no instance is running", async () => {
136
+ mockLauncher({
137
+ listAccounts: vi.fn().mockResolvedValue([
138
+ { id: 1, liId: 100, name: "Alice" },
139
+ ]),
140
+ });
141
+ mockedDiscoverInstancePort.mockResolvedValue(null);
142
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
143
+ const report = await checkStatus(9222);
144
+ expect(report.instances[0]?.cdpPort).toBeNull();
145
+ });
146
+ it("reports empty instances when listAccounts fails", async () => {
147
+ mockLauncher({
148
+ listAccounts: vi.fn().mockRejectedValue(new Error("eval error")),
149
+ });
150
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
151
+ const report = await checkStatus(9222);
152
+ expect(report.instances).toEqual([]);
153
+ expect(report.launcher.reachable).toBe(true);
154
+ expect(report.warnings).toEqual([
155
+ "Failed to query accounts: eval error",
156
+ ]);
157
+ });
158
+ it("reports databases with profile counts", async () => {
159
+ mockLauncher();
160
+ mockedDiscoverInstancePort.mockResolvedValue(null);
161
+ const dbMap = new Map();
162
+ dbMap.set(1, "/path/to/db1.db");
163
+ dbMap.set(2, "/path/to/db2.db");
164
+ mockedDiscoverAllDatabases.mockReturnValue(dbMap);
165
+ const mockClose = vi.fn();
166
+ const mockPrepare = vi.fn().mockReturnValue({
167
+ get: vi.fn().mockReturnValue({ cnt: 42 }),
168
+ });
169
+ mockedDatabaseClient.mockImplementation(function () {
170
+ return { db: { prepare: mockPrepare }, close: mockClose };
171
+ });
172
+ const report = await checkStatus(9222);
173
+ expect(report.databases).toEqual([
174
+ { accountId: 1, path: "/path/to/db1.db", profileCount: 42 },
175
+ { accountId: 2, path: "/path/to/db2.db", profileCount: 42 },
176
+ ]);
177
+ expect(mockClose).toHaveBeenCalledTimes(2);
178
+ });
179
+ it("reports profileCount 0 when database is unreadable", async () => {
180
+ mockLauncher();
181
+ mockedDiscoverInstancePort.mockResolvedValue(null);
182
+ const dbMap = new Map();
183
+ dbMap.set(1, "/path/to/db.db");
184
+ mockedDiscoverAllDatabases.mockReturnValue(dbMap);
185
+ mockedDatabaseClient.mockImplementation(function () {
186
+ throw new Error("SQLITE_CANTOPEN");
187
+ });
188
+ const report = await checkStatus(9222);
189
+ expect(report.databases).toEqual([
190
+ { accountId: 1, path: "/path/to/db.db", profileCount: 0 },
191
+ ]);
192
+ expect(report.warnings).toEqual([
193
+ "Database unreadable at /path/to/db.db: SQLITE_CANTOPEN",
194
+ ]);
195
+ });
196
+ it("reports empty databases when discovery fails", async () => {
197
+ mockLauncher();
198
+ mockedDiscoverInstancePort.mockResolvedValue(null);
199
+ mockedDiscoverAllDatabases.mockImplementation(() => {
200
+ throw new Error("no such directory");
201
+ });
202
+ const report = await checkStatus(9222);
203
+ expect(report.databases).toEqual([]);
204
+ expect(report.warnings).toEqual([
205
+ "Failed to discover databases: no such directory",
206
+ ]);
207
+ });
208
+ it("omits warnings when no errors occur", async () => {
209
+ mockLauncher();
210
+ mockedDiscoverInstancePort.mockResolvedValue(null);
211
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
212
+ const report = await checkStatus(9222);
213
+ expect(report.warnings).toBeUndefined();
214
+ });
215
+ it("accumulates multiple warnings from different stages", async () => {
216
+ mockedLauncherService.mockImplementation(function () {
217
+ return {
218
+ connect: vi.fn().mockRejectedValue(new Error("refused")),
219
+ disconnect: vi.fn(),
220
+ };
221
+ });
222
+ mockedDiscoverAllDatabases.mockImplementation(() => {
223
+ throw new Error("no dir");
224
+ });
225
+ const report = await checkStatus(9222);
226
+ expect(report.warnings).toHaveLength(2);
227
+ expect(report.warnings).toEqual(expect.arrayContaining([
228
+ expect.stringMatching(/Launcher not reachable/),
229
+ expect.stringMatching(/Failed to discover databases/),
230
+ ]));
231
+ });
232
+ it("disconnects launcher after querying accounts", async () => {
233
+ const { disconnect } = mockLauncher();
234
+ mockedDiscoverInstancePort.mockResolvedValue(null);
235
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
236
+ await checkStatus(9222);
237
+ expect(disconnect).toHaveBeenCalledOnce();
238
+ });
239
+ it("disconnects launcher even when listAccounts fails", async () => {
240
+ const { disconnect } = mockLauncher({
241
+ listAccounts: vi.fn().mockRejectedValue(new Error("eval error")),
242
+ });
243
+ mockedDiscoverAllDatabases.mockReturnValue(new Map());
244
+ await checkStatus(9222);
245
+ expect(disconnect).toHaveBeenCalledOnce();
246
+ });
247
+ });
248
+ //# sourceMappingURL=status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.js","sourceRoot":"","sources":["../../src/services/status.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { describe } from "vitest";
2
+ import { AppService, type AppServiceOptions } from "../services/app.js";
3
+ /**
4
+ * Wrapper around `describe.skipIf` that skips the suite when
5
+ * the LinkedHelper binary is not installed.
6
+ */
7
+ export declare function describeE2E(name: string, fn: () => void): ReturnType<typeof describe>;
8
+ export interface LaunchedApp {
9
+ app: AppService;
10
+ port: number;
11
+ }
12
+ /**
13
+ * Launch LinkedHelper and wait for the launcher to become fully ready.
14
+ *
15
+ * Readiness is verified in two phases:
16
+ * 1. The CDP HTTP endpoint (`/json/list`) returns at least one target.
17
+ * 2. A full `LauncherService` connection succeeds and can query accounts,
18
+ * confirming the Electron renderer, `@electron/remote`, and the
19
+ * electron-store are all operational.
20
+ *
21
+ * @param options.timeout Maximum ms to wait for full readiness (default 30 000).
22
+ */
23
+ export declare function launchApp(options?: {
24
+ timeout?: number;
25
+ appOptions?: AppServiceOptions;
26
+ }): Promise<LaunchedApp>;
27
+ /**
28
+ * Quit LinkedHelper, swallowing errors for cleanup use.
29
+ */
30
+ export declare function quitApp(app: AppService): Promise<void>;
31
+ /**
32
+ * Retry an async operation with configurable attempts and delay.
33
+ *
34
+ * Useful in E2E tests where CDP endpoints may be transiently
35
+ * unavailable during the LinkedHelper app lifecycle.
36
+ */
37
+ export declare function retryAsync<T>(fn: () => Promise<T>, options?: {
38
+ retries?: number;
39
+ delay?: number;
40
+ }): Promise<T>;
41
+ //# sourceMappingURL=e2e-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-helpers.d.ts","sourceRoot":"","sources":["../../src/testing/e2e-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAkBxE;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,IAAI,GACb,UAAU,CAAC,OAAO,QAAQ,CAAC,CAE7B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GAAG,OAAO,CAAC,WAAW,CAAC,CA4CvB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5D;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,CAAC,CAAC,CAiBZ"}