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