@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
@@ -1,35 +1,162 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright (C) 2026 Oleksii PELYKH
3
3
  import { CDPEvaluationError, CDPTimeoutError } from "../cdp/errors.js";
4
- import { delay } from "../utils/delay.js";
4
+ import { delay, gaussianBetween, gaussianDelay, randomBetween } from "../utils/delay.js";
5
5
  /** Default timeout for DOM operations (ms). */
6
6
  const DEFAULT_TIMEOUT = 30_000;
7
7
  /** Default polling interval for waitForElement (ms). */
8
8
  const DEFAULT_POLL_INTERVAL = 100;
9
- /** Minimum delay between keystrokes (ms). */
10
- const MIN_KEYSTROKE_DELAY = 50;
11
- /** Maximum delay between keystrokes (ms). */
12
- const MAX_KEYSTROKE_DELAY = 150;
9
+ /** Probability of a micro-hesitation between keystrokes. */
10
+ const MICRO_HESITATION_PROBABILITY = 0.05;
11
+ /**
12
+ * Map a character to its physical key code and Windows virtual key code.
13
+ *
14
+ * Covers ASCII letters, digits, common punctuation, and special keys
15
+ * (space, enter, tab, backspace, escape). Returns `undefined` for
16
+ * unmapped characters — the event still fires, just without enrichment.
17
+ */
18
+ function getKeyCodeInfo(char) {
19
+ // Letters a-z / A-Z
20
+ const lower = char.toLowerCase();
21
+ if (lower >= "a" && lower <= "z") {
22
+ const vk = 65 + lower.charCodeAt(0) - "a".charCodeAt(0);
23
+ return { code: `Key${lower.toUpperCase()}`, windowsVirtualKeyCode: vk };
24
+ }
25
+ // Digits 0-9
26
+ if (char >= "0" && char <= "9") {
27
+ const vk = 48 + char.charCodeAt(0) - "0".charCodeAt(0);
28
+ return { code: `Digit${char}`, windowsVirtualKeyCode: vk };
29
+ }
30
+ // Special keys and punctuation
31
+ const special = {
32
+ " ": { code: "Space", windowsVirtualKeyCode: 32 },
33
+ "\n": { code: "Enter", windowsVirtualKeyCode: 13 },
34
+ "\r": { code: "Enter", windowsVirtualKeyCode: 13 },
35
+ "\t": { code: "Tab", windowsVirtualKeyCode: 9 },
36
+ "-": { code: "Minus", windowsVirtualKeyCode: 189 },
37
+ "=": { code: "Equal", windowsVirtualKeyCode: 187 },
38
+ "[": { code: "BracketLeft", windowsVirtualKeyCode: 219 },
39
+ "]": { code: "BracketRight", windowsVirtualKeyCode: 221 },
40
+ "\\": { code: "Backslash", windowsVirtualKeyCode: 220 },
41
+ ";": { code: "Semicolon", windowsVirtualKeyCode: 186 },
42
+ "'": { code: "Quote", windowsVirtualKeyCode: 222 },
43
+ ",": { code: "Comma", windowsVirtualKeyCode: 188 },
44
+ ".": { code: "Period", windowsVirtualKeyCode: 190 },
45
+ "/": { code: "Slash", windowsVirtualKeyCode: 191 },
46
+ "`": { code: "Backquote", windowsVirtualKeyCode: 192 },
47
+ };
48
+ return special[char];
49
+ }
13
50
  /**
14
51
  * Poll the DOM until an element matching the selector appears.
15
52
  *
53
+ * When a {@link HumanizedMouse} is provided, tiny idle mouse movements
54
+ * (1–5 px) are dispatched on ~20% of poll cycles once the wait exceeds
55
+ * 500 ms. This prevents the cursor from remaining perfectly still
56
+ * during long element waits — a detectable automation fingerprint.
57
+ *
16
58
  * @param client - Connected CDP client targeting the page.
17
59
  * @param selector - CSS selector to query.
18
60
  * @param options - Timeout and polling interval.
61
+ * @param mouse - Optional humanized mouse (enables idle drift).
19
62
  * @throws {CDPTimeoutError} If the element does not appear within the timeout.
20
63
  */
21
- export async function waitForElement(client, selector, options) {
64
+ export async function waitForElement(client, selector, options, mouse) {
22
65
  const timeout = options?.timeout ?? DEFAULT_TIMEOUT;
23
66
  const pollInterval = options?.pollInterval ?? DEFAULT_POLL_INTERVAL;
24
67
  const deadline = Date.now() + timeout;
68
+ const startTime = Date.now();
69
+ // Last known cursor position for idle drift (lazy-initialised)
70
+ let driftX = -1;
71
+ let driftY = -1;
72
+ let viewportW = 0;
73
+ let viewportH = 0;
25
74
  while (Date.now() < deadline) {
26
75
  const found = await client.evaluate(`document.querySelector(${JSON.stringify(selector)}) !== null`);
27
76
  if (found)
28
77
  return;
78
+ // Idle mouse drift: after 500 ms of waiting, 20% of poll cycles
79
+ // move the cursor by 1–5 px to avoid a perfectly still cursor.
80
+ // Uses mouse.move() to keep VirtualMouse position in sync.
81
+ if (mouse?.isAvailable && Date.now() - startTime > 500 && Math.random() < 0.2) {
82
+ if (driftX < 0) {
83
+ try {
84
+ const pos = await mouse.position();
85
+ driftX = pos.x;
86
+ driftY = pos.y;
87
+ }
88
+ catch {
89
+ // Ignored — fall through to viewport center default
90
+ }
91
+ const size = await client.evaluate(`({ w: window.innerWidth, h: window.innerHeight })`);
92
+ viewportW = size.w;
93
+ viewportH = size.h;
94
+ if (driftX < 0) {
95
+ driftX = Math.round(viewportW / 2);
96
+ driftY = Math.round(viewportH / 2);
97
+ }
98
+ }
99
+ // Guaranteed non-zero magnitude (1–5 px), random direction
100
+ const magX = Math.round(randomBetween(1, 5));
101
+ const magY = Math.round(randomBetween(1, 5));
102
+ const offsetX = (Math.random() < 0.5 ? -1 : 1) * magX;
103
+ const offsetY = (Math.random() < 0.5 ? -1 : 1) * magY;
104
+ // Clamp to viewport bounds
105
+ driftX = Math.max(0, Math.min(viewportW - 1, driftX + offsetX));
106
+ driftY = Math.max(0, Math.min(viewportH - 1, driftY + offsetY));
107
+ await mouse.move(driftX, driftY);
108
+ }
29
109
  await delay(pollInterval);
30
110
  }
31
111
  throw new CDPTimeoutError(`Timed out waiting for element "${selector}" after ${timeout.toString()}ms`);
32
112
  }
113
+ /**
114
+ * Wait until the DOM stops mutating for `quietMs` milliseconds.
115
+ *
116
+ * Installs a `MutationObserver` via `Runtime.evaluate` that tracks
117
+ * the timestamp of the last mutation. Polls until no mutations have
118
+ * occurred for the configured quiet period, then adds a "visual
119
+ * scanning" Gaussian delay to simulate a human pausing to read.
120
+ *
121
+ * @param client - Connected CDP client targeting the page.
122
+ * @param quietMs - Milliseconds of mutation silence required (default: 500).
123
+ */
124
+ export async function waitForDOMStable(client, quietMs = 500) {
125
+ // Install a MutationObserver that stamps window.__lhLastMutation on every DOM change
126
+ await client.evaluate(`(() => {
127
+ window.__lhLastMutation = Date.now();
128
+ const observer = new MutationObserver(() => {
129
+ window.__lhLastMutation = Date.now();
130
+ });
131
+ observer.observe(document.body, {
132
+ childList: true,
133
+ subtree: true,
134
+ attributes: true,
135
+ characterData: true,
136
+ });
137
+ window.__lhDOMObserver = observer;
138
+ })()`);
139
+ // Poll until the DOM has been quiet for quietMs
140
+ const pollInterval = 100;
141
+ const maxWait = 30_000;
142
+ const deadline = Date.now() + maxWait;
143
+ while (Date.now() < deadline) {
144
+ const elapsed = await client.evaluate(`Date.now() - (window.__lhLastMutation || 0)`);
145
+ if (elapsed >= quietMs)
146
+ break;
147
+ await delay(pollInterval);
148
+ }
149
+ // Disconnect the observer
150
+ await client.evaluate(`(() => {
151
+ if (window.__lhDOMObserver) {
152
+ window.__lhDOMObserver.disconnect();
153
+ delete window.__lhDOMObserver;
154
+ delete window.__lhLastMutation;
155
+ }
156
+ })()`);
157
+ // Simulate "visual scanning" — a human pausing to read the page
158
+ await gaussianDelay(1_200, 400, 600, 2_500);
159
+ }
33
160
  /**
34
161
  * Scroll the page until the target element is visible in the viewport.
35
162
  *
@@ -52,26 +179,33 @@ export async function scrollTo(client, selector) {
52
179
  }
53
180
  }
54
181
  /**
55
- * Trigger a hover on an element by dispatching `mouseenter` + `mouseover`.
182
+ * Trigger a hover on an element via CDP `Input.dispatchMouseEvent`.
56
183
  *
57
- * This is used to reveal hover-dependent UI such as the LinkedIn
58
- * reactions menu popup.
184
+ * Computes the element's center coordinates and dispatches a single
185
+ * `mouseMoved` event through the CDP Input domain. This is required
186
+ * to reveal hover-dependent UI such as the LinkedIn reactions popup,
187
+ * which does not respond to synthetic JS `mouseenter`/`mouseover`.
59
188
  *
60
189
  * @param client - Connected CDP client targeting the page.
61
190
  * @param selector - CSS selector for the element to hover.
62
191
  * @throws {CDPEvaluationError} If the element is not found.
63
192
  */
64
193
  export async function hover(client, selector) {
65
- const hovered = await client.evaluate(`(() => {
194
+ const center = await client.evaluate(`(() => {
66
195
  const el = document.querySelector(${JSON.stringify(selector)});
67
- if (!el) return false;
68
- el.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
69
- el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
70
- return true;
196
+ if (!el) return null;
197
+ el.scrollIntoView({ block: "center", behavior: "instant" });
198
+ const r = el.getBoundingClientRect();
199
+ return { x: Math.round(r.x + r.width / 2), y: Math.round(r.y + r.height / 2) };
71
200
  })()`);
72
- if (!hovered) {
201
+ if (!center) {
73
202
  throw new CDPEvaluationError(`Element "${selector}" not found for hover`);
74
203
  }
204
+ await client.send("Input.dispatchMouseEvent", {
205
+ type: "mouseMoved",
206
+ x: center.x,
207
+ y: center.y,
208
+ });
75
209
  }
76
210
  /**
77
211
  * Click an element via its JavaScript `.click()` method.
@@ -98,8 +232,14 @@ export async function click(client, selector) {
98
232
  * Type text into a focused element character-by-character.
99
233
  *
100
234
  * The element is focused first, then each character is dispatched via
101
- * CDP `Input.dispatchKeyEvent` with randomised inter-keystroke delays
102
- * (50–150 ms) to approximate human typing cadence.
235
+ * CDP `Input.dispatchKeyEvent` with character-context-aware Gaussian
236
+ * delays to approximate human typing cadence:
237
+ *
238
+ * - **Intra-word** (letters, digits): ~65 ms mean — fast, rhythmic typing
239
+ * - **Word boundary** (space): ~180 ms mean — natural pause between words
240
+ * - **Sentence boundary** (space after `.!?`): ~350 ms mean — thinking pause
241
+ * - **Paragraph boundary** (newline): ~700 ms mean — composing the next thought
242
+ * - **Micro-hesitation** (5% per character): ~300 ms extra — brief mid-word thinking
103
243
  *
104
244
  * @param client - Connected CDP client targeting the page.
105
245
  * @param selector - CSS selector for the input element.
@@ -118,22 +258,357 @@ export async function typeText(client, selector, text, method = "type") {
118
258
  throw new CDPEvaluationError(`Element "${selector}" not found for typeText`);
119
259
  }
120
260
  switch (method) {
121
- case "type":
261
+ case "type": {
262
+ let previousChar = "";
122
263
  for (const char of text) {
264
+ const kc = getKeyCodeInfo(char);
123
265
  await client.send("Input.dispatchKeyEvent", {
124
266
  type: "keyDown",
125
267
  key: char,
126
268
  text: char,
269
+ ...(kc && { code: kc.code, windowsVirtualKeyCode: kc.windowsVirtualKeyCode }),
127
270
  });
128
271
  await client.send("Input.dispatchKeyEvent", {
129
272
  type: "keyUp",
130
273
  key: char,
274
+ ...(kc && { code: kc.code, windowsVirtualKeyCode: kc.windowsVirtualKeyCode }),
131
275
  });
132
- const keystrokeDelay = MIN_KEYSTROKE_DELAY +
133
- Math.random() * (MAX_KEYSTROKE_DELAY - MIN_KEYSTROKE_DELAY);
134
- await delay(keystrokeDelay);
276
+ // Character-aware delay
277
+ if (char === "\n") {
278
+ await gaussianDelay(700, 300, 300, 1_500);
279
+ }
280
+ else if (char === " " && /[.!?]/.test(previousChar)) {
281
+ await gaussianDelay(350, 120, 150, 800);
282
+ }
283
+ else if (char === " ") {
284
+ await gaussianDelay(180, 50, 100, 350);
285
+ }
286
+ else {
287
+ await gaussianDelay(65, 20, 30, 120);
288
+ }
289
+ // Micro-hesitation (5%)
290
+ if (Math.random() < MICRO_HESITATION_PROBABILITY) {
291
+ await gaussianDelay(300, 100, 150, 600);
292
+ }
293
+ previousChar = char;
135
294
  }
136
295
  break;
296
+ }
297
+ }
298
+ }
299
+ /**
300
+ * Get the bounding rect of a DOM element selected by CSS selector.
301
+ *
302
+ * @returns `null` if the element is not found.
303
+ */
304
+ export async function getElementBounds(client, selector) {
305
+ return client.evaluate(`(() => {
306
+ const el = document.querySelector(${JSON.stringify(selector)});
307
+ if (!el) return null;
308
+ const r = el.getBoundingClientRect();
309
+ return { top: r.top, bottom: r.bottom, height: r.height };
310
+ })()`);
311
+ }
312
+ /**
313
+ * Get the bounding rect of the Nth element matching a CSS selector.
314
+ *
315
+ * Equivalent to `document.querySelectorAll(baseSelector)[index]`.
316
+ *
317
+ * @returns `null` if no element exists at the given index.
318
+ */
319
+ export async function getElementBoundsByIndex(client, baseSelector, index) {
320
+ return client.evaluate(`(() => {
321
+ const els = document.querySelectorAll(${JSON.stringify(baseSelector)});
322
+ const el = els[${String(index)}];
323
+ if (!el) return null;
324
+ const r = el.getBoundingClientRect();
325
+ return { top: r.top, bottom: r.bottom, height: r.height };
326
+ })()`);
327
+ }
328
+ /**
329
+ * Get the viewport height (`window.innerHeight`).
330
+ */
331
+ export async function getViewportHeight(client) {
332
+ return client.evaluate(`window.innerHeight`);
333
+ }
334
+ // ---------------------------------------------------------------------------
335
+ // Humanized scroll-to-element
336
+ // ---------------------------------------------------------------------------
337
+ /**
338
+ * Internal: incremental scroll loop that centers an element in the viewport.
339
+ *
340
+ * @returns `true` if the element was centered within `maxIterations`.
341
+ */
342
+ async function scrollToElementLoop(client, getBounds, mouse) {
343
+ const viewportHeight = await getViewportHeight(client);
344
+ const maxIterations = 10;
345
+ const tolerance = viewportHeight / 4;
346
+ for (let i = 0; i < maxIterations; i++) {
347
+ const bounds = await getBounds();
348
+ if (!bounds)
349
+ return false;
350
+ const elementCenter = bounds.top + bounds.height / 2;
351
+ const viewportCenter = viewportHeight / 2;
352
+ if (Math.abs(elementCenter - viewportCenter) <= tolerance) {
353
+ return true;
354
+ }
355
+ const deltaY = elementCenter - viewportCenter;
356
+ await humanizedScrollY(client, deltaY, 300, 400, mouse);
357
+ await gaussianDelay(300, 50, 200, 400);
358
+ }
359
+ return false;
360
+ }
361
+ /**
362
+ * Scroll the page until the target element is centered in the viewport,
363
+ * using incremental humanized mouse-wheel strokes.
364
+ *
365
+ * When a {@link HumanizedMouse} is available, the cursor scrolls the page
366
+ * in small increments until the element's bounding rect is in the viewport
367
+ * center zone. Falls back to instant `scrollIntoView` otherwise.
368
+ *
369
+ * @param client - Connected CDP client targeting the page.
370
+ * @param selector - CSS selector for the element to scroll to.
371
+ * @param mouse - Optional humanized mouse instance.
372
+ */
373
+ export async function humanizedScrollTo(client, selector, mouse) {
374
+ if (mouse?.isAvailable) {
375
+ const success = await scrollToElementLoop(client, () => getElementBounds(client, selector), mouse);
376
+ if (success)
377
+ return;
378
+ }
379
+ await scrollTo(client, selector);
380
+ }
381
+ /**
382
+ * Scroll the page until the Nth element matching a selector is centered,
383
+ * using incremental humanized mouse-wheel strokes.
384
+ *
385
+ * Falls back to instant `scrollIntoView` when humanized mouse is unavailable.
386
+ *
387
+ * @param client - Connected CDP client targeting the page.
388
+ * @param baseSelector - CSS selector matching multiple elements.
389
+ * @param index - Zero-based index into the matched elements.
390
+ * @param mouse - Optional humanized mouse instance.
391
+ */
392
+ export async function humanizedScrollToByIndex(client, baseSelector, index, mouse) {
393
+ if (mouse?.isAvailable) {
394
+ const success = await scrollToElementLoop(client, () => getElementBoundsByIndex(client, baseSelector, index), mouse);
395
+ if (success)
396
+ return;
397
+ }
398
+ // Fallback to instant scrollIntoView
399
+ await client.evaluate(`(() => {
400
+ const els = document.querySelectorAll(${JSON.stringify(baseSelector)});
401
+ const el = els[${String(index)}];
402
+ if (el) el.scrollIntoView({ behavior: "instant", block: "center" });
403
+ })()`);
404
+ }
405
+ /**
406
+ * Get a jittered viewport-relative point near the center of a DOM element.
407
+ *
408
+ * A Gaussian offset is applied so the click target varies naturally within
409
+ * the element bounds, removing the dead-center automation fingerprint.
410
+ *
411
+ * @returns `null` if the element is not found.
412
+ */
413
+ export async function getElementCenter(client, selector) {
414
+ const rect = await client.evaluate(`(() => {
415
+ const el = document.querySelector(${JSON.stringify(selector)});
416
+ if (!el) return null;
417
+ const r = el.getBoundingClientRect();
418
+ return { x: r.x, y: r.y, width: r.width, height: r.height };
419
+ })()`);
420
+ if (!rect)
421
+ return null;
422
+ const cx = rect.x + rect.width / 2;
423
+ const cy = rect.y + rect.height / 2;
424
+ const jx = cx + gaussianBetween(0, rect.width * 0.15, -rect.width * 0.4, rect.width * 0.4);
425
+ const jy = cy + gaussianBetween(0, rect.height * 0.15, -rect.height * 0.4, rect.height * 0.4);
426
+ const roundedJx = Math.round(jx);
427
+ const roundedJy = Math.round(jy);
428
+ const maxX = rect.width >= 1 ? rect.x + rect.width - 1 : rect.x;
429
+ const maxY = rect.height >= 1 ? rect.y + rect.height - 1 : rect.y;
430
+ return {
431
+ x: Math.max(rect.x, Math.min(maxX, roundedJx)),
432
+ y: Math.max(rect.y, Math.min(maxY, roundedJy)),
433
+ };
434
+ }
435
+ /**
436
+ * Scroll the element toward the viewport center if it sits in the outer
437
+ * 20% of the visible area. This mimics a human scrolling a bit to see
438
+ * the target more comfortably before clicking.
439
+ *
440
+ * @internal
441
+ */
442
+ async function viewportComfortZone(client, selector, mouse) {
443
+ const viewportHeight = await getViewportHeight(client);
444
+ // Use the raw bounding-rect center (not the jittered getElementCenter)
445
+ // so the comfort-zone check is deterministic and not affected by jitter.
446
+ const rect = await client.evaluate(`(() => {
447
+ const el = document.querySelector(${JSON.stringify(selector)});
448
+ if (!el) return null;
449
+ const r = el.getBoundingClientRect();
450
+ return { x: r.x, y: r.y, width: r.width, height: r.height };
451
+ })()`);
452
+ if (!rect)
453
+ return;
454
+ const centerX = rect.x + rect.width / 2;
455
+ const centerY = rect.y + rect.height / 2;
456
+ if (centerY < viewportHeight * 0.2 || centerY > viewportHeight * 0.8) {
457
+ const deltaY = centerY - viewportHeight / 2;
458
+ await humanizedScrollY(client, deltaY * 0.5, centerX, centerY, mouse);
459
+ await gaussianDelay(300, 100, 150, 600);
460
+ }
461
+ }
462
+ /**
463
+ * Click an element with humanized mouse movement when available.
464
+ *
465
+ * When a {@link HumanizedMouse} is provided and available, the cursor
466
+ * follows a Bezier path to the element center before clicking. The
467
+ * VirtualMouse dispatches `mousePressed` / `mouseReleased` via CDP.
468
+ *
469
+ * **Pre-focus hover** (60% probability, HumanizedMouse only): before
470
+ * clicking, the cursor first moves to a point 20–50 px from the target,
471
+ * pauses briefly to simulate visual scanning, then proceeds to the
472
+ * target — a two-phase approach that mimics how a human visually locates
473
+ * a button before moving to click it.
474
+ *
475
+ * **Viewport comfort zone**: if the target sits in the outer 20% of the
476
+ * viewport, a small scroll brings it more central before interacting.
477
+ *
478
+ * Falls back to the standard JS `.click()` when humanized mouse is
479
+ * unavailable (or the element cannot be located by bounding rect).
480
+ *
481
+ * @param client - Connected CDP client targeting the LinkedIn page.
482
+ * @param selector - CSS selector for the element to click.
483
+ * @param mouse - Optional humanized mouse instance.
484
+ */
485
+ export async function humanizedClick(client, selector, mouse) {
486
+ // Viewport comfort zone: scroll element toward center if near edges
487
+ await viewportComfortZone(client, selector, mouse);
488
+ await gaussianDelay(25, 12, 0, 50); // Pre-click approach hesitation
489
+ if (mouse?.isAvailable) {
490
+ const center = await getElementCenter(client, selector);
491
+ if (center) {
492
+ // Pre-focus hover: 60% of the time, approach via a nearby point first
493
+ if (Math.random() < 0.6) {
494
+ const angle = Math.random() * 2 * Math.PI;
495
+ const radius = randomBetween(20, 50);
496
+ const nearX = Math.round(center.x + Math.cos(angle) * radius);
497
+ const nearY = Math.round(center.y + Math.sin(angle) * radius);
498
+ await mouse.move(nearX, nearY);
499
+ await gaussianDelay(180, 60, 80, 400); // Visual scanning pause
500
+ }
501
+ await mouse.click(center.x, center.y);
502
+ await gaussianDelay(100, 25, 50, 150); // Post-click visual confirmation
503
+ return;
504
+ }
505
+ }
506
+ // Fallback: simulate mouse movement path before JS click
507
+ const center = await getElementCenter(client, selector);
508
+ if (center) {
509
+ const viewportSize = await client.evaluate(`({ w: window.innerWidth, h: window.innerHeight })`);
510
+ // Random starting position within the viewport
511
+ const startX = Math.round(Math.random() * viewportSize.w);
512
+ const startY = Math.round(Math.random() * viewportSize.h);
513
+ const steps = Math.round(gaussianBetween(4, 0.7, 3, 5));
514
+ for (let i = 1; i <= steps; i++) {
515
+ const t = i / steps;
516
+ const baseX = startX + (center.x - startX) * t;
517
+ const baseY = startY + (center.y - startY) * t;
518
+ // Add random offset to intermediate points, not the final point
519
+ const offsetX = i < steps ? Math.round(gaussianBetween(0, 10, -20, 20)) : 0;
520
+ const offsetY = i < steps ? Math.round(gaussianBetween(0, 10, -20, 20)) : 0;
521
+ await client.send("Input.dispatchMouseEvent", {
522
+ type: "mouseMoved",
523
+ x: Math.round(baseX) + offsetX,
524
+ y: Math.round(baseY) + offsetY,
525
+ });
526
+ await gaussianDelay(25, 10, 10, 50);
527
+ }
528
+ }
529
+ await click(client, selector);
530
+ await gaussianDelay(100, 25, 50, 150); // Post-click visual confirmation
531
+ }
532
+ /**
533
+ * Hover over an element with humanized mouse movement when available.
534
+ *
535
+ * When a {@link HumanizedMouse} is provided, the cursor physically
536
+ * moves to the element center via Bézier-path movement with jitter,
537
+ * which is more realistic than a single CDP `mouseMoved` event.
538
+ *
539
+ * Falls back to {@link hover} (single CDP `Input.dispatchMouseEvent`)
540
+ * when unavailable.
541
+ *
542
+ * @param client - Connected CDP client targeting the LinkedIn page.
543
+ * @param selector - CSS selector for the element to hover.
544
+ * @param mouse - Optional humanized mouse instance.
545
+ */
546
+ export async function humanizedHover(client, selector, mouse) {
547
+ await gaussianDelay(25, 12, 0, 50); // Pre-hover approach hesitation
548
+ if (mouse?.isAvailable) {
549
+ const center = await getElementCenter(client, selector);
550
+ if (center) {
551
+ await mouse.move(center.x, center.y);
552
+ return;
553
+ }
554
+ }
555
+ // Fallback to CDP hover
556
+ await hover(client, selector);
557
+ }
558
+ /**
559
+ * Scroll the page vertically with humanized mouse-wheel strokes.
560
+ *
561
+ * When a {@link HumanizedMouse} is provided, scrolling is emulated as
562
+ * incremental wheel strokes (150 px / 25 ms) at the given position,
563
+ * matching the behavior of a physical mouse wheel.
564
+ *
565
+ * Falls back to a single CDP `mouseWheel` event when unavailable.
566
+ *
567
+ * @param client - Connected CDP client targeting the LinkedIn page.
568
+ * @param deltaY - Pixels to scroll (positive = down).
569
+ * @param x - Viewport X coordinate for the scroll position.
570
+ * @param y - Viewport Y coordinate for the scroll position.
571
+ * @param mouse - Optional humanized mouse instance.
572
+ */
573
+ export async function humanizedScrollY(client, deltaY, x, y, mouse) {
574
+ if (mouse?.isAvailable) {
575
+ await mouse.scrollY(deltaY, x, y);
576
+ return;
577
+ }
578
+ // Fallback to a single CDP scroll event
579
+ await client.send("Input.dispatchMouseEvent", {
580
+ type: "mouseWheel",
581
+ x,
582
+ y,
583
+ deltaX: 0,
584
+ deltaY,
585
+ });
586
+ }
587
+ /**
588
+ * Retry an interaction function with escalating Gaussian-distributed
589
+ * delays between attempts.
590
+ *
591
+ * Wraps critical interaction sequences (click after scroll, hover after
592
+ * navigate) where elements may vanish due to React re-renders. Each
593
+ * retry waits progressively longer — `800 * (attempt + 1)` ms mean —
594
+ * giving the page time to stabilise.
595
+ *
596
+ * @param fn - The async interaction to attempt.
597
+ * @param maxAttempts - Maximum number of attempts (default: 2).
598
+ * @returns The result of the first successful attempt.
599
+ */
600
+ export async function retryInteraction(fn, maxAttempts = 2) {
601
+ for (let i = 0; i < maxAttempts; i++) {
602
+ try {
603
+ return await fn();
604
+ }
605
+ catch (e) {
606
+ if (i === maxAttempts - 1)
607
+ throw e;
608
+ await gaussianDelay(800 * (i + 1), 300, 400, 2_000);
609
+ }
137
610
  }
611
+ // Unreachable — the loop always returns or throws
612
+ throw new Error("unreachable");
138
613
  }
139
614
  //# sourceMappingURL=dom-automation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom-automation.js","sourceRoot":"","sources":["../../src/linkedin/dom-automation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom-automation.js","sourceRoot":"","sources":["../../src/linkedin/dom-automation.ts"],"names":[],"mappings":"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"}