@violetix/baileys 0.0.0-stage → 0.4.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 (458) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3017 -2
  3. package/WAProto/index.d.ts +15932 -0
  4. package/WAProto/index.js +115856 -0
  5. package/engine-requirements.js +13 -0
  6. package/lib/Defaults/index.d.ts +145 -0
  7. package/lib/Defaults/index.d.ts.map +1 -0
  8. package/lib/Defaults/index.js +157 -0
  9. package/lib/Defaults/index.js.map +1 -0
  10. package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
  11. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  12. package/lib/Signal/Group/ciphertext-message.js +12 -0
  13. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  14. package/lib/Signal/Group/group-session-builder.d.ts +8 -0
  15. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  16. package/lib/Signal/Group/group-session-builder.js +30 -0
  17. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  18. package/lib/Signal/Group/group_cipher.d.ts +11 -0
  19. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  20. package/lib/Signal/Group/group_cipher.js +82 -0
  21. package/lib/Signal/Group/group_cipher.js.map +1 -0
  22. package/lib/Signal/Group/index.d.ts +12 -0
  23. package/lib/Signal/Group/index.d.ts.map +1 -0
  24. package/lib/Signal/Group/index.js +12 -0
  25. package/lib/Signal/Group/index.js.map +1 -0
  26. package/lib/Signal/Group/keyhelper.d.ts +7 -0
  27. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  28. package/lib/Signal/Group/keyhelper.js +18 -0
  29. package/lib/Signal/Group/keyhelper.js.map +1 -0
  30. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  31. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  32. package/lib/Signal/Group/sender-chain-key.js +26 -0
  33. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  34. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  35. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  36. package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
  37. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  38. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  39. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  40. package/lib/Signal/Group/sender-key-message.js +66 -0
  41. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  42. package/lib/Signal/Group/sender-key-name.d.ts +12 -0
  43. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  44. package/lib/Signal/Group/sender-key-name.js +48 -0
  45. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  46. package/lib/Signal/Group/sender-key-record.d.ts +13 -0
  47. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  48. package/lib/Signal/Group/sender-key-record.js +41 -0
  49. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  50. package/lib/Signal/Group/sender-key-state.d.ts +17 -0
  51. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  52. package/lib/Signal/Group/sender-key-state.js +84 -0
  53. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  54. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  55. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  56. package/lib/Signal/Group/sender-message-key.js +26 -0
  57. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  58. package/lib/Signal/libsignal.d.ts +55 -0
  59. package/lib/Signal/libsignal.d.ts.map +1 -0
  60. package/lib/Signal/libsignal.js +403 -0
  61. package/lib/Signal/libsignal.js.map +1 -0
  62. package/lib/Signal/lid-mapping.d.ts +21 -0
  63. package/lib/Signal/lid-mapping.d.ts.map +1 -0
  64. package/lib/Signal/lid-mapping.js +277 -0
  65. package/lib/Signal/lid-mapping.js.map +1 -0
  66. package/lib/Socket/Client/index.d.ts +3 -0
  67. package/lib/Socket/Client/index.d.ts.map +1 -0
  68. package/lib/Socket/Client/index.js +3 -0
  69. package/lib/Socket/Client/index.js.map +1 -0
  70. package/lib/Socket/Client/types.d.ts +6 -0
  71. package/lib/Socket/Client/types.d.ts.map +1 -0
  72. package/lib/Socket/Client/types.js +93 -0
  73. package/lib/Socket/Client/types.js.map +1 -0
  74. package/lib/Socket/Client/websocket.d.ts +13 -0
  75. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  76. package/lib/Socket/Client/websocket.js +57 -0
  77. package/lib/Socket/Client/websocket.js.map +1 -0
  78. package/lib/Socket/business.d.ts +428 -0
  79. package/lib/Socket/business.d.ts.map +1 -0
  80. package/lib/Socket/business.js +380 -0
  81. package/lib/Socket/business.js.map +1 -0
  82. package/lib/Socket/chats.d.ts +176 -0
  83. package/lib/Socket/chats.d.ts.map +1 -0
  84. package/lib/Socket/chats.js +1238 -0
  85. package/lib/Socket/chats.js.map +1 -0
  86. package/lib/Socket/communities.d.ts +595 -0
  87. package/lib/Socket/communities.d.ts.map +1 -0
  88. package/lib/Socket/communities.js +432 -0
  89. package/lib/Socket/communities.js.map +1 -0
  90. package/lib/Socket/graphql.js +908 -0
  91. package/lib/Socket/groups.d.ts +318 -0
  92. package/lib/Socket/groups.d.ts.map +1 -0
  93. package/lib/Socket/groups.js +364 -0
  94. package/lib/Socket/groups.js.map +1 -0
  95. package/lib/Socket/index.d.ts +947 -0
  96. package/lib/Socket/index.d.ts.map +1 -0
  97. package/lib/Socket/index.js +19 -0
  98. package/lib/Socket/index.js.map +1 -0
  99. package/lib/Socket/interop.js +562 -0
  100. package/lib/Socket/managed-account.js +210 -0
  101. package/lib/Socket/messages-recv.d.ts +367 -0
  102. package/lib/Socket/messages-recv.d.ts.map +1 -0
  103. package/lib/Socket/messages-recv.js +2199 -0
  104. package/lib/Socket/messages-recv.js.map +1 -0
  105. package/lib/Socket/messages-send.d.ts +364 -0
  106. package/lib/Socket/messages-send.d.ts.map +1 -0
  107. package/lib/Socket/messages-send.js +1631 -0
  108. package/lib/Socket/messages-send.js.map +1 -0
  109. package/lib/Socket/mex.d.ts +2 -0
  110. package/lib/Socket/mex.d.ts.map +1 -0
  111. package/lib/Socket/mex.js +42 -0
  112. package/lib/Socket/mex.js.map +1 -0
  113. package/lib/Socket/newsletter.d.ts +315 -0
  114. package/lib/Socket/newsletter.d.ts.map +1 -0
  115. package/lib/Socket/newsletter.js +235 -0
  116. package/lib/Socket/newsletter.js.map +1 -0
  117. package/lib/Socket/privacy.js +448 -0
  118. package/lib/Socket/registration.js +430 -0
  119. package/lib/Socket/socket.d.ts +99 -0
  120. package/lib/Socket/socket.d.ts.map +1 -0
  121. package/lib/Socket/socket.js +1290 -0
  122. package/lib/Socket/socket.js.map +1 -0
  123. package/lib/Store/index.d.ts +4 -0
  124. package/lib/Store/index.d.ts.map +1 -0
  125. package/lib/Store/index.js +4 -0
  126. package/lib/Store/index.js.map +1 -0
  127. package/lib/Store/make-in-memory-store.d.ts +63 -0
  128. package/lib/Store/make-in-memory-store.d.ts.map +1 -0
  129. package/lib/Store/make-in-memory-store.js +462 -0
  130. package/lib/Store/make-in-memory-store.js.map +1 -0
  131. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  132. package/lib/Store/make-ordered-dictionary.d.ts.map +1 -0
  133. package/lib/Store/make-ordered-dictionary.js +79 -0
  134. package/lib/Store/make-ordered-dictionary.js.map +1 -0
  135. package/lib/Store/object-repository.d.ts +11 -0
  136. package/lib/Store/object-repository.d.ts.map +1 -0
  137. package/lib/Store/object-repository.js +24 -0
  138. package/lib/Store/object-repository.js.map +1 -0
  139. package/lib/Types/Auth.d.ts +60 -0
  140. package/lib/Types/Auth.d.ts.map +1 -0
  141. package/lib/Types/Auth.js +2 -0
  142. package/lib/Types/Auth.js.map +1 -0
  143. package/lib/Types/Bussines.d.ts +9 -0
  144. package/lib/Types/Bussines.d.ts.map +1 -0
  145. package/lib/Types/Bussines.js +2 -0
  146. package/lib/Types/Bussines.js.map +1 -0
  147. package/lib/Types/Call.d.ts +22 -0
  148. package/lib/Types/Call.d.ts.map +1 -0
  149. package/lib/Types/Call.js +2 -0
  150. package/lib/Types/Call.js.map +1 -0
  151. package/lib/Types/Chat.d.ts +3 -0
  152. package/lib/Types/Chat.d.ts.map +1 -0
  153. package/lib/Types/Chat.js +8 -0
  154. package/lib/Types/Chat.js.map +1 -0
  155. package/lib/Types/Contact.d.ts +11 -0
  156. package/lib/Types/Contact.d.ts.map +1 -0
  157. package/lib/Types/Contact.js +2 -0
  158. package/lib/Types/Contact.js.map +1 -0
  159. package/lib/Types/Events.d.ts +41 -0
  160. package/lib/Types/Events.d.ts.map +1 -0
  161. package/lib/Types/Events.js +2 -0
  162. package/lib/Types/Events.js.map +1 -0
  163. package/lib/Types/GroupMetadata.d.ts +36 -0
  164. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  165. package/lib/Types/GroupMetadata.js +2 -0
  166. package/lib/Types/GroupMetadata.js.map +1 -0
  167. package/lib/Types/Label.d.ts +3 -0
  168. package/lib/Types/Label.d.ts.map +1 -0
  169. package/lib/Types/Label.js +25 -0
  170. package/lib/Types/Label.js.map +1 -0
  171. package/lib/Types/LabelAssociation.d.ts +3 -0
  172. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  173. package/lib/Types/LabelAssociation.js +7 -0
  174. package/lib/Types/LabelAssociation.js.map +1 -0
  175. package/lib/Types/Message.d.ts +22 -0
  176. package/lib/Types/Message.d.ts.map +1 -0
  177. package/lib/Types/Message.js +18 -0
  178. package/lib/Types/Message.js.map +1 -0
  179. package/lib/Types/Mex.d.ts +3 -0
  180. package/lib/Types/Mex.d.ts.map +1 -0
  181. package/lib/Types/Mex.js +49 -0
  182. package/lib/Types/Mex.js.map +1 -0
  183. package/lib/Types/Product.d.ts +5 -0
  184. package/lib/Types/Product.d.ts.map +1 -0
  185. package/lib/Types/Product.js +2 -0
  186. package/lib/Types/Product.js.map +1 -0
  187. package/lib/Types/RichType.d.ts +3 -0
  188. package/lib/Types/RichType.d.ts.map +1 -0
  189. package/lib/Types/RichType.js +23 -0
  190. package/lib/Types/RichType.js.map +1 -0
  191. package/lib/Types/Signal.d.ts +10 -0
  192. package/lib/Types/Signal.d.ts.map +1 -0
  193. package/lib/Types/Signal.js +2 -0
  194. package/lib/Types/Signal.js.map +1 -0
  195. package/lib/Types/Socket.d.ts +33 -0
  196. package/lib/Types/Socket.d.ts.map +1 -0
  197. package/lib/Types/Socket.js +2 -0
  198. package/lib/Types/Socket.js.map +1 -0
  199. package/lib/Types/State.d.ts +6 -0
  200. package/lib/Types/State.d.ts.map +1 -0
  201. package/lib/Types/State.js +56 -0
  202. package/lib/Types/State.js.map +1 -0
  203. package/lib/Types/USync.d.ts +9 -0
  204. package/lib/Types/USync.d.ts.map +1 -0
  205. package/lib/Types/USync.js +2 -0
  206. package/lib/Types/USync.js.map +1 -0
  207. package/lib/Types/index.d.ts +16 -0
  208. package/lib/Types/index.d.ts.map +1 -0
  209. package/lib/Types/index.js +26 -0
  210. package/lib/Types/index.js.map +1 -0
  211. package/lib/Utils/a2ui.d.ts +50 -0
  212. package/lib/Utils/a2ui.js +168 -0
  213. package/lib/Utils/anchor-guard.d.ts +71 -0
  214. package/lib/Utils/anchor-guard.js +404 -0
  215. package/lib/Utils/async-utils.js +7 -0
  216. package/lib/Utils/auth-utils.d.ts +59 -0
  217. package/lib/Utils/auth-utils.d.ts.map +1 -0
  218. package/lib/Utils/auth-utils.js +306 -0
  219. package/lib/Utils/auth-utils.js.map +1 -0
  220. package/lib/Utils/browser-utils.d.ts +10 -0
  221. package/lib/Utils/browser-utils.d.ts.map +1 -0
  222. package/lib/Utils/browser-utils.js +29 -0
  223. package/lib/Utils/browser-utils.js.map +1 -0
  224. package/lib/Utils/business.d.ts +50 -0
  225. package/lib/Utils/business.d.ts.map +1 -0
  226. package/lib/Utils/business.js +245 -0
  227. package/lib/Utils/business.js.map +1 -0
  228. package/lib/Utils/chat-utils.d.ts +409 -0
  229. package/lib/Utils/chat-utils.d.ts.map +1 -0
  230. package/lib/Utils/chat-utils.js +872 -0
  231. package/lib/Utils/chat-utils.js.map +1 -0
  232. package/lib/Utils/companion-reg-client-utils.d.ts +10 -0
  233. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  234. package/lib/Utils/companion-reg-client-utils.js +69 -0
  235. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  236. package/lib/Utils/crypto-worker.js +20 -0
  237. package/lib/Utils/crypto.d.ts +40 -0
  238. package/lib/Utils/crypto.d.ts.map +1 -0
  239. package/lib/Utils/crypto.js +118 -0
  240. package/lib/Utils/crypto.js.map +1 -0
  241. package/lib/Utils/decode-wa-message.d.ts +85 -0
  242. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  243. package/lib/Utils/decode-wa-message.js +467 -0
  244. package/lib/Utils/decode-wa-message.js.map +1 -0
  245. package/lib/Utils/event-buffer.d.ts +13 -0
  246. package/lib/Utils/event-buffer.d.ts.map +1 -0
  247. package/lib/Utils/event-buffer.js +651 -0
  248. package/lib/Utils/event-buffer.js.map +1 -0
  249. package/lib/Utils/generics.d.ts +64 -0
  250. package/lib/Utils/generics.d.ts.map +1 -0
  251. package/lib/Utils/generics.js +442 -0
  252. package/lib/Utils/generics.js.map +1 -0
  253. package/lib/Utils/history.d.ts +77 -0
  254. package/lib/Utils/history.d.ts.map +1 -0
  255. package/lib/Utils/history.js +188 -0
  256. package/lib/Utils/history.js.map +1 -0
  257. package/lib/Utils/identity-change-handler.d.ts +14 -0
  258. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  259. package/lib/Utils/identity-change-handler.js +50 -0
  260. package/lib/Utils/identity-change-handler.js.map +1 -0
  261. package/lib/Utils/ignore-key.d.ts +51 -0
  262. package/lib/Utils/ignore-key.js +174 -0
  263. package/lib/Utils/index.d.ts +29 -0
  264. package/lib/Utils/index.d.ts.map +1 -0
  265. package/lib/Utils/index.js +29 -0
  266. package/lib/Utils/index.js.map +1 -0
  267. package/lib/Utils/link-preview.d.ts +13 -0
  268. package/lib/Utils/link-preview.d.ts.map +1 -0
  269. package/lib/Utils/link-preview.js +85 -0
  270. package/lib/Utils/link-preview.js.map +1 -0
  271. package/lib/Utils/listener-guard.js +48 -0
  272. package/lib/Utils/logger.d.ts +3 -0
  273. package/lib/Utils/logger.d.ts.map +1 -0
  274. package/lib/Utils/logger.js +3 -0
  275. package/lib/Utils/logger.js.map +1 -0
  276. package/lib/Utils/lt-hash.d.ts +7 -0
  277. package/lib/Utils/lt-hash.d.ts.map +1 -0
  278. package/lib/Utils/lt-hash.js +8 -0
  279. package/lib/Utils/lt-hash.js.map +1 -0
  280. package/lib/Utils/make-mutex.d.ts +7 -0
  281. package/lib/Utils/make-mutex.d.ts.map +1 -0
  282. package/lib/Utils/make-mutex.js +33 -0
  283. package/lib/Utils/make-mutex.js.map +1 -0
  284. package/lib/Utils/message-retry-manager.d.ts +80 -0
  285. package/lib/Utils/message-retry-manager.d.ts.map +1 -0
  286. package/lib/Utils/message-retry-manager.js +285 -0
  287. package/lib/Utils/message-retry-manager.js.map +1 -0
  288. package/lib/Utils/messages-media.d.ts +166 -0
  289. package/lib/Utils/messages-media.d.ts.map +1 -0
  290. package/lib/Utils/messages-media.js +979 -0
  291. package/lib/Utils/messages-media.js.map +1 -0
  292. package/lib/Utils/messages.d.ts +47 -0
  293. package/lib/Utils/messages.d.ts.map +1 -0
  294. package/lib/Utils/messages.js +1959 -0
  295. package/lib/Utils/messages.js.map +1 -0
  296. package/lib/Utils/meta-ai-msmsg.d.ts +12 -0
  297. package/lib/Utils/meta-ai-msmsg.js +124 -0
  298. package/lib/Utils/noise-handler.d.ts +21 -0
  299. package/lib/Utils/noise-handler.d.ts.map +1 -0
  300. package/lib/Utils/noise-handler.js +206 -0
  301. package/lib/Utils/noise-handler.js.map +1 -0
  302. package/lib/Utils/offline-node-processor.d.ts +10 -0
  303. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  304. package/lib/Utils/offline-node-processor.js +40 -0
  305. package/lib/Utils/offline-node-processor.js.map +1 -0
  306. package/lib/Utils/pre-key-manager.d.ts +26 -0
  307. package/lib/Utils/pre-key-manager.d.ts.map +1 -0
  308. package/lib/Utils/pre-key-manager.js +106 -0
  309. package/lib/Utils/pre-key-manager.js.map +1 -0
  310. package/lib/Utils/process-message.d.ts +102 -0
  311. package/lib/Utils/process-message.d.ts.map +1 -0
  312. package/lib/Utils/process-message.js +798 -0
  313. package/lib/Utils/process-message.js.map +1 -0
  314. package/lib/Utils/reporting-utils.d.ts +13 -0
  315. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  316. package/lib/Utils/reporting-utils.js +258 -0
  317. package/lib/Utils/reporting-utils.js.map +1 -0
  318. package/lib/Utils/rich-message-utils.d.ts +49 -0
  319. package/lib/Utils/rich-message-utils.d.ts.map +1 -0
  320. package/lib/Utils/rich-message-utils.js +369 -0
  321. package/lib/Utils/rich-message-utils.js.map +1 -0
  322. package/lib/Utils/session-queue.js +33 -0
  323. package/lib/Utils/signal.d.ts +83 -0
  324. package/lib/Utils/signal.d.ts.map +1 -0
  325. package/lib/Utils/signal.js +201 -0
  326. package/lib/Utils/signal.js.map +1 -0
  327. package/lib/Utils/stanza-ack.d.ts +22 -0
  328. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  329. package/lib/Utils/stanza-ack.js +72 -0
  330. package/lib/Utils/stanza-ack.js.map +1 -0
  331. package/lib/Utils/sync-action-utils.d.ts +3 -0
  332. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  333. package/lib/Utils/sync-action-utils.js +49 -0
  334. package/lib/Utils/sync-action-utils.js.map +1 -0
  335. package/lib/Utils/tc-token-utils.d.ts +30 -0
  336. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  337. package/lib/Utils/tc-token-utils.js +164 -0
  338. package/lib/Utils/tc-token-utils.js.map +1 -0
  339. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  340. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  341. package/lib/Utils/use-multi-file-auth-state.js +196 -0
  342. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  343. package/lib/Utils/use-single-file-auth-state.d.ts +11 -0
  344. package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -0
  345. package/lib/Utils/use-single-file-auth-state.js +118 -0
  346. package/lib/Utils/use-single-file-auth-state.js.map +1 -0
  347. package/lib/Utils/use-sqlite-auth-state.d.ts +11 -0
  348. package/lib/Utils/use-sqlite-auth-state.d.ts.map +1 -0
  349. package/lib/Utils/use-sqlite-auth-state.js +109 -0
  350. package/lib/Utils/use-sqlite-auth-state.js.map +1 -0
  351. package/lib/Utils/validate-connection.d.ts +44 -0
  352. package/lib/Utils/validate-connection.d.ts.map +1 -0
  353. package/lib/Utils/validate-connection.js +210 -0
  354. package/lib/Utils/validate-connection.js.map +1 -0
  355. package/lib/Utils/worker-pool.js +73 -0
  356. package/lib/WABinary/constants.d.ts +62 -0
  357. package/lib/WABinary/constants.d.ts.map +1 -0
  358. package/lib/WABinary/constants.js +1467 -0
  359. package/lib/WABinary/constants.js.map +1 -0
  360. package/lib/WABinary/decode.d.ts +10 -0
  361. package/lib/WABinary/decode.d.ts.map +1 -0
  362. package/lib/WABinary/decode.js +262 -0
  363. package/lib/WABinary/decode.js.map +1 -0
  364. package/lib/WABinary/encode.d.ts +3 -0
  365. package/lib/WABinary/encode.d.ts.map +1 -0
  366. package/lib/WABinary/encode.js +220 -0
  367. package/lib/WABinary/encode.js.map +1 -0
  368. package/lib/WABinary/generic-utils.d.ts +77 -0
  369. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  370. package/lib/WABinary/generic-utils.js +226 -0
  371. package/lib/WABinary/generic-utils.js.map +1 -0
  372. package/lib/WABinary/index.d.ts +6 -0
  373. package/lib/WABinary/index.d.ts.map +1 -0
  374. package/lib/WABinary/index.js +6 -0
  375. package/lib/WABinary/index.js.map +1 -0
  376. package/lib/WABinary/jid-utils.d.ts +29 -0
  377. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  378. package/lib/WABinary/jid-utils.js +96 -0
  379. package/lib/WABinary/jid-utils.js.map +1 -0
  380. package/lib/WABinary/types.d.ts +6 -0
  381. package/lib/WABinary/types.d.ts.map +1 -0
  382. package/lib/WABinary/types.js +2 -0
  383. package/lib/WABinary/types.js.map +1 -0
  384. package/lib/WAM/BinaryInfo.d.ts +8 -0
  385. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  386. package/lib/WAM/BinaryInfo.js +10 -0
  387. package/lib/WAM/BinaryInfo.js.map +1 -0
  388. package/lib/WAM/constants.d.ts +34927 -0
  389. package/lib/WAM/constants.d.ts.map +1 -0
  390. package/lib/WAM/constants.js +22853 -0
  391. package/lib/WAM/constants.js.map +1 -0
  392. package/lib/WAM/encode.d.ts +2 -0
  393. package/lib/WAM/encode.d.ts.map +1 -0
  394. package/lib/WAM/encode.js +150 -0
  395. package/lib/WAM/encode.js.map +1 -0
  396. package/lib/WAM/index.d.ts +4 -0
  397. package/lib/WAM/index.d.ts.map +1 -0
  398. package/lib/WAM/index.js +4 -0
  399. package/lib/WAM/index.js.map +1 -0
  400. package/lib/WAUSync/Protocols/USyncBusinessProtocol.d.ts +8 -0
  401. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +99 -0
  402. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +37 -0
  403. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  404. package/lib/WAUSync/Protocols/USyncContactProtocol.js +53 -0
  405. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  406. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
  407. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  408. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
  409. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  410. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
  411. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  412. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  413. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  414. package/lib/WAUSync/Protocols/USyncFeatureProtocol.d.ts +9 -0
  415. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +70 -0
  416. package/lib/WAUSync/Protocols/USyncPictureProtocol.d.ts +12 -0
  417. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +28 -0
  418. package/lib/WAUSync/Protocols/USyncSidelistProtocol.d.ts +10 -0
  419. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +25 -0
  420. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
  421. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  422. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
  423. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  424. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.d.ts +11 -0
  425. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +34 -0
  426. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  427. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  428. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +31 -0
  429. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  430. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +39 -0
  431. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  432. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
  433. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  434. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +15 -0
  435. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  436. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
  437. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  438. package/lib/WAUSync/Protocols/index.d.ts +11 -0
  439. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  440. package/lib/WAUSync/Protocols/index.js +11 -0
  441. package/lib/WAUSync/Protocols/index.js.map +1 -0
  442. package/lib/WAUSync/USyncQuery.d.ts +32 -0
  443. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  444. package/lib/WAUSync/USyncQuery.js +185 -0
  445. package/lib/WAUSync/USyncQuery.js.map +1 -0
  446. package/lib/WAUSync/USyncUser.d.ts +25 -0
  447. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  448. package/lib/WAUSync/USyncUser.js +48 -0
  449. package/lib/WAUSync/USyncUser.js.map +1 -0
  450. package/lib/WAUSync/index.d.ts +4 -0
  451. package/lib/WAUSync/index.d.ts.map +1 -0
  452. package/lib/WAUSync/index.js +4 -0
  453. package/lib/WAUSync/index.js.map +1 -0
  454. package/lib/index.d.ts +12 -0
  455. package/lib/index.d.ts.map +1 -0
  456. package/lib/index.js +12 -0
  457. package/lib/index.js.map +1 -0
  458. package/package.json +122 -5
@@ -0,0 +1,85 @@
1
+ import { prepareWAMessageMedia } from './messages.js';
2
+ import { extractImageThumb, getHttpStream } from './messages-media.js';
3
+ const THUMBNAIL_WIDTH_PX = 192;
4
+ /** Fetches an image and generates a thumbnail for it */
5
+ const getCompressedJpegThumbnail = async (url, { thumbnailWidth, fetchOpts }) => {
6
+ const stream = await getHttpStream(url, fetchOpts);
7
+ const result = await extractImageThumb(stream, thumbnailWidth);
8
+ return result;
9
+ };
10
+ /**
11
+ * Given a piece of text, checks for any URL present, generates link preview for the same and returns it
12
+ * Return undefined if the fetch failed or no URL was found
13
+ * @param text first matched URL in text
14
+ * @returns the URL info required to generate link preview
15
+ */
16
+ export const getUrlInfo = async (text, opts = {
17
+ thumbnailWidth: THUMBNAIL_WIDTH_PX,
18
+ fetchOpts: { timeout: 3000 }
19
+ }) => {
20
+ try {
21
+ // retries
22
+ let retries = 0;
23
+ const maxRetry = 5;
24
+ const { getLinkPreview } = await import('link-preview-js');
25
+ let previewLink = text;
26
+ if (!text.startsWith('https://') && !text.startsWith('http://')) {
27
+ previewLink = 'https://' + previewLink;
28
+ }
29
+ const info = await getLinkPreview(previewLink, {
30
+ ...opts.fetchOpts,
31
+ followRedirects: 'follow',
32
+ handleRedirects: (baseURL, forwardedURL) => {
33
+ const urlObj = new URL(baseURL);
34
+ const forwardedURLObj = new URL(forwardedURL);
35
+ if (retries >= maxRetry) {
36
+ return false;
37
+ }
38
+ if (forwardedURLObj.hostname === urlObj.hostname ||
39
+ forwardedURLObj.hostname === 'www.' + urlObj.hostname ||
40
+ 'www.' + forwardedURLObj.hostname === urlObj.hostname) {
41
+ retries += 1;
42
+ return true;
43
+ }
44
+ else {
45
+ return false;
46
+ }
47
+ },
48
+ headers: opts.fetchOpts?.headers
49
+ });
50
+ if (info && 'title' in info && info.title) {
51
+ const [image] = info.images;
52
+ const urlInfo = {
53
+ 'canonical-url': info.url,
54
+ 'matched-text': text,
55
+ title: info.title,
56
+ description: info.description,
57
+ originalThumbnailUrl: image
58
+ };
59
+ if (opts.uploadImage) {
60
+ const { imageMessage } = await prepareWAMessageMedia({ image: { url: image } }, {
61
+ upload: opts.uploadImage,
62
+ mediaTypeOverride: 'thumbnail-link',
63
+ options: opts.fetchOpts
64
+ });
65
+ urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined;
66
+ urlInfo.highQualityThumbnail = imageMessage || undefined;
67
+ }
68
+ else {
69
+ try {
70
+ urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined;
71
+ }
72
+ catch (error) {
73
+ opts.logger?.debug({ err: error.stack, url: previewLink }, 'error in generating thumbnail');
74
+ }
75
+ }
76
+ return urlInfo;
77
+ }
78
+ }
79
+ catch (error) {
80
+ if (!error.message.includes('receive a valid')) {
81
+ throw error;
82
+ }
83
+ }
84
+ };
85
+ //# sourceMappingURL=link-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-preview.js","sourceRoot":"","sources":["../../src/Utils/link-preview.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * EventEmitter discards whatever a listener returns. An async listener that rejects therefore
3
+ * becomes an unhandled rejection, and Node's default for those is to terminate the process.
4
+ *
5
+ * In a host that runs one socket per account that is the difference between one account having a
6
+ * bad minute and every account in the process being disconnected at once: a single stanza that
7
+ * arrives while its own connection is closing takes the whole fleet down. Wrapping a listener keeps
8
+ * the failure where it happened.
9
+ *
10
+ * Wrappers are remembered per original function so `off(event, handler)` still finds the
11
+ * registration made by `on(event, handler)` - without that, every listener would leak.
12
+ *
13
+ * Deliberately importless: this is used from the transport client and from the event buffer, and a
14
+ * cycle through Utils/index.js would be easy to introduce and annoying to find.
15
+ */
16
+ export const makeListenerGuard = (onError) => {
17
+ const wrappers = new WeakMap()
18
+ return {
19
+ /** the function to hand to EventEmitter in place of `listener` */
20
+ wrap (listener) {
21
+ if (typeof listener !== 'function') return listener
22
+ const existing = wrappers.get(listener)
23
+ if (existing) return existing
24
+ const wrapper = function (...args) {
25
+ let result
26
+ try {
27
+ result = listener.apply(this, args)
28
+ }
29
+ catch (err) {
30
+ onError(err)
31
+ return
32
+ }
33
+ // Only promises need the catch; a sync listener already returned normally.
34
+ if (result && typeof result.catch === 'function') result.catch(onError)
35
+ return result
36
+ }
37
+ // Preserve the identity EventEmitter uses to remove once wrappers and list callbacks.
38
+ wrapper.listener = listener.listener || listener
39
+ wrappers.set(listener, wrapper)
40
+ return wrapper
41
+ },
42
+ /** the registration made for `listener`, so removal works on the original reference */
43
+ unwrap (listener) {
44
+ if (typeof listener !== 'function') return listener
45
+ return wrappers.get(listener) || listener
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: any;
2
+ export default _default;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/Utils/logger.js"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import P from 'pino';
2
+ export default P({ timestamp: () => `,"time":"${new Date().toJSON()}"` });
3
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/Utils/logger.js"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAC;AACrB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
3
+ * over a series of mutations. You can add/remove mutations and it'll return a hash equal to
4
+ * if the same series of mutations was made sequentially.
5
+ */
6
+ export const LT_HASH_ANTI_TAMPERING: any;
7
+ //# sourceMappingURL=lt-hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lt-hash.d.ts","sourceRoot":"","sources":["../../src/Utils/lt-hash.js"],"names":[],"mappings":"AACA;;;;GAIG;AACH,yCAAgE"}
@@ -0,0 +1,8 @@
1
+ import { LTHashAntiTampering } from 'whatsapp-rust-bridge';
2
+ /**
3
+ * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
4
+ * over a series of mutations. You can add/remove mutations and it'll return a hash equal to
5
+ * if the same series of mutations was made sequentially.
6
+ */
7
+ export const LT_HASH_ANTI_TAMPERING = new LTHashAntiTampering();
8
+ //# sourceMappingURL=lt-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lt-hash.js","sourceRoot":"","sources":["../../src/Utils/lt-hash.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export function makeMutex(): {
2
+ mutex(code: any): any;
3
+ };
4
+ export function makeKeyedMutex(): {
5
+ mutex(key: any, task: any): Promise<any>;
6
+ };
7
+ //# sourceMappingURL=make-mutex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-mutex.d.ts","sourceRoot":"","sources":["../../src/Utils/make-mutex.js"],"names":[],"mappings":"AACO;;EAON;AACM;;EAsBN"}
@@ -0,0 +1,33 @@
1
+ import { Mutex as AsyncMutex } from 'async-mutex';
2
+ export const makeMutex = () => {
3
+ const mutex = new AsyncMutex();
4
+ return {
5
+ mutex(code) {
6
+ return mutex.runExclusive(code);
7
+ }
8
+ };
9
+ };
10
+ export const makeKeyedMutex = () => {
11
+ const map = new Map();
12
+ return {
13
+ async mutex(key, task) {
14
+ let entry = map.get(key);
15
+ if (!entry) {
16
+ entry = { mutex: new AsyncMutex(), refCount: 0 };
17
+ map.set(key, entry);
18
+ }
19
+ entry.refCount++;
20
+ try {
21
+ return await entry.mutex.runExclusive(task);
22
+ }
23
+ finally {
24
+ entry.refCount--;
25
+ // only delete it if this is still the current entry
26
+ if (entry.refCount === 0 && map.get(key) === entry) {
27
+ map.delete(key);
28
+ }
29
+ }
30
+ }
31
+ };
32
+ };
33
+ //# sourceMappingURL=make-mutex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-mutex.js","sourceRoot":"","sources":["../../src/Utils/make-mutex.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAC/B,OAAO;QACH,KAAK,CAAC,IAAI;YACN,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,OAAO;QACH,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI;YACjB,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,CAAC;gBACD,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;oBACO,CAAC;gBACL,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,oDAAoD;gBACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;oBACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,80 @@
1
+ export const RetryReason: any;
2
+ export class MessageRetryManager {
3
+ constructor(logger: any, maxMsgRetryCount: any);
4
+ logger: any;
5
+ recentMessagesMap: any;
6
+ messageKeyIndex: Map<any, any>;
7
+ sessionRecreateHistory: any;
8
+ retryCounters: any;
9
+ baseKeys: any;
10
+ pendingPhoneRequests: {};
11
+ maxMsgRetryCount: any;
12
+ statistics: {
13
+ totalRetries: number;
14
+ successfulRetries: number;
15
+ failedRetries: number;
16
+ mediaRetries: number;
17
+ sessionRecreations: number;
18
+ phoneRequests: number;
19
+ };
20
+ /**
21
+ * Add a recent message to the cache for retry handling
22
+ */
23
+ addRecentMessage(to: any, id: any, message: any): void;
24
+ /**
25
+ * Get a recent message from the cache
26
+ */
27
+ getRecentMessage(to: any, id: any): any;
28
+ /**
29
+ * Check if a session should be recreated based on retry count, history, and error code.
30
+ * MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout.
31
+ */
32
+ shouldRecreateSession(jid: any, hasSession: any, errorCode: any): {
33
+ reason: string;
34
+ recreate: boolean;
35
+ };
36
+ /**
37
+ * Parse error code from retry receipt's retry node.
38
+ * Returns undefined if no error code is present.
39
+ */
40
+ parseRetryErrorCode(errorAttr: any): any;
41
+ /**
42
+ * Check if an error code indicates a MAC failure
43
+ */
44
+ isMacError(errorCode: any): boolean;
45
+ /**
46
+ * Increment retry counter for a message
47
+ */
48
+ incrementRetryCount(messageId: any): any;
49
+ /**
50
+ * Get retry count for a message
51
+ */
52
+ getRetryCount(messageId: any): any;
53
+ /**
54
+ * Check if message has exceeded maximum retry attempts
55
+ */
56
+ hasExceededMaxRetries(messageId: any): boolean;
57
+ /**
58
+ * Mark retry as successful
59
+ */
60
+ markRetrySuccess(messageId: any): void;
61
+ /**
62
+ * Mark retry as failed
63
+ */
64
+ markRetryFailed(messageId: any): void;
65
+ /**
66
+ * Schedule a phone request with delay
67
+ */
68
+ schedulePhoneRequest(messageId: any, callback: any, delay?: number): void;
69
+ /**
70
+ * Cancel pending phone request
71
+ */
72
+ cancelPendingPhoneRequest(messageId: any): void;
73
+ clear(): void;
74
+ saveBaseKey(addr: any, msgId: any, baseKey: any): void;
75
+ hasSameBaseKey(addr: any, msgId: any, baseKey: any): boolean;
76
+ deleteBaseKey(addr: any, msgId: any): void;
77
+ keyToString(key: any): string;
78
+ removeRecentMessage(messageId: any): void;
79
+ }
80
+ //# sourceMappingURL=message-retry-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-retry-manager.d.ts","sourceRoot":"","sources":["../../src/Utils/message-retry-manager.js"],"names":[],"mappings":"AAQA,8BAAuB;AAqBvB;IACI,gDAwCC;IAvCG,YAAoB;IACpB,uBAWE;IACF,+BAAgC;IAChC,4BAGE;IACF,mBAIE;IACF,cAIE;IACF,yBAA8B;IAC9B,sBAAyB;IACzB;;;;;;;MAOC;IAGL;;OAEG;IACH,uDAUC;IACD;;OAEG;IACH,wCAIC;IACD;;;OAGG;IACH;;;MAgCC;IACD;;;OAGG;IACH,yCAaC;IACD;;OAEG;IACH,oCAEC;IACD;;OAEG;IACH,yCAIC;IACD;;OAEG;IACH,mCAEC;IACD;;OAEG;IACH,+CAEC;IACD;;OAEG;IACH,uCAMC;IACD;;OAEG;IACH,sCAKC;IACD;;OAEG;IACH,0EASC;IACD;;OAEG;IACH,gDAOC;IACD,cAiBC;IACD,uDAEC;IACD,6DAUC;IACD,2CAEC;IACD,8BAEC;IACD,0CAOC;CACJ"}
@@ -0,0 +1,285 @@
1
+ import { LRUCache } from 'lru-cache';
2
+ /** Number of sent messages to cache in memory for handling retry receipts */
3
+ const RECENT_MESSAGES_SIZE = 1024;
4
+ /**
5
+ * Entry caps for the two caches below that only had a `ttl`.
6
+ *
7
+ * lru-cache's own docs: "Even if ttl tracking is enabled, it is strongly recommended to set a `max` to
8
+ * prevent unbounded growth of the cache." `recentMessagesMap` and `baseKeys` were capped at
9
+ * RECENT_MESSAGES_SIZE; `sessionRecreateHistory` and `retryCounters` were not, so their only bound was
10
+ * expiry — and one MessageRetryManager exists PER SOCKET (messages-send.js:87, on by default via
11
+ * `enableRecentMessageCache`). A host running a bot fleet holds one per bot.
12
+ *
13
+ * `retryCounters` is the worse of the two: it is keyed per message and sets `updateAgeOnGet`, so
14
+ * `hasExceededMaxRetries()` — which reads it — refreshes the TTL on every check. A message stuck in a
15
+ * retry loop therefore kept its entry alive indefinitely, which is the opposite of what a TTL backstop
16
+ * is for. The age semantics are left alone (dropping them would hand a long retry a fresh count and
17
+ * extra attempts past maxMsgRetryCount); the cap is what makes the growth bounded either way, and LRU
18
+ * eviction of the oldest counter has the same effect the TTL already intended.
19
+ */
20
+ const SESSION_HISTORY_SIZE = 1024;
21
+ const RETRY_COUNTER_SIZE = 4096;
22
+ const MESSAGE_KEY_SEPARATOR = '\u0000';
23
+ /** Timeout for session recreation - 1 hour */
24
+ const RECREATE_SESSION_TIMEOUT = 60 * 60 * 1000; // 1 hour in milliseconds
25
+ const PHONE_REQUEST_DELAY = 3000;
26
+ // Retry reason codes matching WhatsApp Web's Signal error codes.
27
+ export var RetryReason;
28
+ (function (RetryReason) {
29
+ RetryReason[RetryReason["UnknownError"] = 0] = "UnknownError";
30
+ RetryReason[RetryReason["SignalErrorNoSession"] = 1] = "SignalErrorNoSession";
31
+ RetryReason[RetryReason["SignalErrorInvalidKey"] = 2] = "SignalErrorInvalidKey";
32
+ RetryReason[RetryReason["SignalErrorInvalidKeyId"] = 3] = "SignalErrorInvalidKeyId";
33
+ /** MAC verification failed - most common cause of decryption failures */
34
+ RetryReason[RetryReason["SignalErrorInvalidMessage"] = 4] = "SignalErrorInvalidMessage";
35
+ RetryReason[RetryReason["SignalErrorInvalidSignature"] = 5] = "SignalErrorInvalidSignature";
36
+ RetryReason[RetryReason["SignalErrorFutureMessage"] = 6] = "SignalErrorFutureMessage";
37
+ /** Explicit MAC failure - session is definitely out of sync */
38
+ RetryReason[RetryReason["SignalErrorBadMac"] = 7] = "SignalErrorBadMac";
39
+ RetryReason[RetryReason["SignalErrorInvalidSession"] = 8] = "SignalErrorInvalidSession";
40
+ RetryReason[RetryReason["SignalErrorInvalidMsgKey"] = 9] = "SignalErrorInvalidMsgKey";
41
+ RetryReason[RetryReason["BadBroadcastEphemeralSetting"] = 10] = "BadBroadcastEphemeralSetting";
42
+ RetryReason[RetryReason["UnknownCompanionNoPrekey"] = 11] = "UnknownCompanionNoPrekey";
43
+ RetryReason[RetryReason["AdvFailure"] = 12] = "AdvFailure";
44
+ RetryReason[RetryReason["StatusRevokeDelay"] = 13] = "StatusRevokeDelay";
45
+ })(RetryReason || (RetryReason = {}));
46
+ /** Error codes that indicate a MAC failure and require immediate session recreation */
47
+ const MAC_ERROR_CODES = new Set([RetryReason.SignalErrorInvalidMessage, RetryReason.SignalErrorBadMac]);
48
+ export class MessageRetryManager {
49
+ constructor(logger, maxMsgRetryCount) {
50
+ this.logger = logger;
51
+ this.recentMessagesMap = new LRUCache({
52
+ max: RECENT_MESSAGES_SIZE,
53
+ ttl: 5 * 60 * 1000,
54
+ ttlAutopurge: true,
55
+ dispose: (_value, key) => {
56
+ const separatorIndex = key.lastIndexOf(MESSAGE_KEY_SEPARATOR);
57
+ if (separatorIndex > -1) {
58
+ const messageId = key.slice(separatorIndex + MESSAGE_KEY_SEPARATOR.length);
59
+ this.messageKeyIndex.delete(messageId);
60
+ }
61
+ }
62
+ });
63
+ this.messageKeyIndex = new Map();
64
+ this.sessionRecreateHistory = new LRUCache({
65
+ max: SESSION_HISTORY_SIZE,
66
+ ttl: RECREATE_SESSION_TIMEOUT * 2,
67
+ ttlAutopurge: true
68
+ });
69
+ this.retryCounters = new LRUCache({
70
+ max: RETRY_COUNTER_SIZE,
71
+ ttl: 15 * 60 * 1000,
72
+ ttlAutopurge: true,
73
+ updateAgeOnGet: true
74
+ }); // 15 minutes TTL
75
+ this.baseKeys = new LRUCache({
76
+ max: 1024,
77
+ ttl: 15 * 60 * 1000,
78
+ ttlAutopurge: true
79
+ });
80
+ this.pendingPhoneRequests = {};
81
+ this.maxMsgRetryCount = 5;
82
+ this.statistics = {
83
+ totalRetries: 0,
84
+ successfulRetries: 0,
85
+ failedRetries: 0,
86
+ mediaRetries: 0,
87
+ sessionRecreations: 0,
88
+ phoneRequests: 0
89
+ };
90
+ this.maxMsgRetryCount = maxMsgRetryCount;
91
+ }
92
+ /**
93
+ * Add a recent message to the cache for retry handling
94
+ */
95
+ addRecentMessage(to, id, message) {
96
+ const key = { to, id };
97
+ const keyStr = this.keyToString(key);
98
+ // Add new message
99
+ this.recentMessagesMap.set(keyStr, {
100
+ message,
101
+ timestamp: Date.now()
102
+ });
103
+ this.messageKeyIndex.set(id, keyStr);
104
+ this.logger.debug(`Added message to retry cache: ${to}/${id}`);
105
+ }
106
+ /**
107
+ * Get a recent message from the cache
108
+ */
109
+ getRecentMessage(to, id) {
110
+ const key = { to, id };
111
+ const keyStr = this.keyToString(key);
112
+ return this.recentMessagesMap.get(keyStr);
113
+ }
114
+ /**
115
+ * Check if a session should be recreated based on retry count, history, and error code.
116
+ * MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout.
117
+ */
118
+ shouldRecreateSession(jid, hasSession, errorCode) {
119
+ // If we don't have a session, always recreate
120
+ if (!hasSession) {
121
+ this.sessionRecreateHistory.set(jid, Date.now());
122
+ this.statistics.sessionRecreations++;
123
+ return {
124
+ reason: "we don't have a Signal session with them",
125
+ recreate: true
126
+ };
127
+ }
128
+ // IMMEDIATE recreation for MAC errors - session is definitely out of sync
129
+ if (errorCode !== undefined && MAC_ERROR_CODES.has(errorCode)) {
130
+ this.sessionRecreateHistory.set(jid, Date.now());
131
+ this.statistics.sessionRecreations++;
132
+ this.logger.warn({ jid, errorCode: RetryReason[errorCode] }, 'MAC error detected, forcing immediate session recreation');
133
+ return {
134
+ reason: `MAC error (code ${errorCode}: ${RetryReason[errorCode]}), immediate session recreation`,
135
+ recreate: true
136
+ };
137
+ }
138
+ const now = Date.now();
139
+ const prevTime = this.sessionRecreateHistory.get(jid);
140
+ // If no previous recreation or it's been more than an hour
141
+ if (!prevTime || now - prevTime > RECREATE_SESSION_TIMEOUT) {
142
+ this.sessionRecreateHistory.set(jid, now);
143
+ this.statistics.sessionRecreations++;
144
+ return {
145
+ reason: 'retry count > 1 and over an hour since last recreation',
146
+ recreate: true
147
+ };
148
+ }
149
+ return { reason: '', recreate: false };
150
+ }
151
+ /**
152
+ * Parse error code from retry receipt's retry node.
153
+ * Returns undefined if no error code is present.
154
+ */
155
+ parseRetryErrorCode(errorAttr) {
156
+ if (errorAttr === undefined || errorAttr === '') {
157
+ return undefined;
158
+ }
159
+ const code = parseInt(errorAttr, 10);
160
+ if (Number.isNaN(code)) {
161
+ return undefined;
162
+ }
163
+ // Validate it's a known RetryReason
164
+ if (code >= RetryReason.UnknownError && code <= RetryReason.StatusRevokeDelay) {
165
+ return code;
166
+ }
167
+ return RetryReason.UnknownError;
168
+ }
169
+ /**
170
+ * Check if an error code indicates a MAC failure
171
+ */
172
+ isMacError(errorCode) {
173
+ return errorCode !== undefined && MAC_ERROR_CODES.has(errorCode);
174
+ }
175
+ /**
176
+ * Increment retry counter for a message
177
+ */
178
+ incrementRetryCount(messageId) {
179
+ this.retryCounters.set(messageId, (this.retryCounters.get(messageId) || 0) + 1);
180
+ this.statistics.totalRetries++;
181
+ return this.retryCounters.get(messageId);
182
+ }
183
+ /**
184
+ * Get retry count for a message
185
+ */
186
+ getRetryCount(messageId) {
187
+ return this.retryCounters.get(messageId) || 0;
188
+ }
189
+ /**
190
+ * Check if message has exceeded maximum retry attempts
191
+ */
192
+ hasExceededMaxRetries(messageId) {
193
+ return this.getRetryCount(messageId) >= this.maxMsgRetryCount;
194
+ }
195
+ /**
196
+ * Mark retry as successful
197
+ */
198
+ markRetrySuccess(messageId) {
199
+ this.statistics.successfulRetries++;
200
+ // Clean up retry counter for successful message
201
+ this.retryCounters.delete(messageId);
202
+ this.cancelPendingPhoneRequest(messageId);
203
+ this.removeRecentMessage(messageId);
204
+ }
205
+ /**
206
+ * Mark retry as failed
207
+ */
208
+ markRetryFailed(messageId) {
209
+ this.statistics.failedRetries++;
210
+ this.retryCounters.delete(messageId);
211
+ this.cancelPendingPhoneRequest(messageId);
212
+ this.removeRecentMessage(messageId);
213
+ }
214
+ /**
215
+ * Schedule a phone request with delay
216
+ */
217
+ schedulePhoneRequest(messageId, callback, delay = PHONE_REQUEST_DELAY) {
218
+ // Cancel any existing request for this message
219
+ this.cancelPendingPhoneRequest(messageId);
220
+ this.pendingPhoneRequests[messageId] = setTimeout(() => {
221
+ delete this.pendingPhoneRequests[messageId];
222
+ this.statistics.phoneRequests++;
223
+ callback();
224
+ }, delay);
225
+ this.logger.debug(`Scheduled phone request for message ${messageId} with ${delay}ms delay`);
226
+ }
227
+ /**
228
+ * Cancel pending phone request
229
+ */
230
+ cancelPendingPhoneRequest(messageId) {
231
+ const timeout = this.pendingPhoneRequests[messageId];
232
+ if (timeout) {
233
+ clearTimeout(timeout);
234
+ delete this.pendingPhoneRequests[messageId];
235
+ this.logger.debug(`Cancelled pending phone request for message ${messageId}`);
236
+ }
237
+ }
238
+ clear() {
239
+ this.recentMessagesMap.clear();
240
+ this.messageKeyIndex.clear();
241
+ this.sessionRecreateHistory.clear();
242
+ this.retryCounters.clear();
243
+ this.baseKeys.clear();
244
+ for (const messageId of Object.keys(this.pendingPhoneRequests)) {
245
+ this.cancelPendingPhoneRequest(messageId);
246
+ }
247
+ this.statistics = {
248
+ totalRetries: 0,
249
+ successfulRetries: 0,
250
+ failedRetries: 0,
251
+ mediaRetries: 0,
252
+ sessionRecreations: 0,
253
+ phoneRequests: 0
254
+ };
255
+ }
256
+ saveBaseKey(addr, msgId, baseKey) {
257
+ this.baseKeys.set(`${addr}:${msgId}`, baseKey);
258
+ }
259
+ hasSameBaseKey(addr, msgId, baseKey) {
260
+ const stored = this.baseKeys.get(`${addr}:${msgId}`);
261
+ if (!stored || stored.length !== baseKey.length) {
262
+ return false;
263
+ }
264
+ for (let i = 0; i < stored.length; i++) {
265
+ if (stored[i] !== baseKey[i])
266
+ return false;
267
+ }
268
+ return true;
269
+ }
270
+ deleteBaseKey(addr, msgId) {
271
+ this.baseKeys.delete(`${addr}:${msgId}`);
272
+ }
273
+ keyToString(key) {
274
+ return `${key.to}${MESSAGE_KEY_SEPARATOR}${key.id}`;
275
+ }
276
+ removeRecentMessage(messageId) {
277
+ const keyStr = this.messageKeyIndex.get(messageId);
278
+ if (!keyStr) {
279
+ return;
280
+ }
281
+ this.recentMessagesMap.delete(keyStr);
282
+ this.messageKeyIndex.delete(messageId);
283
+ }
284
+ }
285
+ //# sourceMappingURL=message-retry-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-retry-manager.js","sourceRoot":"","sources":["../../src/Utils/message-retry-manager.js"],"names":[],"mappings":"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"}