@ubedsockets/baileys 1.7.2 → 1.7.5

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 (375) hide show
  1. package/WAProto/AICommon.js +27981 -0
  2. package/WAProto/AICommon.proto +713 -0
  3. package/WAProto/Ephemeral.js +295 -0
  4. package/WAProto/Ephemeral.proto +7 -0
  5. package/WAProto/GenerateStatics.sh +59 -16
  6. package/WAProto/WAProto.proto +44 -0
  7. package/WAProto/fix-imports.js +85 -0
  8. package/WAProto/index.d.ts +14017 -0
  9. package/WAProto/index.js +155308 -82430
  10. package/WAProto/vyzen.js +7 -0
  11. package/lib/Defaults/baileys-version.json +1 -0
  12. package/lib/Defaults/index.d.ts +75 -0
  13. package/lib/Defaults/index.d.ts.map +1 -0
  14. package/lib/Defaults/index.js +3 -28
  15. package/lib/Defaults/index.js.map +1 -0
  16. package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
  17. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  18. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  19. package/lib/Signal/Group/group-session-builder.d.ts +15 -0
  20. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  21. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  22. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  23. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  24. package/lib/Signal/Group/group_cipher.js +1 -1
  25. package/lib/Signal/Group/group_cipher.js.map +1 -0
  26. package/lib/Signal/Group/index.d.ts +12 -0
  27. package/lib/Signal/Group/index.d.ts.map +1 -0
  28. package/lib/Signal/Group/index.js.map +1 -0
  29. package/lib/Signal/Group/keyhelper.d.ts +11 -0
  30. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  31. package/lib/Signal/Group/keyhelper.js +34 -8
  32. package/lib/Signal/Group/keyhelper.js.map +1 -0
  33. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  34. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  35. package/lib/Signal/Group/sender-chain-key.js +1 -1
  36. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  37. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  38. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  39. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  40. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  41. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  42. package/lib/Signal/Group/sender-key-message.js +1 -1
  43. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  44. package/lib/Signal/Group/sender-key-name.d.ts +18 -0
  45. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  46. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  47. package/lib/Signal/Group/sender-key-record.d.ts +31 -0
  48. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  49. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  50. package/lib/Signal/Group/sender-key-state.d.ts +39 -0
  51. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  52. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  53. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  54. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  55. package/lib/Signal/Group/sender-message-key.js +1 -1
  56. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  57. package/lib/Signal/libsignal.d.ts +5 -0
  58. package/lib/Signal/libsignal.d.ts.map +1 -0
  59. package/lib/Signal/libsignal.js +1 -1
  60. package/lib/Signal/libsignal.js.map +1 -0
  61. package/lib/Signal/lid-mapping.d.ts +23 -0
  62. package/lib/Signal/lid-mapping.d.ts.map +1 -0
  63. package/lib/Signal/lid-mapping.js +277 -0
  64. package/lib/Signal/lid-mapping.js.map +1 -0
  65. package/lib/Socket/Client/index.d.ts +3 -0
  66. package/lib/Socket/Client/index.d.ts.map +1 -0
  67. package/lib/Socket/Client/index.js.map +1 -0
  68. package/lib/Socket/Client/types.d.ts +16 -0
  69. package/lib/Socket/Client/types.d.ts.map +1 -0
  70. package/lib/Socket/Client/types.js.map +1 -0
  71. package/lib/Socket/Client/websocket.d.ts +13 -0
  72. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  73. package/lib/Socket/Client/websocket.js.map +1 -0
  74. package/lib/Socket/business.d.ts +217 -0
  75. package/lib/Socket/business.d.ts.map +1 -0
  76. package/lib/Socket/business.js.map +1 -0
  77. package/lib/Socket/chats.d.ts +124 -0
  78. package/lib/Socket/chats.d.ts.map +1 -0
  79. package/lib/Socket/chats.js.map +1 -0
  80. package/lib/Socket/communities.d.ts +273 -0
  81. package/lib/Socket/communities.d.ts.map +1 -0
  82. package/lib/Socket/communities.js +431 -0
  83. package/lib/Socket/communities.js.map +1 -0
  84. package/lib/Socket/groups.d.ts +161 -0
  85. package/lib/Socket/groups.d.ts.map +1 -0
  86. package/lib/Socket/groups.js.map +1 -0
  87. package/lib/Socket/index.d.ts +260 -0
  88. package/lib/Socket/index.d.ts.map +1 -0
  89. package/lib/Socket/index.js.map +1 -0
  90. package/lib/Socket/messages-recv.d.ts +203 -0
  91. package/lib/Socket/messages-recv.d.ts.map +1 -0
  92. package/lib/Socket/messages-recv.js +229 -46
  93. package/lib/Socket/messages-recv.js.map +1 -0
  94. package/lib/Socket/messages-send.d.ts +199 -0
  95. package/lib/Socket/messages-send.d.ts.map +1 -0
  96. package/lib/Socket/messages-send.js +394 -53
  97. package/lib/Socket/messages-send.js.map +1 -0
  98. package/lib/Socket/mex.d.ts +3 -0
  99. package/lib/Socket/mex.d.ts.map +1 -0
  100. package/lib/Socket/mex.js +42 -0
  101. package/lib/Socket/mex.js.map +1 -0
  102. package/lib/Socket/newsletter.d.ts +170 -0
  103. package/lib/Socket/newsletter.d.ts.map +1 -0
  104. package/lib/Socket/newsletter.js.map +1 -0
  105. package/lib/Socket/passkey-handler.js +134 -0
  106. package/lib/Socket/passkey.js +186 -0
  107. package/lib/Socket/setup.js +433 -0
  108. package/lib/Socket/socket.d.ts +59 -0
  109. package/lib/Socket/socket.d.ts.map +1 -0
  110. package/lib/Socket/socket.js +59 -64
  111. package/lib/Socket/socket.js.map +1 -0
  112. package/lib/Types/Auth.d.ts +117 -0
  113. package/lib/Types/Auth.d.ts.map +1 -0
  114. package/lib/Types/Auth.js.map +1 -0
  115. package/lib/Types/Bussines.d.ts +25 -0
  116. package/lib/Types/Bussines.d.ts.map +1 -0
  117. package/lib/Types/Bussines.js +2 -0
  118. package/lib/Types/Bussines.js.map +1 -0
  119. package/lib/Types/Call.d.ts +15 -0
  120. package/lib/Types/Call.d.ts.map +1 -0
  121. package/lib/Types/Call.js.map +1 -0
  122. package/lib/Types/Chat.d.ts +124 -0
  123. package/lib/Types/Chat.d.ts.map +1 -0
  124. package/lib/Types/Chat.js.map +1 -0
  125. package/lib/Types/Contact.d.ts +26 -0
  126. package/lib/Types/Contact.d.ts.map +1 -0
  127. package/lib/Types/Contact.js.map +1 -0
  128. package/lib/Types/Events.d.ts +256 -0
  129. package/lib/Types/Events.d.ts.map +1 -0
  130. package/lib/Types/Events.js.map +1 -0
  131. package/lib/Types/GroupMetadata.d.ts +71 -0
  132. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  133. package/lib/Types/GroupMetadata.js.map +1 -0
  134. package/lib/Types/Label.d.ts +47 -0
  135. package/lib/Types/Label.d.ts.map +1 -0
  136. package/lib/Types/Label.js.map +1 -0
  137. package/lib/Types/LabelAssociation.d.ts +30 -0
  138. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  139. package/lib/Types/LabelAssociation.js.map +1 -0
  140. package/lib/Types/Message.d.ts +320 -0
  141. package/lib/Types/Message.d.ts.map +1 -0
  142. package/lib/Types/Message.js.map +1 -0
  143. package/lib/Types/Mex.d.ts +141 -0
  144. package/lib/Types/Mex.d.ts.map +1 -0
  145. package/lib/Types/Mex.js +37 -0
  146. package/lib/Types/Mex.js.map +1 -0
  147. package/lib/Types/Product.d.ts +79 -0
  148. package/lib/Types/Product.d.ts.map +1 -0
  149. package/lib/Types/Product.js.map +1 -0
  150. package/lib/Types/RichType.d.ts +3 -0
  151. package/lib/Types/RichType.d.ts.map +1 -0
  152. package/lib/Types/RichType.js +31 -0
  153. package/lib/Types/Signal.d.ts +87 -0
  154. package/lib/Types/Signal.d.ts.map +1 -0
  155. package/lib/Types/Signal.js.map +1 -0
  156. package/lib/Types/Socket.d.ts +136 -0
  157. package/lib/Types/Socket.d.ts.map +1 -0
  158. package/lib/Types/Socket.js.map +1 -0
  159. package/lib/Types/State.d.ts +97 -0
  160. package/lib/Types/State.d.ts.map +1 -0
  161. package/lib/Types/State.js.map +1 -0
  162. package/lib/Types/USync.d.ts +26 -0
  163. package/lib/Types/USync.d.ts.map +1 -0
  164. package/lib/Types/USync.js.map +1 -0
  165. package/lib/Types/index.d.ts +65 -0
  166. package/lib/Types/index.d.ts.map +1 -0
  167. package/lib/Types/index.js.map +1 -0
  168. package/lib/Utils/Tiktok.js +80 -0
  169. package/lib/Utils/auth-utils.d.ts +24 -0
  170. package/lib/Utils/auth-utils.d.ts.map +1 -0
  171. package/lib/Utils/auth-utils.js.map +1 -0
  172. package/lib/Utils/{elaina-event-stream.js → baileys-event-stream.js} +1 -1
  173. package/lib/Utils/browser-utils.d.ts +4 -0
  174. package/lib/Utils/browser-utils.d.ts.map +1 -0
  175. package/lib/Utils/browser-utils.js.map +1 -0
  176. package/lib/Utils/business.d.ts +23 -0
  177. package/lib/Utils/business.d.ts.map +1 -0
  178. package/lib/Utils/business.js.map +1 -0
  179. package/lib/Utils/chaanel/vyzen.js +0 -0
  180. package/lib/Utils/chat-utils.d.ts +100 -0
  181. package/lib/Utils/chat-utils.d.ts.map +1 -0
  182. package/lib/Utils/chat-utils.js.map +1 -0
  183. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  184. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  185. package/lib/Utils/companion-reg-client-utils.js +35 -0
  186. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  187. package/lib/Utils/crypto.d.ts +37 -0
  188. package/lib/Utils/crypto.d.ts.map +1 -0
  189. package/lib/Utils/crypto.js +1 -1
  190. package/lib/Utils/crypto.js.map +1 -0
  191. package/lib/Utils/decode-wa-message.d.ts +66 -0
  192. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  193. package/lib/Utils/decode-wa-message.js.map +1 -0
  194. package/lib/Utils/event-buffer.d.ts +36 -0
  195. package/lib/Utils/event-buffer.d.ts.map +1 -0
  196. package/lib/Utils/event-buffer.js +2 -2
  197. package/lib/Utils/event-buffer.js.map +1 -0
  198. package/lib/Utils/facebook.js +48 -0
  199. package/lib/Utils/generics.d.ts +91 -0
  200. package/lib/Utils/generics.d.ts.map +1 -0
  201. package/lib/Utils/generics.js +11 -11
  202. package/lib/Utils/generics.js.map +1 -0
  203. package/lib/Utils/history.d.ts +24 -0
  204. package/lib/Utils/history.d.ts.map +1 -0
  205. package/lib/Utils/history.js.map +1 -0
  206. package/lib/Utils/identity-change-handler.d.ts +44 -0
  207. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  208. package/lib/Utils/identity-change-handler.js +50 -0
  209. package/lib/Utils/identity-change-handler.js.map +1 -0
  210. package/lib/Utils/index.d.ts +22 -0
  211. package/lib/Utils/index.d.ts.map +1 -0
  212. package/lib/Utils/index.js +2 -1
  213. package/lib/Utils/index.js.map +1 -0
  214. package/lib/Utils/instagram.js +50 -0
  215. package/lib/Utils/link-preview.d.ts +21 -0
  216. package/lib/Utils/link-preview.d.ts.map +1 -0
  217. package/lib/Utils/link-preview.js.map +1 -0
  218. package/lib/Utils/logger.d.ts +12 -0
  219. package/lib/Utils/logger.d.ts.map +1 -0
  220. package/lib/Utils/logger.js.map +1 -0
  221. package/lib/Utils/lt-hash.d.ts +8 -0
  222. package/lib/Utils/lt-hash.d.ts.map +1 -0
  223. package/lib/Utils/lt-hash.js.map +1 -0
  224. package/lib/Utils/make-mutex.d.ts +9 -0
  225. package/lib/Utils/make-mutex.d.ts.map +1 -0
  226. package/lib/Utils/make-mutex.js.map +1 -0
  227. package/lib/Utils/message-retry-manager.d.ts +115 -0
  228. package/lib/Utils/message-retry-manager.d.ts.map +1 -0
  229. package/lib/Utils/message-retry-manager.js.map +1 -0
  230. package/lib/Utils/messages-media.d.ts +133 -0
  231. package/lib/Utils/messages-media.d.ts.map +1 -0
  232. package/lib/Utils/messages-media.js +16 -77
  233. package/lib/Utils/messages-media.js.map +1 -0
  234. package/lib/Utils/messages.d.ts +91 -0
  235. package/lib/Utils/messages.d.ts.map +1 -0
  236. package/lib/Utils/messages.js +158 -728
  237. package/lib/Utils/messages.js.map +1 -0
  238. package/lib/Utils/noise-handler.d.ts +20 -0
  239. package/lib/Utils/noise-handler.d.ts.map +1 -0
  240. package/lib/Utils/noise-handler.js.map +1 -0
  241. package/lib/Utils/offline-node-processor.d.ts +17 -0
  242. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  243. package/lib/Utils/offline-node-processor.js +40 -0
  244. package/lib/Utils/offline-node-processor.js.map +1 -0
  245. package/lib/Utils/pre-key-manager.d.ts +28 -0
  246. package/lib/Utils/pre-key-manager.d.ts.map +1 -0
  247. package/lib/Utils/pre-key-manager.js +106 -0
  248. package/lib/Utils/pre-key-manager.js.map +1 -0
  249. package/lib/Utils/process-message.d.ts +60 -0
  250. package/lib/Utils/process-message.d.ts.map +1 -0
  251. package/lib/Utils/process-message.js.map +1 -0
  252. package/lib/Utils/protocol-debug.js +81 -0
  253. package/lib/Utils/reporting-utils.d.ts +11 -0
  254. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  255. package/lib/Utils/reporting-utils.js +258 -0
  256. package/lib/Utils/reporting-utils.js.map +1 -0
  257. package/lib/Utils/rich-message-utils.js +387 -0
  258. package/lib/Utils/signal.d.ts +47 -0
  259. package/lib/Utils/signal.d.ts.map +1 -0
  260. package/lib/Utils/signal.js.map +1 -0
  261. package/lib/Utils/stanza-ack.d.ts +11 -0
  262. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  263. package/lib/Utils/stanza-ack.js +38 -0
  264. package/lib/Utils/stanza-ack.js.map +1 -0
  265. package/lib/Utils/sync-action-utils.d.ts +19 -0
  266. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  267. package/lib/Utils/sync-action-utils.js +49 -0
  268. package/lib/Utils/sync-action-utils.js.map +1 -0
  269. package/lib/Utils/tc-token-utils.d.ts +37 -0
  270. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  271. package/lib/Utils/tc-token-utils.js +163 -0
  272. package/lib/Utils/tc-token-utils.js.map +1 -0
  273. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  274. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  275. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  276. package/lib/Utils/validate-connection.d.ts +11 -0
  277. package/lib/Utils/validate-connection.d.ts.map +1 -0
  278. package/lib/Utils/validate-connection.js +5 -1
  279. package/lib/Utils/validate-connection.js.map +1 -0
  280. package/lib/Utils/youtube.js +44 -0
  281. package/lib/WABinary/constants.d.ts +28 -0
  282. package/lib/WABinary/constants.d.ts.map +1 -0
  283. package/lib/WABinary/constants.js.map +1 -0
  284. package/lib/WABinary/decode.d.ts +7 -0
  285. package/lib/WABinary/decode.d.ts.map +1 -0
  286. package/lib/WABinary/decode.js.map +1 -0
  287. package/lib/WABinary/encode.d.ts +3 -0
  288. package/lib/WABinary/encode.d.ts.map +1 -0
  289. package/lib/WABinary/encode.js.map +1 -0
  290. package/lib/WABinary/generic-utils.d.ts +15 -0
  291. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  292. package/lib/WABinary/generic-utils.js.map +1 -0
  293. package/lib/WABinary/index.d.ts +6 -0
  294. package/lib/WABinary/index.d.ts.map +1 -0
  295. package/lib/WABinary/index.js.map +1 -0
  296. package/lib/WABinary/jid-utils.d.ts +48 -0
  297. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  298. package/lib/WABinary/jid-utils.js.map +1 -0
  299. package/lib/WABinary/types.d.ts +19 -0
  300. package/lib/WABinary/types.d.ts.map +1 -0
  301. package/lib/WABinary/types.js.map +1 -0
  302. package/lib/WAM/BinaryInfo.d.ts +9 -0
  303. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  304. package/lib/WAM/BinaryInfo.js.map +1 -0
  305. package/lib/WAM/constants.d.ts +40 -0
  306. package/lib/WAM/constants.d.ts.map +1 -0
  307. package/lib/WAM/constants.js.map +1 -0
  308. package/lib/WAM/encode.d.ts +3 -0
  309. package/lib/WAM/encode.d.ts.map +1 -0
  310. package/lib/WAM/encode.js.map +1 -0
  311. package/lib/WAM/index.d.ts +4 -0
  312. package/lib/WAM/index.d.ts.map +1 -0
  313. package/lib/WAM/index.js.map +1 -0
  314. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
  315. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  316. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  317. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
  318. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  319. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  320. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
  321. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  322. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  323. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
  324. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  325. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  326. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  327. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  328. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  329. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  330. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
  331. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  332. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  333. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
  334. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  335. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  336. package/lib/WAUSync/Protocols/index.d.ts +6 -0
  337. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  338. package/lib/WAUSync/Protocols/index.js.map +1 -0
  339. package/lib/WAUSync/USyncQuery.d.ts +30 -0
  340. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  341. package/lib/WAUSync/USyncQuery.js.map +1 -0
  342. package/lib/WAUSync/USyncUser.d.ts +17 -0
  343. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  344. package/lib/WAUSync/USyncUser.js.map +1 -0
  345. package/lib/WAUSync/index.d.ts +4 -0
  346. package/lib/WAUSync/index.d.ts.map +1 -0
  347. package/lib/WAUSync/index.js.map +1 -0
  348. package/lib/index.d.ts +12 -0
  349. package/lib/index.d.ts.map +1 -0
  350. package/lib/index.js +1 -21
  351. package/lib/index.js.map +1 -0
  352. package/package.json +39 -51
  353. package/engine-requirements.js +0 -10
  354. package/lib/Defaults/elaina-version.json +0 -3
  355. package/lib/Signal/libsignalnode/LICENSE +0 -621
  356. package/lib/Signal/libsignalnode/README.md +0 -11
  357. package/lib/Signal/libsignalnode/generate-proto.sh +0 -1
  358. package/lib/Signal/libsignalnode/index.js +0 -10
  359. package/lib/Signal/libsignalnode/protos/WhisperTextProtocol.proto +0 -28
  360. package/lib/Signal/libsignalnode/src/.eslintrc.json +0 -31
  361. package/lib/Signal/libsignalnode/src/WhisperTextProtocol.js +0 -948
  362. package/lib/Signal/libsignalnode/src/base_key_type.js +0 -6
  363. package/lib/Signal/libsignalnode/src/chain_type.js +0 -6
  364. package/lib/Signal/libsignalnode/src/crypto.js +0 -98
  365. package/lib/Signal/libsignalnode/src/curve.js +0 -142
  366. package/lib/Signal/libsignalnode/src/errors.js +0 -33
  367. package/lib/Signal/libsignalnode/src/keyhelper.js +0 -45
  368. package/lib/Signal/libsignalnode/src/numeric_fingerprint.js +0 -70
  369. package/lib/Signal/libsignalnode/src/protobufs.js +0 -10
  370. package/lib/Signal/libsignalnode/src/protocol_address.js +0 -40
  371. package/lib/Signal/libsignalnode/src/queue_job.js +0 -70
  372. package/lib/Signal/libsignalnode/src/session_builder.js +0 -164
  373. package/lib/Signal/libsignalnode/src/session_cipher.js +0 -332
  374. package/lib/Signal/libsignalnode/src/session_record.js +0 -325
  375. package/lib/Socket/RHandler.js +0 -533
@@ -24,18 +24,6 @@ const MIMETYPE_MAP = {
24
24
  sticker: 'image/webp',
25
25
  'product-catalog-image': 'image/jpeg',
26
26
  };
27
- // Input payloads can carry protobuf media message keys (e.g. imageMessage).
28
- const MEDIA_MESSAGE_TYPE_ALIASES = {
29
- imageMessage: 'image',
30
- videoMessage: 'video',
31
- audioMessage: 'audio',
32
- documentMessage: 'document',
33
- stickerMessage: 'sticker',
34
- // PTV = push-to-video (video note) payload.
35
- ptvMessage: 'video',
36
- };
37
- const MEDIA_MESSAGE_TYPE_ALIAS_KEYS = Object.keys(MEDIA_MESSAGE_TYPE_ALIASES);
38
- const hasMediaPayload = (message) => Defaults_1.MEDIA_KEYS.some(key => key in message) || MEDIA_MESSAGE_TYPE_ALIAS_KEYS.some(key => key in message);
39
27
  const MessageTypeProto = {
40
28
  'image': Types_1.WAProto.Message.ImageMessage,
41
29
  'video': Types_1.WAProto.Message.VideoMessage,
@@ -44,96 +32,12 @@ const MessageTypeProto = {
44
32
  'document': Types_1.WAProto.Message.DocumentMessage,
45
33
  };
46
34
  const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
47
-
35
+ /**
36
+ * Uses a regex to test whether the string contains a URL, and returns the URL if it does.
37
+ * @param text eg. hello https://google.com
38
+ * @returns the URL, eg. https://google.com
39
+ */
48
40
  const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
49
- const RICH_RESPONSE_CODE_KEYWORDS = new Set([
50
- 'break', 'case', 'catch', 'continue', 'debugger', 'default', 'delete',
51
- 'do', 'else', 'finally', 'for', 'function', 'if', 'in', 'instanceof',
52
- 'new', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'var',
53
- 'void', 'while', 'with', 'true', 'false', 'null', 'undefined', 'NaN',
54
- 'Infinity', 'class', 'const', 'let', 'super', 'extends', 'export',
55
- 'import', 'yield', 'static', 'constructor', 'of', 'async', 'await',
56
- 'get', 'set', 'implements', 'interface', 'package', 'private',
57
- 'protected', 'public', 'enum', 'throws', 'transient'
58
- ]);
59
- const tokenizeCode = (code) => {
60
- const tokens = [];
61
- let i = 0;
62
- const len = code.length;
63
- while (i < len) {
64
- if (/\s/.test(code[i])) {
65
- const start = i;
66
- while (i < len && /\s/.test(code[i]))
67
- i++;
68
- tokens.push({ content: code.slice(start, i), type: 'DEFAULT' });
69
- continue;
70
- }
71
- if (code[i] === '"' || code[i] === "'" || code[i] === '`') {
72
- const start = i;
73
- const quote = code[i];
74
- i++;
75
- while (i < len && code[i] !== quote) {
76
- if (code[i] === '\\')
77
- i++;
78
- i++;
79
- }
80
- i++;
81
- tokens.push({ content: code.slice(start, i), type: 'STR' });
82
- continue;
83
- }
84
- if (code[i] === '/' && i + 1 < len && code[i + 1] === '/') {
85
- const start = i;
86
- while (i < len && code[i] !== '\n')
87
- i++;
88
- tokens.push({ content: code.slice(start, i), type: 'COMMENT' });
89
- continue;
90
- }
91
- if (code[i] === '/' && i + 1 < len && code[i + 1] === '*') {
92
- const start = i;
93
- i += 2;
94
- while (i + 1 < len && !(code[i] === '*' && code[i + 1] === '/'))
95
- i++;
96
- i += 2;
97
- tokens.push({ content: code.slice(start, i), type: 'COMMENT' });
98
- continue;
99
- }
100
- if (/[0-9]/.test(code[i])) {
101
- const start = i;
102
- while (i < len && /[0-9.]/.test(code[i]))
103
- i++;
104
- tokens.push({ content: code.slice(start, i), type: 'NUMBER' });
105
- continue;
106
- }
107
- if (/[a-zA-Z_$]/.test(code[i])) {
108
- const start = i;
109
- while (i < len && /[a-zA-Z0-9_$]/.test(code[i]))
110
- i++;
111
- const word = code.slice(start, i);
112
- if (RICH_RESPONSE_CODE_KEYWORDS.has(word)) {
113
- tokens.push({ content: word, type: 'KEYWORD' });
114
- }
115
- else {
116
- let j = i;
117
- while (j < len && /\s/.test(code[j]))
118
- j++;
119
- tokens.push({ content: word, type: j < len && code[j] === '(' ? 'METHOD' : 'DEFAULT' });
120
- }
121
- continue;
122
- }
123
- tokens.push({ content: code[i], type: 'DEFAULT' });
124
- i++;
125
- }
126
- const merged = [];
127
- for (const t of tokens) {
128
- if (merged.length && merged[merged.length - 1].type === 'DEFAULT' && t.type === 'DEFAULT') {
129
- merged[merged.length - 1].content += t.content;
130
- }
131
- else {
132
- merged.push(t);
133
- }
134
- }
135
- return merged;
136
- };
137
41
  exports.extractUrlFromText = extractUrlFromText;
138
42
  const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
139
43
  const url = (0, exports.extractUrlFromText)(text);
@@ -142,7 +46,7 @@ const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
142
46
  const urlInfo = await getUrlInfo(url);
143
47
  return urlInfo;
144
48
  }
145
- catch (error) {
49
+ catch (error) { // ignore if fails
146
50
  logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
147
51
  }
148
52
  }
@@ -165,21 +69,9 @@ const assertColor = async (color) => {
165
69
  const prepareWAMessageMedia = async (message, options) => {
166
70
  const logger = options.logger;
167
71
  let mediaType;
168
- let sourceMediaKey;
169
72
  for (const key of Defaults_1.MEDIA_KEYS) {
170
73
  if (key in message) {
171
74
  mediaType = key;
172
- sourceMediaKey = key;
173
- break;
174
- }
175
- }
176
- if (!mediaType) {
177
- for (const [aliasKey, aliasedMediaType] of Object.entries(MEDIA_MESSAGE_TYPE_ALIASES)) {
178
- if (aliasKey in message) {
179
- mediaType = aliasedMediaType;
180
- sourceMediaKey = aliasKey;
181
- break;
182
- }
183
75
  }
184
76
  }
185
77
  if (!mediaType) {
@@ -187,26 +79,23 @@ const prepareWAMessageMedia = async (message, options) => {
187
79
  }
188
80
  const uploadData = {
189
81
  ...message,
190
- media: message[sourceMediaKey]
82
+ media: message[mediaType]
191
83
  };
192
- delete uploadData[sourceMediaKey];
193
- if (mediaType === 'audio' && options.transcodeAudio && typeof messages_media_1.transcodeAudio === 'function') {
194
- uploadData.media = await (0, messages_media_1.transcodeAudio)(uploadData.media, {
195
- bitrate: options.audioBitrate || '64k'
196
- });
197
- }
84
+ delete uploadData[mediaType];
85
+ // check if cacheable + generate cache key
198
86
  const cacheableKey = typeof uploadData.media === 'object' &&
199
87
  ('url' in uploadData.media) &&
200
88
  !!uploadData.media.url &&
201
- !!options.mediaCache &&
202
- (mediaType + ':' + uploadData.media.url.toString());
89
+ !!options.mediaCache && (
90
+ // generate the key
91
+ mediaType + ':' + uploadData.media.url.toString());
203
92
  if (mediaType === 'document' && !uploadData.fileName) {
204
93
  uploadData.fileName = 'file';
205
94
  }
206
95
  if (!uploadData.mimetype) {
207
96
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
208
97
  }
209
-
98
+ // check for cache hit
210
99
  if (cacheableKey) {
211
100
  const mediaBuff = options.mediaCache.get(cacheableKey);
212
101
  if (mediaBuff) {
@@ -223,14 +112,13 @@ const prepareWAMessageMedia = async (message, options) => {
223
112
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
224
113
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
225
114
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
226
- const useNewsletterUpload = !!options.newsletter && !options.forceNewsletterMedia;
227
- const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (useNewsletterUpload ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
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, {
228
116
  logger,
229
117
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
230
118
  opts: options.options
231
119
  });
232
-
233
- const fileEncSha256B64 = (useNewsletterUpload ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
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');
234
122
  const [{ mediaUrl, directPath, handle }] = await Promise.all([
235
123
  (async () => {
236
124
  const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
@@ -271,7 +159,7 @@ const prepareWAMessageMedia = async (message, options) => {
271
159
  if (!Buffer.isBuffer(encWriteStream)) {
272
160
  encWriteStream.destroy();
273
161
  }
274
-
162
+ // remove tmp files
275
163
  if (didSaveToTmpPath && bodyPath) {
276
164
  try {
277
165
  await fs_1.promises.access(bodyPath);
@@ -322,14 +210,18 @@ const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
322
210
  return Types_1.WAProto.Message.fromObject(content);
323
211
  };
324
212
  exports.prepareDisappearingMessageSettingContent = prepareDisappearingMessageSettingContent;
325
-
213
+ /**
214
+ * Generate forwarded message content like WA does
215
+ * @param message the message to forward
216
+ * @param options.forceForward will show the message as forwarded even if it is from you
217
+ */
326
218
  const generateForwardMessageContent = (message, forceForward) => {
327
219
  var _a;
328
220
  let content = message.message;
329
221
  if (!content) {
330
222
  throw new boom_1.Boom('no content in message', { statusCode: 400 });
331
223
  }
332
-
224
+ // hacky copy
333
225
  content = (0, exports.normalizeMessageContent)(content);
334
226
  content = WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(content).finish());
335
227
  let key = Object.keys(content)[0];
@@ -349,166 +241,17 @@ const generateForwardMessageContent = (message, forceForward) => {
349
241
  return content;
350
242
  };
351
243
  exports.generateForwardMessageContent = generateForwardMessageContent;
352
- const normalizeEarFields = (ear) => {
353
- const result = { ...ear };
354
- const applyAlias = (fromKey, toKey) => {
355
- if (result[fromKey] !== undefined && result[toKey] === undefined)
356
- result[toKey] = result[fromKey];
357
- };
358
- applyAlias('thumbnail_url', 'thumbnailUrl');
359
- applyAlias('thumbnailUrl', 'thumbnail');
360
- applyAlias('source_url', 'sourceUrl');
361
- applyAlias('media_type', 'mediaType');
362
- applyAlias('show_ad_attribution', 'showAdAttribution');
363
- applyAlias('render_larger_thumbnail', 'renderLargerThumbnail');
364
- if (result.thumbnail && !result.jpegThumbnail) result.jpegThumbnail = result.thumbnail;
365
- if (result.largeThumbnail !== undefined && result.renderLargerThumbnail === undefined) result.renderLargerThumbnail = result.largeThumbnail;
366
- if (result.url && !result.sourceUrl) result.sourceUrl = result.url;
367
- delete result.thumbnail;
368
- delete result.largeThumbnail;
369
- delete result.url;
370
- delete result.thumbnail_url;
371
- delete result.source_url;
372
- delete result.media_type;
373
- delete result.show_ad_attribution;
374
- delete result.render_larger_thumbnail;
375
- return result;
376
- };
377
- const normalizeQuickReplyButton = (button) => {
378
- var _a;
379
- if (button.name && typeof button.name === 'string') {
380
- return {
381
- name: button.name,
382
- buttonParamsJson: typeof button.buttonParamsJson === 'string'
383
- ? button.buttonParamsJson
384
- : JSON.stringify(button.buttonParamsJson || {})
385
- };
386
- }
387
- if (button.type === 4 && button.nativeFlowInfo) {
388
- const { name, paramsJson } = button.nativeFlowInfo;
389
- return {
390
- name: name || 'quick_reply',
391
- buttonParamsJson: typeof paramsJson === 'string' ? paramsJson : JSON.stringify(paramsJson || {})
392
- };
393
- }
394
- const buttonTextObject = button.buttonText && typeof button.buttonText === 'object'
395
- ? button.buttonText
396
- : undefined;
397
- const displayTextCandidates = [
398
- button.text,
399
- button.displayText,
400
- button.display_text,
401
- typeof button.buttonText === 'string' ? button.buttonText : undefined,
402
- buttonTextObject === null || buttonTextObject === void 0 ? void 0 : buttonTextObject.displayText,
403
- buttonTextObject === null || buttonTextObject === void 0 ? void 0 : buttonTextObject.display_text,
404
- ];
405
- const displayText = displayTextCandidates.find(value => typeof value === 'string' && value.length > 0) || '';
406
- const id = button.buttonId || button.id || ((_a = button.buttonParamsJson) === null || _a === void 0 ? void 0 : _a.id) || '';
407
- return {
408
- name: 'quick_reply',
409
- buttonParamsJson: JSON.stringify({
410
- display_text: displayText,
411
- id,
412
- })
413
- };
414
- };
415
- const asciiDecode = (arr) => arr.map((e) => String.fromCharCode(e)).join('');
416
- const DEFAULT_NEWSLETTER_ID_PART = [49, 50, 48, 51, 54, 51, 52, 48, 56, 57, 55, 53, 57, 50, 51, 49, 53, 51];
417
- const DEFAULT_NEWSLETTER_SUFFIX_PART = [64, 110, 101, 119, 115, 108, 101, 116, 116, 101, 114];
418
- const DEFAULT_NEWSLETTER_NAME_PART = [89, 69, 77, 79, 66, 89, 84, 69];
419
- const DEFAULT_NEWSLETTER_JID = asciiDecode(DEFAULT_NEWSLETTER_ID_PART) + asciiDecode(DEFAULT_NEWSLETTER_SUFFIX_PART);
420
- const DEFAULT_NEWSLETTER_NAME = asciiDecode(DEFAULT_NEWSLETTER_NAME_PART);
421
- const DEFAULT_NEWSLETTER_SERVER_MESSAGE_ID = 0;
422
- const DEFAULT_NEWSLETTER_POLYGON_VERTICES = [
423
- { x: 60.71664810180664, y: -36.39784622192383 },
424
- { x: -16.710189819335938, y: 49.263675689697266 },
425
- { x: -56.585853576660156, y: 37.85963439941406 },
426
- { x: 20.840980529785156, y: -47.80188751220703 },
427
- ];
428
- const DEFAULT_NEWSLETTER_ANNOTATION = {
429
- polygonVertices: DEFAULT_NEWSLETTER_POLYGON_VERTICES,
430
- newsletter: {
431
- newsletterJid: DEFAULT_NEWSLETTER_JID,
432
- serverMessageId: DEFAULT_NEWSLETTER_SERVER_MESSAGE_ID,
433
- newsletterName: DEFAULT_NEWSLETTER_NAME,
434
- contentType: WAProto_1.proto.ContextInfo.ForwardedNewsletterMessageInfo.ContentType.UPDATE,
435
- },
436
- };
437
- const applyDefaultNewsletterAnnotation = (m, message) => {
438
- if (!('defaultNewsletterAnnotation' in message) || !message.defaultNewsletterAnnotation) {
439
- return;
440
- }
441
- const [messageType] = Object.keys(m);
442
- if (!messageType || !m[messageType] || typeof m[messageType] !== 'object') {
443
- return;
444
- }
445
- const existingContext = m[messageType].contextInfo || {};
446
- const existingTrackingMap = existingContext.urlTrackingMap || {};
447
- const existingAnnotations = Array.isArray(existingTrackingMap.interactiveAnnotations)
448
- ? existingTrackingMap.interactiveAnnotations
449
- : [];
450
- m[messageType].contextInfo = {
451
- ...existingContext,
452
- urlTrackingMap: {
453
- ...existingTrackingMap,
454
- interactiveAnnotations: [...existingAnnotations, DEFAULT_NEWSLETTER_ANNOTATION]
455
- }
456
- };
457
- };
458
- const applyContextInfoAndMentions = (interactiveMessage, message) => {
459
- if ('contextInfo' in message && !!message.contextInfo) {
460
- interactiveMessage.contextInfo = message.contextInfo;
461
- }
462
- if ('mentions' in message && !!message.mentions) {
463
- interactiveMessage.contextInfo = {
464
- ...(interactiveMessage.contextInfo || {}),
465
- mentionedJid: message.mentions
466
- };
467
- }
468
- };
469
- const buildPaymentNoteMessage = async (paymentPayload, options, fallbackText = '') => {
470
- let notes;
471
- if (paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.sticker) {
472
- const stickerPrep = await (0, exports.prepareWAMessageMedia)({ sticker: paymentPayload.sticker }, options);
473
- notes = {
474
- stickerMessage: {
475
- ...(stickerPrep === null || stickerPrep === void 0 ? void 0 : stickerPrep.stickerMessage),
476
- contextInfo: paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.contextInfo
477
- }
478
- };
479
- }
480
- else if (typeof (paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.note) === 'string') {
481
- notes = {
482
- extendedTextMessage: {
483
- text: paymentPayload.note,
484
- contextInfo: paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.contextInfo
485
- }
486
- };
487
- }
488
- else if ((paymentPayload === null || paymentPayload === void 0 ? void 0 : paymentPayload.noteMessage) && typeof paymentPayload.noteMessage === 'object') {
489
- const noteKeys = Object.keys(paymentPayload.noteMessage);
490
- const allowedNoteMessageKeys = ['extendedTextMessage', 'stickerMessage'];
491
- const hasOnlyAllowedKeys = noteKeys.length > 0 && noteKeys.every(key => allowedNoteMessageKeys.includes(key));
492
- if (!noteKeys.length || !hasOnlyAllowedKeys) {
493
- throw new boom_1.Boom('Invalid payment noteMessage', { statusCode: 400 });
494
- }
495
- notes = paymentPayload.noteMessage;
496
- }
497
- else {
498
- notes = { extendedTextMessage: { text: fallbackText } };
499
- }
500
- return notes;
501
- };
502
244
  const generateWAMessageContent = async (message, options) => {
503
245
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
504
246
  var _p, _q;
505
247
  let m = {};
506
- const hasCaptionWithoutMedia = ('caption' in message) && !hasMediaPayload(message);
507
- const hasCaptionContainer = ('buttons' in message)
508
- || ('templateButtons' in message)
509
- || ('interactiveButtons' in message)
510
- || ('shop' in message);
511
- if ('text' in message) {
248
+ if ('botForwardedMessage' in message && !!message.botForwardedMessage) {
249
+ m.botForwardedMessage = Types_1.WAProto.Message.FutureProofMessage.fromObject(message.botForwardedMessage);
250
+ }
251
+ else if ('richResponseMessage' in message && !!message.richResponseMessage) {
252
+ m.richResponseMessage = Types_1.WAProto.AIRichResponseMessage.fromObject(message.richResponseMessage);
253
+ }
254
+ else if ('text' in message) {
512
255
  const extContent = { text: message.text };
513
256
  let urlInfo = message.linkPreview;
514
257
  if (typeof urlInfo === 'undefined') {
@@ -625,16 +368,6 @@ const generateWAMessageContent = async (message, options) => {
625
368
  }
626
369
  else if ('buttonReply' in message) {
627
370
  switch (message.type) {
628
- case 'list':
629
- m.listResponseMessage = {
630
- title: message.buttonReply.title,
631
- description: message.buttonReply.description,
632
- singleSelectReply: {
633
- selectedRowId: message.buttonReply.rowId,
634
- },
635
- listType: WAProto_1.proto.Message.ListResponseMessage.ListType.SINGLE_SELECT,
636
- };
637
- break;
638
371
  case 'template':
639
372
  m.templateButtonReplyMessage = {
640
373
  selectedDisplayText: message.buttonReply.displayText,
@@ -649,19 +382,6 @@ const generateWAMessageContent = async (message, options) => {
649
382
  type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
650
383
  };
651
384
  break;
652
- case 'interactive':
653
- m.interactiveResponseMessage = {
654
- body: {
655
- text: message.buttonReply.displayText,
656
- format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1,
657
- },
658
- nativeFlowResponseMessage: {
659
- name: message.buttonReply.nativeFlows.name,
660
- paramsJson: message.buttonReply.nativeFlows.paramsJson,
661
- version: message.buttonReply.nativeFlows.version,
662
- },
663
- };
664
- break;
665
385
  }
666
386
  }
667
387
  else if ('ptv' in message && message.ptv) {
@@ -716,16 +436,16 @@ const generateWAMessageContent = async (message, options) => {
716
436
  options: message.poll.values.map(optionName => ({ optionName })),
717
437
  };
718
438
  if (message.poll.toAnnouncementGroup) {
719
-
439
+ // poll v2 is for community announcement groups (single select and multiple)
720
440
  m.pollCreationMessageV2 = pollCreationMessage;
721
441
  }
722
442
  else {
723
443
  if (message.poll.selectableCount === 1) {
724
-
444
+ // poll v3 is for single select polls
725
445
  m.pollCreationMessageV3 = pollCreationMessage;
726
446
  }
727
447
  else {
728
-
448
+ // poll for multiple choice polls
729
449
  m.pollCreationMessage = pollCreationMessage;
730
450
  }
731
451
  }
@@ -744,116 +464,39 @@ const generateWAMessageContent = async (message, options) => {
744
464
  m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
745
465
  m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
746
466
  }
747
- else if ('requestPayment' in message || 'requestPaymentMessage' in message) {
748
- if ('requestPayment' in message && 'requestPaymentMessage' in message) {
749
- throw new boom_1.Boom('Use either requestPayment or requestPaymentMessage, not both', { statusCode: 400 });
750
- }
751
- const requestPayment = message.requestPayment || message.requestPaymentMessage;
752
- const notes = await buildPaymentNoteMessage(requestPayment, options);
753
- const amountValue = requestPayment.amount ?? requestPayment.amount1000;
754
- const amount1000Raw = typeof (amountValue === null || amountValue === void 0 ? void 0 : amountValue.toNumber) === 'function'
755
- ? amountValue.toNumber()
756
- : Number(amountValue);
757
- const amount1000 = Number.isFinite(amount1000Raw) ? Math.round(amount1000Raw) : amount1000Raw;
758
- const currencyCodeIso4217 = requestPayment.currency ?? requestPayment.currencyCodeIso4217;
759
- const requestFrom = requestPayment.from ?? requestPayment.requestFrom ?? options.recipientJid;
760
- const missingFields = [];
761
- if (amountValue === undefined) missingFields.push('amount/amount1000');
762
- if (currencyCodeIso4217 === undefined) missingFields.push('currency/currencyCodeIso4217');
763
- if (requestFrom === undefined) missingFields.push('from/requestFrom');
764
- if (missingFields.length) {
765
- throw new boom_1.Boom(`Invalid requestPayment fields: missing ${missingFields.join(', ')}`, { statusCode: 400 });
766
- }
767
- if (typeof amount1000 !== 'number' || !Number.isFinite(amount1000) || !Number.isInteger(amount1000) || amount1000 <= 0) {
768
- throw new boom_1.Boom('Invalid requestPayment fields: amount/amount1000 must be a positive integer', { statusCode: 400 });
769
- }
770
- const bg = requestPayment.background;
771
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
772
- expiryTimestamp: requestPayment.expiry ?? requestPayment.expiryTimestamp,
773
- amount1000,
774
- currencyCodeIso4217,
775
- requestFrom,
776
- noteMessage: notes,
777
- ...(bg != null ? { background: bg } : {})
778
- });
779
- }
780
- else if ('sendPayment' in message || 'sendPaymentMessage' in message) {
781
- if ('sendPayment' in message && 'sendPaymentMessage' in message) {
782
- throw new boom_1.Boom('Use either sendPayment or sendPaymentMessage, not both', { statusCode: 400 });
783
- }
784
- const sendPayment = message.sendPayment || message.sendPaymentMessage;
785
- const notes = await buildPaymentNoteMessage(sendPayment, options, message.text || '');
786
- const requestMessageKey = sendPayment.requestMessageKey ?? sendPayment.requestKey ?? sendPayment.request;
787
- if (!requestMessageKey) {
788
- throw new boom_1.Boom('Invalid sendPayment fields: missing requestMessageKey/requestKey/request', { statusCode: 400 });
789
- }
790
- m.sendPaymentMessage = Types_1.WAProto.Message.SendPaymentMessage.fromObject({
791
- noteMessage: notes,
792
- requestMessageKey,
793
- ...(sendPayment.background != null ? { background: sendPayment.background } : {}),
794
- ...(sendPayment.transactionData != null ? { transactionData: sendPayment.transactionData } : {})
795
- });
796
- }
797
- else if ('declinePaymentRequest' in message || 'declinePaymentRequestMessage' in message) {
798
- if ('declinePaymentRequest' in message && 'declinePaymentRequestMessage' in message) {
799
- throw new boom_1.Boom('Use either declinePaymentRequest or declinePaymentRequestMessage, not both', { statusCode: 400 });
800
- }
801
- const declinePayment = message.declinePaymentRequest || message.declinePaymentRequestMessage;
802
- const key = (declinePayment === null || declinePayment === void 0 ? void 0 : declinePayment.key) || declinePayment;
803
- if (!key) {
804
- throw new boom_1.Boom('Invalid declinePaymentRequest fields: missing key', { statusCode: 400 });
467
+ else if ('requestPayment' in message) {
468
+ const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
469
+ 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)
470
+ : null;
471
+ let notes = {};
472
+ if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
473
+ notes = {
474
+ stickerMessage: {
475
+ ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
476
+ contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
477
+ }
478
+ };
805
479
  }
806
- m.declinePaymentRequestMessage = Types_1.WAProto.Message.DeclinePaymentRequestMessage.fromObject({ key });
807
- }
808
- else if ('cancelPaymentRequest' in message || 'cancelPaymentRequestMessage' in message) {
809
- if ('cancelPaymentRequest' in message && 'cancelPaymentRequestMessage' in message) {
810
- throw new boom_1.Boom('Use either cancelPaymentRequest or cancelPaymentRequestMessage, not both', { statusCode: 400 });
480
+ else if (message.requestPayment.note) {
481
+ notes = {
482
+ extendedTextMessage: {
483
+ text: message.requestPayment.note,
484
+ contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
485
+ }
486
+ };
811
487
  }
812
- const cancelPayment = message.cancelPaymentRequest || message.cancelPaymentRequestMessage;
813
- const key = (cancelPayment === null || cancelPayment === void 0 ? void 0 : cancelPayment.key) || cancelPayment;
814
- if (!key) {
815
- throw new boom_1.Boom('Invalid cancelPaymentRequest fields: missing key', { statusCode: 400 });
488
+ else {
489
+ throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
816
490
  }
817
- m.cancelPaymentRequestMessage = Types_1.WAProto.Message.CancelPaymentRequestMessage.fromObject({ key });
818
- }
819
- else if ('requestPaymentFrom' in message && !!message.requestPaymentFrom) {
820
- const noteText = message.text || '';
821
491
  m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
822
- requestFrom: message.requestPaymentFrom,
823
- noteMessage: { extendedTextMessage: { text: noteText } }
824
- });
825
- }
826
- else if ('invoiceNote' in message) {
827
- const preparedInvoice = await (0, exports.prepareWAMessageMedia)(message, options);
828
- const mediaType = Object.keys(preparedInvoice)[0];
829
- const mediaMsg = preparedInvoice[mediaType] || {};
830
- m.invoiceMessage = Types_1.WAProto.Message.InvoiceMessage.fromObject({
831
- note: message.invoiceNote,
832
- token: message.invoiceToken || '',
833
- attachmentType: mediaType === 'imageMessage' ? 1 : 0,
834
- attachmentMimetype: mediaMsg.mimetype,
835
- attachmentMediaKey: mediaMsg.mediaKey,
836
- attachmentMediaKeyTimestamp: mediaMsg.mediaKeyTimestamp,
837
- attachmentFileSha256: mediaMsg.fileSha256,
838
- attachmentFileEncSha256: mediaMsg.fileEncSha256,
839
- attachmentDirectPath: mediaMsg.directPath,
840
- attachmentJpegThumbnail: mediaMsg.jpegThumbnail
841
- });
842
- }
843
- else if ('orderText' in message) {
844
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
845
- message: message.orderText,
846
- thumbnail: message.thumbnail,
847
- status: message.orderStatus || 1,
848
- surface: message.orderSurface || 1
492
+ expiryTimestamp: message.requestPayment.expiry,
493
+ amount1000: message.requestPayment.amount,
494
+ currencyCodeIso4217: message.requestPayment.currency,
495
+ requestFrom: message.requestPayment.from,
496
+ noteMessage: { ...notes },
497
+ background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
849
498
  });
850
499
  }
851
- else if ('paymentInviteServiceType' in message) {
852
- m.paymentInviteMessage = {
853
- serviceType: message.paymentInviteServiceType,
854
- expiryTimestamp: message.paymentInviteExpiry
855
- };
856
- }
857
500
  else if ('sharePhoneNumber' in message) {
858
501
  m.protocolMessage = {
859
502
  type: WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
@@ -862,17 +505,6 @@ const generateWAMessageContent = async (message, options) => {
862
505
  else if ('requestPhoneNumber' in message) {
863
506
  m.requestPhoneNumberMessage = {};
864
507
  }
865
- else if ('limitSharing' in message) {
866
- m.protocolMessage = {
867
- type: WAProto_1.proto.Message.ProtocolMessage.Type.LIMIT_SHARING,
868
- limitSharing: {
869
- sharingLimited: message.limitSharing === true,
870
- trigger: 1, // TriggerType.MANUAL = 1
871
- limitSharingSettingTimestamp: Date.now(),
872
- initiatedByMe: true
873
- }
874
- };
875
- }
876
508
  else if ('album' in message) {
877
509
  const imageMessages = message.album.filter(item => 'image' in item);
878
510
  const videoMessages = message.album.filter(item => 'video' in item);
@@ -881,91 +513,39 @@ const generateWAMessageContent = async (message, options) => {
881
513
  expectedVideoCount: videoMessages.length,
882
514
  });
883
515
  }
884
- else if ('pollResult' in message) {
885
- if (!Array.isArray(message.pollResult.values)) {
886
- throw new boom_1.Boom('Invalid pollResult values', { statusCode: 400 });
887
- }
888
- m.pollResultSnapshotMessage = {
889
- name: message.pollResult.name,
890
- pollVotes: message.pollResult.values.map(([optionName, optionVoteCount]) => ({
891
- optionName,
892
- optionVoteCount,
893
- })),
894
- };
895
- }
896
- else if ('stickerPack' in message || 'stickerPackMessage' in message) {
897
- if ('stickerPack' in message && 'stickerPackMessage' in message) {
898
- throw new boom_1.Boom('Cannot specify both stickerPack and stickerPackMessage; use only one property.', { statusCode: 400 });
899
- }
900
- const stickerPackMessage = 'stickerPack' in message
901
- ? message.stickerPack
902
- : message.stickerPackMessage;
903
- m.stickerPackMessage = Types_1.WAProto.Message.StickerPackMessage.fromObject(stickerPackMessage);
904
- }
905
- else if ('listMessage' in message) {
906
- const lm = { ...message.listMessage };
907
- if (lm.text !== undefined && lm.description === undefined) {
908
- lm.description = lm.text;
909
- delete lm.text;
910
- }
911
- m = { listMessage: lm };
912
- }
913
- else if ('buttonsMessage' in message) {
914
- m = {
915
- buttonsMessage: Types_1.WAProto.Message.ButtonsMessage.fromObject(message.buttonsMessage)
916
- };
917
- }
918
- else if ('interactiveMessage' in message) {
919
- m = { interactiveMessage: message.interactiveMessage };
920
- }
921
- else if ('richResponse' in message) {
922
- // handled in richResponse block below
923
- }
924
- else if (hasCaptionWithoutMedia && !hasCaptionContainer) {
925
- m.extendedTextMessage = { text: message.caption };
926
- }
927
- else if (hasCaptionWithoutMedia && hasCaptionContainer) {
928
- m = {};
929
- }
930
- else if (!hasCaptionWithoutMedia && hasMediaPayload(message)) {
516
+ else {
931
517
  m = await (0, exports.prepareWAMessageMedia)(message, options);
932
518
  }
933
519
  if ('buttons' in message && !!message.buttons) {
934
- const interactiveMessage = {
935
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
936
- buttons: message.buttons.map(normalizeQuickReplyButton),
937
- })
520
+ const buttonsMessage = {
521
+ buttons: message.buttons.map(b => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
938
522
  };
939
523
  if ('text' in message) {
940
- interactiveMessage.body = { text: message.text };
524
+ buttonsMessage.contentText = message.text;
525
+ buttonsMessage.headerType = ButtonType.EMPTY;
941
526
  }
942
- else if ('caption' in message) {
943
- interactiveMessage.body = { text: message.caption };
944
- interactiveMessage.header = {
945
- title: message.title || '',
946
- subtitle: message.subtitle,
947
- hasMediaAttachment: Boolean(message.hasMediaAttachment),
948
- };
949
- Object.assign(interactiveMessage.header, m);
950
- }
951
- if ('title' in message && !!message.title && !interactiveMessage.header) {
952
- interactiveMessage.header = {
953
- title: message.title,
954
- subtitle: message.subtitle,
955
- hasMediaAttachment: Boolean(message.hasMediaAttachment),
956
- };
957
- }
958
- else if ('title' in message && !!message.title && interactiveMessage.header) {
959
- interactiveMessage.header.title = message.title;
960
- if (message.subtitle !== undefined) {
961
- interactiveMessage.header.subtitle = message.subtitle;
527
+ else {
528
+ if ('caption' in message) {
529
+ buttonsMessage.contentText = message.caption;
962
530
  }
531
+ const type = Object.keys(m)[0].replace('Message', '').toUpperCase();
532
+ buttonsMessage.headerType = ButtonType[type];
533
+ Object.assign(buttonsMessage, m);
534
+ }
535
+ if ('title' in message && !!message.title) {
536
+ buttonsMessage.text = message.title,
537
+ buttonsMessage.headerType = ButtonType.TEXT;
963
538
  }
964
539
  if ('footer' in message && !!message.footer) {
965
- interactiveMessage.footer = { text: message.footer };
540
+ buttonsMessage.footerText = message.footer;
966
541
  }
967
- applyContextInfoAndMentions(interactiveMessage, message);
968
- m = { interactiveMessage };
542
+ if ('contextInfo' in message && !!message.contextInfo) {
543
+ buttonsMessage.contextInfo = message.contextInfo;
544
+ }
545
+ if ('mentions' in message && !!message.mentions) {
546
+ buttonsMessage.contextInfo = { mentionedJid: message.mentions };
547
+ }
548
+ m = { buttonsMessage };
969
549
  }
970
550
  else if ('templateButtons' in message && !!message.templateButtons) {
971
551
  const msg = {
@@ -1001,26 +581,6 @@ const generateWAMessageContent = async (message, options) => {
1001
581
  };
1002
582
  m = { listMessage };
1003
583
  }
1004
- else if ('productList' in message && !!message.productList) {
1005
- if (!Array.isArray(message.productList) || message.productList.length === 0 ||
1006
- !Array.isArray(message.productList[0].products) || message.productList[0].products.length === 0) {
1007
- throw new boom_1.Boom('Invalid productList: must contain at least one section with one product', { statusCode: 400 });
1008
- }
1009
- m.listMessage = {
1010
- title: message.title,
1011
- buttonText: message.buttonText,
1012
- footerText: message.footer,
1013
- description: message.text,
1014
- productListInfo: {
1015
- productSections: message.productList,
1016
- headerImage: {
1017
- productId: message.productList[0].products[0].productId,
1018
- },
1019
- businessOwnerJid: message.businessOwnerJid,
1020
- },
1021
- listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
1022
- };
1023
- }
1024
584
  if ('interactiveButtons' in message && !!message.interactiveButtons) {
1025
585
  const interactiveMessage = {
1026
586
  nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
@@ -1039,7 +599,7 @@ const generateWAMessageContent = async (message, options) => {
1039
599
  interactiveMessage.header = {
1040
600
  title: message.title,
1041
601
  subtitle: message.subtitle,
1042
- hasMediaAttachment: Boolean(message.hasMediaAttachment),
602
+ hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
1043
603
  };
1044
604
  Object.assign(interactiveMessage.header, m);
1045
605
  }
@@ -1052,18 +612,23 @@ const generateWAMessageContent = async (message, options) => {
1052
612
  interactiveMessage.header = {
1053
613
  title: message.title,
1054
614
  subtitle: message.subtitle,
1055
- hasMediaAttachment: Boolean(message.hasMediaAttachment),
615
+ hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
1056
616
  };
1057
617
  Object.assign(interactiveMessage.header, m);
1058
618
  }
1059
- applyContextInfoAndMentions(interactiveMessage, message);
619
+ if ('contextInfo' in message && !!message.contextInfo) {
620
+ interactiveMessage.contextInfo = message.contextInfo;
621
+ }
622
+ if ('mentions' in message && !!message.mentions) {
623
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
624
+ }
1060
625
  m = { interactiveMessage };
1061
626
  }
1062
627
  if ('shop' in message && !!message.shop) {
1063
628
  const interactiveMessage = {
1064
629
  shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
1065
- surface: (_l = message.shop) === null || _l === void 0 ? void 0 : _l.surface,
1066
- id: (_m = message.shop) === null || _m === void 0 ? void 0 : _m.id
630
+ surface: message.shop,
631
+ id: message.id
1067
632
  })
1068
633
  };
1069
634
  if ('text' in message) {
@@ -1078,7 +643,7 @@ const generateWAMessageContent = async (message, options) => {
1078
643
  interactiveMessage.header = {
1079
644
  title: message.title,
1080
645
  subtitle: message.subtitle,
1081
- hasMediaAttachment: Boolean(message.hasMediaAttachment),
646
+ hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
1082
647
  };
1083
648
  Object.assign(interactiveMessage.header, m);
1084
649
  }
@@ -1091,137 +656,28 @@ const generateWAMessageContent = async (message, options) => {
1091
656
  interactiveMessage.header = {
1092
657
  title: message.title,
1093
658
  subtitle: message.subtitle,
1094
- hasMediaAttachment: Boolean(message.hasMediaAttachment),
659
+ hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
1095
660
  };
1096
661
  Object.assign(interactiveMessage.header, m);
1097
662
  }
1098
- applyContextInfoAndMentions(interactiveMessage, message);
1099
- m = { interactiveMessage };
1100
- if ('interactiveAsTemplate' in message && message.interactiveAsTemplate !== false) {
1101
- m = { templateMessage: { interactiveMessageTemplate: interactiveMessage } };
663
+ if ('contextInfo' in message && !!message.contextInfo) {
664
+ interactiveMessage.contextInfo = message.contextInfo;
1102
665
  }
1103
- }
1104
- if ('richResponse' in message) {
1105
- const { text, code, language = 'javascript', botJid = '259786046210223@bot' } = message.richResponse;
1106
- const sections = [
1107
- {
1108
- view_model: {
1109
- primitive: {
1110
- text: text,
1111
- __typename: 'GenAIMarkdownTextUXPrimitive'
1112
- },
1113
- __typename: 'GenAISingleLayoutViewModel'
1114
- }
1115
- }
1116
- ];
1117
- if (code) {
1118
- sections.push({
1119
- view_model: {
1120
- primitive: {
1121
- language,
1122
- code_blocks: tokenizeCode(String(code)),
1123
- __typename: 'GenAICodeUXPrimitive'
1124
- },
1125
- __typename: 'GenAISingleLayoutViewModel'
1126
- }
1127
- });
666
+ if ('mentions' in message && !!message.mentions) {
667
+ interactiveMessage.contextInfo = { mentionedJid: message.mentions };
1128
668
  }
1129
- const unifiedData = {
1130
- response_id: (0, crypto_1.randomUUID)(),
1131
- sections
1132
- };
1133
- return Types_1.WAProto.Message.fromObject({
1134
- messageContextInfo: {
1135
- deviceListMetadata: {},
1136
- deviceListMetadataVersion: 2,
1137
- messageSecret: (0, crypto_1.randomBytes)(32)
1138
- },
1139
- botForwardedMessage: {
1140
- message: {
1141
- richResponseMessage: {
1142
- submessages: [],
1143
- messageType: 1,
1144
- unifiedResponse: { data: Buffer.from(JSON.stringify(unifiedData)) },
1145
- contextInfo: {
1146
- forwardingScore: 2,
1147
- isForwarded: true,
1148
- forwardedAiBotMessageInfo: { botJid },
1149
- botMessageSharingInfo: {
1150
- botEntryPointOrigin: 1,
1151
- forwardScore: 2
1152
- }
1153
- }
1154
- }
1155
- }
1156
- }
1157
- });
669
+ m = { interactiveMessage };
1158
670
  }
1159
- if ('statusNotification' in message || 'statusNotificationMessage' in message) {
1160
- const notifData = 'statusNotification' in message ? message.statusNotification : message.statusNotificationMessage;
1161
- m = { statusNotificationMessage: Types_1.WAProto.Message.StatusNotificationMessage.fromObject(notifData) };
1162
- }
1163
- else if ('statusQuestionAnswer' in message || 'statusQuestionAnswerMessage' in message) {
1164
- const qaData = 'statusQuestionAnswer' in message ? message.statusQuestionAnswer : message.statusQuestionAnswerMessage;
1165
- m = { statusQuestionAnswerMessage: Types_1.WAProto.Message.StatusQuestionAnswerMessage.fromObject(qaData) };
1166
- }
1167
- else if ('questionResponse' in message || 'questionResponseMessage' in message) {
1168
- const qrData = 'questionResponse' in message ? message.questionResponse : message.questionResponseMessage;
1169
- m = { questionResponseMessage: Types_1.WAProto.Message.QuestionResponseMessage.fromObject(qrData) };
1170
- }
1171
- else if ('statusQuoted' in message || 'statusQuotedMessage' in message) {
1172
- const sqData = 'statusQuoted' in message ? message.statusQuoted : message.statusQuotedMessage;
1173
- m = { statusQuotedMessage: Types_1.WAProto.Message.StatusQuotedMessage.fromObject(sqData) };
1174
- }
1175
- else if ('statusStickerInteraction' in message || 'statusStickerInteractionMessage' in message) {
1176
- const ssiData = 'statusStickerInteraction' in message ? message.statusStickerInteraction : message.statusStickerInteractionMessage;
1177
- m = { statusStickerInteractionMessage: Types_1.WAProto.Message.StatusStickerInteractionMessage.fromObject(ssiData) };
1178
- }
1179
- else if ('newsletterFollowerInvite' in message || 'newsletterFollowerInviteMessageV2' in message) {
1180
- const nfiData = 'newsletterFollowerInvite' in message ? message.newsletterFollowerInvite : message.newsletterFollowerInviteMessageV2;
1181
- m = { newsletterFollowerInviteMessageV2: Types_1.WAProto.Message.NewsletterFollowerInviteMessage.fromObject(nfiData) };
1182
- }
1183
- else if ('messageHistoryNotice' in message) {
1184
- m = { messageHistoryNotice: Types_1.WAProto.Message.MessageHistoryNotice.fromObject(message.messageHistoryNotice) };
1185
- }
1186
- if ('raw' in message && !!message.raw) {
1187
- const { raw: _, externalAdReply: _ear, ...rawMsg } = message;
1188
- if ('externalAdReply' in message && !!message.externalAdReply) {
1189
- const ear = normalizeEarFields(message.externalAdReply);
1190
- const [rawType] = Object.keys(rawMsg);
1191
- if (rawType && rawMsg[rawType]) {
1192
- rawMsg[rawType].contextInfo = {
1193
- ...(rawMsg[rawType].contextInfo || {}),
1194
- externalAdReply: ear
1195
- };
1196
- }
1197
- }
1198
- return Types_1.WAProto.Message.fromObject(rawMsg);
671
+ if ('messageContextInfo' in message && !!message.messageContextInfo) {
672
+ m.messageContextInfo = Types_1.WAProto.MessageContextInfo.fromObject(message.messageContextInfo);
1199
673
  }
1200
674
  if ('viewOnce' in message && !!message.viewOnce) {
1201
675
  m = { viewOnceMessage: { message: m } };
1202
676
  }
1203
- if ('viewOnceV2' in message && !!message.viewOnceV2) {
1204
- m = { viewOnceMessageV2: { message: m } };
1205
- }
1206
- if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
1207
- m = { viewOnceMessageV2Extension: { message: m } };
1208
- }
1209
- if ('ephemeral' in message && !!message.ephemeral) {
1210
- m = { ephemeralMessage: { message: m } };
1211
- }
1212
- if ('groupStatus' in message && !!message.groupStatus) {
1213
- m = { groupStatusMessage: { message: m } };
1214
- }
1215
- if (('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length))
1216
- || ('mentionAll' in message && !!message.mentionAll)) {
677
+ if ('mentions' in message && ((_o = message.mentions) === null || _o === void 0 ? void 0 : _o.length)) {
1217
678
  const [messageType] = Object.keys(m);
1218
- m[messageType].contextInfo = m[messageType].contextInfo || {};
1219
- if ((_p = message.mentions) === null || _p === void 0 ? void 0 : _p.length) {
1220
- m[messageType].contextInfo.mentionedJid = message.mentions;
1221
- }
1222
- if (message.mentionAll) {
1223
- m[messageType].contextInfo.nonJidMentions = 1;
1224
- }
679
+ m[messageType].contextInfo = m[messageType] || {};
680
+ m[messageType].contextInfo.mentionedJid = message.mentions;
1225
681
  }
1226
682
  if ('edit' in message) {
1227
683
  m = {
@@ -1236,40 +692,14 @@ const generateWAMessageContent = async (message, options) => {
1236
692
  if ('contextInfo' in message && !!message.contextInfo) {
1237
693
  const [messageType] = Object.keys(m);
1238
694
  m[messageType] = m[messageType] || {};
1239
- m[messageType].contextInfo = {
1240
- ...(m[messageType].contextInfo || {}),
1241
- ...message.contextInfo
1242
- };
695
+ m[messageType].contextInfo = message.contextInfo;
1243
696
  }
1244
- if ('externalAdReply' in message && !!message.externalAdReply) {
1245
- const wrappers = ['viewOnceMessage', 'viewOnceMessageV2', 'viewOnceMessageV2Extension', 'ephemeralMessage', 'groupStatusMessage', 'templateMessage'];
1246
- const [outerType] = Object.keys(m);
1247
- const inner = wrappers.includes(outerType) ? m[outerType].message : m;
1248
- const [innerType] = Object.keys(inner);
1249
- const innerPayload = innerType ? inner[innerType] : undefined;
1250
- if (innerType && innerType !== 'carouselMessage' && innerPayload && typeof innerPayload === 'object') {
1251
- const ear = normalizeEarFields(message.externalAdReply);
1252
- innerPayload.contextInfo = {
1253
- ...(innerPayload.contextInfo || {}),
1254
- externalAdReply: ear
1255
- };
1256
- }
1257
- }
1258
- if ('secureMetaServiceLabel' in message && !!message.secureMetaServiceLabel) {
1259
- const [messageType] = Object.keys(m);
1260
- m[messageType] = m[messageType] || {};
1261
- m[messageType].contextInfo = {
1262
- ...(m[messageType].contextInfo || {}),
1263
- secureMetaServiceLabel: 1
1264
- };
1265
- }
1266
- applyDefaultNewsletterAnnotation(m, message);
1267
697
  return Types_1.WAProto.Message.fromObject(m);
1268
698
  };
1269
699
  exports.generateWAMessageContent = generateWAMessageContent;
1270
700
  const generateWAMessageFromContent = (jid, message, options) => {
1271
-
1272
-
701
+ // set timestamp to now
702
+ // if not specified
1273
703
  if (!options.timestamp) {
1274
704
  options.timestamp = new Date();
1275
705
  }
@@ -1277,12 +707,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
1277
707
  const key = (0, exports.getContentType)(innerMessage);
1278
708
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
1279
709
  const { quoted, userJid } = options;
1280
-
710
+ // only set quoted if isn't a newsletter message
1281
711
  if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
1282
712
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
1283
713
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
1284
714
  const msgType = (0, exports.getContentType)(quotedMsg);
1285
-
715
+ // strip any redundant properties
1286
716
  if (quotedMsg) {
1287
717
  quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
1288
718
  const quotedContent = quotedMsg[msgType];
@@ -1293,8 +723,8 @@ const generateWAMessageFromContent = (jid, message, options) => {
1293
723
  contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
1294
724
  contextInfo.stanzaId = quoted.key.id;
1295
725
  contextInfo.quotedMessage = quotedMsg;
1296
-
1297
-
726
+ // if a participant is quoted, then it must be a group
727
+ // hence, remoteJid of group must also be entered
1298
728
  if (jid !== quoted.key.remoteJid) {
1299
729
  contextInfo.remoteJid = quoted.key.remoteJid;
1300
730
  }
@@ -1302,18 +732,18 @@ const generateWAMessageFromContent = (jid, message, options) => {
1302
732
  }
1303
733
  }
1304
734
  if (
1305
-
735
+ // if we want to send a disappearing message
1306
736
  !!(options === null || options === void 0 ? void 0 : options.ephemeralExpiration) &&
1307
-
737
+ // and it's not a protocol message -- delete, toggle disappear message
1308
738
  key !== 'protocolMessage' &&
1309
-
739
+ // already not converted to disappearing message
1310
740
  key !== 'ephemeralMessage' &&
1311
-
741
+ // newsletter not accept disappearing messages
1312
742
  !(0, WABinary_1.isJidNewsletter)(jid)) {
1313
743
  innerMessage[key].contextInfo = {
1314
744
  ...(innerMessage[key].contextInfo || {}),
1315
745
  expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
1316
-
746
+ //ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
1317
747
  };
1318
748
  }
1319
749
  message = Types_1.WAProto.Message.fromObject(message);
@@ -1334,12 +764,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
1334
764
  exports.generateWAMessageFromContent = generateWAMessageFromContent;
1335
765
  const generateWAMessage = async (jid, content, options) => {
1336
766
  var _a;
1337
-
767
+ // ensure msg ID is with every log
1338
768
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
1339
- return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid), recipientJid: jid, ...options }), options);
769
+ return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsletter)(jid), ...options }), options);
1340
770
  };
1341
771
  exports.generateWAMessage = generateWAMessage;
1342
-
772
+ /** Get the key to access the true type of content */
1343
773
  const getContentType = (content) => {
1344
774
  if (content) {
1345
775
  const keys = Object.keys(content);
@@ -1348,12 +778,17 @@ const getContentType = (content) => {
1348
778
  }
1349
779
  };
1350
780
  exports.getContentType = getContentType;
1351
-
781
+ /**
782
+ * Normalizes ephemeral, view once messages to regular message content
783
+ * Eg. image messages in ephemeral messages, in view once messages etc.
784
+ * @param content
785
+ * @returns
786
+ */
1352
787
  const normalizeMessageContent = (content) => {
1353
788
  if (!content) {
1354
789
  return undefined;
1355
790
  }
1356
-
791
+ // set max iterations to prevent an infinite loop
1357
792
  for (let i = 0; i < 5; i++) {
1358
793
  const inner = getFutureProofMessage(content);
1359
794
  if (!inner) {
@@ -1384,13 +819,14 @@ const normalizeMessageContent = (content) => {
1384
819
  || (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
1385
820
  || (message === null || message === void 0 ? void 0 : message.botTaskMessage)
1386
821
  || (message === null || message === void 0 ? void 0 : message.questionMessage)
1387
- || (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
1388
- || (message === null || message === void 0 ? void 0 : message.botForwardedMessage)
1389
- || (message === null || message === void 0 ? void 0 : message.questionReplyMessage));
822
+ || (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2));
1390
823
  }
1391
824
  };
1392
825
  exports.normalizeMessageContent = normalizeMessageContent;
1393
-
826
+ /**
827
+ * Extract the true message content from a message
828
+ * Eg. extracts the inner message from a disappearing message/view once message
829
+ */
1394
830
  const extractMessageContent = (content) => {
1395
831
  var _a, _b, _c, _d, _e, _f;
1396
832
  const extractFromTemplateMessage = (msg) => {
@@ -1430,14 +866,16 @@ const extractMessageContent = (content) => {
1430
866
  return content;
1431
867
  };
1432
868
  exports.extractMessageContent = extractMessageContent;
1433
-
869
+ /**
870
+ * Returns the device predicted by message ID
871
+ */
1434
872
  const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
1435
873
  /^3E.{20}$/.test(id) ? 'web' :
1436
874
  /^(.{21}|.{32})$/.test(id) ? 'android' :
1437
875
  /^(3F|.{18}$)/.test(id) ? 'desktop' :
1438
876
  'unknown';
1439
877
  exports.getDevice = getDevice;
1440
-
878
+ /** Upserts a receipt in the message */
1441
879
  const updateMessageWithReceipt = (msg, receipt) => {
1442
880
  msg.userReceipt = msg.userReceipt || [];
1443
881
  const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid);
@@ -1449,7 +887,7 @@ const updateMessageWithReceipt = (msg, receipt) => {
1449
887
  }
1450
888
  };
1451
889
  exports.updateMessageWithReceipt = updateMessageWithReceipt;
1452
-
890
+ /** Update the message with a new reaction */
1453
891
  const updateMessageWithReaction = (msg, reaction) => {
1454
892
  const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
1455
893
  const reactions = (msg.reactions || [])
@@ -1459,7 +897,7 @@ const updateMessageWithReaction = (msg, reaction) => {
1459
897
  msg.reactions = reactions;
1460
898
  };
1461
899
  exports.updateMessageWithReaction = updateMessageWithReaction;
1462
-
900
+ /** Update the message with a new poll update */
1463
901
  const updateMessageWithPollUpdate = (msg, update) => {
1464
902
  var _a, _b;
1465
903
  const authorID = (0, generics_1.getKeyAuthor)(update.pollUpdateMessageKey);
@@ -1471,7 +909,12 @@ const updateMessageWithPollUpdate = (msg, update) => {
1471
909
  msg.pollUpdates = reactions;
1472
910
  };
1473
911
  exports.updateMessageWithPollUpdate = updateMessageWithPollUpdate;
1474
-
912
+ /**
913
+ * Aggregates all poll updates in a poll.
914
+ * @param msg the poll creation message
915
+ * @param meId your jid
916
+ * @returns A list of options & their voters
917
+ */
1475
918
  function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
1476
919
  var _a, _b, _c;
1477
920
  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) || [];
@@ -1503,7 +946,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
1503
946
  }
1504
947
  return Object.values(voteHashMap);
1505
948
  }
1506
-
949
+ /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
1507
950
  const aggregateMessageKeysNotFromMe = (keys) => {
1508
951
  const keyMap = {};
1509
952
  for (const { remoteJid, id, participant, fromMe } of keys) {
@@ -1523,17 +966,19 @@ const aggregateMessageKeysNotFromMe = (keys) => {
1523
966
  };
1524
967
  exports.aggregateMessageKeysNotFromMe = aggregateMessageKeysNotFromMe;
1525
968
  const REUPLOAD_REQUIRED_STATUS = [410, 404];
1526
-
969
+ /**
970
+ * Downloads the given message. Throws an error if it's not a media message
971
+ */
1527
972
  const downloadMediaMessage = async (message, type, options, ctx) => {
1528
973
  const result = await downloadMsg()
1529
974
  .catch(async (error) => {
1530
975
  var _a;
1531
976
  if (ctx) {
1532
977
  if (axios_1.default.isAxiosError(error)) {
1533
-
978
+ // check if the message requires a reupload
1534
979
  if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
1535
980
  ctx.logger.info({ key: message.key }, 'sending reupload media request...');
1536
-
981
+ // request reupload
1537
982
  message = await ctx.reuploadRequest(message);
1538
983
  const result = await downloadMsg();
1539
984
  return result;
@@ -1577,7 +1022,7 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
1577
1022
  }
1578
1023
  };
1579
1024
  exports.downloadMediaMessage = downloadMediaMessage;
1580
-
1025
+ /** Checks whether the given message is a media message; if it is returns the inner content */
1581
1026
  const assertMediaContent = (content) => {
1582
1027
  content = (0, exports.extractMessageContent)(content);
1583
1028
  const mediaContent = (content === null || content === void 0 ? void 0 : content.documentMessage)
@@ -1592,36 +1037,21 @@ const assertMediaContent = (content) => {
1592
1037
  };
1593
1038
  exports.assertMediaContent = assertMediaContent;
1594
1039
 
1595
- /**
1596
- * Normalizes a bare user id to @s.whatsapp.net. Does not convert LID↔PN; use lidMapping / PN in key.remoteJidAlt when needed.
1597
- */
1598
1040
  const toJid = (id) => {
1599
1041
  if (!id)
1600
1042
  return '';
1043
+ if (id.endsWith('@lid'))
1044
+ return id.replace('@lid', '@s.whatsapp.net');
1601
1045
  if (id.includes('@'))
1602
1046
  return id;
1603
1047
  return `${id}@s.whatsapp.net`;
1604
1048
  };
1605
1049
  exports.toJid = toJid;
1606
- /**
1607
- * Returns the peer LID JID when the key is LID-primary (decode sets remoteJid/participant to @lid when WA sends LID).
1608
- */
1609
1050
  const getSenderLid = (message) => {
1610
- const k = message.key;
1611
- if (!k) {
1612
- return { jid: '', lid: '' };
1613
- }
1614
- const jid = k.participant || k.remoteJid || '';
1615
- if (jid.endsWith('@lid') || jid.endsWith('@hosted.lid')) {
1616
- return { jid, lid: jid };
1617
- }
1618
- if (k.lid && typeof k.lid === 'string') {
1619
- const lid = k.lid.includes('@') ? k.lid : (0, WABinary_1.jidEncode)(k.lid, 'lid');
1620
- return { jid, lid };
1621
- }
1622
- if (k.participantLid && (0, WABinary_1.isLidUser)(k.participantLid)) {
1623
- return { jid, lid: k.participantLid };
1624
- }
1625
- return { jid, lid: '' };
1051
+ const sender = message.key.participant || message.key.remoteJid;
1052
+ const user = (0, WABinary_1.jidDecode)(sender)?.user || '';
1053
+ const lid = (0, WABinary_1.jidEncode)(user, 'lid');
1054
+ console.log('sender lid:', lid);
1055
+ return { jid: sender, lid };
1626
1056
  };
1627
1057
  exports.getSenderLid = getSenderLid;