lordceaser-baileys 2.0.37 → 2.0.39

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