miaw-core 1.1.0 → 1.2.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 (1808) hide show
  1. package/.claude/settings.local.json +42 -0
  2. package/CHANGELOG.md +52 -0
  3. package/README.md +31 -1
  4. package/bin/miaw-cli.ts +181 -0
  5. package/dist/cli/commands/catalog.d.ts +68 -0
  6. package/dist/cli/commands/catalog.d.ts.map +1 -0
  7. package/dist/cli/commands/catalog.js +241 -0
  8. package/dist/cli/commands/catalog.js.map +1 -0
  9. package/dist/cli/commands/commands-index.d.ts +16 -0
  10. package/dist/cli/commands/commands-index.d.ts.map +1 -0
  11. package/dist/cli/commands/commands-index.js +16 -0
  12. package/dist/cli/commands/commands-index.js.map +1 -0
  13. package/dist/cli/commands/contact.d.ts +48 -0
  14. package/dist/cli/commands/contact.d.ts.map +1 -0
  15. package/dist/cli/commands/contact.js +180 -0
  16. package/dist/cli/commands/contact.js.map +1 -0
  17. package/dist/cli/commands/get.d.ts +59 -0
  18. package/dist/cli/commands/get.d.ts.map +1 -0
  19. package/dist/cli/commands/get.js +351 -0
  20. package/dist/cli/commands/get.js.map +1 -0
  21. package/dist/cli/commands/group.d.ts +114 -0
  22. package/dist/cli/commands/group.d.ts.map +1 -0
  23. package/dist/cli/commands/group.js +432 -0
  24. package/dist/cli/commands/group.js.map +1 -0
  25. package/dist/cli/commands/index.d.ts +24 -0
  26. package/dist/cli/commands/index.d.ts.map +1 -0
  27. package/dist/cli/commands/index.js +671 -0
  28. package/dist/cli/commands/index.js.map +1 -0
  29. package/dist/cli/commands/instance.d.ts +52 -0
  30. package/dist/cli/commands/instance.d.ts.map +1 -0
  31. package/dist/cli/commands/instance.js +247 -0
  32. package/dist/cli/commands/instance.js.map +1 -0
  33. package/dist/cli/commands/label.d.ts +43 -0
  34. package/dist/cli/commands/label.d.ts.map +1 -0
  35. package/dist/cli/commands/label.js +209 -0
  36. package/dist/cli/commands/label.js.map +1 -0
  37. package/dist/cli/commands/media.d.ts +15 -0
  38. package/dist/cli/commands/media.d.ts.map +1 -0
  39. package/dist/cli/commands/media.js +69 -0
  40. package/dist/cli/commands/media.js.map +1 -0
  41. package/dist/cli/commands/misc.d.ts +13 -0
  42. package/dist/cli/commands/misc.d.ts.map +1 -0
  43. package/dist/cli/commands/misc.js +37 -0
  44. package/dist/cli/commands/misc.js.map +1 -0
  45. package/dist/cli/commands/profile.d.ts +29 -0
  46. package/dist/cli/commands/profile.d.ts.map +1 -0
  47. package/dist/cli/commands/profile.js +100 -0
  48. package/dist/cli/commands/profile.js.map +1 -0
  49. package/dist/cli/commands/send.d.ts +48 -0
  50. package/dist/cli/commands/send.d.ts.map +1 -0
  51. package/dist/cli/commands/send.js +137 -0
  52. package/dist/cli/commands/send.js.map +1 -0
  53. package/dist/cli/context.d.ts +23 -0
  54. package/dist/cli/context.d.ts.map +1 -0
  55. package/dist/cli/context.js +21 -0
  56. package/dist/cli/context.js.map +1 -0
  57. package/dist/cli/index.d.ts +11 -0
  58. package/dist/cli/index.d.ts.map +1 -0
  59. package/dist/cli/index.js +11 -0
  60. package/dist/cli/index.js.map +1 -0
  61. package/dist/cli/repl.d.ts +15 -0
  62. package/dist/cli/repl.d.ts.map +1 -0
  63. package/dist/cli/repl.js +899 -0
  64. package/dist/cli/repl.js.map +1 -0
  65. package/dist/cli/utils/cleanup.d.ts +32 -0
  66. package/dist/cli/utils/cleanup.d.ts.map +1 -0
  67. package/dist/cli/utils/cleanup.js +61 -0
  68. package/dist/cli/utils/cleanup.js.map +1 -0
  69. package/dist/cli/utils/client-cache.d.ts +41 -0
  70. package/dist/cli/utils/client-cache.d.ts.map +1 -0
  71. package/dist/cli/utils/client-cache.js +132 -0
  72. package/dist/cli/utils/client-cache.js.map +1 -0
  73. package/dist/cli/utils/formatter.d.ts +32 -0
  74. package/dist/cli/utils/formatter.d.ts.map +1 -0
  75. package/dist/cli/utils/formatter.js +111 -0
  76. package/dist/cli/utils/formatter.js.map +1 -0
  77. package/dist/cli/utils/instance-registry.d.ts +78 -0
  78. package/dist/cli/utils/instance-registry.d.ts.map +1 -0
  79. package/dist/cli/utils/instance-registry.js +158 -0
  80. package/dist/cli/utils/instance-registry.js.map +1 -0
  81. package/dist/cli/utils/prompt.d.ts +70 -0
  82. package/dist/cli/utils/prompt.d.ts.map +1 -0
  83. package/dist/cli/utils/prompt.js +120 -0
  84. package/dist/cli/utils/prompt.js.map +1 -0
  85. package/dist/cli/utils/session.d.ts +53 -0
  86. package/dist/cli/utils/session.d.ts.map +1 -0
  87. package/dist/cli/utils/session.js +294 -0
  88. package/dist/cli/utils/session.js.map +1 -0
  89. package/dist/client/MiawClient.d.ts +218 -19
  90. package/dist/client/MiawClient.d.ts.map +1 -1
  91. package/dist/client/MiawClient.js +1270 -143
  92. package/dist/client/MiawClient.js.map +1 -1
  93. package/dist/constants/cache.d.ts +8 -0
  94. package/dist/constants/cache.d.ts.map +1 -0
  95. package/dist/constants/cache.js +8 -0
  96. package/dist/constants/cache.js.map +1 -0
  97. package/dist/constants/colors.d.ts +19 -0
  98. package/dist/constants/colors.d.ts.map +1 -0
  99. package/dist/constants/colors.js +42 -0
  100. package/dist/constants/colors.js.map +1 -0
  101. package/dist/constants/timeouts.d.ts +38 -0
  102. package/dist/constants/timeouts.d.ts.map +1 -0
  103. package/dist/constants/timeouts.js +38 -0
  104. package/dist/constants/timeouts.js.map +1 -0
  105. package/dist/handlers/MessageHandler.d.ts +18 -1
  106. package/dist/handlers/MessageHandler.d.ts.map +1 -1
  107. package/dist/handlers/MessageHandler.js +44 -15
  108. package/dist/handlers/MessageHandler.js.map +1 -1
  109. package/dist/index.d.ts +8 -0
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +10 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/types/baileys.d.ts +130 -0
  114. package/dist/types/baileys.d.ts.map +1 -0
  115. package/dist/types/baileys.js +16 -0
  116. package/dist/types/baileys.js.map +1 -0
  117. package/dist/types/index.d.ts +20 -2
  118. package/dist/types/index.d.ts.map +1 -1
  119. package/dist/types/index.js.map +1 -1
  120. package/dist/types/logger.d.ts +23 -0
  121. package/dist/types/logger.d.ts.map +1 -0
  122. package/dist/types/logger.js +2 -0
  123. package/dist/types/logger.js.map +1 -0
  124. package/dist/utils/console-filter.d.ts +62 -0
  125. package/dist/utils/console-filter.d.ts.map +1 -0
  126. package/dist/utils/console-filter.js +139 -0
  127. package/dist/utils/console-filter.js.map +1 -0
  128. package/dist/utils/filtered-logger.d.ts +23 -0
  129. package/dist/utils/filtered-logger.d.ts.map +1 -0
  130. package/dist/utils/filtered-logger.js +87 -0
  131. package/dist/utils/filtered-logger.js.map +1 -0
  132. package/dist/utils/type-guards.d.ts +39 -0
  133. package/dist/utils/type-guards.d.ts.map +1 -0
  134. package/dist/utils/type-guards.js +59 -0
  135. package/dist/utils/type-guards.js.map +1 -0
  136. package/dist/utils/validation.d.ts +90 -0
  137. package/dist/utils/validation.d.ts.map +1 -0
  138. package/dist/utils/validation.js +177 -0
  139. package/dist/utils/validation.js.map +1 -0
  140. package/docs/BAILEYS_MIGRATION_v7.md +131 -23
  141. package/docs/CLI-ANALYSIS.md +428 -0
  142. package/docs/CLI.md +1189 -0
  143. package/docs/CODE_REVIEW_REPORT.md +581 -0
  144. package/docs/LID_RESOLUTION.md +226 -0
  145. package/docs/MIGRATION.md +172 -0
  146. package/docs/PROXY_SUPPORT_PLAN.md +1442 -0
  147. package/docs/USAGE.md +623 -651
  148. package/eslint.config.js +1 -1
  149. package/package.json +10 -5
  150. package/sessions-cli/.cli_history +200 -0
  151. package/sessions-cli/default/app-state-sync-key-AAAAAFwv.json +1 -0
  152. package/sessions-cli/default/app-state-sync-key-AAAAAFww.json +1 -0
  153. package/sessions-cli/default/app-state-sync-version-critical_block.json +1 -0
  154. package/sessions-cli/default/app-state-sync-version-critical_unblock_low.json +1 -0
  155. package/sessions-cli/default/app-state-sync-version-regular.json +1 -0
  156. package/sessions-cli/default/app-state-sync-version-regular_high.json +1 -0
  157. package/sessions-cli/default/app-state-sync-version-regular_low.json +1 -0
  158. package/sessions-cli/default/chats.json +244 -0
  159. package/sessions-cli/default/contacts.json +3880 -0
  160. package/sessions-cli/default/creds.json +1 -0
  161. package/sessions-cli/default/device-list-6285604722341.json +1 -0
  162. package/sessions-cli/default/labels.json +82 -0
  163. package/sessions-cli/default/lid-mapping-42877077966917_reverse.json +1 -0
  164. package/sessions-cli/default/lid-mapping-6285604722341.json +1 -0
  165. package/sessions-cli/default/lid-mappings.json +750 -0
  166. package/sessions-cli/default/messages.json +17287 -0
  167. package/sessions-cli/default/pre-key-1.json +1 -0
  168. package/sessions-cli/default/pre-key-10.json +1 -0
  169. package/sessions-cli/default/pre-key-100.json +1 -0
  170. package/sessions-cli/default/pre-key-101.json +1 -0
  171. package/sessions-cli/default/pre-key-102.json +1 -0
  172. package/sessions-cli/default/pre-key-103.json +1 -0
  173. package/sessions-cli/default/pre-key-104.json +1 -0
  174. package/sessions-cli/default/pre-key-105.json +1 -0
  175. package/sessions-cli/default/pre-key-106.json +1 -0
  176. package/sessions-cli/default/pre-key-107.json +1 -0
  177. package/sessions-cli/default/pre-key-108.json +1 -0
  178. package/sessions-cli/default/pre-key-109.json +1 -0
  179. package/sessions-cli/default/pre-key-11.json +1 -0
  180. package/sessions-cli/default/pre-key-110.json +1 -0
  181. package/sessions-cli/default/pre-key-111.json +1 -0
  182. package/sessions-cli/default/pre-key-112.json +1 -0
  183. package/sessions-cli/default/pre-key-113.json +1 -0
  184. package/sessions-cli/default/pre-key-114.json +1 -0
  185. package/sessions-cli/default/pre-key-115.json +1 -0
  186. package/sessions-cli/default/pre-key-116.json +1 -0
  187. package/sessions-cli/default/pre-key-117.json +1 -0
  188. package/sessions-cli/default/pre-key-118.json +1 -0
  189. package/sessions-cli/default/pre-key-119.json +1 -0
  190. package/sessions-cli/default/pre-key-12.json +1 -0
  191. package/sessions-cli/default/pre-key-120.json +1 -0
  192. package/sessions-cli/default/pre-key-121.json +1 -0
  193. package/sessions-cli/default/pre-key-122.json +1 -0
  194. package/sessions-cli/default/pre-key-123.json +1 -0
  195. package/sessions-cli/default/pre-key-124.json +1 -0
  196. package/sessions-cli/default/pre-key-125.json +1 -0
  197. package/sessions-cli/default/pre-key-126.json +1 -0
  198. package/sessions-cli/default/pre-key-127.json +1 -0
  199. package/sessions-cli/default/pre-key-128.json +1 -0
  200. package/sessions-cli/default/pre-key-129.json +1 -0
  201. package/sessions-cli/default/pre-key-13.json +1 -0
  202. package/sessions-cli/default/pre-key-130.json +1 -0
  203. package/sessions-cli/default/pre-key-131.json +1 -0
  204. package/sessions-cli/default/pre-key-132.json +1 -0
  205. package/sessions-cli/default/pre-key-133.json +1 -0
  206. package/sessions-cli/default/pre-key-134.json +1 -0
  207. package/sessions-cli/default/pre-key-135.json +1 -0
  208. package/sessions-cli/default/pre-key-136.json +1 -0
  209. package/sessions-cli/default/pre-key-137.json +1 -0
  210. package/sessions-cli/default/pre-key-138.json +1 -0
  211. package/sessions-cli/default/pre-key-139.json +1 -0
  212. package/sessions-cli/default/pre-key-14.json +1 -0
  213. package/sessions-cli/default/pre-key-140.json +1 -0
  214. package/sessions-cli/default/pre-key-141.json +1 -0
  215. package/sessions-cli/default/pre-key-142.json +1 -0
  216. package/sessions-cli/default/pre-key-143.json +1 -0
  217. package/sessions-cli/default/pre-key-144.json +1 -0
  218. package/sessions-cli/default/pre-key-145.json +1 -0
  219. package/sessions-cli/default/pre-key-146.json +1 -0
  220. package/sessions-cli/default/pre-key-147.json +1 -0
  221. package/sessions-cli/default/pre-key-148.json +1 -0
  222. package/sessions-cli/default/pre-key-149.json +1 -0
  223. package/sessions-cli/default/pre-key-15.json +1 -0
  224. package/sessions-cli/default/pre-key-150.json +1 -0
  225. package/sessions-cli/default/pre-key-151.json +1 -0
  226. package/sessions-cli/default/pre-key-152.json +1 -0
  227. package/sessions-cli/default/pre-key-153.json +1 -0
  228. package/sessions-cli/default/pre-key-154.json +1 -0
  229. package/sessions-cli/default/pre-key-155.json +1 -0
  230. package/sessions-cli/default/pre-key-156.json +1 -0
  231. package/sessions-cli/default/pre-key-157.json +1 -0
  232. package/sessions-cli/default/pre-key-158.json +1 -0
  233. package/sessions-cli/default/pre-key-159.json +1 -0
  234. package/sessions-cli/default/pre-key-16.json +1 -0
  235. package/sessions-cli/default/pre-key-160.json +1 -0
  236. package/sessions-cli/default/pre-key-161.json +1 -0
  237. package/sessions-cli/default/pre-key-162.json +1 -0
  238. package/sessions-cli/default/pre-key-163.json +1 -0
  239. package/sessions-cli/default/pre-key-164.json +1 -0
  240. package/sessions-cli/default/pre-key-165.json +1 -0
  241. package/sessions-cli/default/pre-key-166.json +1 -0
  242. package/sessions-cli/default/pre-key-167.json +1 -0
  243. package/sessions-cli/default/pre-key-168.json +1 -0
  244. package/sessions-cli/default/pre-key-169.json +1 -0
  245. package/sessions-cli/default/pre-key-17.json +1 -0
  246. package/sessions-cli/default/pre-key-170.json +1 -0
  247. package/sessions-cli/default/pre-key-171.json +1 -0
  248. package/sessions-cli/default/pre-key-172.json +1 -0
  249. package/sessions-cli/default/pre-key-173.json +1 -0
  250. package/sessions-cli/default/pre-key-174.json +1 -0
  251. package/sessions-cli/default/pre-key-175.json +1 -0
  252. package/sessions-cli/default/pre-key-176.json +1 -0
  253. package/sessions-cli/default/pre-key-177.json +1 -0
  254. package/sessions-cli/default/pre-key-178.json +1 -0
  255. package/sessions-cli/default/pre-key-179.json +1 -0
  256. package/sessions-cli/default/pre-key-18.json +1 -0
  257. package/sessions-cli/default/pre-key-180.json +1 -0
  258. package/sessions-cli/default/pre-key-181.json +1 -0
  259. package/sessions-cli/default/pre-key-182.json +1 -0
  260. package/sessions-cli/default/pre-key-183.json +1 -0
  261. package/sessions-cli/default/pre-key-184.json +1 -0
  262. package/sessions-cli/default/pre-key-185.json +1 -0
  263. package/sessions-cli/default/pre-key-186.json +1 -0
  264. package/sessions-cli/default/pre-key-187.json +1 -0
  265. package/sessions-cli/default/pre-key-188.json +1 -0
  266. package/sessions-cli/default/pre-key-189.json +1 -0
  267. package/sessions-cli/default/pre-key-19.json +1 -0
  268. package/sessions-cli/default/pre-key-190.json +1 -0
  269. package/sessions-cli/default/pre-key-191.json +1 -0
  270. package/sessions-cli/default/pre-key-192.json +1 -0
  271. package/sessions-cli/default/pre-key-193.json +1 -0
  272. package/sessions-cli/default/pre-key-194.json +1 -0
  273. package/sessions-cli/default/pre-key-195.json +1 -0
  274. package/sessions-cli/default/pre-key-196.json +1 -0
  275. package/sessions-cli/default/pre-key-197.json +1 -0
  276. package/sessions-cli/default/pre-key-198.json +1 -0
  277. package/sessions-cli/default/pre-key-199.json +1 -0
  278. package/sessions-cli/default/pre-key-2.json +1 -0
  279. package/sessions-cli/default/pre-key-20.json +1 -0
  280. package/sessions-cli/default/pre-key-200.json +1 -0
  281. package/sessions-cli/default/pre-key-201.json +1 -0
  282. package/sessions-cli/default/pre-key-202.json +1 -0
  283. package/sessions-cli/default/pre-key-203.json +1 -0
  284. package/sessions-cli/default/pre-key-204.json +1 -0
  285. package/sessions-cli/default/pre-key-205.json +1 -0
  286. package/sessions-cli/default/pre-key-206.json +1 -0
  287. package/sessions-cli/default/pre-key-207.json +1 -0
  288. package/sessions-cli/default/pre-key-208.json +1 -0
  289. package/sessions-cli/default/pre-key-209.json +1 -0
  290. package/sessions-cli/default/pre-key-21.json +1 -0
  291. package/sessions-cli/default/pre-key-210.json +1 -0
  292. package/sessions-cli/default/pre-key-211.json +1 -0
  293. package/sessions-cli/default/pre-key-212.json +1 -0
  294. package/sessions-cli/default/pre-key-213.json +1 -0
  295. package/sessions-cli/default/pre-key-214.json +1 -0
  296. package/sessions-cli/default/pre-key-215.json +1 -0
  297. package/sessions-cli/default/pre-key-216.json +1 -0
  298. package/sessions-cli/default/pre-key-217.json +1 -0
  299. package/sessions-cli/default/pre-key-218.json +1 -0
  300. package/sessions-cli/default/pre-key-219.json +1 -0
  301. package/sessions-cli/default/pre-key-22.json +1 -0
  302. package/sessions-cli/default/pre-key-220.json +1 -0
  303. package/sessions-cli/default/pre-key-221.json +1 -0
  304. package/sessions-cli/default/pre-key-222.json +1 -0
  305. package/sessions-cli/default/pre-key-223.json +1 -0
  306. package/sessions-cli/default/pre-key-224.json +1 -0
  307. package/sessions-cli/default/pre-key-225.json +1 -0
  308. package/sessions-cli/default/pre-key-226.json +1 -0
  309. package/sessions-cli/default/pre-key-227.json +1 -0
  310. package/sessions-cli/default/pre-key-228.json +1 -0
  311. package/sessions-cli/default/pre-key-229.json +1 -0
  312. package/sessions-cli/default/pre-key-23.json +1 -0
  313. package/sessions-cli/default/pre-key-230.json +1 -0
  314. package/sessions-cli/default/pre-key-231.json +1 -0
  315. package/sessions-cli/default/pre-key-232.json +1 -0
  316. package/sessions-cli/default/pre-key-233.json +1 -0
  317. package/sessions-cli/default/pre-key-234.json +1 -0
  318. package/sessions-cli/default/pre-key-235.json +1 -0
  319. package/sessions-cli/default/pre-key-236.json +1 -0
  320. package/sessions-cli/default/pre-key-237.json +1 -0
  321. package/sessions-cli/default/pre-key-238.json +1 -0
  322. package/sessions-cli/default/pre-key-239.json +1 -0
  323. package/sessions-cli/default/pre-key-24.json +1 -0
  324. package/sessions-cli/default/pre-key-240.json +1 -0
  325. package/sessions-cli/default/pre-key-241.json +1 -0
  326. package/sessions-cli/default/pre-key-242.json +1 -0
  327. package/sessions-cli/default/pre-key-243.json +1 -0
  328. package/sessions-cli/default/pre-key-244.json +1 -0
  329. package/sessions-cli/default/pre-key-245.json +1 -0
  330. package/sessions-cli/default/pre-key-246.json +1 -0
  331. package/sessions-cli/default/pre-key-247.json +1 -0
  332. package/sessions-cli/default/pre-key-248.json +1 -0
  333. package/sessions-cli/default/pre-key-249.json +1 -0
  334. package/sessions-cli/default/pre-key-25.json +1 -0
  335. package/sessions-cli/default/pre-key-250.json +1 -0
  336. package/sessions-cli/default/pre-key-251.json +1 -0
  337. package/sessions-cli/default/pre-key-252.json +1 -0
  338. package/sessions-cli/default/pre-key-253.json +1 -0
  339. package/sessions-cli/default/pre-key-254.json +1 -0
  340. package/sessions-cli/default/pre-key-255.json +1 -0
  341. package/sessions-cli/default/pre-key-256.json +1 -0
  342. package/sessions-cli/default/pre-key-257.json +1 -0
  343. package/sessions-cli/default/pre-key-258.json +1 -0
  344. package/sessions-cli/default/pre-key-259.json +1 -0
  345. package/sessions-cli/default/pre-key-26.json +1 -0
  346. package/sessions-cli/default/pre-key-260.json +1 -0
  347. package/sessions-cli/default/pre-key-261.json +1 -0
  348. package/sessions-cli/default/pre-key-262.json +1 -0
  349. package/sessions-cli/default/pre-key-263.json +1 -0
  350. package/sessions-cli/default/pre-key-264.json +1 -0
  351. package/sessions-cli/default/pre-key-265.json +1 -0
  352. package/sessions-cli/default/pre-key-266.json +1 -0
  353. package/sessions-cli/default/pre-key-267.json +1 -0
  354. package/sessions-cli/default/pre-key-268.json +1 -0
  355. package/sessions-cli/default/pre-key-269.json +1 -0
  356. package/sessions-cli/default/pre-key-27.json +1 -0
  357. package/sessions-cli/default/pre-key-270.json +1 -0
  358. package/sessions-cli/default/pre-key-271.json +1 -0
  359. package/sessions-cli/default/pre-key-272.json +1 -0
  360. package/sessions-cli/default/pre-key-273.json +1 -0
  361. package/sessions-cli/default/pre-key-274.json +1 -0
  362. package/sessions-cli/default/pre-key-275.json +1 -0
  363. package/sessions-cli/default/pre-key-276.json +1 -0
  364. package/sessions-cli/default/pre-key-277.json +1 -0
  365. package/sessions-cli/default/pre-key-278.json +1 -0
  366. package/sessions-cli/default/pre-key-279.json +1 -0
  367. package/sessions-cli/default/pre-key-28.json +1 -0
  368. package/sessions-cli/default/pre-key-280.json +1 -0
  369. package/sessions-cli/default/pre-key-281.json +1 -0
  370. package/sessions-cli/default/pre-key-282.json +1 -0
  371. package/sessions-cli/default/pre-key-283.json +1 -0
  372. package/sessions-cli/default/pre-key-284.json +1 -0
  373. package/sessions-cli/default/pre-key-285.json +1 -0
  374. package/sessions-cli/default/pre-key-286.json +1 -0
  375. package/sessions-cli/default/pre-key-287.json +1 -0
  376. package/sessions-cli/default/pre-key-288.json +1 -0
  377. package/sessions-cli/default/pre-key-289.json +1 -0
  378. package/sessions-cli/default/pre-key-29.json +1 -0
  379. package/sessions-cli/default/pre-key-290.json +1 -0
  380. package/sessions-cli/default/pre-key-291.json +1 -0
  381. package/sessions-cli/default/pre-key-292.json +1 -0
  382. package/sessions-cli/default/pre-key-293.json +1 -0
  383. package/sessions-cli/default/pre-key-294.json +1 -0
  384. package/sessions-cli/default/pre-key-295.json +1 -0
  385. package/sessions-cli/default/pre-key-296.json +1 -0
  386. package/sessions-cli/default/pre-key-297.json +1 -0
  387. package/sessions-cli/default/pre-key-298.json +1 -0
  388. package/sessions-cli/default/pre-key-299.json +1 -0
  389. package/sessions-cli/default/pre-key-3.json +1 -0
  390. package/sessions-cli/default/pre-key-30.json +1 -0
  391. package/sessions-cli/default/pre-key-300.json +1 -0
  392. package/sessions-cli/default/pre-key-301.json +1 -0
  393. package/sessions-cli/default/pre-key-302.json +1 -0
  394. package/sessions-cli/default/pre-key-303.json +1 -0
  395. package/sessions-cli/default/pre-key-304.json +1 -0
  396. package/sessions-cli/default/pre-key-305.json +1 -0
  397. package/sessions-cli/default/pre-key-306.json +1 -0
  398. package/sessions-cli/default/pre-key-307.json +1 -0
  399. package/sessions-cli/default/pre-key-308.json +1 -0
  400. package/sessions-cli/default/pre-key-309.json +1 -0
  401. package/sessions-cli/default/pre-key-31.json +1 -0
  402. package/sessions-cli/default/pre-key-310.json +1 -0
  403. package/sessions-cli/default/pre-key-311.json +1 -0
  404. package/sessions-cli/default/pre-key-312.json +1 -0
  405. package/sessions-cli/default/pre-key-313.json +1 -0
  406. package/sessions-cli/default/pre-key-314.json +1 -0
  407. package/sessions-cli/default/pre-key-315.json +1 -0
  408. package/sessions-cli/default/pre-key-316.json +1 -0
  409. package/sessions-cli/default/pre-key-317.json +1 -0
  410. package/sessions-cli/default/pre-key-318.json +1 -0
  411. package/sessions-cli/default/pre-key-319.json +1 -0
  412. package/sessions-cli/default/pre-key-32.json +1 -0
  413. package/sessions-cli/default/pre-key-320.json +1 -0
  414. package/sessions-cli/default/pre-key-321.json +1 -0
  415. package/sessions-cli/default/pre-key-322.json +1 -0
  416. package/sessions-cli/default/pre-key-323.json +1 -0
  417. package/sessions-cli/default/pre-key-324.json +1 -0
  418. package/sessions-cli/default/pre-key-325.json +1 -0
  419. package/sessions-cli/default/pre-key-326.json +1 -0
  420. package/sessions-cli/default/pre-key-327.json +1 -0
  421. package/sessions-cli/default/pre-key-328.json +1 -0
  422. package/sessions-cli/default/pre-key-329.json +1 -0
  423. package/sessions-cli/default/pre-key-33.json +1 -0
  424. package/sessions-cli/default/pre-key-330.json +1 -0
  425. package/sessions-cli/default/pre-key-331.json +1 -0
  426. package/sessions-cli/default/pre-key-332.json +1 -0
  427. package/sessions-cli/default/pre-key-333.json +1 -0
  428. package/sessions-cli/default/pre-key-334.json +1 -0
  429. package/sessions-cli/default/pre-key-335.json +1 -0
  430. package/sessions-cli/default/pre-key-336.json +1 -0
  431. package/sessions-cli/default/pre-key-337.json +1 -0
  432. package/sessions-cli/default/pre-key-338.json +1 -0
  433. package/sessions-cli/default/pre-key-339.json +1 -0
  434. package/sessions-cli/default/pre-key-34.json +1 -0
  435. package/sessions-cli/default/pre-key-340.json +1 -0
  436. package/sessions-cli/default/pre-key-341.json +1 -0
  437. package/sessions-cli/default/pre-key-342.json +1 -0
  438. package/sessions-cli/default/pre-key-343.json +1 -0
  439. package/sessions-cli/default/pre-key-344.json +1 -0
  440. package/sessions-cli/default/pre-key-345.json +1 -0
  441. package/sessions-cli/default/pre-key-346.json +1 -0
  442. package/sessions-cli/default/pre-key-347.json +1 -0
  443. package/sessions-cli/default/pre-key-348.json +1 -0
  444. package/sessions-cli/default/pre-key-349.json +1 -0
  445. package/sessions-cli/default/pre-key-35.json +1 -0
  446. package/sessions-cli/default/pre-key-350.json +1 -0
  447. package/sessions-cli/default/pre-key-351.json +1 -0
  448. package/sessions-cli/default/pre-key-352.json +1 -0
  449. package/sessions-cli/default/pre-key-353.json +1 -0
  450. package/sessions-cli/default/pre-key-354.json +1 -0
  451. package/sessions-cli/default/pre-key-355.json +1 -0
  452. package/sessions-cli/default/pre-key-356.json +1 -0
  453. package/sessions-cli/default/pre-key-357.json +1 -0
  454. package/sessions-cli/default/pre-key-358.json +1 -0
  455. package/sessions-cli/default/pre-key-359.json +1 -0
  456. package/sessions-cli/default/pre-key-36.json +1 -0
  457. package/sessions-cli/default/pre-key-360.json +1 -0
  458. package/sessions-cli/default/pre-key-361.json +1 -0
  459. package/sessions-cli/default/pre-key-362.json +1 -0
  460. package/sessions-cli/default/pre-key-363.json +1 -0
  461. package/sessions-cli/default/pre-key-364.json +1 -0
  462. package/sessions-cli/default/pre-key-365.json +1 -0
  463. package/sessions-cli/default/pre-key-366.json +1 -0
  464. package/sessions-cli/default/pre-key-367.json +1 -0
  465. package/sessions-cli/default/pre-key-368.json +1 -0
  466. package/sessions-cli/default/pre-key-369.json +1 -0
  467. package/sessions-cli/default/pre-key-37.json +1 -0
  468. package/sessions-cli/default/pre-key-370.json +1 -0
  469. package/sessions-cli/default/pre-key-371.json +1 -0
  470. package/sessions-cli/default/pre-key-372.json +1 -0
  471. package/sessions-cli/default/pre-key-373.json +1 -0
  472. package/sessions-cli/default/pre-key-374.json +1 -0
  473. package/sessions-cli/default/pre-key-375.json +1 -0
  474. package/sessions-cli/default/pre-key-376.json +1 -0
  475. package/sessions-cli/default/pre-key-377.json +1 -0
  476. package/sessions-cli/default/pre-key-378.json +1 -0
  477. package/sessions-cli/default/pre-key-379.json +1 -0
  478. package/sessions-cli/default/pre-key-38.json +1 -0
  479. package/sessions-cli/default/pre-key-380.json +1 -0
  480. package/sessions-cli/default/pre-key-381.json +1 -0
  481. package/sessions-cli/default/pre-key-382.json +1 -0
  482. package/sessions-cli/default/pre-key-383.json +1 -0
  483. package/sessions-cli/default/pre-key-384.json +1 -0
  484. package/sessions-cli/default/pre-key-385.json +1 -0
  485. package/sessions-cli/default/pre-key-386.json +1 -0
  486. package/sessions-cli/default/pre-key-387.json +1 -0
  487. package/sessions-cli/default/pre-key-388.json +1 -0
  488. package/sessions-cli/default/pre-key-389.json +1 -0
  489. package/sessions-cli/default/pre-key-39.json +1 -0
  490. package/sessions-cli/default/pre-key-390.json +1 -0
  491. package/sessions-cli/default/pre-key-391.json +1 -0
  492. package/sessions-cli/default/pre-key-392.json +1 -0
  493. package/sessions-cli/default/pre-key-393.json +1 -0
  494. package/sessions-cli/default/pre-key-394.json +1 -0
  495. package/sessions-cli/default/pre-key-395.json +1 -0
  496. package/sessions-cli/default/pre-key-396.json +1 -0
  497. package/sessions-cli/default/pre-key-397.json +1 -0
  498. package/sessions-cli/default/pre-key-398.json +1 -0
  499. package/sessions-cli/default/pre-key-399.json +1 -0
  500. package/sessions-cli/default/pre-key-4.json +1 -0
  501. package/sessions-cli/default/pre-key-40.json +1 -0
  502. package/sessions-cli/default/pre-key-400.json +1 -0
  503. package/sessions-cli/default/pre-key-401.json +1 -0
  504. package/sessions-cli/default/pre-key-402.json +1 -0
  505. package/sessions-cli/default/pre-key-403.json +1 -0
  506. package/sessions-cli/default/pre-key-404.json +1 -0
  507. package/sessions-cli/default/pre-key-405.json +1 -0
  508. package/sessions-cli/default/pre-key-406.json +1 -0
  509. package/sessions-cli/default/pre-key-407.json +1 -0
  510. package/sessions-cli/default/pre-key-408.json +1 -0
  511. package/sessions-cli/default/pre-key-409.json +1 -0
  512. package/sessions-cli/default/pre-key-41.json +1 -0
  513. package/sessions-cli/default/pre-key-410.json +1 -0
  514. package/sessions-cli/default/pre-key-411.json +1 -0
  515. package/sessions-cli/default/pre-key-412.json +1 -0
  516. package/sessions-cli/default/pre-key-413.json +1 -0
  517. package/sessions-cli/default/pre-key-414.json +1 -0
  518. package/sessions-cli/default/pre-key-415.json +1 -0
  519. package/sessions-cli/default/pre-key-416.json +1 -0
  520. package/sessions-cli/default/pre-key-417.json +1 -0
  521. package/sessions-cli/default/pre-key-418.json +1 -0
  522. package/sessions-cli/default/pre-key-419.json +1 -0
  523. package/sessions-cli/default/pre-key-42.json +1 -0
  524. package/sessions-cli/default/pre-key-420.json +1 -0
  525. package/sessions-cli/default/pre-key-421.json +1 -0
  526. package/sessions-cli/default/pre-key-422.json +1 -0
  527. package/sessions-cli/default/pre-key-423.json +1 -0
  528. package/sessions-cli/default/pre-key-424.json +1 -0
  529. package/sessions-cli/default/pre-key-425.json +1 -0
  530. package/sessions-cli/default/pre-key-426.json +1 -0
  531. package/sessions-cli/default/pre-key-427.json +1 -0
  532. package/sessions-cli/default/pre-key-428.json +1 -0
  533. package/sessions-cli/default/pre-key-429.json +1 -0
  534. package/sessions-cli/default/pre-key-43.json +1 -0
  535. package/sessions-cli/default/pre-key-430.json +1 -0
  536. package/sessions-cli/default/pre-key-431.json +1 -0
  537. package/sessions-cli/default/pre-key-432.json +1 -0
  538. package/sessions-cli/default/pre-key-433.json +1 -0
  539. package/sessions-cli/default/pre-key-434.json +1 -0
  540. package/sessions-cli/default/pre-key-435.json +1 -0
  541. package/sessions-cli/default/pre-key-436.json +1 -0
  542. package/sessions-cli/default/pre-key-437.json +1 -0
  543. package/sessions-cli/default/pre-key-438.json +1 -0
  544. package/sessions-cli/default/pre-key-439.json +1 -0
  545. package/sessions-cli/default/pre-key-44.json +1 -0
  546. package/sessions-cli/default/pre-key-440.json +1 -0
  547. package/sessions-cli/default/pre-key-441.json +1 -0
  548. package/sessions-cli/default/pre-key-442.json +1 -0
  549. package/sessions-cli/default/pre-key-443.json +1 -0
  550. package/sessions-cli/default/pre-key-444.json +1 -0
  551. package/sessions-cli/default/pre-key-445.json +1 -0
  552. package/sessions-cli/default/pre-key-446.json +1 -0
  553. package/sessions-cli/default/pre-key-447.json +1 -0
  554. package/sessions-cli/default/pre-key-448.json +1 -0
  555. package/sessions-cli/default/pre-key-449.json +1 -0
  556. package/sessions-cli/default/pre-key-45.json +1 -0
  557. package/sessions-cli/default/pre-key-450.json +1 -0
  558. package/sessions-cli/default/pre-key-451.json +1 -0
  559. package/sessions-cli/default/pre-key-452.json +1 -0
  560. package/sessions-cli/default/pre-key-453.json +1 -0
  561. package/sessions-cli/default/pre-key-454.json +1 -0
  562. package/sessions-cli/default/pre-key-455.json +1 -0
  563. package/sessions-cli/default/pre-key-456.json +1 -0
  564. package/sessions-cli/default/pre-key-457.json +1 -0
  565. package/sessions-cli/default/pre-key-458.json +1 -0
  566. package/sessions-cli/default/pre-key-459.json +1 -0
  567. package/sessions-cli/default/pre-key-46.json +1 -0
  568. package/sessions-cli/default/pre-key-460.json +1 -0
  569. package/sessions-cli/default/pre-key-461.json +1 -0
  570. package/sessions-cli/default/pre-key-462.json +1 -0
  571. package/sessions-cli/default/pre-key-463.json +1 -0
  572. package/sessions-cli/default/pre-key-464.json +1 -0
  573. package/sessions-cli/default/pre-key-465.json +1 -0
  574. package/sessions-cli/default/pre-key-466.json +1 -0
  575. package/sessions-cli/default/pre-key-467.json +1 -0
  576. package/sessions-cli/default/pre-key-468.json +1 -0
  577. package/sessions-cli/default/pre-key-469.json +1 -0
  578. package/sessions-cli/default/pre-key-47.json +1 -0
  579. package/sessions-cli/default/pre-key-470.json +1 -0
  580. package/sessions-cli/default/pre-key-471.json +1 -0
  581. package/sessions-cli/default/pre-key-472.json +1 -0
  582. package/sessions-cli/default/pre-key-473.json +1 -0
  583. package/sessions-cli/default/pre-key-474.json +1 -0
  584. package/sessions-cli/default/pre-key-475.json +1 -0
  585. package/sessions-cli/default/pre-key-476.json +1 -0
  586. package/sessions-cli/default/pre-key-477.json +1 -0
  587. package/sessions-cli/default/pre-key-478.json +1 -0
  588. package/sessions-cli/default/pre-key-479.json +1 -0
  589. package/sessions-cli/default/pre-key-48.json +1 -0
  590. package/sessions-cli/default/pre-key-480.json +1 -0
  591. package/sessions-cli/default/pre-key-481.json +1 -0
  592. package/sessions-cli/default/pre-key-482.json +1 -0
  593. package/sessions-cli/default/pre-key-483.json +1 -0
  594. package/sessions-cli/default/pre-key-484.json +1 -0
  595. package/sessions-cli/default/pre-key-485.json +1 -0
  596. package/sessions-cli/default/pre-key-486.json +1 -0
  597. package/sessions-cli/default/pre-key-487.json +1 -0
  598. package/sessions-cli/default/pre-key-488.json +1 -0
  599. package/sessions-cli/default/pre-key-489.json +1 -0
  600. package/sessions-cli/default/pre-key-49.json +1 -0
  601. package/sessions-cli/default/pre-key-490.json +1 -0
  602. package/sessions-cli/default/pre-key-491.json +1 -0
  603. package/sessions-cli/default/pre-key-492.json +1 -0
  604. package/sessions-cli/default/pre-key-493.json +1 -0
  605. package/sessions-cli/default/pre-key-494.json +1 -0
  606. package/sessions-cli/default/pre-key-495.json +1 -0
  607. package/sessions-cli/default/pre-key-496.json +1 -0
  608. package/sessions-cli/default/pre-key-497.json +1 -0
  609. package/sessions-cli/default/pre-key-498.json +1 -0
  610. package/sessions-cli/default/pre-key-499.json +1 -0
  611. package/sessions-cli/default/pre-key-5.json +1 -0
  612. package/sessions-cli/default/pre-key-50.json +1 -0
  613. package/sessions-cli/default/pre-key-500.json +1 -0
  614. package/sessions-cli/default/pre-key-501.json +1 -0
  615. package/sessions-cli/default/pre-key-502.json +1 -0
  616. package/sessions-cli/default/pre-key-503.json +1 -0
  617. package/sessions-cli/default/pre-key-504.json +1 -0
  618. package/sessions-cli/default/pre-key-505.json +1 -0
  619. package/sessions-cli/default/pre-key-506.json +1 -0
  620. package/sessions-cli/default/pre-key-507.json +1 -0
  621. package/sessions-cli/default/pre-key-508.json +1 -0
  622. package/sessions-cli/default/pre-key-509.json +1 -0
  623. package/sessions-cli/default/pre-key-51.json +1 -0
  624. package/sessions-cli/default/pre-key-510.json +1 -0
  625. package/sessions-cli/default/pre-key-511.json +1 -0
  626. package/sessions-cli/default/pre-key-512.json +1 -0
  627. package/sessions-cli/default/pre-key-513.json +1 -0
  628. package/sessions-cli/default/pre-key-514.json +1 -0
  629. package/sessions-cli/default/pre-key-515.json +1 -0
  630. package/sessions-cli/default/pre-key-516.json +1 -0
  631. package/sessions-cli/default/pre-key-517.json +1 -0
  632. package/sessions-cli/default/pre-key-518.json +1 -0
  633. package/sessions-cli/default/pre-key-519.json +1 -0
  634. package/sessions-cli/default/pre-key-52.json +1 -0
  635. package/sessions-cli/default/pre-key-520.json +1 -0
  636. package/sessions-cli/default/pre-key-521.json +1 -0
  637. package/sessions-cli/default/pre-key-522.json +1 -0
  638. package/sessions-cli/default/pre-key-523.json +1 -0
  639. package/sessions-cli/default/pre-key-524.json +1 -0
  640. package/sessions-cli/default/pre-key-525.json +1 -0
  641. package/sessions-cli/default/pre-key-526.json +1 -0
  642. package/sessions-cli/default/pre-key-527.json +1 -0
  643. package/sessions-cli/default/pre-key-528.json +1 -0
  644. package/sessions-cli/default/pre-key-529.json +1 -0
  645. package/sessions-cli/default/pre-key-53.json +1 -0
  646. package/sessions-cli/default/pre-key-530.json +1 -0
  647. package/sessions-cli/default/pre-key-531.json +1 -0
  648. package/sessions-cli/default/pre-key-532.json +1 -0
  649. package/sessions-cli/default/pre-key-533.json +1 -0
  650. package/sessions-cli/default/pre-key-534.json +1 -0
  651. package/sessions-cli/default/pre-key-535.json +1 -0
  652. package/sessions-cli/default/pre-key-536.json +1 -0
  653. package/sessions-cli/default/pre-key-537.json +1 -0
  654. package/sessions-cli/default/pre-key-538.json +1 -0
  655. package/sessions-cli/default/pre-key-539.json +1 -0
  656. package/sessions-cli/default/pre-key-54.json +1 -0
  657. package/sessions-cli/default/pre-key-540.json +1 -0
  658. package/sessions-cli/default/pre-key-541.json +1 -0
  659. package/sessions-cli/default/pre-key-542.json +1 -0
  660. package/sessions-cli/default/pre-key-543.json +1 -0
  661. package/sessions-cli/default/pre-key-544.json +1 -0
  662. package/sessions-cli/default/pre-key-545.json +1 -0
  663. package/sessions-cli/default/pre-key-546.json +1 -0
  664. package/sessions-cli/default/pre-key-547.json +1 -0
  665. package/sessions-cli/default/pre-key-548.json +1 -0
  666. package/sessions-cli/default/pre-key-549.json +1 -0
  667. package/sessions-cli/default/pre-key-55.json +1 -0
  668. package/sessions-cli/default/pre-key-550.json +1 -0
  669. package/sessions-cli/default/pre-key-551.json +1 -0
  670. package/sessions-cli/default/pre-key-552.json +1 -0
  671. package/sessions-cli/default/pre-key-553.json +1 -0
  672. package/sessions-cli/default/pre-key-554.json +1 -0
  673. package/sessions-cli/default/pre-key-555.json +1 -0
  674. package/sessions-cli/default/pre-key-556.json +1 -0
  675. package/sessions-cli/default/pre-key-557.json +1 -0
  676. package/sessions-cli/default/pre-key-558.json +1 -0
  677. package/sessions-cli/default/pre-key-559.json +1 -0
  678. package/sessions-cli/default/pre-key-56.json +1 -0
  679. package/sessions-cli/default/pre-key-560.json +1 -0
  680. package/sessions-cli/default/pre-key-561.json +1 -0
  681. package/sessions-cli/default/pre-key-562.json +1 -0
  682. package/sessions-cli/default/pre-key-563.json +1 -0
  683. package/sessions-cli/default/pre-key-564.json +1 -0
  684. package/sessions-cli/default/pre-key-565.json +1 -0
  685. package/sessions-cli/default/pre-key-566.json +1 -0
  686. package/sessions-cli/default/pre-key-567.json +1 -0
  687. package/sessions-cli/default/pre-key-568.json +1 -0
  688. package/sessions-cli/default/pre-key-569.json +1 -0
  689. package/sessions-cli/default/pre-key-57.json +1 -0
  690. package/sessions-cli/default/pre-key-570.json +1 -0
  691. package/sessions-cli/default/pre-key-571.json +1 -0
  692. package/sessions-cli/default/pre-key-572.json +1 -0
  693. package/sessions-cli/default/pre-key-573.json +1 -0
  694. package/sessions-cli/default/pre-key-574.json +1 -0
  695. package/sessions-cli/default/pre-key-575.json +1 -0
  696. package/sessions-cli/default/pre-key-576.json +1 -0
  697. package/sessions-cli/default/pre-key-577.json +1 -0
  698. package/sessions-cli/default/pre-key-578.json +1 -0
  699. package/sessions-cli/default/pre-key-579.json +1 -0
  700. package/sessions-cli/default/pre-key-58.json +1 -0
  701. package/sessions-cli/default/pre-key-580.json +1 -0
  702. package/sessions-cli/default/pre-key-581.json +1 -0
  703. package/sessions-cli/default/pre-key-582.json +1 -0
  704. package/sessions-cli/default/pre-key-583.json +1 -0
  705. package/sessions-cli/default/pre-key-584.json +1 -0
  706. package/sessions-cli/default/pre-key-585.json +1 -0
  707. package/sessions-cli/default/pre-key-586.json +1 -0
  708. package/sessions-cli/default/pre-key-587.json +1 -0
  709. package/sessions-cli/default/pre-key-588.json +1 -0
  710. package/sessions-cli/default/pre-key-589.json +1 -0
  711. package/sessions-cli/default/pre-key-59.json +1 -0
  712. package/sessions-cli/default/pre-key-590.json +1 -0
  713. package/sessions-cli/default/pre-key-591.json +1 -0
  714. package/sessions-cli/default/pre-key-592.json +1 -0
  715. package/sessions-cli/default/pre-key-593.json +1 -0
  716. package/sessions-cli/default/pre-key-594.json +1 -0
  717. package/sessions-cli/default/pre-key-595.json +1 -0
  718. package/sessions-cli/default/pre-key-596.json +1 -0
  719. package/sessions-cli/default/pre-key-597.json +1 -0
  720. package/sessions-cli/default/pre-key-598.json +1 -0
  721. package/sessions-cli/default/pre-key-599.json +1 -0
  722. package/sessions-cli/default/pre-key-6.json +1 -0
  723. package/sessions-cli/default/pre-key-60.json +1 -0
  724. package/sessions-cli/default/pre-key-600.json +1 -0
  725. package/sessions-cli/default/pre-key-601.json +1 -0
  726. package/sessions-cli/default/pre-key-602.json +1 -0
  727. package/sessions-cli/default/pre-key-603.json +1 -0
  728. package/sessions-cli/default/pre-key-604.json +1 -0
  729. package/sessions-cli/default/pre-key-605.json +1 -0
  730. package/sessions-cli/default/pre-key-606.json +1 -0
  731. package/sessions-cli/default/pre-key-607.json +1 -0
  732. package/sessions-cli/default/pre-key-608.json +1 -0
  733. package/sessions-cli/default/pre-key-609.json +1 -0
  734. package/sessions-cli/default/pre-key-61.json +1 -0
  735. package/sessions-cli/default/pre-key-610.json +1 -0
  736. package/sessions-cli/default/pre-key-611.json +1 -0
  737. package/sessions-cli/default/pre-key-612.json +1 -0
  738. package/sessions-cli/default/pre-key-613.json +1 -0
  739. package/sessions-cli/default/pre-key-614.json +1 -0
  740. package/sessions-cli/default/pre-key-615.json +1 -0
  741. package/sessions-cli/default/pre-key-616.json +1 -0
  742. package/sessions-cli/default/pre-key-617.json +1 -0
  743. package/sessions-cli/default/pre-key-618.json +1 -0
  744. package/sessions-cli/default/pre-key-619.json +1 -0
  745. package/sessions-cli/default/pre-key-62.json +1 -0
  746. package/sessions-cli/default/pre-key-620.json +1 -0
  747. package/sessions-cli/default/pre-key-621.json +1 -0
  748. package/sessions-cli/default/pre-key-622.json +1 -0
  749. package/sessions-cli/default/pre-key-623.json +1 -0
  750. package/sessions-cli/default/pre-key-624.json +1 -0
  751. package/sessions-cli/default/pre-key-625.json +1 -0
  752. package/sessions-cli/default/pre-key-626.json +1 -0
  753. package/sessions-cli/default/pre-key-627.json +1 -0
  754. package/sessions-cli/default/pre-key-628.json +1 -0
  755. package/sessions-cli/default/pre-key-629.json +1 -0
  756. package/sessions-cli/default/pre-key-63.json +1 -0
  757. package/sessions-cli/default/pre-key-630.json +1 -0
  758. package/sessions-cli/default/pre-key-631.json +1 -0
  759. package/sessions-cli/default/pre-key-632.json +1 -0
  760. package/sessions-cli/default/pre-key-633.json +1 -0
  761. package/sessions-cli/default/pre-key-634.json +1 -0
  762. package/sessions-cli/default/pre-key-635.json +1 -0
  763. package/sessions-cli/default/pre-key-636.json +1 -0
  764. package/sessions-cli/default/pre-key-637.json +1 -0
  765. package/sessions-cli/default/pre-key-638.json +1 -0
  766. package/sessions-cli/default/pre-key-639.json +1 -0
  767. package/sessions-cli/default/pre-key-64.json +1 -0
  768. package/sessions-cli/default/pre-key-640.json +1 -0
  769. package/sessions-cli/default/pre-key-641.json +1 -0
  770. package/sessions-cli/default/pre-key-642.json +1 -0
  771. package/sessions-cli/default/pre-key-643.json +1 -0
  772. package/sessions-cli/default/pre-key-644.json +1 -0
  773. package/sessions-cli/default/pre-key-645.json +1 -0
  774. package/sessions-cli/default/pre-key-646.json +1 -0
  775. package/sessions-cli/default/pre-key-647.json +1 -0
  776. package/sessions-cli/default/pre-key-648.json +1 -0
  777. package/sessions-cli/default/pre-key-649.json +1 -0
  778. package/sessions-cli/default/pre-key-65.json +1 -0
  779. package/sessions-cli/default/pre-key-650.json +1 -0
  780. package/sessions-cli/default/pre-key-651.json +1 -0
  781. package/sessions-cli/default/pre-key-652.json +1 -0
  782. package/sessions-cli/default/pre-key-653.json +1 -0
  783. package/sessions-cli/default/pre-key-654.json +1 -0
  784. package/sessions-cli/default/pre-key-655.json +1 -0
  785. package/sessions-cli/default/pre-key-656.json +1 -0
  786. package/sessions-cli/default/pre-key-657.json +1 -0
  787. package/sessions-cli/default/pre-key-658.json +1 -0
  788. package/sessions-cli/default/pre-key-659.json +1 -0
  789. package/sessions-cli/default/pre-key-66.json +1 -0
  790. package/sessions-cli/default/pre-key-660.json +1 -0
  791. package/sessions-cli/default/pre-key-661.json +1 -0
  792. package/sessions-cli/default/pre-key-662.json +1 -0
  793. package/sessions-cli/default/pre-key-663.json +1 -0
  794. package/sessions-cli/default/pre-key-664.json +1 -0
  795. package/sessions-cli/default/pre-key-665.json +1 -0
  796. package/sessions-cli/default/pre-key-666.json +1 -0
  797. package/sessions-cli/default/pre-key-667.json +1 -0
  798. package/sessions-cli/default/pre-key-668.json +1 -0
  799. package/sessions-cli/default/pre-key-669.json +1 -0
  800. package/sessions-cli/default/pre-key-67.json +1 -0
  801. package/sessions-cli/default/pre-key-670.json +1 -0
  802. package/sessions-cli/default/pre-key-671.json +1 -0
  803. package/sessions-cli/default/pre-key-672.json +1 -0
  804. package/sessions-cli/default/pre-key-673.json +1 -0
  805. package/sessions-cli/default/pre-key-674.json +1 -0
  806. package/sessions-cli/default/pre-key-675.json +1 -0
  807. package/sessions-cli/default/pre-key-676.json +1 -0
  808. package/sessions-cli/default/pre-key-677.json +1 -0
  809. package/sessions-cli/default/pre-key-678.json +1 -0
  810. package/sessions-cli/default/pre-key-679.json +1 -0
  811. package/sessions-cli/default/pre-key-68.json +1 -0
  812. package/sessions-cli/default/pre-key-680.json +1 -0
  813. package/sessions-cli/default/pre-key-681.json +1 -0
  814. package/sessions-cli/default/pre-key-682.json +1 -0
  815. package/sessions-cli/default/pre-key-683.json +1 -0
  816. package/sessions-cli/default/pre-key-684.json +1 -0
  817. package/sessions-cli/default/pre-key-685.json +1 -0
  818. package/sessions-cli/default/pre-key-686.json +1 -0
  819. package/sessions-cli/default/pre-key-687.json +1 -0
  820. package/sessions-cli/default/pre-key-688.json +1 -0
  821. package/sessions-cli/default/pre-key-689.json +1 -0
  822. package/sessions-cli/default/pre-key-69.json +1 -0
  823. package/sessions-cli/default/pre-key-690.json +1 -0
  824. package/sessions-cli/default/pre-key-691.json +1 -0
  825. package/sessions-cli/default/pre-key-692.json +1 -0
  826. package/sessions-cli/default/pre-key-693.json +1 -0
  827. package/sessions-cli/default/pre-key-694.json +1 -0
  828. package/sessions-cli/default/pre-key-695.json +1 -0
  829. package/sessions-cli/default/pre-key-696.json +1 -0
  830. package/sessions-cli/default/pre-key-697.json +1 -0
  831. package/sessions-cli/default/pre-key-698.json +1 -0
  832. package/sessions-cli/default/pre-key-699.json +1 -0
  833. package/sessions-cli/default/pre-key-7.json +1 -0
  834. package/sessions-cli/default/pre-key-70.json +1 -0
  835. package/sessions-cli/default/pre-key-700.json +1 -0
  836. package/sessions-cli/default/pre-key-701.json +1 -0
  837. package/sessions-cli/default/pre-key-702.json +1 -0
  838. package/sessions-cli/default/pre-key-703.json +1 -0
  839. package/sessions-cli/default/pre-key-704.json +1 -0
  840. package/sessions-cli/default/pre-key-705.json +1 -0
  841. package/sessions-cli/default/pre-key-706.json +1 -0
  842. package/sessions-cli/default/pre-key-707.json +1 -0
  843. package/sessions-cli/default/pre-key-708.json +1 -0
  844. package/sessions-cli/default/pre-key-709.json +1 -0
  845. package/sessions-cli/default/pre-key-71.json +1 -0
  846. package/sessions-cli/default/pre-key-710.json +1 -0
  847. package/sessions-cli/default/pre-key-711.json +1 -0
  848. package/sessions-cli/default/pre-key-712.json +1 -0
  849. package/sessions-cli/default/pre-key-713.json +1 -0
  850. package/sessions-cli/default/pre-key-714.json +1 -0
  851. package/sessions-cli/default/pre-key-715.json +1 -0
  852. package/sessions-cli/default/pre-key-716.json +1 -0
  853. package/sessions-cli/default/pre-key-717.json +1 -0
  854. package/sessions-cli/default/pre-key-718.json +1 -0
  855. package/sessions-cli/default/pre-key-719.json +1 -0
  856. package/sessions-cli/default/pre-key-72.json +1 -0
  857. package/sessions-cli/default/pre-key-720.json +1 -0
  858. package/sessions-cli/default/pre-key-721.json +1 -0
  859. package/sessions-cli/default/pre-key-722.json +1 -0
  860. package/sessions-cli/default/pre-key-723.json +1 -0
  861. package/sessions-cli/default/pre-key-724.json +1 -0
  862. package/sessions-cli/default/pre-key-725.json +1 -0
  863. package/sessions-cli/default/pre-key-726.json +1 -0
  864. package/sessions-cli/default/pre-key-727.json +1 -0
  865. package/sessions-cli/default/pre-key-728.json +1 -0
  866. package/sessions-cli/default/pre-key-729.json +1 -0
  867. package/sessions-cli/default/pre-key-73.json +1 -0
  868. package/sessions-cli/default/pre-key-730.json +1 -0
  869. package/sessions-cli/default/pre-key-731.json +1 -0
  870. package/sessions-cli/default/pre-key-732.json +1 -0
  871. package/sessions-cli/default/pre-key-733.json +1 -0
  872. package/sessions-cli/default/pre-key-734.json +1 -0
  873. package/sessions-cli/default/pre-key-735.json +1 -0
  874. package/sessions-cli/default/pre-key-736.json +1 -0
  875. package/sessions-cli/default/pre-key-737.json +1 -0
  876. package/sessions-cli/default/pre-key-738.json +1 -0
  877. package/sessions-cli/default/pre-key-739.json +1 -0
  878. package/sessions-cli/default/pre-key-74.json +1 -0
  879. package/sessions-cli/default/pre-key-740.json +1 -0
  880. package/sessions-cli/default/pre-key-741.json +1 -0
  881. package/sessions-cli/default/pre-key-742.json +1 -0
  882. package/sessions-cli/default/pre-key-743.json +1 -0
  883. package/sessions-cli/default/pre-key-744.json +1 -0
  884. package/sessions-cli/default/pre-key-745.json +1 -0
  885. package/sessions-cli/default/pre-key-746.json +1 -0
  886. package/sessions-cli/default/pre-key-747.json +1 -0
  887. package/sessions-cli/default/pre-key-748.json +1 -0
  888. package/sessions-cli/default/pre-key-749.json +1 -0
  889. package/sessions-cli/default/pre-key-75.json +1 -0
  890. package/sessions-cli/default/pre-key-750.json +1 -0
  891. package/sessions-cli/default/pre-key-751.json +1 -0
  892. package/sessions-cli/default/pre-key-752.json +1 -0
  893. package/sessions-cli/default/pre-key-753.json +1 -0
  894. package/sessions-cli/default/pre-key-754.json +1 -0
  895. package/sessions-cli/default/pre-key-755.json +1 -0
  896. package/sessions-cli/default/pre-key-756.json +1 -0
  897. package/sessions-cli/default/pre-key-757.json +1 -0
  898. package/sessions-cli/default/pre-key-758.json +1 -0
  899. package/sessions-cli/default/pre-key-759.json +1 -0
  900. package/sessions-cli/default/pre-key-76.json +1 -0
  901. package/sessions-cli/default/pre-key-760.json +1 -0
  902. package/sessions-cli/default/pre-key-761.json +1 -0
  903. package/sessions-cli/default/pre-key-762.json +1 -0
  904. package/sessions-cli/default/pre-key-763.json +1 -0
  905. package/sessions-cli/default/pre-key-764.json +1 -0
  906. package/sessions-cli/default/pre-key-765.json +1 -0
  907. package/sessions-cli/default/pre-key-766.json +1 -0
  908. package/sessions-cli/default/pre-key-767.json +1 -0
  909. package/sessions-cli/default/pre-key-768.json +1 -0
  910. package/sessions-cli/default/pre-key-769.json +1 -0
  911. package/sessions-cli/default/pre-key-77.json +1 -0
  912. package/sessions-cli/default/pre-key-770.json +1 -0
  913. package/sessions-cli/default/pre-key-771.json +1 -0
  914. package/sessions-cli/default/pre-key-772.json +1 -0
  915. package/sessions-cli/default/pre-key-773.json +1 -0
  916. package/sessions-cli/default/pre-key-774.json +1 -0
  917. package/sessions-cli/default/pre-key-775.json +1 -0
  918. package/sessions-cli/default/pre-key-776.json +1 -0
  919. package/sessions-cli/default/pre-key-777.json +1 -0
  920. package/sessions-cli/default/pre-key-778.json +1 -0
  921. package/sessions-cli/default/pre-key-779.json +1 -0
  922. package/sessions-cli/default/pre-key-78.json +1 -0
  923. package/sessions-cli/default/pre-key-780.json +1 -0
  924. package/sessions-cli/default/pre-key-781.json +1 -0
  925. package/sessions-cli/default/pre-key-782.json +1 -0
  926. package/sessions-cli/default/pre-key-783.json +1 -0
  927. package/sessions-cli/default/pre-key-784.json +1 -0
  928. package/sessions-cli/default/pre-key-785.json +1 -0
  929. package/sessions-cli/default/pre-key-786.json +1 -0
  930. package/sessions-cli/default/pre-key-787.json +1 -0
  931. package/sessions-cli/default/pre-key-788.json +1 -0
  932. package/sessions-cli/default/pre-key-789.json +1 -0
  933. package/sessions-cli/default/pre-key-79.json +1 -0
  934. package/sessions-cli/default/pre-key-790.json +1 -0
  935. package/sessions-cli/default/pre-key-791.json +1 -0
  936. package/sessions-cli/default/pre-key-792.json +1 -0
  937. package/sessions-cli/default/pre-key-793.json +1 -0
  938. package/sessions-cli/default/pre-key-794.json +1 -0
  939. package/sessions-cli/default/pre-key-795.json +1 -0
  940. package/sessions-cli/default/pre-key-796.json +1 -0
  941. package/sessions-cli/default/pre-key-797.json +1 -0
  942. package/sessions-cli/default/pre-key-798.json +1 -0
  943. package/sessions-cli/default/pre-key-799.json +1 -0
  944. package/sessions-cli/default/pre-key-8.json +1 -0
  945. package/sessions-cli/default/pre-key-80.json +1 -0
  946. package/sessions-cli/default/pre-key-800.json +1 -0
  947. package/sessions-cli/default/pre-key-801.json +1 -0
  948. package/sessions-cli/default/pre-key-802.json +1 -0
  949. package/sessions-cli/default/pre-key-803.json +1 -0
  950. package/sessions-cli/default/pre-key-804.json +1 -0
  951. package/sessions-cli/default/pre-key-805.json +1 -0
  952. package/sessions-cli/default/pre-key-806.json +1 -0
  953. package/sessions-cli/default/pre-key-807.json +1 -0
  954. package/sessions-cli/default/pre-key-808.json +1 -0
  955. package/sessions-cli/default/pre-key-809.json +1 -0
  956. package/sessions-cli/default/pre-key-81.json +1 -0
  957. package/sessions-cli/default/pre-key-810.json +1 -0
  958. package/sessions-cli/default/pre-key-811.json +1 -0
  959. package/sessions-cli/default/pre-key-812.json +1 -0
  960. package/sessions-cli/default/pre-key-82.json +1 -0
  961. package/sessions-cli/default/pre-key-83.json +1 -0
  962. package/sessions-cli/default/pre-key-84.json +1 -0
  963. package/sessions-cli/default/pre-key-85.json +1 -0
  964. package/sessions-cli/default/pre-key-86.json +1 -0
  965. package/sessions-cli/default/pre-key-87.json +1 -0
  966. package/sessions-cli/default/pre-key-88.json +1 -0
  967. package/sessions-cli/default/pre-key-89.json +1 -0
  968. package/sessions-cli/default/pre-key-9.json +1 -0
  969. package/sessions-cli/default/pre-key-90.json +1 -0
  970. package/sessions-cli/default/pre-key-91.json +1 -0
  971. package/sessions-cli/default/pre-key-92.json +1 -0
  972. package/sessions-cli/default/pre-key-93.json +1 -0
  973. package/sessions-cli/default/pre-key-94.json +1 -0
  974. package/sessions-cli/default/pre-key-95.json +1 -0
  975. package/sessions-cli/default/pre-key-96.json +1 -0
  976. package/sessions-cli/default/pre-key-97.json +1 -0
  977. package/sessions-cli/default/pre-key-98.json +1 -0
  978. package/sessions-cli/default/pre-key-99.json +1 -0
  979. package/sessions-cli/default/session-103732167577712_1.0.json +1 -0
  980. package/sessions-cli/default/session-123235563786303_1.0.json +1 -0
  981. package/sessions-cli/default/session-181312044433566_1.0.json +1 -0
  982. package/sessions-cli/default/session-42877077966917_1.0.json +1 -0
  983. package/sessions-cli/default/session-62324404687100_1.0.json +1 -0
  984. package/sessions-cli/default/tctoken-6281295802674@s.whatsapp.net.json +1 -0
  985. package/test-autocomplete.ts +66 -0
  986. package/test-sessions-manual/manual-test-bot/app-state-sync-key-AAAAABGP.json +1 -0
  987. package/test-sessions-manual/manual-test-bot/app-state-sync-version-critical_block.json +1 -0
  988. package/test-sessions-manual/manual-test-bot/app-state-sync-version-critical_unblock_low.json +1 -0
  989. package/test-sessions-manual/manual-test-bot/app-state-sync-version-regular.json +1 -0
  990. package/test-sessions-manual/manual-test-bot/app-state-sync-version-regular_high.json +1 -0
  991. package/test-sessions-manual/manual-test-bot/app-state-sync-version-regular_low.json +1 -0
  992. package/test-sessions-manual/manual-test-bot/creds.json +1 -0
  993. package/test-sessions-manual/manual-test-bot/device-list-6285792059652.json +1 -0
  994. package/test-sessions-manual/manual-test-bot/lid-mapping-177919053803568_reverse.json +1 -0
  995. package/test-sessions-manual/manual-test-bot/lid-mapping-6285792059652.json +1 -0
  996. package/test-sessions-manual/manual-test-bot/pre-key-1.json +1 -0
  997. package/test-sessions-manual/manual-test-bot/pre-key-10.json +1 -0
  998. package/test-sessions-manual/manual-test-bot/pre-key-100.json +1 -0
  999. package/test-sessions-manual/manual-test-bot/pre-key-101.json +1 -0
  1000. package/test-sessions-manual/manual-test-bot/pre-key-102.json +1 -0
  1001. package/test-sessions-manual/manual-test-bot/pre-key-103.json +1 -0
  1002. package/test-sessions-manual/manual-test-bot/pre-key-104.json +1 -0
  1003. package/test-sessions-manual/manual-test-bot/pre-key-105.json +1 -0
  1004. package/test-sessions-manual/manual-test-bot/pre-key-106.json +1 -0
  1005. package/test-sessions-manual/manual-test-bot/pre-key-107.json +1 -0
  1006. package/test-sessions-manual/manual-test-bot/pre-key-108.json +1 -0
  1007. package/test-sessions-manual/manual-test-bot/pre-key-109.json +1 -0
  1008. package/test-sessions-manual/manual-test-bot/pre-key-11.json +1 -0
  1009. package/test-sessions-manual/manual-test-bot/pre-key-110.json +1 -0
  1010. package/test-sessions-manual/manual-test-bot/pre-key-111.json +1 -0
  1011. package/test-sessions-manual/manual-test-bot/pre-key-112.json +1 -0
  1012. package/test-sessions-manual/manual-test-bot/pre-key-113.json +1 -0
  1013. package/test-sessions-manual/manual-test-bot/pre-key-114.json +1 -0
  1014. package/test-sessions-manual/manual-test-bot/pre-key-115.json +1 -0
  1015. package/test-sessions-manual/manual-test-bot/pre-key-116.json +1 -0
  1016. package/test-sessions-manual/manual-test-bot/pre-key-117.json +1 -0
  1017. package/test-sessions-manual/manual-test-bot/pre-key-118.json +1 -0
  1018. package/test-sessions-manual/manual-test-bot/pre-key-119.json +1 -0
  1019. package/test-sessions-manual/manual-test-bot/pre-key-12.json +1 -0
  1020. package/test-sessions-manual/manual-test-bot/pre-key-120.json +1 -0
  1021. package/test-sessions-manual/manual-test-bot/pre-key-121.json +1 -0
  1022. package/test-sessions-manual/manual-test-bot/pre-key-122.json +1 -0
  1023. package/test-sessions-manual/manual-test-bot/pre-key-123.json +1 -0
  1024. package/test-sessions-manual/manual-test-bot/pre-key-124.json +1 -0
  1025. package/test-sessions-manual/manual-test-bot/pre-key-125.json +1 -0
  1026. package/test-sessions-manual/manual-test-bot/pre-key-126.json +1 -0
  1027. package/test-sessions-manual/manual-test-bot/pre-key-127.json +1 -0
  1028. package/test-sessions-manual/manual-test-bot/pre-key-128.json +1 -0
  1029. package/test-sessions-manual/manual-test-bot/pre-key-129.json +1 -0
  1030. package/test-sessions-manual/manual-test-bot/pre-key-13.json +1 -0
  1031. package/test-sessions-manual/manual-test-bot/pre-key-130.json +1 -0
  1032. package/test-sessions-manual/manual-test-bot/pre-key-131.json +1 -0
  1033. package/test-sessions-manual/manual-test-bot/pre-key-132.json +1 -0
  1034. package/test-sessions-manual/manual-test-bot/pre-key-133.json +1 -0
  1035. package/test-sessions-manual/manual-test-bot/pre-key-134.json +1 -0
  1036. package/test-sessions-manual/manual-test-bot/pre-key-135.json +1 -0
  1037. package/test-sessions-manual/manual-test-bot/pre-key-136.json +1 -0
  1038. package/test-sessions-manual/manual-test-bot/pre-key-137.json +1 -0
  1039. package/test-sessions-manual/manual-test-bot/pre-key-138.json +1 -0
  1040. package/test-sessions-manual/manual-test-bot/pre-key-139.json +1 -0
  1041. package/test-sessions-manual/manual-test-bot/pre-key-14.json +1 -0
  1042. package/test-sessions-manual/manual-test-bot/pre-key-140.json +1 -0
  1043. package/test-sessions-manual/manual-test-bot/pre-key-141.json +1 -0
  1044. package/test-sessions-manual/manual-test-bot/pre-key-142.json +1 -0
  1045. package/test-sessions-manual/manual-test-bot/pre-key-143.json +1 -0
  1046. package/test-sessions-manual/manual-test-bot/pre-key-144.json +1 -0
  1047. package/test-sessions-manual/manual-test-bot/pre-key-145.json +1 -0
  1048. package/test-sessions-manual/manual-test-bot/pre-key-146.json +1 -0
  1049. package/test-sessions-manual/manual-test-bot/pre-key-147.json +1 -0
  1050. package/test-sessions-manual/manual-test-bot/pre-key-148.json +1 -0
  1051. package/test-sessions-manual/manual-test-bot/pre-key-149.json +1 -0
  1052. package/test-sessions-manual/manual-test-bot/pre-key-15.json +1 -0
  1053. package/test-sessions-manual/manual-test-bot/pre-key-150.json +1 -0
  1054. package/test-sessions-manual/manual-test-bot/pre-key-151.json +1 -0
  1055. package/test-sessions-manual/manual-test-bot/pre-key-152.json +1 -0
  1056. package/test-sessions-manual/manual-test-bot/pre-key-153.json +1 -0
  1057. package/test-sessions-manual/manual-test-bot/pre-key-154.json +1 -0
  1058. package/test-sessions-manual/manual-test-bot/pre-key-155.json +1 -0
  1059. package/test-sessions-manual/manual-test-bot/pre-key-156.json +1 -0
  1060. package/test-sessions-manual/manual-test-bot/pre-key-157.json +1 -0
  1061. package/test-sessions-manual/manual-test-bot/pre-key-158.json +1 -0
  1062. package/test-sessions-manual/manual-test-bot/pre-key-159.json +1 -0
  1063. package/test-sessions-manual/manual-test-bot/pre-key-16.json +1 -0
  1064. package/test-sessions-manual/manual-test-bot/pre-key-160.json +1 -0
  1065. package/test-sessions-manual/manual-test-bot/pre-key-161.json +1 -0
  1066. package/test-sessions-manual/manual-test-bot/pre-key-162.json +1 -0
  1067. package/test-sessions-manual/manual-test-bot/pre-key-163.json +1 -0
  1068. package/test-sessions-manual/manual-test-bot/pre-key-164.json +1 -0
  1069. package/test-sessions-manual/manual-test-bot/pre-key-165.json +1 -0
  1070. package/test-sessions-manual/manual-test-bot/pre-key-166.json +1 -0
  1071. package/test-sessions-manual/manual-test-bot/pre-key-167.json +1 -0
  1072. package/test-sessions-manual/manual-test-bot/pre-key-168.json +1 -0
  1073. package/test-sessions-manual/manual-test-bot/pre-key-169.json +1 -0
  1074. package/test-sessions-manual/manual-test-bot/pre-key-17.json +1 -0
  1075. package/test-sessions-manual/manual-test-bot/pre-key-170.json +1 -0
  1076. package/test-sessions-manual/manual-test-bot/pre-key-171.json +1 -0
  1077. package/test-sessions-manual/manual-test-bot/pre-key-172.json +1 -0
  1078. package/test-sessions-manual/manual-test-bot/pre-key-173.json +1 -0
  1079. package/test-sessions-manual/manual-test-bot/pre-key-174.json +1 -0
  1080. package/test-sessions-manual/manual-test-bot/pre-key-175.json +1 -0
  1081. package/test-sessions-manual/manual-test-bot/pre-key-176.json +1 -0
  1082. package/test-sessions-manual/manual-test-bot/pre-key-177.json +1 -0
  1083. package/test-sessions-manual/manual-test-bot/pre-key-178.json +1 -0
  1084. package/test-sessions-manual/manual-test-bot/pre-key-179.json +1 -0
  1085. package/test-sessions-manual/manual-test-bot/pre-key-18.json +1 -0
  1086. package/test-sessions-manual/manual-test-bot/pre-key-180.json +1 -0
  1087. package/test-sessions-manual/manual-test-bot/pre-key-181.json +1 -0
  1088. package/test-sessions-manual/manual-test-bot/pre-key-182.json +1 -0
  1089. package/test-sessions-manual/manual-test-bot/pre-key-183.json +1 -0
  1090. package/test-sessions-manual/manual-test-bot/pre-key-184.json +1 -0
  1091. package/test-sessions-manual/manual-test-bot/pre-key-185.json +1 -0
  1092. package/test-sessions-manual/manual-test-bot/pre-key-186.json +1 -0
  1093. package/test-sessions-manual/manual-test-bot/pre-key-187.json +1 -0
  1094. package/test-sessions-manual/manual-test-bot/pre-key-188.json +1 -0
  1095. package/test-sessions-manual/manual-test-bot/pre-key-189.json +1 -0
  1096. package/test-sessions-manual/manual-test-bot/pre-key-19.json +1 -0
  1097. package/test-sessions-manual/manual-test-bot/pre-key-190.json +1 -0
  1098. package/test-sessions-manual/manual-test-bot/pre-key-191.json +1 -0
  1099. package/test-sessions-manual/manual-test-bot/pre-key-192.json +1 -0
  1100. package/test-sessions-manual/manual-test-bot/pre-key-193.json +1 -0
  1101. package/test-sessions-manual/manual-test-bot/pre-key-194.json +1 -0
  1102. package/test-sessions-manual/manual-test-bot/pre-key-195.json +1 -0
  1103. package/test-sessions-manual/manual-test-bot/pre-key-196.json +1 -0
  1104. package/test-sessions-manual/manual-test-bot/pre-key-197.json +1 -0
  1105. package/test-sessions-manual/manual-test-bot/pre-key-198.json +1 -0
  1106. package/test-sessions-manual/manual-test-bot/pre-key-199.json +1 -0
  1107. package/test-sessions-manual/manual-test-bot/pre-key-2.json +1 -0
  1108. package/test-sessions-manual/manual-test-bot/pre-key-20.json +1 -0
  1109. package/test-sessions-manual/manual-test-bot/pre-key-200.json +1 -0
  1110. package/test-sessions-manual/manual-test-bot/pre-key-201.json +1 -0
  1111. package/test-sessions-manual/manual-test-bot/pre-key-202.json +1 -0
  1112. package/test-sessions-manual/manual-test-bot/pre-key-203.json +1 -0
  1113. package/test-sessions-manual/manual-test-bot/pre-key-204.json +1 -0
  1114. package/test-sessions-manual/manual-test-bot/pre-key-205.json +1 -0
  1115. package/test-sessions-manual/manual-test-bot/pre-key-206.json +1 -0
  1116. package/test-sessions-manual/manual-test-bot/pre-key-207.json +1 -0
  1117. package/test-sessions-manual/manual-test-bot/pre-key-208.json +1 -0
  1118. package/test-sessions-manual/manual-test-bot/pre-key-209.json +1 -0
  1119. package/test-sessions-manual/manual-test-bot/pre-key-21.json +1 -0
  1120. package/test-sessions-manual/manual-test-bot/pre-key-210.json +1 -0
  1121. package/test-sessions-manual/manual-test-bot/pre-key-211.json +1 -0
  1122. package/test-sessions-manual/manual-test-bot/pre-key-212.json +1 -0
  1123. package/test-sessions-manual/manual-test-bot/pre-key-213.json +1 -0
  1124. package/test-sessions-manual/manual-test-bot/pre-key-214.json +1 -0
  1125. package/test-sessions-manual/manual-test-bot/pre-key-215.json +1 -0
  1126. package/test-sessions-manual/manual-test-bot/pre-key-216.json +1 -0
  1127. package/test-sessions-manual/manual-test-bot/pre-key-217.json +1 -0
  1128. package/test-sessions-manual/manual-test-bot/pre-key-218.json +1 -0
  1129. package/test-sessions-manual/manual-test-bot/pre-key-219.json +1 -0
  1130. package/test-sessions-manual/manual-test-bot/pre-key-22.json +1 -0
  1131. package/test-sessions-manual/manual-test-bot/pre-key-220.json +1 -0
  1132. package/test-sessions-manual/manual-test-bot/pre-key-221.json +1 -0
  1133. package/test-sessions-manual/manual-test-bot/pre-key-222.json +1 -0
  1134. package/test-sessions-manual/manual-test-bot/pre-key-223.json +1 -0
  1135. package/test-sessions-manual/manual-test-bot/pre-key-224.json +1 -0
  1136. package/test-sessions-manual/manual-test-bot/pre-key-225.json +1 -0
  1137. package/test-sessions-manual/manual-test-bot/pre-key-226.json +1 -0
  1138. package/test-sessions-manual/manual-test-bot/pre-key-227.json +1 -0
  1139. package/test-sessions-manual/manual-test-bot/pre-key-228.json +1 -0
  1140. package/test-sessions-manual/manual-test-bot/pre-key-229.json +1 -0
  1141. package/test-sessions-manual/manual-test-bot/pre-key-23.json +1 -0
  1142. package/test-sessions-manual/manual-test-bot/pre-key-230.json +1 -0
  1143. package/test-sessions-manual/manual-test-bot/pre-key-231.json +1 -0
  1144. package/test-sessions-manual/manual-test-bot/pre-key-232.json +1 -0
  1145. package/test-sessions-manual/manual-test-bot/pre-key-233.json +1 -0
  1146. package/test-sessions-manual/manual-test-bot/pre-key-234.json +1 -0
  1147. package/test-sessions-manual/manual-test-bot/pre-key-235.json +1 -0
  1148. package/test-sessions-manual/manual-test-bot/pre-key-236.json +1 -0
  1149. package/test-sessions-manual/manual-test-bot/pre-key-237.json +1 -0
  1150. package/test-sessions-manual/manual-test-bot/pre-key-238.json +1 -0
  1151. package/test-sessions-manual/manual-test-bot/pre-key-239.json +1 -0
  1152. package/test-sessions-manual/manual-test-bot/pre-key-24.json +1 -0
  1153. package/test-sessions-manual/manual-test-bot/pre-key-240.json +1 -0
  1154. package/test-sessions-manual/manual-test-bot/pre-key-241.json +1 -0
  1155. package/test-sessions-manual/manual-test-bot/pre-key-242.json +1 -0
  1156. package/test-sessions-manual/manual-test-bot/pre-key-243.json +1 -0
  1157. package/test-sessions-manual/manual-test-bot/pre-key-244.json +1 -0
  1158. package/test-sessions-manual/manual-test-bot/pre-key-245.json +1 -0
  1159. package/test-sessions-manual/manual-test-bot/pre-key-246.json +1 -0
  1160. package/test-sessions-manual/manual-test-bot/pre-key-247.json +1 -0
  1161. package/test-sessions-manual/manual-test-bot/pre-key-248.json +1 -0
  1162. package/test-sessions-manual/manual-test-bot/pre-key-249.json +1 -0
  1163. package/test-sessions-manual/manual-test-bot/pre-key-25.json +1 -0
  1164. package/test-sessions-manual/manual-test-bot/pre-key-250.json +1 -0
  1165. package/test-sessions-manual/manual-test-bot/pre-key-251.json +1 -0
  1166. package/test-sessions-manual/manual-test-bot/pre-key-252.json +1 -0
  1167. package/test-sessions-manual/manual-test-bot/pre-key-253.json +1 -0
  1168. package/test-sessions-manual/manual-test-bot/pre-key-254.json +1 -0
  1169. package/test-sessions-manual/manual-test-bot/pre-key-255.json +1 -0
  1170. package/test-sessions-manual/manual-test-bot/pre-key-256.json +1 -0
  1171. package/test-sessions-manual/manual-test-bot/pre-key-257.json +1 -0
  1172. package/test-sessions-manual/manual-test-bot/pre-key-258.json +1 -0
  1173. package/test-sessions-manual/manual-test-bot/pre-key-259.json +1 -0
  1174. package/test-sessions-manual/manual-test-bot/pre-key-26.json +1 -0
  1175. package/test-sessions-manual/manual-test-bot/pre-key-260.json +1 -0
  1176. package/test-sessions-manual/manual-test-bot/pre-key-261.json +1 -0
  1177. package/test-sessions-manual/manual-test-bot/pre-key-262.json +1 -0
  1178. package/test-sessions-manual/manual-test-bot/pre-key-263.json +1 -0
  1179. package/test-sessions-manual/manual-test-bot/pre-key-264.json +1 -0
  1180. package/test-sessions-manual/manual-test-bot/pre-key-265.json +1 -0
  1181. package/test-sessions-manual/manual-test-bot/pre-key-266.json +1 -0
  1182. package/test-sessions-manual/manual-test-bot/pre-key-267.json +1 -0
  1183. package/test-sessions-manual/manual-test-bot/pre-key-268.json +1 -0
  1184. package/test-sessions-manual/manual-test-bot/pre-key-269.json +1 -0
  1185. package/test-sessions-manual/manual-test-bot/pre-key-27.json +1 -0
  1186. package/test-sessions-manual/manual-test-bot/pre-key-270.json +1 -0
  1187. package/test-sessions-manual/manual-test-bot/pre-key-271.json +1 -0
  1188. package/test-sessions-manual/manual-test-bot/pre-key-272.json +1 -0
  1189. package/test-sessions-manual/manual-test-bot/pre-key-273.json +1 -0
  1190. package/test-sessions-manual/manual-test-bot/pre-key-274.json +1 -0
  1191. package/test-sessions-manual/manual-test-bot/pre-key-275.json +1 -0
  1192. package/test-sessions-manual/manual-test-bot/pre-key-276.json +1 -0
  1193. package/test-sessions-manual/manual-test-bot/pre-key-277.json +1 -0
  1194. package/test-sessions-manual/manual-test-bot/pre-key-278.json +1 -0
  1195. package/test-sessions-manual/manual-test-bot/pre-key-279.json +1 -0
  1196. package/test-sessions-manual/manual-test-bot/pre-key-28.json +1 -0
  1197. package/test-sessions-manual/manual-test-bot/pre-key-280.json +1 -0
  1198. package/test-sessions-manual/manual-test-bot/pre-key-281.json +1 -0
  1199. package/test-sessions-manual/manual-test-bot/pre-key-282.json +1 -0
  1200. package/test-sessions-manual/manual-test-bot/pre-key-283.json +1 -0
  1201. package/test-sessions-manual/manual-test-bot/pre-key-284.json +1 -0
  1202. package/test-sessions-manual/manual-test-bot/pre-key-285.json +1 -0
  1203. package/test-sessions-manual/manual-test-bot/pre-key-286.json +1 -0
  1204. package/test-sessions-manual/manual-test-bot/pre-key-287.json +1 -0
  1205. package/test-sessions-manual/manual-test-bot/pre-key-288.json +1 -0
  1206. package/test-sessions-manual/manual-test-bot/pre-key-289.json +1 -0
  1207. package/test-sessions-manual/manual-test-bot/pre-key-29.json +1 -0
  1208. package/test-sessions-manual/manual-test-bot/pre-key-290.json +1 -0
  1209. package/test-sessions-manual/manual-test-bot/pre-key-291.json +1 -0
  1210. package/test-sessions-manual/manual-test-bot/pre-key-292.json +1 -0
  1211. package/test-sessions-manual/manual-test-bot/pre-key-293.json +1 -0
  1212. package/test-sessions-manual/manual-test-bot/pre-key-294.json +1 -0
  1213. package/test-sessions-manual/manual-test-bot/pre-key-295.json +1 -0
  1214. package/test-sessions-manual/manual-test-bot/pre-key-296.json +1 -0
  1215. package/test-sessions-manual/manual-test-bot/pre-key-297.json +1 -0
  1216. package/test-sessions-manual/manual-test-bot/pre-key-298.json +1 -0
  1217. package/test-sessions-manual/manual-test-bot/pre-key-299.json +1 -0
  1218. package/test-sessions-manual/manual-test-bot/pre-key-3.json +1 -0
  1219. package/test-sessions-manual/manual-test-bot/pre-key-30.json +1 -0
  1220. package/test-sessions-manual/manual-test-bot/pre-key-300.json +1 -0
  1221. package/test-sessions-manual/manual-test-bot/pre-key-301.json +1 -0
  1222. package/test-sessions-manual/manual-test-bot/pre-key-302.json +1 -0
  1223. package/test-sessions-manual/manual-test-bot/pre-key-303.json +1 -0
  1224. package/test-sessions-manual/manual-test-bot/pre-key-304.json +1 -0
  1225. package/test-sessions-manual/manual-test-bot/pre-key-305.json +1 -0
  1226. package/test-sessions-manual/manual-test-bot/pre-key-306.json +1 -0
  1227. package/test-sessions-manual/manual-test-bot/pre-key-307.json +1 -0
  1228. package/test-sessions-manual/manual-test-bot/pre-key-308.json +1 -0
  1229. package/test-sessions-manual/manual-test-bot/pre-key-309.json +1 -0
  1230. package/test-sessions-manual/manual-test-bot/pre-key-31.json +1 -0
  1231. package/test-sessions-manual/manual-test-bot/pre-key-310.json +1 -0
  1232. package/test-sessions-manual/manual-test-bot/pre-key-311.json +1 -0
  1233. package/test-sessions-manual/manual-test-bot/pre-key-312.json +1 -0
  1234. package/test-sessions-manual/manual-test-bot/pre-key-313.json +1 -0
  1235. package/test-sessions-manual/manual-test-bot/pre-key-314.json +1 -0
  1236. package/test-sessions-manual/manual-test-bot/pre-key-315.json +1 -0
  1237. package/test-sessions-manual/manual-test-bot/pre-key-316.json +1 -0
  1238. package/test-sessions-manual/manual-test-bot/pre-key-317.json +1 -0
  1239. package/test-sessions-manual/manual-test-bot/pre-key-318.json +1 -0
  1240. package/test-sessions-manual/manual-test-bot/pre-key-319.json +1 -0
  1241. package/test-sessions-manual/manual-test-bot/pre-key-32.json +1 -0
  1242. package/test-sessions-manual/manual-test-bot/pre-key-320.json +1 -0
  1243. package/test-sessions-manual/manual-test-bot/pre-key-321.json +1 -0
  1244. package/test-sessions-manual/manual-test-bot/pre-key-322.json +1 -0
  1245. package/test-sessions-manual/manual-test-bot/pre-key-323.json +1 -0
  1246. package/test-sessions-manual/manual-test-bot/pre-key-324.json +1 -0
  1247. package/test-sessions-manual/manual-test-bot/pre-key-325.json +1 -0
  1248. package/test-sessions-manual/manual-test-bot/pre-key-326.json +1 -0
  1249. package/test-sessions-manual/manual-test-bot/pre-key-327.json +1 -0
  1250. package/test-sessions-manual/manual-test-bot/pre-key-328.json +1 -0
  1251. package/test-sessions-manual/manual-test-bot/pre-key-329.json +1 -0
  1252. package/test-sessions-manual/manual-test-bot/pre-key-33.json +1 -0
  1253. package/test-sessions-manual/manual-test-bot/pre-key-330.json +1 -0
  1254. package/test-sessions-manual/manual-test-bot/pre-key-331.json +1 -0
  1255. package/test-sessions-manual/manual-test-bot/pre-key-332.json +1 -0
  1256. package/test-sessions-manual/manual-test-bot/pre-key-333.json +1 -0
  1257. package/test-sessions-manual/manual-test-bot/pre-key-334.json +1 -0
  1258. package/test-sessions-manual/manual-test-bot/pre-key-335.json +1 -0
  1259. package/test-sessions-manual/manual-test-bot/pre-key-336.json +1 -0
  1260. package/test-sessions-manual/manual-test-bot/pre-key-337.json +1 -0
  1261. package/test-sessions-manual/manual-test-bot/pre-key-338.json +1 -0
  1262. package/test-sessions-manual/manual-test-bot/pre-key-339.json +1 -0
  1263. package/test-sessions-manual/manual-test-bot/pre-key-34.json +1 -0
  1264. package/test-sessions-manual/manual-test-bot/pre-key-340.json +1 -0
  1265. package/test-sessions-manual/manual-test-bot/pre-key-341.json +1 -0
  1266. package/test-sessions-manual/manual-test-bot/pre-key-342.json +1 -0
  1267. package/test-sessions-manual/manual-test-bot/pre-key-343.json +1 -0
  1268. package/test-sessions-manual/manual-test-bot/pre-key-344.json +1 -0
  1269. package/test-sessions-manual/manual-test-bot/pre-key-345.json +1 -0
  1270. package/test-sessions-manual/manual-test-bot/pre-key-346.json +1 -0
  1271. package/test-sessions-manual/manual-test-bot/pre-key-347.json +1 -0
  1272. package/test-sessions-manual/manual-test-bot/pre-key-348.json +1 -0
  1273. package/test-sessions-manual/manual-test-bot/pre-key-349.json +1 -0
  1274. package/test-sessions-manual/manual-test-bot/pre-key-35.json +1 -0
  1275. package/test-sessions-manual/manual-test-bot/pre-key-350.json +1 -0
  1276. package/test-sessions-manual/manual-test-bot/pre-key-351.json +1 -0
  1277. package/test-sessions-manual/manual-test-bot/pre-key-352.json +1 -0
  1278. package/test-sessions-manual/manual-test-bot/pre-key-353.json +1 -0
  1279. package/test-sessions-manual/manual-test-bot/pre-key-354.json +1 -0
  1280. package/test-sessions-manual/manual-test-bot/pre-key-355.json +1 -0
  1281. package/test-sessions-manual/manual-test-bot/pre-key-356.json +1 -0
  1282. package/test-sessions-manual/manual-test-bot/pre-key-357.json +1 -0
  1283. package/test-sessions-manual/manual-test-bot/pre-key-358.json +1 -0
  1284. package/test-sessions-manual/manual-test-bot/pre-key-359.json +1 -0
  1285. package/test-sessions-manual/manual-test-bot/pre-key-36.json +1 -0
  1286. package/test-sessions-manual/manual-test-bot/pre-key-360.json +1 -0
  1287. package/test-sessions-manual/manual-test-bot/pre-key-361.json +1 -0
  1288. package/test-sessions-manual/manual-test-bot/pre-key-362.json +1 -0
  1289. package/test-sessions-manual/manual-test-bot/pre-key-363.json +1 -0
  1290. package/test-sessions-manual/manual-test-bot/pre-key-364.json +1 -0
  1291. package/test-sessions-manual/manual-test-bot/pre-key-365.json +1 -0
  1292. package/test-sessions-manual/manual-test-bot/pre-key-366.json +1 -0
  1293. package/test-sessions-manual/manual-test-bot/pre-key-367.json +1 -0
  1294. package/test-sessions-manual/manual-test-bot/pre-key-368.json +1 -0
  1295. package/test-sessions-manual/manual-test-bot/pre-key-369.json +1 -0
  1296. package/test-sessions-manual/manual-test-bot/pre-key-37.json +1 -0
  1297. package/test-sessions-manual/manual-test-bot/pre-key-370.json +1 -0
  1298. package/test-sessions-manual/manual-test-bot/pre-key-371.json +1 -0
  1299. package/test-sessions-manual/manual-test-bot/pre-key-372.json +1 -0
  1300. package/test-sessions-manual/manual-test-bot/pre-key-373.json +1 -0
  1301. package/test-sessions-manual/manual-test-bot/pre-key-374.json +1 -0
  1302. package/test-sessions-manual/manual-test-bot/pre-key-375.json +1 -0
  1303. package/test-sessions-manual/manual-test-bot/pre-key-376.json +1 -0
  1304. package/test-sessions-manual/manual-test-bot/pre-key-377.json +1 -0
  1305. package/test-sessions-manual/manual-test-bot/pre-key-378.json +1 -0
  1306. package/test-sessions-manual/manual-test-bot/pre-key-379.json +1 -0
  1307. package/test-sessions-manual/manual-test-bot/pre-key-38.json +1 -0
  1308. package/test-sessions-manual/manual-test-bot/pre-key-380.json +1 -0
  1309. package/test-sessions-manual/manual-test-bot/pre-key-381.json +1 -0
  1310. package/test-sessions-manual/manual-test-bot/pre-key-382.json +1 -0
  1311. package/test-sessions-manual/manual-test-bot/pre-key-383.json +1 -0
  1312. package/test-sessions-manual/manual-test-bot/pre-key-384.json +1 -0
  1313. package/test-sessions-manual/manual-test-bot/pre-key-385.json +1 -0
  1314. package/test-sessions-manual/manual-test-bot/pre-key-386.json +1 -0
  1315. package/test-sessions-manual/manual-test-bot/pre-key-387.json +1 -0
  1316. package/test-sessions-manual/manual-test-bot/pre-key-388.json +1 -0
  1317. package/test-sessions-manual/manual-test-bot/pre-key-389.json +1 -0
  1318. package/test-sessions-manual/manual-test-bot/pre-key-39.json +1 -0
  1319. package/test-sessions-manual/manual-test-bot/pre-key-390.json +1 -0
  1320. package/test-sessions-manual/manual-test-bot/pre-key-391.json +1 -0
  1321. package/test-sessions-manual/manual-test-bot/pre-key-392.json +1 -0
  1322. package/test-sessions-manual/manual-test-bot/pre-key-393.json +1 -0
  1323. package/test-sessions-manual/manual-test-bot/pre-key-394.json +1 -0
  1324. package/test-sessions-manual/manual-test-bot/pre-key-395.json +1 -0
  1325. package/test-sessions-manual/manual-test-bot/pre-key-396.json +1 -0
  1326. package/test-sessions-manual/manual-test-bot/pre-key-397.json +1 -0
  1327. package/test-sessions-manual/manual-test-bot/pre-key-398.json +1 -0
  1328. package/test-sessions-manual/manual-test-bot/pre-key-399.json +1 -0
  1329. package/test-sessions-manual/manual-test-bot/pre-key-4.json +1 -0
  1330. package/test-sessions-manual/manual-test-bot/pre-key-40.json +1 -0
  1331. package/test-sessions-manual/manual-test-bot/pre-key-400.json +1 -0
  1332. package/test-sessions-manual/manual-test-bot/pre-key-401.json +1 -0
  1333. package/test-sessions-manual/manual-test-bot/pre-key-402.json +1 -0
  1334. package/test-sessions-manual/manual-test-bot/pre-key-403.json +1 -0
  1335. package/test-sessions-manual/manual-test-bot/pre-key-404.json +1 -0
  1336. package/test-sessions-manual/manual-test-bot/pre-key-405.json +1 -0
  1337. package/test-sessions-manual/manual-test-bot/pre-key-406.json +1 -0
  1338. package/test-sessions-manual/manual-test-bot/pre-key-407.json +1 -0
  1339. package/test-sessions-manual/manual-test-bot/pre-key-408.json +1 -0
  1340. package/test-sessions-manual/manual-test-bot/pre-key-409.json +1 -0
  1341. package/test-sessions-manual/manual-test-bot/pre-key-41.json +1 -0
  1342. package/test-sessions-manual/manual-test-bot/pre-key-410.json +1 -0
  1343. package/test-sessions-manual/manual-test-bot/pre-key-411.json +1 -0
  1344. package/test-sessions-manual/manual-test-bot/pre-key-412.json +1 -0
  1345. package/test-sessions-manual/manual-test-bot/pre-key-413.json +1 -0
  1346. package/test-sessions-manual/manual-test-bot/pre-key-414.json +1 -0
  1347. package/test-sessions-manual/manual-test-bot/pre-key-415.json +1 -0
  1348. package/test-sessions-manual/manual-test-bot/pre-key-416.json +1 -0
  1349. package/test-sessions-manual/manual-test-bot/pre-key-417.json +1 -0
  1350. package/test-sessions-manual/manual-test-bot/pre-key-418.json +1 -0
  1351. package/test-sessions-manual/manual-test-bot/pre-key-419.json +1 -0
  1352. package/test-sessions-manual/manual-test-bot/pre-key-42.json +1 -0
  1353. package/test-sessions-manual/manual-test-bot/pre-key-420.json +1 -0
  1354. package/test-sessions-manual/manual-test-bot/pre-key-421.json +1 -0
  1355. package/test-sessions-manual/manual-test-bot/pre-key-422.json +1 -0
  1356. package/test-sessions-manual/manual-test-bot/pre-key-423.json +1 -0
  1357. package/test-sessions-manual/manual-test-bot/pre-key-424.json +1 -0
  1358. package/test-sessions-manual/manual-test-bot/pre-key-425.json +1 -0
  1359. package/test-sessions-manual/manual-test-bot/pre-key-426.json +1 -0
  1360. package/test-sessions-manual/manual-test-bot/pre-key-427.json +1 -0
  1361. package/test-sessions-manual/manual-test-bot/pre-key-428.json +1 -0
  1362. package/test-sessions-manual/manual-test-bot/pre-key-429.json +1 -0
  1363. package/test-sessions-manual/manual-test-bot/pre-key-43.json +1 -0
  1364. package/test-sessions-manual/manual-test-bot/pre-key-430.json +1 -0
  1365. package/test-sessions-manual/manual-test-bot/pre-key-431.json +1 -0
  1366. package/test-sessions-manual/manual-test-bot/pre-key-432.json +1 -0
  1367. package/test-sessions-manual/manual-test-bot/pre-key-433.json +1 -0
  1368. package/test-sessions-manual/manual-test-bot/pre-key-434.json +1 -0
  1369. package/test-sessions-manual/manual-test-bot/pre-key-435.json +1 -0
  1370. package/test-sessions-manual/manual-test-bot/pre-key-436.json +1 -0
  1371. package/test-sessions-manual/manual-test-bot/pre-key-437.json +1 -0
  1372. package/test-sessions-manual/manual-test-bot/pre-key-438.json +1 -0
  1373. package/test-sessions-manual/manual-test-bot/pre-key-439.json +1 -0
  1374. package/test-sessions-manual/manual-test-bot/pre-key-44.json +1 -0
  1375. package/test-sessions-manual/manual-test-bot/pre-key-440.json +1 -0
  1376. package/test-sessions-manual/manual-test-bot/pre-key-441.json +1 -0
  1377. package/test-sessions-manual/manual-test-bot/pre-key-442.json +1 -0
  1378. package/test-sessions-manual/manual-test-bot/pre-key-443.json +1 -0
  1379. package/test-sessions-manual/manual-test-bot/pre-key-444.json +1 -0
  1380. package/test-sessions-manual/manual-test-bot/pre-key-445.json +1 -0
  1381. package/test-sessions-manual/manual-test-bot/pre-key-446.json +1 -0
  1382. package/test-sessions-manual/manual-test-bot/pre-key-447.json +1 -0
  1383. package/test-sessions-manual/manual-test-bot/pre-key-448.json +1 -0
  1384. package/test-sessions-manual/manual-test-bot/pre-key-449.json +1 -0
  1385. package/test-sessions-manual/manual-test-bot/pre-key-45.json +1 -0
  1386. package/test-sessions-manual/manual-test-bot/pre-key-450.json +1 -0
  1387. package/test-sessions-manual/manual-test-bot/pre-key-451.json +1 -0
  1388. package/test-sessions-manual/manual-test-bot/pre-key-452.json +1 -0
  1389. package/test-sessions-manual/manual-test-bot/pre-key-453.json +1 -0
  1390. package/test-sessions-manual/manual-test-bot/pre-key-454.json +1 -0
  1391. package/test-sessions-manual/manual-test-bot/pre-key-455.json +1 -0
  1392. package/test-sessions-manual/manual-test-bot/pre-key-456.json +1 -0
  1393. package/test-sessions-manual/manual-test-bot/pre-key-457.json +1 -0
  1394. package/test-sessions-manual/manual-test-bot/pre-key-458.json +1 -0
  1395. package/test-sessions-manual/manual-test-bot/pre-key-459.json +1 -0
  1396. package/test-sessions-manual/manual-test-bot/pre-key-46.json +1 -0
  1397. package/test-sessions-manual/manual-test-bot/pre-key-460.json +1 -0
  1398. package/test-sessions-manual/manual-test-bot/pre-key-461.json +1 -0
  1399. package/test-sessions-manual/manual-test-bot/pre-key-462.json +1 -0
  1400. package/test-sessions-manual/manual-test-bot/pre-key-463.json +1 -0
  1401. package/test-sessions-manual/manual-test-bot/pre-key-464.json +1 -0
  1402. package/test-sessions-manual/manual-test-bot/pre-key-465.json +1 -0
  1403. package/test-sessions-manual/manual-test-bot/pre-key-466.json +1 -0
  1404. package/test-sessions-manual/manual-test-bot/pre-key-467.json +1 -0
  1405. package/test-sessions-manual/manual-test-bot/pre-key-468.json +1 -0
  1406. package/test-sessions-manual/manual-test-bot/pre-key-469.json +1 -0
  1407. package/test-sessions-manual/manual-test-bot/pre-key-47.json +1 -0
  1408. package/test-sessions-manual/manual-test-bot/pre-key-470.json +1 -0
  1409. package/test-sessions-manual/manual-test-bot/pre-key-471.json +1 -0
  1410. package/test-sessions-manual/manual-test-bot/pre-key-472.json +1 -0
  1411. package/test-sessions-manual/manual-test-bot/pre-key-473.json +1 -0
  1412. package/test-sessions-manual/manual-test-bot/pre-key-474.json +1 -0
  1413. package/test-sessions-manual/manual-test-bot/pre-key-475.json +1 -0
  1414. package/test-sessions-manual/manual-test-bot/pre-key-476.json +1 -0
  1415. package/test-sessions-manual/manual-test-bot/pre-key-477.json +1 -0
  1416. package/test-sessions-manual/manual-test-bot/pre-key-478.json +1 -0
  1417. package/test-sessions-manual/manual-test-bot/pre-key-479.json +1 -0
  1418. package/test-sessions-manual/manual-test-bot/pre-key-48.json +1 -0
  1419. package/test-sessions-manual/manual-test-bot/pre-key-480.json +1 -0
  1420. package/test-sessions-manual/manual-test-bot/pre-key-481.json +1 -0
  1421. package/test-sessions-manual/manual-test-bot/pre-key-482.json +1 -0
  1422. package/test-sessions-manual/manual-test-bot/pre-key-483.json +1 -0
  1423. package/test-sessions-manual/manual-test-bot/pre-key-484.json +1 -0
  1424. package/test-sessions-manual/manual-test-bot/pre-key-485.json +1 -0
  1425. package/test-sessions-manual/manual-test-bot/pre-key-486.json +1 -0
  1426. package/test-sessions-manual/manual-test-bot/pre-key-487.json +1 -0
  1427. package/test-sessions-manual/manual-test-bot/pre-key-488.json +1 -0
  1428. package/test-sessions-manual/manual-test-bot/pre-key-489.json +1 -0
  1429. package/test-sessions-manual/manual-test-bot/pre-key-49.json +1 -0
  1430. package/test-sessions-manual/manual-test-bot/pre-key-490.json +1 -0
  1431. package/test-sessions-manual/manual-test-bot/pre-key-491.json +1 -0
  1432. package/test-sessions-manual/manual-test-bot/pre-key-492.json +1 -0
  1433. package/test-sessions-manual/manual-test-bot/pre-key-493.json +1 -0
  1434. package/test-sessions-manual/manual-test-bot/pre-key-494.json +1 -0
  1435. package/test-sessions-manual/manual-test-bot/pre-key-495.json +1 -0
  1436. package/test-sessions-manual/manual-test-bot/pre-key-496.json +1 -0
  1437. package/test-sessions-manual/manual-test-bot/pre-key-497.json +1 -0
  1438. package/test-sessions-manual/manual-test-bot/pre-key-498.json +1 -0
  1439. package/test-sessions-manual/manual-test-bot/pre-key-499.json +1 -0
  1440. package/test-sessions-manual/manual-test-bot/pre-key-5.json +1 -0
  1441. package/test-sessions-manual/manual-test-bot/pre-key-50.json +1 -0
  1442. package/test-sessions-manual/manual-test-bot/pre-key-500.json +1 -0
  1443. package/test-sessions-manual/manual-test-bot/pre-key-501.json +1 -0
  1444. package/test-sessions-manual/manual-test-bot/pre-key-502.json +1 -0
  1445. package/test-sessions-manual/manual-test-bot/pre-key-503.json +1 -0
  1446. package/test-sessions-manual/manual-test-bot/pre-key-504.json +1 -0
  1447. package/test-sessions-manual/manual-test-bot/pre-key-505.json +1 -0
  1448. package/test-sessions-manual/manual-test-bot/pre-key-506.json +1 -0
  1449. package/test-sessions-manual/manual-test-bot/pre-key-507.json +1 -0
  1450. package/test-sessions-manual/manual-test-bot/pre-key-508.json +1 -0
  1451. package/test-sessions-manual/manual-test-bot/pre-key-509.json +1 -0
  1452. package/test-sessions-manual/manual-test-bot/pre-key-51.json +1 -0
  1453. package/test-sessions-manual/manual-test-bot/pre-key-510.json +1 -0
  1454. package/test-sessions-manual/manual-test-bot/pre-key-511.json +1 -0
  1455. package/test-sessions-manual/manual-test-bot/pre-key-512.json +1 -0
  1456. package/test-sessions-manual/manual-test-bot/pre-key-513.json +1 -0
  1457. package/test-sessions-manual/manual-test-bot/pre-key-514.json +1 -0
  1458. package/test-sessions-manual/manual-test-bot/pre-key-515.json +1 -0
  1459. package/test-sessions-manual/manual-test-bot/pre-key-516.json +1 -0
  1460. package/test-sessions-manual/manual-test-bot/pre-key-517.json +1 -0
  1461. package/test-sessions-manual/manual-test-bot/pre-key-518.json +1 -0
  1462. package/test-sessions-manual/manual-test-bot/pre-key-519.json +1 -0
  1463. package/test-sessions-manual/manual-test-bot/pre-key-52.json +1 -0
  1464. package/test-sessions-manual/manual-test-bot/pre-key-520.json +1 -0
  1465. package/test-sessions-manual/manual-test-bot/pre-key-521.json +1 -0
  1466. package/test-sessions-manual/manual-test-bot/pre-key-522.json +1 -0
  1467. package/test-sessions-manual/manual-test-bot/pre-key-523.json +1 -0
  1468. package/test-sessions-manual/manual-test-bot/pre-key-524.json +1 -0
  1469. package/test-sessions-manual/manual-test-bot/pre-key-525.json +1 -0
  1470. package/test-sessions-manual/manual-test-bot/pre-key-526.json +1 -0
  1471. package/test-sessions-manual/manual-test-bot/pre-key-527.json +1 -0
  1472. package/test-sessions-manual/manual-test-bot/pre-key-528.json +1 -0
  1473. package/test-sessions-manual/manual-test-bot/pre-key-529.json +1 -0
  1474. package/test-sessions-manual/manual-test-bot/pre-key-53.json +1 -0
  1475. package/test-sessions-manual/manual-test-bot/pre-key-530.json +1 -0
  1476. package/test-sessions-manual/manual-test-bot/pre-key-531.json +1 -0
  1477. package/test-sessions-manual/manual-test-bot/pre-key-532.json +1 -0
  1478. package/test-sessions-manual/manual-test-bot/pre-key-533.json +1 -0
  1479. package/test-sessions-manual/manual-test-bot/pre-key-534.json +1 -0
  1480. package/test-sessions-manual/manual-test-bot/pre-key-535.json +1 -0
  1481. package/test-sessions-manual/manual-test-bot/pre-key-536.json +1 -0
  1482. package/test-sessions-manual/manual-test-bot/pre-key-537.json +1 -0
  1483. package/test-sessions-manual/manual-test-bot/pre-key-538.json +1 -0
  1484. package/test-sessions-manual/manual-test-bot/pre-key-539.json +1 -0
  1485. package/test-sessions-manual/manual-test-bot/pre-key-54.json +1 -0
  1486. package/test-sessions-manual/manual-test-bot/pre-key-540.json +1 -0
  1487. package/test-sessions-manual/manual-test-bot/pre-key-541.json +1 -0
  1488. package/test-sessions-manual/manual-test-bot/pre-key-542.json +1 -0
  1489. package/test-sessions-manual/manual-test-bot/pre-key-543.json +1 -0
  1490. package/test-sessions-manual/manual-test-bot/pre-key-544.json +1 -0
  1491. package/test-sessions-manual/manual-test-bot/pre-key-545.json +1 -0
  1492. package/test-sessions-manual/manual-test-bot/pre-key-546.json +1 -0
  1493. package/test-sessions-manual/manual-test-bot/pre-key-547.json +1 -0
  1494. package/test-sessions-manual/manual-test-bot/pre-key-548.json +1 -0
  1495. package/test-sessions-manual/manual-test-bot/pre-key-549.json +1 -0
  1496. package/test-sessions-manual/manual-test-bot/pre-key-55.json +1 -0
  1497. package/test-sessions-manual/manual-test-bot/pre-key-550.json +1 -0
  1498. package/test-sessions-manual/manual-test-bot/pre-key-551.json +1 -0
  1499. package/test-sessions-manual/manual-test-bot/pre-key-552.json +1 -0
  1500. package/test-sessions-manual/manual-test-bot/pre-key-553.json +1 -0
  1501. package/test-sessions-manual/manual-test-bot/pre-key-554.json +1 -0
  1502. package/test-sessions-manual/manual-test-bot/pre-key-555.json +1 -0
  1503. package/test-sessions-manual/manual-test-bot/pre-key-556.json +1 -0
  1504. package/test-sessions-manual/manual-test-bot/pre-key-557.json +1 -0
  1505. package/test-sessions-manual/manual-test-bot/pre-key-558.json +1 -0
  1506. package/test-sessions-manual/manual-test-bot/pre-key-559.json +1 -0
  1507. package/test-sessions-manual/manual-test-bot/pre-key-56.json +1 -0
  1508. package/test-sessions-manual/manual-test-bot/pre-key-560.json +1 -0
  1509. package/test-sessions-manual/manual-test-bot/pre-key-561.json +1 -0
  1510. package/test-sessions-manual/manual-test-bot/pre-key-562.json +1 -0
  1511. package/test-sessions-manual/manual-test-bot/pre-key-563.json +1 -0
  1512. package/test-sessions-manual/manual-test-bot/pre-key-564.json +1 -0
  1513. package/test-sessions-manual/manual-test-bot/pre-key-565.json +1 -0
  1514. package/test-sessions-manual/manual-test-bot/pre-key-566.json +1 -0
  1515. package/test-sessions-manual/manual-test-bot/pre-key-567.json +1 -0
  1516. package/test-sessions-manual/manual-test-bot/pre-key-568.json +1 -0
  1517. package/test-sessions-manual/manual-test-bot/pre-key-569.json +1 -0
  1518. package/test-sessions-manual/manual-test-bot/pre-key-57.json +1 -0
  1519. package/test-sessions-manual/manual-test-bot/pre-key-570.json +1 -0
  1520. package/test-sessions-manual/manual-test-bot/pre-key-571.json +1 -0
  1521. package/test-sessions-manual/manual-test-bot/pre-key-572.json +1 -0
  1522. package/test-sessions-manual/manual-test-bot/pre-key-573.json +1 -0
  1523. package/test-sessions-manual/manual-test-bot/pre-key-574.json +1 -0
  1524. package/test-sessions-manual/manual-test-bot/pre-key-575.json +1 -0
  1525. package/test-sessions-manual/manual-test-bot/pre-key-576.json +1 -0
  1526. package/test-sessions-manual/manual-test-bot/pre-key-577.json +1 -0
  1527. package/test-sessions-manual/manual-test-bot/pre-key-578.json +1 -0
  1528. package/test-sessions-manual/manual-test-bot/pre-key-579.json +1 -0
  1529. package/test-sessions-manual/manual-test-bot/pre-key-58.json +1 -0
  1530. package/test-sessions-manual/manual-test-bot/pre-key-580.json +1 -0
  1531. package/test-sessions-manual/manual-test-bot/pre-key-581.json +1 -0
  1532. package/test-sessions-manual/manual-test-bot/pre-key-582.json +1 -0
  1533. package/test-sessions-manual/manual-test-bot/pre-key-583.json +1 -0
  1534. package/test-sessions-manual/manual-test-bot/pre-key-584.json +1 -0
  1535. package/test-sessions-manual/manual-test-bot/pre-key-585.json +1 -0
  1536. package/test-sessions-manual/manual-test-bot/pre-key-586.json +1 -0
  1537. package/test-sessions-manual/manual-test-bot/pre-key-587.json +1 -0
  1538. package/test-sessions-manual/manual-test-bot/pre-key-588.json +1 -0
  1539. package/test-sessions-manual/manual-test-bot/pre-key-589.json +1 -0
  1540. package/test-sessions-manual/manual-test-bot/pre-key-59.json +1 -0
  1541. package/test-sessions-manual/manual-test-bot/pre-key-590.json +1 -0
  1542. package/test-sessions-manual/manual-test-bot/pre-key-591.json +1 -0
  1543. package/test-sessions-manual/manual-test-bot/pre-key-592.json +1 -0
  1544. package/test-sessions-manual/manual-test-bot/pre-key-593.json +1 -0
  1545. package/test-sessions-manual/manual-test-bot/pre-key-594.json +1 -0
  1546. package/test-sessions-manual/manual-test-bot/pre-key-595.json +1 -0
  1547. package/test-sessions-manual/manual-test-bot/pre-key-596.json +1 -0
  1548. package/test-sessions-manual/manual-test-bot/pre-key-597.json +1 -0
  1549. package/test-sessions-manual/manual-test-bot/pre-key-598.json +1 -0
  1550. package/test-sessions-manual/manual-test-bot/pre-key-599.json +1 -0
  1551. package/test-sessions-manual/manual-test-bot/pre-key-6.json +1 -0
  1552. package/test-sessions-manual/manual-test-bot/pre-key-60.json +1 -0
  1553. package/test-sessions-manual/manual-test-bot/pre-key-600.json +1 -0
  1554. package/test-sessions-manual/manual-test-bot/pre-key-601.json +1 -0
  1555. package/test-sessions-manual/manual-test-bot/pre-key-602.json +1 -0
  1556. package/test-sessions-manual/manual-test-bot/pre-key-603.json +1 -0
  1557. package/test-sessions-manual/manual-test-bot/pre-key-604.json +1 -0
  1558. package/test-sessions-manual/manual-test-bot/pre-key-605.json +1 -0
  1559. package/test-sessions-manual/manual-test-bot/pre-key-606.json +1 -0
  1560. package/test-sessions-manual/manual-test-bot/pre-key-607.json +1 -0
  1561. package/test-sessions-manual/manual-test-bot/pre-key-608.json +1 -0
  1562. package/test-sessions-manual/manual-test-bot/pre-key-609.json +1 -0
  1563. package/test-sessions-manual/manual-test-bot/pre-key-61.json +1 -0
  1564. package/test-sessions-manual/manual-test-bot/pre-key-610.json +1 -0
  1565. package/test-sessions-manual/manual-test-bot/pre-key-611.json +1 -0
  1566. package/test-sessions-manual/manual-test-bot/pre-key-612.json +1 -0
  1567. package/test-sessions-manual/manual-test-bot/pre-key-613.json +1 -0
  1568. package/test-sessions-manual/manual-test-bot/pre-key-614.json +1 -0
  1569. package/test-sessions-manual/manual-test-bot/pre-key-615.json +1 -0
  1570. package/test-sessions-manual/manual-test-bot/pre-key-616.json +1 -0
  1571. package/test-sessions-manual/manual-test-bot/pre-key-617.json +1 -0
  1572. package/test-sessions-manual/manual-test-bot/pre-key-618.json +1 -0
  1573. package/test-sessions-manual/manual-test-bot/pre-key-619.json +1 -0
  1574. package/test-sessions-manual/manual-test-bot/pre-key-62.json +1 -0
  1575. package/test-sessions-manual/manual-test-bot/pre-key-620.json +1 -0
  1576. package/test-sessions-manual/manual-test-bot/pre-key-621.json +1 -0
  1577. package/test-sessions-manual/manual-test-bot/pre-key-622.json +1 -0
  1578. package/test-sessions-manual/manual-test-bot/pre-key-623.json +1 -0
  1579. package/test-sessions-manual/manual-test-bot/pre-key-624.json +1 -0
  1580. package/test-sessions-manual/manual-test-bot/pre-key-625.json +1 -0
  1581. package/test-sessions-manual/manual-test-bot/pre-key-626.json +1 -0
  1582. package/test-sessions-manual/manual-test-bot/pre-key-627.json +1 -0
  1583. package/test-sessions-manual/manual-test-bot/pre-key-628.json +1 -0
  1584. package/test-sessions-manual/manual-test-bot/pre-key-629.json +1 -0
  1585. package/test-sessions-manual/manual-test-bot/pre-key-63.json +1 -0
  1586. package/test-sessions-manual/manual-test-bot/pre-key-630.json +1 -0
  1587. package/test-sessions-manual/manual-test-bot/pre-key-631.json +1 -0
  1588. package/test-sessions-manual/manual-test-bot/pre-key-632.json +1 -0
  1589. package/test-sessions-manual/manual-test-bot/pre-key-633.json +1 -0
  1590. package/test-sessions-manual/manual-test-bot/pre-key-634.json +1 -0
  1591. package/test-sessions-manual/manual-test-bot/pre-key-635.json +1 -0
  1592. package/test-sessions-manual/manual-test-bot/pre-key-636.json +1 -0
  1593. package/test-sessions-manual/manual-test-bot/pre-key-637.json +1 -0
  1594. package/test-sessions-manual/manual-test-bot/pre-key-638.json +1 -0
  1595. package/test-sessions-manual/manual-test-bot/pre-key-639.json +1 -0
  1596. package/test-sessions-manual/manual-test-bot/pre-key-64.json +1 -0
  1597. package/test-sessions-manual/manual-test-bot/pre-key-640.json +1 -0
  1598. package/test-sessions-manual/manual-test-bot/pre-key-641.json +1 -0
  1599. package/test-sessions-manual/manual-test-bot/pre-key-642.json +1 -0
  1600. package/test-sessions-manual/manual-test-bot/pre-key-643.json +1 -0
  1601. package/test-sessions-manual/manual-test-bot/pre-key-644.json +1 -0
  1602. package/test-sessions-manual/manual-test-bot/pre-key-645.json +1 -0
  1603. package/test-sessions-manual/manual-test-bot/pre-key-646.json +1 -0
  1604. package/test-sessions-manual/manual-test-bot/pre-key-647.json +1 -0
  1605. package/test-sessions-manual/manual-test-bot/pre-key-648.json +1 -0
  1606. package/test-sessions-manual/manual-test-bot/pre-key-649.json +1 -0
  1607. package/test-sessions-manual/manual-test-bot/pre-key-65.json +1 -0
  1608. package/test-sessions-manual/manual-test-bot/pre-key-650.json +1 -0
  1609. package/test-sessions-manual/manual-test-bot/pre-key-651.json +1 -0
  1610. package/test-sessions-manual/manual-test-bot/pre-key-652.json +1 -0
  1611. package/test-sessions-manual/manual-test-bot/pre-key-653.json +1 -0
  1612. package/test-sessions-manual/manual-test-bot/pre-key-654.json +1 -0
  1613. package/test-sessions-manual/manual-test-bot/pre-key-655.json +1 -0
  1614. package/test-sessions-manual/manual-test-bot/pre-key-656.json +1 -0
  1615. package/test-sessions-manual/manual-test-bot/pre-key-657.json +1 -0
  1616. package/test-sessions-manual/manual-test-bot/pre-key-658.json +1 -0
  1617. package/test-sessions-manual/manual-test-bot/pre-key-659.json +1 -0
  1618. package/test-sessions-manual/manual-test-bot/pre-key-66.json +1 -0
  1619. package/test-sessions-manual/manual-test-bot/pre-key-660.json +1 -0
  1620. package/test-sessions-manual/manual-test-bot/pre-key-661.json +1 -0
  1621. package/test-sessions-manual/manual-test-bot/pre-key-662.json +1 -0
  1622. package/test-sessions-manual/manual-test-bot/pre-key-663.json +1 -0
  1623. package/test-sessions-manual/manual-test-bot/pre-key-664.json +1 -0
  1624. package/test-sessions-manual/manual-test-bot/pre-key-665.json +1 -0
  1625. package/test-sessions-manual/manual-test-bot/pre-key-666.json +1 -0
  1626. package/test-sessions-manual/manual-test-bot/pre-key-667.json +1 -0
  1627. package/test-sessions-manual/manual-test-bot/pre-key-668.json +1 -0
  1628. package/test-sessions-manual/manual-test-bot/pre-key-669.json +1 -0
  1629. package/test-sessions-manual/manual-test-bot/pre-key-67.json +1 -0
  1630. package/test-sessions-manual/manual-test-bot/pre-key-670.json +1 -0
  1631. package/test-sessions-manual/manual-test-bot/pre-key-671.json +1 -0
  1632. package/test-sessions-manual/manual-test-bot/pre-key-672.json +1 -0
  1633. package/test-sessions-manual/manual-test-bot/pre-key-673.json +1 -0
  1634. package/test-sessions-manual/manual-test-bot/pre-key-674.json +1 -0
  1635. package/test-sessions-manual/manual-test-bot/pre-key-675.json +1 -0
  1636. package/test-sessions-manual/manual-test-bot/pre-key-676.json +1 -0
  1637. package/test-sessions-manual/manual-test-bot/pre-key-677.json +1 -0
  1638. package/test-sessions-manual/manual-test-bot/pre-key-678.json +1 -0
  1639. package/test-sessions-manual/manual-test-bot/pre-key-679.json +1 -0
  1640. package/test-sessions-manual/manual-test-bot/pre-key-68.json +1 -0
  1641. package/test-sessions-manual/manual-test-bot/pre-key-680.json +1 -0
  1642. package/test-sessions-manual/manual-test-bot/pre-key-681.json +1 -0
  1643. package/test-sessions-manual/manual-test-bot/pre-key-682.json +1 -0
  1644. package/test-sessions-manual/manual-test-bot/pre-key-683.json +1 -0
  1645. package/test-sessions-manual/manual-test-bot/pre-key-684.json +1 -0
  1646. package/test-sessions-manual/manual-test-bot/pre-key-685.json +1 -0
  1647. package/test-sessions-manual/manual-test-bot/pre-key-686.json +1 -0
  1648. package/test-sessions-manual/manual-test-bot/pre-key-687.json +1 -0
  1649. package/test-sessions-manual/manual-test-bot/pre-key-688.json +1 -0
  1650. package/test-sessions-manual/manual-test-bot/pre-key-689.json +1 -0
  1651. package/test-sessions-manual/manual-test-bot/pre-key-69.json +1 -0
  1652. package/test-sessions-manual/manual-test-bot/pre-key-690.json +1 -0
  1653. package/test-sessions-manual/manual-test-bot/pre-key-691.json +1 -0
  1654. package/test-sessions-manual/manual-test-bot/pre-key-692.json +1 -0
  1655. package/test-sessions-manual/manual-test-bot/pre-key-693.json +1 -0
  1656. package/test-sessions-manual/manual-test-bot/pre-key-694.json +1 -0
  1657. package/test-sessions-manual/manual-test-bot/pre-key-695.json +1 -0
  1658. package/test-sessions-manual/manual-test-bot/pre-key-696.json +1 -0
  1659. package/test-sessions-manual/manual-test-bot/pre-key-697.json +1 -0
  1660. package/test-sessions-manual/manual-test-bot/pre-key-698.json +1 -0
  1661. package/test-sessions-manual/manual-test-bot/pre-key-699.json +1 -0
  1662. package/test-sessions-manual/manual-test-bot/pre-key-7.json +1 -0
  1663. package/test-sessions-manual/manual-test-bot/pre-key-70.json +1 -0
  1664. package/test-sessions-manual/manual-test-bot/pre-key-700.json +1 -0
  1665. package/test-sessions-manual/manual-test-bot/pre-key-701.json +1 -0
  1666. package/test-sessions-manual/manual-test-bot/pre-key-702.json +1 -0
  1667. package/test-sessions-manual/manual-test-bot/pre-key-703.json +1 -0
  1668. package/test-sessions-manual/manual-test-bot/pre-key-704.json +1 -0
  1669. package/test-sessions-manual/manual-test-bot/pre-key-705.json +1 -0
  1670. package/test-sessions-manual/manual-test-bot/pre-key-706.json +1 -0
  1671. package/test-sessions-manual/manual-test-bot/pre-key-707.json +1 -0
  1672. package/test-sessions-manual/manual-test-bot/pre-key-708.json +1 -0
  1673. package/test-sessions-manual/manual-test-bot/pre-key-709.json +1 -0
  1674. package/test-sessions-manual/manual-test-bot/pre-key-71.json +1 -0
  1675. package/test-sessions-manual/manual-test-bot/pre-key-710.json +1 -0
  1676. package/test-sessions-manual/manual-test-bot/pre-key-711.json +1 -0
  1677. package/test-sessions-manual/manual-test-bot/pre-key-712.json +1 -0
  1678. package/test-sessions-manual/manual-test-bot/pre-key-713.json +1 -0
  1679. package/test-sessions-manual/manual-test-bot/pre-key-714.json +1 -0
  1680. package/test-sessions-manual/manual-test-bot/pre-key-715.json +1 -0
  1681. package/test-sessions-manual/manual-test-bot/pre-key-716.json +1 -0
  1682. package/test-sessions-manual/manual-test-bot/pre-key-717.json +1 -0
  1683. package/test-sessions-manual/manual-test-bot/pre-key-718.json +1 -0
  1684. package/test-sessions-manual/manual-test-bot/pre-key-719.json +1 -0
  1685. package/test-sessions-manual/manual-test-bot/pre-key-72.json +1 -0
  1686. package/test-sessions-manual/manual-test-bot/pre-key-720.json +1 -0
  1687. package/test-sessions-manual/manual-test-bot/pre-key-721.json +1 -0
  1688. package/test-sessions-manual/manual-test-bot/pre-key-722.json +1 -0
  1689. package/test-sessions-manual/manual-test-bot/pre-key-723.json +1 -0
  1690. package/test-sessions-manual/manual-test-bot/pre-key-724.json +1 -0
  1691. package/test-sessions-manual/manual-test-bot/pre-key-725.json +1 -0
  1692. package/test-sessions-manual/manual-test-bot/pre-key-726.json +1 -0
  1693. package/test-sessions-manual/manual-test-bot/pre-key-727.json +1 -0
  1694. package/test-sessions-manual/manual-test-bot/pre-key-728.json +1 -0
  1695. package/test-sessions-manual/manual-test-bot/pre-key-729.json +1 -0
  1696. package/test-sessions-manual/manual-test-bot/pre-key-73.json +1 -0
  1697. package/test-sessions-manual/manual-test-bot/pre-key-730.json +1 -0
  1698. package/test-sessions-manual/manual-test-bot/pre-key-731.json +1 -0
  1699. package/test-sessions-manual/manual-test-bot/pre-key-732.json +1 -0
  1700. package/test-sessions-manual/manual-test-bot/pre-key-733.json +1 -0
  1701. package/test-sessions-manual/manual-test-bot/pre-key-734.json +1 -0
  1702. package/test-sessions-manual/manual-test-bot/pre-key-735.json +1 -0
  1703. package/test-sessions-manual/manual-test-bot/pre-key-736.json +1 -0
  1704. package/test-sessions-manual/manual-test-bot/pre-key-737.json +1 -0
  1705. package/test-sessions-manual/manual-test-bot/pre-key-738.json +1 -0
  1706. package/test-sessions-manual/manual-test-bot/pre-key-739.json +1 -0
  1707. package/test-sessions-manual/manual-test-bot/pre-key-74.json +1 -0
  1708. package/test-sessions-manual/manual-test-bot/pre-key-740.json +1 -0
  1709. package/test-sessions-manual/manual-test-bot/pre-key-741.json +1 -0
  1710. package/test-sessions-manual/manual-test-bot/pre-key-742.json +1 -0
  1711. package/test-sessions-manual/manual-test-bot/pre-key-743.json +1 -0
  1712. package/test-sessions-manual/manual-test-bot/pre-key-744.json +1 -0
  1713. package/test-sessions-manual/manual-test-bot/pre-key-745.json +1 -0
  1714. package/test-sessions-manual/manual-test-bot/pre-key-746.json +1 -0
  1715. package/test-sessions-manual/manual-test-bot/pre-key-747.json +1 -0
  1716. package/test-sessions-manual/manual-test-bot/pre-key-748.json +1 -0
  1717. package/test-sessions-manual/manual-test-bot/pre-key-749.json +1 -0
  1718. package/test-sessions-manual/manual-test-bot/pre-key-75.json +1 -0
  1719. package/test-sessions-manual/manual-test-bot/pre-key-750.json +1 -0
  1720. package/test-sessions-manual/manual-test-bot/pre-key-751.json +1 -0
  1721. package/test-sessions-manual/manual-test-bot/pre-key-752.json +1 -0
  1722. package/test-sessions-manual/manual-test-bot/pre-key-753.json +1 -0
  1723. package/test-sessions-manual/manual-test-bot/pre-key-754.json +1 -0
  1724. package/test-sessions-manual/manual-test-bot/pre-key-755.json +1 -0
  1725. package/test-sessions-manual/manual-test-bot/pre-key-756.json +1 -0
  1726. package/test-sessions-manual/manual-test-bot/pre-key-757.json +1 -0
  1727. package/test-sessions-manual/manual-test-bot/pre-key-758.json +1 -0
  1728. package/test-sessions-manual/manual-test-bot/pre-key-759.json +1 -0
  1729. package/test-sessions-manual/manual-test-bot/pre-key-76.json +1 -0
  1730. package/test-sessions-manual/manual-test-bot/pre-key-760.json +1 -0
  1731. package/test-sessions-manual/manual-test-bot/pre-key-761.json +1 -0
  1732. package/test-sessions-manual/manual-test-bot/pre-key-762.json +1 -0
  1733. package/test-sessions-manual/manual-test-bot/pre-key-763.json +1 -0
  1734. package/test-sessions-manual/manual-test-bot/pre-key-764.json +1 -0
  1735. package/test-sessions-manual/manual-test-bot/pre-key-765.json +1 -0
  1736. package/test-sessions-manual/manual-test-bot/pre-key-766.json +1 -0
  1737. package/test-sessions-manual/manual-test-bot/pre-key-767.json +1 -0
  1738. package/test-sessions-manual/manual-test-bot/pre-key-768.json +1 -0
  1739. package/test-sessions-manual/manual-test-bot/pre-key-769.json +1 -0
  1740. package/test-sessions-manual/manual-test-bot/pre-key-77.json +1 -0
  1741. package/test-sessions-manual/manual-test-bot/pre-key-770.json +1 -0
  1742. package/test-sessions-manual/manual-test-bot/pre-key-771.json +1 -0
  1743. package/test-sessions-manual/manual-test-bot/pre-key-772.json +1 -0
  1744. package/test-sessions-manual/manual-test-bot/pre-key-773.json +1 -0
  1745. package/test-sessions-manual/manual-test-bot/pre-key-774.json +1 -0
  1746. package/test-sessions-manual/manual-test-bot/pre-key-775.json +1 -0
  1747. package/test-sessions-manual/manual-test-bot/pre-key-776.json +1 -0
  1748. package/test-sessions-manual/manual-test-bot/pre-key-777.json +1 -0
  1749. package/test-sessions-manual/manual-test-bot/pre-key-778.json +1 -0
  1750. package/test-sessions-manual/manual-test-bot/pre-key-779.json +1 -0
  1751. package/test-sessions-manual/manual-test-bot/pre-key-78.json +1 -0
  1752. package/test-sessions-manual/manual-test-bot/pre-key-780.json +1 -0
  1753. package/test-sessions-manual/manual-test-bot/pre-key-781.json +1 -0
  1754. package/test-sessions-manual/manual-test-bot/pre-key-782.json +1 -0
  1755. package/test-sessions-manual/manual-test-bot/pre-key-783.json +1 -0
  1756. package/test-sessions-manual/manual-test-bot/pre-key-784.json +1 -0
  1757. package/test-sessions-manual/manual-test-bot/pre-key-785.json +1 -0
  1758. package/test-sessions-manual/manual-test-bot/pre-key-786.json +1 -0
  1759. package/test-sessions-manual/manual-test-bot/pre-key-787.json +1 -0
  1760. package/test-sessions-manual/manual-test-bot/pre-key-788.json +1 -0
  1761. package/test-sessions-manual/manual-test-bot/pre-key-789.json +1 -0
  1762. package/test-sessions-manual/manual-test-bot/pre-key-79.json +1 -0
  1763. package/test-sessions-manual/manual-test-bot/pre-key-790.json +1 -0
  1764. package/test-sessions-manual/manual-test-bot/pre-key-791.json +1 -0
  1765. package/test-sessions-manual/manual-test-bot/pre-key-792.json +1 -0
  1766. package/test-sessions-manual/manual-test-bot/pre-key-793.json +1 -0
  1767. package/test-sessions-manual/manual-test-bot/pre-key-794.json +1 -0
  1768. package/test-sessions-manual/manual-test-bot/pre-key-795.json +1 -0
  1769. package/test-sessions-manual/manual-test-bot/pre-key-796.json +1 -0
  1770. package/test-sessions-manual/manual-test-bot/pre-key-797.json +1 -0
  1771. package/test-sessions-manual/manual-test-bot/pre-key-798.json +1 -0
  1772. package/test-sessions-manual/manual-test-bot/pre-key-799.json +1 -0
  1773. package/test-sessions-manual/manual-test-bot/pre-key-8.json +1 -0
  1774. package/test-sessions-manual/manual-test-bot/pre-key-80.json +1 -0
  1775. package/test-sessions-manual/manual-test-bot/pre-key-800.json +1 -0
  1776. package/test-sessions-manual/manual-test-bot/pre-key-801.json +1 -0
  1777. package/test-sessions-manual/manual-test-bot/pre-key-802.json +1 -0
  1778. package/test-sessions-manual/manual-test-bot/pre-key-803.json +1 -0
  1779. package/test-sessions-manual/manual-test-bot/pre-key-804.json +1 -0
  1780. package/test-sessions-manual/manual-test-bot/pre-key-805.json +1 -0
  1781. package/test-sessions-manual/manual-test-bot/pre-key-806.json +1 -0
  1782. package/test-sessions-manual/manual-test-bot/pre-key-807.json +1 -0
  1783. package/test-sessions-manual/manual-test-bot/pre-key-808.json +1 -0
  1784. package/test-sessions-manual/manual-test-bot/pre-key-809.json +1 -0
  1785. package/test-sessions-manual/manual-test-bot/pre-key-81.json +1 -0
  1786. package/test-sessions-manual/manual-test-bot/pre-key-810.json +1 -0
  1787. package/test-sessions-manual/manual-test-bot/pre-key-811.json +1 -0
  1788. package/test-sessions-manual/manual-test-bot/pre-key-812.json +1 -0
  1789. package/test-sessions-manual/manual-test-bot/pre-key-82.json +1 -0
  1790. package/test-sessions-manual/manual-test-bot/pre-key-83.json +1 -0
  1791. package/test-sessions-manual/manual-test-bot/pre-key-84.json +1 -0
  1792. package/test-sessions-manual/manual-test-bot/pre-key-85.json +1 -0
  1793. package/test-sessions-manual/manual-test-bot/pre-key-86.json +1 -0
  1794. package/test-sessions-manual/manual-test-bot/pre-key-87.json +1 -0
  1795. package/test-sessions-manual/manual-test-bot/pre-key-88.json +1 -0
  1796. package/test-sessions-manual/manual-test-bot/pre-key-89.json +1 -0
  1797. package/test-sessions-manual/manual-test-bot/pre-key-9.json +1 -0
  1798. package/test-sessions-manual/manual-test-bot/pre-key-90.json +1 -0
  1799. package/test-sessions-manual/manual-test-bot/pre-key-91.json +1 -0
  1800. package/test-sessions-manual/manual-test-bot/pre-key-92.json +1 -0
  1801. package/test-sessions-manual/manual-test-bot/pre-key-93.json +1 -0
  1802. package/test-sessions-manual/manual-test-bot/pre-key-94.json +1 -0
  1803. package/test-sessions-manual/manual-test-bot/pre-key-95.json +1 -0
  1804. package/test-sessions-manual/manual-test-bot/pre-key-96.json +1 -0
  1805. package/test-sessions-manual/manual-test-bot/pre-key-97.json +1 -0
  1806. package/test-sessions-manual/manual-test-bot/pre-key-98.json +1 -0
  1807. package/test-sessions-manual/manual-test-bot/pre-key-99.json +1 -0
  1808. package/test-sessions-manual/manual-test-bot/session-177919053803568_1.0.json +1 -0
@@ -1,9 +1,14 @@
1
- import makeWASocket, { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, downloadMediaMessage, } from "@whiskeysockets/baileys";
1
+ import makeWASocket, { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, Browsers, downloadMediaMessage, } from "@whiskeysockets/baileys";
2
2
  import { EventEmitter } from "node:events";
3
- import pino from "pino";
3
+ import { createFilteredLogger } from "../utils/filtered-logger.js";
4
+ import { enableConsoleFilter, disableConsoleFilter, } from "../utils/console-filter.js";
4
5
  import * as path from "node:path";
6
+ import * as fs from "node:fs";
5
7
  import { AuthHandler } from "../handlers/AuthHandler.js";
6
8
  import { MessageHandler } from "../handlers/MessageHandler.js";
9
+ import { TIMEOUTS } from "../constants/timeouts.js";
10
+ import { CACHE_CONFIG } from "../constants/cache.js";
11
+ import { validatePhoneNumber, validateJID, validateMessageText, validateGroupName, validatePhoneNumbers, } from "../utils/validation.js";
7
12
  /**
8
13
  * LRU Cache for LID to JID mappings
9
14
  * Prevents unbounded memory growth while maintaining frequently used mappings
@@ -11,7 +16,7 @@ import { MessageHandler } from "../handlers/MessageHandler.js";
11
16
  class LruCache {
12
17
  cache;
13
18
  maxSize;
14
- constructor(maxSize = 1000) {
19
+ constructor(maxSize = CACHE_CONFIG.LID_MAP_MAX_SIZE) {
15
20
  this.cache = new Map();
16
21
  this.maxSize = maxSize;
17
22
  }
@@ -48,6 +53,34 @@ class LruCache {
48
53
  get size() {
49
54
  return this.cache.size;
50
55
  }
56
+ /**
57
+ * Get an iterator for all entries in the cache
58
+ * @returns Iterator of [key, value] tuples
59
+ */
60
+ entries() {
61
+ return this.cache.entries();
62
+ }
63
+ /**
64
+ * Get an iterator for all keys in the cache
65
+ * @returns Iterator of keys
66
+ */
67
+ keys() {
68
+ return this.cache.keys();
69
+ }
70
+ /**
71
+ * Get an iterator for all values in the cache
72
+ * @returns Iterator of values
73
+ */
74
+ values() {
75
+ return this.cache.values();
76
+ }
77
+ /**
78
+ * Execute a callback for each entry in the cache
79
+ * @param callback - Function to call for each entry
80
+ */
81
+ forEach(callback) {
82
+ this.cache.forEach(callback);
83
+ }
51
84
  }
52
85
  /**
53
86
  * Main client class for interacting with WhatsApp
@@ -57,33 +90,54 @@ export class MiawClient extends EventEmitter {
57
90
  socket = null;
58
91
  authHandler;
59
92
  connectionState = "disconnected";
93
+ connectionStateTimestamp = 0;
94
+ connectionWatchdogTimer = null;
60
95
  reconnectAttempts = 0;
61
96
  reconnectTimer = null;
97
+ loggingOut = false;
62
98
  logger;
63
- lidToJidMap = new LruCache(1000);
64
- // In-memory stores for v0.9.0
99
+ lidToJidMap = new LruCache();
100
+ // Custom stores for contacts, chats, messages (Baileys v7 removed makeInMemoryStore)
65
101
  contactsStore = new Map();
102
+ chatsStore = new Map();
103
+ messagesStore = new Map();
66
104
  labelsStore = new Map();
67
- messagesStore = new Map(); // JID -> messages
68
- chatsStore = new Map(); // JID -> chat info
105
+ // Store label-chat associations (labelId -> Set of chatJids)
106
+ labelChatsStore = new Map();
107
+ // Track pending history fetch requests for loadMoreMessages
108
+ pendingHistoryRequests = new Map();
109
+ labelEventCount = 0;
110
+ lastLabelSyncTime;
111
+ // Track initial label sync to ensure fetchAllLabels waits for it
112
+ initialLabelSyncPromise = null;
113
+ initialLabelSyncComplete = false;
114
+ // Store auth state for logout access (needed when disconnected)
115
+ authState = null;
69
116
  constructor(options) {
70
117
  super();
118
+ // Initialize logger first (needed for options)
119
+ const logger = options.logger || createFilteredLogger(options.debug || false);
71
120
  // Set default options
72
121
  this.options = {
73
122
  instanceId: options.instanceId,
74
123
  sessionPath: options.sessionPath || "./sessions",
75
124
  debug: options.debug || false,
76
- logger: options.logger,
125
+ logger: logger,
77
126
  autoReconnect: options.autoReconnect !== false,
78
127
  maxReconnectAttempts: options.maxReconnectAttempts || Infinity,
79
- reconnectDelay: options.reconnectDelay || 3000,
128
+ reconnectDelay: options.reconnectDelay || TIMEOUTS.RECONNECT_DELAY,
129
+ stuckStateTimeout: options.stuckStateTimeout || TIMEOUTS.STUCK_STATE,
130
+ qrGracePeriod: options.qrGracePeriod || TIMEOUTS.QR_GRACE_PERIOD,
131
+ qrScanTimeout: options.qrScanTimeout || TIMEOUTS.QR_SCAN_TIMEOUT,
132
+ connectionTimeout: options.connectionTimeout || TIMEOUTS.CONNECTION_TIMEOUT,
80
133
  };
81
- // Initialize logger
82
- this.logger =
83
- this.options.logger ||
84
- pino({
85
- level: this.options.debug ? "debug" : "silent",
86
- });
134
+ // Use the initialized logger
135
+ this.logger = logger;
136
+ // Enable console filter to suppress libsignal logs when debug is off
137
+ // libsignal logs directly to console.info/warn, bypassing our logger
138
+ if (!this.options.debug) {
139
+ enableConsoleFilter();
140
+ }
87
141
  // Initialize handlers
88
142
  this.authHandler = new AuthHandler(this.options.sessionPath, this.options.instanceId);
89
143
  }
@@ -91,13 +145,42 @@ export class MiawClient extends EventEmitter {
91
145
  * Connect to WhatsApp
92
146
  */
93
147
  async connect() {
148
+ // Check for stale "connecting" state (stuck for more than configured timeout)
149
+ if (this.connectionState === "connecting") {
150
+ const elapsed = Date.now() - this.connectionStateTimestamp;
151
+ if (elapsed < this.options.stuckStateTimeout) {
152
+ this.logger.info(`Already connecting (${elapsed}ms), skipping connect() call`);
153
+ return;
154
+ }
155
+ else {
156
+ this.logger.warn(`Stuck in "connecting" state for ${elapsed}ms, forcing reconnect`);
157
+ this.updateConnectionState("disconnected");
158
+ }
159
+ }
160
+ // Don't reconnect if already connected
161
+ if (this.connectionState === "connected") {
162
+ this.logger.info("Already connected, skipping connect() call");
163
+ return;
164
+ }
94
165
  try {
95
166
  this.updateConnectionState("connecting");
167
+ // Load persisted stores from disk before connecting
168
+ // This ensures data is available even if Baileys history sync doesn't fire
169
+ // (Known Baileys v7 issue: history sync notification may be received but never processed)
170
+ this.loadLabelsFromFile();
171
+ this.loadContactsFromFile();
172
+ this.loadLidMappingsFromFile(); // Load LID mappings BEFORE chats for resolution
173
+ this.loadChatsFromFile();
174
+ this.loadMessagesFromFile();
96
175
  // Load auth state
97
176
  const { state, saveCreds } = await this.authHandler.initialize();
177
+ // Store auth state for logout access (needed when disconnected)
178
+ this.authState = { creds: state.creds };
98
179
  // Get latest Baileys version
99
180
  const { version } = await fetchLatestBaileysVersion();
100
181
  // Create socket
182
+ const debugMode = this.options.debug;
183
+ const logger = this.logger;
101
184
  this.socket = makeWASocket({
102
185
  version,
103
186
  logger: this.logger,
@@ -106,11 +189,18 @@ export class MiawClient extends EventEmitter {
106
189
  creds: state.creds,
107
190
  keys: makeCacheableSignalKeyStore(state.keys, this.logger),
108
191
  },
109
- browser: ["Miaw", "Chrome", "1.0.0"],
192
+ browser: Browsers.macOS("Desktop"), // Desktop for more history
110
193
  generateHighQualityLinkPreview: true,
111
- // Enable app state sync for labels and other features
112
- syncFullHistory: false,
194
+ // Enable full history sync to populate stores
195
+ syncFullHistory: true,
113
196
  fireInitQueries: true,
197
+ // Debug callback to see if history sync notifications are received
198
+ shouldSyncHistoryMessage: (msg) => {
199
+ if (debugMode) {
200
+ logger.debug(`[shouldSyncHistoryMessage] syncType: ${msg.syncType}`);
201
+ }
202
+ return true; // Always sync
203
+ },
114
204
  });
115
205
  // Register event handlers
116
206
  this.registerSocketEvents(saveCreds);
@@ -150,10 +240,25 @@ export class MiawClient extends EventEmitter {
150
240
  this.updateConnectionState("connected");
151
241
  this.emit("ready");
152
242
  this.logger.info("Connected to WhatsApp");
153
- // Sync app state to populate labels (WhatsApp Business)
154
- // Labels are stored in the 'regular' app state collection
155
- this.syncLabelsFromAppState().catch((error) => {
243
+ // Log store sizes after connection
244
+ if (this.options.debug) {
245
+ this.logger.debug(`[ready] Stores: contacts=${this.contactsStore.size}, chats=${this.chatsStore.size}, messages=${this.messagesStore.size}`);
246
+ // Also log after a delay to catch async updates
247
+ setTimeout(() => {
248
+ this.logger.debug(`[ready+5s] Stores: contacts=${this.contactsStore.size}, chats=${this.chatsStore.size}, messages=${this.messagesStore.size}`);
249
+ }, 5000);
250
+ }
251
+ // Track the initial sync promise so fetchAllLabels can await it
252
+ // This ensures CLI commands that run immediately after connection
253
+ // will wait for the sync to complete before returning empty results
254
+ this.initialLabelSyncPromise = this.syncLabelsFromAppState()
255
+ .then(() => {
256
+ this.initialLabelSyncComplete = true;
257
+ this.logger.debug("Initial label sync completed");
258
+ })
259
+ .catch((error) => {
156
260
  this.logger.warn("Failed to sync labels from app state:", error);
261
+ this.initialLabelSyncComplete = true; // Mark complete even on error
157
262
  });
158
263
  }
159
264
  });
@@ -162,24 +267,88 @@ export class MiawClient extends EventEmitter {
162
267
  await saveCreds();
163
268
  this.emit("session_saved");
164
269
  });
165
- // Contact updates - build LID to JID mapping and populate contacts store
270
+ // LID mapping update - captures LID to PN (phone number) mappings
271
+ // This event is part of Baileys v7 LID privacy feature
272
+ // Note: This event is WIP and may not always fire
273
+ this.socket.ev.on("lid-mapping.update", (mapping) => {
274
+ this.addLidMapping(mapping.lid, mapping.pn, "BaileysEvent");
275
+ });
276
+ // Contact updates - build LID to JID mapping and update store
166
277
  this.socket.ev.on("contacts.upsert", (contacts) => {
278
+ if (this.options.debug) {
279
+ this.logger.debug(`[contacts.upsert] Received ${contacts.length} contacts`);
280
+ if (contacts.length > 0) {
281
+ this.logger.debug(`[contacts.upsert] Sample: ${JSON.stringify(contacts[0])}`);
282
+ }
283
+ }
167
284
  this.updateLidToJidMapping(contacts);
168
285
  this.updateContactsStore(contacts);
169
286
  });
170
287
  this.socket.ev.on("contacts.update", (contacts) => {
288
+ if (this.options.debug) {
289
+ this.logger.debug(`[contacts.update] Received ${contacts.length} contact updates`);
290
+ if (contacts.length > 0) {
291
+ this.logger.debug(`[contacts.update] Sample: ${JSON.stringify(contacts[0])}`);
292
+ }
293
+ }
171
294
  this.updateLidToJidMapping(contacts);
172
295
  this.updateContactsStore(contacts);
173
296
  });
174
- // Chat updates - extract LID mappings from chat data and populate chats store
297
+ // Chat updates - extract LID mappings and update store
175
298
  this.socket.ev.on("chats.upsert", (chats) => {
299
+ if (this.options.debug) {
300
+ this.logger.debug(`[chats.upsert] Received ${chats.length} chats`);
301
+ if (chats.length > 0) {
302
+ this.logger.debug(`[chats.upsert] Sample: ${JSON.stringify(chats[0])}`);
303
+ }
304
+ }
176
305
  this.updateLidFromChats(chats);
177
306
  this.updateChatsStore(chats);
178
307
  });
179
308
  this.socket.ev.on("chats.update", (chats) => {
309
+ if (this.options.debug) {
310
+ this.logger.debug(`[chats.update] Received ${chats.length} chat updates`);
311
+ }
180
312
  this.updateLidFromChats(chats);
181
313
  this.updateChatsStore(chats);
182
314
  });
315
+ // History sync - populates contacts, chats, and messages from history
316
+ this.socket.ev.on("messaging-history.set", ({ chats, contacts, messages, isLatest, peerDataRequestSessionId }) => {
317
+ if (this.options.debug) {
318
+ this.logger.debug("\n========== MESSAGING HISTORY SYNC ==========");
319
+ this.logger.debug(`Contacts: ${contacts.length}, Chats: ${chats.length}, Messages: ${messages.length}`);
320
+ this.logger.debug(`Is Latest: ${isLatest}, SessionId: ${peerDataRequestSessionId || 'none'}`);
321
+ this.logger.debug("============================================\n");
322
+ }
323
+ // Build LID mappings FIRST (before store population)
324
+ this.updateLidToJidMapping(contacts);
325
+ this.updateLidFromChats(chats);
326
+ // Update contacts from history
327
+ this.updateContactsStore(contacts);
328
+ // Update chats from history
329
+ this.updateChatsStore(chats);
330
+ // Update messages from history
331
+ // Baileys v7: messages is a flat WAMessage[] array (not nested)
332
+ for (const msg of messages) {
333
+ this.addMessageToStore(msg);
334
+ }
335
+ // Check for pending loadMoreMessages requests
336
+ if (peerDataRequestSessionId && this.pendingHistoryRequests.has(peerDataRequestSessionId)) {
337
+ const request = this.pendingHistoryRequests.get(peerDataRequestSessionId);
338
+ const newCount = (this.messagesStore.get(request.jid) || []).length;
339
+ const messagesLoaded = newCount - request.initialCount;
340
+ this.pendingHistoryRequests.delete(peerDataRequestSessionId);
341
+ request.resolve({
342
+ success: true,
343
+ messagesLoaded,
344
+ hasMore: !isLatest,
345
+ });
346
+ this.logger.debug(`History request ${peerDataRequestSessionId} completed: ${messagesLoaded} messages loaded`);
347
+ }
348
+ if (this.options.debug && isLatest) {
349
+ this.logger.debug(`✅ History sync complete. Stores: ${this.contactsStore.size} contacts, ${this.chatsStore.size} chats`);
350
+ }
351
+ });
183
352
  // Messages
184
353
  this.socket.ev.on("messages.upsert", async (m) => {
185
354
  if (m.type !== "notify")
@@ -187,9 +356,9 @@ export class MiawClient extends EventEmitter {
187
356
  for (const msg of m.messages) {
188
357
  // Debug: Log raw Baileys message structure
189
358
  if (this.options.debug) {
190
- console.log("\n========== RAW BAILEYS MESSAGE ==========");
191
- console.log(JSON.stringify(msg, null, 2));
192
- console.log("=========================================\n");
359
+ this.logger.debug("\n========== RAW BAILEYS MESSAGE ==========");
360
+ this.logger.debug(JSON.stringify(msg, null, 2));
361
+ this.logger.debug("=========================================\n");
193
362
  }
194
363
  // Check for protocol messages (edits and deletes)
195
364
  const protocolMessage = msg.message?.protocolMessage;
@@ -202,22 +371,17 @@ export class MiawClient extends EventEmitter {
202
371
  // Note: senderLid may exist at runtime but isn't in Baileys v7 types
203
372
  const msgKey = msg.key;
204
373
  if (!msgKey.fromMe && msgKey.senderLid && msgKey.remoteJid) {
205
- const lid = msgKey.senderLid.endsWith("@lid")
206
- ? msgKey.senderLid
207
- : `${msgKey.senderLid}@lid`;
208
- this.lidToJidMap.set(lid, msgKey.remoteJid);
209
- if (this.options.debug) {
210
- console.log(`[LID Mapping] ${lid} -> ${msg.key.remoteJid}`);
211
- }
374
+ this.addLidMapping(msgKey.senderLid, msgKey.remoteJid, "Message");
212
375
  }
213
- const normalized = MessageHandler.normalize({ messages: [msg] });
376
+ const normalized = MessageHandler.normalize({ messages: [msg], type: "notify" }, this.logger);
214
377
  if (normalized) {
215
- // Store message in messagesStore (v0.9.0)
378
+ // Store message in messagesStore
216
379
  const chatJid = normalized.from;
217
380
  if (!this.messagesStore.has(chatJid)) {
218
381
  this.messagesStore.set(chatJid, []);
219
382
  }
220
383
  this.messagesStore.get(chatJid).push(normalized);
384
+ this.saveMessagesToFile();
221
385
  this.emit("message", normalized);
222
386
  }
223
387
  }
@@ -234,9 +398,9 @@ export class MiawClient extends EventEmitter {
234
398
  raw: { key, reaction },
235
399
  };
236
400
  if (this.options.debug) {
237
- console.log("\n========== REACTION ==========");
238
- console.log(JSON.stringify(reactionData, null, 2));
239
- console.log("==============================\n");
401
+ this.logger.debug("\n========== REACTION ==========");
402
+ this.logger.debug(JSON.stringify(reactionData, null, 2));
403
+ this.logger.debug("==============================\n");
240
404
  }
241
405
  this.emit("message_reaction", reactionData);
242
406
  }
@@ -252,19 +416,20 @@ export class MiawClient extends EventEmitter {
252
416
  lastSeen: presenceData.lastSeen,
253
417
  };
254
418
  if (this.options.debug) {
255
- console.log("\n========== PRESENCE UPDATE ==========");
256
- console.log(JSON.stringify(update, null, 2));
257
- console.log("=====================================\n");
419
+ this.logger.debug("\n========== PRESENCE UPDATE ==========");
420
+ this.logger.debug(JSON.stringify(update, null, 2));
421
+ this.logger.debug("=====================================\n");
258
422
  }
259
423
  this.emit("presence", update);
260
424
  }
261
425
  });
262
426
  // Label updates (WhatsApp Business)
263
427
  this.socket.ev.on("labels.edit", (label) => {
428
+ this.labelEventCount++;
264
429
  if (this.options.debug) {
265
- console.log("\n========== LABEL UPDATE ==========");
266
- console.log(JSON.stringify(label, null, 2));
267
- console.log("==================================\n");
430
+ this.logger.debug("\n========== LABEL UPDATE ==========");
431
+ this.logger.debug(JSON.stringify(label, null, 2));
432
+ this.logger.debug("==================================\n");
268
433
  }
269
434
  // Update label in store
270
435
  if (label.id) {
@@ -281,9 +446,54 @@ export class MiawClient extends EventEmitter {
281
446
  };
282
447
  this.labelsStore.set(label.id, labelData);
283
448
  }
449
+ // Persist labels to disk after every update
450
+ // This ensures labels survive reconnections where resyncAppState returns only patches
451
+ this.saveLabelsToFile();
452
+ }
453
+ });
454
+ // Handle label-chat associations
455
+ this.socket.ev.on("labels.association", ({ association, type }) => {
456
+ // Only handle chat-level associations (not message-level)
457
+ if (association.type === "label_jid") {
458
+ const { labelId, chatId } = association;
459
+ if (type === "add") {
460
+ if (!this.labelChatsStore.has(labelId)) {
461
+ this.labelChatsStore.set(labelId, new Set());
462
+ }
463
+ this.labelChatsStore.get(labelId).add(chatId);
464
+ }
465
+ else if (type === "remove") {
466
+ this.labelChatsStore.get(labelId)?.delete(chatId);
467
+ }
468
+ if (this.options.debug) {
469
+ this.logger.debug(`Label association: ${type} chat ${chatId} ${type === "add" ? "to" : "from"} label ${labelId}`);
470
+ }
284
471
  }
285
472
  });
286
473
  }
474
+ /**
475
+ * Remove all socket event listeners
476
+ * Call this before closing socket to prevent stale event handlers
477
+ */
478
+ removeSocketEvents() {
479
+ if (!this.socket)
480
+ return;
481
+ this.logger.debug("Removing socket event listeners");
482
+ // Remove all event listeners
483
+ this.socket.ev.removeAllListeners("connection.update");
484
+ this.socket.ev.removeAllListeners("creds.update");
485
+ this.socket.ev.removeAllListeners("lid-mapping.update");
486
+ this.socket.ev.removeAllListeners("contacts.upsert");
487
+ this.socket.ev.removeAllListeners("contacts.update");
488
+ this.socket.ev.removeAllListeners("chats.upsert");
489
+ this.socket.ev.removeAllListeners("chats.update");
490
+ this.socket.ev.removeAllListeners("messaging-history.set");
491
+ this.socket.ev.removeAllListeners("messages.upsert");
492
+ this.socket.ev.removeAllListeners("messages.reaction");
493
+ this.socket.ev.removeAllListeners("presence.update");
494
+ this.socket.ev.removeAllListeners("labels.edit");
495
+ this.socket.ev.removeAllListeners("labels.association");
496
+ }
287
497
  /**
288
498
  * Handle protocol messages (edits, deletes)
289
499
  */
@@ -300,9 +510,9 @@ export class MiawClient extends EventEmitter {
300
510
  raw: msg,
301
511
  };
302
512
  if (this.options.debug) {
303
- console.log("\n========== MESSAGE DELETED ==========");
304
- console.log(JSON.stringify(deletion, null, 2));
305
- console.log("=====================================\n");
513
+ this.logger.debug("\n========== MESSAGE DELETED ==========");
514
+ this.logger.debug(JSON.stringify(deletion, null, 2));
515
+ this.logger.debug("=====================================\n");
306
516
  }
307
517
  this.emit("message_delete", deletion);
308
518
  }
@@ -323,13 +533,40 @@ export class MiawClient extends EventEmitter {
323
533
  raw: msg,
324
534
  };
325
535
  if (this.options.debug) {
326
- console.log("\n========== MESSAGE EDITED ==========");
327
- console.log(JSON.stringify(edit, null, 2));
328
- console.log("====================================\n");
536
+ this.logger.debug("\n========== MESSAGE EDITED ==========");
537
+ this.logger.debug(JSON.stringify(edit, null, 2));
538
+ this.logger.debug("====================================\n");
329
539
  }
330
540
  this.emit("message_edit", edit);
331
541
  }
332
542
  }
543
+ /**
544
+ * Add LID to JID mapping with normalized format and debug logging
545
+ * Centralized helper for all LID mapping operations
546
+ * @param lid - The LID (with or without @lid suffix)
547
+ * @param jid - The JID to map to (phone number)
548
+ * @param source - Source of the mapping for debug logs
549
+ */
550
+ addLidMapping(lid, jid, source) {
551
+ if (!lid || !jid) {
552
+ return;
553
+ }
554
+ // Normalize LID format (ensure it ends with @lid)
555
+ const normalizedLid = lid.endsWith("@lid") ? lid : `${lid}@lid`;
556
+ // Check if this is a new mapping
557
+ const existingJid = this.lidToJidMap.get(normalizedLid);
558
+ const isNew = existingJid !== jid;
559
+ // Store in our LRU cache
560
+ this.lidToJidMap.set(normalizedLid, jid);
561
+ if (this.options.debug) {
562
+ this.logger.debug(`[LID Mapping: ${source}] ${normalizedLid} -> ${jid}`);
563
+ this.logger.debug(`Total LID mappings: ${this.lidToJidMap.size}`);
564
+ }
565
+ // Persist to disk if this is a new mapping
566
+ if (isNew) {
567
+ this.saveLidMappingsToFile();
568
+ }
569
+ }
333
570
  /**
334
571
  * Update LID to JID mapping from contacts
335
572
  */
@@ -337,74 +574,14 @@ export class MiawClient extends EventEmitter {
337
574
  for (const contact of contacts) {
338
575
  // Contact has both lid and jid - create mapping
339
576
  if (contact.lid && contact.id && !contact.id.endsWith("@lid")) {
340
- this.lidToJidMap.set(contact.lid, contact.id);
341
- if (this.options.debug) {
342
- console.log(`[Contact LID Mapping] ${contact.lid} -> ${contact.id}`);
343
- }
577
+ this.addLidMapping(contact.lid, contact.id, "Contact");
344
578
  }
345
579
  // Also check if id is the LID and jid field exists
346
580
  if (contact.id?.endsWith("@lid") && contact.jid) {
347
- this.lidToJidMap.set(contact.id, contact.jid);
348
- if (this.options.debug) {
349
- console.log(`[Contact LID Mapping] ${contact.id} -> ${contact.jid}`);
350
- }
581
+ this.addLidMapping(contact.id, contact.jid, "Contact");
351
582
  }
352
583
  }
353
584
  }
354
- /**
355
- * Update in-memory contacts store (v0.9.0)
356
- * @param contacts - Array of contact objects from Baileys
357
- */
358
- updateContactsStore(contacts) {
359
- for (const contact of contacts) {
360
- // Extract the JID (prefer non-lid IDs)
361
- const jid = contact.id?.endsWith("@lid")
362
- ? contact.jid || contact.id
363
- : contact.id;
364
- if (!jid)
365
- continue;
366
- // Extract phone number from JID
367
- const phone = jid.endsWith("@s.whatsapp.net")
368
- ? jid.replace("@s.whatsapp.net", "")
369
- : undefined;
370
- // Build contact info
371
- const contactInfo = {
372
- jid,
373
- phone,
374
- name: contact.name || contact.notify || undefined,
375
- };
376
- // Update store
377
- this.contactsStore.set(jid, contactInfo);
378
- }
379
- }
380
- /**
381
- * Update in-memory chats store (v0.9.0)
382
- * @param chats - Array of chat objects from Baileys
383
- */
384
- updateChatsStore(chats) {
385
- for (const chat of chats) {
386
- const jid = chat.id;
387
- if (!jid)
388
- continue;
389
- // Extract phone number from JID
390
- const phone = jid.endsWith("@s.whatsapp.net")
391
- ? jid.replace("@s.whatsapp.net", "")
392
- : undefined;
393
- // Build chat info
394
- const chatInfo = {
395
- jid,
396
- phone,
397
- name: chat.name || undefined,
398
- isGroup: jid.endsWith("@g.us"),
399
- lastMessageTimestamp: chat.timestamp || undefined,
400
- unreadCount: chat.unreadCount || undefined,
401
- isArchived: chat.archived || false,
402
- isPinned: chat.pinned || false,
403
- };
404
- // Update store
405
- this.chatsStore.set(jid, chatInfo);
406
- }
407
- }
408
585
  /**
409
586
  * Update LID to JID mapping from chat data
410
587
  */
@@ -412,20 +589,11 @@ export class MiawClient extends EventEmitter {
412
589
  for (const chat of chats) {
413
590
  // Chat may have both id (could be phone or LID) and lidJid
414
591
  if (chat.lidJid && chat.id && !chat.id.endsWith("@lid")) {
415
- const lid = chat.lidJid.endsWith("@lid")
416
- ? chat.lidJid
417
- : `${chat.lidJid}@lid`;
418
- this.lidToJidMap.set(lid, chat.id);
419
- if (this.options.debug) {
420
- console.log(`[Chat LID Mapping] ${lid} -> ${chat.id}`);
421
- }
592
+ this.addLidMapping(chat.lidJid, chat.id, "Chat");
422
593
  }
423
594
  // Reverse: if id is LID and we have a phone JID
424
595
  if (chat.id?.endsWith("@lid") && chat.jid) {
425
- this.lidToJidMap.set(chat.id, chat.jid);
426
- if (this.options.debug) {
427
- console.log(`[Chat LID Mapping] ${chat.id} -> ${chat.jid}`);
428
- }
596
+ this.addLidMapping(chat.id, chat.jid, "Chat");
429
597
  }
430
598
  }
431
599
  }
@@ -469,12 +637,16 @@ export class MiawClient extends EventEmitter {
469
637
  * Get all registered LID mappings
470
638
  * Useful for persisting mappings to storage
471
639
  */
640
+ /**
641
+ * Get all LID to JID mappings (for debugging/monitoring)
642
+ * @returns Record of LID to JID mappings
643
+ */
472
644
  getLidMappings() {
473
645
  const result = {};
474
- // Iterate through the cache
475
- for (const [key, value] of this.lidToJidMap.cache) {
646
+ // Use proper encapsulated iteration method
647
+ this.lidToJidMap.forEach((value, key) => {
476
648
  result[key] = value;
477
- }
649
+ });
478
650
  return result;
479
651
  }
480
652
  /**
@@ -489,6 +661,124 @@ export class MiawClient extends EventEmitter {
489
661
  clearLidCache() {
490
662
  this.lidToJidMap.clear();
491
663
  }
664
+ /**
665
+ * Update in-memory contacts store
666
+ * @param contacts - Array of contact objects from Baileys
667
+ *
668
+ * Baileys v7 Contact structure:
669
+ * - id: primary identifier (could be @lid or @s.whatsapp.net)
670
+ * - phoneNumber: phone JID (@s.whatsapp.net) when available
671
+ * - lid: LID JID (@lid) when available
672
+ * - name: contact name saved by user
673
+ * - notify: contact's own display name (push name)
674
+ * - verifiedName: verified business name
675
+ */
676
+ updateContactsStore(contacts) {
677
+ for (const contact of contacts) {
678
+ let jid = contact.id;
679
+ // Baileys v7: Use phoneNumber when id is LID
680
+ if (jid?.endsWith("@lid") && contact.phoneNumber) {
681
+ // Register LID mapping for future resolution
682
+ this.addLidMapping(contact.id, contact.phoneNumber, "Contact");
683
+ jid = contact.phoneNumber;
684
+ }
685
+ if (!jid)
686
+ continue;
687
+ // Extract phone number from JID
688
+ const phone = jid.endsWith("@s.whatsapp.net")
689
+ ? jid.replace("@s.whatsapp.net", "")
690
+ : undefined;
691
+ // Build contact info
692
+ const contactInfo = {
693
+ jid,
694
+ phone,
695
+ name: contact.name || contact.notify || contact.verifiedName || undefined,
696
+ };
697
+ // Update store with phone JID as primary key
698
+ this.contactsStore.set(jid, contactInfo);
699
+ // Also store by LID for lookup if available
700
+ if (contact.lid && contact.lid !== jid) {
701
+ this.contactsStore.set(contact.lid, contactInfo);
702
+ }
703
+ // Also store by original id if different (for LID contacts)
704
+ if (contact.id && contact.id !== jid) {
705
+ this.contactsStore.set(contact.id, contactInfo);
706
+ }
707
+ }
708
+ // Persist contacts to disk after every update
709
+ // This ensures contacts survive reconnections where history sync may not fire
710
+ if (contacts.length > 0) {
711
+ this.saveContactsToFile();
712
+ }
713
+ }
714
+ /**
715
+ * Update in-memory chats store
716
+ * @param chats - Array of chat objects from Baileys
717
+ *
718
+ * Baileys v7 Chat structure (proto.IConversation):
719
+ * - id: chat JID (can be @lid or @s.whatsapp.net or @g.us)
720
+ * - pnJid: phone number JID when id is LID
721
+ * - lidJid: LID JID when id is phone
722
+ * - name/displayName: chat display name
723
+ * - conversationTimestamp: last message timestamp
724
+ * - unreadCount, archived, pinned: chat state
725
+ */
726
+ updateChatsStore(chats) {
727
+ for (const chat of chats) {
728
+ let jid = chat.id;
729
+ if (!jid)
730
+ continue;
731
+ const originalId = jid;
732
+ // Handle LID chats - use pnJid (phone JID) when available
733
+ if (jid.endsWith("@lid") && chat.pnJid) {
734
+ this.addLidMapping(jid, chat.pnJid, "Chat");
735
+ jid = chat.pnJid;
736
+ }
737
+ // Extract phone number from JID
738
+ const phone = jid.endsWith("@s.whatsapp.net")
739
+ ? jid.replace("@s.whatsapp.net", "")
740
+ : undefined;
741
+ // Build chat info with proper field mapping for proto.IConversation
742
+ const chatInfo = {
743
+ jid,
744
+ phone,
745
+ name: chat.name || chat.displayName || undefined,
746
+ isGroup: jid.endsWith("@g.us"),
747
+ lastMessageTimestamp: chat.conversationTimestamp
748
+ ? Number(chat.conversationTimestamp)
749
+ : (chat.timestamp ? Number(chat.timestamp) : undefined),
750
+ unreadCount: chat.unreadCount || undefined,
751
+ isArchived: chat.archived || false,
752
+ isPinned: !!chat.pinned,
753
+ };
754
+ // Update store with resolved JID as primary key
755
+ this.chatsStore.set(jid, chatInfo);
756
+ // Also store by original LID if different (for lookup)
757
+ if (originalId !== jid) {
758
+ this.chatsStore.set(originalId, chatInfo);
759
+ }
760
+ }
761
+ // Persist chats to disk after every update
762
+ // This ensures chats survive reconnections where history sync may not fire
763
+ if (chats.length > 0) {
764
+ this.saveChatsToFile();
765
+ }
766
+ }
767
+ /**
768
+ * Add a message to the store
769
+ * @param msg - Baileys message object
770
+ */
771
+ addMessageToStore(msg) {
772
+ const normalized = MessageHandler.normalize({ messages: [msg], type: "notify" }, this.logger);
773
+ if (!normalized)
774
+ return;
775
+ const chatJid = normalized.from;
776
+ if (!this.messagesStore.has(chatJid)) {
777
+ this.messagesStore.set(chatJid, []);
778
+ }
779
+ this.messagesStore.get(chatJid).push(normalized);
780
+ this.saveMessagesToFile();
781
+ }
492
782
  /**
493
783
  * Clear session data for this instance.
494
784
  * This will delete all stored authentication credentials.
@@ -507,12 +797,15 @@ export class MiawClient extends EventEmitter {
507
797
  clearTimeout(this.reconnectTimer);
508
798
  this.reconnectTimer = null;
509
799
  }
800
+ // Reset logout flag
801
+ this.loggingOut = false;
510
802
  // Clear LID cache
511
803
  this.lidToJidMap.clear();
512
804
  // Remove all event listeners
513
805
  this.removeAllListeners();
514
806
  // Close socket if connected
515
807
  if (this.socket) {
808
+ this.removeSocketEvents();
516
809
  this.socket.end(undefined);
517
810
  this.socket = null;
518
811
  }
@@ -528,6 +821,15 @@ export class MiawClient extends EventEmitter {
528
821
  this.logger.info("Disconnected:", reason, "Code:", statusCode);
529
822
  this.updateConnectionState("disconnected");
530
823
  this.emit("disconnected", reason);
824
+ // Reset label sync state so next connection will trigger fresh sync
825
+ this.initialLabelSyncPromise = null;
826
+ this.initialLabelSyncComplete = false;
827
+ // Don't reconnect if logging out
828
+ if (this.loggingOut) {
829
+ this.logger.info("Logout in progress, skipping auto-reconnect");
830
+ this.loggingOut = false; // Reset flag
831
+ return false;
832
+ }
531
833
  // Don't reconnect if logged out - clear session for fresh QR code on next connect
532
834
  if (statusCode === DisconnectReason.loggedOut) {
533
835
  this.logger.info("Logged out, clearing session for fresh authentication");
@@ -549,11 +851,11 @@ export class MiawClient extends EventEmitter {
549
851
  clearTimeout(this.reconnectTimer);
550
852
  }
551
853
  this.reconnectAttempts++;
552
- this.updateConnectionState("reconnecting");
854
+ // Emit event but don't set state - let connect() handle the state transition
553
855
  this.emit("reconnecting", this.reconnectAttempts);
554
856
  this.reconnectTimer = setTimeout(() => {
555
857
  this.logger.info(`Reconnecting... Attempt ${this.reconnectAttempts}`);
556
- this.connect();
858
+ this.connect(); // This will set state to "connecting"
557
859
  }, this.options.reconnectDelay);
558
860
  }
559
861
  /**
@@ -561,7 +863,38 @@ export class MiawClient extends EventEmitter {
561
863
  */
562
864
  updateConnectionState(state) {
563
865
  this.connectionState = state;
866
+ this.connectionStateTimestamp = Date.now();
564
867
  this.emit("connection", state);
868
+ // Start watchdog for potentially stuck states
869
+ if (state === "connecting" || state === "reconnecting") {
870
+ this.startConnectionWatchdog();
871
+ }
872
+ else {
873
+ // Clear watchdog if we're no longer in a potentially stuck state
874
+ if (this.connectionWatchdogTimer) {
875
+ clearTimeout(this.connectionWatchdogTimer);
876
+ this.connectionWatchdogTimer = null;
877
+ }
878
+ }
879
+ }
880
+ /**
881
+ * Start watchdog timer to detect stuck connection states
882
+ */
883
+ startConnectionWatchdog() {
884
+ // Clear any existing watchdog
885
+ if (this.connectionWatchdogTimer) {
886
+ clearTimeout(this.connectionWatchdogTimer);
887
+ }
888
+ this.connectionWatchdogTimer = setTimeout(() => {
889
+ const currentState = this.connectionState;
890
+ const elapsed = Date.now() - this.connectionStateTimestamp;
891
+ // If stuck in connecting/reconnecting for too long, reset to disconnected
892
+ if ((currentState === "connecting" || currentState === "reconnecting") &&
893
+ elapsed >= this.options.stuckStateTimeout) {
894
+ this.logger.warn(`Connection stuck in "${currentState}" state for ${elapsed}ms, resetting`);
895
+ this.updateConnectionState("disconnected");
896
+ }
897
+ }, this.options.stuckStateTimeout);
565
898
  }
566
899
  /**
567
900
  * Send a text message
@@ -577,6 +910,25 @@ export class MiawClient extends EventEmitter {
577
910
  if (this.connectionState !== "connected") {
578
911
  throw new Error(`Cannot send message. Connection state: ${this.connectionState}`);
579
912
  }
913
+ // Validate recipient (phone or JID)
914
+ const isJID = to.includes("@");
915
+ if (isJID) {
916
+ const jidValidation = validateJID(to);
917
+ if (!jidValidation.valid) {
918
+ return { success: false, error: jidValidation.error };
919
+ }
920
+ }
921
+ else {
922
+ const phoneValidation = validatePhoneNumber(to);
923
+ if (!phoneValidation.valid) {
924
+ return { success: false, error: phoneValidation.error };
925
+ }
926
+ }
927
+ // Validate message text
928
+ const textValidation = validateMessageText(text);
929
+ if (!textValidation.valid) {
930
+ return { success: false, error: textValidation.error };
931
+ }
580
932
  const jid = MessageHandler.formatPhoneToJid(to);
581
933
  // Build send options (for quoting/replying)
582
934
  const sendOptions = options?.quoted?.raw
@@ -914,6 +1266,86 @@ export class MiawClient extends EventEmitter {
914
1266
  return null;
915
1267
  }
916
1268
  }
1269
+ /**
1270
+ * Get full contact profile including name, status, picture, and business info
1271
+ * @param jidOrPhone - Contact's JID or phone number
1272
+ * @returns ContactProfile or null if not found
1273
+ */
1274
+ async getContactProfile(jidOrPhone) {
1275
+ try {
1276
+ if (!this.socket) {
1277
+ throw new Error("Not connected. Call connect() first.");
1278
+ }
1279
+ if (this.connectionState !== "connected") {
1280
+ throw new Error(`Cannot get contact profile. Connection state: ${this.connectionState}`);
1281
+ }
1282
+ const jid = MessageHandler.formatPhoneToJid(jidOrPhone);
1283
+ // Try to resolve LID JID to phone JID
1284
+ const resolvedJid = this.resolveLidToJid(jid);
1285
+ // Extract phone from resolved JID (or use getPhoneFromJid which handles LID resolution)
1286
+ const phone = this.getPhoneFromJid(jid);
1287
+ // Get name from contactsStore - try both original and resolved JID
1288
+ let name;
1289
+ const storedContact = this.contactsStore.get(jid) || this.contactsStore.get(resolvedJid);
1290
+ if (storedContact?.name) {
1291
+ name = storedContact.name;
1292
+ }
1293
+ // Fetch status
1294
+ let status;
1295
+ try {
1296
+ const statusResult = await this.socket.fetchStatus(jid);
1297
+ const firstResult = Array.isArray(statusResult)
1298
+ ? statusResult[0]
1299
+ : statusResult;
1300
+ status = firstResult?.status?.status || undefined;
1301
+ }
1302
+ catch {
1303
+ // Status might not be available
1304
+ }
1305
+ // Fetch profile picture URL
1306
+ let pictureUrl;
1307
+ try {
1308
+ pictureUrl = (await this.socket.profilePictureUrl(jid)) || undefined;
1309
+ }
1310
+ catch {
1311
+ // Profile picture might not be available (privacy settings)
1312
+ }
1313
+ // Check if business account and get business profile
1314
+ let isBusiness = false;
1315
+ let business;
1316
+ try {
1317
+ const businessProfile = await this.socket.getBusinessProfile(jid);
1318
+ if (businessProfile) {
1319
+ isBusiness = true;
1320
+ business = {
1321
+ description: businessProfile.description || undefined,
1322
+ category: businessProfile.category || undefined,
1323
+ website: Array.isArray(businessProfile.website)
1324
+ ? businessProfile.website[0]
1325
+ : businessProfile.website,
1326
+ email: businessProfile.email || undefined,
1327
+ address: businessProfile.address || undefined,
1328
+ };
1329
+ }
1330
+ }
1331
+ catch {
1332
+ // Not a business account or not available
1333
+ }
1334
+ return {
1335
+ jid,
1336
+ phone,
1337
+ name,
1338
+ status,
1339
+ pictureUrl,
1340
+ isBusiness,
1341
+ business,
1342
+ };
1343
+ }
1344
+ catch (error) {
1345
+ this.logger.error("Failed to get contact profile:", error);
1346
+ return null;
1347
+ }
1348
+ }
917
1349
  /**
918
1350
  * Get business profile information
919
1351
  * @param jidOrPhone - Contact's JID or phone number
@@ -976,12 +1408,26 @@ export class MiawClient extends EventEmitter {
976
1408
  // ============================================
977
1409
  /**
978
1410
  * Fetch all contacts from the in-memory store
979
- * Note: Contacts are populated via history sync and contact events
1411
+ * Note: Contacts are populated via Baileys store history sync
980
1412
  * @returns FetchAllContactsResult with list of contacts
981
1413
  */
982
1414
  async fetchAllContacts() {
983
1415
  try {
984
- const contacts = Array.from(this.contactsStore.values());
1416
+ // Map contacts and resolve any @lid JIDs that weren't resolved earlier
1417
+ const contacts = Array.from(this.contactsStore.values()).map(contact => {
1418
+ // If jid is @lid and phone is missing, try to resolve using LID cache
1419
+ if (contact.jid.endsWith("@lid") && !contact.phone) {
1420
+ const resolved = this.resolveLidToJid(contact.jid);
1421
+ if (resolved !== contact.jid && resolved.endsWith("@s.whatsapp.net")) {
1422
+ return {
1423
+ ...contact,
1424
+ jid: resolved,
1425
+ phone: resolved.replace("@s.whatsapp.net", ""),
1426
+ };
1427
+ }
1428
+ }
1429
+ return contact;
1430
+ });
985
1431
  return {
986
1432
  success: true,
987
1433
  contacts,
@@ -1059,6 +1505,8 @@ export class MiawClient extends EventEmitter {
1059
1505
  const phone = jid.endsWith("@s.whatsapp.net")
1060
1506
  ? jid.replace("@s.whatsapp.net", "")
1061
1507
  : undefined;
1508
+ // Get display name from socket user
1509
+ const name = this.socket.user?.name;
1062
1510
  // Fetch status
1063
1511
  let status;
1064
1512
  try {
@@ -1091,6 +1539,7 @@ export class MiawClient extends EventEmitter {
1091
1539
  return {
1092
1540
  jid,
1093
1541
  phone,
1542
+ name,
1094
1543
  status,
1095
1544
  pictureUrl,
1096
1545
  isBusiness,
@@ -1103,7 +1552,7 @@ export class MiawClient extends EventEmitter {
1103
1552
  }
1104
1553
  /**
1105
1554
  * Sync labels from WhatsApp app state
1106
- * This triggers a resync of the 'regular' collection which contains labels
1555
+ * This triggers a resync of ALL app state collections to ensure labels are synced
1107
1556
  * Labels will be emitted via labels.edit events and stored in labelsStore
1108
1557
  */
1109
1558
  async syncLabelsFromAppState() {
@@ -1112,9 +1561,11 @@ export class MiawClient extends EventEmitter {
1112
1561
  }
1113
1562
  try {
1114
1563
  // resyncAppState is provided by Baileys to sync app state collections
1115
- // The 'regular' collection contains labels
1564
+ // Sync ALL collections like Baileys does during initial sync
1565
+ // Labels could be in any of: critical_block, critical_unblock_low, regular_high, regular_low, regular
1116
1566
  // The second parameter (false) means this is not an initial sync
1117
- await this.socket.resyncAppState(["regular"], false);
1567
+ await this.socket.resyncAppState(["critical_block", "critical_unblock_low", "regular_high", "regular_low", "regular"], false);
1568
+ this.lastLabelSyncTime = new Date();
1118
1569
  this.logger.info("App state sync completed, labels should be populated via labels.edit events");
1119
1570
  }
1120
1571
  catch (error) {
@@ -1128,13 +1579,36 @@ export class MiawClient extends EventEmitter {
1128
1579
  * @param forceSync - If true, force a resync from WhatsApp before returning labels
1129
1580
  * @returns FetchAllLabelsResult with list of labels
1130
1581
  */
1131
- async fetchAllLabels(forceSync = false) {
1582
+ async fetchAllLabels(forceSync = false, syncTimeout = 2000) {
1132
1583
  try {
1133
- // Force resync if requested or if store is empty (first call)
1584
+ // If initial sync is still in progress, wait for it first
1585
+ // This handles the case where fetchAllLabels is called immediately after connection
1586
+ // (e.g., CLI "get labels" right after connect)
1587
+ if (this.initialLabelSyncPromise && !this.initialLabelSyncComplete) {
1588
+ this.logger.debug("Waiting for initial label sync to complete...");
1589
+ try {
1590
+ await Promise.race([
1591
+ this.initialLabelSyncPromise,
1592
+ new Promise((_, reject) => setTimeout(() => reject(new Error("Initial sync timeout")), 10000)),
1593
+ ]);
1594
+ }
1595
+ catch (error) {
1596
+ this.logger.debug("Initial sync wait timed out or failed:", error);
1597
+ }
1598
+ }
1599
+ // Force resync if explicitly requested OR if store is empty (first call)
1600
+ // This ensures labels are always available even if automatic sync hasn't completed
1134
1601
  if (forceSync || this.labelsStore.size === 0) {
1135
1602
  await this.syncLabelsFromAppState();
1136
- // Give a brief moment for labels.edit events to be processed
1137
- await new Promise((resolve) => setTimeout(resolve, 500));
1603
+ // Wait for buffered events to process
1604
+ // Baileys uses ev.createBufferedFunction which processes events async
1605
+ await new Promise((resolve) => setTimeout(resolve, syncTimeout));
1606
+ }
1607
+ // If store is still empty after sync, try loading from disk as fallback
1608
+ // This handles reconnection scenarios where resyncAppState returns only patches
1609
+ if (this.labelsStore.size === 0) {
1610
+ this.logger.debug("Labels store still empty after sync, attempting to load from disk");
1611
+ this.loadLabelsFromFile();
1138
1612
  }
1139
1613
  const labels = Array.from(this.labelsStore.values());
1140
1614
  return {
@@ -1150,9 +1624,366 @@ export class MiawClient extends EventEmitter {
1150
1624
  };
1151
1625
  }
1152
1626
  }
1627
+ /**
1628
+ * Get chats that have a specific label
1629
+ * @param labelId - Label ID to query
1630
+ * @returns Array of ChatInfo for chats with this label
1631
+ */
1632
+ getChatsByLabel(labelId) {
1633
+ const chatJids = this.labelChatsStore.get(labelId);
1634
+ if (!chatJids || chatJids.size === 0) {
1635
+ return [];
1636
+ }
1637
+ const chats = [];
1638
+ for (const jid of chatJids) {
1639
+ const chat = this.chatsStore.get(jid);
1640
+ if (chat) {
1641
+ chats.push(chat);
1642
+ }
1643
+ else {
1644
+ // Chat not in store, create minimal info
1645
+ chats.push({
1646
+ jid,
1647
+ phone: jid.replace(/@s\.whatsapp\.net$/, ""),
1648
+ isGroup: jid.endsWith("@g.us"),
1649
+ });
1650
+ }
1651
+ }
1652
+ return chats;
1653
+ }
1654
+ /**
1655
+ * Get the count of label events received
1656
+ * Useful for debugging label sync issues
1657
+ * @returns Number of labels.edit events received since connection
1658
+ */
1659
+ getLabelEventCount() {
1660
+ return this.labelEventCount;
1661
+ }
1662
+ /**
1663
+ * Get detailed information about the labels store
1664
+ * Useful for debugging label sync issues
1665
+ * @returns Object with store size, event count, and last sync time
1666
+ */
1667
+ getLabelsStoreInfo() {
1668
+ return {
1669
+ size: this.labelsStore.size,
1670
+ eventCount: this.labelEventCount,
1671
+ lastSyncTime: this.lastLabelSyncTime,
1672
+ };
1673
+ }
1674
+ // =============================================================================
1675
+ // Persistent Label Storage
1676
+ // =============================================================================
1677
+ /**
1678
+ * Get the path to the labels storage file
1679
+ */
1680
+ getLabelsFilePath() {
1681
+ return path.join(this.options.sessionPath, this.options.instanceId, "labels.json");
1682
+ }
1683
+ /**
1684
+ * Save labels to disk for persistence across reconnections
1685
+ * WhatsApp's resyncAppState only returns patches (not full snapshot) when version > 0,
1686
+ * so we need to persist labels locally to survive reconnections
1687
+ */
1688
+ saveLabelsToFile() {
1689
+ try {
1690
+ const labelsPath = this.getLabelsFilePath();
1691
+ const labelsDir = path.dirname(labelsPath);
1692
+ // Ensure directory exists
1693
+ if (!fs.existsSync(labelsDir)) {
1694
+ fs.mkdirSync(labelsDir, { recursive: true });
1695
+ }
1696
+ // Convert Map to array for JSON serialization
1697
+ const labelsData = Array.from(this.labelsStore.values());
1698
+ fs.writeFileSync(labelsPath, JSON.stringify(labelsData, null, 2), "utf8");
1699
+ this.logger.debug(`Saved ${labelsData.length} labels to ${labelsPath}`);
1700
+ }
1701
+ catch (error) {
1702
+ this.logger.warn("Failed to save labels to file:", error);
1703
+ }
1704
+ }
1705
+ /**
1706
+ * Load labels from disk
1707
+ * Called on connection to restore labels from previous session
1708
+ */
1709
+ loadLabelsFromFile() {
1710
+ try {
1711
+ const labelsPath = this.getLabelsFilePath();
1712
+ if (!fs.existsSync(labelsPath)) {
1713
+ this.logger.debug("No labels file found, starting with empty store");
1714
+ return;
1715
+ }
1716
+ const labelsData = JSON.parse(fs.readFileSync(labelsPath, "utf8"));
1717
+ if (Array.isArray(labelsData)) {
1718
+ // Clear existing store and populate from file
1719
+ this.labelsStore.clear();
1720
+ for (const label of labelsData) {
1721
+ if (label.id) {
1722
+ this.labelsStore.set(label.id, label);
1723
+ }
1724
+ }
1725
+ this.logger.info(`Loaded ${this.labelsStore.size} labels from disk`);
1726
+ }
1727
+ }
1728
+ catch (error) {
1729
+ this.logger.warn("Failed to load labels from file:", error);
1730
+ }
1731
+ }
1732
+ // ============================================
1733
+ // CONTACTS PERSISTENCE
1734
+ // ============================================
1735
+ getContactsFilePath() {
1736
+ return path.join(this.options.sessionPath, this.options.instanceId, "contacts.json");
1737
+ }
1738
+ /**
1739
+ * Save contacts to disk for persistence across reconnections
1740
+ * Baileys v7 history sync doesn't always fire, so we persist contacts locally
1741
+ */
1742
+ saveContactsToFile() {
1743
+ try {
1744
+ const contactsPath = this.getContactsFilePath();
1745
+ const contactsDir = path.dirname(contactsPath);
1746
+ // Ensure directory exists
1747
+ if (!fs.existsSync(contactsDir)) {
1748
+ fs.mkdirSync(contactsDir, { recursive: true });
1749
+ }
1750
+ // Convert Map to array for JSON serialization
1751
+ // Deduplicate by jid (Map may have same contact under multiple keys)
1752
+ const uniqueContacts = new Map();
1753
+ for (const contact of this.contactsStore.values()) {
1754
+ if (contact.jid && !uniqueContacts.has(contact.jid)) {
1755
+ uniqueContacts.set(contact.jid, contact);
1756
+ }
1757
+ }
1758
+ const contactsData = Array.from(uniqueContacts.values());
1759
+ fs.writeFileSync(contactsPath, JSON.stringify(contactsData, null, 2), "utf8");
1760
+ this.logger.debug(`Saved ${contactsData.length} contacts to ${contactsPath}`);
1761
+ }
1762
+ catch (error) {
1763
+ this.logger.warn("Failed to save contacts to file:", error);
1764
+ }
1765
+ }
1766
+ /**
1767
+ * Load contacts from disk
1768
+ * Called on connection to restore contacts from previous session
1769
+ */
1770
+ loadContactsFromFile() {
1771
+ try {
1772
+ const contactsPath = this.getContactsFilePath();
1773
+ if (!fs.existsSync(contactsPath)) {
1774
+ this.logger.debug("No contacts file found, starting with empty store");
1775
+ return;
1776
+ }
1777
+ const contactsData = JSON.parse(fs.readFileSync(contactsPath, "utf8"));
1778
+ if (Array.isArray(contactsData)) {
1779
+ // Clear existing store and populate from file
1780
+ this.contactsStore.clear();
1781
+ for (const contact of contactsData) {
1782
+ if (contact.jid) {
1783
+ this.contactsStore.set(contact.jid, contact);
1784
+ }
1785
+ }
1786
+ this.logger.info(`Loaded ${this.contactsStore.size} contacts from disk`);
1787
+ }
1788
+ }
1789
+ catch (error) {
1790
+ this.logger.warn("Failed to load contacts from file:", error);
1791
+ }
1792
+ }
1793
+ // ============================================
1794
+ // LID MAPPINGS PERSISTENCE
1795
+ // ============================================
1796
+ getLidMappingsFilePath() {
1797
+ return path.join(this.options.sessionPath, this.options.instanceId, "lid-mappings.json");
1798
+ }
1799
+ /**
1800
+ * Save LID-to-JID mappings to disk for persistence across reconnections
1801
+ * This ensures @lid JIDs can be resolved to phone numbers even after restart
1802
+ */
1803
+ saveLidMappingsToFile() {
1804
+ try {
1805
+ const mappingsPath = this.getLidMappingsFilePath();
1806
+ const mappingsDir = path.dirname(mappingsPath);
1807
+ // Ensure directory exists
1808
+ if (!fs.existsSync(mappingsDir)) {
1809
+ fs.mkdirSync(mappingsDir, { recursive: true });
1810
+ }
1811
+ // Get all mappings from the LRU cache
1812
+ const mappings = this.getLidMappings();
1813
+ const count = Object.keys(mappings).length;
1814
+ if (count > 0) {
1815
+ fs.writeFileSync(mappingsPath, JSON.stringify(mappings, null, 2), "utf8");
1816
+ this.logger.debug(`Saved ${count} LID mappings to ${mappingsPath}`);
1817
+ }
1818
+ }
1819
+ catch (error) {
1820
+ this.logger.warn("Failed to save LID mappings to file:", error);
1821
+ }
1822
+ }
1823
+ /**
1824
+ * Load LID-to-JID mappings from disk
1825
+ * Called on connection BEFORE loading chats to ensure resolution works
1826
+ */
1827
+ loadLidMappingsFromFile() {
1828
+ try {
1829
+ const mappingsPath = this.getLidMappingsFilePath();
1830
+ if (!fs.existsSync(mappingsPath)) {
1831
+ this.logger.debug("No LID mappings file found, starting with empty cache");
1832
+ return;
1833
+ }
1834
+ const mappingsData = JSON.parse(fs.readFileSync(mappingsPath, "utf8"));
1835
+ if (typeof mappingsData === "object" && mappingsData !== null) {
1836
+ let count = 0;
1837
+ for (const [lid, jid] of Object.entries(mappingsData)) {
1838
+ if (typeof lid === "string" && typeof jid === "string") {
1839
+ this.lidToJidMap.set(lid, jid);
1840
+ count++;
1841
+ }
1842
+ }
1843
+ this.logger.info(`Loaded ${count} LID mappings from disk`);
1844
+ }
1845
+ }
1846
+ catch (error) {
1847
+ this.logger.warn("Failed to load LID mappings from file:", error);
1848
+ }
1849
+ }
1850
+ // ============================================
1851
+ // CHATS PERSISTENCE
1852
+ // ============================================
1853
+ getChatsFilePath() {
1854
+ return path.join(this.options.sessionPath, this.options.instanceId, "chats.json");
1855
+ }
1856
+ /**
1857
+ * Save chats to disk for persistence across reconnections
1858
+ * Baileys v7 history sync doesn't always fire, so we persist chats locally
1859
+ */
1860
+ saveChatsToFile() {
1861
+ try {
1862
+ const chatsPath = this.getChatsFilePath();
1863
+ const chatsDir = path.dirname(chatsPath);
1864
+ // Ensure directory exists
1865
+ if (!fs.existsSync(chatsDir)) {
1866
+ fs.mkdirSync(chatsDir, { recursive: true });
1867
+ }
1868
+ // Convert Map to array for JSON serialization
1869
+ // Deduplicate by jid (Map may have same chat under multiple keys)
1870
+ const uniqueChats = new Map();
1871
+ for (const chat of this.chatsStore.values()) {
1872
+ if (chat.jid && !uniqueChats.has(chat.jid)) {
1873
+ uniqueChats.set(chat.jid, chat);
1874
+ }
1875
+ }
1876
+ const chatsData = Array.from(uniqueChats.values());
1877
+ fs.writeFileSync(chatsPath, JSON.stringify(chatsData, null, 2), "utf8");
1878
+ this.logger.debug(`Saved ${chatsData.length} chats to ${chatsPath}`);
1879
+ }
1880
+ catch (error) {
1881
+ this.logger.warn("Failed to save chats to file:", error);
1882
+ }
1883
+ }
1884
+ /**
1885
+ * Load chats from disk
1886
+ * Called on connection to restore chats from previous session
1887
+ */
1888
+ loadChatsFromFile() {
1889
+ try {
1890
+ const chatsPath = this.getChatsFilePath();
1891
+ if (!fs.existsSync(chatsPath)) {
1892
+ this.logger.debug("No chats file found, starting with empty store");
1893
+ return;
1894
+ }
1895
+ const chatsData = JSON.parse(fs.readFileSync(chatsPath, "utf8"));
1896
+ if (Array.isArray(chatsData)) {
1897
+ // Clear existing store and populate from file
1898
+ this.chatsStore.clear();
1899
+ for (const chat of chatsData) {
1900
+ if (chat.jid) {
1901
+ this.chatsStore.set(chat.jid, chat);
1902
+ }
1903
+ }
1904
+ this.logger.info(`Loaded ${this.chatsStore.size} chats from disk`);
1905
+ }
1906
+ }
1907
+ catch (error) {
1908
+ this.logger.warn("Failed to load chats from file:", error);
1909
+ }
1910
+ }
1911
+ // ============================================
1912
+ // MESSAGES PERSISTENCE
1913
+ // ============================================
1914
+ getMessagesFilePath() {
1915
+ return path.join(this.options.sessionPath, this.options.instanceId, "messages.json");
1916
+ }
1917
+ /**
1918
+ * Save messages to disk for persistence across reconnections
1919
+ * Baileys v7 history sync doesn't always fire, so we persist messages locally
1920
+ */
1921
+ saveMessagesToFile() {
1922
+ try {
1923
+ const messagesPath = this.getMessagesFilePath();
1924
+ const messagesDir = path.dirname(messagesPath);
1925
+ // Ensure directory exists
1926
+ if (!fs.existsSync(messagesDir)) {
1927
+ fs.mkdirSync(messagesDir, { recursive: true });
1928
+ }
1929
+ // Convert Map to object for JSON serialization
1930
+ // Structure: { "jid1": [msg1, msg2], "jid2": [msg3] }
1931
+ const messagesData = {};
1932
+ for (const [jid, messages] of this.messagesStore.entries()) {
1933
+ messagesData[jid] = messages;
1934
+ }
1935
+ // Count total messages
1936
+ const totalMessages = Array.from(this.messagesStore.values()).reduce((sum, msgs) => sum + msgs.length, 0);
1937
+ fs.writeFileSync(messagesPath, JSON.stringify(messagesData, null, 2), "utf8");
1938
+ this.logger.debug(`Saved ${totalMessages} messages across ${this.messagesStore.size} chats to ${messagesPath}`);
1939
+ }
1940
+ catch (error) {
1941
+ this.logger.warn("Failed to save messages to file:", error);
1942
+ }
1943
+ }
1944
+ /**
1945
+ * Load messages from disk
1946
+ * Called on connection to restore messages from previous session
1947
+ */
1948
+ loadMessagesFromFile() {
1949
+ try {
1950
+ const messagesPath = this.getMessagesFilePath();
1951
+ if (!fs.existsSync(messagesPath)) {
1952
+ this.logger.debug("No messages file found, starting with empty store");
1953
+ return;
1954
+ }
1955
+ const messagesData = JSON.parse(fs.readFileSync(messagesPath, "utf8"));
1956
+ if (messagesData && typeof messagesData === "object") {
1957
+ // Clear existing store and populate from file
1958
+ this.messagesStore.clear();
1959
+ let totalMessages = 0;
1960
+ for (const [jid, messages] of Object.entries(messagesData)) {
1961
+ if (Array.isArray(messages)) {
1962
+ this.messagesStore.set(jid, messages);
1963
+ totalMessages += messages.length;
1964
+ }
1965
+ }
1966
+ this.logger.info(`Loaded ${totalMessages} messages across ${this.messagesStore.size} chats from disk`);
1967
+ }
1968
+ }
1969
+ catch (error) {
1970
+ this.logger.warn("Failed to load messages from file:", error);
1971
+ }
1972
+ }
1973
+ /**
1974
+ * Get message counts for all chats
1975
+ * @returns Map of JID to message count
1976
+ */
1977
+ getMessageCounts() {
1978
+ const counts = new Map();
1979
+ for (const [jid, messages] of this.messagesStore.entries()) {
1980
+ counts.set(jid, messages.length);
1981
+ }
1982
+ return counts;
1983
+ }
1153
1984
  /**
1154
1985
  * Get chat messages from the in-memory store
1155
- * Note: Messages are populated via messages.upsert events
1986
+ * Note: Messages are populated via Baileys store history sync
1156
1987
  * @param jidOrPhone - Chat JID or phone number
1157
1988
  * @returns FetchChatMessagesResult with list of messages
1158
1989
  */
@@ -1173,14 +2004,104 @@ export class MiawClient extends EventEmitter {
1173
2004
  };
1174
2005
  }
1175
2006
  }
2007
+ /**
2008
+ * Load more (older) messages for a specific chat
2009
+ * Uses Baileys fetchMessageHistory to fetch earlier messages
2010
+ * @param jidOrPhone - Chat JID or phone number
2011
+ * @param count - Number of messages to fetch (max 50)
2012
+ * @param timeoutMs - Timeout in milliseconds (default 30000)
2013
+ * @returns Result with number of messages loaded and whether more are available
2014
+ */
2015
+ async loadMoreMessages(jidOrPhone, count = 50, timeoutMs = 30000) {
2016
+ try {
2017
+ if (!this.socket) {
2018
+ return { success: false, error: "Not connected. Call connect() first." };
2019
+ }
2020
+ if (this.connectionState !== "connected") {
2021
+ return { success: false, error: `Cannot load messages. Connection state: ${this.connectionState}` };
2022
+ }
2023
+ const jid = MessageHandler.formatPhoneToJid(jidOrPhone);
2024
+ const messages = this.messagesStore.get(jid) || [];
2025
+ if (messages.length === 0) {
2026
+ return { success: false, error: "No messages in store to paginate from. Send or receive a message first." };
2027
+ }
2028
+ // Find the oldest message (messages are stored newest first after history sync)
2029
+ // We need the raw Baileys message for the key and timestamp
2030
+ let oldestMessage = null;
2031
+ let oldestTimestamp = Infinity;
2032
+ for (const msg of messages) {
2033
+ if (msg.timestamp < oldestTimestamp) {
2034
+ oldestTimestamp = msg.timestamp;
2035
+ oldestMessage = msg;
2036
+ }
2037
+ }
2038
+ if (!oldestMessage || !oldestMessage.raw) {
2039
+ return { success: false, error: "Cannot find message with raw data for pagination cursor." };
2040
+ }
2041
+ const rawMsg = oldestMessage.raw;
2042
+ const msgKey = rawMsg.key;
2043
+ const msgTimestamp = rawMsg.messageTimestamp;
2044
+ if (!msgKey || !msgTimestamp) {
2045
+ return { success: false, error: "Message missing key or timestamp for pagination." };
2046
+ }
2047
+ // Clamp count to max 50
2048
+ const fetchCount = Math.min(count, 50);
2049
+ const initialCount = messages.length;
2050
+ this.logger.debug(`Fetching ${fetchCount} older messages for ${jid} (current: ${initialCount})`);
2051
+ // Call Baileys fetchMessageHistory
2052
+ const sessionId = await this.socket.fetchMessageHistory(fetchCount, msgKey, typeof msgTimestamp === 'number' ? msgTimestamp * 1000 : Number(msgTimestamp) * 1000);
2053
+ this.logger.debug(`History fetch initiated with sessionId: ${sessionId}`);
2054
+ // Create a Promise that will be resolved when the history arrives
2055
+ return new Promise((resolve) => {
2056
+ // Set up timeout
2057
+ const timeout = setTimeout(() => {
2058
+ this.pendingHistoryRequests.delete(sessionId);
2059
+ resolve({
2060
+ success: false,
2061
+ error: `Timeout waiting for history (${timeoutMs}ms)`,
2062
+ });
2063
+ }, timeoutMs);
2064
+ // Store the pending request
2065
+ this.pendingHistoryRequests.set(sessionId, {
2066
+ jid,
2067
+ initialCount,
2068
+ resolve: (result) => {
2069
+ clearTimeout(timeout);
2070
+ resolve(result);
2071
+ },
2072
+ });
2073
+ });
2074
+ }
2075
+ catch (error) {
2076
+ this.logger.error("Failed to load more messages:", error);
2077
+ return {
2078
+ success: false,
2079
+ error: error.message,
2080
+ };
2081
+ }
2082
+ }
1176
2083
  /**
1177
2084
  * Fetch all chats from the in-memory store
1178
- * Note: Chats are populated via history sync and chat events
2085
+ * Note: Chats are populated via Baileys store history sync
1179
2086
  * @returns FetchAllChatsResult with list of chats
1180
2087
  */
1181
2088
  async fetchAllChats() {
1182
2089
  try {
1183
- const chats = Array.from(this.chatsStore.values());
2090
+ // Map chats and resolve any @lid JIDs that weren't resolved earlier
2091
+ const chats = Array.from(this.chatsStore.values()).map(chat => {
2092
+ // If jid is @lid and phone is missing, try to resolve using LID cache
2093
+ if (chat.jid.endsWith("@lid") && !chat.phone) {
2094
+ const resolved = this.resolveLidToJid(chat.jid);
2095
+ if (resolved !== chat.jid && resolved.endsWith("@s.whatsapp.net")) {
2096
+ return {
2097
+ ...chat,
2098
+ jid: resolved,
2099
+ phone: resolved.replace("@s.whatsapp.net", ""),
2100
+ };
2101
+ }
2102
+ }
2103
+ return chat;
2104
+ });
1184
2105
  return {
1185
2106
  success: true,
1186
2107
  chats,
@@ -1607,6 +2528,16 @@ export class MiawClient extends EventEmitter {
1607
2528
  if (this.connectionState !== "connected") {
1608
2529
  throw new Error(`Cannot create group. Connection state: ${this.connectionState}`);
1609
2530
  }
2531
+ // Validate group name
2532
+ const nameValidation = validateGroupName(name);
2533
+ if (!nameValidation.valid) {
2534
+ return { success: false, error: nameValidation.error };
2535
+ }
2536
+ // Validate participant phone numbers
2537
+ const phonesValidation = validatePhoneNumbers(participants);
2538
+ if (!phonesValidation.valid) {
2539
+ return { success: false, error: phonesValidation.error };
2540
+ }
1610
2541
  // Format participant JIDs
1611
2542
  const formattedParticipants = participants.map((p) => MessageHandler.formatPhoneToJid(p));
1612
2543
  const metadata = await this.socket.groupCreate(name, formattedParticipants);
@@ -3184,7 +4115,9 @@ export class MiawClient extends EventEmitter {
3184
4115
  return mimeTypes[ext] || "application/octet-stream";
3185
4116
  }
3186
4117
  /**
3187
- * Disconnect from WhatsApp
4118
+ * Disconnect from WhatsApp without logging out.
4119
+ * The session is preserved and can be used to reconnect later without scanning QR again.
4120
+ * Use logout() if you want to fully log out and require a new QR code.
3188
4121
  */
3189
4122
  async disconnect() {
3190
4123
  if (this.reconnectTimer) {
@@ -3192,11 +4125,127 @@ export class MiawClient extends EventEmitter {
3192
4125
  this.reconnectTimer = null;
3193
4126
  }
3194
4127
  if (this.socket) {
3195
- await this.socket.logout();
4128
+ // Use end() instead of logout() to preserve session
4129
+ // logout() would clear credentials and require new QR scan
4130
+ this.socket.end(undefined);
3196
4131
  this.socket = null;
3197
4132
  }
4133
+ // Cleanup console filter if it was enabled (reference counted)
4134
+ if (!this.options.debug) {
4135
+ disableConsoleFilter();
4136
+ }
3198
4137
  this.updateConnectionState("disconnected");
3199
- this.logger.info("Disconnected");
4138
+ this.logger.info("Disconnected (session preserved)");
4139
+ }
4140
+ /**
4141
+ * Logout from WhatsApp and clear session.
4142
+ * After calling this, the next connect() will require scanning a new QR code.
4143
+ *
4144
+ * This method:
4145
+ * 1. Attempts to reconnect if disconnected (max 10 seconds)
4146
+ * 2. Sends a logout request to WhatsApp servers using socket.query() to wait for acknowledgment
4147
+ * 3. Clears local session files
4148
+ * 4. Closes the connection
4149
+ *
4150
+ * Note: The socket.query() method waits for WhatsApp's acknowledgment before proceeding.
4151
+ * This is more reliable than Baileys' native socket.logout() which uses sendNode() (fire-and-forget).
4152
+ */
4153
+ async logout() {
4154
+ // Set flag to prevent auto-reconnect during logout
4155
+ this.loggingOut = true;
4156
+ // Clear any pending reconnection
4157
+ if (this.reconnectTimer) {
4158
+ clearTimeout(this.reconnectTimer);
4159
+ this.reconnectTimer = null;
4160
+ }
4161
+ // Get JID from auth state (if connected) or load from session file
4162
+ let jid = this.authState?.creds?.me?.id;
4163
+ // If not in memory, try loading from session file
4164
+ if (!jid && this.authState) {
4165
+ jid = this.authState.creds.me?.id;
4166
+ this.logger.info(`Retrieved JID from auth state: ${jid ? 'JID found' : 'no JID'}`);
4167
+ }
4168
+ // If still not found, try initializing auth handler
4169
+ if (!jid) {
4170
+ try {
4171
+ const { state } = await this.authHandler.initialize();
4172
+ jid = state.creds.me?.id;
4173
+ this.logger.info(`Loaded credentials from session file: ${jid ? 'JID found' : 'no JID'}`);
4174
+ }
4175
+ catch (error) {
4176
+ this.logger.warn(`Failed to load credentials from session file: ${error}`);
4177
+ }
4178
+ }
4179
+ if (!jid) {
4180
+ this.logger.warn("No credentials found - cannot send logout request to server");
4181
+ this.updateConnectionState("disconnected");
4182
+ return;
4183
+ }
4184
+ // If disconnected, try to reconnect temporarily (only if we have credentials)
4185
+ if ((!this.socket || this.connectionState !== "connected") && jid) {
4186
+ this.logger.info("Not connected - attempting quick reconnect for logout");
4187
+ try {
4188
+ // Race between connect+wait and timeout to prevent hanging
4189
+ await Promise.race([
4190
+ (async () => {
4191
+ await this.connect();
4192
+ await this.waitForState("connected", 5000);
4193
+ })(),
4194
+ new Promise((_, reject) => setTimeout(() => reject(new Error("Reconnect timeout")), 5000))
4195
+ ]);
4196
+ this.logger.info("Reconnected successfully for logout");
4197
+ }
4198
+ catch (error) {
4199
+ this.logger.warn(`Quick reconnect failed: ${error instanceof Error ? error.message : error}`);
4200
+ // Continue with local cleanup even if reconnect fails
4201
+ }
4202
+ }
4203
+ // Send logout request using query() to wait for response
4204
+ if (this.socket && this.connectionState === "connected") {
4205
+ try {
4206
+ this.logger.info("Sending logout request to WhatsApp server...");
4207
+ // Use query() instead of sendNode() to wait for response
4208
+ // This works around Baileys' socket.logout() using sendNode() which
4209
+ // closes the connection before WhatsApp can process the request
4210
+ // Note: socket.query() auto-generates the 'id' attribute if not provided
4211
+ await this.socket.query({
4212
+ tag: 'iq',
4213
+ attrs: {
4214
+ to: "s.whatsapp.net",
4215
+ type: 'set',
4216
+ xmlns: 'md'
4217
+ },
4218
+ content: [{
4219
+ tag: 'remove-companion-device',
4220
+ attrs: {
4221
+ jid,
4222
+ reason: 'user_initiated'
4223
+ }
4224
+ }]
4225
+ });
4226
+ this.logger.info("Logout request acknowledged by WhatsApp server");
4227
+ }
4228
+ catch (error) {
4229
+ this.logger.warn(`Logout request failed: ${error}`);
4230
+ // Continue with cleanup even if logout request fails
4231
+ }
4232
+ }
4233
+ // Clean up socket
4234
+ if (this.socket) {
4235
+ this.removeSocketEvents();
4236
+ this.socket.end(undefined);
4237
+ this.socket = null;
4238
+ }
4239
+ // Clear session files
4240
+ this.authHandler.clearSession();
4241
+ // Reset logout flag
4242
+ this.loggingOut = false;
4243
+ // Cleanup console filter if it was enabled (reference counted)
4244
+ if (!this.options.debug) {
4245
+ disableConsoleFilter();
4246
+ }
4247
+ this.updateConnectionState("disconnected");
4248
+ this.logger.info("Logged out (session cleared)");
3200
4249
  }
3201
4250
  /**
3202
4251
  * Get current connection state
@@ -3204,6 +4253,32 @@ export class MiawClient extends EventEmitter {
3204
4253
  getConnectionState() {
3205
4254
  return this.connectionState;
3206
4255
  }
4256
+ /**
4257
+ * Wait for connection state to change to desired state
4258
+ * @param desiredState - The state to wait for
4259
+ * @param timeoutMs - Maximum time to wait in milliseconds
4260
+ */
4261
+ async waitForState(desiredState, timeoutMs = 10000) {
4262
+ return new Promise((resolve, reject) => {
4263
+ // Check if already in desired state
4264
+ if (this.connectionState === desiredState) {
4265
+ resolve();
4266
+ return;
4267
+ }
4268
+ const timer = setTimeout(() => {
4269
+ this.off("connection", handler);
4270
+ reject(new Error(`Timeout waiting for connection state: ${desiredState}`));
4271
+ }, timeoutMs);
4272
+ const handler = (state) => {
4273
+ if (state === desiredState) {
4274
+ clearTimeout(timer);
4275
+ this.off("connection", handler);
4276
+ resolve();
4277
+ }
4278
+ };
4279
+ this.on("connection", handler);
4280
+ });
4281
+ }
3207
4282
  /**
3208
4283
  * Get instance ID
3209
4284
  */
@@ -3216,6 +4291,58 @@ export class MiawClient extends EventEmitter {
3216
4291
  isConnected() {
3217
4292
  return this.connectionState === "connected";
3218
4293
  }
4294
+ /**
4295
+ * Enable debug mode at runtime
4296
+ * Enables verbose logging for debugging (includes libsignal session logs)
4297
+ */
4298
+ enableDebug() {
4299
+ this.options.debug = true;
4300
+ // Recreate logger with debug enabled
4301
+ this.logger = createFilteredLogger(true);
4302
+ this.options.logger = this.logger;
4303
+ // Update socket logger if connected
4304
+ if (this.socket) {
4305
+ this.socket.logger = this.logger;
4306
+ }
4307
+ // Disable console filter to show libsignal logs in debug mode
4308
+ disableConsoleFilter();
4309
+ this.logger.info("Debug mode enabled");
4310
+ }
4311
+ /**
4312
+ * Disable debug mode at runtime
4313
+ * Disables verbose logging and suppresses libsignal session logs
4314
+ */
4315
+ disableDebug() {
4316
+ this.logger.info("Debug mode disabled");
4317
+ this.options.debug = false;
4318
+ // Recreate logger with debug disabled
4319
+ this.logger = createFilteredLogger(false);
4320
+ this.options.logger = this.logger;
4321
+ // Update socket logger if connected
4322
+ if (this.socket) {
4323
+ this.socket.logger = this.logger;
4324
+ }
4325
+ // Enable console filter to suppress libsignal session logs
4326
+ enableConsoleFilter();
4327
+ }
4328
+ /**
4329
+ * Check if debug mode is enabled
4330
+ */
4331
+ isDebugEnabled() {
4332
+ return this.options.debug;
4333
+ }
4334
+ /**
4335
+ * Set debug mode
4336
+ * @param enabled - Whether to enable debug mode
4337
+ */
4338
+ setDebug(enabled) {
4339
+ if (enabled) {
4340
+ this.enableDebug();
4341
+ }
4342
+ else {
4343
+ this.disableDebug();
4344
+ }
4345
+ }
3219
4346
  // TypeScript event emitter type safety
3220
4347
  on(event, listener) {
3221
4348
  return super.on(event, listener);