@d0v3riz/baileys 6.7.20 → 6.7.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/WAProto/GenerateStatics.sh +3 -2
  2. package/WAProto/fix-imports.js +29 -0
  3. package/WAProto/index.js +4136 -4138
  4. package/lib/Defaults/index.d.ts +3 -2
  5. package/lib/Defaults/index.d.ts.map +1 -0
  6. package/lib/Defaults/index.js +36 -40
  7. package/lib/Defaults/index.js.map +1 -0
  8. package/lib/Signal/Group/ciphertext-message.d.ts +1 -0
  9. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  10. package/lib/Signal/Group/ciphertext-message.js +2 -5
  11. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  12. package/lib/Signal/Group/group-session-builder.d.ts +4 -3
  13. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  14. package/lib/Signal/Group/group-session-builder.js +7 -41
  15. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  16. package/lib/Signal/Group/group_cipher.d.ts +3 -2
  17. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  18. package/lib/Signal/Group/group_cipher.js +14 -16
  19. package/lib/Signal/Group/group_cipher.js.map +1 -0
  20. package/lib/Signal/Group/index.d.ts +12 -11
  21. package/lib/Signal/Group/index.d.ts.map +1 -0
  22. package/lib/Signal/Group/index.js +12 -57
  23. package/lib/Signal/Group/index.js.map +1 -0
  24. package/lib/Signal/Group/keyhelper.d.ts +2 -1
  25. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  26. package/lib/Signal/Group/keyhelper.js +8 -44
  27. package/lib/Signal/Group/keyhelper.js.map +1 -0
  28. package/lib/Signal/Group/queue-job.d.ts +2 -0
  29. package/lib/Signal/Group/queue-job.d.ts.map +1 -0
  30. package/lib/Signal/Group/queue-job.js +5 -5
  31. package/lib/Signal/Group/queue-job.js.map +1 -0
  32. package/lib/Signal/Group/sender-chain-key.d.ts +2 -1
  33. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  34. package/lib/Signal/Group/sender-chain-key.js +7 -9
  35. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  36. package/lib/Signal/Group/sender-key-distribution-message.d.ts +2 -1
  37. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  38. package/lib/Signal/Group/sender-key-distribution-message.js +6 -9
  39. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  40. package/lib/Signal/Group/sender-key-message.d.ts +2 -1
  41. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  42. package/lib/Signal/Group/sender-key-message.js +10 -12
  43. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  44. package/lib/Signal/Group/sender-key-name.d.ts +1 -0
  45. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  46. package/lib/Signal/Group/sender-key-name.js +2 -5
  47. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  48. package/lib/Signal/Group/sender-key-record.d.ts +2 -1
  49. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  50. package/lib/Signal/Group/sender-key-record.js +9 -12
  51. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  52. package/lib/Signal/Group/sender-key-state.d.ts +3 -2
  53. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  54. package/lib/Signal/Group/sender-key-state.js +6 -9
  55. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  56. package/lib/Signal/Group/sender-message-key.d.ts +1 -0
  57. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  58. package/lib/Signal/Group/sender-message-key.js +5 -7
  59. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  60. package/lib/Signal/libsignal.d.ts +3 -2
  61. package/lib/Signal/libsignal.d.ts.map +1 -0
  62. package/lib/Signal/libsignal.js +22 -55
  63. package/lib/Signal/libsignal.js.map +1 -0
  64. package/lib/Socket/Client/index.d.ts +3 -2
  65. package/lib/Socket/Client/index.d.ts.map +1 -0
  66. package/lib/Socket/Client/index.js +3 -18
  67. package/lib/Socket/Client/index.js.map +1 -0
  68. package/lib/Socket/Client/types.d.ts +2 -1
  69. package/lib/Socket/Client/types.d.ts.map +1 -0
  70. package/lib/Socket/Client/types.js +4 -6
  71. package/lib/Socket/Client/types.js.map +1 -0
  72. package/lib/Socket/Client/websocket.d.ts +2 -1
  73. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  74. package/lib/Socket/Client/websocket.js +14 -26
  75. package/lib/Socket/Client/websocket.js.map +1 -0
  76. package/lib/Socket/business.d.ts +89 -59
  77. package/lib/Socket/business.d.ts.map +1 -0
  78. package/lib/Socket/business.js +32 -37
  79. package/lib/Socket/business.js.map +1 -0
  80. package/lib/Socket/chats.d.ts +28 -21
  81. package/lib/Socket/chats.d.ts.map +1 -0
  82. package/lib/Socket/chats.js +195 -142
  83. package/lib/Socket/chats.js.map +1 -0
  84. package/lib/Socket/communities.d.ts +219 -0
  85. package/lib/Socket/communities.d.ts.map +1 -0
  86. package/lib/Socket/communities.js +351 -0
  87. package/lib/Socket/communities.js.map +1 -0
  88. package/lib/Socket/groups.d.ts +43 -35
  89. package/lib/Socket/groups.d.ts.map +1 -0
  90. package/lib/Socket/groups.js +57 -63
  91. package/lib/Socket/groups.js.map +1 -0
  92. package/lib/Socket/index.d.ts +125 -65
  93. package/lib/Socket/index.d.ts.map +1 -0
  94. package/lib/Socket/index.js +16 -9
  95. package/lib/Socket/index.js.map +1 -0
  96. package/lib/Socket/messages-recv.d.ts +75 -45
  97. package/lib/Socket/messages-recv.d.ts.map +1 -0
  98. package/lib/Socket/messages-recv.js +303 -156
  99. package/lib/Socket/messages-recv.js.map +1 -0
  100. package/lib/Socket/messages-send.d.ts +72 -42
  101. package/lib/Socket/messages-send.d.ts.map +1 -0
  102. package/lib/Socket/messages-send.js +100 -83
  103. package/lib/Socket/messages-send.js.map +1 -0
  104. package/lib/Socket/mex.d.ts +3 -0
  105. package/lib/Socket/mex.d.ts.map +1 -0
  106. package/lib/Socket/mex.js +42 -0
  107. package/lib/Socket/mex.js.map +1 -0
  108. package/lib/Socket/newsletter.d.ts +143 -0
  109. package/lib/Socket/newsletter.d.ts.map +1 -0
  110. package/lib/Socket/newsletter.js +179 -0
  111. package/lib/Socket/newsletter.js.map +1 -0
  112. package/lib/Socket/socket.d.ts +13 -12
  113. package/lib/Socket/socket.d.ts.map +1 -0
  114. package/lib/Socket/socket.js +135 -116
  115. package/lib/Socket/socket.js.map +1 -0
  116. package/lib/Socket/usync.d.ts +15 -14
  117. package/lib/Socket/usync.d.ts.map +1 -0
  118. package/lib/Socket/usync.js +9 -11
  119. package/lib/Socket/usync.js.map +1 -0
  120. package/lib/Types/Auth.d.ts +4 -3
  121. package/lib/Types/Auth.d.ts.map +1 -0
  122. package/lib/Types/Auth.js +2 -2
  123. package/lib/Types/Auth.js.map +1 -0
  124. package/lib/Types/Call.d.ts +1 -0
  125. package/lib/Types/Call.d.ts.map +1 -0
  126. package/lib/Types/Call.js +2 -2
  127. package/lib/Types/Call.js.map +1 -0
  128. package/lib/Types/Chat.d.ts +13 -7
  129. package/lib/Types/Chat.d.ts.map +1 -0
  130. package/lib/Types/Chat.js +2 -4
  131. package/lib/Types/Chat.js.map +1 -0
  132. package/lib/Types/Contact.d.ts +1 -0
  133. package/lib/Types/Contact.d.ts.map +1 -0
  134. package/lib/Types/Contact.js +2 -2
  135. package/lib/Types/Contact.js.map +1 -0
  136. package/lib/Types/Events.d.ts +37 -10
  137. package/lib/Types/Events.d.ts.map +1 -0
  138. package/lib/Types/Events.js +2 -2
  139. package/lib/Types/Events.js.map +1 -0
  140. package/lib/Types/GroupMetadata.d.ts +3 -1
  141. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  142. package/lib/Types/GroupMetadata.js +2 -2
  143. package/lib/Types/GroupMetadata.js.map +1 -0
  144. package/lib/Types/Label.d.ts +1 -0
  145. package/lib/Types/Label.d.ts.map +1 -0
  146. package/lib/Types/Label.js +3 -5
  147. package/lib/Types/Label.js.map +1 -0
  148. package/lib/Types/LabelAssociation.d.ts +1 -0
  149. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  150. package/lib/Types/LabelAssociation.js +3 -5
  151. package/lib/Types/LabelAssociation.js.map +1 -0
  152. package/lib/Types/Message.d.ts +15 -8
  153. package/lib/Types/Message.d.ts.map +1 -0
  154. package/lib/Types/Message.js +7 -7
  155. package/lib/Types/Message.js.map +1 -0
  156. package/lib/Types/Newsletter.d.ts +135 -0
  157. package/lib/Types/Newsletter.d.ts.map +1 -0
  158. package/lib/Types/Newsletter.js +31 -0
  159. package/lib/Types/Newsletter.js.map +1 -0
  160. package/lib/Types/Product.d.ts +2 -1
  161. package/lib/Types/Product.d.ts.map +1 -0
  162. package/lib/Types/Product.js +2 -2
  163. package/lib/Types/Product.js.map +1 -0
  164. package/lib/Types/Signal.d.ts +2 -1
  165. package/lib/Types/Signal.d.ts.map +1 -0
  166. package/lib/Types/Signal.js +2 -2
  167. package/lib/Types/Signal.js.map +1 -0
  168. package/lib/Types/Socket.d.ts +8 -7
  169. package/lib/Types/Socket.d.ts.map +1 -0
  170. package/lib/Types/Socket.js +3 -2
  171. package/lib/Types/Socket.js.map +1 -0
  172. package/lib/Types/State.d.ts +14 -2
  173. package/lib/Types/State.d.ts.map +1 -0
  174. package/lib/Types/State.js +13 -2
  175. package/lib/Types/State.js.map +1 -0
  176. package/lib/Types/USync.d.ts +3 -2
  177. package/lib/Types/USync.d.ts.map +1 -0
  178. package/lib/Types/USync.js +2 -2
  179. package/lib/Types/USync.js.map +1 -0
  180. package/lib/Types/index.d.ts +15 -13
  181. package/lib/Types/index.d.ts.map +1 -0
  182. package/lib/Types/index.js +15 -30
  183. package/lib/Types/index.js.map +1 -0
  184. package/lib/Utils/auth-utils.d.ts +3 -2
  185. package/lib/Utils/auth-utils.d.ts.map +1 -0
  186. package/lib/Utils/auth-utils.js +24 -33
  187. package/lib/Utils/auth-utils.js.map +1 -0
  188. package/lib/Utils/baileys-event-stream.d.ts +2 -1
  189. package/lib/Utils/baileys-event-stream.d.ts.map +1 -0
  190. package/lib/Utils/baileys-event-stream.js +15 -22
  191. package/lib/Utils/baileys-event-stream.js.map +1 -0
  192. package/lib/Utils/business.d.ts +3 -2
  193. package/lib/Utils/business.d.ts.map +1 -0
  194. package/lib/Utils/business.js +61 -70
  195. package/lib/Utils/business.js.map +1 -0
  196. package/lib/Utils/chat-utils.d.ts +8 -7
  197. package/lib/Utils/chat-utils.d.ts.map +1 -0
  198. package/lib/Utils/chat-utils.js +144 -138
  199. package/lib/Utils/chat-utils.js.map +1 -0
  200. package/lib/Utils/crypto.d.ts +2 -1
  201. package/lib/Utils/crypto.d.ts.map +1 -0
  202. package/lib/Utils/crypto.js +37 -86
  203. package/lib/Utils/crypto.js.map +1 -0
  204. package/lib/Utils/decode-wa-message.d.ts +7 -7
  205. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  206. package/lib/Utils/decode-wa-message.js +42 -44
  207. package/lib/Utils/decode-wa-message.js.map +1 -0
  208. package/lib/Utils/event-buffer.d.ts +4 -4
  209. package/lib/Utils/event-buffer.d.ts.map +1 -0
  210. package/lib/Utils/event-buffer.js +37 -50
  211. package/lib/Utils/event-buffer.js.map +1 -0
  212. package/lib/Utils/generics.d.ts +10 -8
  213. package/lib/Utils/generics.d.ts.map +1 -0
  214. package/lib/Utils/generics.js +88 -111
  215. package/lib/Utils/generics.js.map +1 -0
  216. package/lib/Utils/history.d.ts +4 -3
  217. package/lib/Utils/history.d.ts.map +1 -0
  218. package/lib/Utils/history.js +32 -46
  219. package/lib/Utils/history.js.map +1 -0
  220. package/lib/Utils/index.d.ts +18 -17
  221. package/lib/Utils/index.d.ts.map +1 -0
  222. package/lib/Utils/index.js +18 -33
  223. package/lib/Utils/index.js.map +1 -0
  224. package/lib/Utils/link-preview.d.ts +4 -3
  225. package/lib/Utils/link-preview.d.ts.map +1 -0
  226. package/lib/Utils/link-preview.js +10 -47
  227. package/lib/Utils/link-preview.js.map +1 -0
  228. package/lib/Utils/logger.d.ts +8 -6
  229. package/lib/Utils/logger.d.ts.map +1 -0
  230. package/lib/Utils/logger.js +3 -7
  231. package/lib/Utils/logger.js.map +1 -0
  232. package/lib/Utils/lt-hash.d.ts +9 -8
  233. package/lib/Utils/lt-hash.d.ts.map +1 -0
  234. package/lib/Utils/lt-hash.js +23 -26
  235. package/lib/Utils/lt-hash.js.map +1 -0
  236. package/lib/Utils/make-mutex.d.ts +1 -0
  237. package/lib/Utils/make-mutex.d.ts.map +1 -0
  238. package/lib/Utils/make-mutex.js +5 -9
  239. package/lib/Utils/make-mutex.js.map +1 -0
  240. package/lib/Utils/messages-media.d.ts +20 -11
  241. package/lib/Utils/messages-media.d.ts.map +1 -0
  242. package/lib/Utils/messages-media.js +191 -214
  243. package/lib/Utils/messages-media.js.map +1 -0
  244. package/lib/Utils/messages.d.ts +8 -7
  245. package/lib/Utils/messages.d.ts.map +1 -0
  246. package/lib/Utils/messages.js +218 -197
  247. package/lib/Utils/messages.js.map +1 -0
  248. package/lib/Utils/noise-handler.d.ts +5 -4
  249. package/lib/Utils/noise-handler.d.ts.map +1 -0
  250. package/lib/Utils/noise-handler.js +22 -26
  251. package/lib/Utils/noise-handler.js.map +1 -0
  252. package/lib/Utils/process-message.d.ts +5 -4
  253. package/lib/Utils/process-message.d.ts.map +1 -0
  254. package/lib/Utils/process-message.js +95 -104
  255. package/lib/Utils/process-message.js.map +1 -0
  256. package/lib/Utils/signal.d.ts +5 -4
  257. package/lib/Utils/signal.d.ts.map +1 -0
  258. package/lib/Utils/signal.js +47 -52
  259. package/lib/Utils/signal.js.map +1 -0
  260. package/lib/Utils/use-multi-file-auth-state.d.ts +2 -1
  261. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  262. package/lib/Utils/use-multi-file-auth-state.js +23 -26
  263. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  264. package/lib/Utils/validate-connection.d.ts +4 -3
  265. package/lib/Utils/validate-connection.d.ts.map +1 -0
  266. package/lib/Utils/validate-connection.js +52 -58
  267. package/lib/Utils/validate-connection.js.map +1 -0
  268. package/lib/WABinary/constants.d.ts +1 -0
  269. package/lib/WABinary/constants.d.ts.map +1 -0
  270. package/lib/WABinary/constants.js +9 -11
  271. package/lib/WABinary/constants.js.map +1 -0
  272. package/lib/WABinary/decode.d.ts +2 -1
  273. package/lib/WABinary/decode.d.ts.map +1 -0
  274. package/lib/WABinary/decode.js +13 -51
  275. package/lib/WABinary/decode.js.map +1 -0
  276. package/lib/WABinary/encode.d.ts +2 -1
  277. package/lib/WABinary/encode.d.ts.map +1 -0
  278. package/lib/WABinary/encode.js +5 -41
  279. package/lib/WABinary/encode.js.map +1 -0
  280. package/lib/WABinary/generic-utils.d.ts +4 -3
  281. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  282. package/lib/WABinary/generic-utils.js +30 -38
  283. package/lib/WABinary/generic-utils.js.map +1 -0
  284. package/lib/WABinary/index.d.ts +6 -5
  285. package/lib/WABinary/index.d.ts.map +1 -0
  286. package/lib/WABinary/index.js +6 -21
  287. package/lib/WABinary/index.js.map +1 -0
  288. package/lib/WABinary/jid-utils.d.ts +1 -0
  289. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  290. package/lib/WABinary/jid-utils.js +21 -35
  291. package/lib/WABinary/jid-utils.js.map +1 -0
  292. package/lib/WABinary/types.d.ts +2 -1
  293. package/lib/WABinary/types.d.ts.map +1 -0
  294. package/lib/WABinary/types.js +2 -2
  295. package/lib/WABinary/types.js.map +1 -0
  296. package/lib/WAM/BinaryInfo.d.ts +2 -1
  297. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  298. package/lib/WAM/BinaryInfo.js +2 -5
  299. package/lib/WAM/BinaryInfo.js.map +1 -0
  300. package/lib/WAM/constants.d.ts +1 -0
  301. package/lib/WAM/constants.d.ts.map +1 -0
  302. package/lib/WAM/constants.js +4 -6
  303. package/lib/WAM/constants.js.map +1 -0
  304. package/lib/WAM/encode.d.ts +2 -1
  305. package/lib/WAM/encode.d.ts.map +1 -0
  306. package/lib/WAM/encode.js +12 -14
  307. package/lib/WAM/encode.js.map +1 -0
  308. package/lib/WAM/index.d.ts +4 -3
  309. package/lib/WAM/index.d.ts.map +1 -0
  310. package/lib/WAM/index.js +4 -19
  311. package/lib/WAM/index.js.map +1 -0
  312. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +4 -3
  313. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  314. package/lib/WAUSync/Protocols/USyncContactProtocol.js +6 -9
  315. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  316. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +3 -2
  317. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  318. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +9 -12
  319. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  320. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +3 -2
  321. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  322. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +7 -10
  323. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  324. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +3 -2
  325. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  326. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +7 -11
  327. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  328. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +4 -3
  329. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  330. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +19 -21
  331. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  332. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -2
  333. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  334. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +2 -5
  335. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  336. package/lib/WAUSync/Protocols/index.d.ts +5 -4
  337. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  338. package/lib/WAUSync/Protocols/index.js +5 -20
  339. package/lib/WAUSync/Protocols/index.js.map +1 -0
  340. package/lib/WAUSync/USyncQuery.d.ts +4 -3
  341. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  342. package/lib/WAUSync/USyncQuery.js +18 -20
  343. package/lib/WAUSync/USyncQuery.js.map +1 -0
  344. package/lib/WAUSync/USyncUser.d.ts +6 -5
  345. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  346. package/lib/WAUSync/USyncUser.js +2 -5
  347. package/lib/WAUSync/USyncUser.js.map +1 -0
  348. package/lib/WAUSync/index.d.ts +4 -3
  349. package/lib/WAUSync/index.d.ts.map +1 -0
  350. package/lib/WAUSync/index.js +4 -19
  351. package/lib/WAUSync/index.js.map +1 -0
  352. package/lib/index.d.ts +9 -8
  353. package/lib/index.d.ts.map +1 -0
  354. package/lib/index.js +11 -30
  355. package/lib/index.js.map +1 -0
  356. package/package.json +28 -28
@@ -1,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,42 +458,46 @@ 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, contextInfo } = 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);
464
- const msgType = (0, exports.getContentType)(quotedMsg);
491
+ let quotedMsg = normalizeMessageContent(quoted.message);
492
+ const msgType = getContentType(quotedMsg);
465
493
  // strip any redundant properties
466
- quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
494
+ quotedMsg = proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
467
495
  const quotedContent = quotedMsg[msgType];
468
496
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
469
497
  delete quotedContent.contextInfo;
470
498
  }
471
- const contextInfo = innerMessage[key].contextInfo || {};
472
- contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
499
+ const contextInfo = ('contextInfo' in innerMessage[key] && innerMessage[key]?.contextInfo) || {};
500
+ contextInfo.participant = jidNormalizedUser(participant);
473
501
  contextInfo.stanzaId = quoted.key.id;
474
502
  contextInfo.quotedMessage = quotedMsg;
475
503
  // if a participant is quoted, then it must be a group
@@ -477,66 +505,71 @@ const generateWAMessageFromContent = (jid, message, options) => {
477
505
  if (jid !== quoted.key.remoteJid) {
478
506
  contextInfo.remoteJid = quoted.key.remoteJid;
479
507
  }
480
- innerMessage[key].contextInfo = contextInfo;
508
+ if (contextInfo && innerMessage[key]) {
509
+ /* @ts-ignore */
510
+ innerMessage[key].contextInfo = contextInfo;
511
+ }
481
512
  }
482
- if (contextInfo) {
513
+ if (contextInfo && message[key]) {
514
+ /* @ts-ignore */
483
515
  message[key].contextInfo = {
516
+ /* @ts-ignore */
484
517
  ...(message[key].contextInfo || {}),
485
518
  ...contextInfo
486
519
  };
487
520
  }
488
521
  if (
489
522
  // if we want to send a disappearing message
490
- !!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
523
+ !!options?.ephemeralExpiration &&
491
524
  // and it's not a protocol message -- delete, toggle disappear message
492
525
  key !== 'protocolMessage' &&
493
526
  // already not converted to disappearing message
494
- key !== 'ephemeralMessage') {
527
+ key !== 'ephemeralMessage' &&
528
+ // newsletters don't support ephemeral messages
529
+ !isJidNewsletter(jid)) {
530
+ /* @ts-ignore */
495
531
  innerMessage[key].contextInfo = {
496
532
  ...(innerMessage[key].contextInfo || {}),
497
- expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL
533
+ expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL
498
534
  //ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
499
535
  };
500
536
  }
501
- message = Types_1.WAProto.Message.fromObject(message);
537
+ message = WAProto.Message.fromObject(message);
502
538
  const messageJSON = {
503
539
  key: {
504
540
  remoteJid: jid,
505
541
  fromMe: true,
506
- id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageIDV2)()
542
+ id: options?.messageId || generateMessageIDV2()
507
543
  },
508
544
  message: message,
509
545
  messageTimestamp: timestamp,
510
546
  messageStubParameters: [],
511
- participant: (0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidStatusBroadcast)(jid) ? userJid : undefined,
512
- status: Types_1.WAMessageStatus.PENDING
547
+ participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined,
548
+ status: WAMessageStatus.PENDING
513
549
  };
514
- return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
550
+ return WAProto.WebMessageInfo.fromObject(messageJSON);
515
551
  };
516
- exports.generateWAMessageFromContent = generateWAMessageFromContent;
517
- const generateWAMessage = async (jid, content, options) => {
518
- var _a;
552
+ export const generateWAMessage = async (jid, content, options) => {
519
553
  // ensure msg ID is with every log
520
- options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
521
- 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);
522
557
  };
523
- exports.generateWAMessage = generateWAMessage;
524
558
  /** Get the key to access the true type of content */
525
- const getContentType = (content) => {
559
+ export const getContentType = (content) => {
526
560
  if (content) {
527
561
  const keys = Object.keys(content);
528
562
  const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage');
529
563
  return key;
530
564
  }
531
565
  };
532
- exports.getContentType = getContentType;
533
566
  /**
534
567
  * Normalizes ephemeral, view once messages to regular message content
535
568
  * Eg. image messages in ephemeral messages, in view once messages etc.
536
569
  * @param content
537
570
  * @returns
538
571
  */
539
- const normalizeMessageContent = (content) => {
572
+ export const normalizeMessageContent = (content) => {
540
573
  if (!content) {
541
574
  return undefined;
542
575
  }
@@ -550,21 +583,19 @@ const normalizeMessageContent = (content) => {
550
583
  }
551
584
  return content;
552
585
  function getFutureProofMessage(message) {
553
- return ((message === null || message === void 0 ? void 0 : message.ephemeralMessage) ||
554
- (message === null || message === void 0 ? void 0 : message.viewOnceMessage) ||
555
- (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage) ||
556
- (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2) ||
557
- (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension) ||
558
- (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);
559
592
  }
560
593
  };
561
- exports.normalizeMessageContent = normalizeMessageContent;
562
594
  /**
563
595
  * Extract the true message content from a message
564
596
  * Eg. extracts the inner message from a disappearing message/view once message
565
597
  */
566
- const extractMessageContent = (content) => {
567
- var _a, _b, _c, _d, _e, _f;
598
+ export const extractMessageContent = (content) => {
568
599
  const extractFromTemplateMessage = (msg) => {
569
600
  if (msg.imageMessage) {
570
601
  return { imageMessage: msg.imageMessage };
@@ -584,26 +615,25 @@ const extractMessageContent = (content) => {
584
615
  };
585
616
  }
586
617
  };
587
- content = (0, exports.normalizeMessageContent)(content);
588
- if (content === null || content === void 0 ? void 0 : content.buttonsMessage) {
618
+ content = normalizeMessageContent(content);
619
+ if (content?.buttonsMessage) {
589
620
  return extractFromTemplateMessage(content.buttonsMessage);
590
621
  }
591
- if ((_a = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _a === void 0 ? void 0 : _a.hydratedFourRowTemplate) {
592
- 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);
593
624
  }
594
- if ((_c = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _c === void 0 ? void 0 : _c.hydratedTemplate) {
595
- 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);
596
627
  }
597
- if ((_e = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _e === void 0 ? void 0 : _e.fourRowTemplate) {
598
- 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);
599
630
  }
600
631
  return content;
601
632
  };
602
- exports.extractMessageContent = extractMessageContent;
603
633
  /**
604
634
  * Returns the device predicted by message ID
605
635
  */
606
- const getDevice = (id) => /^3A.{18}$/.test(id)
636
+ export const getDevice = (id) => /^3A.{18}$/.test(id)
607
637
  ? 'ios'
608
638
  : /^3E.{20}$/.test(id)
609
639
  ? 'web'
@@ -612,9 +642,8 @@ const getDevice = (id) => /^3A.{18}$/.test(id)
612
642
  : /^(3F|.{18}$)/.test(id)
613
643
  ? 'desktop'
614
644
  : 'unknown';
615
- exports.getDevice = getDevice;
616
645
  /** Upserts a receipt in the message */
617
- const updateMessageWithReceipt = (msg, receipt) => {
646
+ export const updateMessageWithReceipt = (msg, receipt) => {
618
647
  msg.userReceipt = msg.userReceipt || [];
619
648
  const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
620
649
  if (recp) {
@@ -624,41 +653,36 @@ const updateMessageWithReceipt = (msg, receipt) => {
624
653
  msg.userReceipt.push(receipt);
625
654
  }
626
655
  };
627
- exports.updateMessageWithReceipt = updateMessageWithReceipt;
628
656
  /** Update the message with a new reaction */
629
- const updateMessageWithReaction = (msg, reaction) => {
630
- const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
631
- const reactions = (msg.reactions || []).filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
657
+ export const updateMessageWithReaction = (msg, reaction) => {
658
+ const authorID = getKeyAuthor(reaction.key);
659
+ const reactions = (msg.reactions || []).filter(r => getKeyAuthor(r.key) !== authorID);
632
660
  reaction.text = reaction.text || '';
633
661
  reactions.push(reaction);
634
662
  msg.reactions = reactions;
635
663
  };
636
- exports.updateMessageWithReaction = updateMessageWithReaction;
637
664
  /** Update the message with a new poll update */
638
- const updateMessageWithPollUpdate = (msg, update) => {
639
- var _a, _b;
640
- const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
641
- const reactions = (msg.pollUpdates || []).filter(r => (0, generics_1.getKeyAuthor)(r.pollUpdateMessageKey) !== authorID);
642
- 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) {
643
669
  reactions.push(update);
644
670
  }
645
671
  msg.pollUpdates = reactions;
646
672
  };
647
- exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
648
673
  /**
649
674
  * Aggregates all poll updates in a poll.
650
675
  * @param msg the poll creation message
651
676
  * @param meId your jid
652
677
  * @returns A list of options & their voters
653
678
  */
654
- function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
655
- var _a, _b, _c;
656
- const opts = ((_a = message === null || message === void 0 ? void 0 : message.pollCreationMessage) === null || _a === void 0 ? void 0 : _a.options) ||
657
- ((_b = message === null || message === void 0 ? void 0 : message.pollCreationMessageV2) === null || _b === void 0 ? void 0 : _b.options) ||
658
- ((_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 ||
659
683
  [];
660
684
  const voteHashMap = opts.reduce((acc, opt) => {
661
- const hash = (0, crypto_2.sha256)(Buffer.from(opt.optionName || '')).toString();
685
+ const hash = sha256(Buffer.from(opt.optionName || '')).toString();
662
686
  acc[hash] = {
663
687
  name: opt.optionName || '',
664
688
  voters: []
@@ -680,13 +704,13 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
680
704
  };
681
705
  data = voteHashMap[hash];
682
706
  }
683
- voteHashMap[hash].voters.push((0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey, meId));
707
+ voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId));
684
708
  }
685
709
  }
686
710
  return Object.values(voteHashMap);
687
711
  }
688
712
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
689
- const aggregateMessageKeysNotFromMe = (keys) => {
713
+ export const aggregateMessageKeysNotFromMe = (keys) => {
690
714
  const keyMap = {};
691
715
  for (const { remoteJid, id, participant, fromMe } of keys) {
692
716
  if (!fromMe) {
@@ -703,17 +727,15 @@ const aggregateMessageKeysNotFromMe = (keys) => {
703
727
  }
704
728
  return Object.values(keyMap);
705
729
  };
706
- exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
707
730
  const REUPLOAD_REQUIRED_STATUS = [410, 404];
708
731
  /**
709
732
  * Downloads the given message. Throws an error if it's not a media message
710
733
  */
711
- const downloadMediaMessage = async (message, type, options, ctx) => {
734
+ export const downloadMediaMessage = async (message, type, options, ctx) => {
712
735
  const result = await downloadMsg().catch(async (error) => {
713
- var _a;
714
736
  if (ctx &&
715
- axios_1.default.isAxiosError(error) && // check if the message requires a reupload
716
- REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
737
+ axios.isAxiosError(error) && // check if the message requires a reupload
738
+ REUPLOAD_REQUIRED_STATUS.includes(error.response?.status)) {
717
739
  ctx.logger.info({ key: message.key }, 'sending reupload media request...');
718
740
  // request reupload
719
741
  message = await ctx.reuploadRequest(message);
@@ -724,15 +746,15 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
724
746
  });
725
747
  return result;
726
748
  async function downloadMsg() {
727
- const mContent = (0, exports.extractMessageContent)(message.message);
749
+ const mContent = extractMessageContent(message.message);
728
750
  if (!mContent) {
729
- throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
751
+ throw new Boom('No message present', { statusCode: 400, data: message });
730
752
  }
731
- const contentType = (0, exports.getContentType)(mContent);
732
- let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
753
+ const contentType = getContentType(mContent);
754
+ let mediaType = contentType?.replace('Message', '');
733
755
  const media = mContent[contentType];
734
756
  if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
735
- throw new boom_1.Boom(`"${contentType}" message is not a media message`);
757
+ throw new Boom(`"${contentType}" message is not a media message`);
736
758
  }
737
759
  let download;
738
760
  if ('thumbnailDirectPath' in media && !('url' in media)) {
@@ -745,7 +767,7 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
745
767
  else {
746
768
  download = media;
747
769
  }
748
- const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
770
+ const stream = await downloadContentFromMessage(download, mediaType, options);
749
771
  if (type === 'buffer') {
750
772
  const bufferArray = [];
751
773
  for await (const chunk of stream) {
@@ -756,18 +778,17 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
756
778
  return stream;
757
779
  }
758
780
  };
759
- exports.downloadMediaMessage = downloadMediaMessage;
760
781
  /** Checks whether the given message is a media message; if it is returns the inner content */
761
- const assertMediaContent = (content) => {
762
- content = (0, exports.extractMessageContent)(content);
763
- const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage) ||
764
- (content === null || content === void 0 ? void 0 : content.imageMessage) ||
765
- (content === null || content === void 0 ? void 0 : content.videoMessage) ||
766
- (content === null || content === void 0 ? void 0 : content.audioMessage) ||
767
- (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;
768
789
  if (!mediaContent) {
769
- 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 });
770
791
  }
771
792
  return mediaContent;
772
793
  };
773
- exports.assertMediaContent = assertMediaContent;
794
+ //# sourceMappingURL=messages.js.map