@d0v3riz/baileys 6.7.22 → 6.7.24

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