lordceaser-baileys 2.0.0 → 2.0.2

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 (439) hide show
  1. package/WAProto/index.js +136901 -78899
  2. package/WASignalGroup/GroupProtocol.js +1697 -0
  3. package/WASignalGroup/ciphertext_message.js +16 -0
  4. package/WASignalGroup/group_cipher.js +120 -0
  5. package/WASignalGroup/group_session_builder.js +46 -0
  6. package/WASignalGroup/index.js +5 -0
  7. package/WASignalGroup/keyhelper.js +21 -0
  8. package/WASignalGroup/protobufs.js +3 -0
  9. package/WASignalGroup/queue_job.js +69 -0
  10. package/WASignalGroup/sender_chain_key.js +50 -0
  11. package/WASignalGroup/sender_key_distribution_message.js +78 -0
  12. package/WASignalGroup/sender_key_message.js +92 -0
  13. package/WASignalGroup/sender_key_name.js +70 -0
  14. package/WASignalGroup/sender_key_record.js +56 -0
  15. package/WASignalGroup/sender_key_state.js +129 -0
  16. package/{lib/Signal/Group/sender-message-key.js → WASignalGroup/sender_message_key.js} +16 -3
  17. package/index.js +17 -0
  18. package/lib/Defaults/baileys-version.json +3 -0
  19. package/lib/Defaults/index.d.ts +15 -37
  20. package/lib/Defaults/index.js +60 -81
  21. package/lib/Signal/libsignal.d.ts +3 -5
  22. package/lib/Signal/libsignal.js +80 -359
  23. package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +5 -4
  24. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  25. package/lib/Socket/Client/index.d.ts +3 -3
  26. package/lib/Socket/Client/index.js +19 -3
  27. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  28. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  29. package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +2 -3
  30. package/lib/Socket/Client/web-socket-client.js +62 -0
  31. package/lib/Socket/business.d.ts +100 -147
  32. package/lib/Socket/business.js +43 -162
  33. package/lib/Socket/chats.d.ts +41 -85
  34. package/lib/Socket/chats.js +321 -569
  35. package/lib/Socket/groups.d.ts +57 -103
  36. package/lib/Socket/groups.js +84 -116
  37. package/lib/Socket/index.d.ts +106 -194
  38. package/lib/Socket/index.js +9 -11
  39. package/lib/Socket/messages-recv.d.ts +89 -134
  40. package/lib/Socket/messages-recv.js +475 -1275
  41. package/lib/Socket/messages-send.d.ts +97 -141
  42. package/lib/Socket/messages-send.js +633 -691
  43. package/lib/Socket/newsletter.d.ts +74 -112
  44. package/lib/Socket/newsletter.js +202 -147
  45. package/lib/Socket/registration.d.ts +264 -0
  46. package/lib/Socket/registration.js +166 -0
  47. package/lib/Socket/socket.d.ts +19 -34
  48. package/lib/Socket/socket.js +219 -547
  49. package/lib/Socket/usync.d.ts +37 -0
  50. package/lib/Socket/usync.js +70 -0
  51. package/lib/Store/index.d.ts +3 -0
  52. package/lib/Store/index.js +10 -0
  53. package/lib/Store/make-cache-manager-store.d.ts +14 -0
  54. package/lib/Store/make-cache-manager-store.js +83 -0
  55. package/lib/Store/make-in-memory-store.d.ts +118 -0
  56. package/lib/Store/make-in-memory-store.js +431 -0
  57. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  58. package/lib/Store/make-ordered-dictionary.js +81 -0
  59. package/lib/Store/object-repository.d.ts +10 -0
  60. package/lib/Store/object-repository.js +27 -0
  61. package/lib/Types/Auth.d.ts +11 -19
  62. package/lib/Types/Auth.js +2 -2
  63. package/lib/Types/Call.d.ts +1 -3
  64. package/lib/Types/Call.js +2 -2
  65. package/lib/Types/Chat.d.ts +8 -25
  66. package/lib/Types/Chat.js +4 -8
  67. package/lib/Types/Contact.d.ts +1 -8
  68. package/lib/Types/Contact.js +2 -2
  69. package/lib/Types/Events.d.ts +17 -101
  70. package/lib/Types/Events.js +2 -2
  71. package/lib/Types/GroupMetadata.d.ts +3 -18
  72. package/lib/Types/GroupMetadata.js +2 -2
  73. package/lib/Types/Label.d.ts +0 -1
  74. package/lib/Types/Label.js +5 -3
  75. package/lib/Types/LabelAssociation.d.ts +0 -1
  76. package/lib/Types/LabelAssociation.js +5 -3
  77. package/lib/Types/Message.d.ts +204 -91
  78. package/lib/Types/Message.js +9 -11
  79. package/lib/Types/Newsletter.d.ts +92 -0
  80. package/lib/Types/Newsletter.js +32 -0
  81. package/lib/Types/Product.d.ts +1 -2
  82. package/lib/Types/Product.js +2 -2
  83. package/lib/Types/Signal.d.ts +2 -32
  84. package/lib/Types/Signal.js +2 -2
  85. package/lib/Types/Socket.d.ts +24 -44
  86. package/lib/Types/Socket.js +2 -3
  87. package/lib/Types/State.d.ts +2 -72
  88. package/lib/Types/State.js +2 -56
  89. package/lib/Types/USync.d.ts +2 -3
  90. package/lib/Types/USync.js +2 -2
  91. package/lib/Types/index.d.ts +16 -16
  92. package/lib/Types/index.js +31 -15
  93. package/lib/Utils/auth-utils.d.ts +6 -12
  94. package/lib/Utils/auth-utils.js +143 -239
  95. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  96. package/lib/Utils/baileys-event-stream.js +63 -0
  97. package/lib/Utils/business.d.ts +3 -4
  98. package/lib/Utils/business.js +69 -66
  99. package/lib/Utils/c4-compat.js +0 -8
  100. package/lib/Utils/chat-utils.d.ts +17 -47
  101. package/lib/Utils/chat-utils.js +237 -364
  102. package/lib/Utils/crypto.d.ts +21 -18
  103. package/lib/Utils/crypto.js +125 -44
  104. package/lib/Utils/decode-wa-message.d.ts +8 -38
  105. package/lib/Utils/decode-wa-message.js +90 -173
  106. package/lib/Utils/event-buffer.d.ts +8 -9
  107. package/lib/Utils/event-buffer.js +71 -176
  108. package/lib/Utils/generics.d.ts +22 -26
  109. package/lib/Utils/generics.js +175 -166
  110. package/lib/Utils/history.d.ts +11 -16
  111. package/lib/Utils/history.js +53 -93
  112. package/lib/Utils/index.d.ts +17 -22
  113. package/lib/Utils/index.js +34 -22
  114. package/lib/Utils/link-preview.d.ts +5 -5
  115. package/lib/Utils/link-preview.js +24 -16
  116. package/lib/Utils/logger.d.ts +1 -11
  117. package/lib/Utils/logger.js +7 -3
  118. package/lib/Utils/lt-hash.d.ts +12 -8
  119. package/lib/Utils/lt-hash.js +46 -3
  120. package/lib/Utils/make-mutex.d.ts +0 -2
  121. package/lib/Utils/make-mutex.js +34 -24
  122. package/lib/Utils/messages-media.d.ts +45 -65
  123. package/lib/Utils/messages-media.js +358 -425
  124. package/lib/Utils/messages.d.ts +18 -32
  125. package/lib/Utils/messages.js +720 -392
  126. package/lib/Utils/noise-handler.d.ts +13 -13
  127. package/lib/Utils/noise-handler.js +108 -149
  128. package/lib/Utils/process-message.d.ts +11 -30
  129. package/lib/Utils/process-message.js +166 -423
  130. package/lib/Utils/signal.d.ts +6 -20
  131. package/lib/Utils/signal.js +65 -107
  132. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -2
  133. package/lib/Utils/use-multi-file-auth-state.js +103 -57
  134. package/lib/Utils/use-single-file-auth-state.d.ts +12 -0
  135. package/lib/Utils/use-single-file-auth-state.js +76 -0
  136. package/lib/Utils/validate-connection.d.ts +6 -6
  137. package/lib/Utils/validate-connection.js +114 -119
  138. package/lib/WABinary/constants.d.ts +4 -5
  139. package/lib/WABinary/constants.js +20 -1281
  140. package/lib/WABinary/decode.d.ts +3 -4
  141. package/lib/WABinary/decode.js +53 -51
  142. package/lib/WABinary/encode.d.ts +1 -2
  143. package/lib/WABinary/encode.js +44 -12
  144. package/lib/WABinary/generic-utils.d.ts +6 -7
  145. package/lib/WABinary/generic-utils.js +43 -46
  146. package/lib/WABinary/index.d.ts +5 -6
  147. package/lib/WABinary/index.js +21 -6
  148. package/lib/WABinary/jid-utils.d.ts +7 -24
  149. package/lib/WABinary/jid-utils.js +40 -74
  150. package/lib/WABinary/types.d.ts +1 -2
  151. package/lib/WABinary/types.js +2 -2
  152. package/lib/WAM/BinaryInfo.d.ts +1 -2
  153. package/lib/WAM/BinaryInfo.js +5 -2
  154. package/lib/WAM/constants.d.ts +3 -5
  155. package/lib/WAM/constants.js +11958 -19461
  156. package/lib/WAM/encode.d.ts +2 -3
  157. package/lib/WAM/encode.js +22 -17
  158. package/lib/WAM/index.d.ts +3 -4
  159. package/lib/WAM/index.js +19 -4
  160. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -4
  161. package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
  162. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -3
  163. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
  164. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -3
  165. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -9
  166. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -3
  167. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
  168. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +3 -4
  169. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
  170. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -5
  171. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
  172. package/lib/WAUSync/Protocols/index.d.ts +4 -6
  173. package/lib/WAUSync/Protocols/index.js +20 -6
  174. package/lib/WAUSync/USyncQuery.d.ts +4 -6
  175. package/lib/WAUSync/USyncQuery.js +35 -44
  176. package/lib/WAUSync/USyncUser.d.ts +4 -11
  177. package/lib/WAUSync/USyncUser.js +5 -10
  178. package/lib/WAUSync/index.d.ts +3 -4
  179. package/lib/WAUSync/index.js +19 -4
  180. package/lib/index.js +31 -13
  181. package/package.json +19 -10
  182. package/WAProto/GenerateStatics.sh +0 -3
  183. package/WAProto/WAProto.proto +0 -5479
  184. package/WAProto/fix-imports.js +0 -85
  185. package/WAProto/index.d.ts +0 -14017
  186. package/lib/Defaults/index.d.ts.map +0 -1
  187. package/lib/Defaults/index.js.map +0 -1
  188. package/lib/Signal/Group/ciphertext-message.d.ts +0 -10
  189. package/lib/Signal/Group/ciphertext-message.d.ts.map +0 -1
  190. package/lib/Signal/Group/ciphertext-message.js +0 -12
  191. package/lib/Signal/Group/ciphertext-message.js.map +0 -1
  192. package/lib/Signal/Group/group-session-builder.d.ts +0 -15
  193. package/lib/Signal/Group/group-session-builder.d.ts.map +0 -1
  194. package/lib/Signal/Group/group-session-builder.js +0 -30
  195. package/lib/Signal/Group/group-session-builder.js.map +0 -1
  196. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  197. package/lib/Signal/Group/group_cipher.d.ts.map +0 -1
  198. package/lib/Signal/Group/group_cipher.js +0 -82
  199. package/lib/Signal/Group/group_cipher.js.map +0 -1
  200. package/lib/Signal/Group/index.d.ts +0 -12
  201. package/lib/Signal/Group/index.d.ts.map +0 -1
  202. package/lib/Signal/Group/index.js +0 -12
  203. package/lib/Signal/Group/index.js.map +0 -1
  204. package/lib/Signal/Group/keyhelper.d.ts +0 -11
  205. package/lib/Signal/Group/keyhelper.d.ts.map +0 -1
  206. package/lib/Signal/Group/keyhelper.js +0 -18
  207. package/lib/Signal/Group/keyhelper.js.map +0 -1
  208. package/lib/Signal/Group/sender-chain-key.d.ts +0 -14
  209. package/lib/Signal/Group/sender-chain-key.d.ts.map +0 -1
  210. package/lib/Signal/Group/sender-chain-key.js +0 -26
  211. package/lib/Signal/Group/sender-chain-key.js.map +0 -1
  212. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -17
  213. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +0 -1
  214. package/lib/Signal/Group/sender-key-distribution-message.js +0 -63
  215. package/lib/Signal/Group/sender-key-distribution-message.js.map +0 -1
  216. package/lib/Signal/Group/sender-key-message.d.ts +0 -19
  217. package/lib/Signal/Group/sender-key-message.d.ts.map +0 -1
  218. package/lib/Signal/Group/sender-key-message.js +0 -66
  219. package/lib/Signal/Group/sender-key-message.js.map +0 -1
  220. package/lib/Signal/Group/sender-key-name.d.ts +0 -18
  221. package/lib/Signal/Group/sender-key-name.d.ts.map +0 -1
  222. package/lib/Signal/Group/sender-key-name.js +0 -48
  223. package/lib/Signal/Group/sender-key-name.js.map +0 -1
  224. package/lib/Signal/Group/sender-key-record.d.ts +0 -31
  225. package/lib/Signal/Group/sender-key-record.d.ts.map +0 -1
  226. package/lib/Signal/Group/sender-key-record.js +0 -41
  227. package/lib/Signal/Group/sender-key-record.js.map +0 -1
  228. package/lib/Signal/Group/sender-key-state.d.ts +0 -39
  229. package/lib/Signal/Group/sender-key-state.d.ts.map +0 -1
  230. package/lib/Signal/Group/sender-key-state.js +0 -84
  231. package/lib/Signal/Group/sender-key-state.js.map +0 -1
  232. package/lib/Signal/Group/sender-message-key.d.ts +0 -12
  233. package/lib/Signal/Group/sender-message-key.d.ts.map +0 -1
  234. package/lib/Signal/Group/sender-message-key.js.map +0 -1
  235. package/lib/Signal/libsignal.d.ts.map +0 -1
  236. package/lib/Signal/libsignal.js.map +0 -1
  237. package/lib/Signal/lid-mapping.d.ts +0 -23
  238. package/lib/Signal/lid-mapping.d.ts.map +0 -1
  239. package/lib/Signal/lid-mapping.js +0 -277
  240. package/lib/Signal/lid-mapping.js.map +0 -1
  241. package/lib/Socket/Client/index.d.ts.map +0 -1
  242. package/lib/Socket/Client/index.js.map +0 -1
  243. package/lib/Socket/Client/types.d.ts.map +0 -1
  244. package/lib/Socket/Client/types.js +0 -11
  245. package/lib/Socket/Client/types.js.map +0 -1
  246. package/lib/Socket/Client/websocket.d.ts.map +0 -1
  247. package/lib/Socket/Client/websocket.js +0 -54
  248. package/lib/Socket/Client/websocket.js.map +0 -1
  249. package/lib/Socket/business.d.ts.map +0 -1
  250. package/lib/Socket/business.js.map +0 -1
  251. package/lib/Socket/chats.d.ts.map +0 -1
  252. package/lib/Socket/chats.js.map +0 -1
  253. package/lib/Socket/communities.d.ts +0 -273
  254. package/lib/Socket/communities.d.ts.map +0 -1
  255. package/lib/Socket/communities.js +0 -431
  256. package/lib/Socket/communities.js.map +0 -1
  257. package/lib/Socket/groups.d.ts.map +0 -1
  258. package/lib/Socket/groups.js.map +0 -1
  259. package/lib/Socket/index.d.ts.map +0 -1
  260. package/lib/Socket/index.js.map +0 -1
  261. package/lib/Socket/messages-recv.d.ts.map +0 -1
  262. package/lib/Socket/messages-recv.js.map +0 -1
  263. package/lib/Socket/messages-send.d.ts.map +0 -1
  264. package/lib/Socket/messages-send.js.map +0 -1
  265. package/lib/Socket/mex.d.ts +0 -3
  266. package/lib/Socket/mex.d.ts.map +0 -1
  267. package/lib/Socket/mex.js +0 -42
  268. package/lib/Socket/mex.js.map +0 -1
  269. package/lib/Socket/newsletter.d.ts.map +0 -1
  270. package/lib/Socket/newsletter.js.map +0 -1
  271. package/lib/Socket/socket.d.ts.map +0 -1
  272. package/lib/Socket/socket.js.map +0 -1
  273. package/lib/Types/Auth.d.ts.map +0 -1
  274. package/lib/Types/Auth.js.map +0 -1
  275. package/lib/Types/Bussines.d.ts +0 -25
  276. package/lib/Types/Bussines.d.ts.map +0 -1
  277. package/lib/Types/Bussines.js +0 -2
  278. package/lib/Types/Bussines.js.map +0 -1
  279. package/lib/Types/Call.d.ts.map +0 -1
  280. package/lib/Types/Call.js.map +0 -1
  281. package/lib/Types/Chat.d.ts.map +0 -1
  282. package/lib/Types/Chat.js.map +0 -1
  283. package/lib/Types/Contact.d.ts.map +0 -1
  284. package/lib/Types/Contact.js.map +0 -1
  285. package/lib/Types/Events.d.ts.map +0 -1
  286. package/lib/Types/Events.js.map +0 -1
  287. package/lib/Types/GroupMetadata.d.ts.map +0 -1
  288. package/lib/Types/GroupMetadata.js.map +0 -1
  289. package/lib/Types/Label.d.ts.map +0 -1
  290. package/lib/Types/Label.js.map +0 -1
  291. package/lib/Types/LabelAssociation.d.ts.map +0 -1
  292. package/lib/Types/LabelAssociation.js.map +0 -1
  293. package/lib/Types/Message.d.ts.map +0 -1
  294. package/lib/Types/Message.js.map +0 -1
  295. package/lib/Types/Mex.d.ts +0 -141
  296. package/lib/Types/Mex.d.ts.map +0 -1
  297. package/lib/Types/Mex.js +0 -37
  298. package/lib/Types/Mex.js.map +0 -1
  299. package/lib/Types/Product.d.ts.map +0 -1
  300. package/lib/Types/Product.js.map +0 -1
  301. package/lib/Types/Signal.d.ts.map +0 -1
  302. package/lib/Types/Signal.js.map +0 -1
  303. package/lib/Types/Socket.d.ts.map +0 -1
  304. package/lib/Types/Socket.js.map +0 -1
  305. package/lib/Types/State.d.ts.map +0 -1
  306. package/lib/Types/State.js.map +0 -1
  307. package/lib/Types/USync.d.ts.map +0 -1
  308. package/lib/Types/USync.js.map +0 -1
  309. package/lib/Types/index.d.ts.map +0 -1
  310. package/lib/Types/index.js.map +0 -1
  311. package/lib/Utils/auth-utils.d.ts.map +0 -1
  312. package/lib/Utils/auth-utils.js.map +0 -1
  313. package/lib/Utils/browser-utils.d.ts +0 -4
  314. package/lib/Utils/browser-utils.d.ts.map +0 -1
  315. package/lib/Utils/browser-utils.js +0 -29
  316. package/lib/Utils/browser-utils.js.map +0 -1
  317. package/lib/Utils/business.d.ts.map +0 -1
  318. package/lib/Utils/business.js.map +0 -1
  319. package/lib/Utils/chat-utils.d.ts.map +0 -1
  320. package/lib/Utils/chat-utils.js.map +0 -1
  321. package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
  322. package/lib/Utils/companion-reg-client-utils.d.ts.map +0 -1
  323. package/lib/Utils/companion-reg-client-utils.js +0 -35
  324. package/lib/Utils/companion-reg-client-utils.js.map +0 -1
  325. package/lib/Utils/crypto.d.ts.map +0 -1
  326. package/lib/Utils/crypto.js.map +0 -1
  327. package/lib/Utils/decode-wa-message.d.ts.map +0 -1
  328. package/lib/Utils/decode-wa-message.js.map +0 -1
  329. package/lib/Utils/event-buffer.d.ts.map +0 -1
  330. package/lib/Utils/event-buffer.js.map +0 -1
  331. package/lib/Utils/generics.d.ts.map +0 -1
  332. package/lib/Utils/generics.js.map +0 -1
  333. package/lib/Utils/history.d.ts.map +0 -1
  334. package/lib/Utils/history.js.map +0 -1
  335. package/lib/Utils/identity-change-handler.d.ts +0 -44
  336. package/lib/Utils/identity-change-handler.d.ts.map +0 -1
  337. package/lib/Utils/identity-change-handler.js +0 -50
  338. package/lib/Utils/identity-change-handler.js.map +0 -1
  339. package/lib/Utils/index.d.ts.map +0 -1
  340. package/lib/Utils/index.js.map +0 -1
  341. package/lib/Utils/link-preview.d.ts.map +0 -1
  342. package/lib/Utils/link-preview.js.map +0 -1
  343. package/lib/Utils/logger.d.ts.map +0 -1
  344. package/lib/Utils/logger.js.map +0 -1
  345. package/lib/Utils/lt-hash.d.ts.map +0 -1
  346. package/lib/Utils/lt-hash.js.map +0 -1
  347. package/lib/Utils/make-mutex.d.ts.map +0 -1
  348. package/lib/Utils/make-mutex.js.map +0 -1
  349. package/lib/Utils/message-retry-manager.d.ts +0 -115
  350. package/lib/Utils/message-retry-manager.d.ts.map +0 -1
  351. package/lib/Utils/message-retry-manager.js +0 -265
  352. package/lib/Utils/message-retry-manager.js.map +0 -1
  353. package/lib/Utils/messages-media.d.ts.map +0 -1
  354. package/lib/Utils/messages-media.js.map +0 -1
  355. package/lib/Utils/messages.d.ts.map +0 -1
  356. package/lib/Utils/messages.js.map +0 -1
  357. package/lib/Utils/noise-handler.d.ts.map +0 -1
  358. package/lib/Utils/noise-handler.js.map +0 -1
  359. package/lib/Utils/offline-node-processor.d.ts +0 -17
  360. package/lib/Utils/offline-node-processor.d.ts.map +0 -1
  361. package/lib/Utils/offline-node-processor.js +0 -40
  362. package/lib/Utils/offline-node-processor.js.map +0 -1
  363. package/lib/Utils/pre-key-manager.d.ts +0 -28
  364. package/lib/Utils/pre-key-manager.d.ts.map +0 -1
  365. package/lib/Utils/pre-key-manager.js +0 -106
  366. package/lib/Utils/pre-key-manager.js.map +0 -1
  367. package/lib/Utils/process-message.d.ts.map +0 -1
  368. package/lib/Utils/process-message.js.map +0 -1
  369. package/lib/Utils/reporting-utils.d.ts +0 -11
  370. package/lib/Utils/reporting-utils.d.ts.map +0 -1
  371. package/lib/Utils/reporting-utils.js +0 -258
  372. package/lib/Utils/reporting-utils.js.map +0 -1
  373. package/lib/Utils/signal.d.ts.map +0 -1
  374. package/lib/Utils/signal.js.map +0 -1
  375. package/lib/Utils/stanza-ack.d.ts +0 -11
  376. package/lib/Utils/stanza-ack.d.ts.map +0 -1
  377. package/lib/Utils/stanza-ack.js +0 -38
  378. package/lib/Utils/stanza-ack.js.map +0 -1
  379. package/lib/Utils/sync-action-utils.d.ts +0 -19
  380. package/lib/Utils/sync-action-utils.d.ts.map +0 -1
  381. package/lib/Utils/sync-action-utils.js +0 -49
  382. package/lib/Utils/sync-action-utils.js.map +0 -1
  383. package/lib/Utils/tc-token-utils.d.ts +0 -37
  384. package/lib/Utils/tc-token-utils.d.ts.map +0 -1
  385. package/lib/Utils/tc-token-utils.js +0 -164
  386. package/lib/Utils/tc-token-utils.js.map +0 -1
  387. package/lib/Utils/use-multi-file-auth-state.d.ts.map +0 -1
  388. package/lib/Utils/use-multi-file-auth-state.js.map +0 -1
  389. package/lib/Utils/validate-connection.d.ts.map +0 -1
  390. package/lib/Utils/validate-connection.js.map +0 -1
  391. package/lib/WABinary/constants.d.ts.map +0 -1
  392. package/lib/WABinary/constants.js.map +0 -1
  393. package/lib/WABinary/decode.d.ts.map +0 -1
  394. package/lib/WABinary/decode.js.map +0 -1
  395. package/lib/WABinary/encode.d.ts.map +0 -1
  396. package/lib/WABinary/encode.js.map +0 -1
  397. package/lib/WABinary/generic-utils.d.ts.map +0 -1
  398. package/lib/WABinary/generic-utils.js.map +0 -1
  399. package/lib/WABinary/index.d.ts.map +0 -1
  400. package/lib/WABinary/index.js.map +0 -1
  401. package/lib/WABinary/jid-utils.d.ts.map +0 -1
  402. package/lib/WABinary/jid-utils.js.map +0 -1
  403. package/lib/WABinary/types.d.ts.map +0 -1
  404. package/lib/WABinary/types.js.map +0 -1
  405. package/lib/WAM/BinaryInfo.d.ts.map +0 -1
  406. package/lib/WAM/BinaryInfo.js.map +0 -1
  407. package/lib/WAM/constants.d.ts.map +0 -1
  408. package/lib/WAM/constants.js.map +0 -1
  409. package/lib/WAM/encode.d.ts.map +0 -1
  410. package/lib/WAM/encode.js.map +0 -1
  411. package/lib/WAM/index.d.ts.map +0 -1
  412. package/lib/WAM/index.js.map +0 -1
  413. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +0 -1
  414. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +0 -1
  415. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +0 -1
  416. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +0 -1
  417. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +0 -1
  418. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +0 -1
  419. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +0 -1
  420. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +0 -1
  421. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
  422. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +0 -1
  423. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  424. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +0 -1
  425. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +0 -1
  426. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +0 -1
  427. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +0 -1
  428. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +0 -1
  429. package/lib/WAUSync/Protocols/index.d.ts.map +0 -1
  430. package/lib/WAUSync/Protocols/index.js.map +0 -1
  431. package/lib/WAUSync/USyncQuery.d.ts.map +0 -1
  432. package/lib/WAUSync/USyncQuery.js.map +0 -1
  433. package/lib/WAUSync/USyncUser.d.ts.map +0 -1
  434. package/lib/WAUSync/USyncUser.js.map +0 -1
  435. package/lib/WAUSync/index.d.ts.map +0 -1
  436. package/lib/WAUSync/index.js.map +0 -1
  437. package/lib/index.d.ts +0 -12
  438. package/lib/index.d.ts.map +0 -1
  439. package/lib/index.js.map +0 -1
@@ -1,49 +1,56 @@
1
- import { Boom } from '@hapi/boom';
2
- import { randomBytes } from 'crypto';
3
- import { promises as fs } from 'fs';
4
- import {} from 'stream';
5
- import { proto } from '../../WAProto/index.js';
6
- import { CALL_AUDIO_PREFIX, CALL_VIDEO_PREFIX, MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults/index.js';
7
- import { WAMessageStatus, WAProto } from '../Types/index.js';
8
- import { isJidGroup, isJidNewsletter, isJidStatusBroadcast, jidNormalizedUser } from '../WABinary/index.js';
9
- import { sha256 } from './crypto.js';
10
- import { generateMessageIDV2, getKeyAuthor, unixTimestampSeconds } from './generics.js';
11
- import { downloadContentFromMessage, encryptedStream, generateThumbnail, getAudioDuration, getAudioWaveform, getRawMediaUploadData } from './messages-media.js';
12
- import { shouldIncludeReportingToken } from './reporting-utils.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.getAggregateVotesInPollMessage = 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
+ const boom_1 = require("@hapi/boom");
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const crypto_1 = require("crypto");
10
+ const fs_1 = require("fs");
11
+ const WAProto_1 = require("../../WAProto");
12
+ const Defaults_1 = require("../Defaults");
13
+ const Types_1 = require("../Types");
14
+ const WABinary_1 = require("../WABinary");
15
+ const crypto_2 = require("./crypto");
16
+ const generics_1 = require("./generics");
17
+ const messages_media_1 = require("./messages-media");
13
18
  const MIMETYPE_MAP = {
14
19
  image: 'image/jpeg',
15
20
  video: 'video/mp4',
16
21
  document: 'application/pdf',
17
22
  audio: 'audio/ogg; codecs=opus',
18
23
  sticker: 'image/webp',
19
- 'product-catalog-image': 'image/jpeg'
24
+ 'product-catalog-image': 'image/jpeg',
20
25
  };
21
26
  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
27
+ 'image': Types_1.WAProto.Message.ImageMessage,
28
+ 'video': Types_1.WAProto.Message.VideoMessage,
29
+ 'audio': Types_1.WAProto.Message.AudioMessage,
30
+ 'sticker': Types_1.WAProto.Message.StickerMessage,
31
+ 'document': Types_1.WAProto.Message.DocumentMessage,
27
32
  };
33
+ const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
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);
39
46
  return urlInfo;
40
47
  }
41
- catch (error) {
42
- // ignore if fails
43
- logger?.warn({ trace: error.stack }, 'url generation failed');
48
+ catch (error) { // ignore if fails
49
+ logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
44
50
  }
45
51
  }
46
52
  };
53
+ exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
47
54
  const assertColor = async (color) => {
48
55
  let assertedColor;
49
56
  if (typeof color === 'number') {
@@ -58,16 +65,16 @@ const assertColor = async (color) => {
58
65
  return assertedColor;
59
66
  }
60
67
  };
61
- export const prepareWAMessageMedia = async (message, options) => {
68
+ const prepareWAMessageMedia = async (message, options) => {
62
69
  const logger = options.logger;
63
70
  let mediaType;
64
- for (const key of MEDIA_KEYS) {
71
+ for (const key of Defaults_1.MEDIA_KEYS) {
65
72
  if (key in message) {
66
73
  mediaType = key;
67
74
  }
68
75
  }
69
76
  if (!mediaType) {
70
- throw new Boom('Invalid media type', { statusCode: 400 });
77
+ throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
71
78
  }
72
79
  const uploadData = {
73
80
  ...message,
@@ -76,132 +83,100 @@ export const prepareWAMessageMedia = async (message, options) => {
76
83
  delete uploadData[mediaType];
77
84
  // check if cacheable + generate cache key
78
85
  const cacheableKey = typeof uploadData.media === 'object' &&
79
- 'url' in uploadData.media &&
86
+ ('url' in uploadData.media) &&
80
87
  !!uploadData.media.url &&
81
- !!options.mediaCache &&
82
- mediaType + ':' + uploadData.media.url.toString();
88
+ !!options.mediaCache && (
89
+ // generate the key
90
+ mediaType + ':' + uploadData.media.url.toString());
83
91
  if (mediaType === 'document' && !uploadData.fileName) {
84
92
  uploadData.fileName = 'file';
85
93
  }
86
94
  if (!uploadData.mimetype) {
87
95
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
88
96
  }
97
+ // check for cache hit
89
98
  if (cacheableKey) {
90
- const mediaBuff = await options.mediaCache.get(cacheableKey);
99
+ const mediaBuff = options.mediaCache.get(cacheableKey);
91
100
  if (mediaBuff) {
92
- logger?.debug({ cacheableKey }, 'got media cache hit');
93
- const obj = proto.Message.decode(mediaBuff);
101
+ logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
102
+ const obj = Types_1.WAProto.Message.decode(mediaBuff);
94
103
  const key = `${mediaType}Message`;
95
104
  Object.assign(obj[key], { ...uploadData, media: undefined });
96
105
  return obj;
97
106
  }
98
107
  }
99
- const isNewsletter = !!options.jid && isJidNewsletter(options.jid);
100
- if (isNewsletter) {
101
- logger?.info({ key: cacheableKey }, 'Preparing raw media for newsletter');
102
- const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger);
103
- const fileSha256B64 = fileSha256.toString('base64');
104
- const { mediaUrl, directPath } = await options.upload(filePath, {
105
- fileEncSha256B64: fileSha256B64,
106
- mediaType: mediaType,
107
- timeoutMs: options.mediaUploadTimeoutMs
108
- });
109
- await fs.unlink(filePath);
110
- const obj = WAProto.Message.fromObject({
111
- // todo: add more support here
112
- [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
113
- url: mediaUrl,
114
- directPath,
115
- fileSha256,
116
- fileLength,
117
- ...uploadData,
118
- media: undefined
119
- })
120
- });
121
- if (uploadData.ptv) {
122
- obj.ptvMessage = obj.videoMessage;
123
- delete obj.videoMessage;
124
- }
125
- if (obj.stickerMessage) {
126
- obj.stickerMessage.stickerSentTs = Date.now();
127
- }
128
- if (cacheableKey) {
129
- logger?.debug({ cacheableKey }, 'set cache');
130
- await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
131
- }
132
- return obj;
133
- }
134
108
  const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
135
- const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData['jpegThumbnail'] === 'undefined';
136
- const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined';
109
+ const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
110
+ (typeof uploadData['jpegThumbnail'] === 'undefined');
111
+ const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
137
112
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
138
113
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
139
- const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream(uploadData.media, options.mediaTypeOverride || mediaType, {
114
+ const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
140
115
  logger,
141
116
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
142
117
  opts: options.options
143
118
  });
144
- const fileEncSha256B64 = fileEncSha256.toString('base64');
145
- const [{ mediaUrl, directPath }] = await Promise.all([
119
+ // url safe Base64 encode the SHA256 hash of the body
120
+ const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
121
+ const [{ mediaUrl, directPath, handle }] = await Promise.all([
146
122
  (async () => {
147
- const result = await options.upload(encFilePath, {
148
- fileEncSha256B64,
149
- mediaType,
150
- timeoutMs: options.mediaUploadTimeoutMs
151
- });
152
- logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
123
+ const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
124
+ logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
153
125
  return result;
154
126
  })(),
155
127
  (async () => {
156
128
  try {
157
129
  if (requiresThumbnailComputation) {
158
- const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options);
130
+ const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
159
131
  uploadData.jpegThumbnail = thumbnail;
160
132
  if (!uploadData.width && originalImageDimensions) {
161
133
  uploadData.width = originalImageDimensions.width;
162
134
  uploadData.height = originalImageDimensions.height;
163
- logger?.debug('set dimensions');
135
+ logger === null || logger === void 0 ? void 0 : logger.debug('set dimensions');
164
136
  }
165
- logger?.debug('generated thumbnail');
137
+ logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
166
138
  }
167
139
  if (requiresDurationComputation) {
168
- uploadData.seconds = await getAudioDuration(originalFilePath);
169
- logger?.debug('computed audio duration');
140
+ uploadData.seconds = await (0, messages_media_1.getAudioDuration)(bodyPath);
141
+ logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
170
142
  }
171
143
  if (requiresWaveformProcessing) {
172
- uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
173
- logger?.debug('processed waveform');
144
+ uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
145
+ logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
146
+ }
147
+ if (requiresWaveformProcessing) {
148
+ uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
149
+ logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
174
150
  }
175
151
  if (requiresAudioBackground) {
176
152
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
177
- logger?.debug('computed backgroundColor audio status');
153
+ logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
178
154
  }
179
155
  }
180
156
  catch (error) {
181
- logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
182
- }
183
- })()
184
- ]).finally(async () => {
185
- try {
186
- await fs.unlink(encFilePath);
187
- if (originalFilePath) {
188
- await fs.unlink(originalFilePath);
157
+ logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
189
158
  }
190
- logger?.debug('removed tmp files');
159
+ })(),
160
+ ])
161
+ .finally(async () => {
162
+ if (!Buffer.isBuffer(encWriteStream)) {
163
+ encWriteStream.destroy();
191
164
  }
192
- catch (error) {
193
- logger?.warn('failed to remove tmp file');
165
+ // remove tmp files
166
+ if (didSaveToTmpPath && bodyPath) {
167
+ await fs_1.promises.unlink(bodyPath);
168
+ logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
194
169
  }
195
170
  });
196
- const obj = WAProto.Message.fromObject({
171
+ const obj = Types_1.WAProto.Message.fromObject({
197
172
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
198
- url: mediaUrl,
173
+ url: handle ? undefined : mediaUrl,
199
174
  directPath,
200
- mediaKey,
201
- fileEncSha256,
175
+ mediaKey: mediaKey,
176
+ fileEncSha256: fileEncSha256,
202
177
  fileSha256,
203
178
  fileLength,
204
- mediaKeyTimestamp: unixTimestampSeconds(),
179
+ mediaKeyTimestamp: handle ? undefined : (0, generics_1.unixTimestampSeconds)(),
205
180
  ...uploadData,
206
181
  media: undefined
207
182
  })
@@ -211,75 +186,70 @@ export const prepareWAMessageMedia = async (message, options) => {
211
186
  delete obj.videoMessage;
212
187
  }
213
188
  if (cacheableKey) {
214
- logger?.debug({ cacheableKey }, 'set cache');
215
- await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
189
+ logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
190
+ options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
216
191
  }
217
192
  return obj;
218
193
  };
219
- export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
194
+ exports.prepareWAMessageMedia = prepareWAMessageMedia;
195
+ const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
220
196
  ephemeralExpiration = ephemeralExpiration || 0;
221
197
  const content = {
222
198
  ephemeralMessage: {
223
199
  message: {
224
200
  protocolMessage: {
225
- type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
201
+ type: Types_1.WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
226
202
  ephemeralExpiration
227
203
  }
228
204
  }
229
205
  }
230
206
  };
231
- return WAProto.Message.fromObject(content);
207
+ return Types_1.WAProto.Message.fromObject(content);
232
208
  };
209
+ exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
233
210
  /**
234
211
  * Generate forwarded message content like WA does
235
212
  * @param message the message to forward
236
213
  * @param options.forceForward will show the message as forwarded even if it is from you
237
214
  */
238
- export const generateForwardMessageContent = (message, forceForward) => {
215
+ const generateForwardMessageContent = (message, forceForward) => {
216
+ var _a;
239
217
  let content = message.message;
240
218
  if (!content) {
241
- throw new Boom('no content in message', { statusCode: 400 });
219
+ throw new boom_1.Boom('no content in message', { statusCode: 400 });
242
220
  }
243
221
  // hacky copy
244
- content = normalizeMessageContent(content);
245
- content = proto.Message.decode(proto.Message.encode(content).finish());
222
+ content = (0, exports.normalizeMessageContent)(content);
223
+ content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
246
224
  let key = Object.keys(content)[0];
247
- let score = content?.[key]?.contextInfo?.forwardingScore || 0;
225
+ let score = ((_a = content[key].contextInfo) === null || _a === void 0 ? void 0 : _a.forwardingScore) || 0;
248
226
  score += message.key.fromMe && !forceForward ? 0 : 1;
249
227
  if (key === 'conversation') {
250
228
  content.extendedTextMessage = { text: content[key] };
251
229
  delete content.conversation;
252
230
  key = 'extendedTextMessage';
253
231
  }
254
- const key_ = content?.[key];
255
232
  if (score > 0) {
256
- key_.contextInfo = { forwardingScore: score, isForwarded: true };
233
+ content[key].contextInfo = { forwardingScore: score, isForwarded: true };
257
234
  }
258
235
  else {
259
- key_.contextInfo = {};
236
+ content[key].contextInfo = {};
260
237
  }
261
238
  return content;
262
239
  };
263
- export const hasNonNullishProperty = (message, key) => {
264
- return (typeof message === 'object' &&
265
- message !== null &&
266
- key in message &&
267
- message[key] !== null &&
268
- message[key] !== undefined);
269
- };
270
- function hasOptionalProperty(obj, key) {
271
- return typeof obj === 'object' && obj !== null && key in obj && obj[key] !== null;
272
- }
273
- export const generateWAMessageContent = async (message, options) => {
274
- var _a, _b;
240
+ exports.generateForwardMessageContent = generateForwardMessageContent;
241
+ const generateWAMessageContent = async (message, options) => {
242
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
243
+ var _6, _7;
275
244
  let m = {};
276
- if (hasNonNullishProperty(message, 'text')) {
245
+ if ('text' in message) {
277
246
  const extContent = { text: message.text };
278
247
  let urlInfo = message.linkPreview;
279
248
  if (typeof urlInfo === 'undefined') {
280
- urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger);
249
+ urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
281
250
  }
282
251
  if (urlInfo) {
252
+ extContent.canonicalUrl = urlInfo['canonical-url'];
283
253
  extContent.matchedText = urlInfo['matched-text'];
284
254
  extContent.jpegThumbnail = urlInfo.jpegThumbnail;
285
255
  extContent.description = urlInfo.description;
@@ -304,65 +274,81 @@ export const generateWAMessageContent = async (message, options) => {
304
274
  }
305
275
  m.extendedTextMessage = extContent;
306
276
  }
307
- else if (hasNonNullishProperty(message, 'contacts')) {
277
+ else if ('contacts' in message) {
308
278
  const contactLen = message.contacts.contacts.length;
309
279
  if (!contactLen) {
310
- throw new Boom('require atleast 1 contact', { statusCode: 400 });
280
+ throw new boom_1.Boom('require atleast 1 contact', { statusCode: 400 });
311
281
  }
312
282
  if (contactLen === 1) {
313
- m.contactMessage = WAProto.Message.ContactMessage.create(message.contacts.contacts[0]);
283
+ m.contactMessage = Types_1.WAProto.Message.ContactMessage.fromObject(message.contacts.contacts[0]);
314
284
  }
315
285
  else {
316
- m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.create(message.contacts);
286
+ m.contactsArrayMessage = Types_1.WAProto.Message.ContactsArrayMessage.fromObject(message.contacts);
287
+ }
288
+ }
289
+ else if ('location' in message) {
290
+ m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
291
+ if ('contextInfo' in message && !!message.contextInfo) {
292
+ m.locationMessage.contextInfo = message.contextInfo;
317
293
  }
318
294
  }
319
- else if (hasNonNullishProperty(message, 'location')) {
320
- m.locationMessage = WAProto.Message.LocationMessage.create(message.location);
295
+ else if ('liveLocation' in message) {
296
+ m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
297
+ if ('contextInfo' in message && !!message.contextInfo) {
298
+ m.liveLocationMessage.contextInfo = message.contextInfo;
299
+ }
321
300
  }
322
- else if (hasNonNullishProperty(message, 'react')) {
301
+ else if ('react' in message) {
323
302
  if (!message.react.senderTimestampMs) {
324
303
  message.react.senderTimestampMs = Date.now();
325
304
  }
326
- m.reactionMessage = WAProto.Message.ReactionMessage.create(message.react);
305
+ m.reactionMessage = Types_1.WAProto.Message.ReactionMessage.fromObject(message.react);
327
306
  }
328
- else if (hasNonNullishProperty(message, 'delete')) {
307
+ else if ('delete' in message) {
329
308
  m.protocolMessage = {
330
309
  key: message.delete,
331
- type: WAProto.Message.ProtocolMessage.Type.REVOKE
310
+ type: Types_1.WAProto.Message.ProtocolMessage.Type.REVOKE
332
311
  };
333
312
  }
334
- else if (hasNonNullishProperty(message, 'forward')) {
335
- m = generateForwardMessageContent(message.forward, message.force);
313
+ else if ('forward' in message) {
314
+ m = (0, exports.generateForwardMessageContent)(message.forward, message.force);
336
315
  }
337
- else if (hasNonNullishProperty(message, 'disappearingMessagesInChat')) {
338
- const exp = typeof message.disappearingMessagesInChat === 'boolean'
339
- ? message.disappearingMessagesInChat
340
- ? WA_DEFAULT_EPHEMERAL
341
- : 0
342
- : message.disappearingMessagesInChat;
343
- m = prepareDisappearingMessageSettingContent(exp);
316
+ else if ('disappearingMessagesInChat' in message) {
317
+ const exp = typeof message.disappearingMessagesInChat === 'boolean' ?
318
+ (message.disappearingMessagesInChat ? Defaults_1.WA_DEFAULT_EPHEMERAL : 0) :
319
+ message.disappearingMessagesInChat;
320
+ m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
344
321
  }
345
- else if (hasNonNullishProperty(message, 'groupInvite')) {
322
+ else if ('groupInvite' in message) {
346
323
  m.groupInviteMessage = {};
347
324
  m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
348
325
  m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
349
326
  m.groupInviteMessage.caption = message.groupInvite.text;
350
327
  m.groupInviteMessage.groupJid = message.groupInvite.jid;
351
328
  m.groupInviteMessage.groupName = message.groupInvite.subject;
329
+ m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
352
330
  //TODO: use built-in interface and get disappearing mode info etc.
353
331
  //TODO: cache / use store!?
354
332
  if (options.getProfilePicUrl) {
355
- const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
333
+ let pfpUrl;
334
+ try {
335
+ pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
336
+ }
337
+ catch (_8) {
338
+ pfpUrl = null;
339
+ }
356
340
  if (pfpUrl) {
357
- const resp = await fetch(pfpUrl, { method: 'GET', dispatcher: options?.options?.dispatcher });
358
- if (resp.ok) {
359
- const buf = Buffer.from(await resp.arrayBuffer());
360
- m.groupInviteMessage.jpegThumbnail = buf;
341
+ const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
342
+ if (resp.status === 200) {
343
+ m.groupInviteMessage.jpegThumbnail = resp.data;
361
344
  }
362
345
  }
346
+ else {
347
+ m.groupInviteMessage.jpegThumbnail = null;
348
+ }
363
349
  }
364
350
  }
365
- else if (hasNonNullishProperty(message, 'pin')) {
351
+ else if ('pin' in message) {
366
352
  m.pinInChatMessage = {};
367
353
  m.messageContextInfo = {};
368
354
  m.pinInChatMessage.key = message.pin;
@@ -370,208 +356,573 @@ export const generateWAMessageContent = async (message, options) => {
370
356
  m.pinInChatMessage.senderTimestampMs = Date.now();
371
357
  m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
372
358
  }
373
- else if (hasNonNullishProperty(message, 'buttonReply')) {
359
+ else if ('keep' in message) {
360
+ m.keepInChatMessage = {};
361
+ m.keepInChatMessage.key = message.keep;
362
+ m.keepInChatMessage.keepType = message.type;
363
+ m.keepInChatMessage.timestampMs = Date.now();
364
+ }
365
+ else if ('call' in message) {
366
+ m = {
367
+ scheduledCallCreationMessage: {
368
+ scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
369
+ callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
370
+ title: message.call.title
371
+ }
372
+ };
373
+ }
374
+ else if ('paymentInvite' in message) {
375
+ m.paymentInviteMessage = {
376
+ serviceType: message.paymentInvite.type,
377
+ expiryTimestamp: message.paymentInvite.expiry
378
+ };
379
+ }
380
+ else if ('buttonReply' in message) {
374
381
  switch (message.type) {
375
382
  case 'template':
376
383
  m.templateButtonReplyMessage = {
377
384
  selectedDisplayText: message.buttonReply.displayText,
378
385
  selectedId: message.buttonReply.id,
379
- selectedIndex: message.buttonReply.index
386
+ selectedIndex: message.buttonReply.index,
380
387
  };
381
388
  break;
382
389
  case 'plain':
383
390
  m.buttonsResponseMessage = {
384
391
  selectedButtonId: message.buttonReply.id,
385
392
  selectedDisplayText: message.buttonReply.displayText,
386
- type: proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT
393
+ type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
394
+ };
395
+ break;
396
+ case 'interactive':
397
+ m.interactiveResponseMessage = {
398
+ body: {
399
+ text: message.buttonReply.text,
400
+ format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
401
+ },
402
+ nativeFlowResponseMessage: {
403
+ name: message.buttonReply.nativeFlow.name,
404
+ paramsJson: message.buttonReply.nativeFlow.paramsJson,
405
+ version: message.buttonReply.nativeFlow.version
406
+ }
387
407
  };
388
408
  break;
389
409
  }
390
410
  }
391
- else if (hasOptionalProperty(message, 'ptv') && message.ptv) {
392
- const { videoMessage } = await prepareWAMessageMedia({ video: message.video }, options);
411
+ else if ('ptv' in message && message.ptv) {
412
+ const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
393
413
  m.ptvMessage = videoMessage;
394
414
  }
395
- else if (hasNonNullishProperty(message, 'product')) {
396
- const { imageMessage } = await prepareWAMessageMedia({ image: message.product.productImage }, options);
397
- m.productMessage = WAProto.Message.ProductMessage.create({
415
+ else if ('product' in message) {
416
+ const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: (_c = message === null || message === void 0 ? void 0 : message.product) === null || _c === void 0 ? void 0 : _c.productImage }, options);
417
+ m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
398
418
  ...message,
399
419
  product: {
400
420
  ...message.product,
401
- productImage: imageMessage
421
+ productImage: imageMessage,
402
422
  }
403
423
  });
424
+ if ('contextInfo' in message && !!message.contextInfo) {
425
+ m.productMessage.contextInfo = message.contextInfo;
426
+ }
427
+ if ('mentions' in message && !!message.mentions) {
428
+ m.productMessage.contextInfo = { mentionedJid: message.mentions };
429
+ }
430
+ }
431
+ else if ('order' in message) {
432
+ m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
433
+ orderId: message.order.id,
434
+ thumbnail: message.order.thumbnail,
435
+ itemCount: message.order.itemCount,
436
+ status: message.order.status,
437
+ surface: message.order.surface,
438
+ orderTitle: message.order.title,
439
+ message: message.order.text,
440
+ sellerJid: message.order.seller,
441
+ token: message.order.token,
442
+ totalAmount1000: message.order.amount,
443
+ totalCurrencyCode: message.order.currency
444
+ });
404
445
  }
405
- else if (hasNonNullishProperty(message, 'listReply')) {
446
+ else if ('listReply' in message) {
406
447
  m.listResponseMessage = { ...message.listReply };
407
448
  }
408
- else if (hasNonNullishProperty(message, 'event')) {
409
- m.eventMessage = {};
410
- const startTime = Math.floor(message.event.startDate.getTime() / 1000);
411
- if (message.event.call && options.getCallLink) {
412
- const token = await options.getCallLink(message.event.call, { startTime });
413
- m.eventMessage.joinLink = (message.event.call === 'audio' ? CALL_AUDIO_PREFIX : CALL_VIDEO_PREFIX) + token;
414
- }
415
- m.messageContextInfo = {
416
- // encKey
417
- messageSecret: message.event.messageSecret || randomBytes(32)
418
- };
419
- m.eventMessage.name = message.event.name;
420
- m.eventMessage.description = message.event.description;
421
- m.eventMessage.startTime = startTime;
422
- m.eventMessage.endTime = message.event.endDate ? message.event.endDate.getTime() / 1000 : undefined;
423
- m.eventMessage.isCanceled = message.event.isCancelled ?? false;
424
- m.eventMessage.extraGuestsAllowed = message.event.extraGuestsAllowed;
425
- m.eventMessage.isScheduleCall = message.event.isScheduleCall ?? false;
426
- m.eventMessage.location = message.event.location;
427
- }
428
- else if (hasNonNullishProperty(message, 'poll')) {
429
- (_a = message.poll).selectableCount || (_a.selectableCount = 0);
430
- (_b = message.poll).toAnnouncementGroup || (_b.toAnnouncementGroup = false);
449
+ else if ('poll' in message) {
450
+ (_6 = message.poll).selectableCount || (_6.selectableCount = 0);
451
+ (_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
431
452
  if (!Array.isArray(message.poll.values)) {
432
- throw new Boom('Invalid poll values', { statusCode: 400 });
453
+ throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
433
454
  }
434
- if (message.poll.selectableCount < 0 || message.poll.selectableCount > message.poll.values.length) {
435
- throw new Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, {
436
- statusCode: 400
437
- });
455
+ if (message.poll.selectableCount < 0
456
+ || message.poll.selectableCount > message.poll.values.length) {
457
+ throw new boom_1.Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, { statusCode: 400 });
438
458
  }
439
459
  m.messageContextInfo = {
440
460
  // encKey
441
- messageSecret: message.poll.messageSecret || randomBytes(32)
461
+ messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
442
462
  };
443
463
  const pollCreationMessage = {
444
464
  name: message.poll.name,
445
465
  selectableOptionsCount: message.poll.selectableCount,
446
- options: message.poll.values.map(optionName => ({ optionName }))
466
+ options: message.poll.values.map(optionName => ({ optionName })),
447
467
  };
448
468
  if (message.poll.toAnnouncementGroup) {
449
469
  // poll v2 is for community announcement groups (single select and multiple)
450
470
  m.pollCreationMessageV2 = pollCreationMessage;
451
471
  }
452
472
  else {
453
- if (message.poll.selectableCount === 1) {
473
+ if (message.poll.selectableCount > 0) {
454
474
  //poll v3 is for single select polls
455
475
  m.pollCreationMessageV3 = pollCreationMessage;
456
476
  }
457
477
  else {
458
- // poll for multiple choice polls
478
+ // poll v3 for multiple choice polls
459
479
  m.pollCreationMessage = pollCreationMessage;
460
480
  }
461
481
  }
482
+ if ('contextInfo' in message && !!message.contextInfo) {
483
+ pollCreationMessage.contextInfo = message.contextInfo;
484
+ }
462
485
  }
463
- else if (hasNonNullishProperty(message, 'album')) {
464
- m.albumMessage = {
465
- expectedImageCount: message.album.expectedImageCount,
466
- expectedVideoCount: message.album.expectedVideoCount
486
+ else if ('pollResult' in message) {
487
+ if (!Array.isArray(message.pollResult.votes)) {
488
+ throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
489
+ }
490
+ m.messageContextInfo = {
491
+ // encKey
492
+ messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
493
+ };
494
+ const pollResultSnapshotMessage = {
495
+ name: message.pollResult.name,
496
+ pollVotes: message.pollResult.votes.map((option) => ({
497
+ optionName: option[0],
498
+ optionVoteCount: option[1]
499
+ })),
467
500
  };
501
+ if ('contextInfo' in message && !!message.contextInfo) {
502
+ pollResultSnapshotMessage.contextInfo = message.contextInfo;
503
+ }
504
+ if ('mentions' in message && !!message.mentions) {
505
+ pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
506
+ }
507
+ m.pollResultSnapshotMessage = pollResultSnapshotMessage;
468
508
  }
469
- else if (hasNonNullishProperty(message, 'sharePhoneNumber')) {
470
- m.protocolMessage = {
471
- type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
509
+ else if ('event' in message) {
510
+ m.messageContextInfo = {
511
+ messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
472
512
  };
513
+ m.eventMessage = { ...message.event };
473
514
  }
474
- else if (hasNonNullishProperty(message, 'requestPhoneNumber')) {
475
- m.requestPhoneNumberMessage = {};
515
+ else if ('inviteAdmin' in message) {
516
+ m.newsletterAdminInviteMessage = {};
517
+ m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
518
+ m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
519
+ m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
520
+ m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
521
+ m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
522
+ //TODO: use built-in interface and get disappearing mode info etc.
523
+ //TODO: cache / use store!?
524
+ if (options.getProfilePicUrl) {
525
+ let pfpUrl;
526
+ try {
527
+ pfpUrl = await options.getProfilePicUrl(message.inviteAdmin.jid, 'preview');
528
+ }
529
+ catch (_9) {
530
+ pfpUrl = null;
531
+ }
532
+ if (pfpUrl) {
533
+ const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
534
+ if (resp.status === 200) {
535
+ m.newsletterAdminInviteMessage.jpegThumbnail = resp.data;
536
+ }
537
+ }
538
+ else {
539
+ m.newsletterAdminInviteMessage.jpegThumbnail = null;
540
+ }
541
+ }
542
+ }
543
+ else if ('requestPayment' in message) {
544
+ const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
545
+ await (0, exports.prepareWAMessageMedia)({ sticker: (_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker, ...options }, options)
546
+ : null;
547
+ let notes = {};
548
+ if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
549
+ notes = {
550
+ stickerMessage: {
551
+ ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
552
+ contextInfo: {
553
+ stanzaId: (_h = (_g = options === null || options === void 0 ? void 0 : options.quoted) === null || _g === void 0 ? void 0 : _g.key) === null || _h === void 0 ? void 0 : _h.id,
554
+ participant: (_k = (_j = options === null || options === void 0 ? void 0 : options.quoted) === null || _j === void 0 ? void 0 : _j.key) === null || _k === void 0 ? void 0 : _k.participant,
555
+ quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
556
+ ...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
557
+ }
558
+ }
559
+ };
560
+ }
561
+ else if (message.requestPayment.note) {
562
+ notes = {
563
+ extendedTextMessage: {
564
+ text: message.requestPayment.note,
565
+ contextInfo: {
566
+ stanzaId: (_p = (_o = options === null || options === void 0 ? void 0 : options.quoted) === null || _o === void 0 ? void 0 : _o.key) === null || _p === void 0 ? void 0 : _p.id,
567
+ participant: (_r = (_q = options === null || options === void 0 ? void 0 : options.quoted) === null || _q === void 0 ? void 0 : _q.key) === null || _r === void 0 ? void 0 : _r.participant,
568
+ quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
569
+ ...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
570
+ }
571
+ }
572
+ };
573
+ }
574
+ m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
575
+ expiryTimestamp: message.requestPayment.expiry,
576
+ amount1000: message.requestPayment.amount,
577
+ currencyCodeIso4217: message.requestPayment.currency,
578
+ requestFrom: message.requestPayment.from,
579
+ noteMessage: { ...notes },
580
+ background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
581
+ });
476
582
  }
477
- else if (hasNonNullishProperty(message, 'limitSharing')) {
583
+ else if ('sharePhoneNumber' in message) {
478
584
  m.protocolMessage = {
479
- type: proto.Message.ProtocolMessage.Type.LIMIT_SHARING,
480
- limitSharing: {
481
- sharingLimited: message.limitSharing === true,
482
- trigger: 1,
483
- limitSharingSettingTimestamp: Date.now(),
484
- initiatedByMe: true
485
- }
585
+ type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
486
586
  };
487
587
  }
588
+ else if ('requestPhoneNumber' in message) {
589
+ m.requestPhoneNumberMessage = {};
590
+ }
488
591
  else {
489
- m = await prepareWAMessageMedia(message, options);
592
+ m = await (0, exports.prepareWAMessageMedia)(message, options);
490
593
  }
491
- if (hasOptionalProperty(message, 'viewOnce') && !!message.viewOnce) {
492
- m = { viewOnceMessage: { message: m } };
594
+ if ('buttons' in message && !!message.buttons) {
595
+ const buttonsMessage = {
596
+ buttons: message.buttons.map(b => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
597
+ };
598
+ if ('text' in message) {
599
+ buttonsMessage.contentText = message.text;
600
+ buttonsMessage.headerType = ButtonType.EMPTY;
601
+ }
602
+ else {
603
+ if ('caption' in message) {
604
+ buttonsMessage.contentText = message.caption;
605
+ }
606
+ const type = Object.keys(m)[0].replace('Message', '').toUpperCase();
607
+ buttonsMessage.headerType = ButtonType[type];
608
+ Object.assign(buttonsMessage, m);
609
+ }
610
+ if ('footer' in message && !!message.footer) {
611
+ buttonsMessage.footerText = message.footer;
612
+ }
613
+ if ('title' in message && !!message.title) {
614
+ buttonsMessage.text = message.title,
615
+ buttonsMessage.headerType = ButtonType.TEXT;
616
+ }
617
+ if ('contextInfo' in message && !!message.contextInfo) {
618
+ buttonsMessage.contextInfo = message.contextInfo;
619
+ }
620
+ if ('mentions' in message && !!message.mentions) {
621
+ buttonsMessage.contextInfo = { mentionedJid: message.mentions };
622
+ }
623
+ m = { buttonsMessage };
493
624
  }
494
- if ((hasOptionalProperty(message, 'mentions') && message.mentions?.length) ||
495
- (hasOptionalProperty(message, 'mentionAll') && message.mentionAll)) {
496
- const messageType = Object.keys(m)[0];
497
- const key = m[messageType];
498
- if (key && 'contextInfo' in key) {
499
- key.contextInfo = key.contextInfo || {};
500
- if (message.mentions?.length) {
501
- key.contextInfo.mentionedJid = message.mentions;
625
+ else if ('templateButtons' in message && !!message.templateButtons) {
626
+ const msg = {
627
+ hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
628
+ };
629
+ if ('text' in message) {
630
+ msg.hydratedContentText = message.text;
631
+ }
632
+ else {
633
+ if ('caption' in message) {
634
+ msg.hydratedContentText = message.caption;
635
+ }
636
+ Object.assign(msg, m);
637
+ }
638
+ if ('footer' in message && !!message.footer) {
639
+ msg.hydratedFooterText = message.footer;
640
+ }
641
+ m = {
642
+ templateMessage: {
643
+ fourRowTemplate: msg,
644
+ hydratedTemplate: msg
502
645
  }
503
- if (message.mentionAll) {
504
- key.contextInfo.nonJidMentions = 1;
646
+ };
647
+ }
648
+ if ('interactiveButtons' in message && !!message.interactiveButtons) {
649
+ const interactiveMessage = {
650
+ nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
651
+ buttons: message.interactiveButtons,
652
+ })
653
+ };
654
+ if ('text' in message) {
655
+ body: interactiveMessage.body = {
656
+ text: message.text
657
+ };
658
+ header: interactiveMessage.header = {
659
+ title: message.title,
660
+ subtitle: message.subtitle,
661
+ hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
662
+ };
663
+ }
664
+ else {
665
+ if ('caption' in message) {
666
+ body: interactiveMessage.body = {
667
+ text: message.caption
668
+ };
669
+ header: interactiveMessage.header = {
670
+ title: message.title,
671
+ subtitle: message.subtitle,
672
+ hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
673
+ };
674
+ Object.assign(interactiveMessage.header, m);
505
675
  }
506
676
  }
507
- else if (key) {
508
- key.contextInfo = {
509
- mentionedJid: message.mentions,
510
- nonJidMentions: message.mentionAll ? 1 : 0
677
+ if ('footer' in message && !!message.footer) {
678
+ footer: interactiveMessage.footer = {
679
+ text: message.footer
511
680
  };
512
681
  }
682
+ if ('contextInfo' in message && !!message.contextInfo) {
683
+ interactiveMessage.contextInfo = message.contextInfo;
684
+ }
685
+ if ('mentions' in message && !!message.mentions) {
686
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
687
+ }
688
+ m = { interactiveMessage };
513
689
  }
514
- if (hasOptionalProperty(message, 'edit')) {
515
- m = {
516
- protocolMessage: {
517
- key: message.edit,
518
- editedMessage: m,
519
- timestampMs: Date.now(),
520
- type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
690
+ if ('shop' in message && !!message.shop) {
691
+ const interactiveMessage = {
692
+ shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
693
+ surface: message.shop,
694
+ id: message.id
695
+ })
696
+ };
697
+ if ('text' in message) {
698
+ body: interactiveMessage.body = {
699
+ text: message.text
700
+ };
701
+ header: interactiveMessage.header = {
702
+ title: message.title,
703
+ subtitle: message.subtitle,
704
+ hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
705
+ };
706
+ }
707
+ else {
708
+ if ('caption' in message) {
709
+ body: interactiveMessage.body = {
710
+ text: message.caption
711
+ };
712
+ header: interactiveMessage.header = {
713
+ title: message.title,
714
+ subtitle: message.subtitle,
715
+ hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
716
+ };
717
+ Object.assign(interactiveMessage.header, m);
521
718
  }
719
+ }
720
+ if ('footer' in message && !!message.footer) {
721
+ footer: interactiveMessage.footer = {
722
+ text: message.footer
723
+ };
724
+ }
725
+ if ('contextInfo' in message && !!message.contextInfo) {
726
+ interactiveMessage.contextInfo = message.contextInfo;
727
+ }
728
+ if ('mentions' in message && !!message.mentions) {
729
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
730
+ }
731
+ m = { interactiveMessage };
732
+ }
733
+ if ('collection' in message && !!message.shop) {
734
+ const interactiveMessage = {
735
+ collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
736
+ bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
737
+ id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
738
+ messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
739
+ })
522
740
  };
741
+ if ('text' in message) {
742
+ body: interactiveMessage.body = {
743
+ text: message.text
744
+ };
745
+ header: interactiveMessage.header = {
746
+ title: message.title,
747
+ subtitle: message.subtitle,
748
+ hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
749
+ };
750
+ }
751
+ else {
752
+ if ('caption' in message) {
753
+ body: interactiveMessage.body = {
754
+ text: message.caption
755
+ };
756
+ header: interactiveMessage.header = {
757
+ title: message.title,
758
+ subtitle: message.subtitle,
759
+ hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
760
+ };
761
+ Object.assign(interactiveMessage.header, m);
762
+ }
763
+ }
764
+ if ('footer' in message && !!message.footer) {
765
+ footer: interactiveMessage.footer = {
766
+ text: message.footer
767
+ };
768
+ }
769
+ if ('contextInfo' in message && !!message.contextInfo) {
770
+ interactiveMessage.contextInfo = message.contextInfo;
771
+ }
772
+ if ('mentions' in message && !!message.mentions) {
773
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
774
+ }
775
+ m = { interactiveMessage };
523
776
  }
524
- if (hasOptionalProperty(message, 'contextInfo') && !!message.contextInfo) {
525
- const messageType = Object.keys(m)[0];
526
- const key = m[messageType];
527
- if ('contextInfo' in key && !!key.contextInfo) {
528
- key.contextInfo = { ...key.contextInfo, ...message.contextInfo };
777
+ if ('cards' in message && !!message.cards) {
778
+ const slides = await Promise.all(message.cards.map(async (slide) => {
779
+ const { image, video, product, title, caption, footer, buttons } = slide;
780
+ let header;
781
+ if (product) {
782
+ const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
783
+ header = {
784
+ productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
785
+ product: {
786
+ ...product,
787
+ productImage: imageMessage,
788
+ },
789
+ ...slide
790
+ })
791
+ };
792
+ }
793
+ else if (image) {
794
+ header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
795
+ }
796
+ else if (video) {
797
+ header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
798
+ }
799
+ const msg = {
800
+ header: Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
801
+ title,
802
+ hasMediaAttachment: true,
803
+ ...header
804
+ }),
805
+ body: Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
806
+ text: caption
807
+ }),
808
+ footer: Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
809
+ text: footer
810
+ }),
811
+ nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
812
+ buttons,
813
+ }),
814
+ };
815
+ return msg;
816
+ }));
817
+ const interactiveMessage = {
818
+ carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
819
+ cards: slides
820
+ })
821
+ };
822
+ if ('text' in message) {
823
+ interactiveMessage.body = Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
824
+ text: message.text
825
+ });
826
+ interactiveMessage.header = Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
827
+ title: message.title,
828
+ subtitle: message.subtitle,
829
+ hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
830
+ });
831
+ }
832
+ if ('footer' in message && !!message.footer) {
833
+ interactiveMessage.footer = Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
834
+ text: message.footer
835
+ });
836
+ }
837
+ if ('contextInfo' in message && !!message.contextInfo) {
838
+ interactiveMessage.contextInfo = message.contextInfo;
529
839
  }
530
- else if (key) {
531
- key.contextInfo = message.contextInfo;
840
+ if ('mentions' in message && !!message.mentions) {
841
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
532
842
  }
843
+ m = { interactiveMessage };
533
844
  }
534
- if (hasOptionalProperty(message, 'albumParentKey') && !!message.albumParentKey) {
535
- m.messageContextInfo = {
536
- ...m.messageContextInfo,
537
- messageAssociation: {
538
- associationType: WAProto.MessageAssociation.AssociationType.MEDIA_ALBUM,
539
- parentMessageKey: message.albumParentKey
845
+ if ('sections' in message && !!message.sections) {
846
+ const listMessage = WAProto_1.proto.Message.ListMessage.fromObject({
847
+ sections: message.sections,
848
+ buttonText: message.buttonText,
849
+ title: message.title,
850
+ footerText: message.footer,
851
+ description: message.text,
852
+ listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
853
+ });
854
+ m = { listMessage };
855
+ }
856
+ if ('viewOnce' in message && !!message.viewOnce) {
857
+ m = { viewOnceMessage: { message: m } };
858
+ }
859
+ if ('viewOnceV2' in message && !!message.viewOnceV2) {
860
+ m = { viewOnceMessageV2: { message: m } };
861
+ }
862
+ if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
863
+ m = { viewOnceMessageV2Extension: { message: m } };
864
+ }
865
+ if ('ephemeral' in message && !!message.ephemeral) {
866
+ m = { ephemeralMessage: { message: m } };
867
+ }
868
+ if ('lottie' in message && !!message.lottie) {
869
+ m = { lottieStickerMessage: { message: m } };
870
+ }
871
+ if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
872
+ const [messageType] = Object.keys(m);
873
+ m[messageType].contextInfo = m[messageType] || {};
874
+ m[messageType].contextInfo.mentionedJid = message.mentions;
875
+ }
876
+ if ('edit' in message) {
877
+ m = {
878
+ protocolMessage: {
879
+ key: message.edit,
880
+ editedMessage: m,
881
+ timestampMs: Date.now(),
882
+ type: Types_1.WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
540
883
  }
541
884
  };
542
885
  }
543
- if (shouldIncludeReportingToken(m)) {
544
- m.messageContextInfo = m.messageContextInfo || {};
545
- if (!m.messageContextInfo.messageSecret) {
546
- m.messageContextInfo.messageSecret = randomBytes(32);
547
- }
886
+ if ('contextInfo' in message && !!message.contextInfo) {
887
+ const [messageType] = Object.keys(m);
888
+ m[messageType] = m[messageType] || {};
889
+ m[messageType].contextInfo = message.contextInfo;
548
890
  }
549
- return WAProto.Message.create(m);
891
+ return Types_1.WAProto.Message.fromObject(m);
550
892
  };
551
- export const generateWAMessageFromContent = (jid, message, options) => {
893
+ exports.generateWAMessageContent = generateWAMessageContent;
894
+ const generateWAMessageFromContent = (jid, message, options) => {
895
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
552
896
  // set timestamp to now
553
897
  // if not specified
554
898
  if (!options.timestamp) {
555
899
  options.timestamp = new Date();
556
900
  }
557
- const innerMessage = normalizeMessageContent(message);
558
- const key = getContentType(innerMessage);
559
- const timestamp = unixTimestampSeconds(options.timestamp);
901
+ const innerMessage = (0, exports.normalizeMessageContent)(message);
902
+ const key = (0, exports.getContentType)(innerMessage);
903
+ const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
560
904
  const { quoted, userJid } = options;
561
- if (quoted && !isJidNewsletter(jid)) {
562
- const participant = quoted.key.fromMe
563
- ? userJid // TODO: Add support for LIDs
564
- : quoted.participant || quoted.key.participant || quoted.key.remoteJid;
565
- let quotedMsg = normalizeMessageContent(quoted.message);
566
- const msgType = getContentType(quotedMsg);
905
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
906
+ const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
907
+ let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
908
+ const msgType = (0, exports.getContentType)(quotedMsg);
567
909
  // strip any redundant properties
568
- quotedMsg = proto.Message.create({ [msgType]: quotedMsg[msgType] });
910
+ quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
569
911
  const quotedContent = quotedMsg[msgType];
570
912
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
571
913
  delete quotedContent.contextInfo;
572
914
  }
573
- const contextInfo = ('contextInfo' in innerMessage[key] && innerMessage[key]?.contextInfo) || {};
574
- contextInfo.participant = jidNormalizedUser(participant);
915
+ let requestPayment;
916
+ if (key === 'requestPaymentMessage') {
917
+ if (((_a = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) && ((_c = (_b = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _b === void 0 ? void 0 : _b.noteMessage) === null || _c === void 0 ? void 0 : _c.extendedTextMessage)) {
918
+ requestPayment = (_e = (_d = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _d === void 0 ? void 0 : _d.noteMessage) === null || _e === void 0 ? void 0 : _e.extendedTextMessage;
919
+ }
920
+ else if (((_f = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _f === void 0 ? void 0 : _f.noteMessage) && ((_h = (_g = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _g === void 0 ? void 0 : _g.noteMessage) === null || _h === void 0 ? void 0 : _h.stickerMessage)) {
921
+ requestPayment = (_k = (_j = innerMessage.requestPaymentMessage) === null || _j === void 0 ? void 0 : _j.noteMessage) === null || _k === void 0 ? void 0 : _k.stickerMessage;
922
+ }
923
+ }
924
+ const contextInfo = (key === 'requestPaymentMessage' ? requestPayment.contextInfo : innerMessage[key].contextInfo) || {};
925
+ contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
575
926
  contextInfo.stanzaId = quoted.key.id;
576
927
  contextInfo.quotedMessage = quotedMsg;
577
928
  // if a participant is quoted, then it must be a group
@@ -579,63 +930,62 @@ export const generateWAMessageFromContent = (jid, message, options) => {
579
930
  if (jid !== quoted.key.remoteJid) {
580
931
  contextInfo.remoteJid = quoted.key.remoteJid;
581
932
  }
582
- if (contextInfo && innerMessage[key]) {
583
- /* @ts-ignore */
584
- innerMessage[key].contextInfo = contextInfo;
585
- }
933
+ innerMessage[key].contextInfo = contextInfo;
586
934
  }
587
935
  if (
588
936
  // if we want to send a disappearing message
589
- !!options?.ephemeralExpiration &&
937
+ !!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
590
938
  // and it's not a protocol message -- delete, toggle disappear message
591
939
  key !== 'protocolMessage' &&
592
940
  // already not converted to disappearing message
593
941
  key !== 'ephemeralMessage' &&
594
- // newsletters don't support ephemeral messages
595
- !isJidNewsletter(jid)) {
596
- /* @ts-ignore */
942
+ // newsletter not accept disappearing messages
943
+ !(0, WABinary_1.isJidNewsLetter)(jid)) {
597
944
  innerMessage[key].contextInfo = {
598
945
  ...(innerMessage[key].contextInfo || {}),
599
- expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL
946
+ expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
600
947
  //ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
601
948
  };
602
949
  }
603
- message = WAProto.Message.create(message);
950
+ message = Types_1.WAProto.Message.fromObject(message);
604
951
  const messageJSON = {
605
952
  key: {
606
953
  remoteJid: jid,
607
954
  fromMe: true,
608
- id: options?.messageId || generateMessageIDV2()
955
+ id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
609
956
  },
610
957
  message: message,
611
958
  messageTimestamp: timestamp,
612
959
  messageStubParameters: [],
613
- participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined, // TODO: Add support for LIDs
614
- status: WAMessageStatus.PENDING
960
+ participant: (0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidStatusBroadcast)(jid) ? userJid : undefined,
961
+ status: Types_1.WAMessageStatus.PENDING
615
962
  };
616
- return WAProto.WebMessageInfo.fromObject(messageJSON);
963
+ return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
617
964
  };
618
- export const generateWAMessage = async (jid, content, options) => {
965
+ exports.generateWAMessageFromContent = generateWAMessageFromContent;
966
+ const generateWAMessage = async (jid, content, options) => {
967
+ var _a;
619
968
  // ensure msg ID is with every log
620
- options.logger = options?.logger?.child({ msgId: options.messageId });
621
- // Pass jid in the options to generateWAMessageContent
622
- return generateWAMessageFromContent(jid, await generateWAMessageContent(content, { ...options, jid }), options);
969
+ options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
970
+ return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
623
971
  };
972
+ exports.generateWAMessage = generateWAMessage;
624
973
  /** Get the key to access the true type of content */
625
- export const getContentType = (content) => {
974
+ const getContentType = (content) => {
626
975
  if (content) {
627
976
  const keys = Object.keys(content);
628
977
  const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage');
629
978
  return key;
630
979
  }
631
980
  };
981
+ exports.getContentType = getContentType;
632
982
  /**
633
983
  * Normalizes ephemeral, view once messages to regular message content
634
984
  * Eg. image messages in ephemeral messages, in view once messages etc.
635
985
  * @param content
636
986
  * @returns
637
987
  */
638
- export const normalizeMessageContent = (content) => {
988
+ const normalizeMessageContent = (content) => {
639
989
  if (!content) {
640
990
  return undefined;
641
991
  }
@@ -649,22 +999,21 @@ export const normalizeMessageContent = (content) => {
649
999
  }
650
1000
  return content;
651
1001
  function getFutureProofMessage(message) {
652
- return (message?.ephemeralMessage ||
653
- message?.viewOnceMessage ||
654
- message?.documentWithCaptionMessage ||
655
- message?.viewOnceMessageV2 ||
656
- message?.viewOnceMessageV2Extension ||
657
- message?.editedMessage ||
658
- message?.associatedChildMessage ||
659
- message?.groupStatusMessage ||
660
- message?.groupStatusMessageV2);
1002
+ return ((message === null || message === void 0 ? void 0 : message.ephemeralMessage)
1003
+ || (message === null || message === void 0 ? void 0 : message.viewOnceMessage)
1004
+ || (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
1005
+ || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
1006
+ || (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
1007
+ || (message === null || message === void 0 ? void 0 : message.editedMessage));
661
1008
  }
662
1009
  };
1010
+ exports.normalizeMessageContent = normalizeMessageContent;
663
1011
  /**
664
1012
  * Extract the true message content from a message
665
1013
  * Eg. extracts the inner message from a disappearing message/view once message
666
1014
  */
667
- export const extractMessageContent = (content) => {
1015
+ const extractMessageContent = (content) => {
1016
+ var _a, _b, _c, _d, _e, _f;
668
1017
  const extractFromTemplateMessage = (msg) => {
669
1018
  if (msg.imageMessage) {
670
1019
  return { imageMessage: msg.imageMessage };
@@ -680,39 +1029,35 @@ export const extractMessageContent = (content) => {
680
1029
  }
681
1030
  else {
682
1031
  return {
683
- conversation: 'contentText' in msg ? msg.contentText : 'hydratedContentText' in msg ? msg.hydratedContentText : ''
1032
+ conversation: 'contentText' in msg
1033
+ ? msg.contentText
1034
+ : ('hydratedContentText' in msg ? msg.hydratedContentText : '')
684
1035
  };
685
1036
  }
686
1037
  };
687
- content = normalizeMessageContent(content);
688
- if (content?.buttonsMessage) {
1038
+ content = (0, exports.normalizeMessageContent)(content);
1039
+ if (content === null || content === void 0 ? void 0 : content.buttonsMessage) {
689
1040
  return extractFromTemplateMessage(content.buttonsMessage);
690
1041
  }
691
- if (content?.templateMessage?.hydratedFourRowTemplate) {
692
- return extractFromTemplateMessage(content?.templateMessage?.hydratedFourRowTemplate);
1042
+ if ((_a = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _a === void 0 ? void 0 : _a.hydratedFourRowTemplate) {
1043
+ return extractFromTemplateMessage((_b = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _b === void 0 ? void 0 : _b.hydratedFourRowTemplate);
693
1044
  }
694
- if (content?.templateMessage?.hydratedTemplate) {
695
- return extractFromTemplateMessage(content?.templateMessage?.hydratedTemplate);
1045
+ if ((_c = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _c === void 0 ? void 0 : _c.hydratedTemplate) {
1046
+ return extractFromTemplateMessage((_d = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _d === void 0 ? void 0 : _d.hydratedTemplate);
696
1047
  }
697
- if (content?.templateMessage?.fourRowTemplate) {
698
- return extractFromTemplateMessage(content?.templateMessage?.fourRowTemplate);
1048
+ if ((_e = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _e === void 0 ? void 0 : _e.fourRowTemplate) {
1049
+ return extractFromTemplateMessage((_f = content === null || content === void 0 ? void 0 : content.templateMessage) === null || _f === void 0 ? void 0 : _f.fourRowTemplate);
699
1050
  }
700
1051
  return content;
701
1052
  };
1053
+ exports.extractMessageContent = extractMessageContent;
702
1054
  /**
703
1055
  * Returns the device predicted by message ID
704
1056
  */
705
- export const getDevice = (id) => /^3A.{18}$/.test(id)
706
- ? 'ios'
707
- : /^3E.{20}$/.test(id)
708
- ? 'web'
709
- : /^(.{21}|.{32})$/.test(id)
710
- ? 'android'
711
- : /^(3F|.{18}$)/.test(id)
712
- ? 'desktop'
713
- : 'unknown';
1057
+ const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
1058
+ exports.getDevice = getDevice;
714
1059
  /** Upserts a receipt in the message */
715
- export const updateMessageWithReceipt = (msg, receipt) => {
1060
+ const updateMessageWithReceipt = (msg, receipt) => {
716
1061
  msg.userReceipt = msg.userReceipt || [];
717
1062
  const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
718
1063
  if (recp) {
@@ -722,43 +1067,41 @@ export const updateMessageWithReceipt = (msg, receipt) => {
722
1067
  msg.userReceipt.push(receipt);
723
1068
  }
724
1069
  };
1070
+ exports.updateMessageWithReceipt = updateMessageWithReceipt;
725
1071
  /** Update the message with a new reaction */
726
- export const updateMessageWithReaction = (msg, reaction) => {
727
- const authorID = getKeyAuthor(reaction.key);
728
- const reactions = (msg.reactions || []).filter(r => getKeyAuthor(r.key) !== authorID);
729
- reaction.text = reaction.text || '';
730
- reactions.push(reaction);
1072
+ const updateMessageWithReaction = (msg, reaction) => {
1073
+ const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
1074
+ const reactions = (msg.reactions || [])
1075
+ .filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
1076
+ if (reaction.text) {
1077
+ reactions.push(reaction);
1078
+ }
731
1079
  msg.reactions = reactions;
732
1080
  };
1081
+ exports.updateMessageWithReaction = updateMessageWithReaction;
733
1082
  /** Update the message with a new poll update */
734
- export const updateMessageWithPollUpdate = (msg, update) => {
735
- const authorID = getKeyAuthor(update.pollUpdateMessageKey);
736
- const reactions = (msg.pollUpdates || []).filter(r => getKeyAuthor(r.pollUpdateMessageKey) !== authorID);
737
- if (update.vote?.selectedOptions?.length) {
1083
+ const updateMessageWithPollUpdate = (msg, update) => {
1084
+ var _a, _b;
1085
+ const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
1086
+ const reactions = (msg.pollUpdates || [])
1087
+ .filter(r => (0, generics_1.getKeyAuthor)(r.pollUpdateMessageKey) !== authorID);
1088
+ if ((_b = (_a = update.vote) === null || _a === void 0 ? void 0 : _a.selectedOptions) === null || _b === void 0 ? void 0 : _b.length) {
738
1089
  reactions.push(update);
739
1090
  }
740
1091
  msg.pollUpdates = reactions;
741
1092
  };
742
- /** Update the message with a new event response */
743
- export const updateMessageWithEventResponse = (msg, update) => {
744
- const authorID = getKeyAuthor(update.eventResponseMessageKey);
745
- const responses = (msg.eventResponses || []).filter(r => getKeyAuthor(r.eventResponseMessageKey) !== authorID);
746
- responses.push(update);
747
- msg.eventResponses = responses;
748
- };
1093
+ exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
749
1094
  /**
750
1095
  * Aggregates all poll updates in a poll.
751
1096
  * @param msg the poll creation message
752
1097
  * @param meId your jid
753
1098
  * @returns A list of options & their voters
754
1099
  */
755
- export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
756
- const opts = message?.pollCreationMessage?.options ||
757
- message?.pollCreationMessageV2?.options ||
758
- message?.pollCreationMessageV3?.options ||
759
- [];
1100
+ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
1101
+ var _a, _b, _c;
1102
+ const opts = ((_a = message === null || message === void 0 ? void 0 : message.pollCreationMessage) === null || _a === void 0 ? void 0 : _a.options) || ((_b = message === null || message === void 0 ? void 0 : message.pollCreationMessageV2) === null || _b === void 0 ? void 0 : _b.options) || ((_c = message === null || message === void 0 ? void 0 : message.pollCreationMessageV3) === null || _c === void 0 ? void 0 : _c.options) || [];
760
1103
  const voteHashMap = opts.reduce((acc, opt) => {
761
- const hash = sha256(Buffer.from(opt.optionName || '')).toString();
1104
+ const hash = (0, crypto_2.sha256)(Buffer.from(opt.optionName || '')).toString();
762
1105
  acc[hash] = {
763
1106
  name: opt.optionName || '',
764
1107
  voters: []
@@ -780,36 +1123,14 @@ export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
780
1123
  };
781
1124
  data = voteHashMap[hash];
782
1125
  }
783
- voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId));
1126
+ voteHashMap[hash].voters.push((0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey, meId));
784
1127
  }
785
1128
  }
786
1129
  return Object.values(voteHashMap);
787
1130
  }
788
- /**
789
- * Aggregates all event responses in an event message.
790
- * @param msg the event creation message
791
- * @param meId your jid
792
- * @returns A list of response types & their responders
793
- */
794
- export function getAggregateResponsesInEventMessage({ eventResponses }, meId) {
795
- const responseTypes = ['GOING', 'NOT_GOING', 'MAYBE'];
796
- const responseMap = {};
797
- for (const type of responseTypes) {
798
- responseMap[type] = {
799
- response: type,
800
- responders: []
801
- };
802
- }
803
- for (const update of eventResponses || []) {
804
- const responseType = update.eventResponse || 'UNKNOWN';
805
- if (responseType !== 'UNKNOWN' && responseMap[responseType]) {
806
- responseMap[responseType].responders.push(getKeyAuthor(update.eventResponseMessageKey, meId));
807
- }
808
- }
809
- return Object.values(responseMap);
810
- }
1131
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
811
1132
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
812
- export const aggregateMessageKeysNotFromMe = (keys) => {
1133
+ const aggregateMessageKeysNotFromMe = (keys) => {
813
1134
  const keyMap = {};
814
1135
  for (const { remoteJid, id, participant, fromMe } of keys) {
815
1136
  if (!fromMe) {
@@ -826,34 +1147,40 @@ export const aggregateMessageKeysNotFromMe = (keys) => {
826
1147
  }
827
1148
  return Object.values(keyMap);
828
1149
  };
1150
+ exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
829
1151
  const REUPLOAD_REQUIRED_STATUS = [410, 404];
830
1152
  /**
831
1153
  * Downloads the given message. Throws an error if it's not a media message
832
1154
  */
833
- export const downloadMediaMessage = async (message, type, options, ctx) => {
834
- const result = await downloadMsg().catch(async (error) => {
835
- if (ctx &&
836
- typeof error?.status === 'number' && // treat errors with status as HTTP failures requiring reupload
837
- REUPLOAD_REQUIRED_STATUS.includes(error.status)) {
838
- ctx.logger.info({ key: message.key }, 'sending reupload media request...');
839
- // request reupload
840
- message = await ctx.reuploadRequest(message);
841
- const result = await downloadMsg();
842
- return result;
1155
+ const downloadMediaMessage = async (message, type, options, ctx) => {
1156
+ const result = await downloadMsg()
1157
+ .catch(async (error) => {
1158
+ var _a;
1159
+ if (ctx) {
1160
+ if (axios_1.default.isAxiosError(error)) {
1161
+ // check if the message requires a reupload
1162
+ if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
1163
+ ctx.logger.info({ key: message.key }, 'sending reupload media request...');
1164
+ // request reupload
1165
+ message = await ctx.reuploadRequest(message);
1166
+ const result = await downloadMsg();
1167
+ return result;
1168
+ }
1169
+ }
843
1170
  }
844
1171
  throw error;
845
1172
  });
846
1173
  return result;
847
1174
  async function downloadMsg() {
848
- const mContent = extractMessageContent(message.message);
1175
+ const mContent = (0, exports.extractMessageContent)(message.message);
849
1176
  if (!mContent) {
850
- throw new Boom('No message present', { statusCode: 400, data: message });
1177
+ throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
851
1178
  }
852
- const contentType = getContentType(mContent);
853
- let mediaType = contentType?.replace('Message', '');
1179
+ const contentType = (0, exports.getContentType)(mContent);
1180
+ let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
854
1181
  const media = mContent[contentType];
855
1182
  if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
856
- throw new Boom(`"${contentType}" message is not a media message`);
1183
+ throw new boom_1.Boom(`"${contentType}" message is not a media message`);
857
1184
  }
858
1185
  let download;
859
1186
  if ('thumbnailDirectPath' in media && !('url' in media)) {
@@ -866,7 +1193,7 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
866
1193
  else {
867
1194
  download = media;
868
1195
  }
869
- const stream = await downloadContentFromMessage(download, mediaType, options);
1196
+ const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
870
1197
  if (type === 'buffer') {
871
1198
  const bufferArray = [];
872
1199
  for await (const chunk of stream) {
@@ -877,17 +1204,18 @@ export const downloadMediaMessage = async (message, type, options, ctx) => {
877
1204
  return stream;
878
1205
  }
879
1206
  };
1207
+ exports.downloadMediaMessage = downloadMediaMessage;
880
1208
  /** Checks whether the given message is a media message; if it is returns the inner content */
881
- export const assertMediaContent = (content) => {
882
- content = extractMessageContent(content);
883
- const mediaContent = content?.documentMessage ||
884
- content?.imageMessage ||
885
- content?.videoMessage ||
886
- content?.audioMessage ||
887
- content?.stickerMessage;
1209
+ const assertMediaContent = (content) => {
1210
+ content = (0, exports.extractMessageContent)(content);
1211
+ const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage)
1212
+ || (content === null || content === void 0 ? void 0 : content.imageMessage)
1213
+ || (content === null || content === void 0 ? void 0 : content.videoMessage)
1214
+ || (content === null || content === void 0 ? void 0 : content.audioMessage)
1215
+ || (content === null || content === void 0 ? void 0 : content.stickerMessage);
888
1216
  if (!mediaContent) {
889
- throw new Boom('given message is not a media message', { statusCode: 400, data: content });
1217
+ throw new boom_1.Boom('given message is not a media message', { statusCode: 400, data: content });
890
1218
  }
891
1219
  return mediaContent;
892
1220
  };
893
- //# sourceMappingURL=messages.js.map
1221
+ exports.assertMediaContent = assertMediaContent;