@xsat10/baileys-xsat 2.0.0

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 (424) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/WAProto/GenerateStatics.sh +3 -0
  4. package/WAProto/WAProto.proto +5479 -0
  5. package/WAProto/fix-imports.js +38 -0
  6. package/WAProto/index.d.ts +14017 -0
  7. package/WAProto/index.js +2213 -0
  8. package/engine-requirements.js +10 -0
  9. package/lib/Defaults/index.d.ts +75 -0
  10. package/lib/Defaults/index.d.ts.map +1 -0
  11. package/lib/Defaults/index.js +139 -0
  12. package/lib/Defaults/index.js.map +1 -0
  13. package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
  14. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  15. package/lib/Signal/Group/ciphertext-message.js +19 -0
  16. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  17. package/lib/Signal/Group/group-session-builder.d.ts +15 -0
  18. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  19. package/lib/Signal/Group/group-session-builder.js +38 -0
  20. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  21. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  22. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  23. package/lib/Signal/Group/group_cipher.js +87 -0
  24. package/lib/Signal/Group/group_cipher.js.map +1 -0
  25. package/lib/Signal/Group/index.d.ts +12 -0
  26. package/lib/Signal/Group/index.d.ts.map +1 -0
  27. package/lib/Signal/Group/index.js +79 -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 +27 -0
  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 +33 -0
  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 +62 -0
  40. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  41. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  42. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  43. package/lib/Signal/Group/sender-key-message.js +68 -0
  44. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  45. package/lib/Signal/Group/sender-key-name.d.ts +18 -0
  46. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  47. package/lib/Signal/Group/sender-key-name.js +54 -0
  48. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  49. package/lib/Signal/Group/sender-key-record.d.ts +31 -0
  50. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  51. package/lib/Signal/Group/sender-key-record.js +48 -0
  52. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  53. package/lib/Signal/Group/sender-key-state.d.ts +39 -0
  54. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  55. package/lib/Signal/Group/sender-key-state.js +88 -0
  56. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  57. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  58. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  59. package/lib/Signal/Group/sender-message-key.js +33 -0
  60. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  61. package/lib/Signal/libsignal.d.ts +5 -0
  62. package/lib/Signal/libsignal.d.ts.map +1 -0
  63. package/lib/Signal/libsignal.js +575 -0
  64. package/lib/Signal/libsignal.js.map +1 -0
  65. package/lib/Signal/lid-mapping.d.ts +23 -0
  66. package/lib/Signal/lid-mapping.d.ts.map +1 -0
  67. package/lib/Signal/lid-mapping.js +309 -0
  68. package/lib/Signal/lid-mapping.js.map +1 -0
  69. package/lib/Socket/Client/index.d.ts +3 -0
  70. package/lib/Socket/Client/index.d.ts.map +1 -0
  71. package/lib/Socket/Client/index.js +27 -0
  72. package/lib/Socket/Client/index.js.map +1 -0
  73. package/lib/Socket/Client/types.d.ts +16 -0
  74. package/lib/Socket/Client/types.d.ts.map +1 -0
  75. package/lib/Socket/Client/types.js +18 -0
  76. package/lib/Socket/Client/types.js.map +1 -0
  77. package/lib/Socket/Client/websocket.d.ts +13 -0
  78. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  79. package/lib/Socket/Client/websocket.js +62 -0
  80. package/lib/Socket/Client/websocket.js.map +1 -0
  81. package/lib/Socket/business.d.ts +217 -0
  82. package/lib/Socket/business.d.ts.map +1 -0
  83. package/lib/Socket/business.js +375 -0
  84. package/lib/Socket/business.js.map +1 -0
  85. package/lib/Socket/chats.d.ts +124 -0
  86. package/lib/Socket/chats.d.ts.map +1 -0
  87. package/lib/Socket/chats.js +1328 -0
  88. package/lib/Socket/chats.js.map +1 -0
  89. package/lib/Socket/communities.d.ts +273 -0
  90. package/lib/Socket/communities.d.ts.map +1 -0
  91. package/lib/Socket/communities.js +522 -0
  92. package/lib/Socket/communities.js.map +1 -0
  93. package/lib/Socket/fake-chat.js +96 -0
  94. package/lib/Socket/graphql.js +724 -0
  95. package/lib/Socket/groups.d.ts +161 -0
  96. package/lib/Socket/groups.d.ts.map +1 -0
  97. package/lib/Socket/groups.js +430 -0
  98. package/lib/Socket/groups.js.map +1 -0
  99. package/lib/Socket/index.d.ts +260 -0
  100. package/lib/Socket/index.d.ts.map +1 -0
  101. package/lib/Socket/index.js +21 -0
  102. package/lib/Socket/index.js.map +1 -0
  103. package/lib/Socket/interop.js +466 -0
  104. package/lib/Socket/luxu.js +422 -0
  105. package/lib/Socket/messages-recv.d.ts +203 -0
  106. package/lib/Socket/messages-recv.d.ts.map +1 -0
  107. package/lib/Socket/messages-recv.js +2408 -0
  108. package/lib/Socket/messages-recv.js.map +1 -0
  109. package/lib/Socket/messages-send.d.ts +199 -0
  110. package/lib/Socket/messages-send.d.ts.map +1 -0
  111. package/lib/Socket/messages-send.js +1681 -0
  112. package/lib/Socket/messages-send.js.map +1 -0
  113. package/lib/Socket/mex.d.ts +3 -0
  114. package/lib/Socket/mex.d.ts.map +1 -0
  115. package/lib/Socket/mex.js +55 -0
  116. package/lib/Socket/mex.js.map +1 -0
  117. package/lib/Socket/newsletter.d.ts +170 -0
  118. package/lib/Socket/newsletter.d.ts.map +1 -0
  119. package/lib/Socket/newsletter.js +231 -0
  120. package/lib/Socket/newsletter.js.map +1 -0
  121. package/lib/Socket/privacy.js +321 -0
  122. package/lib/Socket/socket.d.ts +59 -0
  123. package/lib/Socket/socket.d.ts.map +1 -0
  124. package/lib/Socket/socket.js +1039 -0
  125. package/lib/Socket/socket.js.map +1 -0
  126. package/lib/Socket/spam-report.js +94 -0
  127. package/lib/Socket/username.js +239 -0
  128. package/lib/Store/index.d.ts +3 -0
  129. package/lib/Store/index.js +10 -0
  130. package/lib/Store/keyed-db.js +112 -0
  131. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  132. package/lib/Store/make-cache-manager-store.js +82 -0
  133. package/lib/Store/make-in-memory-store.d.ts +118 -0
  134. package/lib/Store/make-in-memory-store.js +429 -0
  135. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  136. package/lib/Store/make-ordered-dictionary.js +81 -0
  137. package/lib/Store/object-repository.d.ts +10 -0
  138. package/lib/Store/object-repository.js +27 -0
  139. package/lib/Store/reporting-info-store.js +73 -0
  140. package/lib/Types/Auth.d.ts +117 -0
  141. package/lib/Types/Auth.d.ts.map +1 -0
  142. package/lib/Types/Auth.js +5 -0
  143. package/lib/Types/Auth.js.map +1 -0
  144. package/lib/Types/Bussines.d.ts +25 -0
  145. package/lib/Types/Bussines.d.ts.map +1 -0
  146. package/lib/Types/Bussines.js +5 -0
  147. package/lib/Types/Bussines.js.map +1 -0
  148. package/lib/Types/Call.d.ts +15 -0
  149. package/lib/Types/Call.d.ts.map +1 -0
  150. package/lib/Types/Call.js +5 -0
  151. package/lib/Types/Call.js.map +1 -0
  152. package/lib/Types/Chat.d.ts +124 -0
  153. package/lib/Types/Chat.d.ts.map +1 -0
  154. package/lib/Types/Chat.js +8 -0
  155. package/lib/Types/Chat.js.map +1 -0
  156. package/lib/Types/Contact.d.ts +26 -0
  157. package/lib/Types/Contact.d.ts.map +1 -0
  158. package/lib/Types/Contact.js +5 -0
  159. package/lib/Types/Contact.js.map +1 -0
  160. package/lib/Types/Events.d.ts +256 -0
  161. package/lib/Types/Events.d.ts.map +1 -0
  162. package/lib/Types/Events.js +3 -0
  163. package/lib/Types/Events.js.map +1 -0
  164. package/lib/Types/GroupMetadata.d.ts +71 -0
  165. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  166. package/lib/Types/GroupMetadata.js +5 -0
  167. package/lib/Types/GroupMetadata.js.map +1 -0
  168. package/lib/Types/Label.d.ts +47 -0
  169. package/lib/Types/Label.d.ts.map +1 -0
  170. package/lib/Types/Label.js +31 -0
  171. package/lib/Types/Label.js.map +1 -0
  172. package/lib/Types/LabelAssociation.d.ts +30 -0
  173. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  174. package/lib/Types/LabelAssociation.js +13 -0
  175. package/lib/Types/LabelAssociation.js.map +1 -0
  176. package/lib/Types/Message.d.ts +320 -0
  177. package/lib/Types/Message.d.ts.map +1 -0
  178. package/lib/Types/Message.js +23 -0
  179. package/lib/Types/Message.js.map +1 -0
  180. package/lib/Types/Mex.d.ts +141 -0
  181. package/lib/Types/Mex.d.ts.map +1 -0
  182. package/lib/Types/Mex.js +43 -0
  183. package/lib/Types/Mex.js.map +1 -0
  184. package/lib/Types/Product.d.ts +79 -0
  185. package/lib/Types/Product.d.ts.map +1 -0
  186. package/lib/Types/Product.js +5 -0
  187. package/lib/Types/Product.js.map +1 -0
  188. package/lib/Types/Signal.d.ts +87 -0
  189. package/lib/Types/Signal.d.ts.map +1 -0
  190. package/lib/Types/Signal.js +3 -0
  191. package/lib/Types/Signal.js.map +1 -0
  192. package/lib/Types/Socket.d.ts +136 -0
  193. package/lib/Types/Socket.d.ts.map +1 -0
  194. package/lib/Types/Socket.js +4 -0
  195. package/lib/Types/Socket.js.map +1 -0
  196. package/lib/Types/State.d.ts +97 -0
  197. package/lib/Types/State.d.ts.map +1 -0
  198. package/lib/Types/State.js +62 -0
  199. package/lib/Types/State.js.map +1 -0
  200. package/lib/Types/USync.d.ts +26 -0
  201. package/lib/Types/USync.d.ts.map +1 -0
  202. package/lib/Types/USync.js +3 -0
  203. package/lib/Types/USync.js.map +1 -0
  204. package/lib/Types/index.d.ts +65 -0
  205. package/lib/Types/index.d.ts.map +1 -0
  206. package/lib/Types/index.js +167 -0
  207. package/lib/Types/index.js.map +1 -0
  208. package/lib/Utils/auth-utils.d.ts +24 -0
  209. package/lib/Utils/auth-utils.d.ts.map +1 -0
  210. package/lib/Utils/auth-utils.js +332 -0
  211. package/lib/Utils/auth-utils.js.map +1 -0
  212. package/lib/Utils/browser-utils.d.ts +4 -0
  213. package/lib/Utils/browser-utils.d.ts.map +1 -0
  214. package/lib/Utils/browser-utils.js +39 -0
  215. package/lib/Utils/browser-utils.js.map +1 -0
  216. package/lib/Utils/business.d.ts +23 -0
  217. package/lib/Utils/business.d.ts.map +1 -0
  218. package/lib/Utils/business.js +247 -0
  219. package/lib/Utils/business.js.map +1 -0
  220. package/lib/Utils/chat-utils.d.ts +100 -0
  221. package/lib/Utils/chat-utils.d.ts.map +1 -0
  222. package/lib/Utils/chat-utils.js +971 -0
  223. package/lib/Utils/chat-utils.js.map +1 -0
  224. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  225. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  226. package/lib/Utils/companion-reg-client-utils.js +43 -0
  227. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  228. package/lib/Utils/crypto.d.ts +37 -0
  229. package/lib/Utils/crypto.d.ts.map +1 -0
  230. package/lib/Utils/crypto.js +160 -0
  231. package/lib/Utils/crypto.js.map +1 -0
  232. package/lib/Utils/decode-wa-message.d.ts +66 -0
  233. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  234. package/lib/Utils/decode-wa-message.js +380 -0
  235. package/lib/Utils/decode-wa-message.js.map +1 -0
  236. package/lib/Utils/event-buffer.d.ts +36 -0
  237. package/lib/Utils/event-buffer.d.ts.map +1 -0
  238. package/lib/Utils/event-buffer.js +666 -0
  239. package/lib/Utils/event-buffer.js.map +1 -0
  240. package/lib/Utils/fake-chat-utils.js +57 -0
  241. package/lib/Utils/generics.d.ts +91 -0
  242. package/lib/Utils/generics.d.ts.map +1 -0
  243. package/lib/Utils/generics.js +458 -0
  244. package/lib/Utils/generics.js.map +1 -0
  245. package/lib/Utils/history.d.ts +24 -0
  246. package/lib/Utils/history.d.ts.map +1 -0
  247. package/lib/Utils/history.js +160 -0
  248. package/lib/Utils/history.js.map +1 -0
  249. package/lib/Utils/identity-change-handler.d.ts +44 -0
  250. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  251. package/lib/Utils/identity-change-handler.js +94 -0
  252. package/lib/Utils/identity-change-handler.js.map +1 -0
  253. package/lib/Utils/index.d.ts +22 -0
  254. package/lib/Utils/index.d.ts.map +1 -0
  255. package/lib/Utils/index.js +258 -0
  256. package/lib/Utils/index.js.map +1 -0
  257. package/lib/Utils/link-preview.d.ts +21 -0
  258. package/lib/Utils/link-preview.d.ts.map +1 -0
  259. package/lib/Utils/link-preview.js +102 -0
  260. package/lib/Utils/link-preview.js.map +1 -0
  261. package/lib/Utils/logger.d.ts +12 -0
  262. package/lib/Utils/logger.d.ts.map +1 -0
  263. package/lib/Utils/logger.js +11 -0
  264. package/lib/Utils/logger.js.map +1 -0
  265. package/lib/Utils/lt-hash.d.ts +8 -0
  266. package/lib/Utils/lt-hash.d.ts.map +1 -0
  267. package/lib/Utils/lt-hash.js +14 -0
  268. package/lib/Utils/lt-hash.js.map +1 -0
  269. package/lib/Utils/make-mutex.d.ts +9 -0
  270. package/lib/Utils/make-mutex.d.ts.map +1 -0
  271. package/lib/Utils/make-mutex.js +43 -0
  272. package/lib/Utils/make-mutex.js.map +1 -0
  273. package/lib/Utils/message-composer.js +288 -0
  274. package/lib/Utils/message-retry-manager.d.ts +115 -0
  275. package/lib/Utils/message-retry-manager.d.ts.map +1 -0
  276. package/lib/Utils/message-retry-manager.js +283 -0
  277. package/lib/Utils/message-retry-manager.js.map +1 -0
  278. package/lib/Utils/messages-media.d.ts +133 -0
  279. package/lib/Utils/messages-media.d.ts.map +1 -0
  280. package/lib/Utils/messages-media.js +914 -0
  281. package/lib/Utils/messages-media.js.map +1 -0
  282. package/lib/Utils/messages.d.ts +91 -0
  283. package/lib/Utils/messages.d.ts.map +1 -0
  284. package/lib/Utils/messages.js +963 -0
  285. package/lib/Utils/messages.js.map +1 -0
  286. package/lib/Utils/noise-handler.d.ts +20 -0
  287. package/lib/Utils/noise-handler.d.ts.map +1 -0
  288. package/lib/Utils/noise-handler.js +238 -0
  289. package/lib/Utils/noise-handler.js.map +1 -0
  290. package/lib/Utils/offline-node-processor.d.ts +17 -0
  291. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  292. package/lib/Utils/offline-node-processor.js +54 -0
  293. package/lib/Utils/offline-node-processor.js.map +1 -0
  294. package/lib/Utils/pre-key-manager.d.ts +28 -0
  295. package/lib/Utils/pre-key-manager.d.ts.map +1 -0
  296. package/lib/Utils/pre-key-manager.js +109 -0
  297. package/lib/Utils/pre-key-manager.js.map +1 -0
  298. package/lib/Utils/process-message.d.ts +60 -0
  299. package/lib/Utils/process-message.d.ts.map +1 -0
  300. package/lib/Utils/process-message.js +710 -0
  301. package/lib/Utils/process-message.js.map +1 -0
  302. package/lib/Utils/reporting-utils.d.ts +11 -0
  303. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  304. package/lib/Utils/reporting-utils.js +586 -0
  305. package/lib/Utils/reporting-utils.js.map +1 -0
  306. package/lib/Utils/signal.d.ts +47 -0
  307. package/lib/Utils/signal.d.ts.map +1 -0
  308. package/lib/Utils/signal.js +279 -0
  309. package/lib/Utils/signal.js.map +1 -0
  310. package/lib/Utils/spam-report-utils.js +209 -0
  311. package/lib/Utils/stanza-ack.d.ts +11 -0
  312. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  313. package/lib/Utils/stanza-ack.js +47 -0
  314. package/lib/Utils/stanza-ack.js.map +1 -0
  315. package/lib/Utils/sync-action-utils.d.ts +19 -0
  316. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  317. package/lib/Utils/sync-action-utils.js +61 -0
  318. package/lib/Utils/sync-action-utils.js.map +1 -0
  319. package/lib/Utils/tc-token-utils.d.ts +37 -0
  320. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  321. package/lib/Utils/tc-token-utils.js +176 -0
  322. package/lib/Utils/tc-token-utils.js.map +1 -0
  323. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  324. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  325. package/lib/Utils/use-multi-file-auth-state.js +124 -0
  326. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  327. package/lib/Utils/validate-connection.d.ts +11 -0
  328. package/lib/Utils/validate-connection.d.ts.map +1 -0
  329. package/lib/Utils/validate-connection.js +229 -0
  330. package/lib/Utils/validate-connection.js.map +1 -0
  331. package/lib/WABinary/constants.d.ts +28 -0
  332. package/lib/WABinary/constants.d.ts.map +1 -0
  333. package/lib/WABinary/constants.js +42 -0
  334. package/lib/WABinary/constants.js.map +1 -0
  335. package/lib/WABinary/decode.d.ts +7 -0
  336. package/lib/WABinary/decode.d.ts.map +1 -0
  337. package/lib/WABinary/decode.js +271 -0
  338. package/lib/WABinary/decode.js.map +1 -0
  339. package/lib/WABinary/encode.d.ts +3 -0
  340. package/lib/WABinary/encode.d.ts.map +1 -0
  341. package/lib/WABinary/encode.js +226 -0
  342. package/lib/WABinary/encode.js.map +1 -0
  343. package/lib/WABinary/generic-utils.d.ts +15 -0
  344. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  345. package/lib/WABinary/generic-utils.js +219 -0
  346. package/lib/WABinary/generic-utils.js.map +1 -0
  347. package/lib/WABinary/index.d.ts +6 -0
  348. package/lib/WABinary/index.d.ts.map +1 -0
  349. package/lib/WABinary/index.js +60 -0
  350. package/lib/WABinary/index.js.map +1 -0
  351. package/lib/WABinary/jid-utils.d.ts +48 -0
  352. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  353. package/lib/WABinary/jid-utils.js +123 -0
  354. package/lib/WABinary/jid-utils.js.map +1 -0
  355. package/lib/WABinary/types.d.ts +19 -0
  356. package/lib/WABinary/types.d.ts.map +1 -0
  357. package/lib/WABinary/types.js +4 -0
  358. package/lib/WABinary/types.js.map +1 -0
  359. package/lib/WAM/BinaryInfo.d.ts +9 -0
  360. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  361. package/lib/WAM/BinaryInfo.js +17 -0
  362. package/lib/WAM/BinaryInfo.js.map +1 -0
  363. package/lib/WAM/constants.d.ts +40 -0
  364. package/lib/WAM/constants.d.ts.map +1 -0
  365. package/lib/WAM/constants.js +1 -0
  366. package/lib/WAM/constants.js.map +1 -0
  367. package/lib/WAM/encode.d.ts +3 -0
  368. package/lib/WAM/encode.d.ts.map +1 -0
  369. package/lib/WAM/encode.js +150 -0
  370. package/lib/WAM/encode.js.map +1 -0
  371. package/lib/WAM/index.d.ts +4 -0
  372. package/lib/WAM/index.d.ts.map +1 -0
  373. package/lib/WAM/index.js +38 -0
  374. package/lib/WAM/index.js.map +1 -0
  375. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
  376. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  377. package/lib/WAUSync/Protocols/USyncContactProtocol.js +63 -0
  378. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  379. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
  380. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  381. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +65 -0
  382. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  383. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
  384. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  385. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +34 -0
  386. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  387. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
  388. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  389. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +43 -0
  390. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  391. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  392. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  393. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +32 -0
  394. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  395. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
  396. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  397. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +68 -0
  398. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  399. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
  400. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  401. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +37 -0
  402. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  403. package/lib/WAUSync/Protocols/index.d.ts +6 -0
  404. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  405. package/lib/WAUSync/Protocols/index.js +60 -0
  406. package/lib/WAUSync/Protocols/index.js.map +1 -0
  407. package/lib/WAUSync/USyncQuery.d.ts +30 -0
  408. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  409. package/lib/WAUSync/USyncQuery.js +103 -0
  410. package/lib/WAUSync/USyncQuery.js.map +1 -0
  411. package/lib/WAUSync/USyncUser.d.ts +17 -0
  412. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  413. package/lib/WAUSync/USyncUser.js +54 -0
  414. package/lib/WAUSync/USyncUser.js.map +1 -0
  415. package/lib/WAUSync/index.d.ts +4 -0
  416. package/lib/WAUSync/index.d.ts.map +1 -0
  417. package/lib/WAUSync/index.js +38 -0
  418. package/lib/WAUSync/index.js.map +1 -0
  419. package/lib/index.d.ts +13 -0
  420. package/lib/index.d.ts.map +1 -0
  421. package/lib/index.js +129 -0
  422. package/lib/index.js.map +1 -0
  423. package/package.json +77 -0
  424. package/scripts/patch-deps.js +35 -0
@@ -0,0 +1,1681 @@
1
+ Object.defineProperty(exports, "__esModule", {
2
+ value: true
3
+ });
4
+ exports.makeMessagesSocket = undefined;
5
+ var _nodeCache = _interopRequireDefault(require("@cacheable/node-cache"));
6
+ var _boom = require("@hapi/boom");
7
+ var _crypto = require("crypto");
8
+ var _index = require("../../WAProto/index.js");
9
+ var _index2 = require("../Defaults/index.js");
10
+ var _index3 = require("../Utils/index.js");
11
+ var _linkPreview = require("../Utils/link-preview.js");
12
+ var _makeMutex = require("../Utils/make-mutex.js");
13
+ var _reportingUtils = require("../Utils/reporting-utils.js");
14
+ var _tcTokenUtils = require("../Utils/tc-token-utils.js");
15
+ var _index4 = require("../WABinary/index.js");
16
+ var _index5 = require("../WAUSync/index.js");
17
+ var _newsletter = require("./newsletter.js");
18
+ var _luxu = _interopRequireDefault(require("./luxu.js"));
19
+ function _interopRequireDefault(B) {
20
+ if (B && B.__esModule) {
21
+ return B;
22
+ } else {
23
+ return {
24
+ default: B
25
+ };
26
+ }
27
+ }
28
+ const _origJidDecode = _index4.jidDecode;
29
+ const _safeJidDecode = jid => {
30
+ const result = _origJidDecode(jid);
31
+ if (result) return result;
32
+ if (typeof jid === "string") {
33
+ const normalized = jid.includes("@") ? jid : jid + "@s.whatsapp.net";
34
+ const fallback = _origJidDecode(normalized);
35
+ if (fallback) return fallback;
36
+ }
37
+ return { user: "", server: "", domainType: 0, device: undefined };
38
+ };
39
+ const makeMessagesSocket = B => {
40
+ const {
41
+ logger: m,
42
+ linkPreviewImageThumbnailWidth: ya,
43
+ generateHighQualityLinkPreview: za,
44
+ options: Aa,
45
+ patchMessageBeforeSending: T,
46
+ cachedGroupMetadata: ma,
47
+ enableRecentMessageCache: Ba,
48
+ maxMsgRetryCount: Ca,
49
+ aiLabel: aiLbl = true
50
+ } = B;
51
+ const K = (0, _newsletter.makeNewsletterSocket)(B);
52
+ const {
53
+ ev: na,
54
+ authState: u,
55
+ messageMutex: Da,
56
+ signalRepository: A,
57
+ upsertMessage: Ea,
58
+ query: da,
59
+ fetchPrivacySettings: oa,
60
+ sendNode: X,
61
+ groupMetadata: Fa,
62
+ groupToggleEphemeral: Ga,
63
+ registerSocketEndHandler: Ha
64
+ } = K;
65
+ const ea = A.lidMapping.getLIDForPN.bind(A.lidMapping);
66
+ const fa = new Set();
67
+ const E = B.userDevicesCache || new _nodeCache.default({
68
+ stdTTL: _index2.DEFAULT_CACHE_TTLS.USER_DEVICES,
69
+ useClones: false
70
+ });
71
+ const pa = (0, _makeMutex.makeMutex)();
72
+ const U = Ba ? new _index3.MessageRetryManager(m, Ca) : null;
73
+ const Ia = (0, _makeMutex.makeKeyedMutex)();
74
+ let Y;
75
+ let ha = _index3.DEF_MEDIA_HOST;
76
+ const qa = async (a = false) => {
77
+ const b = await Y;
78
+ if (!b || a || new Date().getTime() - b.fetchDate.getTime() > b.ttl * 1000) {
79
+ Y = (async () => {
80
+ var e = await da({
81
+ tag: "iq",
82
+ attrs: {
83
+ type: "set",
84
+ xmlns: "w:m",
85
+ to: _index4.S_WHATSAPP_NET
86
+ },
87
+ content: [{
88
+ tag: "media_conn",
89
+ attrs: {}
90
+ }]
91
+ });
92
+ e = (0, _index4.getBinaryNodeChild)(e, "media_conn");
93
+ e = {
94
+ hosts: (0, _index4.getBinaryNodeChildren)(e, "host").map(({
95
+ attrs: d
96
+ }) => ({
97
+ hostname: d.hostname,
98
+ maxContentLengthBytes: +d.maxContentLengthBytes
99
+ })),
100
+ auth: e.attrs.auth,
101
+ ttl: +e.attrs.ttl,
102
+ fetchDate: new Date()
103
+ };
104
+ m.debug("fetched media conn");
105
+ if (e.hosts[0]) {
106
+ ha = e.hosts[0].hostname;
107
+ }
108
+ return e;
109
+ })();
110
+ }
111
+ return Y;
112
+ };
113
+ const ra = async (a, b, e, d) => {
114
+ if (!e || e.length === 0) {
115
+ throw new _boom.Boom("missing ids in receipt");
116
+ }
117
+ const c = {
118
+ tag: "receipt",
119
+ attrs: {
120
+ id: e[0]
121
+ }
122
+ };
123
+ if (d === "read" || d === "read-self") {
124
+ c.attrs.t = (0, _index3.unixTimestampSeconds)().toString();
125
+ }
126
+ if (d === "sender" && ((0, _index4.isPnUser)(a) || (0, _index4.isLidUser)(a))) {
127
+ c.attrs.recipient = a;
128
+ c.attrs.to = b;
129
+ } else {
130
+ c.attrs.to = a;
131
+ if (b) {
132
+ c.attrs.participant = b;
133
+ }
134
+ }
135
+ if (d) {
136
+ c.attrs.type = d;
137
+ }
138
+ a = e.slice(1);
139
+ if (a.length) {
140
+ c.content = [{
141
+ tag: "list",
142
+ attrs: {},
143
+ content: a.map(k => ({
144
+ tag: "item",
145
+ attrs: {
146
+ id: k
147
+ }
148
+ }))
149
+ }];
150
+ }
151
+ m.debug({
152
+ attrs: c.attrs,
153
+ messageIds: e
154
+ }, "sending receipt for messages");
155
+ await X(c);
156
+ };
157
+ const sa = async (a, b) => {
158
+ a = (0, _index3.aggregateMessageKeysNotFromMe)(a);
159
+ for (const {
160
+ jid: e,
161
+ participant: d,
162
+ messageIds: c
163
+ } of a) {
164
+ await ra(e, d, c, b);
165
+ }
166
+ };
167
+ const ia = async (a, b, e) => {
168
+ const d = [];
169
+ if (!b) {
170
+ m.debug("not using cache for devices");
171
+ }
172
+ var c = [];
173
+ a = a.map(f => {
174
+ var h = _safeJidDecode(f);
175
+ const n = h?.user;
176
+ h = h?.device;
177
+ if (typeof h === "number" && h >= 0 && n) {
178
+ d.push({
179
+ user: n,
180
+ device: h,
181
+ jid: f
182
+ });
183
+ return null;
184
+ }
185
+ f = (0, _index4.jidNormalizedUser)(f);
186
+ return {
187
+ jid: f,
188
+ user: n
189
+ };
190
+ }).filter(f => f !== null);
191
+ if (b && E.mget) {
192
+ var k = a.map(f => f?.user).filter(Boolean);
193
+ k = await E.mget(k);
194
+ }
195
+ for (const {
196
+ jid: f,
197
+ user: h
198
+ } of a) {
199
+ if (b) {
200
+ if (a = k?.[h] || (E.mget ? undefined : await E.get(h))) {
201
+ a = a.map(n => ({
202
+ ...n,
203
+ jid: (0, _index4.jidEncode)(n.user, n.server, n.device)
204
+ }));
205
+ d.push(...a);
206
+ m.trace({
207
+ user: h
208
+ }, "using cache for devices");
209
+ } else {
210
+ c.push(f);
211
+ }
212
+ } else {
213
+ c.push(f);
214
+ }
215
+ }
216
+ if (!c.length) {
217
+ return d;
218
+ }
219
+ b = new Set();
220
+ for (var q of c) {
221
+ if (((0, _index4.isLidUser)(q) || (0, _index4.isHostedLidUser)(q)) && (k = _safeJidDecode(q)?.user)) {
222
+ b.add(k);
223
+ }
224
+ }
225
+ q = new _index5.USyncQuery().withContext("message").withDeviceProtocol().withLIDProtocol();
226
+ for (var x of c) {
227
+ q.withUser(new _index5.USyncUser().withId(x));
228
+ }
229
+ if (c = await K.executeUSyncQuery(q)) {
230
+ x = c.list.filter(h => !!h.lid);
231
+ if (x.length > 0) {
232
+ m.trace("Storing LID maps from device call");
233
+ await A.lidMapping.storeLIDPNMappings(x.map(h => ({
234
+ lid: h.lid,
235
+ pn: h.id
236
+ })));
237
+ try {
238
+ const h = x.map(n => n.lid);
239
+ if (h.length) {
240
+ await Z(h, true);
241
+ }
242
+ } catch (h) {
243
+ m.warn({
244
+ e: h,
245
+ count: x.length
246
+ }, "failed to assert sessions for newly mapped LIDs");
247
+ }
248
+ }
249
+ e = (0, _index3.extractDeviceJids)(c?.list, u.creds.me.id, u.creds.me.lid, e);
250
+ const f = {};
251
+ for (var v of e) {
252
+ f[v.user] = f[v.user] || [];
253
+ f[v.user]?.push(v);
254
+ }
255
+ for (const [h, n] of Object.entries(f)) {
256
+ v = b.has(h);
257
+ for (var g of n) {
258
+ e = v ? (0, _index4.jidEncode)(h, g.server, g.device) : (0, _index4.jidEncode)(g.user, g.server, g.device);
259
+ d.push({
260
+ ...g,
261
+ jid: e
262
+ });
263
+ m.debug({
264
+ user: g.user,
265
+ device: g.device,
266
+ finalJid: e,
267
+ usedLid: v
268
+ }, "Processed device with LID priority");
269
+ }
270
+ }
271
+ await pa.mutex(async () => {
272
+ if (E.mset) {
273
+ await E.mset(Object.entries(f).map(([h, n]) => ({
274
+ key: h,
275
+ value: n
276
+ })));
277
+ } else {
278
+ for (const h in f) {
279
+ if (f[h]) {
280
+ await E.set(h, f[h]);
281
+ }
282
+ }
283
+ }
284
+ });
285
+ g = {};
286
+ for (const [h, n] of Object.entries(f)) {
287
+ if (n && n.length > 0) {
288
+ g[h] = n.map(H => H.device?.toString() || "0");
289
+ }
290
+ }
291
+ if (Object.keys(g).length > 0) {
292
+ try {
293
+ await u.keys.set({
294
+ "device-list": g
295
+ });
296
+ m.debug({
297
+ userCount: Object.keys(g).length
298
+ }, "stored user device lists for bulk migration");
299
+ } catch (h) {
300
+ m.warn({
301
+ error: h
302
+ }, "failed to store user device lists");
303
+ }
304
+ }
305
+ }
306
+ return d;
307
+ };
308
+ const Z = async (a, b) => {
309
+ let e = false;
310
+ const d = [...new Set(a)];
311
+ var c = [];
312
+ m.debug({
313
+ jids: a
314
+ }, "assertSessions call with jids");
315
+ for (const k of d) {
316
+ if (!!b || !(await A.validateSession(k)).exists) {
317
+ c.push(k);
318
+ }
319
+ }
320
+ if (c.length) {
321
+ a = [...c.filter(k => !!(0, _index4.isLidUser)(k) || !!(0, _index4.isHostedLidUser)(k)), ...((await A.lidMapping.getLIDsForPNs(c.filter(k => !!(0, _index4.isPnUser)(k) || !!(0, _index4.isHostedPnUser)(k)))) || []).map(k => k.lid)];
322
+ m.debug({
323
+ jidsRequiringFetch: c,
324
+ wireJids: a
325
+ }, "fetching sessions");
326
+ c = await da({
327
+ tag: "iq",
328
+ attrs: {
329
+ xmlns: "encrypt",
330
+ type: "get",
331
+ to: _index4.S_WHATSAPP_NET
332
+ },
333
+ content: [{
334
+ tag: "key",
335
+ attrs: {},
336
+ content: a.map(k => {
337
+ k = {
338
+ jid: k
339
+ };
340
+ if (b) {
341
+ k.reason = "identity";
342
+ }
343
+ return {
344
+ tag: "user",
345
+ attrs: k
346
+ };
347
+ })
348
+ }]
349
+ });
350
+ await (0, _index3.parseAndInjectE2ESessions)(c, A);
351
+ e = true;
352
+ }
353
+ return e;
354
+ };
355
+ const aa = async (a, b, e, d) => {
356
+ if (!a.length) {
357
+ return {
358
+ nodes: [],
359
+ shouldIncludeDeviceIdentity: false
360
+ };
361
+ }
362
+ const c = await T(b, a);
363
+ b = Array.isArray(c) ? c : a.map(g => ({
364
+ recipientJid: g,
365
+ message: c
366
+ }));
367
+ let k = false;
368
+ const q = u.creds.me.id;
369
+ const x = u.creds.me?.lid;
370
+ const v = x ? _safeJidDecode(x)?.user : null;
371
+ b = b.map(async ({
372
+ recipientJid: g,
373
+ message: f
374
+ }) => {
375
+ try {
376
+ if (!g) {
377
+ return null;
378
+ }
379
+ if (d) {
380
+ const {
381
+ user: n
382
+ } = _safeJidDecode(g);
383
+ const {
384
+ user: H
385
+ } = _safeJidDecode(q);
386
+ const V = g === q || x && g === x;
387
+ if ((n === H || v && n === v) && !V) {
388
+ f = d;
389
+ m.debug({
390
+ jid: g,
391
+ targetUser: n
392
+ }, "Using DSM for own device");
393
+ }
394
+ }
395
+ const h = (0, _index3.encodeWAMessage)(f);
396
+ return await Ia.mutex(g, async () => {
397
+ const {
398
+ type: n,
399
+ ciphertext: H
400
+ } = await A.encryptMessage({
401
+ jid: g,
402
+ data: h
403
+ });
404
+ if (n === "pkmsg") {
405
+ k = true;
406
+ }
407
+ return {
408
+ tag: "to",
409
+ attrs: {
410
+ jid: g
411
+ },
412
+ content: [{
413
+ tag: "enc",
414
+ attrs: {
415
+ v: "2",
416
+ type: n,
417
+ ...(e || {})
418
+ },
419
+ content: H
420
+ }]
421
+ };
422
+ });
423
+ } catch (h) {
424
+ m.error({
425
+ jid: g,
426
+ err: h
427
+ }, "Failed to encrypt for recipient");
428
+ return null;
429
+ }
430
+ });
431
+ b = (await Promise.all(b)).filter(g => g !== null);
432
+ if (a.length > 0 && b.length === 0) {
433
+ throw new _boom.Boom("All encryptions failed", {
434
+ statusCode: 500
435
+ });
436
+ }
437
+ return {
438
+ nodes: b,
439
+ shouldIncludeDeviceIdentity: k
440
+ };
441
+ };
442
+ const btnGetType = message => {
443
+ message = (0, _index3.normalizeMessageContent)(message) || message;
444
+ if (message.listMessage) return "list";
445
+ if (message.buttonsMessage) return "buttons";
446
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "review_and_pay") return "review_and_pay";
447
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "review_order") return "review_order";
448
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "payment_info") return "payment_info";
449
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "catalog_message") return "catalog_message";
450
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "payment_status") return "payment_status";
451
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "payment_method") return "payment_method";
452
+ if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === "payment_key_info") return "payment_key_info";
453
+ if (message.interactiveMessage?.nativeFlowMessage) return "interactive";
454
+ return undefined;
455
+ };
456
+ const btnGetArgs = message => {
457
+ message = (0, _index3.normalizeMessageContent)(message) || message;
458
+ const nativeFlow = message.interactiveMessage?.nativeFlowMessage;
459
+ const firstButtonName = nativeFlow?.buttons?.[0]?.name;
460
+ const nativeFlowSpecials = ["mpm", "cta_catalog", "send_location", "call_permission_request", "wa_payment_transaction_details", "automated_greeting_message_view_catalog"];
461
+ if (nativeFlow && (firstButtonName === "review_and_pay" || firstButtonName === "payment_info")) {
462
+ return {
463
+ tag: "biz",
464
+ attrs: {
465
+ native_flow_name: firstButtonName === "review_and_pay" ? "order_details" : firstButtonName
466
+ }
467
+ };
468
+ }
469
+ if (nativeFlow && nativeFlowSpecials.includes(firstButtonName)) {
470
+ return {
471
+ tag: "biz",
472
+ attrs: {
473
+ actual_actors: "2",
474
+ host_storage: "2",
475
+ privacy_mode_ts: (0, _index3.unixTimestampSeconds)().toString()
476
+ },
477
+ content: [{
478
+ tag: "interactive",
479
+ attrs: {
480
+ type: "native_flow",
481
+ v: "1"
482
+ },
483
+ content: [{
484
+ tag: "native_flow",
485
+ attrs: {
486
+ v: "2",
487
+ name: firstButtonName
488
+ }
489
+ }]
490
+ }, {
491
+ tag: "quality_control",
492
+ attrs: {
493
+ source_type: "third_party"
494
+ }
495
+ }]
496
+ };
497
+ }
498
+ if (nativeFlow || message.buttonsMessage) {
499
+ return {
500
+ tag: "biz",
501
+ attrs: {
502
+ actual_actors: "2",
503
+ host_storage: "2",
504
+ privacy_mode_ts: (0, _index3.unixTimestampSeconds)().toString()
505
+ },
506
+ content: [{
507
+ tag: "interactive",
508
+ attrs: {
509
+ type: "native_flow",
510
+ v: "1"
511
+ },
512
+ content: [{
513
+ tag: "native_flow",
514
+ attrs: {
515
+ v: "9",
516
+ name: "mixed"
517
+ }
518
+ }]
519
+ }, {
520
+ tag: "quality_control",
521
+ attrs: {
522
+ source_type: "third_party"
523
+ }
524
+ }]
525
+ };
526
+ }
527
+ if (message.listMessage) {
528
+ return {
529
+ tag: "biz",
530
+ attrs: {
531
+ actual_actors: "2",
532
+ host_storage: "2",
533
+ privacy_mode_ts: (0, _index3.unixTimestampSeconds)().toString()
534
+ },
535
+ content: [{
536
+ tag: "list",
537
+ attrs: {
538
+ v: "2",
539
+ type: "product_list"
540
+ }
541
+ }, {
542
+ tag: "quality_control",
543
+ attrs: {
544
+ source_type: "third_party"
545
+ }
546
+ }]
547
+ };
548
+ }
549
+ return {
550
+ tag: "biz",
551
+ attrs: {
552
+ actual_actors: "2",
553
+ host_storage: "2",
554
+ privacy_mode_ts: (0, _index3.unixTimestampSeconds)().toString()
555
+ }
556
+ };
557
+ };
558
+ const btnConvertMessage = message => {
559
+ let content = (0, _index3.normalizeMessageContent)(message) || message;
560
+ if (content.listMessage) {
561
+ const list = content.listMessage;
562
+ content = {
563
+ interactiveMessage: {
564
+ nativeFlowMessage: {
565
+ buttons: [{
566
+ name: "single_select",
567
+ buttonParamsJson: JSON.stringify({
568
+ title: list.buttonText || "Select",
569
+ sections: (list.sections || []).map(section => ({
570
+ title: section.title || "",
571
+ highlight_label: "",
572
+ rows: (section.rows || []).map(row => ({
573
+ header: "",
574
+ title: row.title || "",
575
+ description: row.description || "",
576
+ id: row.rowId || row.id || ""
577
+ }))
578
+ }))
579
+ })
580
+ }],
581
+ messageParamsJson: "",
582
+ messageVersion: 1
583
+ },
584
+ body: {
585
+ text: list.description || ""
586
+ },
587
+ footer: list.footerText ? {
588
+ text: list.footerText
589
+ } : undefined,
590
+ header: list.title ? {
591
+ title: list.title,
592
+ hasMediaAttachment: false,
593
+ subtitle: ""
594
+ } : undefined,
595
+ contextInfo: list.contextInfo
596
+ }
597
+ };
598
+ } else if (content.buttonsMessage) {
599
+ const bMsg = content.buttonsMessage;
600
+ const buttons = (bMsg.buttons || []).map(btn => ({
601
+ name: "quick_reply",
602
+ buttonParamsJson: JSON.stringify({
603
+ display_text: btn.buttonText?.displayText || btn.buttonText || "",
604
+ id: btn.buttonId || btn.buttonText?.displayText || ""
605
+ })
606
+ }));
607
+ content = {
608
+ interactiveMessage: {
609
+ nativeFlowMessage: {
610
+ buttons,
611
+ messageParamsJson: "",
612
+ messageVersion: 1
613
+ },
614
+ body: {
615
+ text: bMsg.contentText || bMsg.text || ""
616
+ },
617
+ footer: bMsg.footerText ? {
618
+ text: bMsg.footerText
619
+ } : undefined,
620
+ header: bMsg.text ? {
621
+ title: bMsg.text,
622
+ hasMediaAttachment: false,
623
+ subtitle: ""
624
+ } : bMsg.imageMessage || bMsg.videoMessage || bMsg.documentMessage ? {
625
+ hasMediaAttachment: true,
626
+ ...bMsg.imageMessage ? {
627
+ imageMessage: bMsg.imageMessage
628
+ } : {},
629
+ ...bMsg.videoMessage ? {
630
+ videoMessage: bMsg.videoMessage
631
+ } : {}
632
+ } : undefined,
633
+ contextInfo: bMsg.contextInfo
634
+ }
635
+ };
636
+ } else if (content.templateMessage) {
637
+ const tmpl = content.templateMessage.hydratedTemplate || content.templateMessage.hydratedFourRowTemplate || content.templateMessage.fourRowTemplate;
638
+ if (tmpl) {
639
+ const buttons = (tmpl.hydratedButtons || []).map(hBtn => {
640
+ if (hBtn.quickReplyButton) {
641
+ return {
642
+ name: "quick_reply",
643
+ buttonParamsJson: JSON.stringify({
644
+ display_text: hBtn.quickReplyButton.displayText || "",
645
+ id: hBtn.quickReplyButton.id || hBtn.quickReplyButton.displayText || ""
646
+ })
647
+ };
648
+ }
649
+ if (hBtn.urlButton) {
650
+ return {
651
+ name: "cta_url",
652
+ buttonParamsJson: JSON.stringify({
653
+ display_text: hBtn.urlButton.displayText || "",
654
+ url: hBtn.urlButton.url || "",
655
+ merchant_url: hBtn.urlButton.url || ""
656
+ })
657
+ };
658
+ }
659
+ if (hBtn.callButton) {
660
+ return {
661
+ name: "cta_call",
662
+ buttonParamsJson: JSON.stringify({
663
+ display_text: hBtn.callButton.displayText || "",
664
+ phone_number: hBtn.callButton.phoneNumber || ""
665
+ })
666
+ };
667
+ }
668
+ return null;
669
+ }).filter(Boolean);
670
+ content = {
671
+ interactiveMessage: {
672
+ nativeFlowMessage: {
673
+ buttons,
674
+ messageParamsJson: "",
675
+ messageVersion: 1
676
+ },
677
+ body: {
678
+ text: tmpl.hydratedContentText || tmpl.contentText || ""
679
+ },
680
+ footer: tmpl.hydratedFooterText ? {
681
+ text: tmpl.hydratedFooterText
682
+ } : undefined,
683
+ header: tmpl.hydratedTitleText ? {
684
+ title: tmpl.hydratedTitleText,
685
+ hasMediaAttachment: false,
686
+ subtitle: ""
687
+ } : tmpl.imageMessage || tmpl.videoMessage || tmpl.documentMessage ? {
688
+ hasMediaAttachment: true,
689
+ ...tmpl.imageMessage ? {
690
+ imageMessage: tmpl.imageMessage
691
+ } : {},
692
+ ...tmpl.videoMessage ? {
693
+ videoMessage: tmpl.videoMessage
694
+ } : {}
695
+ } : undefined,
696
+ contextInfo: tmpl.contextInfo
697
+ }
698
+ };
699
+ }
700
+ }
701
+ return content;
702
+ };
703
+ const ca = async (a, b, {
704
+ messageId: e,
705
+ participant: d,
706
+ additionalAttributes: c,
707
+ additionalNodes: k,
708
+ useUserDevicesCache: q,
709
+ useCachedGroupMetadata: x,
710
+ statusJidList: v
711
+ }) => {
712
+ let participantJid;
713
+ if (d && typeof d === "object" && d.jid) {
714
+ participantJid = d.jid;
715
+ d = d.count !== undefined ? {
716
+ jid: participantJid,
717
+ count: d.count
718
+ } : true;
719
+ }
720
+ if (d && d !== true && c?.category !== "peer") {
721
+ d = undefined;
722
+ }
723
+ if (typeof a === "string" && !a.includes("@")) {
724
+ a = (0, _index4.jidNormalizedUser)(a + "@s.whatsapp.net");
725
+ }
726
+ const g = (0, _index3.assertMeId)(u.creds);
727
+ const f = u.creds.me?.lid;
728
+ const h = d?.count !== undefined;
729
+ let n = h;
730
+ const {
731
+ user: H,
732
+ server: V
733
+ } = _safeJidDecode(a);
734
+ const ba = V === "g.us";
735
+ const L = a === "status@broadcast";
736
+ const W = V === "lid";
737
+ const ja = V === "newsletter";
738
+ const isInterop = (0, _index4.isInteropUser)(a);
739
+ const ta = ba || L;
740
+ const iosBros = B.browser[0] === "iOS" || B.browser[1] === "Safari";
741
+ e = iosBros ? (0, _index3.generateIOSMessageID)() : e || (0, _index3.generateMessageIDV2)(g);
742
+ if (b?.groupStatusMessageV2 && !b?.messageContextInfo?.messageSecret) {
743
+ b = {
744
+ ...b,
745
+ messageContextInfo: {
746
+ ...(b.messageContextInfo || {}),
747
+ messageSecret: (0, _crypto.randomBytes)(32)
748
+ },
749
+ groupStatusMessageV2: {
750
+ ...b.groupStatusMessageV2,
751
+ message: {
752
+ ...(b.groupStatusMessageV2.message || {}),
753
+ messageContextInfo: {
754
+ ...(b.groupStatusMessageV2.message?.messageContextInfo || {}),
755
+ messageSecret: b.messageContextInfo?.messageSecret || (0, _crypto.randomBytes)(32)
756
+ }
757
+ }
758
+ }
759
+ };
760
+ }
761
+ q = q !== false;
762
+ x = x !== false && !L;
763
+ const N = [];
764
+ const r = L ? "status@broadcast" : a;
765
+ const O = [];
766
+ const F = [];
767
+ let R;
768
+ const ua = {
769
+ deviceSentMessage: {
770
+ destinationJid: r,
771
+ message: b
772
+ },
773
+ messageContextInfo: b.messageContextInfo
774
+ };
775
+ const P = {};
776
+ if (d && d !== true) {
777
+ if (ba || L) {
778
+ c = {
779
+ ...c,
780
+ device_fanout: "false"
781
+ };
782
+ }
783
+ const {
784
+ user: l,
785
+ device: y
786
+ } = _safeJidDecode(d.jid);
787
+ F.push({
788
+ user: l,
789
+ device: y,
790
+ jid: d.jid
791
+ });
792
+ }
793
+ await u.keys.transaction(async () => {
794
+ b = btnConvertMessage(b);
795
+ const btnType = btnGetType(b);
796
+ var l = va(b);
797
+ if (l) {
798
+ P.mediatype = l;
799
+ }
800
+ if (ja) {
801
+ var y = T ? await T(b, []) : b;
802
+ y = (0, _index3.encodeNewsletterMessage)(y);
803
+ O.push({
804
+ tag: "plaintext",
805
+ attrs: {},
806
+ content: y
807
+ });
808
+ y = {
809
+ tag: "message",
810
+ attrs: {
811
+ to: a,
812
+ id: e,
813
+ type: wa(b),
814
+ ...(c || {})
815
+ },
816
+ content: O
817
+ };
818
+ m.debug({
819
+ msgId: e
820
+ }, `sending newsletter message to ${a}`);
821
+ await X(y);
822
+ } else {
823
+ if ((0, _index3.normalizeMessageContent)(b)?.pinInChatMessage || (0, _index3.normalizeMessageContent)(b)?.reactionMessage) {
824
+ P["decrypt-fail"] = "hide";
825
+ }
826
+ if (ta && !h) {
827
+ const [w, z] = await Promise.all([(async () => {
828
+ let I = x && ma ? await ma(a) : undefined;
829
+ if (I && Array.isArray(I?.participants)) {
830
+ m.trace({
831
+ jid: a,
832
+ participants: I.participants.length
833
+ }, "using cached group metadata");
834
+ } else if (!L) {
835
+ I = await Fa(a);
836
+ }
837
+ return I;
838
+ })(), (async () => d || L ? {} : (await u.keys.get("sender-key-memory", [a]))[a] || {})()]);
839
+ l = w ? w.participants.map(I => I.id) : [];
840
+ if (w?.ephemeralDuration && w.ephemeralDuration > 0) {
841
+ c = {
842
+ ...c,
843
+ expiration: w.ephemeralDuration.toString()
844
+ };
845
+ }
846
+ if (L && v) {
847
+ l.push(...v);
848
+ }
849
+ l = await ia(l, !!q, false);
850
+ F.push(...l);
851
+ if (ba) {
852
+ c = {
853
+ ...c,
854
+ addressing_mode: w?.addressingMode || "lid"
855
+ };
856
+ }
857
+ l = await T(b);
858
+ if (Array.isArray(l)) {
859
+ throw new _boom.Boom("Per-jid patching is not supported in groups");
860
+ }
861
+ var C = (0, _index3.encodeWAMessage)(l);
862
+ R = l;
863
+ const {
864
+ ciphertext: Q,
865
+ senderKeyDistributionMessage: ka
866
+ } = await A.encryptGroupMessage({
867
+ group: r,
868
+ data: C,
869
+ meId: (c?.addressing_mode || w?.addressingMode || "lid") === "lid" && f ? f : g
870
+ });
871
+ l = [];
872
+ for (var p of F) {
873
+ C = p.jid;
874
+ if ((!z[C] || !!d) && !(0, _index4.isHostedLidUser)(C) && !(0, _index4.isHostedPnUser)(C) && p.device !== 99) {
875
+ l.push(C);
876
+ z[C] = true;
877
+ }
878
+ }
879
+ if (l.length) {
880
+ m.debug({
881
+ senderKeyJids: l
882
+ }, "sending new sender key");
883
+ p = {
884
+ senderKeyDistributionMessage: {
885
+ axolotlSenderKeyDistributionMessage: ka,
886
+ groupId: r
887
+ }
888
+ };
889
+ await Z(l);
890
+ p = await aa(l, p, P);
891
+ n = n || p.shouldIncludeDeviceIdentity;
892
+ N.push(...p.nodes);
893
+ }
894
+ O.push({
895
+ tag: "enc",
896
+ attrs: {
897
+ v: "2",
898
+ type: "skmsg",
899
+ ...P
900
+ },
901
+ content: Q
902
+ });
903
+ await u.keys.set({
904
+ "sender-key-memory": {
905
+ [a]: z
906
+ }
907
+ });
908
+ } else {
909
+ p = g;
910
+ if (W && f) {
911
+ p = f;
912
+ m.debug({
913
+ to: a,
914
+ ownId: p
915
+ }, "Using LID identity for @lid conversation");
916
+ } else {
917
+ m.debug({
918
+ to: a,
919
+ ownId: p
920
+ }, "Using PN identity for @s.whatsapp.net conversation");
921
+ }
922
+ ({
923
+ user: p
924
+ } = _safeJidDecode(p));
925
+ l = d === true ? b : await T(b, [a]);
926
+ R = Array.isArray(l) ? l.find(M => M.recipientJid === a) || l[0] : l;
927
+ if (!h) {
928
+ const targetUserServer = W ? "lid" : isInterop ? "interop" : "s.whatsapp.net";
929
+ F.push({
930
+ user: H,
931
+ device: 0,
932
+ jid: (0, _index4.jidEncode)(H, targetUserServer, 0)
933
+ });
934
+ if (H !== p && !isInterop) {
935
+ p = W ? "lid" : "s.whatsapp.net";
936
+ l = W && f ? _safeJidDecode(f).user : _safeJidDecode(g).user;
937
+ F.push({
938
+ user: l,
939
+ device: 0,
940
+ jid: (0, _index4.jidEncode)(l, p, 0)
941
+ });
942
+ }
943
+ if (c?.category !== "peer" && !isInterop) {
944
+ F.length = 0;
945
+ p = W && f ? (0, _index4.jidEncode)(_safeJidDecode(f)?.user, "lid", undefined) : (0, _index4.jidEncode)(_safeJidDecode(g)?.user, "s.whatsapp.net", undefined);
946
+ p = await ia([p, a], true, false);
947
+ F.push(...p);
948
+ m.debug({
949
+ deviceCount: F.length,
950
+ devices: F.map(M => `${M.user}:${M.device}@${_safeJidDecode(M.jid)?.server}`)
951
+ }, "Device enumeration complete with unified addressing");
952
+ }
953
+ }
954
+ p = [];
955
+ l = [];
956
+ C = [];
957
+ const {
958
+ user: w
959
+ } = _safeJidDecode(g);
960
+ const {
961
+ user: z
962
+ } = f ? _safeJidDecode(f) : {
963
+ user: null
964
+ };
965
+ for (const {
966
+ user: M,
967
+ jid: S
968
+ } of F) {
969
+ if (S === g || f && S === f) {
970
+ m.debug({
971
+ jid: S,
972
+ meId: g,
973
+ meLid: f
974
+ }, "Skipping exact sender device (whatsmeow pattern)");
975
+ } else {
976
+ const isMe = M === w || M === z;
977
+ if (d === true && isMe) {
978
+ m.debug({ jid: S }, "Skipping sender device (participant: true)");
979
+ continue;
980
+ }
981
+ if (isMe) {
982
+ l.push(S);
983
+ } else {
984
+ C.push(S);
985
+ }
986
+ p.push(S);
987
+ }
988
+ }
989
+ await Z(p);
990
+ const [{
991
+ nodes: Q,
992
+ shouldIncludeDeviceIdentity: ka
993
+ }, {
994
+ nodes: I,
995
+ shouldIncludeDeviceIdentity: Ja
996
+ }] = await Promise.all([aa(l, ua || b, P), aa(C, b, P, ua)]);
997
+ N.push(...Q);
998
+ N.push(...I);
999
+ if (l.length > 0 || C.length > 0) {
1000
+ P.phash = (0, _index3.generateParticipantHashV2)([...l, ...C]);
1001
+ }
1002
+ n = n || ka || Ja;
1003
+ }
1004
+ if (h) {
1005
+ p = (0, _index4.isLidUser)(d.jid);
1006
+ p = (0, _index4.areJidsSameUser)(d.jid, p ? f : g);
1007
+ l = b;
1008
+ if (ta) {
1009
+ var t;
1010
+ if (f && (await A.hasSenderKey({
1011
+ group: r,
1012
+ meId: f
1013
+ }))) {
1014
+ t = f;
1015
+ } else if (await A.hasSenderKey({
1016
+ group: r,
1017
+ meId: g
1018
+ })) {
1019
+ t = g;
1020
+ }
1021
+ if (t) {
1022
+ try {
1023
+ var G = await A.getSenderKeyDistributionMessage({
1024
+ group: r,
1025
+ meId: t
1026
+ });
1027
+ l = {
1028
+ ...b,
1029
+ senderKeyDistributionMessage: {
1030
+ groupId: r,
1031
+ axolotlSenderKeyDistributionMessage: G
1032
+ }
1033
+ };
1034
+ } catch (Q) {
1035
+ m.warn({
1036
+ err: Q,
1037
+ jid: r
1038
+ }, "failed to build SKDM for retry, sending without it");
1039
+ }
1040
+ }
1041
+ }
1042
+ t = p ? (0, _index3.encodeWAMessage)({
1043
+ deviceSentMessage: {
1044
+ destinationJid: r,
1045
+ message: l
1046
+ }
1047
+ }) : (0, _index3.encodeWAMessage)(l);
1048
+ const {
1049
+ type: w,
1050
+ ciphertext: z
1051
+ } = await A.encryptMessage({
1052
+ data: t,
1053
+ jid: d.jid
1054
+ });
1055
+ O.push({
1056
+ tag: "enc",
1057
+ attrs: {
1058
+ v: "2",
1059
+ type: w,
1060
+ ...(d.count ? {
1061
+ count: d.count.toString()
1062
+ } : {})
1063
+ },
1064
+ content: z
1065
+ });
1066
+ }
1067
+ if (N.length) {
1068
+ if (c?.category === "peer") {
1069
+ if (t = N[0]?.content?.[0]) {
1070
+ O.push(t);
1071
+ }
1072
+ } else if (isInterop) {
1073
+ const recipientNode = N.find(p => (0, _index4.isInteropUser)(p?.attrs?.jid));
1074
+ const encNode = (recipientNode || N[0])?.content?.[0];
1075
+ if (encNode) {
1076
+ O.push(encNode);
1077
+ }
1078
+ } else {
1079
+ O.push({
1080
+ tag: "participants",
1081
+ attrs: {},
1082
+ content: N
1083
+ });
1084
+ }
1085
+ }
1086
+ t = {
1087
+ tag: "message",
1088
+ attrs: {
1089
+ id: e,
1090
+ to: r,
1091
+ type: wa(b),
1092
+ ...(c || {})
1093
+ },
1094
+ content: O
1095
+ };
1096
+ t.attrs.to = r;
1097
+ if (participantJid) {
1098
+ t.attrs.participant = participantJid;
1099
+ } else if (d && typeof d === "object" && d.jid) {
1100
+ t.attrs.participant = d.jid;
1101
+ }
1102
+ if (n) {
1103
+ t.content.push({
1104
+ tag: "device-identity",
1105
+ attrs: {},
1106
+ content: (0, _index3.encodeSignedDeviceIdentity)(u.creds.account, true)
1107
+ });
1108
+ m.debug({
1109
+ jid: a
1110
+ }, "adding device identity");
1111
+ }
1112
+ if (!ja && !h && R?.messageContextInfo?.messageSecret && (0, _reportingUtils.shouldIncludeReportingToken)(R)) {
1113
+ try {
1114
+ y = (0, _index3.encodeWAMessage)(R);
1115
+ var J = await (0, _reportingUtils.getMessageReportingToken)(y, R, {
1116
+ id: e,
1117
+ fromMe: true,
1118
+ remoteJid: r,
1119
+ participant: participantJid || d?.jid
1120
+ });
1121
+ if (J) {
1122
+ t.content.push(J);
1123
+ m.trace({
1124
+ jid: a
1125
+ }, "added reporting token to message");
1126
+ }
1127
+ } catch (w) {
1128
+ m.warn({
1129
+ jid: a,
1130
+ trace: w?.stack
1131
+ }, "failed to attach reporting token");
1132
+ }
1133
+ }
1134
+ y = c?.category === "peer";
1135
+ var D = (y = !ba && !h && !L && !ja && !y) ? await (0, _tcTokenUtils.resolveTcTokenJid)(r, ea) : r;
1136
+ J = (y ? await u.keys.get("tctoken", [D]) : {})[D];
1137
+ G = J?.token;
1138
+ if (y && !G) {
1139
+ try {
1140
+ const w = (0, _index3.unixTimestampSeconds)();
1141
+ const getPNForLID = A.lidMapping.getPNForLID.bind(A.lidMapping);
1142
+ const issueJid = await (0, _tcTokenUtils.resolveIssuanceJid)(r, K.serverProps.lidTrustedTokenIssueToLid, ea, getPNForLID);
1143
+ m.debug({ jid: r, issueJid }, "missing tctoken, fetching synchronously...");
1144
+ const iqResult = await xa([issueJid], w);
1145
+ await (0, _tcTokenUtils.storeTcTokensFromIqResult)({
1146
+ result: iqResult,
1147
+ fallbackJid: D,
1148
+ keys: u.keys,
1149
+ getLIDForPN: ea
1150
+ });
1151
+ J = (await u.keys.get("tctoken", [D]))[D];
1152
+ G = J?.token;
1153
+ m.debug({ jid: r }, "successfully fetched missing tctoken synchronously");
1154
+ } catch (err) {
1155
+ m.warn({ jid: r, err }, "failed to fetch missing tctoken synchronously");
1156
+ }
1157
+ }
1158
+ if (G?.length && (0, _tcTokenUtils.isTcTokenExpired)(J?.timestamp)) {
1159
+ m.debug({
1160
+ jid: r,
1161
+ timestamp: J?.timestamp
1162
+ }, "tctoken expired, clearing");
1163
+ G = undefined;
1164
+ p = J?.senderTimestamp !== undefined ? {
1165
+ token: Buffer.alloc(0),
1166
+ senderTimestamp: J.senderTimestamp
1167
+ } : null;
1168
+ try {
1169
+ await u.keys.set({
1170
+ tctoken: {
1171
+ [D]: p
1172
+ }
1173
+ });
1174
+ } catch (w) {
1175
+ m.debug({
1176
+ jid: r,
1177
+ err: w?.message
1178
+ }, "failed to persist tctoken expiry cleanup");
1179
+ }
1180
+ }
1181
+ if (G?.length && K.serverProps.privacyTokenOn1to1) {
1182
+ t.content.push({
1183
+ tag: "tctoken",
1184
+ attrs: {},
1185
+ content: G
1186
+ });
1187
+ }
1188
+ let btnNodesPushed = false;
1189
+ if (!ja && btnType) {
1190
+ const btnNode = btnGetArgs(b);
1191
+ const filteredButtons = (0, _index4.getBinaryNodeFilter)(k || []);
1192
+ if (filteredButtons) {
1193
+ t.content.push(...k);
1194
+ btnNodesPushed = true;
1195
+ } else if (btnNode) {
1196
+ t.content.push(btnNode);
1197
+ }
1198
+ }
1199
+ const btnPeerSend = c?.category === "peer";
1200
+ const btn1on1Send = !ba && !h && !L && !ja && !btnPeerSend;
1201
+ if (!ja && !aiLbl && btn1on1Send && (0, _index4.isPnUser)(r)) {
1202
+ const hasBizBot = (0, _index4.getBinaryFilteredBizBot)(k || []) || (0, _index4.getBinaryFilteredBizBot)(t.content || []);
1203
+ if (!hasBizBot) {
1204
+ t.content.push({
1205
+ tag: "bot",
1206
+ attrs: {
1207
+ biz_bot: "1"
1208
+ }
1209
+ });
1210
+ }
1211
+ } else if (!ja && aiLbl && !ba && !h && !L && !btnPeerSend) {
1212
+ const hasBizBot = (0, _index4.getBinaryFilteredBizBot)(k || []);
1213
+ if (!hasBizBot) {
1214
+ t.content.push({
1215
+ tag: "bot",
1216
+ attrs: {
1217
+ biz_bot: "1"
1218
+ }
1219
+ });
1220
+ }
1221
+ }
1222
+ if (k && k.length > 0 && !btnNodesPushed) {
1223
+ t.content.push(...k);
1224
+ }
1225
+ if (!btnNodesPushed && (G = Ka(b))) {
1226
+ t.content.push({
1227
+ tag: "biz",
1228
+ attrs: {},
1229
+ content: [{
1230
+ tag: G,
1231
+ attrs: La(b)
1232
+ }]
1233
+ });
1234
+ m.debug({
1235
+ jid: a
1236
+ }, "adding business node");
1237
+ }
1238
+ m.debug({
1239
+ msgId: e
1240
+ }, `sending message to ${N.length} devices`);
1241
+ await X(t);
1242
+ if (isInterop && !h) {
1243
+ try {
1244
+ await K.trustInteropContact(a);
1245
+ } catch (err) {
1246
+ m.debug({ err, jid: a }, "failed to trust interop contact");
1247
+ }
1248
+ }
1249
+ if (b?.messageContextInfo?.messageSecret) {
1250
+ (0, _index3.setBotMessageSecret)(e, b.messageContextInfo.messageSecret, r);
1251
+ }
1252
+ t = !!(0, _index3.normalizeMessageContent)(b)?.protocolMessage;
1253
+ G = r === _index4.PSA_WID || (0, _index4.isJidBot)(r) || (0, _index4.isJidMetaAI)(r);
1254
+ if (y && !t && !G && (0, _tcTokenUtils.shouldSendNewTcToken)(J?.senderTimestamp) && !fa.has(D)) {
1255
+ fa.add(D);
1256
+ const w = (0, _index3.unixTimestampSeconds)();
1257
+ y = A.lidMapping.getPNForLID.bind(A.lidMapping);
1258
+ (0, _tcTokenUtils.resolveIssuanceJid)(r, K.serverProps.lidTrustedTokenIssueToLid, ea, y).then(z => xa([z], w)).then(async z => {
1259
+ await (0, _tcTokenUtils.storeTcTokensFromIqResult)({
1260
+ result: z,
1261
+ fallbackJid: D,
1262
+ keys: u.keys,
1263
+ getLIDForPN: ea
1264
+ });
1265
+ z = (await u.keys.get("tctoken", [D]))[D];
1266
+ const Q = await (0, _tcTokenUtils.buildMergedTcTokenIndexWrite)(u.keys, [D]);
1267
+ await u.keys.set({
1268
+ tctoken: {
1269
+ [D]: {
1270
+ token: Buffer.alloc(0),
1271
+ ...z,
1272
+ senderTimestamp: w
1273
+ },
1274
+ ...Q
1275
+ }
1276
+ });
1277
+ }).catch(z => {
1278
+ m.debug({
1279
+ jid: r,
1280
+ err: z?.message
1281
+ }, "fire-and-forget tctoken issuance failed");
1282
+ }).finally(() => {
1283
+ fa.delete(D);
1284
+ });
1285
+ }
1286
+ if (U && !d) {
1287
+ U.addRecentMessage(r, e, b);
1288
+ }
1289
+ }
1290
+ }, g);
1291
+ return e;
1292
+ };
1293
+ const wa = a => (a = (0, _index3.normalizeMessageContent)(a)) ? a.reactionMessage || a.encReactionMessage ? "reaction" : a.pollCreationMessage || a.pollCreationMessageV2 || a.pollCreationMessageV3 || a.pollCreationMessageV4 || a.pollCreationMessageV5 || a.pollUpdateMessage ? "poll" : a.eventMessage ? "event" : va(a) !== "" ? "media" : "text" : "text";
1294
+ const va = a => a.imageMessage ? "image" : a.videoMessage ? a.videoMessage.gifPlayback ? "gif" : "video" : a.audioMessage ? a.audioMessage.ptt ? "ptt" : "audio" : a.contactMessage ? "vcard" : a.documentMessage ? "document" : a.contactsArrayMessage ? "contact_array" : a.liveLocationMessage ? "livelocation" : a.stickerMessage ? "sticker" : a.listMessage ? "list" : a.listResponseMessage ? "list_response" : a.buttonsResponseMessage ? "buttons_response" : a.orderMessage ? "order" : a.productMessage ? "product" : a.interactiveResponseMessage ? "native_flow_response" : a.groupInviteMessage ? "url" : "";
1295
+ const Ka = a => {
1296
+ if (a.buttonsMessage) {
1297
+ return "buttons";
1298
+ }
1299
+ if (a.buttonsResponseMessage) {
1300
+ return "buttons_response";
1301
+ }
1302
+ if (a.interactiveResponseMessage) {
1303
+ return "interactive_response";
1304
+ }
1305
+ if (a.listMessage) {
1306
+ return "list";
1307
+ }
1308
+ if (a.listResponseMessage) {
1309
+ return "list_response";
1310
+ }
1311
+ };
1312
+ const La = a => {
1313
+ if (a.templateMessage) {
1314
+ return {};
1315
+ }
1316
+ if (a.listMessage) {
1317
+ a = a.listMessage.listType;
1318
+ if (!a) {
1319
+ throw new boom_1.Boom("Expected list type inside message");
1320
+ }
1321
+ return {
1322
+ v: "2",
1323
+ type: ListType[a].toLowerCase()
1324
+ };
1325
+ }
1326
+ return {};
1327
+ };
1328
+ const xa = async (a, b) => {
1329
+ const e = (b ?? (0, _index3.unixTimestampSeconds)()).toString();
1330
+ return await da({
1331
+ tag: "iq",
1332
+ attrs: {
1333
+ to: _index4.S_WHATSAPP_NET,
1334
+ type: "set",
1335
+ xmlns: "privacy"
1336
+ },
1337
+ content: [{
1338
+ tag: "tokens",
1339
+ attrs: {},
1340
+ content: a.map(d => ({
1341
+ tag: "token",
1342
+ attrs: {
1343
+ jid: (0, _index4.jidNormalizedUser)(d),
1344
+ t: e,
1345
+ type: "trusted_contact"
1346
+ }
1347
+ }))
1348
+ }]
1349
+ });
1350
+ };
1351
+ const la = (0, _index3.getWAUploadToServer)(B, qa);
1352
+ const Ma = (0, _index3.bindWaitForEvent)(na, "messages.media-update");
1353
+ Ha(() => {
1354
+ if (!B.userDevicesCache && E.close) {
1355
+ E.close();
1356
+ }
1357
+ Y = undefined;
1358
+ if (U) {
1359
+ U.clear();
1360
+ }
1361
+ });
1362
+ const _sendMessage = async (a, b, e = {}) => {
1363
+ var d = u.creds.me.id;
1364
+ const luki = new _luxu.default(_index3, la, ca);
1365
+ const {
1366
+ quoted
1367
+ } = e;
1368
+ if (typeof b === "object" && "disappearingMessagesInChat" in b && typeof b.disappearingMessagesInChat !== "undefined" && (0, _index4.isJidGroup)(a)) {
1369
+ ({
1370
+ disappearingMessagesInChat: b
1371
+ } = b);
1372
+ await Ga(a, typeof b === "boolean" ? b ? _index2.WA_DEFAULT_EPHEMERAL : 0 : b);
1373
+ } else {
1374
+ const messageType = typeof b === "object" ? luki.detectType(b) : null;
1375
+ if (messageType) {
1376
+ switch (messageType) {
1377
+ case "PAYMENT": {
1378
+ const paymentContent = await luki.handlePayment(b, quoted);
1379
+ return await ca(a, paymentContent, {
1380
+ messageId: (0, _index3.generateMessageID)()
1381
+ });
1382
+ }
1383
+ case "PRODUCT": {
1384
+ const productContent = await luki.handleProduct(b, a, quoted);
1385
+ const productMsg = await (0, _index3.generateWAMessageFromContent)(a, productContent, {
1386
+ quoted
1387
+ });
1388
+ return await ca(a, productMsg.message, {
1389
+ messageId: productMsg.key.id
1390
+ });
1391
+ }
1392
+ case "ALBUM":
1393
+ return await luki.handleAlbum(b, a, quoted);
1394
+ case "EVENT":
1395
+ return await luki.handleEvent(b, a, quoted);
1396
+ case "POLL_RESULT":
1397
+ return await luki.handlePollResult(b, a, quoted);
1398
+ case "ORDER":
1399
+ return await luki.handleOrderMessage(b, a, quoted);
1400
+ case "GROUP_STATUS":
1401
+ return await luki.handleGroupStory(b, a, quoted);
1402
+ case "GROUP_LABEL":
1403
+ return await luki.handleGbLabel(b, a);
1404
+ }
1405
+ }
1406
+ const c = await (0, _index3.generateWAMessage)(a, b, {
1407
+ logger: m,
1408
+ userJid: d,
1409
+ getUrlInfo: f => (0, _linkPreview.getUrlInfo)(f, {
1410
+ thumbnailWidth: ya,
1411
+ fetchOpts: {
1412
+ timeout: 3000,
1413
+ ...(Aa || {})
1414
+ },
1415
+ logger: m,
1416
+ uploadImage: za ? la : undefined
1417
+ }),
1418
+ getProfilePicUrl: K.profilePictureUrl,
1419
+ getCallLink: K.createCallLink,
1420
+ upload: la,
1421
+ mediaCache: B.mediaCache,
1422
+ options: B.options,
1423
+ messageId: (0, _index3.generateMessageIDV2)(K.user?.id),
1424
+ ...e
1425
+ });
1426
+ d = "event" in b && !!b.event;
1427
+ const k = "edit" in b && !!b.edit;
1428
+ const q = "pin" in b && !!b.pin;
1429
+ const x = "poll" in b && !!b.poll;
1430
+ const v = {};
1431
+ const g = [];
1432
+ if ("delete" in b && b.delete) {
1433
+ if ((0, _index4.isJidGroup)(b.delete?.remoteJid) && !b.delete?.fromMe) {
1434
+ v.edit = "8";
1435
+ } else {
1436
+ v.edit = "7";
1437
+ }
1438
+ } else if (k) {
1439
+ v.edit = "1";
1440
+ } else if (q) {
1441
+ v.edit = "2";
1442
+ } else if (x) {
1443
+ g.push({
1444
+ tag: "meta",
1445
+ attrs: {
1446
+ polltype: "creation"
1447
+ }
1448
+ });
1449
+ } else if (d) {
1450
+ g.push({
1451
+ tag: "meta",
1452
+ attrs: {
1453
+ event_type: "creation"
1454
+ }
1455
+ });
1456
+ }
1457
+ await ca(a, c.message, {
1458
+ messageId: c.key.id,
1459
+ useCachedGroupMetadata: e.useCachedGroupMetadata,
1460
+ additionalAttributes: v,
1461
+ statusJidList: e.statusJidList,
1462
+ additionalNodes: aiLbl ? g : e.additionalNodes,
1463
+ participant: e.participant
1464
+ });
1465
+ if (B.emitOwnEvents) {
1466
+ process.nextTick(async () => {
1467
+ await Da.mutex(() => Ea(c, "append"));
1468
+ });
1469
+ }
1470
+ return c;
1471
+ }
1472
+ };
1473
+ return {
1474
+ ...K,
1475
+ userDevicesCache: E,
1476
+ devicesMutex: pa,
1477
+ issuePrivacyTokens: xa,
1478
+ assertSessions: Z,
1479
+ relayMessage: ca,
1480
+ sendReceipt: ra,
1481
+ sendReceipts: sa,
1482
+ readMessages: async a => {
1483
+ const b = (await oa()).readreceipts === "all" ? "read" : "read-self";
1484
+ await sa(a, b);
1485
+ },
1486
+ refreshMediaConn: qa,
1487
+ getMediaHost: () => ha,
1488
+ waUploadToServer: la,
1489
+ fetchPrivacySettings: oa,
1490
+ sendPeerDataOperationMessage: async a => {
1491
+ if (!u.creds.me?.id) {
1492
+ throw new _boom.Boom("Not authenticated");
1493
+ }
1494
+ a = {
1495
+ protocolMessage: {
1496
+ peerDataOperationRequestMessage: a,
1497
+ type: _index.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE
1498
+ }
1499
+ };
1500
+ const b = (0, _index4.jidNormalizedUser)(u.creds.me.id);
1501
+ return await ca(b, a, {
1502
+ additionalAttributes: {
1503
+ category: "peer",
1504
+ push_priority: "high_force"
1505
+ },
1506
+ additionalNodes: [{
1507
+ tag: "meta",
1508
+ attrs: {
1509
+ appdata: "default"
1510
+ }
1511
+ }]
1512
+ });
1513
+ },
1514
+ createParticipantNodes: aa,
1515
+ getUSyncDevices: ia,
1516
+ messageRetryManager: U,
1517
+ updateMemberLabel: (a, b) => ca(a, {
1518
+ protocolMessage: {
1519
+ type: _index.proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE,
1520
+ memberLabel: {
1521
+ label: b?.slice(0, 30),
1522
+ labelTimestamp: (0, _index3.unixTimestampSeconds)()
1523
+ }
1524
+ }
1525
+ }, {
1526
+ additionalNodes: [{
1527
+ tag: "meta",
1528
+ attrs: {
1529
+ tag_reason: "user_update",
1530
+ appdata: "member_tag"
1531
+ },
1532
+ content: undefined
1533
+ }]
1534
+ }),
1535
+ updateMediaMessage: async a => {
1536
+ const b = (0, _index3.assertMediaContent)(a.message);
1537
+ const e = b.mediaKey;
1538
+ const d = (0, _index3.encryptMediaRetryRequest)(a.key, e, u.creds.me.id);
1539
+ let c = undefined;
1540
+ await Promise.all([X(d), Ma(async k => {
1541
+ if (k = k.find(q => q.key.id === a.key.id)) {
1542
+ if (k.error) {
1543
+ c = k.error;
1544
+ } else {
1545
+ try {
1546
+ const q = (0, _index3.decryptMediaRetryData)(k.media, e, k.key.id);
1547
+ if (q.result !== _index.proto.MediaRetryNotification.ResultType.SUCCESS) {
1548
+ throw new _boom.Boom(`Media re-upload failed by device (${_index.proto.MediaRetryNotification.ResultType[q.result]})`, {
1549
+ data: q,
1550
+ statusCode: (0, _index3.getStatusCodeForMediaRetry)(q.result) || 404
1551
+ });
1552
+ }
1553
+ b.directPath = q.directPath;
1554
+ b.url = (0, _index3.getUrlFromDirectPath)(b.directPath, ha);
1555
+ m.debug({
1556
+ directPath: q.directPath,
1557
+ key: k.key
1558
+ }, "media update successful");
1559
+ } catch (q) {
1560
+ c = q;
1561
+ }
1562
+ }
1563
+ return true;
1564
+ }
1565
+ })]);
1566
+ if (c) {
1567
+ throw c;
1568
+ }
1569
+ na.emit("messages.update", [{
1570
+ key: a.key,
1571
+ update: {
1572
+ message: a.message
1573
+ }
1574
+ }]);
1575
+ return a;
1576
+ },
1577
+ sendMessage: _sendMessage,
1578
+ sendText: async (jid, text, options, quoted = null) => {
1579
+ return _sendMessage(jid, { text, ...options }, { quoted });
1580
+ },
1581
+ sendImage: async (jid, image, caption, options, quoted = null) => {
1582
+ return _sendMessage(jid, { image, caption, ...options }, { quoted });
1583
+ },
1584
+ sendVideo: async (jid, video, caption, options, quoted = null) => {
1585
+ return _sendMessage(jid, { video, caption, ...options }, { quoted });
1586
+ },
1587
+ sendAudio: async (jid, audio, options, quoted = null) => {
1588
+ return _sendMessage(jid, { audio, ...options }, { quoted });
1589
+ },
1590
+ sendDocument: async (jid, document, fileName, caption, options, quoted = null) => {
1591
+ return _sendMessage(jid, { document, fileName, caption, ...options }, { quoted });
1592
+ },
1593
+ sendLocation: async (jid, name, degreesLongitude, degreesLatitude, url, address, options, quoted = null) => {
1594
+ return _sendMessage(jid, { location: { degreesLongitude, degreesLatitude, name, url, address }, ...options }, { quoted });
1595
+ },
1596
+ sendPoll: async (jid, name, pollVote = [], multiSelect = false, options, quoted = null) => {
1597
+ const selectableCount = multiSelect ? pollVote.length : 1;
1598
+ return _sendMessage(jid, { poll: { name, values: pollVote, selectableCount }, ...options }, { quoted });
1599
+ },
1600
+ sendQuiz: async (jid, name, pollVote = [], answer, options, quoted = null) => {
1601
+ const poll = { name, values: pollVote, selectableCount: 1, type: "QUIZ", answer: { optionName: answer } };
1602
+ return _sendMessage(jid, { poll, ...options }, { quoted });
1603
+ },
1604
+ sendPtv: (jid, ptv, options, quoted = null) => {
1605
+ return _sendMessage(jid, { ptv, ...options }, { quoted });
1606
+ },
1607
+ statusMention: async (jid, content) => {
1608
+ const statusJid = "status@broadcast";
1609
+ const msgId = (0, _index3.generateMessageID)();
1610
+ const fullMsg = await (0, _index3.generateWAMessageFromContent)(statusJid, content, { messageId: msgId });
1611
+ await ca(statusJid, fullMsg.message, {
1612
+ messageId: fullMsg.key.id,
1613
+ statusJidList: [jid]
1614
+ });
1615
+ const mentionMsg = await (0, _index3.generateWAMessageFromContent)(jid, {
1616
+ protocolMessage: {
1617
+ key: fullMsg.key,
1618
+ type: 25
1619
+ }
1620
+ }, {});
1621
+ await ca(jid, mentionMsg.message, { messageId: mentionMsg.key.id });
1622
+ return mentionMsg;
1623
+ },
1624
+ sendTable: async (jid, title, headers, rows, quoted, options = {}) => {
1625
+ const { message, messageId } = _index3.generateTableContent(title, headers, rows, quoted, options);
1626
+ await ca(jid, message, { messageId });
1627
+ return { message, messageId };
1628
+ },
1629
+ sendList: async (jid, title, items, quoted, options = {}) => {
1630
+ const { message, messageId } = _index3.generateListContent(title, items, quoted, options);
1631
+ await ca(jid, message, { messageId });
1632
+ return { message, messageId };
1633
+ },
1634
+ sendCodeBlock: async (jid, code, quoted, options = {}) => {
1635
+ const { message, messageId } = _index3.generateCodeBlockContent(code, quoted, options);
1636
+ await ca(jid, message, { messageId });
1637
+ return { message, messageId };
1638
+ },
1639
+ sendRichMessage: async (jid, submessages, quoted, options = {}) => {
1640
+ const { message, messageId } = _index3.generateRichMessageContent(submessages, quoted, options);
1641
+ await ca(jid, message, { messageId });
1642
+ return { message, messageId };
1643
+ },
1644
+ sendMessageMembers: async (jid, message, options = {}) => {
1645
+ const {
1646
+ messageId: idm,
1647
+ quoted,
1648
+ delayMs = 1500,
1649
+ onlyMember = true
1650
+ } = options;
1651
+ const { server } = _safeJidDecode(jid);
1652
+ if (server !== "g.us") throw new Error("@g.us server required");
1653
+ const meId = u.creds.me.id;
1654
+ const messages = (0, _index3.normalizeMessageContent)(message);
1655
+ const groupData = ma ? await ma(jid) : await Fa(jid);
1656
+ const isAdmin = groupData.participants.filter(x => x.admin !== null).map(y => y.id);
1657
+ let participantJids = groupData.participants.map(z => z.id);
1658
+ if (onlyMember) {
1659
+ participantJids = isAdmin.length ? isAdmin : participantJids;
1660
+ }
1661
+ m.info(`Sending message to ${participantJids.length} members from ${jid}`);
1662
+ for (let i = 0; i < participantJids.length; i++) {
1663
+ const pjid = participantJids[i];
1664
+ if ((0, _index4.areJidsSameUser)(pjid, meId)) continue;
1665
+ try {
1666
+ const msgId = `${idm || (0, _index3.generateMessageID)()}_${i}`;
1667
+ const fullMsg = await (0, _index3.generateWAMessageFromContent)(pjid, message, { messageId: msgId, quoted });
1668
+ await ca(pjid, fullMsg.message, { messageId: fullMsg.key.id });
1669
+ m.debug(`Message successfully sent to ${pjid}`);
1670
+ if (delayMs && i < participantJids.length - 1) {
1671
+ await new Promise(z => setTimeout(z, delayMs));
1672
+ }
1673
+ } catch (e) {
1674
+ m.error({ jid: pjid, e }, "Error sending message to");
1675
+ }
1676
+ }
1677
+ return JSON.stringify({ members_total: participantJids.length, message }, null, 4);
1678
+ }
1679
+ };
1680
+ };
1681
+ exports.makeMessagesSocket = makeMessagesSocket;