@lhremote/core 0.8.0 → 0.10.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 (480) hide show
  1. package/dist/cdp/app-discovery.d.ts +57 -0
  2. package/dist/cdp/app-discovery.d.ts.map +1 -1
  3. package/dist/cdp/app-discovery.js +90 -7
  4. package/dist/cdp/app-discovery.js.map +1 -1
  5. package/dist/cdp/app-discovery.test.js +180 -9
  6. package/dist/cdp/app-discovery.test.js.map +1 -1
  7. package/dist/cdp/client.d.ts +8 -1
  8. package/dist/cdp/client.d.ts.map +1 -1
  9. package/dist/cdp/client.js +8 -1
  10. package/dist/cdp/client.js.map +1 -1
  11. package/dist/cdp/discovery.d.ts.map +1 -1
  12. package/dist/cdp/discovery.js +5 -1
  13. package/dist/cdp/discovery.js.map +1 -1
  14. package/dist/cdp/discovery.test.js +7 -0
  15. package/dist/cdp/discovery.test.js.map +1 -1
  16. package/dist/cdp/index.d.ts +1 -1
  17. package/dist/cdp/index.d.ts.map +1 -1
  18. package/dist/cdp/index.js +1 -1
  19. package/dist/cdp/index.js.map +1 -1
  20. package/dist/cdp/instance-discovery.d.ts.map +1 -1
  21. package/dist/cdp/instance-discovery.js +25 -10
  22. package/dist/cdp/instance-discovery.js.map +1 -1
  23. package/dist/cdp/instance-discovery.test.js +17 -0
  24. package/dist/cdp/instance-discovery.test.js.map +1 -1
  25. package/dist/cdp/testing/launch-chromium.d.ts +1 -1
  26. package/dist/cdp/testing/launch-chromium.js +2 -2
  27. package/dist/db/client.d.ts.map +1 -1
  28. package/dist/db/client.js +3 -0
  29. package/dist/db/client.js.map +1 -1
  30. package/dist/db/repositories/campaign-hard-delete.integration.test.js +4 -1
  31. package/dist/db/repositories/campaign-hard-delete.integration.test.js.map +1 -1
  32. package/dist/db/repositories/campaign.d.ts.map +1 -1
  33. package/dist/db/repositories/campaign.js +81 -33
  34. package/dist/db/repositories/campaign.js.map +1 -1
  35. package/dist/db/repositories/campaign.test.js +2 -2
  36. package/dist/db/repositories/collection-list.d.ts +11 -0
  37. package/dist/db/repositories/collection-list.d.ts.map +1 -1
  38. package/dist/db/repositories/collection-list.integration.test.js +6 -4
  39. package/dist/db/repositories/collection-list.integration.test.js.map +1 -1
  40. package/dist/db/repositories/collection-list.js +92 -2
  41. package/dist/db/repositories/collection-list.js.map +1 -1
  42. package/dist/db/testing/create-fixture.js +36 -2
  43. package/dist/db/testing/create-fixture.js.map +1 -1
  44. package/dist/index.d.ts +6 -6
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +6 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/linkedin/dom-automation-retry.test.d.ts +2 -0
  49. package/dist/linkedin/dom-automation-retry.test.d.ts.map +1 -0
  50. package/dist/linkedin/dom-automation-retry.test.js +51 -0
  51. package/dist/linkedin/dom-automation-retry.test.js.map +1 -0
  52. package/dist/linkedin/dom-automation.d.ts +166 -6
  53. package/dist/linkedin/dom-automation.d.ts.map +1 -1
  54. package/dist/linkedin/dom-automation.js +496 -21
  55. package/dist/linkedin/dom-automation.js.map +1 -1
  56. package/dist/linkedin/humanized-mouse.d.ts +69 -0
  57. package/dist/linkedin/humanized-mouse.d.ts.map +1 -0
  58. package/dist/linkedin/humanized-mouse.js +109 -0
  59. package/dist/linkedin/humanized-mouse.js.map +1 -0
  60. package/dist/linkedin/index.d.ts +3 -2
  61. package/dist/linkedin/index.d.ts.map +1 -1
  62. package/dist/linkedin/index.js +3 -2
  63. package/dist/linkedin/index.js.map +1 -1
  64. package/dist/linkedin/selectors.d.ts +74 -48
  65. package/dist/linkedin/selectors.d.ts.map +1 -1
  66. package/dist/linkedin/selectors.js +64 -41
  67. package/dist/linkedin/selectors.js.map +1 -1
  68. package/dist/operations/add-people-to-collection.d.ts +1 -1
  69. package/dist/operations/add-people-to-collection.d.ts.map +1 -1
  70. package/dist/operations/add-people-to-collection.js +3 -6
  71. package/dist/operations/add-people-to-collection.js.map +1 -1
  72. package/dist/operations/build-linkedin-url.test.d.ts +2 -0
  73. package/dist/operations/build-linkedin-url.test.d.ts.map +1 -0
  74. package/dist/operations/build-linkedin-url.test.js +158 -0
  75. package/dist/operations/build-linkedin-url.test.js.map +1 -0
  76. package/dist/operations/campaign-add-action.d.ts +1 -1
  77. package/dist/operations/campaign-add-action.d.ts.map +1 -1
  78. package/dist/operations/campaign-add-action.js +3 -6
  79. package/dist/operations/campaign-add-action.js.map +1 -1
  80. package/dist/operations/campaign-create.d.ts +1 -1
  81. package/dist/operations/campaign-create.d.ts.map +1 -1
  82. package/dist/operations/campaign-create.js +3 -6
  83. package/dist/operations/campaign-create.js.map +1 -1
  84. package/dist/operations/campaign-delete.d.ts +1 -1
  85. package/dist/operations/campaign-delete.d.ts.map +1 -1
  86. package/dist/operations/campaign-delete.js +3 -6
  87. package/dist/operations/campaign-delete.js.map +1 -1
  88. package/dist/operations/campaign-erase.d.ts +1 -1
  89. package/dist/operations/campaign-erase.d.ts.map +1 -1
  90. package/dist/operations/campaign-erase.js +3 -6
  91. package/dist/operations/campaign-erase.js.map +1 -1
  92. package/dist/operations/campaign-exclude-add.d.ts +1 -1
  93. package/dist/operations/campaign-exclude-add.d.ts.map +1 -1
  94. package/dist/operations/campaign-exclude-add.js +3 -6
  95. package/dist/operations/campaign-exclude-add.js.map +1 -1
  96. package/dist/operations/campaign-exclude-list.d.ts +1 -1
  97. package/dist/operations/campaign-exclude-list.d.ts.map +1 -1
  98. package/dist/operations/campaign-exclude-list.js +3 -6
  99. package/dist/operations/campaign-exclude-list.js.map +1 -1
  100. package/dist/operations/campaign-exclude-remove.d.ts +1 -1
  101. package/dist/operations/campaign-exclude-remove.d.ts.map +1 -1
  102. package/dist/operations/campaign-exclude-remove.js +3 -6
  103. package/dist/operations/campaign-exclude-remove.js.map +1 -1
  104. package/dist/operations/campaign-export.d.ts +1 -1
  105. package/dist/operations/campaign-export.d.ts.map +1 -1
  106. package/dist/operations/campaign-export.js +3 -6
  107. package/dist/operations/campaign-export.js.map +1 -1
  108. package/dist/operations/campaign-get.d.ts +1 -1
  109. package/dist/operations/campaign-get.d.ts.map +1 -1
  110. package/dist/operations/campaign-get.js +3 -6
  111. package/dist/operations/campaign-get.js.map +1 -1
  112. package/dist/operations/campaign-list-people.d.ts +1 -1
  113. package/dist/operations/campaign-list-people.d.ts.map +1 -1
  114. package/dist/operations/campaign-list-people.js +3 -6
  115. package/dist/operations/campaign-list-people.js.map +1 -1
  116. package/dist/operations/campaign-list.d.ts +1 -1
  117. package/dist/operations/campaign-list.d.ts.map +1 -1
  118. package/dist/operations/campaign-list.js +3 -6
  119. package/dist/operations/campaign-list.js.map +1 -1
  120. package/dist/operations/campaign-move-next.d.ts +1 -1
  121. package/dist/operations/campaign-move-next.d.ts.map +1 -1
  122. package/dist/operations/campaign-move-next.js +3 -6
  123. package/dist/operations/campaign-move-next.js.map +1 -1
  124. package/dist/operations/campaign-remove-action.d.ts +1 -1
  125. package/dist/operations/campaign-remove-action.d.ts.map +1 -1
  126. package/dist/operations/campaign-remove-action.js +3 -6
  127. package/dist/operations/campaign-remove-action.js.map +1 -1
  128. package/dist/operations/campaign-remove-people.d.ts +1 -1
  129. package/dist/operations/campaign-remove-people.d.ts.map +1 -1
  130. package/dist/operations/campaign-remove-people.js +3 -6
  131. package/dist/operations/campaign-remove-people.js.map +1 -1
  132. package/dist/operations/campaign-reorder-actions.d.ts +1 -1
  133. package/dist/operations/campaign-reorder-actions.d.ts.map +1 -1
  134. package/dist/operations/campaign-reorder-actions.js +3 -6
  135. package/dist/operations/campaign-reorder-actions.js.map +1 -1
  136. package/dist/operations/campaign-retry.d.ts +1 -1
  137. package/dist/operations/campaign-retry.d.ts.map +1 -1
  138. package/dist/operations/campaign-retry.js +3 -6
  139. package/dist/operations/campaign-retry.js.map +1 -1
  140. package/dist/operations/campaign-start.d.ts +1 -1
  141. package/dist/operations/campaign-start.d.ts.map +1 -1
  142. package/dist/operations/campaign-start.js +3 -6
  143. package/dist/operations/campaign-start.js.map +1 -1
  144. package/dist/operations/campaign-statistics.d.ts +1 -1
  145. package/dist/operations/campaign-statistics.d.ts.map +1 -1
  146. package/dist/operations/campaign-statistics.js +3 -6
  147. package/dist/operations/campaign-statistics.js.map +1 -1
  148. package/dist/operations/campaign-status.d.ts +1 -1
  149. package/dist/operations/campaign-status.d.ts.map +1 -1
  150. package/dist/operations/campaign-status.js +3 -6
  151. package/dist/operations/campaign-status.js.map +1 -1
  152. package/dist/operations/campaign-stop.d.ts +1 -1
  153. package/dist/operations/campaign-stop.d.ts.map +1 -1
  154. package/dist/operations/campaign-stop.js +3 -6
  155. package/dist/operations/campaign-stop.js.map +1 -1
  156. package/dist/operations/campaign-update-action.d.ts +1 -1
  157. package/dist/operations/campaign-update-action.d.ts.map +1 -1
  158. package/dist/operations/campaign-update-action.js +3 -6
  159. package/dist/operations/campaign-update-action.js.map +1 -1
  160. package/dist/operations/campaign-update.d.ts +1 -1
  161. package/dist/operations/campaign-update.d.ts.map +1 -1
  162. package/dist/operations/campaign-update.js +3 -6
  163. package/dist/operations/campaign-update.js.map +1 -1
  164. package/dist/operations/check-replies.d.ts +3 -1
  165. package/dist/operations/check-replies.d.ts.map +1 -1
  166. package/dist/operations/check-replies.js +124 -17
  167. package/dist/operations/check-replies.js.map +1 -1
  168. package/dist/operations/check-replies.test.js +152 -17
  169. package/dist/operations/check-replies.test.js.map +1 -1
  170. package/dist/operations/collect-people.d.ts +1 -1
  171. package/dist/operations/collect-people.d.ts.map +1 -1
  172. package/dist/operations/collect-people.js +18 -12
  173. package/dist/operations/collect-people.js.map +1 -1
  174. package/dist/operations/collect-people.test.js +21 -5
  175. package/dist/operations/collect-people.test.js.map +1 -1
  176. package/dist/operations/comment-on-post.d.ts +4 -1
  177. package/dist/operations/comment-on-post.d.ts.map +1 -1
  178. package/dist/operations/comment-on-post.js +15 -19
  179. package/dist/operations/comment-on-post.js.map +1 -1
  180. package/dist/operations/comment-on-post.test.js +8 -6
  181. package/dist/operations/comment-on-post.test.js.map +1 -1
  182. package/dist/operations/create-collection.d.ts +1 -1
  183. package/dist/operations/create-collection.d.ts.map +1 -1
  184. package/dist/operations/create-collection.js +5 -7
  185. package/dist/operations/create-collection.js.map +1 -1
  186. package/dist/operations/create-collection.test.js +3 -1
  187. package/dist/operations/create-collection.test.js.map +1 -1
  188. package/dist/operations/delete-collection.d.ts +1 -1
  189. package/dist/operations/delete-collection.d.ts.map +1 -1
  190. package/dist/operations/delete-collection.js +3 -6
  191. package/dist/operations/delete-collection.js.map +1 -1
  192. package/dist/operations/dismiss-errors.d.ts +11 -5
  193. package/dist/operations/dismiss-errors.d.ts.map +1 -1
  194. package/dist/operations/dismiss-errors.js +68 -34
  195. package/dist/operations/dismiss-errors.js.map +1 -1
  196. package/dist/operations/dismiss-errors.test.js +129 -8
  197. package/dist/operations/dismiss-errors.test.js.map +1 -1
  198. package/dist/operations/endorse-skills.test.d.ts +2 -0
  199. package/dist/operations/endorse-skills.test.d.ts.map +1 -0
  200. package/dist/operations/endorse-skills.test.js +70 -0
  201. package/dist/operations/endorse-skills.test.js.map +1 -0
  202. package/dist/operations/enrich-profile.test.d.ts +2 -0
  203. package/dist/operations/enrich-profile.test.d.ts.map +1 -0
  204. package/dist/operations/enrich-profile.test.js +73 -0
  205. package/dist/operations/enrich-profile.test.js.map +1 -0
  206. package/dist/operations/ephemeral-action.d.ts +2 -1
  207. package/dist/operations/ephemeral-action.d.ts.map +1 -1
  208. package/dist/operations/ephemeral-action.js +5 -7
  209. package/dist/operations/ephemeral-action.js.map +1 -1
  210. package/dist/operations/ephemeral-action.test.d.ts +2 -0
  211. package/dist/operations/ephemeral-action.test.d.ts.map +1 -0
  212. package/dist/operations/ephemeral-action.test.js +159 -0
  213. package/dist/operations/ephemeral-action.test.js.map +1 -0
  214. package/dist/operations/follow-person.test.d.ts +2 -0
  215. package/dist/operations/follow-person.test.d.ts.map +1 -0
  216. package/dist/operations/follow-person.test.js +57 -0
  217. package/dist/operations/follow-person.test.js.map +1 -0
  218. package/dist/operations/get-action-budget.d.ts +1 -1
  219. package/dist/operations/get-action-budget.d.ts.map +1 -1
  220. package/dist/operations/get-action-budget.js +3 -6
  221. package/dist/operations/get-action-budget.js.map +1 -1
  222. package/dist/operations/get-errors.d.ts +5 -1
  223. package/dist/operations/get-errors.d.ts.map +1 -1
  224. package/dist/operations/get-errors.js +55 -33
  225. package/dist/operations/get-errors.js.map +1 -1
  226. package/dist/operations/get-errors.test.js +54 -55
  227. package/dist/operations/get-errors.test.js.map +1 -1
  228. package/dist/operations/get-feed.d.ts +83 -4
  229. package/dist/operations/get-feed.d.ts.map +1 -1
  230. package/dist/operations/get-feed.js +400 -153
  231. package/dist/operations/get-feed.js.map +1 -1
  232. package/dist/operations/get-feed.test.js +416 -190
  233. package/dist/operations/get-feed.test.js.map +1 -1
  234. package/dist/operations/get-post-engagers.d.ts +6 -3
  235. package/dist/operations/get-post-engagers.d.ts.map +1 -1
  236. package/dist/operations/get-post-engagers.js +278 -78
  237. package/dist/operations/get-post-engagers.js.map +1 -1
  238. package/dist/operations/get-post-engagers.test.js +292 -14
  239. package/dist/operations/get-post-engagers.test.js.map +1 -1
  240. package/dist/operations/get-post-stats.d.ts +8 -3
  241. package/dist/operations/get-post-stats.d.ts.map +1 -1
  242. package/dist/operations/get-post-stats.js +101 -37
  243. package/dist/operations/get-post-stats.js.map +1 -1
  244. package/dist/operations/get-post-stats.test.js +137 -2
  245. package/dist/operations/get-post-stats.test.js.map +1 -1
  246. package/dist/operations/get-post.d.ts +9 -150
  247. package/dist/operations/get-post.d.ts.map +1 -1
  248. package/dist/operations/get-post.js +356 -210
  249. package/dist/operations/get-post.js.map +1 -1
  250. package/dist/operations/get-post.test.js +210 -387
  251. package/dist/operations/get-post.test.js.map +1 -1
  252. package/dist/operations/get-profile-activity.d.ts +13 -92
  253. package/dist/operations/get-profile-activity.d.ts.map +1 -1
  254. package/dist/operations/get-profile-activity.js +305 -105
  255. package/dist/operations/get-profile-activity.js.map +1 -1
  256. package/dist/operations/get-profile-activity.test.js +277 -158
  257. package/dist/operations/get-profile-activity.test.js.map +1 -1
  258. package/dist/operations/get-throttle-status.d.ts +1 -1
  259. package/dist/operations/get-throttle-status.d.ts.map +1 -1
  260. package/dist/operations/get-throttle-status.js +4 -10
  261. package/dist/operations/get-throttle-status.js.map +1 -1
  262. package/dist/operations/import-people-from-collection.d.ts +1 -1
  263. package/dist/operations/import-people-from-collection.d.ts.map +1 -1
  264. package/dist/operations/import-people-from-collection.js +3 -6
  265. package/dist/operations/import-people-from-collection.js.map +1 -1
  266. package/dist/operations/import-people-from-urls.d.ts +1 -1
  267. package/dist/operations/import-people-from-urls.d.ts.map +1 -1
  268. package/dist/operations/import-people-from-urls.js +3 -6
  269. package/dist/operations/import-people-from-urls.js.map +1 -1
  270. package/dist/operations/index.d.ts +2 -2
  271. package/dist/operations/index.d.ts.map +1 -1
  272. package/dist/operations/index.js +2 -1
  273. package/dist/operations/index.js.map +1 -1
  274. package/dist/operations/like-person-posts.test.d.ts +2 -0
  275. package/dist/operations/like-person-posts.test.d.ts.map +1 -0
  276. package/dist/operations/like-person-posts.test.js +103 -0
  277. package/dist/operations/like-person-posts.test.js.map +1 -0
  278. package/dist/operations/list-collections.d.ts +1 -1
  279. package/dist/operations/list-collections.d.ts.map +1 -1
  280. package/dist/operations/list-collections.js +3 -6
  281. package/dist/operations/list-collections.js.map +1 -1
  282. package/dist/operations/message-person.test.d.ts +2 -0
  283. package/dist/operations/message-person.test.d.ts.map +1 -0
  284. package/dist/operations/message-person.test.js +108 -0
  285. package/dist/operations/message-person.test.js.map +1 -0
  286. package/dist/operations/navigate-away.d.ts +14 -0
  287. package/dist/operations/navigate-away.d.ts.map +1 -0
  288. package/dist/operations/navigate-away.js +24 -0
  289. package/dist/operations/navigate-away.js.map +1 -0
  290. package/dist/operations/navigate-away.test.d.ts +2 -0
  291. package/dist/operations/navigate-away.test.d.ts.map +1 -0
  292. package/dist/operations/navigate-away.test.js +51 -0
  293. package/dist/operations/navigate-away.test.js.map +1 -0
  294. package/dist/operations/query-messages.d.ts +1 -1
  295. package/dist/operations/query-messages.d.ts.map +1 -1
  296. package/dist/operations/query-messages.js +3 -6
  297. package/dist/operations/query-messages.js.map +1 -1
  298. package/dist/operations/react-to-post.d.ts +16 -4
  299. package/dist/operations/react-to-post.d.ts.map +1 -1
  300. package/dist/operations/react-to-post.js +86 -24
  301. package/dist/operations/react-to-post.js.map +1 -1
  302. package/dist/operations/react-to-post.test.js +55 -5
  303. package/dist/operations/react-to-post.test.js.map +1 -1
  304. package/dist/operations/remove-connection.test.d.ts +2 -0
  305. package/dist/operations/remove-connection.test.d.ts.map +1 -0
  306. package/dist/operations/remove-connection.test.js +45 -0
  307. package/dist/operations/remove-connection.test.js.map +1 -0
  308. package/dist/operations/remove-people-from-collection.d.ts +1 -1
  309. package/dist/operations/remove-people-from-collection.d.ts.map +1 -1
  310. package/dist/operations/remove-people-from-collection.js +3 -6
  311. package/dist/operations/remove-people-from-collection.js.map +1 -1
  312. package/dist/operations/resolve-linkedin-entity.d.ts.map +1 -1
  313. package/dist/operations/resolve-linkedin-entity.js +2 -2
  314. package/dist/operations/resolve-linkedin-entity.js.map +1 -1
  315. package/dist/operations/resolve-linkedin-entity.test.d.ts +2 -0
  316. package/dist/operations/resolve-linkedin-entity.test.d.ts.map +1 -0
  317. package/dist/operations/resolve-linkedin-entity.test.js +343 -0
  318. package/dist/operations/resolve-linkedin-entity.test.js.map +1 -0
  319. package/dist/operations/scrape-messaging-history.d.ts +2 -1
  320. package/dist/operations/scrape-messaging-history.d.ts.map +1 -1
  321. package/dist/operations/scrape-messaging-history.js +113 -18
  322. package/dist/operations/scrape-messaging-history.js.map +1 -1
  323. package/dist/operations/scrape-messaging-history.test.js +109 -12
  324. package/dist/operations/scrape-messaging-history.test.js.map +1 -1
  325. package/dist/operations/search-posts.d.ts +20 -112
  326. package/dist/operations/search-posts.d.ts.map +1 -1
  327. package/dist/operations/search-posts.js +369 -170
  328. package/dist/operations/search-posts.js.map +1 -1
  329. package/dist/operations/search-posts.test.js +273 -234
  330. package/dist/operations/search-posts.test.js.map +1 -1
  331. package/dist/operations/send-inmail.test.d.ts +2 -0
  332. package/dist/operations/send-inmail.test.d.ts.map +1 -0
  333. package/dist/operations/send-inmail.test.js +108 -0
  334. package/dist/operations/send-inmail.test.js.map +1 -0
  335. package/dist/operations/send-invite.test.d.ts +2 -0
  336. package/dist/operations/send-invite.test.d.ts.map +1 -0
  337. package/dist/operations/send-invite.test.js +59 -0
  338. package/dist/operations/send-invite.test.js.map +1 -0
  339. package/dist/operations/types.d.ts +27 -1
  340. package/dist/operations/types.d.ts.map +1 -1
  341. package/dist/operations/types.js +14 -1
  342. package/dist/operations/types.js.map +1 -1
  343. package/dist/operations/visit-profile.d.ts +1 -1
  344. package/dist/operations/visit-profile.d.ts.map +1 -1
  345. package/dist/operations/visit-profile.js +3 -6
  346. package/dist/operations/visit-profile.js.map +1 -1
  347. package/dist/services/account-resolution.d.ts +10 -4
  348. package/dist/services/account-resolution.d.ts.map +1 -1
  349. package/dist/services/account-resolution.js +63 -5
  350. package/dist/services/account-resolution.js.map +1 -1
  351. package/dist/services/app.d.ts +6 -2
  352. package/dist/services/app.d.ts.map +1 -1
  353. package/dist/services/app.js +18 -6
  354. package/dist/services/app.js.map +1 -1
  355. package/dist/services/app.test.js +41 -7
  356. package/dist/services/app.test.js.map +1 -1
  357. package/dist/services/campaign.d.ts +40 -4
  358. package/dist/services/campaign.d.ts.map +1 -1
  359. package/dist/services/campaign.js +176 -10
  360. package/dist/services/campaign.js.map +1 -1
  361. package/dist/services/campaign.test.js +53 -15
  362. package/dist/services/campaign.test.js.map +1 -1
  363. package/dist/services/collection.d.ts +16 -21
  364. package/dist/services/collection.d.ts.map +1 -1
  365. package/dist/services/collection.js +34 -47
  366. package/dist/services/collection.js.map +1 -1
  367. package/dist/services/collection.test.js +30 -91
  368. package/dist/services/collection.test.js.map +1 -1
  369. package/dist/services/ephemeral-campaign.d.ts +6 -0
  370. package/dist/services/ephemeral-campaign.d.ts.map +1 -1
  371. package/dist/services/ephemeral-campaign.js +54 -10
  372. package/dist/services/ephemeral-campaign.js.map +1 -1
  373. package/dist/services/ephemeral-campaign.test.js +23 -10
  374. package/dist/services/ephemeral-campaign.test.js.map +1 -1
  375. package/dist/services/errors.d.ts +2 -1
  376. package/dist/services/errors.d.ts.map +1 -1
  377. package/dist/services/errors.js +6 -3
  378. package/dist/services/errors.js.map +1 -1
  379. package/dist/services/index.d.ts +1 -2
  380. package/dist/services/index.d.ts.map +1 -1
  381. package/dist/services/index.js +1 -2
  382. package/dist/services/index.js.map +1 -1
  383. package/dist/services/instance-context.d.ts +5 -1
  384. package/dist/services/instance-context.d.ts.map +1 -1
  385. package/dist/services/instance-context.js +87 -28
  386. package/dist/services/instance-context.js.map +1 -1
  387. package/dist/services/instance-context.test.js +5 -1
  388. package/dist/services/instance-context.test.js.map +1 -1
  389. package/dist/services/instance-lifecycle.d.ts.map +1 -1
  390. package/dist/services/instance-lifecycle.js +32 -1
  391. package/dist/services/instance-lifecycle.js.map +1 -1
  392. package/dist/services/instance-lifecycle.test.js +52 -1
  393. package/dist/services/instance-lifecycle.test.js.map +1 -1
  394. package/dist/services/instance.d.ts +37 -9
  395. package/dist/services/instance.d.ts.map +1 -1
  396. package/dist/services/instance.js +100 -25
  397. package/dist/services/instance.js.map +1 -1
  398. package/dist/services/instance.test.js +157 -0
  399. package/dist/services/instance.test.js.map +1 -1
  400. package/dist/services/launcher.d.ts +47 -3
  401. package/dist/services/launcher.d.ts.map +1 -1
  402. package/dist/services/launcher.js +205 -33
  403. package/dist/services/launcher.js.map +1 -1
  404. package/dist/services/launcher.test.js +133 -6
  405. package/dist/services/launcher.test.js.map +1 -1
  406. package/dist/services/source-type-registry.d.ts +8 -0
  407. package/dist/services/source-type-registry.d.ts.map +1 -1
  408. package/dist/services/source-type-registry.js +39 -0
  409. package/dist/services/source-type-registry.js.map +1 -1
  410. package/dist/services/source-type-registry.test.js +31 -1
  411. package/dist/services/source-type-registry.test.js.map +1 -1
  412. package/dist/services/status.d.ts +6 -2
  413. package/dist/services/status.d.ts.map +1 -1
  414. package/dist/services/status.js +67 -34
  415. package/dist/services/status.js.map +1 -1
  416. package/dist/services/status.test.js +9 -2
  417. package/dist/services/status.test.js.map +1 -1
  418. package/dist/testing/e2e-helpers.d.ts +47 -1
  419. package/dist/testing/e2e-helpers.d.ts.map +1 -1
  420. package/dist/testing/e2e-helpers.js +244 -7
  421. package/dist/testing/e2e-helpers.js.map +1 -1
  422. package/dist/testing/index.d.ts +1 -1
  423. package/dist/testing/index.d.ts.map +1 -1
  424. package/dist/testing/index.js +1 -1
  425. package/dist/testing/index.js.map +1 -1
  426. package/dist/types/account.d.ts +1 -1
  427. package/dist/types/campaign.d.ts +1 -1
  428. package/dist/types/campaign.d.ts.map +1 -1
  429. package/dist/types/feed.d.ts +1 -3
  430. package/dist/types/feed.d.ts.map +1 -1
  431. package/dist/types/index.d.ts +0 -1
  432. package/dist/types/index.d.ts.map +1 -1
  433. package/dist/utils/cdp-port.d.ts.map +1 -1
  434. package/dist/utils/cdp-port.js +3 -1
  435. package/dist/utils/cdp-port.js.map +1 -1
  436. package/dist/utils/cdp-port.test.js +1 -1
  437. package/dist/utils/cdp-port.test.js.map +1 -1
  438. package/dist/utils/delay.d.ts +79 -0
  439. package/dist/utils/delay.d.ts.map +1 -1
  440. package/dist/utils/delay.js +118 -0
  441. package/dist/utils/delay.js.map +1 -1
  442. package/dist/utils/delay.test.js +111 -1
  443. package/dist/utils/delay.test.js.map +1 -1
  444. package/dist/utils/index.d.ts +2 -1
  445. package/dist/utils/index.d.ts.map +1 -1
  446. package/dist/utils/index.js +2 -1
  447. package/dist/utils/index.js.map +1 -1
  448. package/dist/utils/session-pacer.d.ts +27 -0
  449. package/dist/utils/session-pacer.d.ts.map +1 -0
  450. package/dist/utils/session-pacer.js +55 -0
  451. package/dist/utils/session-pacer.js.map +1 -0
  452. package/dist/utils/session-pacer.test.d.ts +2 -0
  453. package/dist/utils/session-pacer.test.d.ts.map +1 -0
  454. package/dist/utils/session-pacer.test.js +111 -0
  455. package/dist/utils/session-pacer.test.js.map +1 -0
  456. package/package.json +1 -1
  457. package/dist/linkedin/__tests__/selectors.integration.test.d.ts +0 -2
  458. package/dist/linkedin/__tests__/selectors.integration.test.d.ts.map +0 -1
  459. package/dist/linkedin/__tests__/selectors.integration.test.js +0 -258
  460. package/dist/linkedin/__tests__/selectors.integration.test.js.map +0 -1
  461. package/dist/types/search-posts.d.ts +0 -22
  462. package/dist/types/search-posts.d.ts.map +0 -1
  463. package/dist/types/search-posts.js +0 -4
  464. package/dist/types/search-posts.js.map +0 -1
  465. package/dist/voyager/index.d.ts +0 -2
  466. package/dist/voyager/index.d.ts.map +0 -1
  467. package/dist/voyager/index.js +0 -4
  468. package/dist/voyager/index.js.map +0 -1
  469. package/dist/voyager/interceptor.d.ts +0 -100
  470. package/dist/voyager/interceptor.d.ts.map +0 -1
  471. package/dist/voyager/interceptor.integration.test.d.ts +0 -2
  472. package/dist/voyager/interceptor.integration.test.d.ts.map +0 -1
  473. package/dist/voyager/interceptor.integration.test.js +0 -89
  474. package/dist/voyager/interceptor.integration.test.js.map +0 -1
  475. package/dist/voyager/interceptor.js +0 -235
  476. package/dist/voyager/interceptor.js.map +0 -1
  477. package/dist/voyager/interceptor.test.d.ts +0 -2
  478. package/dist/voyager/interceptor.test.d.ts.map +0 -1
  479. package/dist/voyager/interceptor.test.js +0 -372
  480. package/dist/voyager/interceptor.test.js.map +0 -1
@@ -7,6 +7,12 @@ import type { Account, InstanceIssue, InstanceStatus, PopupState, UIHealthStatus
7
7
  * methods to start/stop instances and query accounts.
8
8
  */
9
9
  export declare class LauncherService {
10
+ /**
11
+ * CDP expression snippet that waits for the webpack module registry
12
+ * and sets `wpRequire` in the enclosing scope. Callers must check
13
+ * `wpRequire` for null and handle the failure case themselves.
14
+ */
15
+ private static readonly WEBPACK_INIT;
10
16
  private readonly port;
11
17
  private readonly host;
12
18
  private readonly allowRemote;
@@ -29,6 +35,16 @@ export declare class LauncherService {
29
35
  /**
30
36
  * Start a LinkedHelper instance for the given account.
31
37
  *
38
+ * Replicates the data-fetching sequence that the LinkedHelper UI
39
+ * performs before calling `mainWindow.startInstance()`:
40
+ *
41
+ * 1. Resolve renderer-side services via the webpack module registry.
42
+ * 2. Refetch the full account object (with license, proxy, instance data).
43
+ * 3. Read `userId` from the auth service and user profile from the user service.
44
+ * 4. Fetch `frontendSettings` from the frontend-settings service.
45
+ * 5. Transform the license into the format expected by the instance.
46
+ * 6. Call `startInstance` with all populated fields.
47
+ *
32
48
  * @throws {StartInstanceError} if the instance fails to start.
33
49
  */
34
50
  startInstance(accountId: number): Promise<void>;
@@ -41,10 +57,13 @@ export declare class LauncherService {
41
57
  */
42
58
  getInstanceStatus(accountId: number): Promise<InstanceStatus>;
43
59
  /**
44
- * List all accounts configured in the LinkedHelper Electron store.
60
+ * List all accounts configured in LinkedHelper.
45
61
  *
46
- * Accounts are discovered from the `linkedInPasswords` store key whose
47
- * entries use the format `userId:li:accountId`.
62
+ * Accounts are read from the renderer-side webpack service cache
63
+ * (`runningLiAccountsService.extendedLinkedInAccountsBS`). The
64
+ * launcher populates this cache on startup via IPC; we poll until
65
+ * it becomes available rather than calling `refetchLinkedInAccounts`
66
+ * (whose backend API now rejects the old embed format with 400).
48
67
  */
49
68
  listAccounts(): Promise<Account[]>;
50
69
  /**
@@ -70,6 +89,31 @@ export declare class LauncherService {
70
89
  * dismissable popup was present.
71
90
  */
72
91
  dismissPopup(): Promise<boolean>;
92
+ /**
93
+ * Dismiss an active dialog issue on a LinkedHelper instance.
94
+ *
95
+ * Dialogs appear as "issues" on the instance (e.g. when the launcher
96
+ * sends a close command). Each dialog exposes one or more control
97
+ * buttons identified by `buttonId`. This method programmatically
98
+ * clicks the specified button to dismiss the dialog.
99
+ *
100
+ * @param liId LinkedIn account ID that owns the instance.
101
+ * @param dialogId The dialog issue ID (from {@link InstanceIssue}).
102
+ * @param buttonId The control button ID to click (from `DialogIssueData.options.controls[].id`).
103
+ */
104
+ dismissInstanceDialog(liId: number, dialogId: string, buttonId: string): Promise<void>;
105
+ /**
106
+ * Stop a running instance, automatically dismissing the confirmation
107
+ * dialog that LinkedHelper may show.
108
+ *
109
+ * Calls {@link stopInstance}, then polls {@link getInstanceIssues} at
110
+ * 500 ms intervals for up to 10 s. When a dialog issue appears, its
111
+ * first control button is clicked via {@link dismissInstanceDialog}.
112
+ * If no dialog surfaces within the timeout the method returns normally.
113
+ *
114
+ * @param liId LinkedIn account ID that owns the instance.
115
+ */
116
+ stopInstanceWithDialogDismissal(liId: number): Promise<void>;
73
117
  /**
74
118
  * Check the overall UI health of a LinkedHelper instance.
75
119
  *
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,UAAU,EAEV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAU3B;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAqB;gBAGxC,IAAI,GAAE,MAAyB,EAC/B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrD;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoBnE;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAmCxC;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAwB/D;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAoBjD;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBtC;;;;;OAKG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW1D,kEAAkE;IAClE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,CAAC,eAAe;YAOT,gBAAgB;IAQ9B;;;;;;;;;;;;;OAaG;YACW,oBAAoB;CAsDnC"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,UAAU,EAEV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAU3B;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAU/B;IAEL,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAqB;gBAGxC,IAAI,GAAE,MAAyB,EAC/B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;;;;;;;;;;;OAcG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmGrD;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoBnE;;;;;;;;OAQG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAyCxC;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAwB/D;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAoBjD;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBtC;;;;;;;;;;;OAWG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;;;;;;OAUG;IACG,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlE;;;;;OAKG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW1D,kEAAkE;IAClE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,CAAC,eAAe;YAOT,gBAAgB;IAQ9B;;;;;;;;;;;;;OAaG;YACW,oBAAoB;CAsDnC"}
@@ -11,6 +11,22 @@ import { LinkedHelperNotRunningError, LinkedHelperUnreachableError, NodeIntegrat
11
11
  * methods to start/stop instances and query accounts.
12
12
  */
13
13
  export class LauncherService {
14
+ /**
15
+ * CDP expression snippet that waits for the webpack module registry
16
+ * and sets `wpRequire` in the enclosing scope. Callers must check
17
+ * `wpRequire` for null and handle the failure case themselves.
18
+ */
19
+ static WEBPACK_INIT = `
20
+ const _wpDeadline = Date.now() + 15000;
21
+ while (!window.webpackChunk_linked_helper_front && Date.now() < _wpDeadline) {
22
+ await new Promise(r => setTimeout(r, 250));
23
+ }
24
+ let wpRequire = null;
25
+ if (window.webpackChunk_linked_helper_front) {
26
+ window.webpackChunk_linked_helper_front.push(
27
+ [[Symbol()], {}, (req) => { wpRequire = req; }]
28
+ );
29
+ }`;
14
30
  port;
15
31
  host;
16
32
  allowRemote;
@@ -41,8 +57,29 @@ export class LauncherService {
41
57
  }
42
58
  throw error;
43
59
  }
60
+ let nodeContextId;
61
+ try {
62
+ nodeContextId = await this.resolveNodeContextId(client);
63
+ }
64
+ catch {
65
+ // No Node.js context — likely a LinkedIn page on the instance port.
66
+ client.disconnect();
67
+ throw new WrongPortError(this.port);
68
+ }
69
+ // Validate that the target is the launcher (has electronStore),
70
+ // not an instance UI page that happens to have Node.js access.
71
+ const isLauncher = await client.evaluate(`(() => {
72
+ try {
73
+ const r = require('@electron/remote');
74
+ return typeof r.getGlobal('mainWindow')?.electronStore?.get === 'function';
75
+ } catch { return false; }
76
+ })()`, false, nodeContextId);
77
+ if (!isLauncher) {
78
+ client.disconnect();
79
+ throw new WrongPortError(this.port);
80
+ }
44
81
  this.client = client;
45
- this.nodeContextId = await this.resolveNodeContextId(client);
82
+ this.nodeContextId = nodeContextId;
46
83
  }
47
84
  /**
48
85
  * Disconnect from the launcher.
@@ -55,6 +92,16 @@ export class LauncherService {
55
92
  /**
56
93
  * Start a LinkedHelper instance for the given account.
57
94
  *
95
+ * Replicates the data-fetching sequence that the LinkedHelper UI
96
+ * performs before calling `mainWindow.startInstance()`:
97
+ *
98
+ * 1. Resolve renderer-side services via the webpack module registry.
99
+ * 2. Refetch the full account object (with license, proxy, instance data).
100
+ * 3. Read `userId` from the auth service and user profile from the user service.
101
+ * 4. Fetch `frontendSettings` from the frontend-settings service.
102
+ * 5. Transform the license into the format expected by the instance.
103
+ * 6. Call `startInstance` with all populated fields.
104
+ *
58
105
  * @throws {StartInstanceError} if the instance fails to start.
59
106
  */
60
107
  async startInstance(accountId) {
@@ -63,15 +110,79 @@ export class LauncherService {
63
110
  try {
64
111
  const remote = require('@electron/remote');
65
112
  const mainWindow = remote.getGlobal('mainWindow');
113
+
114
+ ${LauncherService.WEBPACK_INIT}
115
+ if (!wpRequire) {
116
+ return { success: false, error: 'webpack module registry not available' };
117
+ }
118
+
119
+ const authService = wpRequire(2742).authService;
120
+ const userService = wpRequire(75381).userService;
121
+ const liAccountsSvc = wpRequire(44354).runningLiAccountsService;
122
+ const feSettingsSvc = wpRequire(81954).frontendSettingsService;
123
+
124
+ // 2. Get the account object from the service cache.
125
+ // Using refetch: false because the LH backend API now
126
+ // rejects the embed format used by refetchLinkedInAccounts.
127
+ // The cache is populated by the launcher on startup, but
128
+ // may not be ready immediately — poll until available.
129
+ let account = null;
130
+ const cacheDeadline = Date.now() + 30000;
131
+ while (Date.now() < cacheDeadline) {
132
+ try {
133
+ account = await liAccountsSvc.getLinkedInAccount({
134
+ id: ${String(accountId)},
135
+ refetch: false,
136
+ });
137
+ break;
138
+ } catch {
139
+ await new Promise(r => setTimeout(r, 500));
140
+ }
141
+ }
142
+ if (!account) {
143
+ return { success: false, error: 'Account not found in cache after 30s' };
144
+ }
145
+
146
+ // 3. Read userId and user profile
147
+ const userId = authService.userId;
148
+ const currentUser = userService.currentUserBS?.value
149
+ ?? await userService.fetchUser(userId);
150
+
151
+ // 4. Fetch frontend settings
152
+ const frontendSettings = await feSettingsSvc.getFrontendSettings();
153
+
154
+ // 5. Transform the license
155
+ let license = null;
156
+ if (account.license) {
157
+ const lic = account.license;
158
+ const ownerUid = lic.organizationId
159
+ ? 'lh2:org:' + lic.organizationId
160
+ : 'lh2:user:' + (lic.userId ?? userId);
161
+ license = {
162
+ id: lic.id,
163
+ ownerUid: ownerUid,
164
+ days: lic.days,
165
+ expireAt: lic.expireAt,
166
+ featureSet: lic.featureSet,
167
+ subscriptionId: lic.subscriptionId,
168
+ addedExpiryTimeAsSubscriptionGracePeriodMs:
169
+ lic.addedExpiryTimeAsSubscriptionGracePeriodMs,
170
+ };
171
+ }
172
+
173
+ // 6. Call startInstance with all populated fields
66
174
  await mainWindow.startInstance({
67
- linkedInAccount: { id: ${String(accountId)}, liId: ${String(accountId)} },
68
- accountData: { id: ${String(accountId)}, liId: ${String(accountId)} },
69
- instanceId: 1,
70
- proxy: null,
71
- license: null,
72
- userId: null,
73
- frontendSettings: {},
74
- lhAccount: {},
175
+ linkedInAccount: account,
176
+ instanceId: account.instance?.[0]?.id,
177
+ proxy: account.proxy ?? null,
178
+ license: license,
179
+ userId: userId,
180
+ frontendSettings: frontendSettings ?? {},
181
+ lhAccount: {
182
+ email: currentUser?.email ?? '',
183
+ fullName: [currentUser?.firstName, currentUser?.lastName]
184
+ .filter(Boolean).join(' '),
185
+ },
75
186
  zoomDefault: 0.9,
76
187
  shouldBringToFront: true,
77
188
  shouldStartRunningCampaigns: false,
@@ -114,34 +225,42 @@ export class LauncherService {
114
225
  return status;
115
226
  }
116
227
  /**
117
- * List all accounts configured in the LinkedHelper Electron store.
228
+ * List all accounts configured in LinkedHelper.
118
229
  *
119
- * Accounts are discovered from the `linkedInPasswords` store key whose
120
- * entries use the format `userId:li:accountId`.
230
+ * Accounts are read from the renderer-side webpack service cache
231
+ * (`runningLiAccountsService.extendedLinkedInAccountsBS`). The
232
+ * launcher populates this cache on startup via IPC; we poll until
233
+ * it becomes available rather than calling `refetchLinkedInAccounts`
234
+ * (whose backend API now rejects the old embed format with 400).
121
235
  */
122
236
  async listAccounts() {
123
237
  const client = this.ensureConnected();
124
- const accounts = await this.launcherEvaluate(client, `(() => {
125
- const remote = require('@electron/remote');
126
- const mainWindow = remote.getGlobal('mainWindow');
127
- const store = mainWindow?.electronStore;
128
- if (!store) return null;
129
- const passwords = store.get('linkedInPasswords') ?? {};
130
- return Object.keys(passwords)
131
- .map(k => {
132
- const parts = k.split(':li:');
133
- if (parts.length !== 2) return null;
134
- const accountId = Number(parts[1]);
135
- if (Number.isNaN(accountId)) return null;
136
- return {
137
- id: accountId,
138
- liId: accountId,
139
- name: '',
140
- email: undefined,
141
- };
142
- })
143
- .filter(a => a !== null);
144
- })()`);
238
+ const accounts = await this.launcherEvaluate(client, `(async () => {
239
+ ${LauncherService.WEBPACK_INIT}
240
+ if (!wpRequire) return null;
241
+
242
+ const svc = wpRequire(44354).runningLiAccountsService;
243
+
244
+ // Poll until the cache is populated by the launcher's startup
245
+ // process (same pattern as startInstance's account polling).
246
+ const cacheDeadline = Date.now() + 30000;
247
+ while (Date.now() < cacheDeadline) {
248
+ const raw = svc.extendedLinkedInAccountsBS?.value;
249
+ if (raw) {
250
+ const entries = Array.isArray(raw) ? raw : Object.values(raw);
251
+ if (entries.length > 0) {
252
+ return entries.map(a => ({
253
+ id: a.id,
254
+ liId: a.id,
255
+ name: a.fullName ?? '',
256
+ email: a.email ?? undefined,
257
+ }));
258
+ }
259
+ }
260
+ await new Promise(r => setTimeout(r, 500));
261
+ }
262
+ return [];
263
+ })()`, true);
145
264
  if (accounts === null) {
146
265
  throw new WrongPortError(this.port);
147
266
  }
@@ -211,6 +330,59 @@ export class LauncherService {
211
330
  return true;
212
331
  })()`);
213
332
  }
333
+ /**
334
+ * Dismiss an active dialog issue on a LinkedHelper instance.
335
+ *
336
+ * Dialogs appear as "issues" on the instance (e.g. when the launcher
337
+ * sends a close command). Each dialog exposes one or more control
338
+ * buttons identified by `buttonId`. This method programmatically
339
+ * clicks the specified button to dismiss the dialog.
340
+ *
341
+ * @param liId LinkedIn account ID that owns the instance.
342
+ * @param dialogId The dialog issue ID (from {@link InstanceIssue}).
343
+ * @param buttonId The control button ID to click (from `DialogIssueData.options.controls[].id`).
344
+ */
345
+ async dismissInstanceDialog(liId, dialogId, buttonId) {
346
+ const client = this.ensureConnected();
347
+ await this.launcherEvaluate(client, `(async () => {
348
+ const remote = require('@electron/remote');
349
+ const mainWindow = remote.getGlobal('mainWindow');
350
+ return await mainWindow.instanceManager.closeInstanceDialog(
351
+ ${String(liId)},
352
+ ${JSON.stringify(dialogId)},
353
+ { buttonId: ${JSON.stringify(buttonId)} }
354
+ );
355
+ })()`, true);
356
+ }
357
+ /**
358
+ * Stop a running instance, automatically dismissing the confirmation
359
+ * dialog that LinkedHelper may show.
360
+ *
361
+ * Calls {@link stopInstance}, then polls {@link getInstanceIssues} at
362
+ * 500 ms intervals for up to 10 s. When a dialog issue appears, its
363
+ * first control button is clicked via {@link dismissInstanceDialog}.
364
+ * If no dialog surfaces within the timeout the method returns normally.
365
+ *
366
+ * @param liId LinkedIn account ID that owns the instance.
367
+ */
368
+ async stopInstanceWithDialogDismissal(liId) {
369
+ await this.stopInstance(liId);
370
+ const POLL_INTERVAL = 500;
371
+ const POLL_TIMEOUT = 10_000;
372
+ const deadline = Date.now() + POLL_TIMEOUT;
373
+ while (Date.now() < deadline) {
374
+ const issues = await this.getInstanceIssues(liId);
375
+ const dialog = issues.find((i) => i.type === "dialog");
376
+ if (dialog) {
377
+ const firstControl = dialog.data.options.controls[0];
378
+ if (firstControl) {
379
+ await this.dismissInstanceDialog(liId, dialog.id, firstControl.id);
380
+ }
381
+ return;
382
+ }
383
+ await new Promise((r) => setTimeout(r, POLL_INTERVAL));
384
+ }
385
+ }
214
386
  /**
215
387
  * Check the overall UI health of a LinkedHelper instance.
216
388
  *
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright (C) 2026 Oleksii PELYKH
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
- import { LinkedHelperNotRunningError, NodeIntegrationUnavailableError, ServiceError, StartInstanceError, WrongPortError, } from "./errors.js";
4
+ import { LinkedHelperNotRunningError, ServiceError, StartInstanceError, WrongPortError, } from "./errors.js";
5
5
  import { LauncherService } from "./launcher.js";
6
6
  /**
7
7
  * Shared CDPClient mocks — LauncherService creates exactly one CDPClient,
@@ -46,12 +46,16 @@ describe("LauncherService", () => {
46
46
  service = new LauncherService(9222);
47
47
  mockConnect.mockResolvedValue(undefined);
48
48
  nextEvaluateResult = undefined;
49
- // Default: require is available in the default context.
50
- // The probe call returns true; all other calls return nextEvaluateResult.
49
+ // Default: require is available in the default context, and the
50
+ // launcher validation (electronStore probe) succeeds.
51
+ // All other calls return nextEvaluateResult.
51
52
  mockEvaluate.mockImplementation((expression) => {
52
53
  if (expression === "typeof require === 'function'") {
53
54
  return Promise.resolve(true);
54
55
  }
56
+ if (expression.includes("electronStore?.get")) {
57
+ return Promise.resolve(true);
58
+ }
55
59
  return Promise.resolve(nextEvaluateResult);
56
60
  });
57
61
  });
@@ -73,6 +77,19 @@ describe("LauncherService", () => {
73
77
  mockConnect.mockRejectedValue(new TypeError("unexpected"));
74
78
  await expect(service.connect()).rejects.toThrow(TypeError);
75
79
  });
80
+ it("throws WrongPortError when electronStore validation fails", async () => {
81
+ mockEvaluate.mockImplementation((expression) => {
82
+ if (expression === "typeof require === 'function'") {
83
+ return Promise.resolve(true);
84
+ }
85
+ if (expression.includes("electronStore?.get")) {
86
+ return Promise.resolve(false);
87
+ }
88
+ return Promise.resolve(undefined);
89
+ });
90
+ await expect(service.connect()).rejects.toThrow(WrongPortError);
91
+ expect(mockDisconnect).toHaveBeenCalled();
92
+ });
76
93
  });
77
94
  describe("connect with context fallback", () => {
78
95
  it("falls back to preload context when default lacks require", async () => {
@@ -84,6 +101,9 @@ describe("LauncherService", () => {
84
101
  // Second probe (preload context id=2): has require
85
102
  return Promise.resolve(probeCount >= 2 && contextId === 2);
86
103
  }
104
+ if (expression.includes("electronStore?.get")) {
105
+ return Promise.resolve(true);
106
+ }
87
107
  return Promise.resolve(undefined);
88
108
  });
89
109
  mockOn.mockImplementation((event, handler) => {
@@ -98,7 +118,7 @@ describe("LauncherService", () => {
98
118
  expect(mockSend).toHaveBeenCalledWith("Runtime.enable");
99
119
  expect(mockSend).toHaveBeenCalledWith("Runtime.disable");
100
120
  });
101
- it("throws NodeIntegrationUnavailableError when no context has require", async () => {
121
+ it("throws WrongPortError when no context has require (instance port)", async () => {
102
122
  mockEvaluate.mockImplementation((expression) => {
103
123
  if (expression === "typeof require === 'function'") {
104
124
  return Promise.resolve(false);
@@ -112,7 +132,8 @@ describe("LauncherService", () => {
112
132
  }
113
133
  });
114
134
  mockSend.mockResolvedValue(undefined);
115
- await expect(service.connect()).rejects.toThrow(NodeIntegrationUnavailableError);
135
+ await expect(service.connect()).rejects.toThrow(WrongPortError);
136
+ expect(mockDisconnect).toHaveBeenCalled();
116
137
  });
117
138
  it("uses preload context for subsequent evaluations", async () => {
118
139
  const PRELOAD_CONTEXT_ID = 42;
@@ -122,6 +143,9 @@ describe("LauncherService", () => {
122
143
  probeCount++;
123
144
  return Promise.resolve(probeCount >= 2 && contextId === PRELOAD_CONTEXT_ID);
124
145
  }
146
+ if (expression.includes("electronStore?.get")) {
147
+ return Promise.resolve(true);
148
+ }
125
149
  return Promise.resolve(nextEvaluateResult);
126
150
  });
127
151
  mockOn.mockImplementation((event, handler) => {
@@ -223,11 +247,114 @@ describe("LauncherService", () => {
223
247
  });
224
248
  await expect(service.listAccounts()).rejects.toThrow(CDPEvaluationError);
225
249
  });
226
- it("throws WrongPortError when electronStore is not available", async () => {
250
+ it("throws WrongPortError when webpack is not available", async () => {
227
251
  await service.connect();
228
252
  nextEvaluateResult = null;
229
253
  await expect(service.listAccounts()).rejects.toThrow(WrongPortError);
230
254
  });
255
+ it("passes awaitPromise=true for the async expression", async () => {
256
+ await service.connect();
257
+ nextEvaluateResult = [];
258
+ await service.listAccounts();
259
+ const listCall = mockEvaluate.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("extendedLinkedInAccountsBS"));
260
+ expect(listCall).toBeDefined();
261
+ expect(listCall?.[1]).toBe(true);
262
+ });
263
+ });
264
+ describe("dismissInstanceDialog", () => {
265
+ it("evaluates the closeInstanceDialog expression", async () => {
266
+ await service.connect();
267
+ await service.dismissInstanceDialog(42, "dlg-1", "btn-ok");
268
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("closeInstanceDialog"), true, undefined);
269
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("42"), true, undefined);
270
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining('"dlg-1"'), true, undefined);
271
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining('"btn-ok"'), true, undefined);
272
+ });
273
+ it("throws ServiceError when not connected", async () => {
274
+ await expect(service.dismissInstanceDialog(42, "dlg-1", "btn-ok")).rejects.toThrow(ServiceError);
275
+ });
276
+ });
277
+ describe("stopInstanceWithDialogDismissal", () => {
278
+ it("calls stopInstance then polls and dismisses a dialog", async () => {
279
+ await service.connect();
280
+ let pollCount = 0;
281
+ mockEvaluate.mockImplementation((expression) => {
282
+ if (expression === "typeof require === 'function'") {
283
+ return Promise.resolve(true);
284
+ }
285
+ if (expression.includes("electronStore?.get")) {
286
+ return Promise.resolve(true);
287
+ }
288
+ // stopInstance call
289
+ if (expression.includes("stopInstance")) {
290
+ return Promise.resolve(undefined);
291
+ }
292
+ // getInstanceIssues — return a dialog on the second poll
293
+ if (expression.includes("issues?.items")) {
294
+ pollCount++;
295
+ if (pollCount >= 2) {
296
+ return Promise.resolve([
297
+ {
298
+ type: "dialog",
299
+ id: "dlg-close",
300
+ data: {
301
+ id: "dlg-close",
302
+ options: {
303
+ message: "Are you sure?",
304
+ controls: [{ id: "btn-yes", text: "Yes" }],
305
+ },
306
+ },
307
+ },
308
+ ]);
309
+ }
310
+ return Promise.resolve([]);
311
+ }
312
+ // dismissInstanceDialog call
313
+ if (expression.includes("closeInstanceDialog")) {
314
+ return Promise.resolve(undefined);
315
+ }
316
+ return Promise.resolve(undefined);
317
+ });
318
+ await service.stopInstanceWithDialogDismissal(42);
319
+ // Verify stopInstance was called
320
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("stopInstance"), true, undefined);
321
+ // Verify dismissInstanceDialog was called with the dialog's first button
322
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("closeInstanceDialog"), true, undefined);
323
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining('"dlg-close"'), true, undefined);
324
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining('"btn-yes"'), true, undefined);
325
+ });
326
+ it("returns normally when no dialog appears within timeout", async () => {
327
+ await service.connect();
328
+ mockEvaluate.mockImplementation((expression) => {
329
+ if (expression === "typeof require === 'function'") {
330
+ return Promise.resolve(true);
331
+ }
332
+ if (expression.includes("electronStore?.get")) {
333
+ return Promise.resolve(true);
334
+ }
335
+ if (expression.includes("stopInstance")) {
336
+ return Promise.resolve(undefined);
337
+ }
338
+ // Always return empty issues
339
+ if (expression.includes("issues?.items")) {
340
+ return Promise.resolve([]);
341
+ }
342
+ return Promise.resolve(undefined);
343
+ });
344
+ // Use fake timers to avoid waiting 10s
345
+ vi.useFakeTimers();
346
+ const promise = service.stopInstanceWithDialogDismissal(42);
347
+ // Advance past the polling timeout
348
+ await vi.advanceTimersByTimeAsync(11_000);
349
+ await promise;
350
+ vi.useRealTimers();
351
+ // Verify stopInstance was called but dismissInstanceDialog was not
352
+ expect(mockEvaluate).toHaveBeenCalledWith(expect.stringContaining("stopInstance"), true, undefined);
353
+ expect(mockEvaluate).not.toHaveBeenCalledWith(expect.stringContaining("closeInstanceDialog"), expect.anything(), expect.anything());
354
+ });
355
+ it("throws ServiceError when not connected", async () => {
356
+ await expect(service.stopInstanceWithDialogDismissal(42)).rejects.toThrow(ServiceError);
357
+ });
231
358
  });
232
359
  });
233
360
  //# sourceMappingURL=launcher.test.js.map