@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
@@ -28,6 +28,10 @@ export async function discoverTargets(port, host = DEFAULT_HOST) {
28
28
  if (!response.ok) {
29
29
  throw new CDPConnectionError(`CDP target discovery returned HTTP ${response.status.toString()} at ${url}`);
30
30
  }
31
- return (await response.json());
31
+ const targets = await response.json();
32
+ if (!Array.isArray(targets)) {
33
+ throw new CDPConnectionError("Unexpected response from CDP endpoint");
34
+ }
35
+ return targets;
32
36
  }
33
37
  //# sourceMappingURL=discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/cdp/discovery.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAGpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,OAAe,YAAY;IAE3B,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,YAAY,CAAC;IAE/C,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,qCAAqC,GAAG,+CAA+C,EACvF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,kBAAkB,CAC1B,sCAAsC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/cdp/discovery.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAGpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,OAAe,YAAY;IAE3B,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,YAAY,CAAC;IAE/C,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,qCAAqC,GAAG,+CAA+C,EACvF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,kBAAkB,CAC1B,sCAAsC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,kBAAkB,CAC1B,uCAAuC,CACxC,CAAC;IACJ,CAAC;IACD,OAAO,OAAsB,CAAC;AAChC,CAAC"}
@@ -47,6 +47,13 @@ describe("discoverTargets", () => {
47
47
  await expect(discoverTargets(9222)).rejects.toThrow(CDPConnectionError);
48
48
  await expect(discoverTargets(9222)).rejects.toThrow(/LinkedHelper not running/);
49
49
  });
50
+ it("should throw CDPConnectionError on non-array response", async () => {
51
+ vi.mocked(fetch).mockResolvedValue(new Response(JSON.stringify({ error: "not targets" }), { status: 200 }));
52
+ await expect(discoverTargets(9222)).rejects.toThrow(expect.objectContaining({
53
+ constructor: CDPConnectionError,
54
+ message: expect.stringMatching(/Unexpected response from CDP endpoint/),
55
+ }));
56
+ });
50
57
  it("should throw CDPConnectionError on non-OK HTTP status", async () => {
51
58
  vi.mocked(fetch).mockResolvedValue(new Response("Not Found", { status: 404 }));
52
59
  await expect(discoverTargets(9222)).rejects.toThrow(CDPConnectionError);
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.test.js","sourceRoot":"","sources":["../../src/cdp/discovery.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,YAAY,GAAgB;IAChC;QACE,WAAW,EAAE,EAAE;QACf,mBAAmB,EACjB,8DAA8D;QAChE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,cAAc;QACrB,GAAG,EAAE,mCAAmC;QACxC,oBAAoB,EAAE,uCAAuC;KAC9D;IACD;QACE,WAAW,EAAE,EAAE;QACf,mBAAmB,EACjB,gEAAgE;QAClE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,GAAG,EAAE,8BAA8B;KACpC;CACF,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,EAAwD,CAC9D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC5D,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAClD,CAAC;QAEF,MAAM,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAChC,oCAAoC,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAE9D,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACxE,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACjD,0BAA0B,CAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAChC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC3C,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACxE,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"discovery.test.js","sourceRoot":"","sources":["../../src/cdp/discovery.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export { CDPClient } from "./client.js";
2
2
  export { discoverTargets } from "./discovery.js";
3
3
  export { discoverInstancePort, killInstanceProcesses, } from "./instance-discovery.js";
4
- export { findApp, type DiscoveredApp } from "./app-discovery.js";
4
+ export { findApp, resolveAppPort, resolveInstancePort, resolveLauncherPort, type AppRole, type DiscoveredApp, } from "./app-discovery.js";
5
5
  export { CDPConnectionError, CDPError, CDPEvaluationError, CDPTimeoutError, } from "./errors.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cdp/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cdp/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,OAAO,EACZ,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC"}
package/dist/cdp/index.js CHANGED
@@ -3,6 +3,6 @@
3
3
  export { CDPClient } from "./client.js";
4
4
  export { discoverTargets } from "./discovery.js";
5
5
  export { discoverInstancePort, killInstanceProcesses, } from "./instance-discovery.js";
6
- export { findApp } from "./app-discovery.js";
6
+ export { findApp, resolveAppPort, resolveInstancePort, resolveLauncherPort, } from "./app-discovery.js";
7
7
  export { CDPConnectionError, CDPError, CDPEvaluationError, CDPTimeoutError, } from "./errors.js";
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cdp/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cdp/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"instance-discovery.d.ts","sourceRoot":"","sources":["../../src/cdp/instance-discovery.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,GAAE,MAAyB,GACtC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB;AAiED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAcf"}
1
+ {"version":3,"file":"instance-discovery.d.ts","sourceRoot":"","sources":["../../src/cdp/instance-discovery.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,GAAE,MAAyB,GACtC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB;AAkFD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -30,11 +30,11 @@ export async function discoverInstancePort(launcherPort = DEFAULT_CDP_PORT) {
30
30
  if (launcherPid === null) {
31
31
  return null;
32
32
  }
33
- const childPids = await findChildPids(launcherPid);
34
- if (childPids.length === 0) {
33
+ const descendantPids = await findDescendantPids(launcherPid);
34
+ if (descendantPids.length === 0) {
35
35
  return null;
36
36
  }
37
- const results = await Promise.all(childPids.map((pid) => findCdpPort(pid, launcherPort)));
37
+ const results = await Promise.all(descendantPids.map((pid) => findCdpPort(pid, launcherPort)));
38
38
  return results.find((port) => port !== null) ?? null;
39
39
  }
40
40
  /**
@@ -50,14 +50,29 @@ async function findPidListeningOn(port) {
50
50
  }
51
51
  }
52
52
  /**
53
- * Find PIDs of child processes for the given parent PID.
53
+ * Find PIDs of all descendant processes for the given ancestor PID.
54
+ *
55
+ * Walks the full process tree rather than only direct children, because
56
+ * LinkedHelper may spawn instance processes through intermediate helpers
57
+ * (e.g. GPU or renderer processes), making them grandchildren or deeper.
54
58
  */
55
- async function findChildPids(parentPid) {
59
+ async function findDescendantPids(ancestorPid) {
56
60
  try {
57
61
  const processes = await psList();
58
- return processes
59
- .filter((p) => p.ppid === parentPid)
60
- .map((p) => p.pid);
62
+ const descendants = [];
63
+ const queue = [ancestorPid];
64
+ const visited = new Set([ancestorPid]);
65
+ let currentPid;
66
+ while ((currentPid = queue.shift()) !== undefined) {
67
+ for (const p of processes) {
68
+ if (p.ppid === currentPid && !visited.has(p.pid)) {
69
+ visited.add(p.pid);
70
+ descendants.push(p.pid);
71
+ queue.push(p.pid);
72
+ }
73
+ }
74
+ }
75
+ return descendants;
61
76
  }
62
77
  catch {
63
78
  return [];
@@ -105,8 +120,8 @@ export async function killInstanceProcesses(launcherPort) {
105
120
  if (launcherPid === null) {
106
121
  return;
107
122
  }
108
- const childPids = await findChildPids(launcherPid);
109
- for (const pid of childPids) {
123
+ const descendantPids = await findDescendantPids(launcherPid);
124
+ for (const pid of descendantPids) {
110
125
  try {
111
126
  process.kill(pid, "SIGKILL");
112
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instance-discovery.js","sourceRoot":"","sources":["../../src/cdp/instance-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-discovery.js","sourceRoot":"","sources":["../../src/cdp/instance-discovery.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,23 @@ describe("discoverInstancePort", () => {
47
47
  const port = await discoverInstancePort(9222);
48
48
  expect(port).toBe(55123);
49
49
  });
50
+ it("should discover instance port from grandchild process", async () => {
51
+ vi.mocked(portToPid).mockResolvedValue(12345);
52
+ vi.mocked(psList).mockResolvedValue([
53
+ // Direct child (helper/renderer) — no CDP port
54
+ { pid: 12346, name: "helper", ppid: 12345 },
55
+ // Grandchild (instance) — has CDP port
56
+ { pid: 12347, name: "electron", ppid: 12346 },
57
+ { pid: 99999, name: "other", ppid: 1 },
58
+ ]);
59
+ vi.mocked(pidToPorts).mockImplementation(async (pid) => {
60
+ if (pid === 12347)
61
+ return new Set([55123]);
62
+ return new Set();
63
+ });
64
+ const port = await discoverInstancePort(9222);
65
+ expect(port).toBe(55123);
66
+ });
50
67
  it("should skip ports matching the launcher port", async () => {
51
68
  vi.mocked(portToPid).mockResolvedValue(12345);
52
69
  vi.mocked(psList).mockResolvedValue([
@@ -1 +1 @@
1
- {"version":3,"file":"instance-discovery.test.js","sourceRoot":"","sources":["../../src/cdp/instance-discovery.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-discovery.test.js","sourceRoot":"","sources":["../../src/cdp/instance-discovery.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IACzB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;IAClB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;CACpB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CACjB,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,UAAU,CAAC,GAAG,EAAE;QACd,mDAAmD;QACnD,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAC7C,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CACpC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAC5D,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,SAAkB,CAAC,CAAC;QAE3D,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;SACvC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;YAC7C,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;SACvC,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,+CAA+C;YAC/C,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;YAC3C,uCAAuC;YACvC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;YAC7C,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;SACvC,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;YAC9D,IAAI,GAAG,KAAK,KAAK;gBAAE,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAU,CAAC;YACpD,OAAO,IAAI,GAAG,EAAW,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,iBAAiB,CACrC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAU,CAChC,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7D,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,iBAAiB,CACrC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAU,CACjC,CAAC;QAEF,oDAAoD;QACpD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,KAAc,CAAC,CAAC;QACvD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;YAClC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;QAEnE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAC3C,IAAI,KAAK,CAAC,cAAc,CAAC,CAC1B,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -15,7 +15,7 @@ export interface ChromiumInstance {
15
15
  * is configured for test isolation (temp profile, no sandbox).
16
16
  *
17
17
  * @param options.timeout - Maximum time (ms) to wait for CDP to become
18
- * available (default 10 000).
18
+ * available (default 30 000).
19
19
  * @returns A {@link ChromiumInstance} handle.
20
20
  */
21
21
  export declare function launchChromium(options?: {
@@ -35,11 +35,11 @@ async function findFreePort() {
35
35
  * is configured for test isolation (temp profile, no sandbox).
36
36
  *
37
37
  * @param options.timeout - Maximum time (ms) to wait for CDP to become
38
- * available (default 10 000).
38
+ * available (default 30 000).
39
39
  * @returns A {@link ChromiumInstance} handle.
40
40
  */
41
41
  export async function launchChromium(options) {
42
- const timeout = options?.timeout ?? 10_000;
42
+ const timeout = options?.timeout ?? 30_000;
43
43
  const port = await findFreePort();
44
44
  const userDataDir = join(tmpdir(), `lhremote-cdp-test-${port.toString()}-${Date.now().toString(36)}`);
45
45
  const executablePath = chromium.executablePath();
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;IAK/D,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;IAQ/D,KAAK,IAAI,IAAI;CAGd"}
package/dist/db/client.js CHANGED
@@ -15,6 +15,9 @@ export class DatabaseClient {
15
15
  constructor(dbPath, options = {}) {
16
16
  const { readOnly = true } = options;
17
17
  this.db = new DatabaseSync(dbPath, { readOnly });
18
+ // Allow SQLite to retry internally for up to 5 seconds when the database
19
+ // is locked by another process (e.g. the LinkedHelper campaign runner).
20
+ this.db.exec("PRAGMA busy_timeout = 5000");
18
21
  }
19
22
  close() {
20
23
  this.db.close();
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IAChB,EAAE,CAAe;IAE1B,YAAY,MAAc,EAAE,UAAiC,EAAE;QAC7D,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IAChB,EAAE,CAAe;IAE1B,YAAY,MAAc,EAAE,UAAiC,EAAE;QAC7D,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  export { DatabaseClient, type DatabaseClientOptions } from "./client.js";
2
2
  export { discoverAllDatabases, discoverDatabase } from "./discovery.js";
3
3
  export { ActionNotFoundError, CampaignNotFoundError, ChatNotFoundError, DatabaseError, DatabaseNotFoundError, ExcludeListNotFoundError, NoNextActionError, ProfileNotFoundError, } from "./errors.js";
4
- export { CampaignExcludeListRepository, CampaignRepository, CampaignStatisticsRepository, CollectionListRepository, type CollectionSummary, MessageRepository, ProfileRepository, } from "./repositories/index.js";
4
+ export { ActionBudgetRepository, CampaignExcludeListRepository, CampaignRepository, CampaignStatisticsRepository, CollectionListRepository, type CollectionSummary, MessageRepository, ProfileRepository, } from "./repositories/index.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
package/dist/db/index.js CHANGED
@@ -3,5 +3,5 @@
3
3
  export { DatabaseClient } from "./client.js";
4
4
  export { discoverAllDatabases, discoverDatabase } from "./discovery.js";
5
5
  export { ActionNotFoundError, CampaignNotFoundError, ChatNotFoundError, DatabaseError, DatabaseNotFoundError, ExcludeListNotFoundError, NoNextActionError, ProfileNotFoundError, } from "./errors.js";
6
- export { CampaignExcludeListRepository, CampaignRepository, CampaignStatisticsRepository, CollectionListRepository, MessageRepository, ProfileRepository, } from "./repositories/index.js";
6
+ export { ActionBudgetRepository, CampaignExcludeListRepository, CampaignRepository, CampaignStatisticsRepository, CollectionListRepository, MessageRepository, ProfileRepository, } from "./repositories/index.js";
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EAExB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EAExB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { ActionBudgetEntry, LimitType } from "../../types/index.js";
2
+ import type { DatabaseClient } from "../client.js";
3
+ /**
4
+ * Repository for reading LinkedHelper rate limit data.
5
+ *
6
+ * Reads from LH's `limit_types`, `daily_limits`, and `action_results`
7
+ * tables to compute the current action budget.
8
+ */
9
+ export declare class ActionBudgetRepository {
10
+ private readonly stmtLimitTypes;
11
+ private readonly stmtDailyLimits;
12
+ private readonly stmtTodayCountsByType;
13
+ constructor(client: DatabaseClient);
14
+ /**
15
+ * Get all limit types defined by LinkedHelper.
16
+ */
17
+ getLimitTypes(): LimitType[];
18
+ /**
19
+ * Get the full action budget: limit types, daily limits, and today's usage.
20
+ *
21
+ * Campaign usage comes from LH's `action_results` table.
22
+ * Direct usage (CDP-direct actions like comments/reactions) is accepted
23
+ * as a parameter since it is tracked externally.
24
+ *
25
+ * @param directCounts Map of limit type ID → count of CDP-direct actions today.
26
+ */
27
+ getActionBudget(directCounts?: ReadonlyMap<number, number>): ActionBudgetEntry[];
28
+ }
29
+ //# sourceMappingURL=action-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-budget.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/action-budget.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAwCnD;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBAE3B,MAAM,EAAE,cAAc;IAqBlC;;OAEG;IACH,aAAa,IAAI,SAAS,EAAE;IAK5B;;;;;;;;OAQG;IACH,eAAe,CACb,YAAY,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GACpD,iBAAiB,EAAE;CAyCvB"}
@@ -0,0 +1,100 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ /**
4
+ * Maps LinkedHelper action config types to their corresponding limit type IDs.
5
+ *
6
+ * These IDs match the `limit_types` table in the LH database.
7
+ * Action types that do not consume daily limits (e.g. Waiter,
8
+ * FilterContactsOutOfMyNetwork) are intentionally omitted.
9
+ */
10
+ const ACTION_TYPE_TO_LIMIT_TYPE = new Map([
11
+ ["SaveCurrentProfile", 1],
12
+ ["InvitePerson", 8],
13
+ ["SendMessage", 9],
14
+ ["MessageToEventAttendees", 10],
15
+ ["SendInMail", 11],
16
+ ["EndorseSkills", 12],
17
+ ["InviteToGroup", 13],
18
+ ["Follow", 16],
19
+ ["Unfollow", 17],
20
+ ["LikePost", 18],
21
+ ["SendPersonToWebhook", 23],
22
+ ["GetEmailFromPAS", 24],
23
+ ["SendPersonToExternalCRM", 31],
24
+ ]);
25
+ /**
26
+ * Repository for reading LinkedHelper rate limit data.
27
+ *
28
+ * Reads from LH's `limit_types`, `daily_limits`, and `action_results`
29
+ * tables to compute the current action budget.
30
+ */
31
+ export class ActionBudgetRepository {
32
+ stmtLimitTypes;
33
+ stmtDailyLimits;
34
+ stmtTodayCountsByType;
35
+ constructor(client) {
36
+ const { db } = client;
37
+ this.stmtLimitTypes = db.prepare(`SELECT id, type FROM limit_types ORDER BY id`);
38
+ this.stmtDailyLimits = db.prepare(`SELECT id, max_limit FROM daily_limits`);
39
+ this.stmtTodayCountsByType = db.prepare(`SELECT ac.actionType AS action_type, COUNT(*) AS count_today
40
+ FROM action_results ar
41
+ JOIN action_versions av ON ar.action_version_id = av.id
42
+ JOIN action_configs ac ON av.config_id = ac.id
43
+ WHERE date(ar.created_at) = date('now', 'localtime')
44
+ GROUP BY ac.actionType`);
45
+ }
46
+ /**
47
+ * Get all limit types defined by LinkedHelper.
48
+ */
49
+ getLimitTypes() {
50
+ const rows = this.stmtLimitTypes.all();
51
+ return rows.map((r) => ({ id: r.id, type: r.type }));
52
+ }
53
+ /**
54
+ * Get the full action budget: limit types, daily limits, and today's usage.
55
+ *
56
+ * Campaign usage comes from LH's `action_results` table.
57
+ * Direct usage (CDP-direct actions like comments/reactions) is accepted
58
+ * as a parameter since it is tracked externally.
59
+ *
60
+ * @param directCounts Map of limit type ID → count of CDP-direct actions today.
61
+ */
62
+ getActionBudget(directCounts = new Map()) {
63
+ const limitTypes = this.stmtLimitTypes.all();
64
+ const dailyLimits = this.stmtDailyLimits.all();
65
+ const todayCounts = this.stmtTodayCountsByType.all();
66
+ // Build daily limit lookup: limit_type_id → max_limit
67
+ const limitMap = new Map();
68
+ for (const dl of dailyLimits) {
69
+ limitMap.set(dl.id, dl.max_limit);
70
+ }
71
+ // Build campaign usage lookup: limit_type_id → count
72
+ const campaignUsageMap = new Map();
73
+ for (const row of todayCounts) {
74
+ const limitTypeId = ACTION_TYPE_TO_LIMIT_TYPE.get(row.action_type);
75
+ if (limitTypeId !== undefined) {
76
+ const existing = campaignUsageMap.get(limitTypeId) ?? 0;
77
+ campaignUsageMap.set(limitTypeId, existing + row.count_today);
78
+ }
79
+ }
80
+ return limitTypes.map((lt) => {
81
+ const dailyLimit = limitMap.get(lt.id) ?? null;
82
+ const campaignUsed = campaignUsageMap.get(lt.id) ?? 0;
83
+ const directUsed = directCounts.get(lt.id) ?? 0;
84
+ const totalUsed = campaignUsed + directUsed;
85
+ const remaining = dailyLimit !== null
86
+ ? Math.max(0, dailyLimit - totalUsed)
87
+ : null;
88
+ return {
89
+ limitTypeId: lt.id,
90
+ limitType: lt.type,
91
+ dailyLimit,
92
+ campaignUsed,
93
+ directUsed,
94
+ totalUsed,
95
+ remaining,
96
+ };
97
+ });
98
+ }
99
+ }
100
+ //# sourceMappingURL=action-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-budget.js","sourceRoot":"","sources":["../../../src/db/repositories/action-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=action-budget.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-budget.test.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/action-budget.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { DatabaseSync } from "node:sqlite";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+ import { ActionBudgetRepository } from "./action-budget.js";
6
+ function createBudgetDb() {
7
+ const db = new DatabaseSync(":memory:");
8
+ db.exec(`
9
+ CREATE TABLE limit_types (
10
+ id INTEGER PRIMARY KEY,
11
+ type TEXT NOT NULL
12
+ )
13
+ `);
14
+ db.exec(`
15
+ INSERT INTO limit_types (id, type) VALUES
16
+ (8, 'Invite'),
17
+ (9, 'Message'),
18
+ (16, 'Follow'),
19
+ (18, 'PostLike')
20
+ `);
21
+ db.exec(`
22
+ CREATE TABLE daily_limits (
23
+ id INTEGER PRIMARY KEY,
24
+ max_limit INTEGER NOT NULL
25
+ )
26
+ `);
27
+ db.exec(`
28
+ INSERT INTO daily_limits (id, max_limit) VALUES
29
+ (8, 100),
30
+ (16, 150)
31
+ `);
32
+ db.exec(`
33
+ CREATE TABLE action_configs (
34
+ id INTEGER PRIMARY KEY,
35
+ actionType TEXT NOT NULL
36
+ )
37
+ `);
38
+ db.exec(`INSERT INTO action_configs (id, actionType) VALUES (1, 'InvitePerson')`);
39
+ db.exec(`INSERT INTO action_configs (id, actionType) VALUES (2, 'Follow')`);
40
+ db.exec(`
41
+ CREATE TABLE action_versions (
42
+ id INTEGER PRIMARY KEY,
43
+ action_id INTEGER NOT NULL,
44
+ config_id INTEGER NOT NULL
45
+ )
46
+ `);
47
+ db.exec(`INSERT INTO action_versions (id, action_id, config_id) VALUES (1, 1, 1)`);
48
+ db.exec(`INSERT INTO action_versions (id, action_id, config_id) VALUES (2, 2, 2)`);
49
+ db.exec(`
50
+ CREATE TABLE action_results (
51
+ id INTEGER PRIMARY KEY,
52
+ action_version_id INTEGER NOT NULL,
53
+ person_id INTEGER NOT NULL,
54
+ result INTEGER NOT NULL DEFAULT 0,
55
+ created_at DATETIME NOT NULL
56
+ )
57
+ `);
58
+ // Insert today's results
59
+ const today = new Date().toISOString().split("T")[0] ?? "";
60
+ db.exec(`
61
+ INSERT INTO action_results (action_version_id, person_id, result, created_at)
62
+ VALUES
63
+ (1, 100, 1, '${today} 10:00:00'),
64
+ (1, 101, 1, '${today} 10:05:00'),
65
+ (1, 102, -1, '${today} 10:10:00'),
66
+ (2, 200, 1, '${today} 11:00:00')
67
+ `);
68
+ // Insert yesterday's results (should NOT be counted)
69
+ const yesterday = new Date(Date.now() - 86_400_000).toISOString().split("T")[0] ?? "";
70
+ db.exec(`
71
+ INSERT INTO action_results (action_version_id, person_id, result, created_at)
72
+ VALUES
73
+ (1, 103, 1, '${yesterday} 10:00:00'),
74
+ (2, 201, 1, '${yesterday} 11:00:00')
75
+ `);
76
+ return db;
77
+ }
78
+ describe("ActionBudgetRepository", () => {
79
+ let db;
80
+ let repo;
81
+ beforeEach(() => {
82
+ db = createBudgetDb();
83
+ repo = new ActionBudgetRepository({ db });
84
+ });
85
+ afterEach(() => {
86
+ db.close();
87
+ });
88
+ describe("getLimitTypes", () => {
89
+ it("returns all limit types ordered by ID", () => {
90
+ const types = repo.getLimitTypes();
91
+ expect(types).toEqual([
92
+ { id: 8, type: "Invite" },
93
+ { id: 9, type: "Message" },
94
+ { id: 16, type: "Follow" },
95
+ { id: 18, type: "PostLike" },
96
+ ]);
97
+ });
98
+ });
99
+ describe("getActionBudget", () => {
100
+ it("combines limit types, daily limits, and today's usage", () => {
101
+ const entries = repo.getActionBudget();
102
+ // Invite: limit 100, 3 today (2 success + 1 fail — all results counted)
103
+ const invite = entries.find((e) => e.limitType === "Invite");
104
+ expect(invite).toEqual({
105
+ limitTypeId: 8,
106
+ limitType: "Invite",
107
+ dailyLimit: 100,
108
+ campaignUsed: 3,
109
+ directUsed: 0,
110
+ totalUsed: 3,
111
+ remaining: 97,
112
+ });
113
+ // Follow: limit 150, 1 today
114
+ const follow = entries.find((e) => e.limitType === "Follow");
115
+ expect(follow).toEqual({
116
+ limitTypeId: 16,
117
+ limitType: "Follow",
118
+ dailyLimit: 150,
119
+ campaignUsed: 1,
120
+ directUsed: 0,
121
+ totalUsed: 1,
122
+ remaining: 149,
123
+ });
124
+ // Message: no daily limit configured, 0 used
125
+ const message = entries.find((e) => e.limitType === "Message");
126
+ expect(message).toEqual({
127
+ limitTypeId: 9,
128
+ limitType: "Message",
129
+ dailyLimit: null,
130
+ campaignUsed: 0,
131
+ directUsed: 0,
132
+ totalUsed: 0,
133
+ remaining: null,
134
+ });
135
+ });
136
+ it("includes direct counts in budget", () => {
137
+ const directCounts = new Map([[18, 5]]);
138
+ const entries = repo.getActionBudget(directCounts);
139
+ const postLike = entries.find((e) => e.limitType === "PostLike");
140
+ expect(postLike).toEqual({
141
+ limitTypeId: 18,
142
+ limitType: "PostLike",
143
+ dailyLimit: null,
144
+ campaignUsed: 0,
145
+ directUsed: 5,
146
+ totalUsed: 5,
147
+ remaining: null,
148
+ });
149
+ });
150
+ it("clamps remaining to zero when over limit", () => {
151
+ const directCounts = new Map([[8, 200]]);
152
+ const entries = repo.getActionBudget(directCounts);
153
+ const invite = entries.find((e) => e.limitType === "Invite");
154
+ expect(invite?.remaining).toBe(0);
155
+ expect(invite?.totalUsed).toBe(203); // 3 campaign + 200 direct
156
+ });
157
+ it("returns empty entries when no limit types exist", () => {
158
+ const emptyDb = new DatabaseSync(":memory:");
159
+ emptyDb.exec(`CREATE TABLE limit_types (id INTEGER PRIMARY KEY, type TEXT NOT NULL)`);
160
+ emptyDb.exec(`CREATE TABLE daily_limits (id INTEGER PRIMARY KEY, max_limit INTEGER NOT NULL)`);
161
+ emptyDb.exec(`
162
+ CREATE TABLE action_results (
163
+ id INTEGER PRIMARY KEY, action_version_id INTEGER NOT NULL,
164
+ person_id INTEGER NOT NULL, result INTEGER NOT NULL DEFAULT 0,
165
+ created_at DATETIME NOT NULL
166
+ )
167
+ `);
168
+ emptyDb.exec(`
169
+ CREATE TABLE action_versions (
170
+ id INTEGER PRIMARY KEY, action_id INTEGER NOT NULL, config_id INTEGER NOT NULL
171
+ )
172
+ `);
173
+ emptyDb.exec(`CREATE TABLE action_configs (id INTEGER PRIMARY KEY, actionType TEXT NOT NULL)`);
174
+ const emptyRepo = new ActionBudgetRepository({ db: emptyDb });
175
+ const entries = emptyRepo.getActionBudget();
176
+ expect(entries).toEqual([]);
177
+ emptyDb.close();
178
+ });
179
+ });
180
+ });
181
+ //# sourceMappingURL=action-budget.test.js.map