@d0v3riz/baileys 6.7.20 → 6.7.21

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 (356) hide show
  1. package/WAProto/GenerateStatics.sh +3 -2
  2. package/WAProto/fix-imports.js +29 -0
  3. package/WAProto/index.js +4136 -4138
  4. package/lib/Defaults/index.d.ts +3 -2
  5. package/lib/Defaults/index.d.ts.map +1 -0
  6. package/lib/Defaults/index.js +36 -40
  7. package/lib/Defaults/index.js.map +1 -0
  8. package/lib/Signal/Group/ciphertext-message.d.ts +1 -0
  9. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  10. package/lib/Signal/Group/ciphertext-message.js +2 -5
  11. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  12. package/lib/Signal/Group/group-session-builder.d.ts +4 -3
  13. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  14. package/lib/Signal/Group/group-session-builder.js +7 -41
  15. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  16. package/lib/Signal/Group/group_cipher.d.ts +3 -2
  17. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  18. package/lib/Signal/Group/group_cipher.js +14 -16
  19. package/lib/Signal/Group/group_cipher.js.map +1 -0
  20. package/lib/Signal/Group/index.d.ts +12 -11
  21. package/lib/Signal/Group/index.d.ts.map +1 -0
  22. package/lib/Signal/Group/index.js +12 -57
  23. package/lib/Signal/Group/index.js.map +1 -0
  24. package/lib/Signal/Group/keyhelper.d.ts +2 -1
  25. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  26. package/lib/Signal/Group/keyhelper.js +8 -44
  27. package/lib/Signal/Group/keyhelper.js.map +1 -0
  28. package/lib/Signal/Group/queue-job.d.ts +2 -0
  29. package/lib/Signal/Group/queue-job.d.ts.map +1 -0
  30. package/lib/Signal/Group/queue-job.js +5 -5
  31. package/lib/Signal/Group/queue-job.js.map +1 -0
  32. package/lib/Signal/Group/sender-chain-key.d.ts +2 -1
  33. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  34. package/lib/Signal/Group/sender-chain-key.js +7 -9
  35. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  36. package/lib/Signal/Group/sender-key-distribution-message.d.ts +2 -1
  37. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  38. package/lib/Signal/Group/sender-key-distribution-message.js +6 -9
  39. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  40. package/lib/Signal/Group/sender-key-message.d.ts +2 -1
  41. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  42. package/lib/Signal/Group/sender-key-message.js +10 -12
  43. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  44. package/lib/Signal/Group/sender-key-name.d.ts +1 -0
  45. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  46. package/lib/Signal/Group/sender-key-name.js +2 -5
  47. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  48. package/lib/Signal/Group/sender-key-record.d.ts +2 -1
  49. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  50. package/lib/Signal/Group/sender-key-record.js +9 -12
  51. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  52. package/lib/Signal/Group/sender-key-state.d.ts +3 -2
  53. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  54. package/lib/Signal/Group/sender-key-state.js +6 -9
  55. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  56. package/lib/Signal/Group/sender-message-key.d.ts +1 -0
  57. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  58. package/lib/Signal/Group/sender-message-key.js +5 -7
  59. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  60. package/lib/Signal/libsignal.d.ts +3 -2
  61. package/lib/Signal/libsignal.d.ts.map +1 -0
  62. package/lib/Signal/libsignal.js +22 -55
  63. package/lib/Signal/libsignal.js.map +1 -0
  64. package/lib/Socket/Client/index.d.ts +3 -2
  65. package/lib/Socket/Client/index.d.ts.map +1 -0
  66. package/lib/Socket/Client/index.js +3 -18
  67. package/lib/Socket/Client/index.js.map +1 -0
  68. package/lib/Socket/Client/types.d.ts +2 -1
  69. package/lib/Socket/Client/types.d.ts.map +1 -0
  70. package/lib/Socket/Client/types.js +4 -6
  71. package/lib/Socket/Client/types.js.map +1 -0
  72. package/lib/Socket/Client/websocket.d.ts +2 -1
  73. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  74. package/lib/Socket/Client/websocket.js +14 -26
  75. package/lib/Socket/Client/websocket.js.map +1 -0
  76. package/lib/Socket/business.d.ts +89 -59
  77. package/lib/Socket/business.d.ts.map +1 -0
  78. package/lib/Socket/business.js +32 -37
  79. package/lib/Socket/business.js.map +1 -0
  80. package/lib/Socket/chats.d.ts +28 -21
  81. package/lib/Socket/chats.d.ts.map +1 -0
  82. package/lib/Socket/chats.js +195 -142
  83. package/lib/Socket/chats.js.map +1 -0
  84. package/lib/Socket/communities.d.ts +219 -0
  85. package/lib/Socket/communities.d.ts.map +1 -0
  86. package/lib/Socket/communities.js +351 -0
  87. package/lib/Socket/communities.js.map +1 -0
  88. package/lib/Socket/groups.d.ts +43 -35
  89. package/lib/Socket/groups.d.ts.map +1 -0
  90. package/lib/Socket/groups.js +57 -63
  91. package/lib/Socket/groups.js.map +1 -0
  92. package/lib/Socket/index.d.ts +125 -65
  93. package/lib/Socket/index.d.ts.map +1 -0
  94. package/lib/Socket/index.js +16 -9
  95. package/lib/Socket/index.js.map +1 -0
  96. package/lib/Socket/messages-recv.d.ts +75 -45
  97. package/lib/Socket/messages-recv.d.ts.map +1 -0
  98. package/lib/Socket/messages-recv.js +303 -156
  99. package/lib/Socket/messages-recv.js.map +1 -0
  100. package/lib/Socket/messages-send.d.ts +72 -42
  101. package/lib/Socket/messages-send.d.ts.map +1 -0
  102. package/lib/Socket/messages-send.js +100 -83
  103. package/lib/Socket/messages-send.js.map +1 -0
  104. package/lib/Socket/mex.d.ts +3 -0
  105. package/lib/Socket/mex.d.ts.map +1 -0
  106. package/lib/Socket/mex.js +42 -0
  107. package/lib/Socket/mex.js.map +1 -0
  108. package/lib/Socket/newsletter.d.ts +143 -0
  109. package/lib/Socket/newsletter.d.ts.map +1 -0
  110. package/lib/Socket/newsletter.js +179 -0
  111. package/lib/Socket/newsletter.js.map +1 -0
  112. package/lib/Socket/socket.d.ts +13 -12
  113. package/lib/Socket/socket.d.ts.map +1 -0
  114. package/lib/Socket/socket.js +135 -116
  115. package/lib/Socket/socket.js.map +1 -0
  116. package/lib/Socket/usync.d.ts +15 -14
  117. package/lib/Socket/usync.d.ts.map +1 -0
  118. package/lib/Socket/usync.js +9 -11
  119. package/lib/Socket/usync.js.map +1 -0
  120. package/lib/Types/Auth.d.ts +4 -3
  121. package/lib/Types/Auth.d.ts.map +1 -0
  122. package/lib/Types/Auth.js +2 -2
  123. package/lib/Types/Auth.js.map +1 -0
  124. package/lib/Types/Call.d.ts +1 -0
  125. package/lib/Types/Call.d.ts.map +1 -0
  126. package/lib/Types/Call.js +2 -2
  127. package/lib/Types/Call.js.map +1 -0
  128. package/lib/Types/Chat.d.ts +13 -7
  129. package/lib/Types/Chat.d.ts.map +1 -0
  130. package/lib/Types/Chat.js +2 -4
  131. package/lib/Types/Chat.js.map +1 -0
  132. package/lib/Types/Contact.d.ts +1 -0
  133. package/lib/Types/Contact.d.ts.map +1 -0
  134. package/lib/Types/Contact.js +2 -2
  135. package/lib/Types/Contact.js.map +1 -0
  136. package/lib/Types/Events.d.ts +37 -10
  137. package/lib/Types/Events.d.ts.map +1 -0
  138. package/lib/Types/Events.js +2 -2
  139. package/lib/Types/Events.js.map +1 -0
  140. package/lib/Types/GroupMetadata.d.ts +3 -1
  141. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  142. package/lib/Types/GroupMetadata.js +2 -2
  143. package/lib/Types/GroupMetadata.js.map +1 -0
  144. package/lib/Types/Label.d.ts +1 -0
  145. package/lib/Types/Label.d.ts.map +1 -0
  146. package/lib/Types/Label.js +3 -5
  147. package/lib/Types/Label.js.map +1 -0
  148. package/lib/Types/LabelAssociation.d.ts +1 -0
  149. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  150. package/lib/Types/LabelAssociation.js +3 -5
  151. package/lib/Types/LabelAssociation.js.map +1 -0
  152. package/lib/Types/Message.d.ts +15 -8
  153. package/lib/Types/Message.d.ts.map +1 -0
  154. package/lib/Types/Message.js +7 -7
  155. package/lib/Types/Message.js.map +1 -0
  156. package/lib/Types/Newsletter.d.ts +135 -0
  157. package/lib/Types/Newsletter.d.ts.map +1 -0
  158. package/lib/Types/Newsletter.js +31 -0
  159. package/lib/Types/Newsletter.js.map +1 -0
  160. package/lib/Types/Product.d.ts +2 -1
  161. package/lib/Types/Product.d.ts.map +1 -0
  162. package/lib/Types/Product.js +2 -2
  163. package/lib/Types/Product.js.map +1 -0
  164. package/lib/Types/Signal.d.ts +2 -1
  165. package/lib/Types/Signal.d.ts.map +1 -0
  166. package/lib/Types/Signal.js +2 -2
  167. package/lib/Types/Signal.js.map +1 -0
  168. package/lib/Types/Socket.d.ts +8 -7
  169. package/lib/Types/Socket.d.ts.map +1 -0
  170. package/lib/Types/Socket.js +3 -2
  171. package/lib/Types/Socket.js.map +1 -0
  172. package/lib/Types/State.d.ts +14 -2
  173. package/lib/Types/State.d.ts.map +1 -0
  174. package/lib/Types/State.js +13 -2
  175. package/lib/Types/State.js.map +1 -0
  176. package/lib/Types/USync.d.ts +3 -2
  177. package/lib/Types/USync.d.ts.map +1 -0
  178. package/lib/Types/USync.js +2 -2
  179. package/lib/Types/USync.js.map +1 -0
  180. package/lib/Types/index.d.ts +15 -13
  181. package/lib/Types/index.d.ts.map +1 -0
  182. package/lib/Types/index.js +15 -30
  183. package/lib/Types/index.js.map +1 -0
  184. package/lib/Utils/auth-utils.d.ts +3 -2
  185. package/lib/Utils/auth-utils.d.ts.map +1 -0
  186. package/lib/Utils/auth-utils.js +24 -33
  187. package/lib/Utils/auth-utils.js.map +1 -0
  188. package/lib/Utils/baileys-event-stream.d.ts +2 -1
  189. package/lib/Utils/baileys-event-stream.d.ts.map +1 -0
  190. package/lib/Utils/baileys-event-stream.js +15 -22
  191. package/lib/Utils/baileys-event-stream.js.map +1 -0
  192. package/lib/Utils/business.d.ts +3 -2
  193. package/lib/Utils/business.d.ts.map +1 -0
  194. package/lib/Utils/business.js +61 -70
  195. package/lib/Utils/business.js.map +1 -0
  196. package/lib/Utils/chat-utils.d.ts +8 -7
  197. package/lib/Utils/chat-utils.d.ts.map +1 -0
  198. package/lib/Utils/chat-utils.js +144 -138
  199. package/lib/Utils/chat-utils.js.map +1 -0
  200. package/lib/Utils/crypto.d.ts +2 -1
  201. package/lib/Utils/crypto.d.ts.map +1 -0
  202. package/lib/Utils/crypto.js +37 -86
  203. package/lib/Utils/crypto.js.map +1 -0
  204. package/lib/Utils/decode-wa-message.d.ts +7 -7
  205. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  206. package/lib/Utils/decode-wa-message.js +42 -44
  207. package/lib/Utils/decode-wa-message.js.map +1 -0
  208. package/lib/Utils/event-buffer.d.ts +4 -4
  209. package/lib/Utils/event-buffer.d.ts.map +1 -0
  210. package/lib/Utils/event-buffer.js +37 -50
  211. package/lib/Utils/event-buffer.js.map +1 -0
  212. package/lib/Utils/generics.d.ts +10 -8
  213. package/lib/Utils/generics.d.ts.map +1 -0
  214. package/lib/Utils/generics.js +88 -111
  215. package/lib/Utils/generics.js.map +1 -0
  216. package/lib/Utils/history.d.ts +4 -3
  217. package/lib/Utils/history.d.ts.map +1 -0
  218. package/lib/Utils/history.js +32 -46
  219. package/lib/Utils/history.js.map +1 -0
  220. package/lib/Utils/index.d.ts +18 -17
  221. package/lib/Utils/index.d.ts.map +1 -0
  222. package/lib/Utils/index.js +18 -33
  223. package/lib/Utils/index.js.map +1 -0
  224. package/lib/Utils/link-preview.d.ts +4 -3
  225. package/lib/Utils/link-preview.d.ts.map +1 -0
  226. package/lib/Utils/link-preview.js +10 -47
  227. package/lib/Utils/link-preview.js.map +1 -0
  228. package/lib/Utils/logger.d.ts +8 -6
  229. package/lib/Utils/logger.d.ts.map +1 -0
  230. package/lib/Utils/logger.js +3 -7
  231. package/lib/Utils/logger.js.map +1 -0
  232. package/lib/Utils/lt-hash.d.ts +9 -8
  233. package/lib/Utils/lt-hash.d.ts.map +1 -0
  234. package/lib/Utils/lt-hash.js +23 -26
  235. package/lib/Utils/lt-hash.js.map +1 -0
  236. package/lib/Utils/make-mutex.d.ts +1 -0
  237. package/lib/Utils/make-mutex.d.ts.map +1 -0
  238. package/lib/Utils/make-mutex.js +5 -9
  239. package/lib/Utils/make-mutex.js.map +1 -0
  240. package/lib/Utils/messages-media.d.ts +20 -11
  241. package/lib/Utils/messages-media.d.ts.map +1 -0
  242. package/lib/Utils/messages-media.js +191 -214
  243. package/lib/Utils/messages-media.js.map +1 -0
  244. package/lib/Utils/messages.d.ts +8 -7
  245. package/lib/Utils/messages.d.ts.map +1 -0
  246. package/lib/Utils/messages.js +218 -197
  247. package/lib/Utils/messages.js.map +1 -0
  248. package/lib/Utils/noise-handler.d.ts +5 -4
  249. package/lib/Utils/noise-handler.d.ts.map +1 -0
  250. package/lib/Utils/noise-handler.js +22 -26
  251. package/lib/Utils/noise-handler.js.map +1 -0
  252. package/lib/Utils/process-message.d.ts +5 -4
  253. package/lib/Utils/process-message.d.ts.map +1 -0
  254. package/lib/Utils/process-message.js +95 -104
  255. package/lib/Utils/process-message.js.map +1 -0
  256. package/lib/Utils/signal.d.ts +5 -4
  257. package/lib/Utils/signal.d.ts.map +1 -0
  258. package/lib/Utils/signal.js +47 -52
  259. package/lib/Utils/signal.js.map +1 -0
  260. package/lib/Utils/use-multi-file-auth-state.d.ts +2 -1
  261. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  262. package/lib/Utils/use-multi-file-auth-state.js +23 -26
  263. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  264. package/lib/Utils/validate-connection.d.ts +4 -3
  265. package/lib/Utils/validate-connection.d.ts.map +1 -0
  266. package/lib/Utils/validate-connection.js +52 -58
  267. package/lib/Utils/validate-connection.js.map +1 -0
  268. package/lib/WABinary/constants.d.ts +1 -0
  269. package/lib/WABinary/constants.d.ts.map +1 -0
  270. package/lib/WABinary/constants.js +9 -11
  271. package/lib/WABinary/constants.js.map +1 -0
  272. package/lib/WABinary/decode.d.ts +2 -1
  273. package/lib/WABinary/decode.d.ts.map +1 -0
  274. package/lib/WABinary/decode.js +13 -51
  275. package/lib/WABinary/decode.js.map +1 -0
  276. package/lib/WABinary/encode.d.ts +2 -1
  277. package/lib/WABinary/encode.d.ts.map +1 -0
  278. package/lib/WABinary/encode.js +5 -41
  279. package/lib/WABinary/encode.js.map +1 -0
  280. package/lib/WABinary/generic-utils.d.ts +4 -3
  281. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  282. package/lib/WABinary/generic-utils.js +30 -38
  283. package/lib/WABinary/generic-utils.js.map +1 -0
  284. package/lib/WABinary/index.d.ts +6 -5
  285. package/lib/WABinary/index.d.ts.map +1 -0
  286. package/lib/WABinary/index.js +6 -21
  287. package/lib/WABinary/index.js.map +1 -0
  288. package/lib/WABinary/jid-utils.d.ts +1 -0
  289. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  290. package/lib/WABinary/jid-utils.js +21 -35
  291. package/lib/WABinary/jid-utils.js.map +1 -0
  292. package/lib/WABinary/types.d.ts +2 -1
  293. package/lib/WABinary/types.d.ts.map +1 -0
  294. package/lib/WABinary/types.js +2 -2
  295. package/lib/WABinary/types.js.map +1 -0
  296. package/lib/WAM/BinaryInfo.d.ts +2 -1
  297. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  298. package/lib/WAM/BinaryInfo.js +2 -5
  299. package/lib/WAM/BinaryInfo.js.map +1 -0
  300. package/lib/WAM/constants.d.ts +1 -0
  301. package/lib/WAM/constants.d.ts.map +1 -0
  302. package/lib/WAM/constants.js +4 -6
  303. package/lib/WAM/constants.js.map +1 -0
  304. package/lib/WAM/encode.d.ts +2 -1
  305. package/lib/WAM/encode.d.ts.map +1 -0
  306. package/lib/WAM/encode.js +12 -14
  307. package/lib/WAM/encode.js.map +1 -0
  308. package/lib/WAM/index.d.ts +4 -3
  309. package/lib/WAM/index.d.ts.map +1 -0
  310. package/lib/WAM/index.js +4 -19
  311. package/lib/WAM/index.js.map +1 -0
  312. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +4 -3
  313. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  314. package/lib/WAUSync/Protocols/USyncContactProtocol.js +6 -9
  315. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  316. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +3 -2
  317. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  318. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +9 -12
  319. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  320. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +3 -2
  321. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  322. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +7 -10
  323. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  324. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +3 -2
  325. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  326. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +7 -11
  327. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  328. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +4 -3
  329. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  330. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +19 -21
  331. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  332. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -2
  333. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  334. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +2 -5
  335. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  336. package/lib/WAUSync/Protocols/index.d.ts +5 -4
  337. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  338. package/lib/WAUSync/Protocols/index.js +5 -20
  339. package/lib/WAUSync/Protocols/index.js.map +1 -0
  340. package/lib/WAUSync/USyncQuery.d.ts +4 -3
  341. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  342. package/lib/WAUSync/USyncQuery.js +18 -20
  343. package/lib/WAUSync/USyncQuery.js.map +1 -0
  344. package/lib/WAUSync/USyncUser.d.ts +6 -5
  345. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  346. package/lib/WAUSync/USyncUser.js +2 -5
  347. package/lib/WAUSync/USyncUser.js.map +1 -0
  348. package/lib/WAUSync/index.d.ts +4 -3
  349. package/lib/WAUSync/index.d.ts.map +1 -0
  350. package/lib/WAUSync/index.js +4 -19
  351. package/lib/WAUSync/index.js.map +1 -0
  352. package/lib/index.d.ts +9 -8
  353. package/lib/index.d.ts.map +1 -0
  354. package/lib/index.js +11 -30
  355. package/lib/index.js.map +1 -0
  356. package/package.json +28 -28
@@ -1,39 +1,34 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.makeMessagesRecvSocket = void 0;
7
- const node_cache_1 = __importDefault(require("@cacheable/node-cache"));
8
- const boom_1 = require("@hapi/boom");
9
- const crypto_1 = require("crypto");
10
- const WAProto_1 = require("../../WAProto");
11
- const Defaults_1 = require("../Defaults");
12
- const Types_1 = require("../Types");
13
- const Utils_1 = require("../Utils");
14
- const make_mutex_1 = require("../Utils/make-mutex");
15
- const WABinary_1 = require("../WABinary");
16
- const groups_1 = require("./groups");
17
- const messages_send_1 = require("./messages-send");
18
- const makeMessagesRecvSocket = (config) => {
1
+ import NodeCache from '@cacheable/node-cache';
2
+ import { Boom } from '@hapi/boom';
3
+ import { randomBytes } from 'crypto';
4
+ import Long from 'long';
5
+ import { proto } from '../../WAProto/index.js';
6
+ import { DEFAULT_CACHE_TTLS, KEY_BUNDLE_TYPE, MIN_PREKEY_COUNT } from '../Defaults/index.js';
7
+ import { WAMessageStatus, WAMessageStubType } from '../Types/index.js';
8
+ import { aesDecryptCTR, aesEncryptGCM, cleanMessage, Curve, decodeMediaRetryNode, decodeMessageNode, decryptMessageNode, delay, derivePairingCodeKey, encodeBigEndian, encodeSignedDeviceIdentity, getCallStatusFromNode, getHistoryMsg, getNextPreKeys, getStatusFromReceiptType, hkdf, MISSING_KEYS_ERROR_TEXT, NACK_REASONS, NO_MESSAGE_FOUND_ERROR_TEXT, unixTimestampSeconds, xmppPreKey, xmppSignedPreKey } from '../Utils/index.js';
9
+ import { makeMutex } from '../Utils/make-mutex.js';
10
+ import { areJidsSameUser, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildBuffer, getBinaryNodeChildren, getBinaryNodeChildString, isJidGroup, isJidStatusBroadcast, isJidUser, isLidUser, jidDecode, jidNormalizedUser, S_WHATSAPP_NET } from '../WABinary/index.js';
11
+ import { extractGroupMetadata } from './groups.js';
12
+ import { makeMessagesSocket } from './messages-send.js';
13
+ export const makeMessagesRecvSocket = (config) => {
19
14
  const { logger, retryRequestDelayMs, maxMsgRetryCount, getMessage, shouldIgnoreJid } = config;
20
- const sock = (0, messages_send_1.makeMessagesSocket)(config);
15
+ const sock = makeMessagesSocket(config);
21
16
  const { ev, authState, ws, processingMutex, signalRepository, query, upsertMessage, resyncAppState, onUnexpectedError, assertSessions, sendNode, relayMessage, sendReceipt, uploadPreKeys, sendPeerDataOperationMessage } = sock;
22
17
  /** this mutex ensures that each retryRequest will wait for the previous one to finish */
23
- const retryMutex = (0, make_mutex_1.makeMutex)();
18
+ const retryMutex = makeMutex();
24
19
  const msgRetryCache = config.msgRetryCounterCache ||
25
- new node_cache_1.default({
26
- stdTTL: Defaults_1.DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour
20
+ new NodeCache({
21
+ stdTTL: DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour
27
22
  useClones: false
28
23
  });
29
24
  const callOfferCache = config.callOfferCache ||
30
- new node_cache_1.default({
31
- stdTTL: Defaults_1.DEFAULT_CACHE_TTLS.CALL_OFFER, // 5 mins
25
+ new NodeCache({
26
+ stdTTL: DEFAULT_CACHE_TTLS.CALL_OFFER, // 5 mins
32
27
  useClones: false
33
28
  });
34
29
  const placeholderResendCache = config.placeholderResendCache ||
35
- new node_cache_1.default({
36
- stdTTL: Defaults_1.DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour
30
+ new NodeCache({
31
+ stdTTL: DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour
37
32
  useClones: false
38
33
  });
39
34
  let sendActiveReceipts = false;
@@ -56,10 +51,10 @@ const makeMessagesRecvSocket = (config) => {
56
51
  stanza.attrs.recipient = attrs.recipient;
57
52
  }
58
53
  if (!!attrs.type &&
59
- (tag !== 'message' || (0, WABinary_1.getBinaryNodeChild)({ tag, attrs, content }, 'unavailable') || errorCode !== 0)) {
54
+ (tag !== 'message' || getBinaryNodeChild({ tag, attrs, content }, 'unavailable') || errorCode !== 0)) {
60
55
  stanza.attrs.type = attrs.type;
61
56
  }
62
- if (tag === 'message' && (0, WABinary_1.getBinaryNodeChild)({ tag, attrs, content }, 'unavailable')) {
57
+ if (tag === 'message' && getBinaryNodeChild({ tag, attrs, content }, 'unavailable')) {
63
58
  stanza.attrs.from = authState.creds.me.id;
64
59
  }
65
60
  logger.debug({ recv: { tag, attrs }, sent: stanza.attrs }, 'sent ack');
@@ -87,10 +82,10 @@ const makeMessagesRecvSocket = (config) => {
87
82
  await query(stanza);
88
83
  };
89
84
  const sendRetryRequest = async (node, forceIncludeKeys = false) => {
90
- const { fullMessage } = (0, Utils_1.decodeMessageNode)(node, authState.creds.me.id, authState.creds.me.lid || '');
85
+ const { fullMessage } = decodeMessageNode(node, authState.creds.me.id, authState.creds.me.lid || '');
91
86
  const { key: msgKey } = fullMessage;
92
87
  const msgId = msgKey.id;
93
- const key = `${msgId}:${msgKey === null || msgKey === void 0 ? void 0 : msgKey.participant}`;
88
+ const key = `${msgId}:${msgKey?.participant}`;
94
89
  let retryCount = msgRetryCache.get(key) || 0;
95
90
  if (retryCount >= maxMsgRetryCount) {
96
91
  logger.debug({ retryCount, msgId }, 'reached retry limit, clearing');
@@ -105,7 +100,7 @@ const makeMessagesRecvSocket = (config) => {
105
100
  const msgId = await requestPlaceholderResend(msgKey);
106
101
  logger.debug(`sendRetryRequest: requested placeholder resend for message ${msgId}`);
107
102
  }
108
- const deviceIdentity = (0, Utils_1.encodeSignedDeviceIdentity)(account, true);
103
+ const deviceIdentity = encodeSignedDeviceIdentity(account, true);
109
104
  await authState.keys.transaction(async () => {
110
105
  const receipt = {
111
106
  tag: 'receipt',
@@ -127,7 +122,7 @@ const makeMessagesRecvSocket = (config) => {
127
122
  {
128
123
  tag: 'registration',
129
124
  attrs: {},
130
- content: (0, Utils_1.encodeBigEndian)(authState.creds.registrationId)
125
+ content: encodeBigEndian(authState.creds.registrationId)
131
126
  }
132
127
  ]
133
128
  };
@@ -138,7 +133,7 @@ const makeMessagesRecvSocket = (config) => {
138
133
  receipt.attrs.participant = node.attrs.participant;
139
134
  }
140
135
  if (retryCount > 1 || forceIncludeKeys) {
141
- const { update, preKeys } = await (0, Utils_1.getNextPreKeys)(authState, 1);
136
+ const { update, preKeys } = await getNextPreKeys(authState, 1);
142
137
  const [keyId] = Object.keys(preKeys);
143
138
  const key = preKeys[+keyId];
144
139
  const content = receipt.content;
@@ -146,10 +141,10 @@ const makeMessagesRecvSocket = (config) => {
146
141
  tag: 'keys',
147
142
  attrs: {},
148
143
  content: [
149
- { tag: 'type', attrs: {}, content: Buffer.from(Defaults_1.KEY_BUNDLE_TYPE) },
144
+ { tag: 'type', attrs: {}, content: Buffer.from(KEY_BUNDLE_TYPE) },
150
145
  { tag: 'identity', attrs: {}, content: identityKey.public },
151
- (0, Utils_1.xmppPreKey)(key, +keyId),
152
- (0, Utils_1.xmppSignedPreKey)(signedPreKey),
146
+ xmppPreKey(key, +keyId),
147
+ xmppSignedPreKey(signedPreKey),
153
148
  { tag: 'device-identity', attrs: {}, content: deviceIdentity }
154
149
  ]
155
150
  });
@@ -161,17 +156,17 @@ const makeMessagesRecvSocket = (config) => {
161
156
  };
162
157
  const handleEncryptNotification = async (node) => {
163
158
  const from = node.attrs.from;
164
- if (from === WABinary_1.S_WHATSAPP_NET) {
165
- const countChild = (0, WABinary_1.getBinaryNodeChild)(node, 'count');
159
+ if (from === S_WHATSAPP_NET) {
160
+ const countChild = getBinaryNodeChild(node, 'count');
166
161
  const count = +countChild.attrs.value;
167
- const shouldUploadMorePreKeys = count < Defaults_1.MIN_PREKEY_COUNT;
162
+ const shouldUploadMorePreKeys = count < MIN_PREKEY_COUNT;
168
163
  logger.debug({ count, shouldUploadMorePreKeys }, 'recv pre-key count');
169
164
  if (shouldUploadMorePreKeys) {
170
165
  await uploadPreKeys();
171
166
  }
172
167
  }
173
168
  else {
174
- const identityNode = (0, WABinary_1.getBinaryNodeChild)(node, 'identity');
169
+ const identityNode = getBinaryNodeChild(node, 'identity');
175
170
  if (identityNode) {
176
171
  logger.info({ jid: from }, 'identity changed');
177
172
  // not handling right now
@@ -183,12 +178,11 @@ const makeMessagesRecvSocket = (config) => {
183
178
  }
184
179
  };
185
180
  const handleGroupNotification = (participant, child, msg) => {
186
- var _a, _b, _c, _d;
187
- const participantJid = ((_b = (_a = (0, WABinary_1.getBinaryNodeChild)(child, 'participant')) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b.jid) || participant;
188
- switch (child === null || child === void 0 ? void 0 : child.tag) {
181
+ const participantJid = getBinaryNodeChild(child, 'participant')?.attrs?.jid || participant;
182
+ switch (child?.tag) {
189
183
  case 'create':
190
- const metadata = (0, groups_1.extractGroupMetadata)(child);
191
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_CREATE;
184
+ const metadata = extractGroupMetadata(child);
185
+ msg.messageStubType = WAMessageStubType.GROUP_CREATE;
192
186
  msg.messageStubParameters = [metadata.subject];
193
187
  msg.key = { participant: metadata.owner };
194
188
  ev.emit('chats.upsert', [
@@ -209,15 +203,15 @@ const makeMessagesRecvSocket = (config) => {
209
203
  case 'not_ephemeral':
210
204
  msg.message = {
211
205
  protocolMessage: {
212
- type: WAProto_1.proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
206
+ type: proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
213
207
  ephemeralExpiration: +(child.attrs.expiration || 0)
214
208
  }
215
209
  };
216
210
  break;
217
211
  case 'modify':
218
- const oldNumber = (0, WABinary_1.getBinaryNodeChildren)(child, 'participant').map(p => p.attrs.jid);
212
+ const oldNumber = getBinaryNodeChildren(child, 'participant').map(p => p.attrs.jid);
219
213
  msg.messageStubParameters = oldNumber || [];
220
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER;
214
+ msg.messageStubType = WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER;
221
215
  break;
222
216
  case 'promote':
223
217
  case 'demote':
@@ -225,74 +219,73 @@ const makeMessagesRecvSocket = (config) => {
225
219
  case 'add':
226
220
  case 'leave':
227
221
  const stubType = `GROUP_PARTICIPANT_${child.tag.toUpperCase()}`;
228
- msg.messageStubType = Types_1.WAMessageStubType[stubType];
229
- const participants = (0, WABinary_1.getBinaryNodeChildren)(child, 'participant').map(p => p.attrs.jid);
222
+ msg.messageStubType = WAMessageStubType[stubType];
223
+ const participants = getBinaryNodeChildren(child, 'participant').map(p => p.attrs.jid);
230
224
  if (participants.length === 1 &&
231
225
  // if recv. "remove" message and sender removed themselves
232
226
  // mark as left
233
- (0, WABinary_1.areJidsSameUser)(participants[0], participant) &&
227
+ areJidsSameUser(participants[0], participant) &&
234
228
  child.tag === 'remove') {
235
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_PARTICIPANT_LEAVE;
229
+ msg.messageStubType = WAMessageStubType.GROUP_PARTICIPANT_LEAVE;
236
230
  }
237
231
  msg.messageStubParameters = participants;
238
232
  break;
239
233
  case 'subject':
240
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_CHANGE_SUBJECT;
234
+ msg.messageStubType = WAMessageStubType.GROUP_CHANGE_SUBJECT;
241
235
  msg.messageStubParameters = [child.attrs.subject];
242
236
  break;
243
237
  case 'description':
244
- const description = (_d = (_c = (0, WABinary_1.getBinaryNodeChild)(child, 'body')) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d.toString();
245
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_CHANGE_DESCRIPTION;
238
+ const description = getBinaryNodeChild(child, 'body')?.content?.toString();
239
+ msg.messageStubType = WAMessageStubType.GROUP_CHANGE_DESCRIPTION;
246
240
  msg.messageStubParameters = description ? [description] : undefined;
247
241
  break;
248
242
  case 'announcement':
249
243
  case 'not_announcement':
250
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_CHANGE_ANNOUNCE;
244
+ msg.messageStubType = WAMessageStubType.GROUP_CHANGE_ANNOUNCE;
251
245
  msg.messageStubParameters = [child.tag === 'announcement' ? 'on' : 'off'];
252
246
  break;
253
247
  case 'locked':
254
248
  case 'unlocked':
255
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_CHANGE_RESTRICT;
249
+ msg.messageStubType = WAMessageStubType.GROUP_CHANGE_RESTRICT;
256
250
  msg.messageStubParameters = [child.tag === 'locked' ? 'on' : 'off'];
257
251
  break;
258
252
  case 'invite':
259
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_CHANGE_INVITE_LINK;
253
+ msg.messageStubType = WAMessageStubType.GROUP_CHANGE_INVITE_LINK;
260
254
  msg.messageStubParameters = [child.attrs.code];
261
255
  break;
262
256
  case 'member_add_mode':
263
257
  const addMode = child.content;
264
258
  if (addMode) {
265
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_MEMBER_ADD_MODE;
259
+ msg.messageStubType = WAMessageStubType.GROUP_MEMBER_ADD_MODE;
266
260
  msg.messageStubParameters = [addMode.toString()];
267
261
  }
268
262
  break;
269
263
  case 'membership_approval_mode':
270
- const approvalMode = (0, WABinary_1.getBinaryNodeChild)(child, 'group_join');
264
+ const approvalMode = getBinaryNodeChild(child, 'group_join');
271
265
  if (approvalMode) {
272
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE;
266
+ msg.messageStubType = WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE;
273
267
  msg.messageStubParameters = [approvalMode.attrs.state];
274
268
  }
275
269
  break;
276
270
  case 'created_membership_requests':
277
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD;
271
+ msg.messageStubType = WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD;
278
272
  msg.messageStubParameters = [participantJid, 'created', child.attrs.request_method];
279
273
  break;
280
274
  case 'revoked_membership_requests':
281
- const isDenied = (0, WABinary_1.areJidsSameUser)(participantJid, participant);
282
- msg.messageStubType = Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD;
275
+ const isDenied = areJidsSameUser(participantJid, participant);
276
+ msg.messageStubType = WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD;
283
277
  msg.messageStubParameters = [participantJid, isDenied ? 'revoked' : 'rejected'];
284
278
  break;
285
279
  }
286
280
  };
287
281
  const processNotification = async (node) => {
288
- var _a, _b, _c;
289
282
  const result = {};
290
- const [child] = (0, WABinary_1.getAllBinaryNodeChildren)(node);
283
+ const [child] = getAllBinaryNodeChildren(node);
291
284
  const nodeType = node.attrs.type;
292
- const from = (0, WABinary_1.jidNormalizedUser)(node.attrs.from);
285
+ const from = jidNormalizedUser(node.attrs.from);
293
286
  switch (nodeType) {
294
287
  case 'privacy_token':
295
- const tokenList = (0, WABinary_1.getBinaryNodeChildren)(child, 'token');
288
+ const tokenList = getBinaryNodeChildren(child, 'token');
296
289
  for (const { attrs, content } of tokenList) {
297
290
  const jid = attrs.jid;
298
291
  ev.emit('chats.update', [
@@ -304,49 +297,55 @@ const makeMessagesRecvSocket = (config) => {
304
297
  logger.debug({ jid }, 'got privacy token update');
305
298
  }
306
299
  break;
300
+ case 'newsletter':
301
+ await handleNewsletterNotification(node);
302
+ break;
303
+ case 'mex':
304
+ await handleMexNewsletterNotification(node);
305
+ break;
307
306
  case 'w:gp2':
308
307
  handleGroupNotification(node.attrs.participant, child, result);
309
308
  break;
310
309
  case 'mediaretry':
311
- const event = (0, Utils_1.decodeMediaRetryNode)(node);
310
+ const event = decodeMediaRetryNode(node);
312
311
  ev.emit('messages.media-update', [event]);
313
312
  break;
314
313
  case 'encrypt':
315
314
  await handleEncryptNotification(node);
316
315
  break;
317
316
  case 'devices':
318
- const devices = (0, WABinary_1.getBinaryNodeChildren)(child, 'device');
319
- if ((0, WABinary_1.areJidsSameUser)(child.attrs.jid, authState.creds.me.id)) {
317
+ const devices = getBinaryNodeChildren(child, 'device');
318
+ if (areJidsSameUser(child.attrs.jid, authState.creds.me.id)) {
320
319
  const deviceJids = devices.map(d => d.attrs.jid);
321
320
  logger.info({ deviceJids }, 'got my own devices');
322
321
  }
323
322
  break;
324
323
  case 'server_sync':
325
- const update = (0, WABinary_1.getBinaryNodeChild)(node, 'collection');
324
+ const update = getBinaryNodeChild(node, 'collection');
326
325
  if (update) {
327
326
  const name = update.attrs.name;
328
327
  await resyncAppState([name], false);
329
328
  }
330
329
  break;
331
330
  case 'picture':
332
- const setPicture = (0, WABinary_1.getBinaryNodeChild)(node, 'set');
333
- const delPicture = (0, WABinary_1.getBinaryNodeChild)(node, 'delete');
331
+ const setPicture = getBinaryNodeChild(node, 'set');
332
+ const delPicture = getBinaryNodeChild(node, 'delete');
334
333
  ev.emit('contacts.update', [
335
334
  {
336
- id: (0, WABinary_1.jidNormalizedUser)((_a = node === null || node === void 0 ? void 0 : node.attrs) === null || _a === void 0 ? void 0 : _a.from) || ((_c = (_b = (setPicture || delPicture)) === null || _b === void 0 ? void 0 : _b.attrs) === null || _c === void 0 ? void 0 : _c.hash) || '',
335
+ id: jidNormalizedUser(node?.attrs?.from) || (setPicture || delPicture)?.attrs?.hash || '',
337
336
  imgUrl: setPicture ? 'changed' : 'removed'
338
337
  }
339
338
  ]);
340
- if ((0, WABinary_1.isJidGroup)(from)) {
339
+ if (isJidGroup(from)) {
341
340
  const node = setPicture || delPicture;
342
- result.messageStubType = Types_1.WAMessageStubType.GROUP_CHANGE_ICON;
341
+ result.messageStubType = WAMessageStubType.GROUP_CHANGE_ICON;
343
342
  if (setPicture) {
344
343
  result.messageStubParameters = [setPicture.attrs.id];
345
344
  }
346
- result.participant = node === null || node === void 0 ? void 0 : node.attrs.author;
345
+ result.participant = node?.attrs.author;
347
346
  result.key = {
348
347
  ...(result.key || {}),
349
- participant: setPicture === null || setPicture === void 0 ? void 0 : setPicture.attrs.author
348
+ participant: setPicture?.attrs.author
350
349
  };
351
350
  }
352
351
  break;
@@ -366,7 +365,7 @@ const makeMessagesRecvSocket = (config) => {
366
365
  });
367
366
  }
368
367
  else if (child.tag === 'blocklist') {
369
- const blocklists = (0, WABinary_1.getBinaryNodeChildren)(child, 'item');
368
+ const blocklists = getBinaryNodeChildren(child, 'item');
370
369
  for (const { attrs } of blocklists) {
371
370
  const blocklist = [attrs.jid];
372
371
  const type = attrs.action === 'block' ? 'add' : 'remove';
@@ -375,15 +374,15 @@ const makeMessagesRecvSocket = (config) => {
375
374
  }
376
375
  break;
377
376
  case 'link_code_companion_reg':
378
- const linkCodeCompanionReg = (0, WABinary_1.getBinaryNodeChild)(node, 'link_code_companion_reg');
379
- const ref = toRequiredBuffer((0, WABinary_1.getBinaryNodeChildBuffer)(linkCodeCompanionReg, 'link_code_pairing_ref'));
380
- const primaryIdentityPublicKey = toRequiredBuffer((0, WABinary_1.getBinaryNodeChildBuffer)(linkCodeCompanionReg, 'primary_identity_pub'));
381
- const primaryEphemeralPublicKeyWrapped = toRequiredBuffer((0, WABinary_1.getBinaryNodeChildBuffer)(linkCodeCompanionReg, 'link_code_pairing_wrapped_primary_ephemeral_pub'));
377
+ const linkCodeCompanionReg = getBinaryNodeChild(node, 'link_code_companion_reg');
378
+ const ref = toRequiredBuffer(getBinaryNodeChildBuffer(linkCodeCompanionReg, 'link_code_pairing_ref'));
379
+ const primaryIdentityPublicKey = toRequiredBuffer(getBinaryNodeChildBuffer(linkCodeCompanionReg, 'primary_identity_pub'));
380
+ const primaryEphemeralPublicKeyWrapped = toRequiredBuffer(getBinaryNodeChildBuffer(linkCodeCompanionReg, 'link_code_pairing_wrapped_primary_ephemeral_pub'));
382
381
  const codePairingPublicKey = await decipherLinkPublicKey(primaryEphemeralPublicKeyWrapped);
383
- const companionSharedKey = Utils_1.Curve.sharedKey(authState.creds.pairingEphemeralKeyPair.private, codePairingPublicKey);
384
- const random = (0, crypto_1.randomBytes)(32);
385
- const linkCodeSalt = (0, crypto_1.randomBytes)(32);
386
- const linkCodePairingExpanded = await (0, Utils_1.hkdf)(companionSharedKey, 32, {
382
+ const companionSharedKey = Curve.sharedKey(authState.creds.pairingEphemeralKeyPair.private, codePairingPublicKey);
383
+ const random = randomBytes(32);
384
+ const linkCodeSalt = randomBytes(32);
385
+ const linkCodePairingExpanded = await hkdf(companionSharedKey, 32, {
387
386
  salt: linkCodeSalt,
388
387
  info: 'link_code_pairing_key_bundle_encryption_key'
389
388
  });
@@ -392,16 +391,16 @@ const makeMessagesRecvSocket = (config) => {
392
391
  primaryIdentityPublicKey,
393
392
  random
394
393
  ]);
395
- const encryptIv = (0, crypto_1.randomBytes)(12);
396
- const encrypted = (0, Utils_1.aesEncryptGCM)(encryptPayload, linkCodePairingExpanded, encryptIv, Buffer.alloc(0));
394
+ const encryptIv = randomBytes(12);
395
+ const encrypted = aesEncryptGCM(encryptPayload, linkCodePairingExpanded, encryptIv, Buffer.alloc(0));
397
396
  const encryptedPayload = Buffer.concat([linkCodeSalt, encryptIv, encrypted]);
398
- const identitySharedKey = Utils_1.Curve.sharedKey(authState.creds.signedIdentityKey.private, primaryIdentityPublicKey);
397
+ const identitySharedKey = Curve.sharedKey(authState.creds.signedIdentityKey.private, primaryIdentityPublicKey);
399
398
  const identityPayload = Buffer.concat([companionSharedKey, identitySharedKey, random]);
400
- authState.creds.advSecretKey = (await (0, Utils_1.hkdf)(identityPayload, 32, { info: 'adv_secret' })).toString('base64');
399
+ authState.creds.advSecretKey = (await hkdf(identityPayload, 32, { info: 'adv_secret' })).toString('base64');
401
400
  await query({
402
401
  tag: 'iq',
403
402
  attrs: {
404
- to: WABinary_1.S_WHATSAPP_NET,
403
+ to: S_WHATSAPP_NET,
405
404
  type: 'set',
406
405
  id: sock.generateMessageTag(),
407
406
  xmlns: 'md'
@@ -443,14 +442,14 @@ const makeMessagesRecvSocket = (config) => {
443
442
  async function decipherLinkPublicKey(data) {
444
443
  const buffer = toRequiredBuffer(data);
445
444
  const salt = buffer.slice(0, 32);
446
- const secretKey = await (0, Utils_1.derivePairingCodeKey)(authState.creds.pairingCode, salt);
445
+ const secretKey = await derivePairingCodeKey(authState.creds.pairingCode, salt);
447
446
  const iv = buffer.slice(32, 48);
448
447
  const payload = buffer.slice(48, 80);
449
- return (0, Utils_1.aesDecryptCTR)(payload, secretKey, iv);
448
+ return aesDecryptCTR(payload, secretKey, iv);
450
449
  }
451
450
  function toRequiredBuffer(data) {
452
451
  if (data === undefined) {
453
- throw new boom_1.Boom('Invalid buffer', { statusCode: 400 });
452
+ throw new Boom('Invalid buffer', { statusCode: 400 });
454
453
  }
455
454
  return data instanceof Buffer ? data : Buffer.from(data);
456
455
  }
@@ -465,7 +464,6 @@ const makeMessagesRecvSocket = (config) => {
465
464
  msgRetryCache.set(key, newValue);
466
465
  };
467
466
  const sendMessagesAgain = async (key, ids, retryNode) => {
468
- var _a;
469
467
  // todo: implement a cache to store the last 256 sent messages (copy whatsmeow)
470
468
  const msgs = await Promise.all(ids.map(id => getMessage({ ...key, id })));
471
469
  const remoteJid = key.remoteJid;
@@ -473,9 +471,9 @@ const makeMessagesRecvSocket = (config) => {
473
471
  // if it's the primary jid sending the request
474
472
  // just re-send the message to everyone
475
473
  // prevents the first message decryption failure
476
- const sendToAll = !((_a = (0, WABinary_1.jidDecode)(participant)) === null || _a === void 0 ? void 0 : _a.device);
474
+ const sendToAll = !jidDecode(participant)?.device;
477
475
  await assertSessions([participant], true);
478
- if ((0, WABinary_1.isJidGroup)(remoteJid)) {
476
+ if (isJidGroup(remoteJid)) {
479
477
  await authState.keys.set({ 'sender-key-memory': { [remoteJid]: null } });
480
478
  }
481
479
  logger.debug({ participant, sendToAll }, 'forced new session for retry recp');
@@ -500,11 +498,10 @@ const makeMessagesRecvSocket = (config) => {
500
498
  }
501
499
  };
502
500
  const handleReceipt = async (node) => {
503
- var _a, _b;
504
501
  const { attrs, content } = node;
505
502
  const isLid = attrs.from.includes('lid');
506
- const isNodeFromMe = (0, WABinary_1.areJidsSameUser)(attrs.participant || attrs.from, isLid ? (_a = authState.creds.me) === null || _a === void 0 ? void 0 : _a.lid : (_b = authState.creds.me) === null || _b === void 0 ? void 0 : _b.id);
507
- const remoteJid = !isNodeFromMe || (0, WABinary_1.isJidGroup)(attrs.from) ? attrs.from : attrs.recipient;
503
+ const isNodeFromMe = areJidsSameUser(attrs.participant || attrs.from, isLid ? authState.creds.me?.lid : authState.creds.me?.id);
504
+ const remoteJid = !isNodeFromMe || isJidGroup(attrs.from) ? attrs.from : attrs.recipient;
508
505
  const fromMe = !attrs.recipient || ((attrs.type === 'retry' || attrs.type === 'sender') && isNodeFromMe);
509
506
  const key = {
510
507
  remoteJid,
@@ -519,24 +516,24 @@ const makeMessagesRecvSocket = (config) => {
519
516
  }
520
517
  const ids = [attrs.id];
521
518
  if (Array.isArray(content)) {
522
- const items = (0, WABinary_1.getBinaryNodeChildren)(content[0], 'item');
519
+ const items = getBinaryNodeChildren(content[0], 'item');
523
520
  ids.push(...items.map(i => i.attrs.id));
524
521
  }
525
522
  try {
526
523
  await Promise.all([
527
524
  processingMutex.mutex(async () => {
528
- const status = (0, Utils_1.getStatusFromReceiptType)(attrs.type);
525
+ const status = getStatusFromReceiptType(attrs.type);
529
526
  if (typeof status !== 'undefined' &&
530
527
  // basically, we only want to know when a message from us has been delivered to/read by the other person
531
528
  // or another device of ours has read some messages
532
- (status >= WAProto_1.proto.WebMessageInfo.Status.SERVER_ACK || !isNodeFromMe)) {
533
- if ((0, WABinary_1.isJidGroup)(remoteJid) || (0, WABinary_1.isJidStatusBroadcast)(remoteJid)) {
529
+ (status >= proto.WebMessageInfo.Status.SERVER_ACK || !isNodeFromMe)) {
530
+ if (isJidGroup(remoteJid) || isJidStatusBroadcast(remoteJid)) {
534
531
  if (attrs.participant) {
535
- const updateKey = status === WAProto_1.proto.WebMessageInfo.Status.DELIVERY_ACK ? 'receiptTimestamp' : 'readTimestamp';
532
+ const updateKey = status === proto.WebMessageInfo.Status.DELIVERY_ACK ? 'receiptTimestamp' : 'readTimestamp';
536
533
  ev.emit('message-receipt.update', ids.map(id => ({
537
534
  key: { ...key, id },
538
535
  receipt: {
539
- userJid: (0, WABinary_1.jidNormalizedUser)(attrs.participant),
536
+ userJid: jidNormalizedUser(attrs.participant),
540
537
  [updateKey]: +attrs.t
541
538
  }
542
539
  })));
@@ -552,7 +549,7 @@ const makeMessagesRecvSocket = (config) => {
552
549
  if (attrs.type === 'retry') {
553
550
  // correctly set who is asking for the retry
554
551
  key.participant = key.participant || attrs.from;
555
- const retryNode = (0, WABinary_1.getBinaryNodeChild)(node, 'retry');
552
+ const retryNode = getBinaryNodeChild(node, 'retry');
556
553
  if (willSendMessageAgain(ids[0], key.participant)) {
557
554
  if (key.fromMe) {
558
555
  try {
@@ -588,10 +585,9 @@ const makeMessagesRecvSocket = (config) => {
588
585
  try {
589
586
  await Promise.all([
590
587
  processingMutex.mutex(async () => {
591
- var _a;
592
588
  const msg = await processNotification(node);
593
589
  if (msg) {
594
- const fromMe = (0, WABinary_1.areJidsSameUser)(node.attrs.participant || remoteJid, authState.creds.me.id);
590
+ const fromMe = areJidsSameUser(node.attrs.participant || remoteJid, authState.creds.me.id);
595
591
  msg.key = {
596
592
  remoteJid,
597
593
  fromMe,
@@ -599,9 +595,9 @@ const makeMessagesRecvSocket = (config) => {
599
595
  id: node.attrs.id,
600
596
  ...(msg.key || {})
601
597
  };
602
- (_a = msg.participant) !== null && _a !== void 0 ? _a : (msg.participant = node.attrs.participant);
598
+ msg.participant ?? (msg.participant = node.attrs.participant);
603
599
  msg.messageTimestamp = +node.attrs.t;
604
- const fullMsg = WAProto_1.proto.WebMessageInfo.fromObject(msg);
600
+ const fullMsg = proto.WebMessageInfo.fromObject(msg);
605
601
  await upsertMessage(fullMsg, 'append');
606
602
  }
607
603
  })
@@ -612,13 +608,12 @@ const makeMessagesRecvSocket = (config) => {
612
608
  }
613
609
  };
614
610
  const handleMessage = async (node) => {
615
- var _a, _b, _c;
616
611
  if (shouldIgnoreJid(node.attrs.from) && node.attrs.from !== '@s.whatsapp.net') {
617
612
  logger.debug({ key: node.attrs.key }, 'ignored message');
618
613
  await sendMessageAck(node);
619
614
  return;
620
615
  }
621
- const encNode = (0, WABinary_1.getBinaryNodeChild)(node, 'enc');
616
+ const encNode = getBinaryNodeChild(node, 'enc');
622
617
  // TODO: temporary fix for crashes and issues resulting of failed msmsg decryption
623
618
  if (encNode && encNode.attrs.type === 'msmsg') {
624
619
  logger.debug({ key: node.attrs.key }, 'ignored msmsg');
@@ -626,9 +621,9 @@ const makeMessagesRecvSocket = (config) => {
626
621
  return;
627
622
  }
628
623
  let response;
629
- if ((0, WABinary_1.getBinaryNodeChild)(node, 'unavailable') && !encNode) {
624
+ if (getBinaryNodeChild(node, 'unavailable') && !encNode) {
630
625
  await sendMessageAck(node);
631
- const { key } = (0, Utils_1.decodeMessageNode)(node, authState.creds.me.id, authState.creds.me.lid || '').fullMessage;
626
+ const { key } = decodeMessageNode(node, authState.creds.me.id, authState.creds.me.lid || '').fullMessage;
632
627
  response = await requestPlaceholderResend(key);
633
628
  if (response === 'RESOLVED') {
634
629
  return;
@@ -640,33 +635,32 @@ const makeMessagesRecvSocket = (config) => {
640
635
  placeholderResendCache.del(node.attrs.id);
641
636
  }
642
637
  }
643
- const { fullMessage: msg, category, author, decrypt } = (0, Utils_1.decryptMessageNode)(node, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, logger);
644
- if (response && ((_a = msg === null || msg === void 0 ? void 0 : msg.messageStubParameters) === null || _a === void 0 ? void 0 : _a[0]) === Utils_1.NO_MESSAGE_FOUND_ERROR_TEXT) {
645
- msg.messageStubParameters = [Utils_1.NO_MESSAGE_FOUND_ERROR_TEXT, response];
638
+ const { fullMessage: msg, category, author, decrypt } = decryptMessageNode(node, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, logger);
639
+ if (response && msg?.messageStubParameters?.[0] === NO_MESSAGE_FOUND_ERROR_TEXT) {
640
+ msg.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT, response];
646
641
  }
647
- if (((_c = (_b = msg.message) === null || _b === void 0 ? void 0 : _b.protocolMessage) === null || _c === void 0 ? void 0 : _c.type) === WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER &&
642
+ if (msg.message?.protocolMessage?.type === proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER &&
648
643
  node.attrs.sender_pn) {
649
644
  ev.emit('chats.phoneNumberShare', { lid: node.attrs.from, jid: node.attrs.sender_pn });
650
645
  }
651
646
  try {
652
647
  await Promise.all([
653
648
  processingMutex.mutex(async () => {
654
- var _a;
655
649
  await decrypt();
656
650
  // message failed to decrypt
657
- if (msg.messageStubType === WAProto_1.proto.WebMessageInfo.StubType.CIPHERTEXT) {
658
- if (((_a = msg === null || msg === void 0 ? void 0 : msg.messageStubParameters) === null || _a === void 0 ? void 0 : _a[0]) === Utils_1.MISSING_KEYS_ERROR_TEXT) {
659
- return sendMessageAck(node, Utils_1.NACK_REASONS.ParsingError);
651
+ if (msg.messageStubType === proto.WebMessageInfo.StubType.CIPHERTEXT) {
652
+ if (msg?.messageStubParameters?.[0] === MISSING_KEYS_ERROR_TEXT) {
653
+ return sendMessageAck(node, NACK_REASONS.ParsingError);
660
654
  }
661
655
  retryMutex.mutex(async () => {
662
656
  if (ws.isOpen) {
663
- if ((0, WABinary_1.getBinaryNodeChild)(node, 'unavailable')) {
657
+ if (getBinaryNodeChild(node, 'unavailable')) {
664
658
  return;
665
659
  }
666
- const encNode = (0, WABinary_1.getBinaryNodeChild)(node, 'enc');
660
+ const encNode = getBinaryNodeChild(node, 'enc');
667
661
  await sendRetryRequest(node, !encNode);
668
662
  if (retryRequestDelayMs) {
669
- await (0, Utils_1.delay)(retryRequestDelayMs);
663
+ await delay(retryRequestDelayMs);
670
664
  }
671
665
  }
672
666
  else {
@@ -686,7 +680,7 @@ const makeMessagesRecvSocket = (config) => {
686
680
  // message was sent by us from a different device
687
681
  type = 'sender';
688
682
  // need to specially handle this case
689
- if ((0, WABinary_1.isJidUser)(msg.key.remoteJid)) {
683
+ if (isJidUser(msg.key.remoteJid)) {
690
684
  participant = author;
691
685
  }
692
686
  }
@@ -695,13 +689,13 @@ const makeMessagesRecvSocket = (config) => {
695
689
  }
696
690
  await sendReceipt(msg.key.remoteJid, participant, [msg.key.id], type);
697
691
  // send ack for history message
698
- const isAnyHistoryMsg = (0, Utils_1.getHistoryMsg)(msg.message);
692
+ const isAnyHistoryMsg = getHistoryMsg(msg.message);
699
693
  if (isAnyHistoryMsg) {
700
- const jid = (0, WABinary_1.jidNormalizedUser)(msg.key.remoteJid);
694
+ const jid = jidNormalizedUser(msg.key.remoteJid);
701
695
  await sendReceipt(jid, undefined, [msg.key.id], 'hist_sync');
702
696
  }
703
697
  }
704
- (0, Utils_1.cleanMessage)(msg, authState.creds.me.id);
698
+ cleanMessage(msg, authState.creds.me.id);
705
699
  await sendMessageAck(node);
706
700
  await upsertMessage(msg, node.attrs.offline ? 'append' : 'notify');
707
701
  })
@@ -712,9 +706,8 @@ const makeMessagesRecvSocket = (config) => {
712
706
  }
713
707
  };
714
708
  const fetchMessageHistory = async (count, oldestMsgKey, oldestMsgTimestamp) => {
715
- var _a;
716
- if (!((_a = authState.creds.me) === null || _a === void 0 ? void 0 : _a.id)) {
717
- throw new boom_1.Boom('Not authenticated');
709
+ if (!authState.creds.me?.id) {
710
+ throw new Boom('Not authenticated');
718
711
  }
719
712
  const pdoMessage = {
720
713
  historySyncOnDemandRequest: {
@@ -724,24 +717,23 @@ const makeMessagesRecvSocket = (config) => {
724
717
  oldestMsgTimestampMs: oldestMsgTimestamp,
725
718
  onDemandMsgCount: count
726
719
  },
727
- peerDataOperationRequestType: WAProto_1.proto.Message.PeerDataOperationRequestType.HISTORY_SYNC_ON_DEMAND
720
+ peerDataOperationRequestType: proto.Message.PeerDataOperationRequestType.HISTORY_SYNC_ON_DEMAND
728
721
  };
729
722
  return sendPeerDataOperationMessage(pdoMessage);
730
723
  };
731
724
  const requestPlaceholderResend = async (messageKey) => {
732
- var _a;
733
- if (!((_a = authState.creds.me) === null || _a === void 0 ? void 0 : _a.id)) {
734
- throw new boom_1.Boom('Not authenticated');
725
+ if (!authState.creds.me?.id) {
726
+ throw new Boom('Not authenticated');
735
727
  }
736
- if (placeholderResendCache.get(messageKey === null || messageKey === void 0 ? void 0 : messageKey.id)) {
728
+ if (placeholderResendCache.get(messageKey?.id)) {
737
729
  logger.debug({ messageKey }, 'already requested resend');
738
730
  return;
739
731
  }
740
732
  else {
741
- placeholderResendCache.set(messageKey === null || messageKey === void 0 ? void 0 : messageKey.id, true);
733
+ placeholderResendCache.set(messageKey?.id, true);
742
734
  }
743
- await (0, Utils_1.delay)(5000);
744
- if (!placeholderResendCache.get(messageKey === null || messageKey === void 0 ? void 0 : messageKey.id)) {
735
+ await delay(5000);
736
+ if (!placeholderResendCache.get(messageKey?.id)) {
745
737
  logger.debug({ messageKey }, 'message received while resend requested');
746
738
  return 'RESOLVED';
747
739
  }
@@ -751,22 +743,41 @@ const makeMessagesRecvSocket = (config) => {
751
743
  messageKey
752
744
  }
753
745
  ],
754
- peerDataOperationRequestType: WAProto_1.proto.Message.PeerDataOperationRequestType.PLACEHOLDER_MESSAGE_RESEND
746
+ peerDataOperationRequestType: proto.Message.PeerDataOperationRequestType.PLACEHOLDER_MESSAGE_RESEND
755
747
  };
756
748
  setTimeout(() => {
757
- if (placeholderResendCache.get(messageKey === null || messageKey === void 0 ? void 0 : messageKey.id)) {
749
+ if (placeholderResendCache.get(messageKey?.id)) {
758
750
  logger.debug({ messageKey }, 'PDO message without response after 15 seconds. Phone possibly offline');
759
- placeholderResendCache.del(messageKey === null || messageKey === void 0 ? void 0 : messageKey.id);
751
+ placeholderResendCache.del(messageKey?.id);
760
752
  }
761
753
  }, 15000);
762
754
  return sendPeerDataOperationMessage(pdoMessage);
763
755
  };
764
756
  const handleCall = async (node) => {
757
+ let status;
765
758
  const { attrs } = node;
766
- const [infoChild] = (0, WABinary_1.getAllBinaryNodeChildren)(node);
759
+ const [infoChild] = getAllBinaryNodeChildren(node);
760
+ if (!infoChild) {
761
+ throw new Boom('Missing call info in call node');
762
+ }
767
763
  const callId = infoChild.attrs['call-id'];
768
764
  const from = infoChild.attrs.from || infoChild.attrs['call-creator'];
769
- const status = (0, Utils_1.getCallStatusFromNode)(infoChild);
765
+ status = getCallStatusFromNode(infoChild);
766
+ if (isLidUser(from) && infoChild.tag === 'relaylatency') {
767
+ const verify = callOfferCache.get(callId);
768
+ if (!verify) {
769
+ status = 'offer';
770
+ const callLid = {
771
+ chatId: attrs.from,
772
+ from,
773
+ id: callId,
774
+ date: new Date(+attrs.t * 1000),
775
+ offline: !!attrs.offline,
776
+ status
777
+ };
778
+ callOfferCache.set(callId, callLid);
779
+ }
780
+ }
770
781
  const call = {
771
782
  chatId: attrs.from,
772
783
  from,
@@ -776,7 +787,7 @@ const makeMessagesRecvSocket = (config) => {
776
787
  status
777
788
  };
778
789
  if (status === 'offer') {
779
- call.isVideo = !!(0, WABinary_1.getBinaryNodeChild)(infoChild, 'video');
790
+ call.isVideo = !!getBinaryNodeChild(infoChild, 'video');
780
791
  call.isGroup = infoChild.attrs.type === 'group' || !!infoChild.attrs['group-jid'];
781
792
  call.groupJid = infoChild.attrs['group-jid'];
782
793
  callOfferCache.set(call.id, call);
@@ -817,7 +828,7 @@ const makeMessagesRecvSocket = (config) => {
817
828
  {
818
829
  key,
819
830
  update: {
820
- status: Types_1.WAMessageStatus.ERROR,
831
+ status: WAMessageStatus.ERROR,
821
832
  messageStubParameters: [attrs.error]
822
833
  }
823
834
  }
@@ -875,6 +886,139 @@ const makeMessagesRecvSocket = (config) => {
875
886
  processNodeWithBuffer(node, identifier, exec);
876
887
  }
877
888
  };
889
+ // Handles newsletter notifications
890
+ async function handleNewsletterNotification(node) {
891
+ const from = node.attrs.from;
892
+ const child = getAllBinaryNodeChildren(node)[0];
893
+ const author = node.attrs.participant;
894
+ logger.info({ from, child }, 'got newsletter notification');
895
+ switch (child.tag) {
896
+ case 'reaction':
897
+ const reactionUpdate = {
898
+ id: from,
899
+ server_id: child.attrs.message_id,
900
+ reaction: {
901
+ code: getBinaryNodeChildString(child, 'reaction'),
902
+ count: 1
903
+ }
904
+ };
905
+ ev.emit('newsletter.reaction', reactionUpdate);
906
+ break;
907
+ case 'view':
908
+ const viewUpdate = {
909
+ id: from,
910
+ server_id: child.attrs.message_id,
911
+ count: parseInt(child.content?.toString() || '0', 10)
912
+ };
913
+ ev.emit('newsletter.view', viewUpdate);
914
+ break;
915
+ case 'participant':
916
+ const participantUpdate = {
917
+ id: from,
918
+ author,
919
+ user: child.attrs.jid,
920
+ action: child.attrs.action,
921
+ new_role: child.attrs.role
922
+ };
923
+ ev.emit('newsletter-participants.update', participantUpdate);
924
+ break;
925
+ case 'update':
926
+ const settingsNode = getBinaryNodeChild(child, 'settings');
927
+ if (settingsNode) {
928
+ const update = {};
929
+ const nameNode = getBinaryNodeChild(settingsNode, 'name');
930
+ if (nameNode?.content)
931
+ update.name = nameNode.content.toString();
932
+ const descriptionNode = getBinaryNodeChild(settingsNode, 'description');
933
+ if (descriptionNode?.content)
934
+ update.description = descriptionNode.content.toString();
935
+ ev.emit('newsletter-settings.update', {
936
+ id: from,
937
+ update
938
+ });
939
+ }
940
+ break;
941
+ case 'message':
942
+ const plaintextNode = getBinaryNodeChild(child, 'plaintext');
943
+ if (plaintextNode?.content) {
944
+ try {
945
+ const contentBuf = typeof plaintextNode.content === 'string'
946
+ ? Buffer.from(plaintextNode.content, 'binary')
947
+ : Buffer.from(plaintextNode.content);
948
+ const messageProto = proto.Message.decode(contentBuf);
949
+ const fullMessage = proto.WebMessageInfo.fromObject({
950
+ key: {
951
+ remoteJid: from,
952
+ id: child.attrs.message_id || child.attrs.server_id,
953
+ fromMe: false
954
+ },
955
+ message: messageProto,
956
+ messageTimestamp: +child.attrs.t
957
+ });
958
+ await upsertMessage(fullMessage, 'append');
959
+ logger.info('Processed plaintext newsletter message');
960
+ }
961
+ catch (error) {
962
+ logger.error({ error }, 'Failed to decode plaintext newsletter message');
963
+ }
964
+ }
965
+ break;
966
+ default:
967
+ logger.warn({ node }, 'Unknown newsletter notification');
968
+ break;
969
+ }
970
+ }
971
+ // Handles mex newsletter notifications
972
+ async function handleMexNewsletterNotification(node) {
973
+ const mexNode = getBinaryNodeChild(node, 'mex');
974
+ if (!mexNode?.content) {
975
+ logger.warn({ node }, 'Invalid mex newsletter notification');
976
+ return;
977
+ }
978
+ let data;
979
+ try {
980
+ data = JSON.parse(mexNode.content.toString());
981
+ }
982
+ catch (error) {
983
+ logger.error({ err: error, node }, 'Failed to parse mex newsletter notification');
984
+ return;
985
+ }
986
+ const operation = data?.operation;
987
+ const updates = data?.updates;
988
+ if (!updates || !operation) {
989
+ logger.warn({ data }, 'Invalid mex newsletter notification content');
990
+ return;
991
+ }
992
+ logger.info({ operation, updates }, 'got mex newsletter notification');
993
+ switch (operation) {
994
+ case 'NotificationNewsletterUpdate':
995
+ for (const update of updates) {
996
+ if (update.jid && update.settings && Object.keys(update.settings).length > 0) {
997
+ ev.emit('newsletter-settings.update', {
998
+ id: update.jid,
999
+ update: update.settings
1000
+ });
1001
+ }
1002
+ }
1003
+ break;
1004
+ case 'NotificationNewsletterAdminPromote':
1005
+ for (const update of updates) {
1006
+ if (update.jid && update.user) {
1007
+ ev.emit('newsletter-participants.update', {
1008
+ id: update.jid,
1009
+ author: node.attrs.from,
1010
+ user: update.user,
1011
+ new_role: 'ADMIN',
1012
+ action: 'promote'
1013
+ });
1014
+ }
1015
+ }
1016
+ break;
1017
+ default:
1018
+ logger.info({ operation, data }, 'Unhandled mex newsletter notification');
1019
+ break;
1020
+ }
1021
+ }
878
1022
  // recv a message
879
1023
  ws.on('CB:message', (node) => {
880
1024
  processNode('message', node, 'processing message', handleMessage);
@@ -892,6 +1036,9 @@ const makeMessagesRecvSocket = (config) => {
892
1036
  handleBadAck(node).catch(error => onUnexpectedError(error, 'handling bad ack'));
893
1037
  });
894
1038
  ev.on('call', ([call]) => {
1039
+ if (!call) {
1040
+ return;
1041
+ }
895
1042
  // missed call + group call notification message generation
896
1043
  if (call.status === 'timeout' || (call.status === 'offer' && call.isGroup)) {
897
1044
  const msg = {
@@ -900,22 +1047,22 @@ const makeMessagesRecvSocket = (config) => {
900
1047
  id: call.id,
901
1048
  fromMe: false
902
1049
  },
903
- messageTimestamp: (0, Utils_1.unixTimestampSeconds)(call.date)
1050
+ messageTimestamp: unixTimestampSeconds(call.date)
904
1051
  };
905
1052
  if (call.status === 'timeout') {
906
1053
  if (call.isGroup) {
907
1054
  msg.messageStubType = call.isVideo
908
- ? Types_1.WAMessageStubType.CALL_MISSED_GROUP_VIDEO
909
- : Types_1.WAMessageStubType.CALL_MISSED_GROUP_VOICE;
1055
+ ? WAMessageStubType.CALL_MISSED_GROUP_VIDEO
1056
+ : WAMessageStubType.CALL_MISSED_GROUP_VOICE;
910
1057
  }
911
1058
  else {
912
- msg.messageStubType = call.isVideo ? Types_1.WAMessageStubType.CALL_MISSED_VIDEO : Types_1.WAMessageStubType.CALL_MISSED_VOICE;
1059
+ msg.messageStubType = call.isVideo ? WAMessageStubType.CALL_MISSED_VIDEO : WAMessageStubType.CALL_MISSED_VOICE;
913
1060
  }
914
1061
  }
915
1062
  else {
916
1063
  msg.message = { call: { callKey: Buffer.from(call.id) } };
917
1064
  }
918
- const protoMsg = WAProto_1.proto.WebMessageInfo.fromObject(msg);
1065
+ const protoMsg = proto.WebMessageInfo.fromObject(msg);
919
1066
  upsertMessage(protoMsg, call.offline ? 'append' : 'notify');
920
1067
  }
921
1068
  });
@@ -934,4 +1081,4 @@ const makeMessagesRecvSocket = (config) => {
934
1081
  requestPlaceholderResend
935
1082
  };
936
1083
  };
937
- exports.makeMessagesRecvSocket = makeMessagesRecvSocket;
1084
+ //# sourceMappingURL=messages-recv.js.map