@lhremote/core 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 (546) 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/index.d.ts +1 -1
  31. package/dist/db/index.d.ts.map +1 -1
  32. package/dist/db/index.js +1 -1
  33. package/dist/db/index.js.map +1 -1
  34. package/dist/db/repositories/action-budget.d.ts +29 -0
  35. package/dist/db/repositories/action-budget.d.ts.map +1 -0
  36. package/dist/db/repositories/action-budget.js +100 -0
  37. package/dist/db/repositories/action-budget.js.map +1 -0
  38. package/dist/db/repositories/action-budget.test.d.ts +2 -0
  39. package/dist/db/repositories/action-budget.test.d.ts.map +1 -0
  40. package/dist/db/repositories/action-budget.test.js +181 -0
  41. package/dist/db/repositories/action-budget.test.js.map +1 -0
  42. package/dist/db/repositories/campaign-hard-delete.integration.test.d.ts +2 -0
  43. package/dist/db/repositories/campaign-hard-delete.integration.test.d.ts.map +1 -0
  44. package/dist/db/repositories/campaign-hard-delete.integration.test.js +78 -0
  45. package/dist/db/repositories/campaign-hard-delete.integration.test.js.map +1 -0
  46. package/dist/db/repositories/campaign.d.ts +14 -0
  47. package/dist/db/repositories/campaign.d.ts.map +1 -1
  48. package/dist/db/repositories/campaign.js +125 -0
  49. package/dist/db/repositories/campaign.js.map +1 -1
  50. package/dist/db/repositories/collection-list.integration.test.js +6 -4
  51. package/dist/db/repositories/collection-list.integration.test.js.map +1 -1
  52. package/dist/db/repositories/index.d.ts +1 -0
  53. package/dist/db/repositories/index.d.ts.map +1 -1
  54. package/dist/db/repositories/index.js +1 -0
  55. package/dist/db/repositories/index.js.map +1 -1
  56. package/dist/index.d.ts +7 -6
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +27 -7
  59. package/dist/index.js.map +1 -1
  60. package/dist/linkedin/__tests__/dom-automation.integration.test.d.ts +2 -0
  61. package/dist/linkedin/__tests__/dom-automation.integration.test.d.ts.map +1 -0
  62. package/dist/linkedin/__tests__/dom-automation.integration.test.js +160 -0
  63. package/dist/linkedin/__tests__/dom-automation.integration.test.js.map +1 -0
  64. package/dist/linkedin/dom-automation-retry.test.d.ts +2 -0
  65. package/dist/linkedin/dom-automation-retry.test.d.ts.map +1 -0
  66. package/dist/linkedin/dom-automation-retry.test.js +51 -0
  67. package/dist/linkedin/dom-automation-retry.test.js.map +1 -0
  68. package/dist/linkedin/dom-automation.d.ts +224 -0
  69. package/dist/linkedin/dom-automation.d.ts.map +1 -0
  70. package/dist/linkedin/dom-automation.js +614 -0
  71. package/dist/linkedin/dom-automation.js.map +1 -0
  72. package/dist/linkedin/humanized-mouse.d.ts +69 -0
  73. package/dist/linkedin/humanized-mouse.d.ts.map +1 -0
  74. package/dist/linkedin/humanized-mouse.js +109 -0
  75. package/dist/linkedin/humanized-mouse.js.map +1 -0
  76. package/dist/linkedin/index.d.ts +4 -0
  77. package/dist/linkedin/index.d.ts.map +1 -0
  78. package/dist/linkedin/index.js +6 -0
  79. package/dist/linkedin/index.js.map +1 -0
  80. package/dist/linkedin/selectors.d.ts +67 -0
  81. package/dist/linkedin/selectors.d.ts.map +1 -0
  82. package/dist/linkedin/selectors.js +74 -0
  83. package/dist/linkedin/selectors.js.map +1 -0
  84. package/dist/operations/add-people-to-collection.d.ts +1 -1
  85. package/dist/operations/add-people-to-collection.d.ts.map +1 -1
  86. package/dist/operations/add-people-to-collection.js +3 -6
  87. package/dist/operations/add-people-to-collection.js.map +1 -1
  88. package/dist/operations/build-linkedin-url.test.d.ts +2 -0
  89. package/dist/operations/build-linkedin-url.test.d.ts.map +1 -0
  90. package/dist/operations/build-linkedin-url.test.js +158 -0
  91. package/dist/operations/build-linkedin-url.test.js.map +1 -0
  92. package/dist/operations/campaign-add-action.d.ts +1 -1
  93. package/dist/operations/campaign-add-action.d.ts.map +1 -1
  94. package/dist/operations/campaign-add-action.js +3 -6
  95. package/dist/operations/campaign-add-action.js.map +1 -1
  96. package/dist/operations/campaign-create.d.ts +1 -1
  97. package/dist/operations/campaign-create.d.ts.map +1 -1
  98. package/dist/operations/campaign-create.js +3 -6
  99. package/dist/operations/campaign-create.js.map +1 -1
  100. package/dist/operations/campaign-delete.d.ts +7 -3
  101. package/dist/operations/campaign-delete.d.ts.map +1 -1
  102. package/dist/operations/campaign-delete.js +12 -8
  103. package/dist/operations/campaign-delete.js.map +1 -1
  104. package/dist/operations/campaign-delete.test.js +41 -1
  105. package/dist/operations/campaign-delete.test.js.map +1 -1
  106. package/dist/operations/campaign-erase.d.ts +19 -0
  107. package/dist/operations/campaign-erase.d.ts.map +1 -0
  108. package/dist/operations/campaign-erase.js +19 -0
  109. package/dist/operations/campaign-erase.js.map +1 -0
  110. package/dist/operations/campaign-erase.test.d.ts +2 -0
  111. package/dist/operations/campaign-erase.test.d.ts.map +1 -0
  112. package/dist/operations/campaign-erase.test.js +101 -0
  113. package/dist/operations/campaign-erase.test.js.map +1 -0
  114. package/dist/operations/campaign-exclude-add.d.ts +1 -1
  115. package/dist/operations/campaign-exclude-add.d.ts.map +1 -1
  116. package/dist/operations/campaign-exclude-add.js +3 -6
  117. package/dist/operations/campaign-exclude-add.js.map +1 -1
  118. package/dist/operations/campaign-exclude-list.d.ts +1 -1
  119. package/dist/operations/campaign-exclude-list.d.ts.map +1 -1
  120. package/dist/operations/campaign-exclude-list.js +3 -6
  121. package/dist/operations/campaign-exclude-list.js.map +1 -1
  122. package/dist/operations/campaign-exclude-remove.d.ts +1 -1
  123. package/dist/operations/campaign-exclude-remove.d.ts.map +1 -1
  124. package/dist/operations/campaign-exclude-remove.js +3 -6
  125. package/dist/operations/campaign-exclude-remove.js.map +1 -1
  126. package/dist/operations/campaign-export.d.ts +1 -1
  127. package/dist/operations/campaign-export.d.ts.map +1 -1
  128. package/dist/operations/campaign-export.js +3 -6
  129. package/dist/operations/campaign-export.js.map +1 -1
  130. package/dist/operations/campaign-get.d.ts +1 -1
  131. package/dist/operations/campaign-get.d.ts.map +1 -1
  132. package/dist/operations/campaign-get.js +3 -6
  133. package/dist/operations/campaign-get.js.map +1 -1
  134. package/dist/operations/campaign-list-people.d.ts +1 -1
  135. package/dist/operations/campaign-list-people.d.ts.map +1 -1
  136. package/dist/operations/campaign-list-people.js +3 -6
  137. package/dist/operations/campaign-list-people.js.map +1 -1
  138. package/dist/operations/campaign-list.d.ts +1 -1
  139. package/dist/operations/campaign-list.d.ts.map +1 -1
  140. package/dist/operations/campaign-list.js +3 -6
  141. package/dist/operations/campaign-list.js.map +1 -1
  142. package/dist/operations/campaign-move-next.d.ts +1 -1
  143. package/dist/operations/campaign-move-next.d.ts.map +1 -1
  144. package/dist/operations/campaign-move-next.js +3 -6
  145. package/dist/operations/campaign-move-next.js.map +1 -1
  146. package/dist/operations/campaign-remove-action.d.ts +1 -1
  147. package/dist/operations/campaign-remove-action.d.ts.map +1 -1
  148. package/dist/operations/campaign-remove-action.js +3 -6
  149. package/dist/operations/campaign-remove-action.js.map +1 -1
  150. package/dist/operations/campaign-remove-people.d.ts +1 -1
  151. package/dist/operations/campaign-remove-people.d.ts.map +1 -1
  152. package/dist/operations/campaign-remove-people.js +3 -6
  153. package/dist/operations/campaign-remove-people.js.map +1 -1
  154. package/dist/operations/campaign-reorder-actions.d.ts +1 -1
  155. package/dist/operations/campaign-reorder-actions.d.ts.map +1 -1
  156. package/dist/operations/campaign-reorder-actions.js +3 -6
  157. package/dist/operations/campaign-reorder-actions.js.map +1 -1
  158. package/dist/operations/campaign-retry.d.ts +1 -1
  159. package/dist/operations/campaign-retry.d.ts.map +1 -1
  160. package/dist/operations/campaign-retry.js +3 -6
  161. package/dist/operations/campaign-retry.js.map +1 -1
  162. package/dist/operations/campaign-start.d.ts +1 -1
  163. package/dist/operations/campaign-start.d.ts.map +1 -1
  164. package/dist/operations/campaign-start.js +3 -6
  165. package/dist/operations/campaign-start.js.map +1 -1
  166. package/dist/operations/campaign-statistics.d.ts +1 -1
  167. package/dist/operations/campaign-statistics.d.ts.map +1 -1
  168. package/dist/operations/campaign-statistics.js +3 -6
  169. package/dist/operations/campaign-statistics.js.map +1 -1
  170. package/dist/operations/campaign-status.d.ts +1 -1
  171. package/dist/operations/campaign-status.d.ts.map +1 -1
  172. package/dist/operations/campaign-status.js +3 -6
  173. package/dist/operations/campaign-status.js.map +1 -1
  174. package/dist/operations/campaign-stop.d.ts +1 -1
  175. package/dist/operations/campaign-stop.d.ts.map +1 -1
  176. package/dist/operations/campaign-stop.js +3 -6
  177. package/dist/operations/campaign-stop.js.map +1 -1
  178. package/dist/operations/campaign-update-action.d.ts +1 -1
  179. package/dist/operations/campaign-update-action.d.ts.map +1 -1
  180. package/dist/operations/campaign-update-action.js +3 -6
  181. package/dist/operations/campaign-update-action.js.map +1 -1
  182. package/dist/operations/campaign-update.d.ts +1 -1
  183. package/dist/operations/campaign-update.d.ts.map +1 -1
  184. package/dist/operations/campaign-update.js +3 -6
  185. package/dist/operations/campaign-update.js.map +1 -1
  186. package/dist/operations/check-replies.d.ts +3 -1
  187. package/dist/operations/check-replies.d.ts.map +1 -1
  188. package/dist/operations/check-replies.js +132 -17
  189. package/dist/operations/check-replies.js.map +1 -1
  190. package/dist/operations/check-replies.test.js +177 -17
  191. package/dist/operations/check-replies.test.js.map +1 -1
  192. package/dist/operations/collect-people.d.ts +1 -1
  193. package/dist/operations/collect-people.d.ts.map +1 -1
  194. package/dist/operations/collect-people.js +3 -6
  195. package/dist/operations/collect-people.js.map +1 -1
  196. package/dist/operations/comment-on-post.d.ts +37 -0
  197. package/dist/operations/comment-on-post.d.ts.map +1 -0
  198. package/dist/operations/comment-on-post.js +104 -0
  199. package/dist/operations/comment-on-post.js.map +1 -0
  200. package/dist/operations/comment-on-post.test.d.ts +2 -0
  201. package/dist/operations/comment-on-post.test.d.ts.map +1 -0
  202. package/dist/operations/comment-on-post.test.js +242 -0
  203. package/dist/operations/comment-on-post.test.js.map +1 -0
  204. package/dist/operations/create-collection.d.ts +1 -1
  205. package/dist/operations/create-collection.d.ts.map +1 -1
  206. package/dist/operations/create-collection.js +3 -6
  207. package/dist/operations/create-collection.js.map +1 -1
  208. package/dist/operations/delete-collection.d.ts +1 -1
  209. package/dist/operations/delete-collection.d.ts.map +1 -1
  210. package/dist/operations/delete-collection.js +3 -6
  211. package/dist/operations/delete-collection.js.map +1 -1
  212. package/dist/operations/dismiss-errors.d.ts +25 -0
  213. package/dist/operations/dismiss-errors.d.ts.map +1 -0
  214. package/dist/operations/dismiss-errors.js +74 -0
  215. package/dist/operations/dismiss-errors.js.map +1 -0
  216. package/dist/operations/dismiss-errors.test.d.ts +2 -0
  217. package/dist/operations/dismiss-errors.test.d.ts.map +1 -0
  218. package/dist/operations/dismiss-errors.test.js +183 -0
  219. package/dist/operations/dismiss-errors.test.js.map +1 -0
  220. package/dist/operations/endorse-skills.d.ts +10 -0
  221. package/dist/operations/endorse-skills.d.ts.map +1 -0
  222. package/dist/operations/endorse-skills.js +12 -0
  223. package/dist/operations/endorse-skills.js.map +1 -0
  224. package/dist/operations/endorse-skills.test.d.ts +2 -0
  225. package/dist/operations/endorse-skills.test.d.ts.map +1 -0
  226. package/dist/operations/endorse-skills.test.js +70 -0
  227. package/dist/operations/endorse-skills.test.js.map +1 -0
  228. package/dist/operations/enrich-profile.d.ts +18 -0
  229. package/dist/operations/enrich-profile.d.ts.map +1 -0
  230. package/dist/operations/enrich-profile.js +15 -0
  231. package/dist/operations/enrich-profile.js.map +1 -0
  232. package/dist/operations/enrich-profile.test.d.ts +2 -0
  233. package/dist/operations/enrich-profile.test.d.ts.map +1 -0
  234. package/dist/operations/enrich-profile.test.js +73 -0
  235. package/dist/operations/enrich-profile.test.js.map +1 -0
  236. package/dist/operations/ephemeral-action.d.ts +22 -0
  237. package/dist/operations/ephemeral-action.d.ts.map +1 -0
  238. package/dist/operations/ephemeral-action.js +28 -0
  239. package/dist/operations/ephemeral-action.js.map +1 -0
  240. package/dist/operations/ephemeral-action.test.d.ts +2 -0
  241. package/dist/operations/ephemeral-action.test.d.ts.map +1 -0
  242. package/dist/operations/ephemeral-action.test.js +140 -0
  243. package/dist/operations/ephemeral-action.test.js.map +1 -0
  244. package/dist/operations/follow-person.d.ts +9 -0
  245. package/dist/operations/follow-person.d.ts.map +1 -0
  246. package/dist/operations/follow-person.js +11 -0
  247. package/dist/operations/follow-person.js.map +1 -0
  248. package/dist/operations/follow-person.test.d.ts +2 -0
  249. package/dist/operations/follow-person.test.d.ts.map +1 -0
  250. package/dist/operations/follow-person.test.js +57 -0
  251. package/dist/operations/follow-person.test.js.map +1 -0
  252. package/dist/operations/get-action-budget.d.ts +6 -0
  253. package/dist/operations/get-action-budget.d.ts.map +1 -0
  254. package/dist/operations/get-action-budget.js +19 -0
  255. package/dist/operations/get-action-budget.js.map +1 -0
  256. package/dist/operations/get-action-budget.test.d.ts +2 -0
  257. package/dist/operations/get-action-budget.test.d.ts.map +1 -0
  258. package/dist/operations/get-action-budget.test.js +79 -0
  259. package/dist/operations/get-action-budget.test.js.map +1 -0
  260. package/dist/operations/get-errors.d.ts +14 -4
  261. package/dist/operations/get-errors.d.ts.map +1 -1
  262. package/dist/operations/get-errors.js +72 -13
  263. package/dist/operations/get-errors.js.map +1 -1
  264. package/dist/operations/get-errors.test.js +108 -43
  265. package/dist/operations/get-errors.test.js.map +1 -1
  266. package/dist/operations/get-feed.d.ts +112 -0
  267. package/dist/operations/get-feed.d.ts.map +1 -0
  268. package/dist/operations/get-feed.js +467 -0
  269. package/dist/operations/get-feed.js.map +1 -0
  270. package/dist/operations/get-feed.test.d.ts +2 -0
  271. package/dist/operations/get-feed.test.d.ts.map +1 -0
  272. package/dist/operations/get-feed.test.js +502 -0
  273. package/dist/operations/get-feed.test.js.map +1 -0
  274. package/dist/operations/get-post-engagers.d.ts +43 -0
  275. package/dist/operations/get-post-engagers.d.ts.map +1 -0
  276. package/dist/operations/get-post-engagers.js +328 -0
  277. package/dist/operations/get-post-engagers.js.map +1 -0
  278. package/dist/operations/get-post-engagers.test.d.ts +2 -0
  279. package/dist/operations/get-post-engagers.test.d.ts.map +1 -0
  280. package/dist/operations/get-post-engagers.test.js +297 -0
  281. package/dist/operations/get-post-engagers.test.js.map +1 -0
  282. package/dist/operations/get-post-stats.d.ts +43 -0
  283. package/dist/operations/get-post-stats.d.ts.map +1 -0
  284. package/dist/operations/get-post-stats.js +164 -0
  285. package/dist/operations/get-post-stats.js.map +1 -0
  286. package/dist/operations/get-post-stats.test.d.ts +2 -0
  287. package/dist/operations/get-post-stats.test.d.ts.map +1 -0
  288. package/dist/operations/get-post-stats.test.js +169 -0
  289. package/dist/operations/get-post-stats.test.js.map +1 -0
  290. package/dist/operations/get-post.d.ts +42 -0
  291. package/dist/operations/get-post.d.ts.map +1 -0
  292. package/dist/operations/get-post.js +416 -0
  293. package/dist/operations/get-post.js.map +1 -0
  294. package/dist/operations/get-post.test.d.ts +2 -0
  295. package/dist/operations/get-post.test.d.ts.map +1 -0
  296. package/dist/operations/get-post.test.js +272 -0
  297. package/dist/operations/get-post.test.js.map +1 -0
  298. package/dist/operations/get-profile-activity.d.ts +50 -0
  299. package/dist/operations/get-profile-activity.d.ts.map +1 -0
  300. package/dist/operations/get-profile-activity.js +381 -0
  301. package/dist/operations/get-profile-activity.js.map +1 -0
  302. package/dist/operations/get-profile-activity.test.d.ts +2 -0
  303. package/dist/operations/get-profile-activity.test.d.ts.map +1 -0
  304. package/dist/operations/get-profile-activity.test.js +324 -0
  305. package/dist/operations/get-profile-activity.test.js.map +1 -0
  306. package/dist/operations/get-throttle-status.d.ts +6 -0
  307. package/dist/operations/get-throttle-status.d.ts.map +1 -0
  308. package/dist/operations/get-throttle-status.js +24 -0
  309. package/dist/operations/get-throttle-status.js.map +1 -0
  310. package/dist/operations/get-throttle-status.test.d.ts +2 -0
  311. package/dist/operations/get-throttle-status.test.d.ts.map +1 -0
  312. package/dist/operations/get-throttle-status.test.js +62 -0
  313. package/dist/operations/get-throttle-status.test.js.map +1 -0
  314. package/dist/operations/import-people-from-collection.d.ts +1 -1
  315. package/dist/operations/import-people-from-collection.d.ts.map +1 -1
  316. package/dist/operations/import-people-from-collection.js +3 -6
  317. package/dist/operations/import-people-from-collection.js.map +1 -1
  318. package/dist/operations/import-people-from-urls.d.ts +1 -1
  319. package/dist/operations/import-people-from-urls.d.ts.map +1 -1
  320. package/dist/operations/import-people-from-urls.js +3 -6
  321. package/dist/operations/import-people-from-urls.js.map +1 -1
  322. package/dist/operations/index.d.ts +23 -1
  323. package/dist/operations/index.d.ts.map +1 -1
  324. package/dist/operations/index.js +33 -0
  325. package/dist/operations/index.js.map +1 -1
  326. package/dist/operations/like-person-posts.d.ts +14 -0
  327. package/dist/operations/like-person-posts.d.ts.map +1 -0
  328. package/dist/operations/like-person-posts.js +28 -0
  329. package/dist/operations/like-person-posts.js.map +1 -0
  330. package/dist/operations/like-person-posts.test.d.ts +2 -0
  331. package/dist/operations/like-person-posts.test.d.ts.map +1 -0
  332. package/dist/operations/like-person-posts.test.js +103 -0
  333. package/dist/operations/like-person-posts.test.js.map +1 -0
  334. package/dist/operations/list-collections.d.ts +1 -1
  335. package/dist/operations/list-collections.d.ts.map +1 -1
  336. package/dist/operations/list-collections.js +3 -6
  337. package/dist/operations/list-collections.js.map +1 -1
  338. package/dist/operations/message-person.d.ts +11 -0
  339. package/dist/operations/message-person.d.ts.map +1 -0
  340. package/dist/operations/message-person.js +19 -0
  341. package/dist/operations/message-person.js.map +1 -0
  342. package/dist/operations/message-person.test.d.ts +2 -0
  343. package/dist/operations/message-person.test.d.ts.map +1 -0
  344. package/dist/operations/message-person.test.js +108 -0
  345. package/dist/operations/message-person.test.js.map +1 -0
  346. package/dist/operations/navigate-away.d.ts +14 -0
  347. package/dist/operations/navigate-away.d.ts.map +1 -0
  348. package/dist/operations/navigate-away.js +24 -0
  349. package/dist/operations/navigate-away.js.map +1 -0
  350. package/dist/operations/navigate-away.test.d.ts +2 -0
  351. package/dist/operations/navigate-away.test.d.ts.map +1 -0
  352. package/dist/operations/navigate-away.test.js +51 -0
  353. package/dist/operations/navigate-away.test.js.map +1 -0
  354. package/dist/operations/query-messages.d.ts +1 -1
  355. package/dist/operations/query-messages.d.ts.map +1 -1
  356. package/dist/operations/query-messages.js +3 -6
  357. package/dist/operations/query-messages.js.map +1 -1
  358. package/dist/operations/react-to-post.d.ts +41 -0
  359. package/dist/operations/react-to-post.d.ts.map +1 -0
  360. package/dist/operations/react-to-post.js +80 -0
  361. package/dist/operations/react-to-post.js.map +1 -0
  362. package/dist/operations/react-to-post.test.d.ts +2 -0
  363. package/dist/operations/react-to-post.test.d.ts.map +1 -0
  364. package/dist/operations/react-to-post.test.js +157 -0
  365. package/dist/operations/react-to-post.test.js.map +1 -0
  366. package/dist/operations/remove-connection.d.ts +6 -0
  367. package/dist/operations/remove-connection.d.ts.map +1 -0
  368. package/dist/operations/remove-connection.js +7 -0
  369. package/dist/operations/remove-connection.js.map +1 -0
  370. package/dist/operations/remove-connection.test.d.ts +2 -0
  371. package/dist/operations/remove-connection.test.d.ts.map +1 -0
  372. package/dist/operations/remove-connection.test.js +45 -0
  373. package/dist/operations/remove-connection.test.js.map +1 -0
  374. package/dist/operations/remove-people-from-collection.d.ts +1 -1
  375. package/dist/operations/remove-people-from-collection.d.ts.map +1 -1
  376. package/dist/operations/remove-people-from-collection.js +3 -6
  377. package/dist/operations/remove-people-from-collection.js.map +1 -1
  378. package/dist/operations/resolve-linkedin-entity.d.ts.map +1 -1
  379. package/dist/operations/resolve-linkedin-entity.js +2 -2
  380. package/dist/operations/resolve-linkedin-entity.js.map +1 -1
  381. package/dist/operations/resolve-linkedin-entity.test.d.ts +2 -0
  382. package/dist/operations/resolve-linkedin-entity.test.d.ts.map +1 -0
  383. package/dist/operations/resolve-linkedin-entity.test.js +343 -0
  384. package/dist/operations/resolve-linkedin-entity.test.js.map +1 -0
  385. package/dist/operations/scrape-messaging-history.d.ts +2 -1
  386. package/dist/operations/scrape-messaging-history.d.ts.map +1 -1
  387. package/dist/operations/scrape-messaging-history.js +121 -18
  388. package/dist/operations/scrape-messaging-history.js.map +1 -1
  389. package/dist/operations/scrape-messaging-history.test.js +134 -12
  390. package/dist/operations/scrape-messaging-history.test.js.map +1 -1
  391. package/dist/operations/search-posts.d.ts +51 -0
  392. package/dist/operations/search-posts.d.ts.map +1 -0
  393. package/dist/operations/search-posts.js +419 -0
  394. package/dist/operations/search-posts.js.map +1 -0
  395. package/dist/operations/search-posts.test.d.ts +2 -0
  396. package/dist/operations/search-posts.test.d.ts.map +1 -0
  397. package/dist/operations/search-posts.test.js +300 -0
  398. package/dist/operations/search-posts.test.js.map +1 -0
  399. package/dist/operations/send-inmail.d.ts +11 -0
  400. package/dist/operations/send-inmail.d.ts.map +1 -0
  401. package/dist/operations/send-inmail.js +19 -0
  402. package/dist/operations/send-inmail.js.map +1 -0
  403. package/dist/operations/send-inmail.test.d.ts +2 -0
  404. package/dist/operations/send-inmail.test.d.ts.map +1 -0
  405. package/dist/operations/send-inmail.test.js +108 -0
  406. package/dist/operations/send-inmail.test.js.map +1 -0
  407. package/dist/operations/send-invite.d.ts +9 -0
  408. package/dist/operations/send-invite.d.ts.map +1 -0
  409. package/dist/operations/send-invite.js +14 -0
  410. package/dist/operations/send-invite.js.map +1 -0
  411. package/dist/operations/send-invite.test.d.ts +2 -0
  412. package/dist/operations/send-invite.test.d.ts.map +1 -0
  413. package/dist/operations/send-invite.test.js +59 -0
  414. package/dist/operations/send-invite.test.js.map +1 -0
  415. package/dist/operations/types.d.ts +24 -1
  416. package/dist/operations/types.d.ts.map +1 -1
  417. package/dist/operations/types.js +13 -1
  418. package/dist/operations/types.js.map +1 -1
  419. package/dist/operations/visit-profile.d.ts +14 -0
  420. package/dist/operations/visit-profile.d.ts.map +1 -0
  421. package/dist/operations/visit-profile.js +46 -0
  422. package/dist/operations/visit-profile.js.map +1 -0
  423. package/dist/operations/visit-profile.test.d.ts +2 -0
  424. package/dist/operations/visit-profile.test.d.ts.map +1 -0
  425. package/dist/operations/visit-profile.test.js +193 -0
  426. package/dist/operations/visit-profile.test.js.map +1 -0
  427. package/dist/services/account-resolution.d.ts +9 -4
  428. package/dist/services/account-resolution.d.ts.map +1 -1
  429. package/dist/services/account-resolution.js +60 -5
  430. package/dist/services/account-resolution.js.map +1 -1
  431. package/dist/services/app.d.ts +6 -2
  432. package/dist/services/app.d.ts.map +1 -1
  433. package/dist/services/app.js +18 -6
  434. package/dist/services/app.js.map +1 -1
  435. package/dist/services/app.test.js +41 -7
  436. package/dist/services/app.test.js.map +1 -1
  437. package/dist/services/campaign.d.ts +44 -2
  438. package/dist/services/campaign.d.ts.map +1 -1
  439. package/dist/services/campaign.js +124 -1
  440. package/dist/services/campaign.js.map +1 -1
  441. package/dist/services/collection.d.ts +5 -2
  442. package/dist/services/collection.d.ts.map +1 -1
  443. package/dist/services/collection.js +24 -5
  444. package/dist/services/collection.js.map +1 -1
  445. package/dist/services/collection.test.js +51 -9
  446. package/dist/services/collection.test.js.map +1 -1
  447. package/dist/services/ephemeral-campaign.d.ts +64 -0
  448. package/dist/services/ephemeral-campaign.d.ts.map +1 -0
  449. package/dist/services/ephemeral-campaign.js +210 -0
  450. package/dist/services/ephemeral-campaign.js.map +1 -0
  451. package/dist/services/ephemeral-campaign.test.d.ts +2 -0
  452. package/dist/services/ephemeral-campaign.test.d.ts.map +1 -0
  453. package/dist/services/ephemeral-campaign.test.js +333 -0
  454. package/dist/services/ephemeral-campaign.test.js.map +1 -0
  455. package/dist/services/errors.d.ts +12 -1
  456. package/dist/services/errors.d.ts.map +1 -1
  457. package/dist/services/errors.js +26 -3
  458. package/dist/services/errors.js.map +1 -1
  459. package/dist/services/index.d.ts +2 -1
  460. package/dist/services/index.d.ts.map +1 -1
  461. package/dist/services/index.js +2 -1
  462. package/dist/services/index.js.map +1 -1
  463. package/dist/services/instance-context.d.ts +5 -1
  464. package/dist/services/instance-context.d.ts.map +1 -1
  465. package/dist/services/instance-context.js +87 -20
  466. package/dist/services/instance-context.js.map +1 -1
  467. package/dist/services/instance-context.test.js +82 -2
  468. package/dist/services/instance-context.test.js.map +1 -1
  469. package/dist/services/instance-lifecycle.d.ts.map +1 -1
  470. package/dist/services/instance-lifecycle.js +32 -1
  471. package/dist/services/instance-lifecycle.js.map +1 -1
  472. package/dist/services/instance-lifecycle.test.js +52 -1
  473. package/dist/services/instance-lifecycle.test.js.map +1 -1
  474. package/dist/services/instance.d.ts +43 -0
  475. package/dist/services/instance.d.ts.map +1 -1
  476. package/dist/services/instance.js +163 -1
  477. package/dist/services/instance.js.map +1 -1
  478. package/dist/services/instance.test.js +135 -0
  479. package/dist/services/instance.test.js.map +1 -1
  480. package/dist/services/launcher.d.ts +54 -3
  481. package/dist/services/launcher.d.ts.map +1 -1
  482. package/dist/services/launcher.js +223 -34
  483. package/dist/services/launcher.js.map +1 -1
  484. package/dist/services/launcher.test.js +133 -6
  485. package/dist/services/launcher.test.js.map +1 -1
  486. package/dist/services/status.d.ts +6 -2
  487. package/dist/services/status.d.ts.map +1 -1
  488. package/dist/services/status.js +67 -34
  489. package/dist/services/status.js.map +1 -1
  490. package/dist/services/status.test.js +9 -2
  491. package/dist/services/status.test.js.map +1 -1
  492. package/dist/testing/e2e-helpers.d.ts +23 -1
  493. package/dist/testing/e2e-helpers.d.ts.map +1 -1
  494. package/dist/testing/e2e-helpers.js +110 -5
  495. package/dist/testing/e2e-helpers.js.map +1 -1
  496. package/dist/testing/index.d.ts +1 -1
  497. package/dist/testing/index.d.ts.map +1 -1
  498. package/dist/testing/index.js +1 -1
  499. package/dist/testing/index.js.map +1 -1
  500. package/dist/types/account.d.ts +1 -1
  501. package/dist/types/action-budget.d.ts +52 -0
  502. package/dist/types/action-budget.d.ts.map +1 -0
  503. package/dist/types/action-budget.js +4 -0
  504. package/dist/types/action-budget.js.map +1 -0
  505. package/dist/types/campaign.d.ts +24 -0
  506. package/dist/types/campaign.d.ts.map +1 -1
  507. package/dist/types/feed.d.ts +30 -0
  508. package/dist/types/feed.d.ts.map +1 -0
  509. package/dist/types/feed.js +4 -0
  510. package/dist/types/feed.js.map +1 -0
  511. package/dist/types/index.d.ts +6 -2
  512. package/dist/types/index.d.ts.map +1 -1
  513. package/dist/types/post-analytics.d.ts +40 -0
  514. package/dist/types/post-analytics.d.ts.map +1 -0
  515. package/dist/types/post-analytics.js +4 -0
  516. package/dist/types/post-analytics.js.map +1 -0
  517. package/dist/types/post.d.ts +43 -0
  518. package/dist/types/post.d.ts.map +1 -0
  519. package/dist/types/post.js +4 -0
  520. package/dist/types/post.js.map +1 -0
  521. package/dist/types/ui-health.d.ts +16 -0
  522. package/dist/types/ui-health.d.ts.map +1 -1
  523. package/dist/utils/cdp-port.d.ts.map +1 -1
  524. package/dist/utils/cdp-port.js +3 -1
  525. package/dist/utils/cdp-port.js.map +1 -1
  526. package/dist/utils/cdp-port.test.js +1 -1
  527. package/dist/utils/cdp-port.test.js.map +1 -1
  528. package/dist/utils/delay.d.ts +79 -0
  529. package/dist/utils/delay.d.ts.map +1 -1
  530. package/dist/utils/delay.js +118 -0
  531. package/dist/utils/delay.js.map +1 -1
  532. package/dist/utils/delay.test.js +111 -1
  533. package/dist/utils/delay.test.js.map +1 -1
  534. package/dist/utils/index.d.ts +2 -1
  535. package/dist/utils/index.d.ts.map +1 -1
  536. package/dist/utils/index.js +2 -1
  537. package/dist/utils/index.js.map +1 -1
  538. package/dist/utils/session-pacer.d.ts +27 -0
  539. package/dist/utils/session-pacer.d.ts.map +1 -0
  540. package/dist/utils/session-pacer.js +55 -0
  541. package/dist/utils/session-pacer.js.map +1 -0
  542. package/dist/utils/session-pacer.test.d.ts +2 -0
  543. package/dist/utils/session-pacer.test.d.ts.map +1 -0
  544. package/dist/utils/session-pacer.test.js +111 -0
  545. package/dist/utils/session-pacer.test.js.map +1 -0
  546. package/package.json +1 -1
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A post from the LinkedIn home feed or profile activity stream.
3
+ */
4
+ export interface FeedPost {
5
+ /** Direct URL to the post on LinkedIn, or `null` when URL extraction failed. */
6
+ readonly url: string | null;
7
+ /** Display name of the post author. */
8
+ readonly authorName: string | null;
9
+ /** Professional headline of the author, if available. */
10
+ readonly authorHeadline: string | null;
11
+ /** URL to the author's LinkedIn profile, if available. */
12
+ readonly authorProfileUrl: string | null;
13
+ /** Author LinkedIn public ID (vanity URL slug), if available. */
14
+ readonly authorPublicId: string | null;
15
+ /** Text content of the post, if any. */
16
+ readonly text: string | null;
17
+ /** Type of media attached to the post (e.g. `image`, `video`, `article`, `document`), if any. */
18
+ readonly mediaType: string | null;
19
+ /** Total number of reactions on the post. */
20
+ readonly reactionCount: number;
21
+ /** Total number of comments on the post. */
22
+ readonly commentCount: number;
23
+ /** Total number of shares/reposts. */
24
+ readonly shareCount: number;
25
+ /** Post creation timestamp in milliseconds since epoch, if available. */
26
+ readonly timestamp: number | null;
27
+ /** Hashtags extracted from the post text. */
28
+ readonly hashtags: readonly string[];
29
+ }
30
+ //# sourceMappingURL=feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/types/feed.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,0DAA0D;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iGAAiG;IACjG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC"}
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ export {};
4
+ //# sourceMappingURL=feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/types/feed.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC"}
@@ -1,9 +1,13 @@
1
+ export type { ActionBudget, ActionBudgetEntry, LimitType, ThrottleStatus, } from "./action-budget.js";
1
2
  export type { CurrentPosition, Education, ExternalId, ExternalIdTypeGroup, MiniProfile, Position, Profile, ProfileFindOptions, ProfileSearchOptions, ProfileSearchResult, ProfileSummary, Skill, } from "./profile.js";
2
3
  export type { InstanceInfo, InstanceStatus, StartInstanceParams, StartInstanceResult, } from "./instance.js";
3
4
  export type { Account } from "./account.js";
4
5
  export type { Chat, ChatParticipant, ConversationMessages, ConversationThread, Message, MessageStats, MessageSummary, } from "./messaging.js";
5
- export type { CriticalErrorIssueData, DialogIssueData, InstanceIssue, PopupState, UIHealthStatus, } from "./ui-health.js";
6
+ export type { CriticalErrorIssueData, DialogIssueData, InstanceIssue, InstancePopup, PopupState, UIHealthStatus, } from "./ui-health.js";
7
+ export type { FeedPost } from "./feed.js";
8
+ export type { PostEngager, PostStats, ReactionCount, } from "./post-analytics.js";
9
+ export type { PostComment, PostDetail } from "./post.js";
6
10
  export type { SourceTier, SourceType } from "./collection.js";
7
11
  export type { BasicSearchParams, BooleanExpressionInput, BooleanExpressionRaw, BooleanExpressionStructured, CompanySizeEntry, ConnectionDegreeEntry, EntityMatch, EntityType, FunctionEntry, IndustryEntry, ProfileLanguageEntry, ReferenceDataType, SNFilter, SNFilterValue, SNSearchParams, SeniorityEntry, UrlBuilderResult, } from "./linkedin-url.js";
8
- export type { ActionConfig, ActionErrorSummary, ActionPeopleCounts, ActionStatistics, CampaignActionConfig, CampaignActionResult, CampaignActionUpdateConfig, ActionSettings, ActionTargetPerson, Campaign, CampaignAction, CampaignConfig, CampaignPersonEntry, CampaignPersonState, CampaignRunResult, CampaignState, ResultProfileData, CampaignStatistics, CampaignUpdateConfig, ExcludeListEntry, GetResultsOptions, GetStatisticsOptions, ImportPeopleResult, RemovePeopleResult, CampaignStatus, CampaignSummary, ListCampaignPeopleOptions, ListCampaignsOptions, RunnerState, } from "./campaign.js";
12
+ export type { ActionConfig, ActionErrorSummary, ActionPeopleCounts, ActionStatistics, CampaignActionConfig, CampaignActionResult, CampaignActionUpdateConfig, ActionSettings, ActionTargetPerson, Campaign, CampaignAction, CampaignConfig, CampaignPersonEntry, CampaignPersonState, CampaignRunResult, CampaignState, EphemeralActionResult, EphemeralExecuteOptions, ResultProfileData, CampaignStatistics, CampaignUpdateConfig, ExcludeListEntry, GetResultsOptions, GetStatisticsOptions, ImportPeopleResult, RemovePeopleResult, CampaignStatus, CampaignSummary, ListCampaignPeopleOptions, ListCampaignsOptions, RunnerState, } from "./campaign.js";
9
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EACV,IAAI,EACJ,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE9D,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,GACZ,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EACV,IAAI,EACJ,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,YAAY,EACV,WAAW,EACX,SAAS,EACT,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEzD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE9D,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,GACZ,MAAM,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Engagement statistics for a LinkedIn post.
3
+ */
4
+ export interface PostStats {
5
+ /** The resolved post URN (e.g. `urn:li:activity:1234567890`). */
6
+ readonly postUrn: string;
7
+ /** Total number of reactions. */
8
+ readonly reactionCount: number;
9
+ /** Reactions broken down by type. */
10
+ readonly reactionsByType: readonly ReactionCount[];
11
+ /** Total number of comments. */
12
+ readonly commentCount: number;
13
+ /** Total number of shares/reposts. */
14
+ readonly shareCount: number;
15
+ }
16
+ /**
17
+ * Reaction count for a specific reaction type.
18
+ */
19
+ export interface ReactionCount {
20
+ /** LinkedIn reaction type (e.g. `LIKE`, `PRAISE`, `EMPATHY`, `ENTERTAINMENT`, `INTEREST`, `APPRECIATION`). */
21
+ readonly type: string;
22
+ /** Number of reactions of this type. */
23
+ readonly count: number;
24
+ }
25
+ /**
26
+ * A person who engaged with a post (reacted, commented, etc.).
27
+ */
28
+ export interface PostEngager {
29
+ /** First name of the engager. */
30
+ readonly firstName: string;
31
+ /** Last name of the engager. */
32
+ readonly lastName: string;
33
+ /** LinkedIn public profile ID (vanity URL slug), if available. */
34
+ readonly publicId: string | null;
35
+ /** Professional headline. */
36
+ readonly headline: string | null;
37
+ /** Engagement type (e.g. `LIKE`, `PRAISE`, `EMPATHY`). */
38
+ readonly engagementType: string;
39
+ }
40
+ //# sourceMappingURL=post-analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-analytics.d.ts","sourceRoot":"","sources":["../../src/types/post-analytics.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qCAAqC;IACrC,QAAQ,CAAC,eAAe,EAAE,SAAS,aAAa,EAAE,CAAC;IACnD,gCAAgC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8GAA8G;IAC9G,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC"}
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ export {};
4
+ //# sourceMappingURL=post-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-analytics.js","sourceRoot":"","sources":["../../src/types/post-analytics.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Detailed data for a single LinkedIn post.
3
+ */
4
+ export interface PostDetail {
5
+ /** The resolved post URN (e.g. `urn:li:activity:1234567890`). */
6
+ readonly postUrn: string;
7
+ /** Author display name. */
8
+ readonly authorName: string;
9
+ /** Author professional headline. */
10
+ readonly authorHeadline: string | null;
11
+ /** Author LinkedIn public profile ID (vanity URL slug), if available. */
12
+ readonly authorPublicId: string | null;
13
+ /** Post text content. */
14
+ readonly text: string;
15
+ /** Epoch milliseconds when the post was published, if available. */
16
+ readonly publishedAt: number | null;
17
+ /** Total number of reactions. */
18
+ readonly reactionCount: number;
19
+ /** Total number of comments. */
20
+ readonly commentCount: number;
21
+ /** Total number of shares/reposts. */
22
+ readonly shareCount: number;
23
+ }
24
+ /**
25
+ * A comment on a LinkedIn post.
26
+ */
27
+ export interface PostComment {
28
+ /** Comment URN identifier. */
29
+ readonly commentUrn: string | null;
30
+ /** Author display name. */
31
+ readonly authorName: string;
32
+ /** Author professional headline. */
33
+ readonly authorHeadline: string | null;
34
+ /** Author LinkedIn public profile ID (vanity URL slug), if available. */
35
+ readonly authorPublicId: string | null;
36
+ /** Comment text content. */
37
+ readonly text: string;
38
+ /** Epoch milliseconds when the comment was created, if available. */
39
+ readonly createdAt: number | null;
40
+ /** Number of reactions on this comment. */
41
+ readonly reactionCount: number;
42
+ }
43
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/types/post.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,iCAAiC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2CAA2C;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC"}
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ export {};
4
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/types/post.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC"}
@@ -46,6 +46,20 @@ export interface PopupState {
46
46
  /** Whether the popup can be closed by the user. */
47
47
  readonly closable?: boolean;
48
48
  }
49
+ /**
50
+ * A popup detected in the LinkedHelper instance UI DOM.
51
+ *
52
+ * Instance popups render behind the LinkedIn webview and are invisible
53
+ * to the user. They can block operations without any visible indication.
54
+ */
55
+ export interface InstancePopup {
56
+ /** The popup title text (e.g., "Failed to initialize UI"). */
57
+ readonly title: string;
58
+ /** The popup body/description text, if available. */
59
+ readonly description?: string;
60
+ /** Whether the popup is dismissable (has actionable controls to close or dismiss it). */
61
+ readonly closable: boolean;
62
+ }
49
63
  /**
50
64
  * Aggregated UI health status for a LinkedHelper instance.
51
65
  */
@@ -56,5 +70,7 @@ export interface UIHealthStatus {
56
70
  readonly issues: readonly InstanceIssue[];
57
71
  /** Current popup overlay state, or `null` if no popup is present. */
58
72
  readonly popup: PopupState | null;
73
+ /** Popups detected in the instance UI DOM. */
74
+ readonly instancePopups: readonly InstancePopup[];
59
75
  }
60
76
  //# sourceMappingURL=ui-health.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-health.d.ts","sourceRoot":"","sources":["../../src/types/ui-health.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;YAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAEpG;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CACnC"}
1
+ {"version":3,"file":"ui-health.d.ts","sourceRoot":"","sources":["../../src/types/ui-health.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;YAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAEpG;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;CACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-port.d.ts","sourceRoot":"","sources":["../../src/utils/cdp-port.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS9D"}
1
+ {"version":3,"file":"cdp-port.d.ts","sourceRoot":"","sources":["../../src/utils/cdp-port.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU9D"}
@@ -1,11 +1,13 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright (C) 2026 Oleksii PELYKH
3
+ /** Timeout for CDP port probe requests (ms). */
4
+ const PROBE_TIMEOUT = 3_000;
3
5
  /**
4
6
  * Check whether a port exposes a CDP `/json/list` endpoint.
5
7
  */
6
8
  export async function isCdpPort(port) {
7
9
  try {
8
- const response = await fetch(`http://127.0.0.1:${String(port)}/json/list`);
10
+ const response = await fetch(`http://127.0.0.1:${String(port)}/json/list`, { signal: AbortSignal.timeout(PROBE_TIMEOUT) });
9
11
  return response.ok;
10
12
  }
11
13
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-port.js","sourceRoot":"","sources":["../../src/utils/cdp-port.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,oBAAoB,MAAM,CAAC,IAAI,CAAC,YAAY,CAC7C,CAAC;QACF,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cdp-port.js","sourceRoot":"","sources":["../../src/utils/cdp-port.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,gDAAgD;AAChD,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,oBAAoB,MAAM,CAAC,IAAI,CAAC,YAAY,EAC5C,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAC/C,CAAC;QACF,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -9,7 +9,7 @@ describe("isCdpPort", () => {
9
9
  it("should return true when the port responds with ok", async () => {
10
10
  vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: true }));
11
11
  expect(await isCdpPort(9222)).toBe(true);
12
- expect(fetch).toHaveBeenCalledWith("http://127.0.0.1:9222/json/list");
12
+ expect(fetch).toHaveBeenCalledWith("http://127.0.0.1:9222/json/list", expect.objectContaining({ signal: expect.any(AbortSignal) }));
13
13
  });
14
14
  it("should return false when the port responds with non-ok", async () => {
15
15
  vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: false }));
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-port.test.js","sourceRoot":"","sources":["../../src/utils/cdp-port.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CACxC,CAAC;QAEF,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CACzC,CAAC;QAEF,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CACrD,CAAC;QAEF,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cdp-port.test.js","sourceRoot":"","sources":["../../src/utils/cdp-port.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CACxC,CAAC;QAEF,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAChC,iCAAiC,EACjC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CACzC,CAAC;QAEF,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CACrD,CAAC;QAEF,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -2,4 +2,83 @@
2
2
  * Return a promise that resolves after the given number of milliseconds.
3
3
  */
4
4
  export declare function delay(ms: number): Promise<void>;
5
+ /**
6
+ * Return a promise that resolves after a random delay between `min` and `max` milliseconds.
7
+ *
8
+ * This mimics human timing variations such as thinking pauses and
9
+ * visual scanning between UI interactions.
10
+ */
11
+ export declare function randomDelay(min: number, max: number): Promise<void>;
12
+ /**
13
+ * Return a random number between `min` and `max` (inclusive of min, exclusive of max).
14
+ *
15
+ * Useful for randomising scroll distances, coordinate offsets, and other
16
+ * non-delay numeric values that benefit from human-like variation.
17
+ */
18
+ export declare function randomBetween(min: number, max: number): number;
19
+ /**
20
+ * With the given probability (default 12%), insert a random pause of 500–2000 ms.
21
+ *
22
+ * Simulates the irregular micro-pauses humans exhibit: hovering briefly,
23
+ * momentarily slowing, or pausing before deciding to act. Breaks
24
+ * statistical uniformity in timing patterns without adding significant
25
+ * average time.
26
+ */
27
+ export declare function maybeHesitate(probability?: number): Promise<void>;
28
+ /**
29
+ * With the given probability (default 4%), insert a longer pause of 2–12 s.
30
+ *
31
+ * Simulates the natural micro-breaks humans take during extended browsing
32
+ * sessions: checking another tab, reading a notification, sipping coffee.
33
+ * Intended for use inside long scroll or extraction loops to break up
34
+ * otherwise rhythmic interaction patterns.
35
+ */
36
+ export declare function maybeBreak(probability?: number): Promise<void>;
37
+ /**
38
+ * Return a normally-distributed random number using the Box-Muller transform.
39
+ *
40
+ * The result is centered on `mean` with the given `stdDev`. Unlike
41
+ * uniform `Math.random()`, this produces a bell-curve distribution
42
+ * that more closely models human timing variance.
43
+ */
44
+ export declare function gaussianRandom(mean: number, stdDev: number): number;
45
+ /**
46
+ * Return a promise that resolves after a Gaussian-distributed delay.
47
+ *
48
+ * The delay is drawn from a normal distribution centered on `mean` with
49
+ * the given `stdDev`, then clamped to `[min, max]`. This produces more
50
+ * human-like timing than uniform random — most delays cluster near the
51
+ * mean with occasional faster or slower outliers.
52
+ *
53
+ * @param mean - Center of the distribution in milliseconds.
54
+ * @param stdDev - Standard deviation in milliseconds.
55
+ * @param min - Minimum delay in milliseconds (default: 0).
56
+ * @param max - Maximum delay in milliseconds (default: Infinity).
57
+ */
58
+ export declare function gaussianDelay(mean: number, stdDev: number, min?: number, max?: number): Promise<void>;
59
+ /**
60
+ * Return a Gaussian-distributed numeric value clamped to `[min, max]`.
61
+ *
62
+ * Useful for randomising scroll distances, coordinate offsets, and other
63
+ * non-delay numeric values that benefit from human-like variation.
64
+ *
65
+ * @param mean - Center of the distribution.
66
+ * @param stdDev - Standard deviation.
67
+ * @param min - Minimum value.
68
+ * @param max - Maximum value.
69
+ */
70
+ export declare function gaussianBetween(mean: number, stdDev: number, min: number, max: number): number;
71
+ /**
72
+ * Simulate reading time proportional to content length.
73
+ *
74
+ * Models a human scanning visible content at approximately 250 words per
75
+ * minute (assuming ~5 characters per word). Only a fraction of the full
76
+ * reading time is used (default 30%) because users skim rather than read
77
+ * every word. The result is drawn from a Gaussian distribution centered
78
+ * on the computed reading time, clamped to `[500, 8000]` ms.
79
+ *
80
+ * @param contentLength - Approximate character count of the visible content.
81
+ * @param readFraction - Fraction of full reading time to simulate (default: 0.3).
82
+ */
83
+ export declare function simulateReadingTime(contentLength: number, readFraction?: number): Promise<void>;
5
84
  //# sourceMappingURL=delay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delay.d.ts","sourceRoot":"","sources":["../../src/utils/delay.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
1
+ {"version":3,"file":"delay.d.ts","sourceRoot":"","sources":["../../src/utils/delay.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,WAAW,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/D;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,WAAW,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,SAAI,EACP,GAAG,SAAW,GACb,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,MAAM,CAGR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,YAAY,SAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -6,4 +6,122 @@
6
6
  export function delay(ms) {
7
7
  return new Promise((resolve) => setTimeout(resolve, ms));
8
8
  }
9
+ /**
10
+ * Return a promise that resolves after a random delay between `min` and `max` milliseconds.
11
+ *
12
+ * This mimics human timing variations such as thinking pauses and
13
+ * visual scanning between UI interactions.
14
+ */
15
+ export function randomDelay(min, max) {
16
+ return delay(min + Math.random() * (max - min));
17
+ }
18
+ /**
19
+ * Return a random number between `min` and `max` (inclusive of min, exclusive of max).
20
+ *
21
+ * Useful for randomising scroll distances, coordinate offsets, and other
22
+ * non-delay numeric values that benefit from human-like variation.
23
+ */
24
+ export function randomBetween(min, max) {
25
+ return min + Math.random() * (max - min);
26
+ }
27
+ /**
28
+ * With the given probability (default 12%), insert a random pause of 500–2000 ms.
29
+ *
30
+ * Simulates the irregular micro-pauses humans exhibit: hovering briefly,
31
+ * momentarily slowing, or pausing before deciding to act. Breaks
32
+ * statistical uniformity in timing patterns without adding significant
33
+ * average time.
34
+ */
35
+ export function maybeHesitate(probability = 0.12) {
36
+ if (Math.random() < probability) {
37
+ return gaussianDelay(1_250, 375, 500, 2_000);
38
+ }
39
+ return Promise.resolve();
40
+ }
41
+ /**
42
+ * With the given probability (default 4%), insert a longer pause of 2–12 s.
43
+ *
44
+ * Simulates the natural micro-breaks humans take during extended browsing
45
+ * sessions: checking another tab, reading a notification, sipping coffee.
46
+ * Intended for use inside long scroll or extraction loops to break up
47
+ * otherwise rhythmic interaction patterns.
48
+ */
49
+ export function maybeBreak(probability = 0.04) {
50
+ if (Math.random() < probability) {
51
+ return gaussianDelay(5_000, 2_000, 2_000, 12_000);
52
+ }
53
+ return Promise.resolve();
54
+ }
55
+ /**
56
+ * Return a normally-distributed random number using the Box-Muller transform.
57
+ *
58
+ * The result is centered on `mean` with the given `stdDev`. Unlike
59
+ * uniform `Math.random()`, this produces a bell-curve distribution
60
+ * that more closely models human timing variance.
61
+ */
62
+ export function gaussianRandom(mean, stdDev) {
63
+ // Box-Muller transform: two uniform samples → one normal sample
64
+ let u1;
65
+ let u2;
66
+ do {
67
+ u1 = Math.random();
68
+ u2 = Math.random();
69
+ } while (u1 === 0); // avoid log(0)
70
+ const z = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2);
71
+ return mean + z * stdDev;
72
+ }
73
+ /**
74
+ * Return a promise that resolves after a Gaussian-distributed delay.
75
+ *
76
+ * The delay is drawn from a normal distribution centered on `mean` with
77
+ * the given `stdDev`, then clamped to `[min, max]`. This produces more
78
+ * human-like timing than uniform random — most delays cluster near the
79
+ * mean with occasional faster or slower outliers.
80
+ *
81
+ * @param mean - Center of the distribution in milliseconds.
82
+ * @param stdDev - Standard deviation in milliseconds.
83
+ * @param min - Minimum delay in milliseconds (default: 0).
84
+ * @param max - Maximum delay in milliseconds (default: Infinity).
85
+ */
86
+ export function gaussianDelay(mean, stdDev, min = 0, max = Infinity) {
87
+ const raw = gaussianRandom(mean, stdDev);
88
+ const clamped = Math.max(min, Math.min(max, raw));
89
+ return delay(clamped);
90
+ }
91
+ /**
92
+ * Return a Gaussian-distributed numeric value clamped to `[min, max]`.
93
+ *
94
+ * Useful for randomising scroll distances, coordinate offsets, and other
95
+ * non-delay numeric values that benefit from human-like variation.
96
+ *
97
+ * @param mean - Center of the distribution.
98
+ * @param stdDev - Standard deviation.
99
+ * @param min - Minimum value.
100
+ * @param max - Maximum value.
101
+ */
102
+ export function gaussianBetween(mean, stdDev, min, max) {
103
+ const raw = gaussianRandom(mean, stdDev);
104
+ return Math.max(min, Math.min(max, raw));
105
+ }
106
+ /**
107
+ * Simulate reading time proportional to content length.
108
+ *
109
+ * Models a human scanning visible content at approximately 250 words per
110
+ * minute (assuming ~5 characters per word). Only a fraction of the full
111
+ * reading time is used (default 30%) because users skim rather than read
112
+ * every word. The result is drawn from a Gaussian distribution centered
113
+ * on the computed reading time, clamped to `[500, 8000]` ms.
114
+ *
115
+ * @param contentLength - Approximate character count of the visible content.
116
+ * @param readFraction - Fraction of full reading time to simulate (default: 0.3).
117
+ */
118
+ export function simulateReadingTime(contentLength, readFraction = 0.3) {
119
+ const safeLength = Number.isFinite(contentLength) && contentLength > 0 ? contentLength : 0;
120
+ const safeFraction = Number.isFinite(readFraction)
121
+ ? Math.max(0, Math.min(1, readFraction))
122
+ : 0.3;
123
+ const words = safeLength / 5;
124
+ const readTimeMs = (words / 250) * 60_000 * safeFraction;
125
+ return gaussianDelay(readTimeMs, readTimeMs * 0.3, 500, 8_000);
126
+ }
9
127
  //# sourceMappingURL=delay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delay.js","sourceRoot":"","sources":["../../src/utils/delay.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"delay.js","sourceRoot":"","sources":["../../src/utils/delay.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright (C) 2026 Oleksii PELYKH
3
3
  import { describe, expect, it } from "vitest";
4
- import { delay } from "./delay.js";
4
+ import { delay, randomBetween, maybeHesitate, maybeBreak, gaussianRandom, gaussianBetween, simulateReadingTime, } from "./delay.js";
5
5
  describe("delay", () => {
6
6
  it("should resolve after the given time", async () => {
7
7
  const start = Date.now();
@@ -14,4 +14,114 @@ describe("delay", () => {
14
14
  expect(result).toBeUndefined();
15
15
  });
16
16
  });
17
+ describe("randomBetween", () => {
18
+ it("returns a value within the specified range", () => {
19
+ for (let i = 0; i < 100; i++) {
20
+ const value = randomBetween(10, 20);
21
+ expect(value).toBeGreaterThanOrEqual(10);
22
+ expect(value).toBeLessThan(20);
23
+ }
24
+ });
25
+ it("returns min when range is zero", () => {
26
+ expect(randomBetween(5, 5)).toBe(5);
27
+ });
28
+ });
29
+ describe("gaussianRandom", () => {
30
+ it("produces values with approximately correct mean and stdDev over many samples", () => {
31
+ const mean = 100;
32
+ const stdDev = 25;
33
+ const n = 10_000;
34
+ const samples = [];
35
+ for (let i = 0; i < n; i++) {
36
+ samples.push(gaussianRandom(mean, stdDev));
37
+ }
38
+ const sampleMean = samples.reduce((a, b) => a + b, 0) / n;
39
+ const sampleVariance = samples.reduce((sum, x) => sum + (x - sampleMean) ** 2, 0) / (n - 1);
40
+ const sampleStdDev = Math.sqrt(sampleVariance);
41
+ // Allow ±5% tolerance on mean and ±10% on stdDev
42
+ expect(sampleMean).toBeGreaterThan(mean * 0.95);
43
+ expect(sampleMean).toBeLessThan(mean * 1.05);
44
+ expect(sampleStdDev).toBeGreaterThan(stdDev * 0.9);
45
+ expect(sampleStdDev).toBeLessThan(stdDev * 1.1);
46
+ });
47
+ it("centers on the given mean when stdDev is 0", () => {
48
+ for (let i = 0; i < 100; i++) {
49
+ expect(gaussianRandom(42, 0)).toBe(42);
50
+ }
51
+ });
52
+ });
53
+ describe("gaussianBetween", () => {
54
+ it("always returns values within [min, max]", () => {
55
+ for (let i = 0; i < 1_000; i++) {
56
+ const value = gaussianBetween(500, 100, 300, 700);
57
+ expect(value).toBeGreaterThanOrEqual(300);
58
+ expect(value).toBeLessThanOrEqual(700);
59
+ }
60
+ });
61
+ it("returns min when range is zero", () => {
62
+ expect(gaussianBetween(5, 0, 5, 5)).toBe(5);
63
+ });
64
+ it("clamps values that would exceed bounds", () => {
65
+ // With a very large stdDev, values should still be clamped
66
+ for (let i = 0; i < 100; i++) {
67
+ const value = gaussianBetween(50, 1_000, 0, 100);
68
+ expect(value).toBeGreaterThanOrEqual(0);
69
+ expect(value).toBeLessThanOrEqual(100);
70
+ }
71
+ });
72
+ });
73
+ describe("maybeHesitate", () => {
74
+ it("resolves to undefined", async () => {
75
+ const result = await maybeHesitate(0);
76
+ expect(result).toBeUndefined();
77
+ });
78
+ it("never pauses with probability 0", async () => {
79
+ const start = Date.now();
80
+ await maybeHesitate(0);
81
+ expect(Date.now() - start).toBeLessThan(50);
82
+ });
83
+ });
84
+ describe("maybeBreak", () => {
85
+ it("resolves to undefined", async () => {
86
+ const result = await maybeBreak(0);
87
+ expect(result).toBeUndefined();
88
+ });
89
+ it("never pauses with probability 0", async () => {
90
+ const start = Date.now();
91
+ await maybeBreak(0);
92
+ expect(Date.now() - start).toBeLessThan(50);
93
+ });
94
+ });
95
+ describe("simulateReadingTime", () => {
96
+ it("resolves to undefined", async () => {
97
+ const result = await simulateReadingTime(100, 0);
98
+ expect(result).toBeUndefined();
99
+ });
100
+ it("clamps to minimum of 500 ms for zero-length content", async () => {
101
+ const start = Date.now();
102
+ await simulateReadingTime(0);
103
+ const elapsed = Date.now() - start;
104
+ expect(elapsed).toBeGreaterThanOrEqual(400);
105
+ });
106
+ it("clamps to minimum of 500 ms when readFraction is 0", async () => {
107
+ const start = Date.now();
108
+ await simulateReadingTime(10_000, 0);
109
+ const elapsed = Date.now() - start;
110
+ expect(elapsed).toBeGreaterThanOrEqual(400);
111
+ });
112
+ it("sanitises non-finite contentLength to 0", async () => {
113
+ const start = Date.now();
114
+ await simulateReadingTime(NaN);
115
+ const elapsed = Date.now() - start;
116
+ // NaN contentLength → safeLength=0 → mean=0 → clamped to 500 ms minimum
117
+ expect(elapsed).toBeGreaterThanOrEqual(400);
118
+ });
119
+ it("sanitises non-finite readFraction to default", async () => {
120
+ const start = Date.now();
121
+ await simulateReadingTime(100, NaN);
122
+ const elapsed = Date.now() - start;
123
+ // NaN readFraction → safeFraction=0.3 (default) → ~720 ms mean
124
+ expect(elapsed).toBeGreaterThanOrEqual(400);
125
+ });
126
+ });
17
127
  //# sourceMappingURL=delay.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delay.test.js","sourceRoot":"","sources":["../../src/utils/delay.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"delay.test.js","sourceRoot":"","sources":["../../src/utils/delay.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,IAAI,GAAG,GAAG,CAAC;QACjB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,MAAM,CAAC;QACjB,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,cAAc,GAClB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE/C,iDAAiD;QACjD,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,2DAA2D;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,wEAAwE;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,+DAA+D;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}