@periskope/baileys 6.7.18-alpha.2 → 6.7.18-alpha.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 (372) hide show
  1. package/README.md +1 -1
  2. package/WAProto/GenerateStatics.sh +3 -0
  3. package/WAProto/WAProto.proto +4633 -0
  4. package/WAProto/fix-imports.js +29 -0
  5. package/WAProto/index.js +4136 -4138
  6. package/lib/Defaults/index.d.ts +4 -3
  7. package/lib/Defaults/index.d.ts.map +1 -0
  8. package/lib/Defaults/index.js +36 -40
  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 +15 -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 +18 -0
  19. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  20. package/lib/Signal/Group/group_cipher.js +94 -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 +11 -0
  27. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  28. package/lib/Signal/Group/keyhelper.js +19 -0
  29. package/lib/Signal/Group/keyhelper.js.map +1 -0
  30. package/lib/Signal/Group/queue-job.d.ts +2 -0
  31. package/lib/Signal/Group/queue-job.d.ts.map +1 -0
  32. package/lib/Signal/Group/queue-job.js +54 -0
  33. package/lib/Signal/Group/queue-job.js.map +1 -0
  34. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  35. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  36. package/lib/Signal/Group/sender-chain-key.js +32 -0
  37. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  38. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  39. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  40. package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
  41. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  42. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  43. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  44. package/lib/Signal/Group/sender-key-message.js +67 -0
  45. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  46. package/lib/Signal/Group/sender-key-name.d.ts +18 -0
  47. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  48. package/lib/Signal/Group/sender-key-name.js +48 -0
  49. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  50. package/lib/Signal/Group/sender-key-record.d.ts +31 -0
  51. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  52. package/lib/Signal/Group/sender-key-record.js +50 -0
  53. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  54. package/lib/Signal/Group/sender-key-state.d.ts +39 -0
  55. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  56. package/lib/Signal/Group/sender-key-state.js +96 -0
  57. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  58. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  59. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  60. package/{WASignalGroup/sender_message_key.js → lib/Signal/Group/sender-message-key.js} +27 -39
  61. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  62. package/lib/Signal/libsignal.d.ts +3 -2
  63. package/lib/Signal/libsignal.d.ts.map +1 -0
  64. package/lib/Signal/libsignal.js +37 -57
  65. package/lib/Signal/libsignal.js.map +1 -0
  66. package/lib/Socket/Client/index.d.ts +3 -2
  67. package/lib/Socket/Client/index.d.ts.map +1 -0
  68. package/lib/Socket/Client/index.js +3 -18
  69. package/lib/Socket/Client/index.js.map +1 -0
  70. package/lib/Socket/Client/types.d.ts +2 -1
  71. package/lib/Socket/Client/types.d.ts.map +1 -0
  72. package/lib/Socket/Client/types.js +4 -6
  73. package/lib/Socket/Client/types.js.map +1 -0
  74. package/lib/Socket/Client/websocket.d.ts +2 -1
  75. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  76. package/lib/Socket/Client/websocket.js +14 -26
  77. package/lib/Socket/Client/websocket.js.map +1 -0
  78. package/lib/Socket/business.d.ts +88 -59
  79. package/lib/Socket/business.d.ts.map +1 -0
  80. package/lib/Socket/business.js +32 -37
  81. package/lib/Socket/business.js.map +1 -0
  82. package/lib/Socket/chats.d.ts +27 -21
  83. package/lib/Socket/chats.d.ts.map +1 -0
  84. package/lib/Socket/chats.js +132 -119
  85. package/lib/Socket/chats.js.map +1 -0
  86. package/lib/Socket/communities.d.ts +218 -0
  87. package/lib/Socket/communities.d.ts.map +1 -0
  88. package/lib/Socket/communities.js +351 -0
  89. package/lib/Socket/communities.js.map +1 -0
  90. package/lib/Socket/groups.d.ts +42 -35
  91. package/lib/Socket/groups.d.ts.map +1 -0
  92. package/lib/Socket/groups.js +57 -63
  93. package/lib/Socket/groups.js.map +1 -0
  94. package/lib/Socket/index.d.ts +124 -65
  95. package/lib/Socket/index.d.ts.map +1 -0
  96. package/lib/Socket/index.js +6 -7
  97. package/lib/Socket/index.js.map +1 -0
  98. package/lib/Socket/messages-recv.d.ts +74 -45
  99. package/lib/Socket/messages-recv.d.ts.map +1 -0
  100. package/lib/Socket/messages-recv.js +294 -164
  101. package/lib/Socket/messages-recv.js.map +1 -0
  102. package/lib/Socket/messages-send.d.ts +71 -42
  103. package/lib/Socket/messages-send.d.ts.map +1 -0
  104. package/lib/Socket/messages-send.js +100 -83
  105. package/lib/Socket/messages-send.js.map +1 -0
  106. package/lib/Socket/mex.d.ts +3 -0
  107. package/lib/Socket/mex.d.ts.map +1 -0
  108. package/lib/Socket/mex.js +42 -0
  109. package/lib/Socket/mex.js.map +1 -0
  110. package/lib/Socket/newsletter.d.ts +142 -0
  111. package/lib/Socket/newsletter.d.ts.map +1 -0
  112. package/lib/Socket/newsletter.js +179 -0
  113. package/lib/Socket/newsletter.js.map +1 -0
  114. package/lib/Socket/socket.d.ts +12 -11
  115. package/lib/Socket/socket.d.ts.map +1 -0
  116. package/lib/Socket/socket.js +100 -106
  117. package/lib/Socket/socket.js.map +1 -0
  118. package/lib/Socket/usync.d.ts +14 -13
  119. package/lib/Socket/usync.d.ts.map +1 -0
  120. package/lib/Socket/usync.js +9 -11
  121. package/lib/Socket/usync.js.map +1 -0
  122. package/lib/Types/Auth.d.ts +4 -3
  123. package/lib/Types/Auth.d.ts.map +1 -0
  124. package/lib/Types/Auth.js +2 -2
  125. package/lib/Types/Auth.js.map +1 -0
  126. package/lib/Types/Call.d.ts +1 -0
  127. package/lib/Types/Call.d.ts.map +1 -0
  128. package/lib/Types/Call.js +2 -2
  129. package/lib/Types/Call.js.map +1 -0
  130. package/lib/Types/Chat.d.ts +11 -7
  131. package/lib/Types/Chat.d.ts.map +1 -0
  132. package/lib/Types/Chat.js +2 -4
  133. package/lib/Types/Chat.js.map +1 -0
  134. package/lib/Types/Contact.d.ts +5 -0
  135. package/lib/Types/Contact.d.ts.map +1 -0
  136. package/lib/Types/Contact.js +2 -2
  137. package/lib/Types/Contact.js.map +1 -0
  138. package/lib/Types/Events.d.ts +44 -10
  139. package/lib/Types/Events.d.ts.map +1 -0
  140. package/lib/Types/Events.js +2 -2
  141. package/lib/Types/Events.js.map +1 -0
  142. package/lib/Types/GroupMetadata.d.ts +3 -1
  143. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  144. package/lib/Types/GroupMetadata.js +2 -2
  145. package/lib/Types/GroupMetadata.js.map +1 -0
  146. package/lib/Types/Label.d.ts +1 -0
  147. package/lib/Types/Label.d.ts.map +1 -0
  148. package/lib/Types/Label.js +3 -5
  149. package/lib/Types/Label.js.map +1 -0
  150. package/lib/Types/LabelAssociation.d.ts +1 -0
  151. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  152. package/lib/Types/LabelAssociation.js +3 -5
  153. package/lib/Types/LabelAssociation.js.map +1 -0
  154. package/lib/Types/Message.d.ts +17 -9
  155. package/lib/Types/Message.d.ts.map +1 -0
  156. package/lib/Types/Message.js +7 -7
  157. package/lib/Types/Message.js.map +1 -0
  158. package/lib/Types/Newsletter.d.ts +135 -0
  159. package/lib/Types/Newsletter.d.ts.map +1 -0
  160. package/lib/Types/Newsletter.js +31 -0
  161. package/lib/Types/Newsletter.js.map +1 -0
  162. package/lib/Types/Product.d.ts +2 -1
  163. package/lib/Types/Product.d.ts.map +1 -0
  164. package/lib/Types/Product.js +2 -2
  165. package/lib/Types/Product.js.map +1 -0
  166. package/lib/Types/Signal.d.ts +2 -1
  167. package/lib/Types/Signal.d.ts.map +1 -0
  168. package/lib/Types/Signal.js +2 -2
  169. package/lib/Types/Signal.js.map +1 -0
  170. package/lib/Types/Socket.d.ts +8 -7
  171. package/lib/Types/Socket.d.ts.map +1 -0
  172. package/lib/Types/Socket.js +3 -2
  173. package/lib/Types/Socket.js.map +1 -0
  174. package/lib/Types/State.d.ts +4 -2
  175. package/lib/Types/State.d.ts.map +1 -0
  176. package/lib/Types/State.js +2 -2
  177. package/lib/Types/State.js.map +1 -0
  178. package/lib/Types/USync.d.ts +3 -2
  179. package/lib/Types/USync.d.ts.map +1 -0
  180. package/lib/Types/USync.js +2 -2
  181. package/lib/Types/USync.js.map +1 -0
  182. package/lib/Types/index.d.ts +15 -13
  183. package/lib/Types/index.d.ts.map +1 -0
  184. package/lib/Types/index.js +15 -30
  185. package/lib/Types/index.js.map +1 -0
  186. package/lib/Utils/auth-utils.d.ts +3 -2
  187. package/lib/Utils/auth-utils.d.ts.map +1 -0
  188. package/lib/Utils/auth-utils.js +24 -33
  189. package/lib/Utils/auth-utils.js.map +1 -0
  190. package/lib/Utils/baileys-event-stream.d.ts +2 -1
  191. package/lib/Utils/baileys-event-stream.d.ts.map +1 -0
  192. package/lib/Utils/baileys-event-stream.js +15 -22
  193. package/lib/Utils/baileys-event-stream.js.map +1 -0
  194. package/lib/Utils/business.d.ts +3 -2
  195. package/lib/Utils/business.d.ts.map +1 -0
  196. package/lib/Utils/business.js +61 -70
  197. package/lib/Utils/business.js.map +1 -0
  198. package/lib/Utils/chat-utils.d.ts +12 -11
  199. package/lib/Utils/chat-utils.d.ts.map +1 -0
  200. package/lib/Utils/chat-utils.js +141 -139
  201. package/lib/Utils/chat-utils.js.map +1 -0
  202. package/lib/Utils/crypto.d.ts +2 -1
  203. package/lib/Utils/crypto.d.ts.map +1 -0
  204. package/lib/Utils/crypto.js +37 -86
  205. package/lib/Utils/crypto.js.map +1 -0
  206. package/lib/Utils/decode-wa-message.d.ts +7 -7
  207. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  208. package/lib/Utils/decode-wa-message.js +43 -43
  209. package/lib/Utils/decode-wa-message.js.map +1 -0
  210. package/lib/Utils/event-buffer.d.ts +3 -2
  211. package/lib/Utils/event-buffer.d.ts.map +1 -0
  212. package/lib/Utils/event-buffer.js +24 -30
  213. package/lib/Utils/event-buffer.js.map +1 -0
  214. package/lib/Utils/generics.d.ts +11 -9
  215. package/lib/Utils/generics.d.ts.map +1 -0
  216. package/lib/Utils/generics.js +88 -111
  217. package/lib/Utils/generics.js.map +1 -0
  218. package/lib/Utils/history.d.ts +4 -3
  219. package/lib/Utils/history.d.ts.map +1 -0
  220. package/lib/Utils/history.js +37 -46
  221. package/lib/Utils/history.js.map +1 -0
  222. package/lib/Utils/index.d.ts +18 -17
  223. package/lib/Utils/index.d.ts.map +1 -0
  224. package/lib/Utils/index.js +18 -33
  225. package/lib/Utils/index.js.map +1 -0
  226. package/lib/Utils/link-preview.d.ts +4 -3
  227. package/lib/Utils/link-preview.d.ts.map +1 -0
  228. package/lib/Utils/link-preview.js +11 -48
  229. package/lib/Utils/link-preview.js.map +1 -0
  230. package/lib/Utils/logger.d.ts +6 -5
  231. package/lib/Utils/logger.d.ts.map +1 -0
  232. package/lib/Utils/logger.js +3 -7
  233. package/lib/Utils/logger.js.map +1 -0
  234. package/lib/Utils/lt-hash.d.ts +9 -8
  235. package/lib/Utils/lt-hash.d.ts.map +1 -0
  236. package/lib/Utils/lt-hash.js +21 -24
  237. package/lib/Utils/lt-hash.js.map +1 -0
  238. package/lib/Utils/make-mutex.d.ts +1 -0
  239. package/lib/Utils/make-mutex.d.ts.map +1 -0
  240. package/lib/Utils/make-mutex.js +5 -9
  241. package/lib/Utils/make-mutex.js.map +1 -0
  242. package/lib/Utils/messages-media.d.ts +20 -11
  243. package/lib/Utils/messages-media.d.ts.map +1 -0
  244. package/lib/Utils/messages-media.js +200 -234
  245. package/lib/Utils/messages-media.js.map +1 -0
  246. package/lib/Utils/messages.d.ts +9 -8
  247. package/lib/Utils/messages.d.ts.map +1 -0
  248. package/lib/Utils/messages.js +217 -199
  249. package/lib/Utils/messages.js.map +1 -0
  250. package/lib/Utils/noise-handler.d.ts +5 -4
  251. package/lib/Utils/noise-handler.d.ts.map +1 -0
  252. package/lib/Utils/noise-handler.js +22 -26
  253. package/lib/Utils/noise-handler.js.map +1 -0
  254. package/lib/Utils/process-message.d.ts +5 -4
  255. package/lib/Utils/process-message.d.ts.map +1 -0
  256. package/lib/Utils/process-message.js +125 -130
  257. package/lib/Utils/process-message.js.map +1 -0
  258. package/lib/Utils/signal.d.ts +5 -4
  259. package/lib/Utils/signal.d.ts.map +1 -0
  260. package/lib/Utils/signal.js +47 -52
  261. package/lib/Utils/signal.js.map +1 -0
  262. package/lib/Utils/use-multi-file-auth-state.d.ts +2 -1
  263. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  264. package/lib/Utils/use-multi-file-auth-state.js +23 -26
  265. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  266. package/lib/Utils/validate-connection.d.ts +4 -3
  267. package/lib/Utils/validate-connection.d.ts.map +1 -0
  268. package/lib/Utils/validate-connection.js +55 -61
  269. package/lib/Utils/validate-connection.js.map +1 -0
  270. package/lib/WABinary/constants.d.ts +5 -4
  271. package/lib/WABinary/constants.d.ts.map +1 -0
  272. package/lib/WABinary/constants.js +1174 -1176
  273. package/lib/WABinary/constants.js.map +1 -0
  274. package/lib/WABinary/decode.d.ts +2 -1
  275. package/lib/WABinary/decode.d.ts.map +1 -0
  276. package/lib/WABinary/decode.js +13 -51
  277. package/lib/WABinary/decode.js.map +1 -0
  278. package/lib/WABinary/encode.d.ts +2 -1
  279. package/lib/WABinary/encode.d.ts.map +1 -0
  280. package/lib/WABinary/encode.js +5 -41
  281. package/lib/WABinary/encode.js.map +1 -0
  282. package/lib/WABinary/generic-utils.d.ts +4 -3
  283. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  284. package/lib/WABinary/generic-utils.js +30 -38
  285. package/lib/WABinary/generic-utils.js.map +1 -0
  286. package/lib/WABinary/index.d.ts +6 -5
  287. package/lib/WABinary/index.d.ts.map +1 -0
  288. package/lib/WABinary/index.js +6 -21
  289. package/lib/WABinary/index.js.map +1 -0
  290. package/lib/WABinary/jid-utils.d.ts +1 -0
  291. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  292. package/lib/WABinary/jid-utils.js +21 -35
  293. package/lib/WABinary/jid-utils.js.map +1 -0
  294. package/lib/WABinary/types.d.ts +2 -1
  295. package/lib/WABinary/types.d.ts.map +1 -0
  296. package/lib/WABinary/types.js +2 -2
  297. package/lib/WABinary/types.js.map +1 -0
  298. package/lib/WAM/BinaryInfo.d.ts +2 -1
  299. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  300. package/lib/WAM/BinaryInfo.js +2 -5
  301. package/lib/WAM/BinaryInfo.js.map +1 -0
  302. package/lib/WAM/constants.d.ts +1 -0
  303. package/lib/WAM/constants.d.ts.map +1 -0
  304. package/lib/WAM/constants.js +4 -6
  305. package/lib/WAM/constants.js.map +1 -0
  306. package/lib/WAM/encode.d.ts +2 -1
  307. package/lib/WAM/encode.d.ts.map +1 -0
  308. package/lib/WAM/encode.js +12 -14
  309. package/lib/WAM/encode.js.map +1 -0
  310. package/lib/WAM/index.d.ts +4 -3
  311. package/lib/WAM/index.d.ts.map +1 -0
  312. package/lib/WAM/index.js +4 -19
  313. package/lib/WAM/index.js.map +1 -0
  314. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +4 -3
  315. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  316. package/lib/WAUSync/Protocols/USyncContactProtocol.js +6 -9
  317. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  318. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +3 -2
  319. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  320. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +9 -12
  321. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  322. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +3 -2
  323. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  324. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +7 -10
  325. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  326. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +3 -2
  327. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  328. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +7 -11
  329. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  330. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +4 -3
  331. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  332. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +19 -21
  333. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  334. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -2
  335. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  336. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +2 -5
  337. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  338. package/lib/WAUSync/Protocols/index.d.ts +5 -4
  339. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  340. package/lib/WAUSync/Protocols/index.js +5 -20
  341. package/lib/WAUSync/Protocols/index.js.map +1 -0
  342. package/lib/WAUSync/USyncQuery.d.ts +4 -3
  343. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  344. package/lib/WAUSync/USyncQuery.js +18 -20
  345. package/lib/WAUSync/USyncQuery.js.map +1 -0
  346. package/lib/WAUSync/USyncUser.d.ts +6 -5
  347. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  348. package/lib/WAUSync/USyncUser.js +2 -5
  349. package/lib/WAUSync/USyncUser.js.map +1 -0
  350. package/lib/WAUSync/index.d.ts +4 -3
  351. package/lib/WAUSync/index.d.ts.map +1 -0
  352. package/lib/WAUSync/index.js +4 -19
  353. package/lib/WAUSync/index.js.map +1 -0
  354. package/lib/index.d.ts +9 -8
  355. package/lib/index.d.ts.map +1 -0
  356. package/lib/index.js +11 -30
  357. package/lib/index.js.map +1 -0
  358. package/package.json +26 -28
  359. package/WASignalGroup/GroupProtocol.js +0 -1697
  360. package/WASignalGroup/ciphertext_message.js +0 -16
  361. package/WASignalGroup/group_cipher.js +0 -120
  362. package/WASignalGroup/group_session_builder.js +0 -46
  363. package/WASignalGroup/index.js +0 -5
  364. package/WASignalGroup/keyhelper.js +0 -21
  365. package/WASignalGroup/protobufs.js +0 -3
  366. package/WASignalGroup/queue_job.js +0 -69
  367. package/WASignalGroup/sender_chain_key.js +0 -50
  368. package/WASignalGroup/sender_key_distribution_message.js +0 -78
  369. package/WASignalGroup/sender_key_message.js +0 -92
  370. package/WASignalGroup/sender_key_name.js +0 -70
  371. package/WASignalGroup/sender_key_record.js +0 -56
  372. package/WASignalGroup/sender_key_state.js +0 -129
@@ -1,21 +1,15 @@
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.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
7
- exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
8
- const boom_1 = require("@hapi/boom");
9
- const axios_1 = __importDefault(require("axios"));
10
- const crypto_1 = require("crypto");
11
- const fs_1 = require("fs");
12
- const WAProto_1 = require("../../WAProto");
13
- const Defaults_1 = require("../Defaults");
14
- const Types_1 = require("../Types");
15
- const WABinary_1 = require("../WABinary");
16
- const crypto_2 = require("./crypto");
17
- const generics_1 = require("./generics");
18
- const messages_media_1 = require("./messages-media");
1
+ import { Boom } from '@hapi/boom';
2
+ import axios from 'axios';
3
+ import { randomBytes } from 'crypto';
4
+ import { promises as fs } from 'fs';
5
+ import {} from 'stream';
6
+ import { proto } from '../../WAProto/index.js';
7
+ import { MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults/index.js';
8
+ import { WAMessageStatus, WAProto } from '../Types/index.js';
9
+ import { isJidGroup, isJidNewsletter, isJidStatusBroadcast, jidNormalizedUser } from '../WABinary/index.js';
10
+ import { sha256 } from './crypto.js';
11
+ import { generateMessageIDV2, getKeyAuthor, unixTimestampSeconds } from './generics.js';
12
+ import { downloadContentFromMessage, encryptedStream, generateThumbnail, getAudioDuration, getAudioWaveform, getRawMediaUploadData } from './messages-media.js';
19
13
  const MIMETYPE_MAP = {
20
14
  image: 'image/jpeg',
21
15
  video: 'video/mp4',
@@ -25,21 +19,20 @@ const MIMETYPE_MAP = {
25
19
  'product-catalog-image': 'image/jpeg'
26
20
  };
27
21
  const MessageTypeProto = {
28
- image: Types_1.WAProto.Message.ImageMessage,
29
- video: Types_1.WAProto.Message.VideoMessage,
30
- audio: Types_1.WAProto.Message.AudioMessage,
31
- sticker: Types_1.WAProto.Message.StickerMessage,
32
- document: Types_1.WAProto.Message.DocumentMessage
22
+ image: WAProto.Message.ImageMessage,
23
+ video: WAProto.Message.VideoMessage,
24
+ audio: WAProto.Message.AudioMessage,
25
+ sticker: WAProto.Message.StickerMessage,
26
+ document: WAProto.Message.DocumentMessage
33
27
  };
34
28
  /**
35
29
  * Uses a regex to test whether the string contains a URL, and returns the URL if it does.
36
30
  * @param text eg. hello https://google.com
37
31
  * @returns the URL, eg. https://google.com
38
32
  */
39
- const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
40
- exports.extractUrlFromText = extractUrlFromText;
41
- const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
42
- const url = (0, exports.extractUrlFromText)(text);
33
+ export const extractUrlFromText = (text) => text.match(URL_REGEX)?.[0];
34
+ export const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
35
+ const url = extractUrlFromText(text);
43
36
  if (!!getUrlInfo && url) {
44
37
  try {
45
38
  const urlInfo = await getUrlInfo(url);
@@ -47,11 +40,10 @@ const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
47
40
  }
48
41
  catch (error) {
49
42
  // ignore if fails
50
- logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
43
+ logger?.warn({ trace: error.stack }, 'url generation failed');
51
44
  }
52
45
  }
53
46
  };
54
- exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
55
47
  const assertColor = async (color) => {
56
48
  let assertedColor;
57
49
  if (typeof color === 'number') {
@@ -66,16 +58,16 @@ const assertColor = async (color) => {
66
58
  return assertedColor;
67
59
  }
68
60
  };
69
- const prepareWAMessageMedia = async (message, options) => {
61
+ export const prepareWAMessageMedia = async (message, options) => {
70
62
  const logger = options.logger;
71
63
  let mediaType;
72
- for (const key of Defaults_1.MEDIA_KEYS) {
64
+ for (const key of MEDIA_KEYS) {
73
65
  if (key in message) {
74
66
  mediaType = key;
75
67
  }
76
68
  }
77
69
  if (!mediaType) {
78
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
70
+ throw new Boom('Invalid media type', { statusCode: 400 });
79
71
  }
80
72
  const uploadData = {
81
73
  ...message,
@@ -87,7 +79,6 @@ const prepareWAMessageMedia = async (message, options) => {
87
79
  'url' in uploadData.media &&
88
80
  !!uploadData.media.url &&
89
81
  !!options.mediaCache &&
90
- // generate the key
91
82
  mediaType + ':' + uploadData.media.url.toString();
92
83
  if (mediaType === 'document' && !uploadData.fileName) {
93
84
  uploadData.fileName = 'file';
@@ -95,28 +86,58 @@ const prepareWAMessageMedia = async (message, options) => {
95
86
  if (!uploadData.mimetype) {
96
87
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
97
88
  }
98
- // check for cache hit
99
89
  if (cacheableKey) {
100
90
  const mediaBuff = options.mediaCache.get(cacheableKey);
101
91
  if (mediaBuff) {
102
- logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
103
- const obj = Types_1.WAProto.Message.decode(mediaBuff);
92
+ logger?.debug({ cacheableKey }, 'got media cache hit');
93
+ const obj = WAProto.Message.decode(mediaBuff);
104
94
  const key = `${mediaType}Message`;
105
95
  Object.assign(obj[key], { ...uploadData, media: undefined });
106
96
  return obj;
107
97
  }
108
98
  }
99
+ const isNewsletter = !!options.jid && isJidNewsletter(options.jid);
100
+ if (isNewsletter) {
101
+ logger?.info({ key: cacheableKey }, 'Preparing raw media for newsletter');
102
+ const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger);
103
+ const fileSha256B64 = fileSha256.toString('base64');
104
+ const { mediaUrl, directPath } = await options.upload(filePath, {
105
+ fileEncSha256B64: fileSha256B64,
106
+ mediaType: mediaType,
107
+ timeoutMs: options.mediaUploadTimeoutMs
108
+ });
109
+ await fs.unlink(filePath);
110
+ const obj = WAProto.Message.fromObject({
111
+ // todo: add more support here
112
+ [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
113
+ url: mediaUrl,
114
+ directPath,
115
+ fileSha256,
116
+ fileLength,
117
+ ...uploadData,
118
+ media: undefined
119
+ })
120
+ });
121
+ if (uploadData.ptv) {
122
+ obj.ptvMessage = obj.videoMessage;
123
+ delete obj.videoMessage;
124
+ }
125
+ if (cacheableKey) {
126
+ logger?.debug({ cacheableKey }, 'set cache');
127
+ options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
128
+ }
129
+ return obj;
130
+ }
109
131
  const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
110
132
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData['jpegThumbnail'] === 'undefined';
111
133
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
112
134
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
113
135
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
114
- const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await (0, messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
136
+ const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream(uploadData.media, options.mediaTypeOverride || mediaType, {
115
137
  logger,
116
138
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
117
139
  opts: options.options
118
140
  });
119
- // url safe Base64 encode the SHA256 hash of the body
120
141
  const fileEncSha256B64 = fileEncSha256.toString('base64');
121
142
  const [{ mediaUrl, directPath }] = await Promise.all([
122
143
  (async () => {
@@ -125,51 +146,51 @@ const prepareWAMessageMedia = async (message, options) => {
125
146
  mediaType,
126
147
  timeoutMs: options.mediaUploadTimeoutMs
127
148
  });
128
- logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
149
+ logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
129
150
  return result;
130
151
  })(),
131
152
  (async () => {
132
153
  try {
133
154
  if (requiresThumbnailComputation) {
134
- const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(originalFilePath, mediaType, options);
155
+ const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options);
135
156
  uploadData.jpegThumbnail = thumbnail;
136
157
  if (!uploadData.width && originalImageDimensions) {
137
158
  uploadData.width = originalImageDimensions.width;
138
159
  uploadData.height = originalImageDimensions.height;
139
- logger === null || logger === void 0 ? void 0 : logger.debug('set dimensions');
160
+ logger?.debug('set dimensions');
140
161
  }
141
- logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
162
+ logger?.debug('generated thumbnail');
142
163
  }
143
164
  if (requiresDurationComputation) {
144
- uploadData.seconds = await (0, messages_media_1.getAudioDuration)(originalFilePath);
145
- logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
165
+ uploadData.seconds = await getAudioDuration(originalFilePath);
166
+ logger?.debug('computed audio duration');
146
167
  }
147
168
  if (requiresWaveformProcessing) {
148
- uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(originalFilePath, logger);
149
- logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
169
+ uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
170
+ logger?.debug('processed waveform');
150
171
  }
151
172
  if (requiresAudioBackground) {
152
173
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
153
- logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
174
+ logger?.debug('computed backgroundColor audio status');
154
175
  }
155
176
  }
156
177
  catch (error) {
157
- logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
178
+ logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
158
179
  }
159
180
  })()
160
181
  ]).finally(async () => {
161
182
  try {
162
- await fs_1.promises.unlink(encFilePath);
183
+ await fs.unlink(encFilePath);
163
184
  if (originalFilePath) {
164
- await fs_1.promises.unlink(originalFilePath);
185
+ await fs.unlink(originalFilePath);
165
186
  }
166
- logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
187
+ logger?.debug('removed tmp files');
167
188
  }
168
189
  catch (error) {
169
- logger === null || logger === void 0 ? void 0 : logger.warn('failed to remove tmp file');
190
+ logger?.warn('failed to remove tmp file');
170
191
  }
171
192
  });
172
- const obj = Types_1.WAProto.Message.fromObject({
193
+ const obj = WAProto.Message.fromObject({
173
194
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
174
195
  url: mediaUrl,
175
196
  directPath,
@@ -177,7 +198,7 @@ const prepareWAMessageMedia = async (message, options) => {
177
198
  fileEncSha256,
178
199
  fileSha256,
179
200
  fileLength,
180
- mediaKeyTimestamp: (0, generics_1.unixTimestampSeconds)(),
201
+ mediaKeyTimestamp: unixTimestampSeconds(),
181
202
  ...uploadData,
182
203
  media: undefined
183
204
  })
@@ -187,67 +208,63 @@ const prepareWAMessageMedia = async (message, options) => {
187
208
  delete obj.videoMessage;
188
209
  }
189
210
  if (cacheableKey) {
190
- logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
191
- options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
211
+ logger?.debug({ cacheableKey }, 'set cache');
212
+ options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
192
213
  }
193
214
  return obj;
194
215
  };
195
- exports.prepareWAMessageMedia = prepareWAMessageMedia;
196
- const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
216
+ export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
197
217
  ephemeralExpiration = ephemeralExpiration || 0;
198
218
  const content = {
199
219
  ephemeralMessage: {
200
220
  message: {
201
221
  protocolMessage: {
202
- type: Types_1.WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
222
+ type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
203
223
  ephemeralExpiration
204
224
  }
205
225
  }
206
226
  }
207
227
  };
208
- return Types_1.WAProto.Message.fromObject(content);
228
+ return WAProto.Message.fromObject(content);
209
229
  };
210
- exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
211
230
  /**
212
231
  * Generate forwarded message content like WA does
213
232
  * @param message the message to forward
214
233
  * @param options.forceForward will show the message as forwarded even if it is from you
215
234
  */
216
- const generateForwardMessageContent = (message, forceForward) => {
217
- var _a;
235
+ export const generateForwardMessageContent = (message, forceForward) => {
218
236
  let content = message.message;
219
237
  if (!content) {
220
- throw new boom_1.Boom('no content in message', { statusCode: 400 });
238
+ throw new Boom('no content in message', { statusCode: 400 });
221
239
  }
222
240
  // hacky copy
223
- content = (0, exports.normalizeMessageContent)(content);
224
- content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
241
+ content = normalizeMessageContent(content);
242
+ content = proto.Message.decode(proto.Message.encode(content).finish());
225
243
  let key = Object.keys(content)[0];
226
- let score = ((_a = content[key].contextInfo) === null || _a === void 0 ? void 0 : _a.forwardingScore) || 0;
244
+ let score = content?.[key]?.contextInfo?.forwardingScore || 0;
227
245
  score += message.key.fromMe && !forceForward ? 0 : 1;
228
246
  if (key === 'conversation') {
229
247
  content.extendedTextMessage = { text: content[key] };
230
248
  delete content.conversation;
231
249
  key = 'extendedTextMessage';
232
250
  }
251
+ const key_ = content?.[key];
233
252
  if (score > 0) {
234
- content[key].contextInfo = { forwardingScore: score, isForwarded: true };
253
+ key_.contextInfo = { forwardingScore: score, isForwarded: true };
235
254
  }
236
255
  else {
237
- content[key].contextInfo = {};
256
+ key_.contextInfo = {};
238
257
  }
239
258
  return content;
240
259
  };
241
- exports.generateForwardMessageContent = generateForwardMessageContent;
242
- const generateWAMessageContent = async (message, options) => {
243
- var _a;
244
- var _b, _c;
260
+ export const generateWAMessageContent = async (message, options) => {
261
+ var _a, _b;
245
262
  let m = {};
246
263
  if ('text' in message) {
247
264
  const extContent = { text: message.text };
248
265
  let urlInfo = message.linkPreview;
249
266
  if (typeof urlInfo === 'undefined') {
250
- urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
267
+ urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger);
251
268
  }
252
269
  if (urlInfo) {
253
270
  extContent.matchedText = urlInfo['matched-text'];
@@ -277,40 +294,40 @@ const generateWAMessageContent = async (message, options) => {
277
294
  else if ('contacts' in message) {
278
295
  const contactLen = message.contacts.contacts.length;
279
296
  if (!contactLen) {
280
- throw new boom_1.Boom('require atleast 1 contact', { statusCode: 400 });
297
+ throw new Boom('require atleast 1 contact', { statusCode: 400 });
281
298
  }
282
299
  if (contactLen === 1) {
283
- m.contactMessage = Types_1.WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
300
+ m.contactMessage = WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
284
301
  }
285
302
  else {
286
- m.contactsArrayMessage = Types_1.WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
303
+ m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
287
304
  }
288
305
  }
289
306
  else if ('location' in message) {
290
- m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
307
+ m.locationMessage = WAProto.Message.LocationMessage.fromObject(message.location);
291
308
  }
292
309
  else if ('react' in message) {
293
310
  if (!message.react.senderTimestampMs) {
294
311
  message.react.senderTimestampMs = Date.now();
295
312
  }
296
- m.reactionMessage = Types_1.WAProto.Message.ReactionMessage.fromObject(message.react);
313
+ m.reactionMessage = WAProto.Message.ReactionMessage.fromObject(message.react);
297
314
  }
298
315
  else if ('delete' in message) {
299
316
  m.protocolMessage = {
300
317
  key: message.delete,
301
- type: Types_1.WAProto.Message.ProtocolMessage.Type.REVOKE
318
+ type: WAProto.Message.ProtocolMessage.Type.REVOKE
302
319
  };
303
320
  }
304
321
  else if ('forward' in message) {
305
- m = (0, exports.generateForwardMessageContent)(message.forward, message.force);
322
+ m = generateForwardMessageContent(message.forward, message.force);
306
323
  }
307
324
  else if ('disappearingMessagesInChat' in message) {
308
325
  const exp = typeof message.disappearingMessagesInChat === 'boolean'
309
326
  ? message.disappearingMessagesInChat
310
- ? Defaults_1.WA_DEFAULT_EPHEMERAL
327
+ ? WA_DEFAULT_EPHEMERAL
311
328
  : 0
312
329
  : message.disappearingMessagesInChat;
313
- m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
330
+ m = prepareDisappearingMessageSettingContent(exp);
314
331
  }
315
332
  else if ('groupInvite' in message) {
316
333
  m.groupInviteMessage = {};
@@ -324,7 +341,7 @@ const generateWAMessageContent = async (message, options) => {
324
341
  if (options.getProfilePicUrl) {
325
342
  const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
326
343
  if (pfpUrl) {
327
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
344
+ const resp = await axios.get(pfpUrl, { responseType: 'arraybuffer' });
328
345
  if (resp.status === 200) {
329
346
  m.groupInviteMessage.jpegThumbnail = resp.data;
330
347
  }
@@ -352,18 +369,18 @@ const generateWAMessageContent = async (message, options) => {
352
369
  m.buttonsResponseMessage = {
353
370
  selectedButtonId: message.buttonReply.id,
354
371
  selectedDisplayText: message.buttonReply.displayText,
355
- type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
372
+ type: proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
356
373
  };
357
374
  break;
358
375
  }
359
376
  }
360
377
  else if ('ptv' in message && message.ptv) {
361
- const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
378
+ const { videoMessage } = await prepareWAMessageMedia({ video: message.video }, options);
362
379
  m.ptvMessage = videoMessage;
363
380
  }
364
381
  else if ('product' in message) {
365
- const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
366
- m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
382
+ const { imageMessage } = await prepareWAMessageMedia({ image: message.product.productImage }, options);
383
+ m.productMessage = WAProto.Message.ProductMessage.fromObject({
367
384
  ...message,
368
385
  product: {
369
386
  ...message.product,
@@ -375,19 +392,19 @@ const generateWAMessageContent = async (message, options) => {
375
392
  m.listResponseMessage = { ...message.listReply };
376
393
  }
377
394
  else if ('poll' in message) {
378
- (_b = message.poll).selectableCount || (_b.selectableCount = 0);
379
- (_c = message.poll).toAnnouncementGroup || (_c.toAnnouncementGroup = false);
395
+ (_a = message.poll).selectableCount || (_a.selectableCount = 0);
396
+ (_b = message.poll).toAnnouncementGroup || (_b.toAnnouncementGroup = false);
380
397
  if (!Array.isArray(message.poll.values)) {
381
- throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
398
+ throw new Boom('Invalid poll values', { statusCode: 400 });
382
399
  }
383
400
  if (message.poll.selectableCount < 0 || message.poll.selectableCount > message.poll.values.length) {
384
- throw new boom_1.Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, {
401
+ throw new Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, {
385
402
  statusCode: 400
386
403
  });
387
404
  }
388
405
  m.messageContextInfo = {
389
406
  // encKey
390
- messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32)
407
+ messageSecret: message.poll.messageSecret || randomBytes(32)
391
408
  };
392
409
  const pollCreationMessage = {
393
410
  name: message.poll.name,
@@ -399,34 +416,41 @@ const generateWAMessageContent = async (message, options) => {
399
416
  m.pollCreationMessageV2 = pollCreationMessage;
400
417
  }
401
418
  else {
402
- if (message.poll.selectableCount > 0) {
419
+ if (message.poll.selectableCount === 1) {
403
420
  //poll v3 is for single select polls
404
421
  m.pollCreationMessageV3 = pollCreationMessage;
405
422
  }
406
423
  else {
407
- // poll v3 for multiple choice polls
424
+ // poll for multiple choice polls
408
425
  m.pollCreationMessage = pollCreationMessage;
409
426
  }
410
427
  }
411
428
  }
412
429
  else if ('sharePhoneNumber' in message) {
413
430
  m.protocolMessage = {
414
- type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
431
+ type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
415
432
  };
416
433
  }
417
434
  else if ('requestPhoneNumber' in message) {
418
435
  m.requestPhoneNumberMessage = {};
419
436
  }
420
437
  else {
421
- m = await (0, exports.prepareWAMessageMedia)(message, options);
438
+ m = await prepareWAMessageMedia(message, options);
422
439
  }
423
440
  if ('viewOnce' in message && !!message.viewOnce) {
424
441
  m = { viewOnceMessage: { message: m } };
425
442
  }
426
- if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
427
- const [messageType] = Object.keys(m);
428
- m[messageType].contextInfo = m[messageType] || {};
429
- m[messageType].contextInfo.mentionedJid = message.mentions;
443
+ if ('mentions' in message && message.mentions?.length) {
444
+ const messageType = Object.keys(m)[0];
445
+ const key = m[messageType];
446
+ if ('contextInfo' in key && !!key.contextInfo) {
447
+ key.contextInfo.mentionedJid = message.mentions;
448
+ }
449
+ else if (key) {
450
+ key.contextInfo = {
451
+ mentionedJid: message.mentions
452
+ };
453
+ }
430
454
  }
431
455
  if ('edit' in message) {
432
456
  m = {
@@ -434,43 +458,47 @@ const generateWAMessageContent = async (message, options) => {
434
458
  key: message.edit,
435
459
  editedMessage: m,
436
460
  timestampMs: Date.now(),
437
- type: Types_1.WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
461
+ type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
438
462
  }
439
463
  };
440
464
  }
441
465
  if ('contextInfo' in message && !!message.contextInfo) {
442
- const [messageType] = Object.keys(m);
443
- m[messageType] = m[messageType] || {};
444
- m[messageType].contextInfo = message.contextInfo;
466
+ const messageType = Object.keys(m)[0];
467
+ const key = m[messageType];
468
+ if ('contextInfo' in key && !!key.contextInfo) {
469
+ key.contextInfo = { ...key.contextInfo, ...message.contextInfo };
470
+ }
471
+ else if (key) {
472
+ key.contextInfo = message.contextInfo;
473
+ }
445
474
  }
446
- return Types_1.WAProto.Message.fromObject(m);
475
+ return WAProto.Message.fromObject(m);
447
476
  };
448
- exports.generateWAMessageContent = generateWAMessageContent;
449
- const generateWAMessageFromContent = (jid, message, options) => {
477
+ export const generateWAMessageFromContent = (jid, message, options) => {
450
478
  // set timestamp to now
451
479
  // if not specified
452
480
  if (!options.timestamp) {
453
481
  options.timestamp = new Date();
454
482
  }
455
- const innerMessage = (0, exports.normalizeMessageContent)(message);
456
- const key = (0, exports.getContentType)(innerMessage);
457
- const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
483
+ const innerMessage = normalizeMessageContent(message);
484
+ const key = getContentType(innerMessage);
485
+ const timestamp = unixTimestampSeconds(options.timestamp);
458
486
  const { quoted, userJid } = options;
459
- if (quoted) {
487
+ if (quoted && !isJidNewsletter(jid)) {
460
488
  const participant = quoted.key.fromMe
461
489
  ? userJid
462
490
  : quoted.participant || quoted.key.participant || quoted.key.remoteJid;
463
- let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
491
+ let quotedMsg = normalizeMessageContent(quoted.message);
464
492
  if (quotedMsg) {
465
- const msgType = (0, exports.getContentType)(quotedMsg);
493
+ const msgType = getContentType(quotedMsg);
466
494
  // strip any redundant properties
467
- quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
495
+ quotedMsg = proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
468
496
  const quotedContent = quotedMsg[msgType];
469
497
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
470
498
  delete quotedContent.contextInfo;
471
499
  }
472
- const contextInfo = innerMessage[key].contextInfo || {};
473
- contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
500
+ const contextInfo = ('contextInfo' in innerMessage[key] && innerMessage[key]?.contextInfo) || {};
501
+ contextInfo.participant = jidNormalizedUser(participant);
474
502
  contextInfo.stanzaId = quoted.key.id;
475
503
  contextInfo.quotedMessage = quotedMsg;
476
504
  // if a participant is quoted, then it must be a group
@@ -478,61 +506,64 @@ const generateWAMessageFromContent = (jid, message, options) => {
478
506
  if (jid !== quoted.key.remoteJid) {
479
507
  contextInfo.remoteJid = quoted.key.remoteJid;
480
508
  }
481
- innerMessage[key].contextInfo = contextInfo;
509
+ if (contextInfo && innerMessage[key]) {
510
+ /* @ts-ignore */
511
+ innerMessage[key].contextInfo = contextInfo;
512
+ }
482
513
  }
483
514
  }
484
515
  if (
485
516
  // if we want to send a disappearing message
486
- !!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
517
+ !!options?.ephemeralExpiration &&
487
518
  // and it's not a protocol message -- delete, toggle disappear message
488
519
  key !== 'protocolMessage' &&
489
520
  // already not converted to disappearing message
490
- key !== 'ephemeralMessage') {
521
+ key !== 'ephemeralMessage' &&
522
+ // newsletters don't support ephemeral messages
523
+ !isJidNewsletter(jid)) {
524
+ /* @ts-ignore */
491
525
  innerMessage[key].contextInfo = {
492
526
  ...(innerMessage[key].contextInfo || {}),
493
- expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL
527
+ expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL
494
528
  //ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
495
529
  };
496
530
  }
497
- message = Types_1.WAProto.Message.fromObject(message);
531
+ message = WAProto.Message.fromObject(message);
498
532
  const messageJSON = {
499
533
  key: {
500
534
  remoteJid: jid,
501
535
  fromMe: true,
502
- id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageIDV2)()
536
+ id: options?.messageId || generateMessageIDV2()
503
537
  },
504
538
  message: message,
505
539
  messageTimestamp: timestamp,
506
540
  messageStubParameters: [],
507
- participant: (0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidStatusBroadcast)(jid) ? userJid : undefined,
508
- status: Types_1.WAMessageStatus.PENDING
541
+ participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined,
542
+ status: WAMessageStatus.PENDING
509
543
  };
510
- return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
544
+ return WAProto.WebMessageInfo.fromObject(messageJSON);
511
545
  };
512
- exports.generateWAMessageFromContent = generateWAMessageFromContent;
513
- const generateWAMessage = async (jid, content, options) => {
514
- var _a;
546
+ export const generateWAMessage = async (jid, content, options) => {
515
547
  // ensure msg ID is with every log
516
- options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
517
- return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, options), options);
548
+ options.logger = options?.logger?.child({ msgId: options.messageId });
549
+ // Pass jid in the options to generateWAMessageContent
550
+ return generateWAMessageFromContent(jid, await generateWAMessageContent(content, { ...options, jid }), options);
518
551
  };
519
- exports.generateWAMessage = generateWAMessage;
520
552
  /** Get the key to access the true type of content */
521
- const getContentType = (content) => {
553
+ export const getContentType = (content) => {
522
554
  if (content) {
523
555
  const keys = Object.keys(content);
524
556
  const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage');
525
557
  return key;
526
558
  }
527
559
  };
528
- exports.getContentType = getContentType;
529
560
  /**
530
561
  * Normalizes ephemeral, view once messages to regular message content
531
562
  * Eg. image messages in ephemeral messages, in view once messages etc.
532
563
  * @param content
533
564
  * @returns
534
565
  */
535
- const normalizeMessageContent = (content) => {
566
+ export const normalizeMessageContent = (content) => {
536
567
  if (!content) {
537
568
  return undefined;
538
569
  }
@@ -546,21 +577,19 @@ const normalizeMessageContent = (content) => {
546
577
  }
547
578
  return content;
548
579
  function getFutureProofMessage(message) {
549
- return ((message === null || message === void 0 ? void 0 : message.ephemeralMessage) ||
550
- (message === null || message === void 0 ? void 0 : message.viewOnceMessage) ||
551
- (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage) ||
552
- (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2) ||
553
- (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension) ||
554
- (message === null || message === void 0 ? void 0 : message.editedMessage));
580
+ return (message?.ephemeralMessage ||
581
+ message?.viewOnceMessage ||
582
+ message?.documentWithCaptionMessage ||
583
+ message?.viewOnceMessageV2 ||
584
+ message?.viewOnceMessageV2Extension ||
585
+ message?.editedMessage);
555
586
  }
556
587
  };
557
- exports.normalizeMessageContent = normalizeMessageContent;
558
588
  /**
559
589
  * Extract the true message content from a message
560
590
  * Eg. extracts the inner message from a disappearing message/view once message
561
591
  */
562
- const extractMessageContent = (content) => {
563
- var _a, _b, _c, _d, _e, _f;
592
+ export const extractMessageContent = (content) => {
564
593
  const extractFromTemplateMessage = (msg) => {
565
594
  if (msg.imageMessage) {
566
595
  return { imageMessage: msg.imageMessage };
@@ -580,26 +609,25 @@ const extractMessageContent = (content) => {
580
609
  };
581
610
  }
582
611
  };
583
- content = (0, exports.normalizeMessageContent)(content);
584
- if (content === null || content === void 0 ? void 0 : content.buttonsMessage) {
612
+ content = normalizeMessageContent(content);
613
+ if (content?.buttonsMessage) {
585
614
  return extractFromTemplateMessage(content.buttonsMessage);
586
615
  }
587
- if ((_a = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _a === void 0 ? void 0 : _a.hydratedFourRowTemplate) {
588
- return extractFromTemplateMessage((_b = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _b === void 0 ? void 0 : _b.hydratedFourRowTemplate);
616
+ if (content?.templateMessage?.hydratedFourRowTemplate) {
617
+ return extractFromTemplateMessage(content?.templateMessage?.hydratedFourRowTemplate);
589
618
  }
590
- if ((_c = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _c === void 0 ? void 0 : _c.hydratedTemplate) {
591
- return extractFromTemplateMessage((_d = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _d === void 0 ? void 0 : _d.hydratedTemplate);
619
+ if (content?.templateMessage?.hydratedTemplate) {
620
+ return extractFromTemplateMessage(content?.templateMessage?.hydratedTemplate);
592
621
  }
593
- if ((_e = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _e === void 0 ? void 0 : _e.fourRowTemplate) {
594
- return extractFromTemplateMessage((_f = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _f === void 0 ? void 0 : _f.fourRowTemplate);
622
+ if (content?.templateMessage?.fourRowTemplate) {
623
+ return extractFromTemplateMessage(content?.templateMessage?.fourRowTemplate);
595
624
  }
596
625
  return content;
597
626
  };
598
- exports.extractMessageContent = extractMessageContent;
599
627
  /**
600
628
  * Returns the device predicted by message ID
601
629
  */
602
- const getDevice = (id) => /^3A.{18}$/.test(id)
630
+ export const getDevice = (id) => /^3A.{18}$/.test(id)
603
631
  ? 'ios'
604
632
  : /^3E.{20}$/.test(id)
605
633
  ? 'web'
@@ -608,9 +636,8 @@ const getDevice = (id) => /^3A.{18}$/.test(id)
608
636
  : /^(3F|.{18}$)/.test(id)
609
637
  ? 'desktop'
610
638
  : 'unknown';
611
- exports.getDevice = getDevice;
612
639
  /** Upserts a receipt in the message */
613
- const updateMessageWithReceipt = (msg, receipt) => {
640
+ export const updateMessageWithReceipt = (msg, receipt) => {
614
641
  msg.userReceipt = msg.userReceipt || [];
615
642
  const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
616
643
  if (recp) {
@@ -620,42 +647,36 @@ const updateMessageWithReceipt = (msg, receipt) => {
620
647
  msg.userReceipt.push(receipt);
621
648
  }
622
649
  };
623
- exports.updateMessageWithReceipt = updateMessageWithReceipt;
624
650
  /** Update the message with a new reaction */
625
- const updateMessageWithReaction = (msg, reaction) => {
626
- const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
627
- const reactions = (msg.reactions || []).filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
628
- if (reaction.text) {
629
- reactions.push(reaction);
630
- }
651
+ export const updateMessageWithReaction = (msg, reaction) => {
652
+ const authorID = getKeyAuthor(reaction.key);
653
+ const reactions = (msg.reactions || []).filter(r => getKeyAuthor(r.key) !== authorID);
654
+ reaction.text = reaction.text || '';
655
+ reactions.push(reaction);
631
656
  msg.reactions = reactions;
632
657
  };
633
- exports.updateMessageWithReaction = updateMessageWithReaction;
634
658
  /** Update the message with a new poll update */
635
- const updateMessageWithPollUpdate = (msg, update) => {
636
- var _a, _b;
637
- const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
638
- const reactions = (msg.pollUpdates || []).filter(r => (0, generics_1.getKeyAuthor)(r.pollUpdateMessageKey) !== authorID);
639
- if ((_b = (_a = update.vote) === null || _a === void 0 ? void 0 : _a.selectedOptions) === null || _b === void 0 ? void 0 : _b.length) {
659
+ export const updateMessageWithPollUpdate = (msg, update) => {
660
+ const authorID = getKeyAuthor(update.pollUpdateMessageKey);
661
+ const reactions = (msg.pollUpdates || []).filter(r => getKeyAuthor(r.pollUpdateMessageKey) !== authorID);
662
+ if (update.vote?.selectedOptions?.length) {
640
663
  reactions.push(update);
641
664
  }
642
665
  msg.pollUpdates = reactions;
643
666
  };
644
- exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
645
667
  /**
646
668
  * Aggregates all poll updates in a poll.
647
669
  * @param msg the poll creation message
648
670
  * @param meId your jid
649
671
  * @returns A list of options & their voters
650
672
  */
651
- function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
652
- var _a, _b, _c;
653
- const opts = ((_a = message === null || message === void 0 ? void 0 : message.pollCreationMessage) === null || _a === void 0 ? void 0 : _a.options) ||
654
- ((_b = message === null || message === void 0 ? void 0 : message.pollCreationMessageV2) === null || _b === void 0 ? void 0 : _b.options) ||
655
- ((_c = message === null || message === void 0 ? void 0 : message.pollCreationMessageV3) === null || _c === void 0 ? void 0 : _c.options) ||
673
+ export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
674
+ const opts = message?.pollCreationMessage?.options ||
675
+ message?.pollCreationMessageV2?.options ||
676
+ message?.pollCreationMessageV3?.options ||
656
677
  [];
657
678
  const voteHashMap = opts.reduce((acc, opt) => {
658
- const hash = (0, crypto_2.sha256)(Buffer.from(opt.optionName || '')).toString();
679
+ const hash = sha256(Buffer.from(opt.optionName || '')).toString();
659
680
  acc[hash] = {
660
681
  name: opt.optionName || '',
661
682
  voters: []
@@ -677,13 +698,13 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
677
698
  };
678
699
  data = voteHashMap[hash];
679
700
  }
680
- voteHashMap[hash].voters.push((0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey, meId));
701
+ voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId));
681
702
  }
682
703
  }
683
704
  return Object.values(voteHashMap);
684
705
  }
685
706
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
686
- const aggregateMessageKeysNotFromMe = (keys) => {
707
+ export const aggregateMessageKeysNotFromMe = (keys) => {
687
708
  const keyMap = {};
688
709
  for (const { remoteJid, id, participant, fromMe } of keys) {
689
710
  if (!fromMe) {
@@ -700,17 +721,15 @@ const aggregateMessageKeysNotFromMe = (keys) => {
700
721
  }
701
722
  return Object.values(keyMap);
702
723
  };
703
- exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
704
724
  const REUPLOAD_REQUIRED_STATUS = [410, 404];
705
725
  /**
706
726
  * Downloads the given message. Throws an error if it's not a media message
707
727
  */
708
- const downloadMediaMessage = async (message, type, options, ctx) => {
728
+ export const downloadMediaMessage = async (message, type, options, ctx) => {
709
729
  const result = await downloadMsg().catch(async (error) => {
710
- var _a;
711
730
  if (ctx &&
712
- axios_1.default.isAxiosError(error) && // check if the message requires a reupload
713
- REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
731
+ axios.isAxiosError(error) && // check if the message requires a reupload
732
+ REUPLOAD_REQUIRED_STATUS.includes(error.response?.status)) {
714
733
  ctx.logger.info({ key: message.key }, 'sending reupload media request...');
715
734
  // request reupload
716
735
  message = await ctx.reuploadRequest(message);
@@ -721,15 +740,15 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
721
740
  });
722
741
  return result;
723
742
  async function downloadMsg() {
724
- const mContent = (0, exports.extractMessageContent)(message.message);
743
+ const mContent = extractMessageContent(message.message);
725
744
  if (!mContent) {
726
- throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
745
+ throw new Boom('No message present', { statusCode: 400, data: message });
727
746
  }
728
- const contentType = (0, exports.getContentType)(mContent);
729
- let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
747
+ const contentType = getContentType(mContent);
748
+ let mediaType = contentType?.replace('Message', '');
730
749
  const media = mContent[contentType];
731
750
  if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
732
- throw new boom_1.Boom(`"${contentType}" message is not a media message`);
751
+ throw new Boom(`"${contentType}" message is not a media message`);
733
752
  }
734
753
  let download;
735
754
  if ('thumbnailDirectPath' in media && !('url' in media)) {
@@ -742,7 +761,7 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
742
761
  else {
743
762
  download = media;
744
763
  }
745
- const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
764
+ const stream = await downloadContentFromMessage(download, mediaType, options);
746
765
  if (type === 'buffer') {
747
766
  const bufferArray = [];
748
767
  for await (const chunk of stream) {
@@ -753,18 +772,17 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
753
772
  return stream;
754
773
  }
755
774
  };
756
- exports.downloadMediaMessage = downloadMediaMessage;
757
775
  /** Checks whether the given message is a media message; if it is returns the inner content */
758
- const assertMediaContent = (content) => {
759
- content = (0, exports.extractMessageContent)(content);
760
- const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage) ||
761
- (content === null || content === void 0 ? void 0 : content.imageMessage) ||
762
- (content === null || content === void 0 ? void 0 : content.videoMessage) ||
763
- (content === null || content === void 0 ? void 0 : content.audioMessage) ||
764
- (content === null || content === void 0 ? void 0 : content.stickerMessage);
776
+ export const assertMediaContent = (content) => {
777
+ content = extractMessageContent(content);
778
+ const mediaContent = content?.documentMessage ||
779
+ content?.imageMessage ||
780
+ content?.videoMessage ||
781
+ content?.audioMessage ||
782
+ content?.stickerMessage;
765
783
  if (!mediaContent) {
766
- throw new boom_1.Boom('given message is not a media message', { statusCode: 400, data: content });
784
+ throw new Boom('given message is not a media message', { statusCode: 400, data: content });
767
785
  }
768
786
  return mediaContent;
769
787
  };
770
- exports.assertMediaContent = assertMediaContent;
788
+ //# sourceMappingURL=messages.js.map