@d0v3riz/baileys 6.7.21 → 6.7.22

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