@lhremote/cli 0.7.0 → 0.9.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 (308) hide show
  1. package/dist/handlers/add-people-to-collection.d.ts.map +1 -1
  2. package/dist/handlers/add-people-to-collection.js +2 -2
  3. package/dist/handlers/add-people-to-collection.js.map +1 -1
  4. package/dist/handlers/build-url.test.d.ts +2 -0
  5. package/dist/handlers/build-url.test.d.ts.map +1 -0
  6. package/dist/handlers/build-url.test.js +119 -0
  7. package/dist/handlers/build-url.test.js.map +1 -0
  8. package/dist/handlers/campaign-add-action.d.ts.map +1 -1
  9. package/dist/handlers/campaign-add-action.js +2 -2
  10. package/dist/handlers/campaign-add-action.js.map +1 -1
  11. package/dist/handlers/campaign-create.d.ts.map +1 -1
  12. package/dist/handlers/campaign-create.js +2 -2
  13. package/dist/handlers/campaign-create.js.map +1 -1
  14. package/dist/handlers/campaign-delete.d.ts +1 -0
  15. package/dist/handlers/campaign-delete.d.ts.map +1 -1
  16. package/dist/handlers/campaign-delete.js +5 -3
  17. package/dist/handlers/campaign-delete.js.map +1 -1
  18. package/dist/handlers/campaign-delete.test.js +25 -0
  19. package/dist/handlers/campaign-delete.test.js.map +1 -1
  20. package/dist/handlers/campaign-erase.d.ts +8 -0
  21. package/dist/handlers/campaign-erase.d.ts.map +1 -0
  22. package/dist/handlers/campaign-erase.js +39 -0
  23. package/dist/handlers/campaign-erase.js.map +1 -0
  24. package/dist/handlers/campaign-erase.test.d.ts +2 -0
  25. package/dist/handlers/campaign-erase.test.d.ts.map +1 -0
  26. package/dist/handlers/campaign-erase.test.js +71 -0
  27. package/dist/handlers/campaign-erase.test.js.map +1 -0
  28. package/dist/handlers/campaign-exclude-add.d.ts.map +1 -1
  29. package/dist/handlers/campaign-exclude-add.js +2 -2
  30. package/dist/handlers/campaign-exclude-add.js.map +1 -1
  31. package/dist/handlers/campaign-exclude-list.d.ts.map +1 -1
  32. package/dist/handlers/campaign-exclude-list.js +2 -2
  33. package/dist/handlers/campaign-exclude-list.js.map +1 -1
  34. package/dist/handlers/campaign-exclude-remove.d.ts.map +1 -1
  35. package/dist/handlers/campaign-exclude-remove.js +2 -2
  36. package/dist/handlers/campaign-exclude-remove.js.map +1 -1
  37. package/dist/handlers/campaign-export.d.ts.map +1 -1
  38. package/dist/handlers/campaign-export.js +2 -2
  39. package/dist/handlers/campaign-export.js.map +1 -1
  40. package/dist/handlers/campaign-get.d.ts.map +1 -1
  41. package/dist/handlers/campaign-get.js +2 -2
  42. package/dist/handlers/campaign-get.js.map +1 -1
  43. package/dist/handlers/campaign-list-people.d.ts.map +1 -1
  44. package/dist/handlers/campaign-list-people.js +2 -2
  45. package/dist/handlers/campaign-list-people.js.map +1 -1
  46. package/dist/handlers/campaign-move-next.d.ts.map +1 -1
  47. package/dist/handlers/campaign-move-next.js +2 -2
  48. package/dist/handlers/campaign-move-next.js.map +1 -1
  49. package/dist/handlers/campaign-remove-action.d.ts.map +1 -1
  50. package/dist/handlers/campaign-remove-action.js +2 -2
  51. package/dist/handlers/campaign-remove-action.js.map +1 -1
  52. package/dist/handlers/campaign-remove-people.d.ts.map +1 -1
  53. package/dist/handlers/campaign-remove-people.js +2 -2
  54. package/dist/handlers/campaign-remove-people.js.map +1 -1
  55. package/dist/handlers/campaign-reorder-actions.d.ts.map +1 -1
  56. package/dist/handlers/campaign-reorder-actions.js +2 -2
  57. package/dist/handlers/campaign-reorder-actions.js.map +1 -1
  58. package/dist/handlers/campaign-retry.d.ts.map +1 -1
  59. package/dist/handlers/campaign-retry.js +2 -2
  60. package/dist/handlers/campaign-retry.js.map +1 -1
  61. package/dist/handlers/campaign-start.d.ts.map +1 -1
  62. package/dist/handlers/campaign-start.js +2 -2
  63. package/dist/handlers/campaign-start.js.map +1 -1
  64. package/dist/handlers/campaign-statistics.d.ts.map +1 -1
  65. package/dist/handlers/campaign-statistics.js +2 -2
  66. package/dist/handlers/campaign-statistics.js.map +1 -1
  67. package/dist/handlers/campaign-status.d.ts.map +1 -1
  68. package/dist/handlers/campaign-status.js +2 -2
  69. package/dist/handlers/campaign-status.js.map +1 -1
  70. package/dist/handlers/campaign-stop.d.ts.map +1 -1
  71. package/dist/handlers/campaign-stop.js +2 -2
  72. package/dist/handlers/campaign-stop.js.map +1 -1
  73. package/dist/handlers/campaign-update-action.d.ts.map +1 -1
  74. package/dist/handlers/campaign-update-action.js +2 -2
  75. package/dist/handlers/campaign-update-action.js.map +1 -1
  76. package/dist/handlers/campaign-update.d.ts.map +1 -1
  77. package/dist/handlers/campaign-update.js +2 -2
  78. package/dist/handlers/campaign-update.js.map +1 -1
  79. package/dist/handlers/check-replies.d.ts +2 -0
  80. package/dist/handlers/check-replies.d.ts.map +1 -1
  81. package/dist/handlers/check-replies.js +9 -2
  82. package/dist/handlers/check-replies.js.map +1 -1
  83. package/dist/handlers/check-replies.test.js +25 -8
  84. package/dist/handlers/check-replies.test.js.map +1 -1
  85. package/dist/handlers/check-status.d.ts.map +1 -1
  86. package/dist/handlers/check-status.js +6 -6
  87. package/dist/handlers/check-status.js.map +1 -1
  88. package/dist/handlers/collect-people.d.ts.map +1 -1
  89. package/dist/handlers/collect-people.js +2 -2
  90. package/dist/handlers/collect-people.js.map +1 -1
  91. package/dist/handlers/comment-on-post.d.ts +10 -0
  92. package/dist/handlers/comment-on-post.d.ts.map +1 -0
  93. package/dist/handlers/comment-on-post.js +37 -0
  94. package/dist/handlers/comment-on-post.js.map +1 -0
  95. package/dist/handlers/comment-on-post.test.d.ts +2 -0
  96. package/dist/handlers/comment-on-post.test.d.ts.map +1 -0
  97. package/dist/handlers/comment-on-post.test.js +75 -0
  98. package/dist/handlers/comment-on-post.test.js.map +1 -0
  99. package/dist/handlers/create-collection.d.ts.map +1 -1
  100. package/dist/handlers/create-collection.js +2 -2
  101. package/dist/handlers/create-collection.js.map +1 -1
  102. package/dist/handlers/delete-collection.d.ts.map +1 -1
  103. package/dist/handlers/delete-collection.js +2 -2
  104. package/dist/handlers/delete-collection.js.map +1 -1
  105. package/dist/handlers/dismiss-errors.d.ts +8 -0
  106. package/dist/handlers/dismiss-errors.d.ts.map +1 -0
  107. package/dist/handlers/dismiss-errors.js +28 -0
  108. package/dist/handlers/dismiss-errors.js.map +1 -0
  109. package/dist/handlers/dismiss-errors.test.d.ts +2 -0
  110. package/dist/handlers/dismiss-errors.test.d.ts.map +1 -0
  111. package/dist/handlers/dismiss-errors.test.js +90 -0
  112. package/dist/handlers/dismiss-errors.test.js.map +1 -0
  113. package/dist/handlers/endorse-skills.d.ts +14 -0
  114. package/dist/handlers/endorse-skills.d.ts.map +1 -0
  115. package/dist/handlers/endorse-skills.js +44 -0
  116. package/dist/handlers/endorse-skills.js.map +1 -0
  117. package/dist/handlers/endorse-skills.test.d.ts +2 -0
  118. package/dist/handlers/endorse-skills.test.d.ts.map +1 -0
  119. package/dist/handlers/endorse-skills.test.js +65 -0
  120. package/dist/handlers/endorse-skills.test.js.map +1 -0
  121. package/dist/handlers/enrich-profile.d.ts +16 -0
  122. package/dist/handlers/enrich-profile.d.ts.map +1 -0
  123. package/dist/handlers/enrich-profile.js +51 -0
  124. package/dist/handlers/enrich-profile.js.map +1 -0
  125. package/dist/handlers/enrich-profile.test.d.ts +2 -0
  126. package/dist/handlers/enrich-profile.test.d.ts.map +1 -0
  127. package/dist/handlers/enrich-profile.test.js +65 -0
  128. package/dist/handlers/enrich-profile.test.js.map +1 -0
  129. package/dist/handlers/find-app.js +1 -1
  130. package/dist/handlers/find-app.js.map +1 -1
  131. package/dist/handlers/find-app.test.js +4 -4
  132. package/dist/handlers/find-app.test.js.map +1 -1
  133. package/dist/handlers/follow-person.d.ts +13 -0
  134. package/dist/handlers/follow-person.d.ts.map +1 -0
  135. package/dist/handlers/follow-person.js +45 -0
  136. package/dist/handlers/follow-person.js.map +1 -0
  137. package/dist/handlers/follow-person.test.d.ts +2 -0
  138. package/dist/handlers/follow-person.test.d.ts.map +1 -0
  139. package/dist/handlers/follow-person.test.js +65 -0
  140. package/dist/handlers/follow-person.test.js.map +1 -0
  141. package/dist/handlers/get-action-budget.d.ts +8 -0
  142. package/dist/handlers/get-action-budget.d.ts.map +1 -0
  143. package/dist/handlers/get-action-budget.js +46 -0
  144. package/dist/handlers/get-action-budget.js.map +1 -0
  145. package/dist/handlers/get-action-budget.test.d.ts +2 -0
  146. package/dist/handlers/get-action-budget.test.d.ts.map +1 -0
  147. package/dist/handlers/get-action-budget.test.js +69 -0
  148. package/dist/handlers/get-action-budget.test.js.map +1 -0
  149. package/dist/handlers/get-errors.d.ts.map +1 -1
  150. package/dist/handlers/get-errors.js +14 -2
  151. package/dist/handlers/get-errors.js.map +1 -1
  152. package/dist/handlers/get-errors.test.js +25 -0
  153. package/dist/handlers/get-errors.test.js.map +1 -1
  154. package/dist/handlers/get-feed.d.ts +10 -0
  155. package/dist/handlers/get-feed.d.ts.map +1 -0
  156. package/dist/handlers/get-feed.js +64 -0
  157. package/dist/handlers/get-feed.js.map +1 -0
  158. package/dist/handlers/get-feed.test.d.ts +2 -0
  159. package/dist/handlers/get-feed.test.d.ts.map +1 -0
  160. package/dist/handlers/get-feed.test.js +124 -0
  161. package/dist/handlers/get-feed.test.js.map +1 -0
  162. package/dist/handlers/get-post-stats.d.ts +8 -0
  163. package/dist/handlers/get-post-stats.d.ts.map +1 -0
  164. package/dist/handlers/get-post-stats.js +37 -0
  165. package/dist/handlers/get-post-stats.js.map +1 -0
  166. package/dist/handlers/get-post-stats.test.d.ts +2 -0
  167. package/dist/handlers/get-post-stats.test.d.ts.map +1 -0
  168. package/dist/handlers/get-post-stats.test.js +79 -0
  169. package/dist/handlers/get-post-stats.test.js.map +1 -0
  170. package/dist/handlers/get-post.d.ts +9 -0
  171. package/dist/handlers/get-post.d.ts.map +1 -0
  172. package/dist/handlers/get-post.js +65 -0
  173. package/dist/handlers/get-post.js.map +1 -0
  174. package/dist/handlers/get-post.test.d.ts +2 -0
  175. package/dist/handlers/get-post.test.d.ts.map +1 -0
  176. package/dist/handlers/get-post.test.js +124 -0
  177. package/dist/handlers/get-post.test.js.map +1 -0
  178. package/dist/handlers/get-profile-activity.d.ts +10 -0
  179. package/dist/handlers/get-profile-activity.d.ts.map +1 -0
  180. package/dist/handlers/get-profile-activity.js +60 -0
  181. package/dist/handlers/get-profile-activity.js.map +1 -0
  182. package/dist/handlers/get-profile-activity.test.d.ts +2 -0
  183. package/dist/handlers/get-profile-activity.test.d.ts.map +1 -0
  184. package/dist/handlers/get-profile-activity.test.js +127 -0
  185. package/dist/handlers/get-profile-activity.test.js.map +1 -0
  186. package/dist/handlers/get-throttle-status.d.ts +8 -0
  187. package/dist/handlers/get-throttle-status.d.ts.map +1 -0
  188. package/dist/handlers/get-throttle-status.js +33 -0
  189. package/dist/handlers/get-throttle-status.js.map +1 -0
  190. package/dist/handlers/get-throttle-status.test.d.ts +2 -0
  191. package/dist/handlers/get-throttle-status.test.d.ts.map +1 -0
  192. package/dist/handlers/get-throttle-status.test.js +65 -0
  193. package/dist/handlers/get-throttle-status.test.js.map +1 -0
  194. package/dist/handlers/import-people-from-collection.d.ts.map +1 -1
  195. package/dist/handlers/import-people-from-collection.js +2 -2
  196. package/dist/handlers/import-people-from-collection.js.map +1 -1
  197. package/dist/handlers/import-people-from-urls.d.ts.map +1 -1
  198. package/dist/handlers/import-people-from-urls.js +2 -2
  199. package/dist/handlers/import-people-from-urls.js.map +1 -1
  200. package/dist/handlers/index.d.ts +20 -0
  201. package/dist/handlers/index.d.ts.map +1 -1
  202. package/dist/handlers/index.js +20 -0
  203. package/dist/handlers/index.js.map +1 -1
  204. package/dist/handlers/like-person-posts.d.ts +18 -0
  205. package/dist/handlers/like-person-posts.d.ts.map +1 -0
  206. package/dist/handlers/like-person-posts.js +59 -0
  207. package/dist/handlers/like-person-posts.js.map +1 -0
  208. package/dist/handlers/like-person-posts.test.d.ts +2 -0
  209. package/dist/handlers/like-person-posts.test.d.ts.map +1 -0
  210. package/dist/handlers/like-person-posts.test.js +71 -0
  211. package/dist/handlers/like-person-posts.test.js.map +1 -0
  212. package/dist/handlers/list-accounts.d.ts.map +1 -1
  213. package/dist/handlers/list-accounts.js +12 -2
  214. package/dist/handlers/list-accounts.js.map +1 -1
  215. package/dist/handlers/list-accounts.test.js +3 -1
  216. package/dist/handlers/list-accounts.test.js.map +1 -1
  217. package/dist/handlers/list-reference-data.test.d.ts +2 -0
  218. package/dist/handlers/list-reference-data.test.d.ts.map +1 -0
  219. package/dist/handlers/list-reference-data.test.js +62 -0
  220. package/dist/handlers/list-reference-data.test.js.map +1 -0
  221. package/dist/handlers/message-person.d.ts +15 -0
  222. package/dist/handlers/message-person.d.ts.map +1 -0
  223. package/dist/handlers/message-person.js +65 -0
  224. package/dist/handlers/message-person.js.map +1 -0
  225. package/dist/handlers/message-person.test.d.ts +2 -0
  226. package/dist/handlers/message-person.test.d.ts.map +1 -0
  227. package/dist/handlers/message-person.test.js +77 -0
  228. package/dist/handlers/message-person.test.js.map +1 -0
  229. package/dist/handlers/query-messages.integration.test.js +24 -3
  230. package/dist/handlers/query-messages.integration.test.js.map +1 -1
  231. package/dist/handlers/react-to-post.d.ts +9 -0
  232. package/dist/handlers/react-to-post.d.ts.map +1 -0
  233. package/dist/handlers/react-to-post.js +30 -0
  234. package/dist/handlers/react-to-post.js.map +1 -0
  235. package/dist/handlers/react-to-post.test.d.ts +2 -0
  236. package/dist/handlers/react-to-post.test.d.ts.map +1 -0
  237. package/dist/handlers/react-to-post.test.js +53 -0
  238. package/dist/handlers/react-to-post.test.js.map +1 -0
  239. package/dist/handlers/remove-connection.d.ts +11 -0
  240. package/dist/handlers/remove-connection.d.ts.map +1 -0
  241. package/dist/handlers/remove-connection.js +41 -0
  242. package/dist/handlers/remove-connection.js.map +1 -0
  243. package/dist/handlers/remove-connection.test.d.ts +2 -0
  244. package/dist/handlers/remove-connection.test.d.ts.map +1 -0
  245. package/dist/handlers/remove-connection.test.js +65 -0
  246. package/dist/handlers/remove-connection.test.js.map +1 -0
  247. package/dist/handlers/remove-people-from-collection.d.ts.map +1 -1
  248. package/dist/handlers/remove-people-from-collection.js +2 -2
  249. package/dist/handlers/remove-people-from-collection.js.map +1 -1
  250. package/dist/handlers/resolve-entity.d.ts.map +1 -1
  251. package/dist/handlers/resolve-entity.js +2 -2
  252. package/dist/handlers/resolve-entity.js.map +1 -1
  253. package/dist/handlers/resolve-entity.test.d.ts +2 -0
  254. package/dist/handlers/resolve-entity.test.d.ts.map +1 -0
  255. package/dist/handlers/resolve-entity.test.js +93 -0
  256. package/dist/handlers/resolve-entity.test.js.map +1 -0
  257. package/dist/handlers/scrape-messaging-history.d.ts +1 -0
  258. package/dist/handlers/scrape-messaging-history.d.ts.map +1 -1
  259. package/dist/handlers/scrape-messaging-history.js +3 -2
  260. package/dist/handlers/scrape-messaging-history.js.map +1 -1
  261. package/dist/handlers/search-posts.d.ts +10 -0
  262. package/dist/handlers/search-posts.d.ts.map +1 -0
  263. package/dist/handlers/search-posts.js +56 -0
  264. package/dist/handlers/search-posts.js.map +1 -0
  265. package/dist/handlers/search-posts.test.d.ts +2 -0
  266. package/dist/handlers/search-posts.test.d.ts.map +1 -0
  267. package/dist/handlers/search-posts.test.js +112 -0
  268. package/dist/handlers/search-posts.test.js.map +1 -0
  269. package/dist/handlers/send-inmail.d.ts +15 -0
  270. package/dist/handlers/send-inmail.d.ts.map +1 -0
  271. package/dist/handlers/send-inmail.js +65 -0
  272. package/dist/handlers/send-inmail.js.map +1 -0
  273. package/dist/handlers/send-inmail.test.d.ts +2 -0
  274. package/dist/handlers/send-inmail.test.d.ts.map +1 -0
  275. package/dist/handlers/send-inmail.test.js +77 -0
  276. package/dist/handlers/send-inmail.test.js.map +1 -0
  277. package/dist/handlers/send-invite.d.ts +13 -0
  278. package/dist/handlers/send-invite.d.ts.map +1 -0
  279. package/dist/handlers/send-invite.js +54 -0
  280. package/dist/handlers/send-invite.js.map +1 -0
  281. package/dist/handlers/send-invite.test.d.ts +2 -0
  282. package/dist/handlers/send-invite.test.d.ts.map +1 -0
  283. package/dist/handlers/send-invite.test.js +71 -0
  284. package/dist/handlers/send-invite.test.js.map +1 -0
  285. package/dist/handlers/start-instance.d.ts.map +1 -1
  286. package/dist/handlers/start-instance.js +11 -2
  287. package/dist/handlers/start-instance.js.map +1 -1
  288. package/dist/handlers/start-instance.test.js +3 -1
  289. package/dist/handlers/start-instance.test.js.map +1 -1
  290. package/dist/handlers/stop-instance.d.ts.map +1 -1
  291. package/dist/handlers/stop-instance.js +11 -2
  292. package/dist/handlers/stop-instance.js.map +1 -1
  293. package/dist/handlers/stop-instance.test.js +3 -1
  294. package/dist/handlers/stop-instance.test.js.map +1 -1
  295. package/dist/handlers/visit-profile.d.ts +11 -0
  296. package/dist/handlers/visit-profile.d.ts.map +1 -0
  297. package/dist/handlers/visit-profile.js +93 -0
  298. package/dist/handlers/visit-profile.js.map +1 -0
  299. package/dist/handlers/visit-profile.test.d.ts +2 -0
  300. package/dist/handlers/visit-profile.test.d.ts.map +1 -0
  301. package/dist/handlers/visit-profile.test.js +169 -0
  302. package/dist/handlers/visit-profile.test.js.map +1 -0
  303. package/dist/program.d.ts.map +1 -1
  304. package/dist/program.js +281 -37
  305. package/dist/program.js.map +1 -1
  306. package/dist/program.test.js +21 -1
  307. package/dist/program.test.js.map +1 -1
  308. package/package.json +2 -2
package/dist/program.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Copyright (C) 2026 Oleksii PELYKH
3
3
  import { createRequire } from "node:module";
4
4
  import { Command, InvalidArgumentError, Option } from "commander";
5
- import { handleAddPeopleToCollection, handleBuildUrl, handleCampaignAddAction, handleCampaignCreate, handleCampaignDelete, handleCampaignExcludeAdd, handleCampaignExcludeList, handleCampaignExcludeRemove, handleCampaignExport, handleCampaignGet, handleCampaignList, handleCampaignListPeople, handleCampaignMoveNext, handleCampaignRemoveAction, handleCampaignRemovePeople, handleCampaignReorderActions, handleCampaignRetry, handleCampaignStart, handleCampaignStatistics, handleCampaignStatus, handleCampaignStop, handleCampaignUpdate, handleCampaignUpdateAction, handleCreateCollection, handleDeleteCollection, handleImportPeopleFromCollection, handleImportPeopleFromUrls, handleListCollections, handleCheckReplies, handleCheckStatus, handleCollectPeople, handleDescribeActions, handleFindApp, handleGetErrors, handleLaunchApp, handleListAccounts, handleListReferenceData, handleQueryMessages, handleQueryProfile, handleQueryProfiles, handleQueryProfilesBulk, handleRemovePeopleFromCollection, handleResolveEntity, handleScrapeMessagingHistory, handleQuitApp, handleStartInstance, handleStopInstance, } from "./handlers/index.js";
5
+ import { handleAddPeopleToCollection, handleBuildUrl, handleCampaignAddAction, handleCampaignCreate, handleCampaignDelete, handleCampaignErase, handleCampaignExcludeAdd, handleCampaignExcludeList, handleCampaignExcludeRemove, handleCampaignExport, handleCampaignGet, handleCampaignList, handleCampaignListPeople, handleCampaignMoveNext, handleCampaignRemoveAction, handleCampaignRemovePeople, handleCampaignReorderActions, handleCampaignRetry, handleCampaignStart, handleCampaignStatistics, handleCampaignStatus, handleCampaignStop, handleCampaignUpdate, handleCampaignUpdateAction, handleCreateCollection, handleDeleteCollection, handleDismissErrors, handleImportPeopleFromCollection, handleImportPeopleFromUrls, handleListCollections, handleCheckReplies, handleCheckStatus, handleCommentOnPost, handleCollectPeople, handleDescribeActions, handleEndorseSkills, handleEnrichProfile, handleFollowPerson, handleLikePersonPosts, handleMessagePerson, handleRemoveConnection, handleSendInmail, handleSendInvite, handleFindApp, handleGetActionBudget, handleGetErrors, handleGetFeed, handleGetPost, handleGetPostStats, handleGetProfileActivity, handleGetThrottleStatus, handleLaunchApp, handleListAccounts, handleListReferenceData, handleQueryMessages, handleQueryProfile, handleQueryProfiles, handleQueryProfilesBulk, handleRemovePeopleFromCollection, handleResolveEntity, handleScrapeMessagingHistory, handleSearchPosts, handleVisitProfile, handleQuitApp, handleReactToPost, handleStartInstance, handleStopInstance, } from "./handlers/index.js";
6
6
  const require = createRequire(import.meta.url);
7
7
  const { version } = require("../package.json");
8
8
  /** Parse a string as a positive integer, throwing on invalid input. */
@@ -61,7 +61,7 @@ export function createProgram() {
61
61
  program
62
62
  .command("list-accounts")
63
63
  .description("List LinkedHelper accounts")
64
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
64
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
65
65
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
66
66
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
67
67
  .option("--json", "Output as JSON")
@@ -70,7 +70,7 @@ export function createProgram() {
70
70
  .command("start-instance")
71
71
  .description("Start a LinkedHelper instance")
72
72
  .argument("<accountId>", "Account ID to start", parsePositiveInt)
73
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
73
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
74
74
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
75
75
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
76
76
  .action(handleStartInstance);
@@ -78,7 +78,7 @@ export function createProgram() {
78
78
  .command("stop-instance")
79
79
  .description("Stop a LinkedHelper instance")
80
80
  .argument("<accountId>", "Account ID to stop", parsePositiveInt)
81
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
81
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
82
82
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
83
83
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
84
84
  .action(handleStopInstance);
@@ -96,7 +96,7 @@ export function createProgram() {
96
96
  .option("--status <status>", "Filter by status (queued, processed, successful, failed)")
97
97
  .option("--limit <n>", "Max results (default: 20)", parsePositiveInt)
98
98
  .option("--offset <n>", "Pagination offset (default: 0)", parseNonNegativeInt)
99
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
99
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
100
100
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
101
101
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
102
102
  .option("--json", "Output as JSON")
@@ -107,7 +107,7 @@ export function createProgram() {
107
107
  .option("--file <path>", "Path to campaign configuration file")
108
108
  .option("--yaml <config>", "Inline YAML campaign configuration")
109
109
  .option("--json-input <config>", "Inline JSON campaign configuration")
110
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
110
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
111
111
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
112
112
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
113
113
  .option("--json", "Output as JSON")
@@ -116,26 +116,36 @@ export function createProgram() {
116
116
  .command("campaign-get")
117
117
  .description("Get detailed campaign information")
118
118
  .argument("<campaignId>", "Campaign ID", parsePositiveInt)
119
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
119
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
120
120
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
121
121
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
122
122
  .option("--json", "Output as JSON")
123
123
  .action(handleCampaignGet);
124
124
  program
125
125
  .command("campaign-delete")
126
- .description("Delete (archive) a campaign")
126
+ .description("Delete a campaign (archives by default, use --hard to permanently remove)")
127
127
  .argument("<campaignId>", "Campaign ID to delete", parsePositiveInt)
128
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
128
+ .option("--hard", "Permanently delete the campaign and all related data")
129
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
129
130
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
130
131
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
131
132
  .option("--json", "Output as JSON")
132
133
  .action(handleCampaignDelete);
134
+ program
135
+ .command("campaign-erase")
136
+ .description("Permanently erase a campaign and all related data (irreversible)")
137
+ .argument("<campaignId>", "Campaign ID to erase", parsePositiveInt)
138
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
139
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
140
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
141
+ .option("--json", "Output as JSON")
142
+ .action(handleCampaignErase);
133
143
  program
134
144
  .command("campaign-exclude-list")
135
145
  .description("View the exclude list for a campaign or action")
136
146
  .argument("<campaignId>", "Campaign ID", parsePositiveInt)
137
147
  .option("--action-id <id>", "Action ID (shows action-level exclude list instead of campaign-level)", parsePositiveInt)
138
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
148
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
139
149
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
140
150
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
141
151
  .option("--json", "Output as JSON")
@@ -147,7 +157,7 @@ export function createProgram() {
147
157
  .option("--person-ids <ids>", "Comma-separated person IDs")
148
158
  .option("--person-ids-file <path>", "File containing person IDs")
149
159
  .option("--action-id <id>", "Action ID (adds to action-level exclude list instead of campaign-level)", parsePositiveInt)
150
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
160
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
151
161
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
152
162
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
153
163
  .option("--json", "Output as JSON")
@@ -159,7 +169,7 @@ export function createProgram() {
159
169
  .option("--person-ids <ids>", "Comma-separated person IDs")
160
170
  .option("--person-ids-file <path>", "File containing person IDs")
161
171
  .option("--action-id <id>", "Action ID (removes from action-level exclude list instead of campaign-level)", parsePositiveInt)
162
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
172
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
163
173
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
164
174
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
165
175
  .option("--json", "Output as JSON")
@@ -172,7 +182,7 @@ export function createProgram() {
172
182
  .choices(["yaml", "json"])
173
183
  .default("yaml"))
174
184
  .option("--output <path>", "Output file path (default: stdout)")
175
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
185
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
176
186
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
177
187
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
178
188
  .action(handleCampaignExport);
@@ -182,7 +192,7 @@ export function createProgram() {
182
192
  .argument("<campaignId>", "Campaign ID to check", parsePositiveInt)
183
193
  .option("--include-results", "Include execution results")
184
194
  .option("--limit <n>", "Max results to show (default: 20)", parsePositiveInt)
185
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
195
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
186
196
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
187
197
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
188
198
  .option("--json", "Output as JSON")
@@ -193,7 +203,7 @@ export function createProgram() {
193
203
  .argument("<campaignId>", "Campaign ID", parsePositiveInt)
194
204
  .option("--action-id <id>", "Filter to a specific action", parsePositiveInt)
195
205
  .option("--max-errors <n>", "Max top errors per action (default: 5)", parsePositiveInt)
196
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
206
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
197
207
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
198
208
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
199
209
  .option("--json", "Output as JSON")
@@ -205,7 +215,7 @@ export function createProgram() {
205
215
  .argument("<actionId>", "Action ID to move people from", parsePositiveInt)
206
216
  .option("--person-ids <ids>", "Comma-separated person IDs")
207
217
  .option("--person-ids-file <path>", "File containing person IDs")
208
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
218
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
209
219
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
210
220
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
211
221
  .option("--json", "Output as JSON")
@@ -216,7 +226,7 @@ export function createProgram() {
216
226
  .argument("<campaignId>", "Campaign ID", parsePositiveInt)
217
227
  .option("--person-ids <ids>", "Comma-separated person IDs")
218
228
  .option("--person-ids-file <path>", "File containing person IDs")
219
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
229
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
220
230
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
221
231
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
222
232
  .option("--json", "Output as JSON")
@@ -227,7 +237,7 @@ export function createProgram() {
227
237
  .argument("<campaignId>", "Campaign ID to start", parsePositiveInt)
228
238
  .option("--person-ids <ids>", "Comma-separated person IDs")
229
239
  .option("--person-ids-file <path>", "File containing person IDs")
230
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
240
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
231
241
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
232
242
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
233
243
  .option("--json", "Output as JSON")
@@ -236,7 +246,7 @@ export function createProgram() {
236
246
  .command("campaign-stop")
237
247
  .description("Stop a running campaign")
238
248
  .argument("<campaignId>", "Campaign ID to stop", parsePositiveInt)
239
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
249
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
240
250
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
241
251
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
242
252
  .option("--json", "Output as JSON")
@@ -248,7 +258,7 @@ export function createProgram() {
248
258
  .option("--name <name>", "New campaign name")
249
259
  .option("--description <text>", "New campaign description")
250
260
  .option("--clear-description", "Clear the campaign description")
251
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
261
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
252
262
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
253
263
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
254
264
  .option("--json", "Output as JSON")
@@ -263,7 +273,7 @@ export function createProgram() {
263
273
  .option("--cool-down <ms>", "Milliseconds between action executions", parsePositiveInt)
264
274
  .option("--max-results <n>", "Maximum results per iteration (-1 for unlimited)", parseMaxResults)
265
275
  .option("--action-settings <json>", "Action-specific settings as JSON")
266
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
276
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
267
277
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
268
278
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
269
279
  .option("--json", "Output as JSON")
@@ -273,7 +283,7 @@ export function createProgram() {
273
283
  .description("Remove an action from a campaign's action chain")
274
284
  .argument("<campaignId>", "Campaign ID", parsePositiveInt)
275
285
  .argument("<actionId>", "Action ID to remove", parsePositiveInt)
276
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
286
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
277
287
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
278
288
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
279
289
  .option("--json", "Output as JSON")
@@ -289,7 +299,7 @@ export function createProgram() {
289
299
  .option("--cool-down <ms>", "Milliseconds between action executions", parsePositiveInt)
290
300
  .option("--max-results <n>", "Maximum results per iteration (-1 for unlimited)", parseMaxResults)
291
301
  .option("--action-settings <json>", "Action-specific settings as JSON (merged with existing)")
292
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
302
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
293
303
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
294
304
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
295
305
  .option("--json", "Output as JSON")
@@ -299,7 +309,7 @@ export function createProgram() {
299
309
  .description("Reorder actions in a campaign's action chain")
300
310
  .argument("<campaignId>", "Campaign ID", parsePositiveInt)
301
311
  .requiredOption("--action-ids <ids>", "Comma-separated action IDs in desired order")
302
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
312
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
303
313
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
304
314
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
305
315
  .option("--json", "Output as JSON")
@@ -310,7 +320,7 @@ export function createProgram() {
310
320
  .argument("<campaignId>", "Campaign ID to import into", parsePositiveInt)
311
321
  .option("--urls <urls>", "Comma-separated LinkedIn profile URLs")
312
322
  .option("--urls-file <path>", "File containing LinkedIn profile URLs")
313
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
323
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
314
324
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
315
325
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
316
326
  .option("--json", "Output as JSON")
@@ -324,7 +334,7 @@ export function createProgram() {
324
334
  .option("--max-pages <n>", "Max pages to process", parsePositiveInt)
325
335
  .option("--page-size <n>", "Results per page", parsePositiveInt)
326
336
  .option("--source-type <type>", "Explicit source type (bypasses URL detection)")
327
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
337
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
328
338
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
329
339
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
330
340
  .option("--json", "Output as JSON")
@@ -335,7 +345,7 @@ export function createProgram() {
335
345
  .argument("<campaignId>", "Campaign ID to remove people from", parsePositiveInt)
336
346
  .option("--person-ids <ids>", "Comma-separated person IDs")
337
347
  .option("--person-ids-file <path>", "File containing person IDs")
338
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
348
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
339
349
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
340
350
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
341
351
  .option("--json", "Output as JSON")
@@ -349,7 +359,7 @@ export function createProgram() {
349
359
  .command("create-collection")
350
360
  .description("Create a new LinkedHelper collection (List)")
351
361
  .argument("<name>", "Name for the new collection")
352
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
362
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
353
363
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
354
364
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
355
365
  .option("--json", "Output as JSON")
@@ -358,7 +368,7 @@ export function createProgram() {
358
368
  .command("delete-collection")
359
369
  .description("Delete a LinkedHelper collection (List) and its people associations")
360
370
  .argument("<collectionId>", "Collection ID to delete", parsePositiveInt)
361
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
371
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
362
372
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
363
373
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
364
374
  .option("--json", "Output as JSON")
@@ -369,7 +379,7 @@ export function createProgram() {
369
379
  .argument("<collectionId>", "Collection ID", parsePositiveInt)
370
380
  .option("--person-ids <ids>", "Comma-separated person IDs")
371
381
  .option("--person-ids-file <path>", "File containing person IDs")
372
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
382
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
373
383
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
374
384
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
375
385
  .option("--json", "Output as JSON")
@@ -380,7 +390,7 @@ export function createProgram() {
380
390
  .argument("<collectionId>", "Collection ID", parsePositiveInt)
381
391
  .option("--person-ids <ids>", "Comma-separated person IDs")
382
392
  .option("--person-ids-file <path>", "File containing person IDs")
383
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
393
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
384
394
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
385
395
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
386
396
  .option("--json", "Output as JSON")
@@ -390,7 +400,7 @@ export function createProgram() {
390
400
  .description("Import people from a LinkedHelper collection (List) into a campaign")
391
401
  .argument("<collectionId>", "Collection ID to import from", parsePositiveInt)
392
402
  .argument("<campaignId>", "Campaign ID to import into", parsePositiveInt)
393
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
403
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
394
404
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
395
405
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
396
406
  .option("--json", "Output as JSON")
@@ -442,16 +452,30 @@ export function createProgram() {
442
452
  .command("scrape-messaging-history")
443
453
  .description("Scrape messaging history from LinkedIn into the local database")
444
454
  .option("--person-id <id>", "Person ID to scrape (repeatable, at least one required)", collectPositiveInt, [])
445
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
455
+ .option("--pause-others", "Pause all other campaigns during execution, then restore them")
456
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
446
457
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
447
458
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
448
459
  .option("--json", "Output as JSON")
449
460
  .action(handleScrapeMessagingHistory);
461
+ program
462
+ .command("visit-profile")
463
+ .description("Visit a LinkedIn profile and extract data (name, positions, education, skills)")
464
+ .option("--person-id <id>", "Person ID to visit (provide this or --url)", parsePositiveInt)
465
+ .option("--url <url>", "LinkedIn profile URL to visit (provide this or --person-id)")
466
+ .option("--extract-current-organizations", "Extract current company info during profile visit")
467
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
468
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
469
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
470
+ .option("--json", "Output as JSON")
471
+ .action(handleVisitProfile);
450
472
  program
451
473
  .command("check-replies")
452
474
  .description("Check for new message replies from LinkedIn")
475
+ .option("--person-id <id>", "Person ID to check (repeatable, at least one required)", collectPositiveInt, [])
453
476
  .option("--since <timestamp>", "Only show replies after this ISO timestamp")
454
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
477
+ .option("--pause-others", "Pause all other campaigns during execution, then restore them")
478
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
455
479
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
456
480
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
457
481
  .option("--json", "Output as JSON")
@@ -459,7 +483,7 @@ export function createProgram() {
459
483
  program
460
484
  .command("check-status")
461
485
  .description("Check LinkedHelper status")
462
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
486
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
463
487
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
464
488
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
465
489
  .option("--json", "Output as JSON")
@@ -467,11 +491,97 @@ export function createProgram() {
467
491
  program
468
492
  .command("get-errors")
469
493
  .description("Query current UI errors, dialogs, and blocking popups")
470
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
494
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
471
495
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
472
496
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
473
497
  .option("--json", "Output as JSON")
474
498
  .action(handleGetErrors);
499
+ program
500
+ .command("dismiss-errors")
501
+ .description("Dismiss closable error popups in the instance UI")
502
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
503
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
504
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
505
+ .option("--json", "Output as JSON")
506
+ .action(handleDismissErrors);
507
+ program
508
+ .command("get-action-budget")
509
+ .description("Get daily action budget with limit types, thresholds, and usage")
510
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
511
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
512
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
513
+ .option("--json", "Output as JSON")
514
+ .action(handleGetActionBudget);
515
+ program
516
+ .command("get-throttle-status")
517
+ .description("Check if LinkedIn is throttling the account")
518
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
519
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
520
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
521
+ .option("--json", "Output as JSON")
522
+ .action(handleGetThrottleStatus);
523
+ program
524
+ .command("comment-on-post")
525
+ .description("Post a comment on a LinkedIn post")
526
+ .requiredOption("--url <url>", "LinkedIn post URL")
527
+ .requiredOption("--text <text>", "Comment text to post")
528
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
529
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
530
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
531
+ .option("--json", "Output as JSON")
532
+ .action(handleCommentOnPost);
533
+ program
534
+ .command("get-post")
535
+ .description("Get detailed data for a single LinkedIn post with comment thread")
536
+ .argument("<postUrl>", "LinkedIn post URL or URN")
537
+ .option("--comment-count <n>", "Maximum number of comments to load (default: 100, 0 to skip)", parseNonNegativeInt)
538
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
539
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
540
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
541
+ .option("--json", "Output as JSON")
542
+ .action(handleGetPost);
543
+ program
544
+ .command("get-post-stats")
545
+ .description("Get engagement statistics for a LinkedIn post")
546
+ .argument("<postUrl>", "LinkedIn post URL or URN")
547
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
548
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
549
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
550
+ .option("--json", "Output as JSON")
551
+ .action(handleGetPostStats);
552
+ program
553
+ .command("get-feed")
554
+ .description("Read the LinkedIn home feed with cursor-based pagination")
555
+ .option("--count <n>", "Number of posts per page (default: 10)", parsePositiveInt)
556
+ .option("--cursor <token>", "Cursor token from a previous call for the next page")
557
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
558
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
559
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
560
+ .option("--json", "Output as JSON")
561
+ .action(handleGetFeed);
562
+ program
563
+ .command("react-to-post")
564
+ .description("React to a LinkedIn post with a specific reaction type")
565
+ .argument("<postUrl>", "LinkedIn post URL")
566
+ .addOption(new Option("--type <type>", "Reaction type (default: like)")
567
+ .choices(["like", "celebrate", "support", "love", "insightful", "funny"])
568
+ .default("like"))
569
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
570
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
571
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
572
+ .option("--json", "Output as JSON")
573
+ .action(handleReactToPost);
574
+ program
575
+ .command("get-profile-activity")
576
+ .description("Get recent posts/activity from a LinkedIn profile")
577
+ .argument("<profile>", "LinkedIn profile public ID or URL")
578
+ .option("--count <n>", "Number of posts per page (default: 10)", parsePositiveInt)
579
+ .option("--cursor <token>", "Cursor token from a previous call for the next page")
580
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
581
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
582
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
583
+ .option("--json", "Output as JSON")
584
+ .action(handleGetProfileActivity);
475
585
  program
476
586
  .command("build-url")
477
587
  .description("Build a LinkedIn URL for a given source type")
@@ -496,7 +606,7 @@ export function createProgram() {
496
606
  .argument("<entityType>", "Entity type: COMPANY, GEO, or SCHOOL")
497
607
  .argument("<query>", "Search query")
498
608
  .option("--limit <n>", "Max results to show", parsePositiveInt)
499
- .option("--cdp-port <port>", "CDP debugging port", parsePositiveInt)
609
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
500
610
  .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
501
611
  .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
502
612
  .option("--json", "Output as JSON")
@@ -507,6 +617,140 @@ export function createProgram() {
507
617
  .argument("<dataType>", "Data type: INDUSTRY, SENIORITY, FUNCTION, COMPANY_SIZE, CONNECTION_DEGREE, PROFILE_LANGUAGE")
508
618
  .option("--json", "Output as JSON")
509
619
  .action(handleListReferenceData);
620
+ program
621
+ .command("search-posts")
622
+ .description("Search LinkedIn for posts by keyword or hashtag")
623
+ .argument("<query>", "Search query (keywords or hashtag)")
624
+ .option("--cursor <n>", "Index-based cursor from a previous search for the next page", parseNonNegativeInt)
625
+ .option("--count <n>", "Results per page (default: 10)", parsePositiveInt)
626
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
627
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
628
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
629
+ .option("--json", "Output as JSON")
630
+ .action(handleSearchPosts);
631
+ // Individual actions (ephemeral campaign)
632
+ program
633
+ .command("message-person")
634
+ .description("Send a direct message to a 1st-degree LinkedIn connection")
635
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
636
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
637
+ .requiredOption("--message-template <json>", "Message template as JSON")
638
+ .option("--subject-template <json>", "Subject line template as JSON")
639
+ .option("--reject-if-replied", "Skip if person already replied")
640
+ .option("--reject-if-messaged", "Skip if already messaged")
641
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
642
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
643
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
644
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
645
+ .option("--json", "Output as JSON")
646
+ .action(handleMessagePerson);
647
+ program
648
+ .command("send-invite")
649
+ .description("Send a LinkedIn connection request")
650
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
651
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
652
+ .option("--message-template <json>", "Invitation message template as JSON (empty for no message)")
653
+ .option("--save-as-lead-sn", "Save as lead in Sales Navigator")
654
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
655
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
656
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
657
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
658
+ .option("--json", "Output as JSON")
659
+ .action(handleSendInvite);
660
+ program
661
+ .command("send-inmail")
662
+ .description("Send an InMail message to a LinkedIn member (no connection required)")
663
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
664
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
665
+ .requiredOption("--message-template <json>", "InMail body template as JSON")
666
+ .option("--subject-template <json>", "InMail subject line template as JSON")
667
+ .option("--reject-if-replied", "Skip if person already replied")
668
+ .option("--proceed-on-out-of-credits", "Continue even when InMail credits are exhausted")
669
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
670
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
671
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
672
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
673
+ .option("--json", "Output as JSON")
674
+ .action(handleSendInmail);
675
+ program
676
+ .command("follow-person")
677
+ .description("Follow or unfollow a LinkedIn profile")
678
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
679
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
680
+ .addOption(new Option("--mode <mode>", "Follow or unfollow")
681
+ .choices(["follow", "unfollow"])
682
+ .default("follow"))
683
+ .option("--skip-if-unfollowable", "Skip if person cannot be unfollowed")
684
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
685
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
686
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
687
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
688
+ .option("--json", "Output as JSON")
689
+ .action(handleFollowPerson);
690
+ program
691
+ .command("endorse-skills")
692
+ .description("Endorse skills on a LinkedIn profile")
693
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
694
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
695
+ .option("--skill-name <name>", "Specific skill name to endorse (repeatable)", collectString, [])
696
+ .option("--limit <n>", "Max number of skills to endorse", parsePositiveInt)
697
+ .option("--skip-if-not-endorsable", "Skip if person has no endorsable skills")
698
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
699
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
700
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
701
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
702
+ .option("--json", "Output as JSON")
703
+ .action((opts) => {
704
+ const skillNames = opts.skillName?.length
705
+ ? opts.skillName
706
+ : undefined;
707
+ return handleEndorseSkills({ ...opts, skillNames, skillName: undefined });
708
+ });
709
+ program
710
+ .command("like-person-posts")
711
+ .description("Like and optionally comment on posts and articles by a LinkedIn profile")
712
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
713
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
714
+ .option("--number-of-articles <n>", "Number of articles to like", parsePositiveInt)
715
+ .option("--number-of-posts <n>", "Number of posts to like", parsePositiveInt)
716
+ .option("--max-age-of-articles <days>", "Maximum age of articles in days", parsePositiveInt)
717
+ .option("--max-age-of-posts <days>", "Maximum age of posts in days", parsePositiveInt)
718
+ .option("--should-add-comment", "Also add a comment to liked posts/articles")
719
+ .option("--message-template <json>", "Comment text template as JSON (required with --should-add-comment)")
720
+ .option("--skip-if-not-liked", "Skip if nothing was liked")
721
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
722
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
723
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
724
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
725
+ .option("--json", "Output as JSON")
726
+ .action(handleLikePersonPosts);
727
+ program
728
+ .command("remove-connection")
729
+ .description("Remove a person from 1st-degree LinkedIn connections (unfriend)")
730
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
731
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
732
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
733
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
734
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
735
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
736
+ .option("--json", "Output as JSON")
737
+ .action(handleRemoveConnection);
738
+ program
739
+ .command("enrich-profile")
740
+ .description("Enrich a LinkedIn profile by extracting additional data")
741
+ .option("--person-id <id>", "Person ID (provide this or --url)", parsePositiveInt)
742
+ .option("--url <url>", "LinkedIn profile URL (provide this or --person-id)")
743
+ .option("--enrich-profile-info", "Enrich profile info")
744
+ .option("--enrich-phones", "Enrich phone numbers")
745
+ .option("--enrich-emails", "Enrich email addresses")
746
+ .option("--enrich-socials", "Enrich social profiles")
747
+ .option("--enrich-companies", "Enrich company data")
748
+ .option("--keep-campaign", "Archive the ephemeral campaign instead of deleting it")
749
+ .option("--cdp-port <port>", "CDP debugging port (auto-discovered when omitted)", parsePositiveInt)
750
+ .option("--cdp-host <host>", "CDP host (default: 127.0.0.1)")
751
+ .option("--allow-remote", "SECURITY: allow non-loopback CDP connections (enables remote code execution on target)")
752
+ .option("--json", "Output as JSON")
753
+ .action(handleEnrichProfile);
510
754
  return program;
511
755
  }
512
756
  //# sourceMappingURL=program.js.map