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