@vanzxysenpai/baileys 0.0.0-stage → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +25 -0
  3. package/NOTICE.md +158 -0
  4. package/README.md +5294 -2
  5. package/VanzxyBanner.js +134 -0
  6. package/WAProto/index.d.ts +13317 -0
  7. package/WAProto/index.js +147553 -0
  8. package/lib/Builders/A2UI.d.ts +131 -0
  9. package/lib/Builders/A2UI.js +343 -0
  10. package/lib/Builders/AIRich.d.ts +1021 -0
  11. package/lib/Builders/AIRich.js +2889 -0
  12. package/lib/Builders/Album.d.ts +51 -0
  13. package/lib/Builders/Album.js +99 -0
  14. package/lib/Builders/Button.d.ts +137449 -0
  15. package/lib/Builders/Button.js +1054 -0
  16. package/lib/Builders/ButtonV2.d.ts +43 -0
  17. package/lib/Builders/ButtonV2.js +175 -0
  18. package/lib/Builders/ButtonV3.d.ts +35 -0
  19. package/lib/Builders/ButtonV3.js +189 -0
  20. package/lib/Builders/Carousel.d.ts +68 -0
  21. package/lib/Builders/Carousel.js +161 -0
  22. package/lib/Builders/Event.d.ts +61 -0
  23. package/lib/Builders/Event.js +118 -0
  24. package/lib/Builders/Expiring.d.ts +17 -0
  25. package/lib/Builders/Expiring.js +27 -0
  26. package/lib/Builders/Poll.d.ts +63 -0
  27. package/lib/Builders/Poll.js +139 -0
  28. package/lib/Builders/VanzxyBaileys.d.ts +42 -0
  29. package/lib/Builders/VanzxyBaileys.js +110 -0
  30. package/lib/Builders/errors.d.ts +25 -0
  31. package/lib/Builders/errors.js +29 -0
  32. package/lib/Builders/index.d.ts +14 -0
  33. package/lib/Builders/index.js +23 -0
  34. package/lib/Builders/shared.d.ts +395 -0
  35. package/lib/Builders/shared.js +738 -0
  36. package/lib/Defaults/bot-jid.d.ts +1 -0
  37. package/lib/Defaults/bot-jid.js +1 -0
  38. package/lib/Defaults/index.d.ts +161 -0
  39. package/lib/Defaults/index.js +165 -0
  40. package/lib/Defaults/version.d.ts +1 -0
  41. package/lib/Defaults/version.js +1 -0
  42. package/lib/Framework/Bot.d.ts +865 -0
  43. package/lib/Framework/Bot.js +230 -0
  44. package/lib/Framework/Context.d.ts +17 -0
  45. package/lib/Framework/Context.js +90 -0
  46. package/lib/Framework/MediaManager.d.ts +15 -0
  47. package/lib/Framework/MediaManager.js +154 -0
  48. package/lib/Framework/SessionManager.d.ts +10 -0
  49. package/lib/Framework/SessionManager.js +34 -0
  50. package/lib/Framework/StatsManager.d.ts +20 -0
  51. package/lib/Framework/StatsManager.js +117 -0
  52. package/lib/Framework/Store/SQLiteStore.d.ts +13 -0
  53. package/lib/Framework/Store/SQLiteStore.js +68 -0
  54. package/lib/Framework/index.d.ts +6 -0
  55. package/lib/Framework/index.js +11 -0
  56. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  57. package/lib/Signal/Group/ciphertext-message.js +11 -0
  58. package/lib/Signal/Group/group-session-builder.d.ts +7 -0
  59. package/lib/Signal/Group/group-session-builder.js +29 -0
  60. package/lib/Signal/Group/group_cipher.d.ts +10 -0
  61. package/lib/Signal/Group/group_cipher.js +81 -0
  62. package/lib/Signal/Group/index.d.ts +11 -0
  63. package/lib/Signal/Group/index.js +11 -0
  64. package/lib/Signal/Group/keyhelper.d.ts +6 -0
  65. package/lib/Signal/Group/keyhelper.js +17 -0
  66. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  67. package/lib/Signal/Group/sender-chain-key.js +25 -0
  68. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  69. package/lib/Signal/Group/sender-key-distribution-message.js +62 -0
  70. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  71. package/lib/Signal/Group/sender-key-message.js +65 -0
  72. package/lib/Signal/Group/sender-key-name.d.ts +11 -0
  73. package/lib/Signal/Group/sender-key-name.js +47 -0
  74. package/lib/Signal/Group/sender-key-record.d.ts +12 -0
  75. package/lib/Signal/Group/sender-key-record.js +40 -0
  76. package/lib/Signal/Group/sender-key-state.d.ts +16 -0
  77. package/lib/Signal/Group/sender-key-state.js +83 -0
  78. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  79. package/lib/Signal/Group/sender-message-key.js +25 -0
  80. package/lib/Signal/libsignal.d.ts +58 -0
  81. package/lib/Signal/libsignal.js +436 -0
  82. package/lib/Signal/lid-mapping.d.ts +20 -0
  83. package/lib/Signal/lid-mapping.js +276 -0
  84. package/lib/Socket/Client/index.d.ts +2 -0
  85. package/lib/Socket/Client/index.js +2 -0
  86. package/lib/Socket/Client/types.d.ts +5 -0
  87. package/lib/Socket/Client/types.js +10 -0
  88. package/lib/Socket/Client/websocket.d.ts +12 -0
  89. package/lib/Socket/Client/websocket.js +53 -0
  90. package/lib/Socket/business.d.ts +674 -0
  91. package/lib/Socket/business.js +379 -0
  92. package/lib/Socket/chats.d.ts +137 -0
  93. package/lib/Socket/chats.js +1299 -0
  94. package/lib/Socket/communities.d.ts +805 -0
  95. package/lib/Socket/communities.js +454 -0
  96. package/lib/Socket/dugong.d.ts +118 -0
  97. package/lib/Socket/dugong.js +810 -0
  98. package/lib/Socket/groups.d.ts +287 -0
  99. package/lib/Socket/groups.js +386 -0
  100. package/lib/Socket/index.d.ts +826 -0
  101. package/lib/Socket/index.js +35 -0
  102. package/lib/Socket/messages-recv.d.ts +613 -0
  103. package/lib/Socket/messages-recv.js +1851 -0
  104. package/lib/Socket/messages-send.d.ts +608 -0
  105. package/lib/Socket/messages-send.js +1574 -0
  106. package/lib/Socket/mex-fallback.d.ts +51 -0
  107. package/lib/Socket/mex-fallback.js +97 -0
  108. package/lib/Socket/mex.d.ts +1 -0
  109. package/lib/Socket/mex.js +41 -0
  110. package/lib/Socket/newsletter-ext.d.ts +47 -0
  111. package/lib/Socket/newsletter-ext.js +262 -0
  112. package/lib/Socket/newsletter.d.ts +285 -0
  113. package/lib/Socket/newsletter.js +223 -0
  114. package/lib/Socket/socket.d.ts +60 -0
  115. package/lib/Socket/socket.js +1001 -0
  116. package/lib/Socket/username.d.ts +842 -0
  117. package/lib/Socket/username.js +156 -0
  118. package/lib/Store/index.d.ts +3 -0
  119. package/lib/Store/index.js +3 -0
  120. package/lib/Store/make-in-memory-store.d.ts +62 -0
  121. package/lib/Store/make-in-memory-store.js +425 -0
  122. package/lib/Store/make-ordered-dictionary.d.ts +12 -0
  123. package/lib/Store/make-ordered-dictionary.js +78 -0
  124. package/lib/Store/object-repository.d.ts +10 -0
  125. package/lib/Store/object-repository.js +23 -0
  126. package/lib/Types/Auth.d.ts +1 -0
  127. package/lib/Types/Auth.js +1 -0
  128. package/lib/Types/Bussines.d.ts +1 -0
  129. package/lib/Types/Bussines.js +1 -0
  130. package/lib/Types/Call.d.ts +1 -0
  131. package/lib/Types/Call.js +1 -0
  132. package/lib/Types/Chat.d.ts +1 -0
  133. package/lib/Types/Chat.js +7 -0
  134. package/lib/Types/Contact.d.ts +1 -0
  135. package/lib/Types/Contact.js +1 -0
  136. package/lib/Types/Events.d.ts +1 -0
  137. package/lib/Types/Events.js +1 -0
  138. package/lib/Types/GroupMetadata.d.ts +1 -0
  139. package/lib/Types/GroupMetadata.js +1 -0
  140. package/lib/Types/Label.d.ts +2 -0
  141. package/lib/Types/Label.js +24 -0
  142. package/lib/Types/LabelAssociation.d.ts +2 -0
  143. package/lib/Types/LabelAssociation.js +6 -0
  144. package/lib/Types/Message.d.ts +11 -0
  145. package/lib/Types/Message.js +17 -0
  146. package/lib/Types/Mex.d.ts +2 -0
  147. package/lib/Types/Mex.js +38 -0
  148. package/lib/Types/Product.d.ts +1 -0
  149. package/lib/Types/Product.js +1 -0
  150. package/lib/Types/RichType.d.ts +2 -0
  151. package/lib/Types/RichType.js +22 -0
  152. package/lib/Types/Signal.d.ts +1 -0
  153. package/lib/Types/Signal.js +1 -0
  154. package/lib/Types/Socket.d.ts +1 -0
  155. package/lib/Types/Socket.js +1 -0
  156. package/lib/Types/State.d.ts +5 -0
  157. package/lib/Types/State.js +55 -0
  158. package/lib/Types/USync.d.ts +1 -0
  159. package/lib/Types/USync.js +1 -0
  160. package/lib/Types/index.d.ts +15 -0
  161. package/lib/Types/index.js +27 -0
  162. package/lib/Utils/PersistentStore.d.ts +83 -0
  163. package/lib/Utils/PersistentStore.js +592 -0
  164. package/lib/Utils/anchor-guard.d.ts +31 -0
  165. package/lib/Utils/anchor-guard.js +329 -0
  166. package/lib/Utils/android-stanza-id.d.ts +4 -0
  167. package/lib/Utils/android-stanza-id.js +21 -0
  168. package/lib/Utils/anti-delete.d.ts +62 -0
  169. package/lib/Utils/anti-delete.js +212 -0
  170. package/lib/Utils/auth-secure.d.ts +180 -0
  171. package/lib/Utils/auth-secure.js +791 -0
  172. package/lib/Utils/auth-utils.d.ts +59 -0
  173. package/lib/Utils/auth-utils.js +326 -0
  174. package/lib/Utils/auto-reconnect.d.ts +8 -0
  175. package/lib/Utils/auto-reconnect.js +204 -0
  176. package/lib/Utils/auto-reply.d.ts +35 -0
  177. package/lib/Utils/auto-reply.js +152 -0
  178. package/lib/Utils/bad-mac-handler.d.ts +59 -0
  179. package/lib/Utils/bad-mac-handler.js +119 -0
  180. package/lib/Utils/baileys-event-stream.d.ts +5 -0
  181. package/lib/Utils/baileys-event-stream.js +62 -0
  182. package/lib/Utils/browser-utils.d.ts +9 -0
  183. package/lib/Utils/browser-utils.js +29 -0
  184. package/lib/Utils/business.d.ts +49 -0
  185. package/lib/Utils/business.js +236 -0
  186. package/lib/Utils/button-helper-utils.d.ts +59 -0
  187. package/lib/Utils/button-helper-utils.js +266 -0
  188. package/lib/Utils/button-sender.d.ts +164 -0
  189. package/lib/Utils/button-sender.js +845 -0
  190. package/lib/Utils/chat-control.d.ts +98 -0
  191. package/lib/Utils/chat-control.js +231 -0
  192. package/lib/Utils/chat-history-helpers.d.ts +4 -0
  193. package/lib/Utils/chat-history-helpers.js +70 -0
  194. package/lib/Utils/chat-utils.d.ts +408 -0
  195. package/lib/Utils/chat-utils.js +879 -0
  196. package/lib/Utils/companion-reg-client-utils.d.ts +4 -0
  197. package/lib/Utils/companion-reg-client-utils.js +39 -0
  198. package/lib/Utils/connection-watchdog.d.ts +10 -0
  199. package/lib/Utils/connection-watchdog.js +74 -0
  200. package/lib/Utils/crypto.d.ts +41 -0
  201. package/lib/Utils/crypto.js +145 -0
  202. package/lib/Utils/decode-wa-message.d.ts +83 -0
  203. package/lib/Utils/decode-wa-message.js +315 -0
  204. package/lib/Utils/disconnect-reason.d.ts +13 -0
  205. package/lib/Utils/disconnect-reason.js +36 -0
  206. package/lib/Utils/event-buffer.d.ts +12 -0
  207. package/lib/Utils/event-buffer.js +640 -0
  208. package/lib/Utils/fetch-timeout.d.ts +4 -0
  209. package/lib/Utils/fetch-timeout.js +14 -0
  210. package/lib/Utils/ffmpeg-path.d.ts +5 -0
  211. package/lib/Utils/ffmpeg-path.js +130 -0
  212. package/lib/Utils/generics.d.ts +79 -0
  213. package/lib/Utils/generics.js +426 -0
  214. package/lib/Utils/group-metadata-cache.d.ts +3 -0
  215. package/lib/Utils/group-metadata-cache.js +25 -0
  216. package/lib/Utils/group-status-detection.d.ts +5 -0
  217. package/lib/Utils/group-status-detection.js +114 -0
  218. package/lib/Utils/history.d.ts +91 -0
  219. package/lib/Utils/history.js +144 -0
  220. package/lib/Utils/html-app.d.ts +14 -0
  221. package/lib/Utils/html-app.js +97 -0
  222. package/lib/Utils/html-multiplayer.d.ts +8 -0
  223. package/lib/Utils/html-multiplayer.js +90 -0
  224. package/lib/Utils/humanizer.d.ts +8 -0
  225. package/lib/Utils/humanizer.js +74 -0
  226. package/lib/Utils/identity-change-handler.d.ts +13 -0
  227. package/lib/Utils/identity-change-handler.js +49 -0
  228. package/lib/Utils/index.d.ts +88 -0
  229. package/lib/Utils/index.js +93 -0
  230. package/lib/Utils/jid-tools.d.ts +3 -0
  231. package/lib/Utils/jid-tools.js +78 -0
  232. package/lib/Utils/link-preview-metadata.d.ts +47 -0
  233. package/lib/Utils/link-preview-metadata.js +90 -0
  234. package/lib/Utils/link-preview.d.ts +12 -0
  235. package/lib/Utils/link-preview.js +84 -0
  236. package/lib/Utils/lock-manager.d.ts +5 -0
  237. package/lib/Utils/lock-manager.js +50 -0
  238. package/lib/Utils/logger.d.ts +2 -0
  239. package/lib/Utils/logger.js +2 -0
  240. package/lib/Utils/lt-hash.d.ts +12 -0
  241. package/lib/Utils/lt-hash.js +26 -0
  242. package/lib/Utils/make-mutex.d.ts +6 -0
  243. package/lib/Utils/make-mutex.js +32 -0
  244. package/lib/Utils/media-messages.d.ts +35 -0
  245. package/lib/Utils/media-messages.js +70 -0
  246. package/lib/Utils/media-processor.d.ts +6 -0
  247. package/lib/Utils/media-processor.js +174 -0
  248. package/lib/Utils/media-set.d.ts +6 -0
  249. package/lib/Utils/media-set.js +169 -0
  250. package/lib/Utils/message-kind.d.ts +26 -0
  251. package/lib/Utils/message-kind.js +138 -0
  252. package/lib/Utils/message-retry-manager.d.ts +79 -0
  253. package/lib/Utils/message-retry-manager.js +264 -0
  254. package/lib/Utils/message-search.d.ts +40 -0
  255. package/lib/Utils/message-search.js +181 -0
  256. package/lib/Utils/messages-media.d.ts +136 -0
  257. package/lib/Utils/messages-media.js +867 -0
  258. package/lib/Utils/messages.d.ts +66 -0
  259. package/lib/Utils/messages.js +2271 -0
  260. package/lib/Utils/meta-ai-msmsg.d.ts +3 -0
  261. package/lib/Utils/meta-ai-msmsg.js +132 -0
  262. package/lib/Utils/meta-ai.d.ts +4 -0
  263. package/lib/Utils/meta-ai.js +75 -0
  264. package/lib/Utils/migrate-auth-state.d.ts +23 -0
  265. package/lib/Utils/migrate-auth-state.js +126 -0
  266. package/lib/Utils/mini-app.d.ts +20 -0
  267. package/lib/Utils/mini-app.js +215 -0
  268. package/lib/Utils/mock-socket.d.ts +67 -0
  269. package/lib/Utils/mock-socket.js +254 -0
  270. package/lib/Utils/modern-messages.d.ts +64 -0
  271. package/lib/Utils/modern-messages.js +497 -0
  272. package/lib/Utils/native-flow.d.ts +19 -0
  273. package/lib/Utils/native-flow.js +112 -0
  274. package/lib/Utils/newsletter-status.d.ts +157 -0
  275. package/lib/Utils/newsletter-status.js +652 -0
  276. package/lib/Utils/noise-handler.d.ts +20 -0
  277. package/lib/Utils/noise-handler.js +200 -0
  278. package/lib/Utils/offline-node-processor.d.ts +9 -0
  279. package/lib/Utils/offline-node-processor.js +39 -0
  280. package/lib/Utils/pairing-utils.d.ts +5 -0
  281. package/lib/Utils/pairing-utils.js +29 -0
  282. package/lib/Utils/passkey.d.ts +4 -0
  283. package/lib/Utils/passkey.js +11 -0
  284. package/lib/Utils/past-participants.d.ts +2 -0
  285. package/lib/Utils/past-participants.js +40 -0
  286. package/lib/Utils/payment-detection.d.ts +40 -0
  287. package/lib/Utils/payment-detection.js +213 -0
  288. package/lib/Utils/payment-guard.d.ts +28 -0
  289. package/lib/Utils/payment-guard.js +143 -0
  290. package/lib/Utils/payment-messages.d.ts +42 -0
  291. package/lib/Utils/payment-messages.js +161 -0
  292. package/lib/Utils/payment-utils.d.ts +75 -0
  293. package/lib/Utils/payment-utils.js +145 -0
  294. package/lib/Utils/phone-utils.d.ts +3 -0
  295. package/lib/Utils/phone-utils.js +29 -0
  296. package/lib/Utils/pre-key-manager.d.ts +25 -0
  297. package/lib/Utils/pre-key-manager.js +105 -0
  298. package/lib/Utils/process-message.d.ts +103 -0
  299. package/lib/Utils/process-message.js +868 -0
  300. package/lib/Utils/qr-terminal.d.ts +1 -0
  301. package/lib/Utils/qr-terminal.js +16 -0
  302. package/lib/Utils/reconnect-backoff.d.ts +25 -0
  303. package/lib/Utils/reconnect-backoff.js +47 -0
  304. package/lib/Utils/reporting-utils.d.ts +12 -0
  305. package/lib/Utils/reporting-utils.js +257 -0
  306. package/lib/Utils/rich-message-utils.d.ts +54 -0
  307. package/lib/Utils/rich-message-utils.js +435 -0
  308. package/lib/Utils/rich-messages.d.ts +298 -0
  309. package/lib/Utils/rich-messages.js +1145 -0
  310. package/lib/Utils/scheduled-message.d.ts +81 -0
  311. package/lib/Utils/scheduled-message.js +101 -0
  312. package/lib/Utils/scheduling.d.ts +59 -0
  313. package/lib/Utils/scheduling.js +139 -0
  314. package/lib/Utils/signal.d.ts +82 -0
  315. package/lib/Utils/signal.js +200 -0
  316. package/lib/Utils/stanza-ack.d.ts +16 -0
  317. package/lib/Utils/stanza-ack.js +37 -0
  318. package/lib/Utils/status-stickers.d.ts +79 -0
  319. package/lib/Utils/status-stickers.js +261 -0
  320. package/lib/Utils/status.d.ts +107 -0
  321. package/lib/Utils/status.js +131 -0
  322. package/lib/Utils/sticker-pack-maker.d.ts +20 -0
  323. package/lib/Utils/sticker-pack-maker.js +112 -0
  324. package/lib/Utils/stickerpack.d.ts +18 -0
  325. package/lib/Utils/stickerpack.js +316 -0
  326. package/lib/Utils/sync-action-utils.d.ts +2 -0
  327. package/lib/Utils/sync-action-utils.js +48 -0
  328. package/lib/Utils/tag.d.ts +8 -0
  329. package/lib/Utils/tag.js +45 -0
  330. package/lib/Utils/tc-token-utils.d.ts +29 -0
  331. package/lib/Utils/tc-token-utils.js +162 -0
  332. package/lib/Utils/templates.d.ts +86 -0
  333. package/lib/Utils/templates.js +148 -0
  334. package/lib/Utils/text-format.d.ts +13 -0
  335. package/lib/Utils/text-format.js +81 -0
  336. package/lib/Utils/text-tools.d.ts +3 -0
  337. package/lib/Utils/text-tools.js +38 -0
  338. package/lib/Utils/ttl-cache.d.ts +29 -0
  339. package/lib/Utils/ttl-cache.js +123 -0
  340. package/lib/Utils/use-cache-manager-auth-state.d.ts +22 -0
  341. package/lib/Utils/use-cache-manager-auth-state.js +86 -0
  342. package/lib/Utils/use-multi-file-auth-state.d.ts +20 -0
  343. package/lib/Utils/use-multi-file-auth-state.js +201 -0
  344. package/lib/Utils/use-single-file-auth-state.d.ts +10 -0
  345. package/lib/Utils/use-single-file-auth-state.js +111 -0
  346. package/lib/Utils/use-sqlite-auth-state.d.ts +13 -0
  347. package/lib/Utils/use-sqlite-auth-state.js +171 -0
  348. package/lib/Utils/username.d.ts +22 -0
  349. package/lib/Utils/username.js +59 -0
  350. package/lib/Utils/validate-connection.d.ts +43 -0
  351. package/lib/Utils/validate-connection.js +197 -0
  352. package/lib/Utils/vcard.d.ts +40 -0
  353. package/lib/Utils/vcard.js +92 -0
  354. package/lib/Utils/voice-note.d.ts +13 -0
  355. package/lib/Utils/voice-note.js +47 -0
  356. package/lib/VoIP/audio-feeder.d.ts +15 -0
  357. package/lib/VoIP/audio-feeder.js +132 -0
  358. package/lib/VoIP/index.d.ts +22 -0
  359. package/lib/VoIP/index.js +277 -0
  360. package/lib/VoIP/relay-transport.d.ts +16 -0
  361. package/lib/VoIP/relay-transport.js +559 -0
  362. package/lib/VoIP/signaling.d.ts +16 -0
  363. package/lib/VoIP/signaling.js +624 -0
  364. package/lib/VoIP/types.d.ts +11 -0
  365. package/lib/VoIP/types.js +17 -0
  366. package/lib/VoIP/wasm-engine.d.ts +28 -0
  367. package/lib/VoIP/wasm-engine.js +1214 -0
  368. package/lib/VoIP/worker-bootstrap.d.ts +1 -0
  369. package/lib/VoIP/worker-bootstrap.js +1042 -0
  370. package/lib/WABinary/constants.d.ts +61 -0
  371. package/lib/WABinary/constants.js +1466 -0
  372. package/lib/WABinary/decode.d.ts +9 -0
  373. package/lib/WABinary/decode.js +261 -0
  374. package/lib/WABinary/encode.d.ts +2 -0
  375. package/lib/WABinary/encode.js +219 -0
  376. package/lib/WABinary/generic-utils.d.ts +45 -0
  377. package/lib/WABinary/generic-utils.js +285 -0
  378. package/lib/WABinary/index.d.ts +5 -0
  379. package/lib/WABinary/index.js +5 -0
  380. package/lib/WABinary/jid-utils.d.ts +32 -0
  381. package/lib/WABinary/jid-utils.js +102 -0
  382. package/lib/WABinary/types.d.ts +1 -0
  383. package/lib/WABinary/types.js +1 -0
  384. package/lib/WAM/BinaryInfo.d.ts +7 -0
  385. package/lib/WAM/BinaryInfo.js +9 -0
  386. package/lib/WAM/constants.d.ts +34926 -0
  387. package/lib/WAM/constants.js +22852 -0
  388. package/lib/WAM/encode.d.ts +1 -0
  389. package/lib/WAM/encode.js +149 -0
  390. package/lib/WAM/index.d.ts +3 -0
  391. package/lib/WAM/index.js +3 -0
  392. package/lib/WAUSync/Protocols/USyncBusinessProtocol.d.ts +43 -0
  393. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +32 -0
  394. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +36 -0
  395. package/lib/WAUSync/Protocols/USyncContactProtocol.js +51 -0
  396. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +29 -0
  397. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +60 -0
  398. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  399. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +26 -0
  400. package/lib/WAUSync/Protocols/USyncFeatureProtocol.d.ts +13 -0
  401. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +28 -0
  402. package/lib/WAUSync/Protocols/USyncPictureProtocol.d.ts +22 -0
  403. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +28 -0
  404. package/lib/WAUSync/Protocols/USyncSidelistProtocol.d.ts +20 -0
  405. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +23 -0
  406. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  407. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +37 -0
  408. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.d.ts +14 -0
  409. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +24 -0
  410. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +9 -0
  411. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +24 -0
  412. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +38 -0
  413. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +49 -0
  414. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +14 -0
  415. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +28 -0
  416. package/lib/WAUSync/Protocols/index.d.ts +12 -0
  417. package/lib/WAUSync/Protocols/index.js +12 -0
  418. package/lib/WAUSync/USyncQuery.d.ts +25 -0
  419. package/lib/WAUSync/USyncQuery.js +140 -0
  420. package/lib/WAUSync/USyncUser.d.ts +24 -0
  421. package/lib/WAUSync/USyncUser.js +47 -0
  422. package/lib/WAUSync/index.d.ts +3 -0
  423. package/lib/WAUSync/index.js +3 -0
  424. package/lib/assets/wasm/loader.js +5 -0
  425. package/lib/assets/wasm/whatsapp.wasm +0 -0
  426. package/lib/assets/wasm/worker-modules.js +273 -0
  427. package/lib/exports-extra.d.ts +45 -0
  428. package/lib/exports-extra.js +47 -0
  429. package/lib/index.d.ts +16 -0
  430. package/lib/index.js +24 -0
  431. package/package.json +161 -4
@@ -0,0 +1,287 @@
1
+ export function persistLidPnMappings(signalRepository: any, participants: any): Promise<void>;
2
+ export function makeGroupsSocket(config: any): {
3
+ groupQuery: (jid: any, type: any, content: any) => Promise<any>;
4
+ groupMetadata: (jid: any) => Promise<{
5
+ id: any;
6
+ notify: any;
7
+ addressingMode: any;
8
+ subject: any;
9
+ subjectOwner: any;
10
+ subjectOwnerPn: any;
11
+ subjectOwnerUsername: any;
12
+ subjectTime: number;
13
+ size: any;
14
+ creation: number;
15
+ owner: string;
16
+ ownerPn: string;
17
+ ownerUsername: any;
18
+ owner_country_code: any;
19
+ desc: any;
20
+ descId: any;
21
+ descOwner: string;
22
+ descOwnerPn: string;
23
+ descOwnerUsername: any;
24
+ descTime: number;
25
+ linkedParent: any;
26
+ restrict: boolean;
27
+ announce: boolean;
28
+ isCommunity: boolean;
29
+ isCommunityAnnounce: boolean;
30
+ joinApprovalMode: boolean;
31
+ memberAddMode: boolean;
32
+ participants: any;
33
+ ephemeralDuration: number;
34
+ }>;
35
+ groupCreate: (subject: any, participants: any) => Promise<{
36
+ id: any;
37
+ notify: any;
38
+ addressingMode: any;
39
+ subject: any;
40
+ subjectOwner: any;
41
+ subjectOwnerPn: any;
42
+ subjectOwnerUsername: any;
43
+ subjectTime: number;
44
+ size: any;
45
+ creation: number;
46
+ owner: string;
47
+ ownerPn: string;
48
+ ownerUsername: any;
49
+ owner_country_code: any;
50
+ desc: any;
51
+ descId: any;
52
+ descOwner: string;
53
+ descOwnerPn: string;
54
+ descOwnerUsername: any;
55
+ descTime: number;
56
+ linkedParent: any;
57
+ restrict: boolean;
58
+ announce: boolean;
59
+ isCommunity: boolean;
60
+ isCommunityAnnounce: boolean;
61
+ joinApprovalMode: boolean;
62
+ memberAddMode: boolean;
63
+ participants: any;
64
+ ephemeralDuration: number;
65
+ }>;
66
+ groupLeave: (id: any) => Promise<void>;
67
+ groupUpdateSubject: (jid: any, subject: any) => Promise<void>;
68
+ groupRequestParticipantsList: (jid: any) => Promise<any>;
69
+ groupRequestParticipantsUpdate: (jid: any, participants: any, action: any) => Promise<any>;
70
+ groupParticipantsUpdate: (jid: any, participants: any, action: any) => Promise<any[]>;
71
+ groupUpdateDescription: (jid: any, description: any) => Promise<void>;
72
+ groupInviteCode: (jid: any) => Promise<any>;
73
+ groupRevokeInvite: (jid: any) => Promise<any>;
74
+ groupAcceptInvite: (code: any) => Promise<any>;
75
+ /**
76
+ * revoke a v4 invite for someone
77
+ * @param groupJid group jid
78
+ * @param invitedJid jid of person you invited
79
+ * @returns true if successful
80
+ */
81
+ groupRevokeInviteV4: (groupJid: any, invitedJid: any) => Promise<boolean>;
82
+ /**
83
+ * accept a GroupInviteMessage
84
+ * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite
85
+ * @param inviteMessage the message to accept
86
+ */
87
+ groupAcceptInviteV4: (...args: any[]) => Promise<any>;
88
+ groupGetInviteInfo: (code: any) => Promise<{
89
+ id: any;
90
+ notify: any;
91
+ addressingMode: any;
92
+ subject: any;
93
+ subjectOwner: any;
94
+ subjectOwnerPn: any;
95
+ subjectOwnerUsername: any;
96
+ subjectTime: number;
97
+ size: any;
98
+ creation: number;
99
+ owner: string;
100
+ ownerPn: string;
101
+ ownerUsername: any;
102
+ owner_country_code: any;
103
+ desc: any;
104
+ descId: any;
105
+ descOwner: string;
106
+ descOwnerPn: string;
107
+ descOwnerUsername: any;
108
+ descTime: number;
109
+ linkedParent: any;
110
+ restrict: boolean;
111
+ announce: boolean;
112
+ isCommunity: boolean;
113
+ isCommunityAnnounce: boolean;
114
+ joinApprovalMode: boolean;
115
+ memberAddMode: boolean;
116
+ participants: any;
117
+ ephemeralDuration: number;
118
+ }>;
119
+ groupToggleEphemeral: (jid: any, ephemeralExpiration: any) => Promise<void>;
120
+ groupSettingUpdate: (jid: any, setting: any) => Promise<void>;
121
+ groupMemberAddMode: (jid: any, mode: any) => Promise<void>;
122
+ groupJoinApprovalMode: (jid: any, mode: any) => Promise<void>;
123
+ groupFetchAllParticipating: () => Promise<{}>;
124
+ findUserId: (pnLid: any) => Promise<{
125
+ lid: any;
126
+ phoneNumber: any;
127
+ }>;
128
+ serverProps: {
129
+ privacyTokenOn1to1: boolean;
130
+ profilePicPrivacyToken: boolean;
131
+ lidTrustedTokenIssueToLid: boolean;
132
+ };
133
+ createCallLink: (type: any, event: any, timeoutMs: any) => Promise<any>;
134
+ getBotListV2: () => Promise<{
135
+ jid: any;
136
+ personaId: any;
137
+ }[]>;
138
+ messageMutex: {
139
+ mutex(code: any): any;
140
+ };
141
+ receiptMutex: {
142
+ mutex(code: any): any;
143
+ };
144
+ appStatePatchMutex: {
145
+ mutex(code: any): any;
146
+ };
147
+ notificationMutex: {
148
+ mutex(code: any): any;
149
+ };
150
+ fetchPrivacySettings: (force?: boolean) => Promise<any>;
151
+ upsertMessage: (...args: any[]) => Promise<any>;
152
+ appPatch: (patchCreate: any) => Promise<void>;
153
+ sendPresenceUpdate: (type: any, toJid: any) => Promise<void>;
154
+ presenceSubscribe: (toJid: any) => Promise<void>;
155
+ profilePictureUrl: (jid: any, type?: string, timeoutMs?: number, shouldIncludeTcToken?: boolean) => Promise<any>;
156
+ fetchBlocklist: () => Promise<any>;
157
+ fetchStatus: (...jids: any[]) => Promise<any>;
158
+ fetchDisappearingDuration: (...jids: any[]) => Promise<any>;
159
+ updateProfilePicture: (jid: any, content: any, dimensions: any) => Promise<void>;
160
+ removeProfilePicture: (jid: any) => Promise<void>;
161
+ updateProfileStatus: (status: any) => Promise<void>;
162
+ updateProfileName: (name: any) => Promise<void>;
163
+ updateBlockStatus: (jid: any, action: any) => Promise<void>;
164
+ updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: any) => Promise<void>;
165
+ updateCallPrivacy: (value: any) => Promise<void>;
166
+ updateMessagesPrivacy: (value: any) => Promise<void>;
167
+ updateLastSeenPrivacy: (value: any) => Promise<void>;
168
+ updateOnlinePrivacy: (value: any) => Promise<void>;
169
+ updateProfilePicturePrivacy: (value: any) => Promise<void>;
170
+ updateStatusPrivacy: (value: any) => Promise<void>;
171
+ updateReadReceiptsPrivacy: (value: any) => Promise<void>;
172
+ updateGroupsAddPrivacy: (value: any) => Promise<void>;
173
+ updateDefaultDisappearingMode: (duration: any) => Promise<void>;
174
+ getBusinessProfile: (jid: any) => Promise<{
175
+ wid: any;
176
+ address: any;
177
+ description: any;
178
+ website: any[];
179
+ email: any;
180
+ category: any;
181
+ business_hours: {
182
+ timezone: any;
183
+ business_config: any;
184
+ };
185
+ }>;
186
+ resyncAppState: (...args: any[]) => Promise<any>;
187
+ chatModify: (mod: any, jid: any) => Promise<void>;
188
+ cleanDirtyBits: (type: any, fromTimestamp: any) => Promise<void>;
189
+ addOrEditContact: (jid: any, contact: any) => Promise<void>;
190
+ removeContact: (jid: any) => Promise<void>;
191
+ placeholderResendCache: any;
192
+ addLabel: (jid: any, labels: any) => Promise<void>;
193
+ addChatLabel: (jid: any, labelId: any) => Promise<void>;
194
+ removeChatLabel: (jid: any, labelId: any) => Promise<void>;
195
+ addMessageLabel: (jid: any, messageId: any, labelId: any) => Promise<void>;
196
+ removeMessageLabel: (jid: any, messageId: any, labelId: any) => Promise<void>;
197
+ star: (jid: any, messages: any, star: any) => Promise<void>;
198
+ addOrEditQuickReply: (quickReply: any) => Promise<void>;
199
+ removeQuickReply: (timestamp: any) => Promise<void>;
200
+ type: string;
201
+ ws: import("./Client/websocket.js").WebSocketClient;
202
+ ev: {
203
+ process(handler: any): () => void;
204
+ emit(event: any, evData: any): any;
205
+ isBuffering(): boolean;
206
+ buffer: () => void;
207
+ flush: () => boolean;
208
+ createBufferedFunction(work: any): (...args: any[]) => Promise<any>;
209
+ on: (...args: any[]) => any;
210
+ off: (...args: any[]) => any;
211
+ removeAllListeners: (...args: any[]) => any;
212
+ destroy(): void;
213
+ };
214
+ authState: {
215
+ creds: any;
216
+ keys: {
217
+ get: (type: any, ids: any) => Promise<any>;
218
+ set: (data: any) => Promise<void>;
219
+ isInTransaction: () => boolean;
220
+ transaction: (work: any, key: any) => Promise<any>;
221
+ };
222
+ };
223
+ signalRepository: any;
224
+ user: any;
225
+ generateMessageTag: () => string;
226
+ query: (node: any, timeoutMs: any) => Promise<any>;
227
+ waitForMessage: (msgId: any, timeoutMs?: any) => Promise<any>;
228
+ waitForSocketOpen: () => Promise<void>;
229
+ sendRawMessage: (data: any) => Promise<void>;
230
+ sendNode: (frame: any) => Promise<void>;
231
+ logout: (msg: any) => Promise<void>;
232
+ end: (error: any) => Promise<void>;
233
+ registerSocketEndHandler: (handler: any) => void;
234
+ onUnexpectedError: (err: any, msg: any) => void;
235
+ uploadPreKeys: (count?: 5) => Promise<void>;
236
+ uploadPreKeysToServerIfRequired: () => Promise<void>;
237
+ digestKeyBundle: () => Promise<void>;
238
+ rotateSignedPreKey: () => Promise<void>;
239
+ requestPairingCode: (phoneNumber: any, customPairingCode: any) => Promise<any>;
240
+ updateServerTimeOffset: (opts1: {
241
+ [key: string]: any;
242
+ attrs: any;
243
+ }) => void;
244
+ sendUnifiedSession: () => Promise<void>;
245
+ wamBuffer: import("../index.js").BinaryInfo;
246
+ waitForConnectionUpdate: (check: any, timeoutMs: any) => Promise<void>;
247
+ sendWAMBuffer: (wamBuffer: any) => Promise<any>;
248
+ executeUSyncQuery: (usyncQuery: any) => Promise<any>;
249
+ onWhatsApp: (...phoneNumber: any[]) => Promise<any>;
250
+ fetchAccountReachoutTimelock: () => Promise<{
251
+ isActive: boolean;
252
+ timeEnforcementEnds: Date;
253
+ enforcementType: any;
254
+ }>;
255
+ fetchNewChatMessageCap: () => Promise<any>;
256
+ };
257
+ export function extractGroupMetadata(result: any): {
258
+ id: any;
259
+ notify: any;
260
+ addressingMode: any;
261
+ subject: any;
262
+ subjectOwner: any;
263
+ subjectOwnerPn: any;
264
+ subjectOwnerUsername: any;
265
+ subjectTime: number;
266
+ size: any;
267
+ creation: number;
268
+ owner: string;
269
+ ownerPn: string;
270
+ ownerUsername: any;
271
+ owner_country_code: any;
272
+ desc: any;
273
+ descId: any;
274
+ descOwner: string;
275
+ descOwnerPn: string;
276
+ descOwnerUsername: any;
277
+ descTime: number;
278
+ linkedParent: any;
279
+ restrict: boolean;
280
+ announce: boolean;
281
+ isCommunity: boolean;
282
+ isCommunityAnnounce: boolean;
283
+ joinApprovalMode: boolean;
284
+ memberAddMode: boolean;
285
+ participants: any;
286
+ ephemeralDuration: number;
287
+ };
@@ -0,0 +1,386 @@
1
+ import { Boom } from '@hapi/boom';
2
+ import { proto } from '../../WAProto/index.js';
3
+ import { WAMessageAddressingMode, WAMessageStubType } from '../Types/index.js';
4
+ import { generateMessageIDV2, unixTimestampSeconds } from '../Utils/index.js';
5
+ import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString, isLidUser, isPnUser, jidEncode, jidNormalizedUser } from '../WABinary/index.js';
6
+ import { makeChatsSocket } from './chats.js';
7
+ /**
8
+ * participants extracted from group metadata/notifications
9
+ * already carry resolved lid/phoneNumber pairs inline, but that data was never persisted
10
+ * into signalRepository's LID<->PN mapping store (unlike the decrypt path / socket login,
11
+ * which do call storeLIDPNMappings). This left the mapping store cold on group metadata
12
+ * fetches and add/promote/demote/leave notifications, forcing later lookups to relearn
13
+ * the same pairs through other paths.
14
+ */
15
+ export const persistLidPnMappings = async (signalRepository, participants) => {
16
+ if (!signalRepository?.lidMapping?.storeLIDPNMappings) {
17
+ return;
18
+ }
19
+ const pairs = [];
20
+ for (const p of participants || []) {
21
+ if (!p?.id) {
22
+ continue;
23
+ }
24
+ if (isLidUser(p.id) && p.phoneNumber) {
25
+ pairs.push({ lid: p.id, pn: p.phoneNumber });
26
+ }
27
+ else if (isPnUser(p.id) && p.lid) {
28
+ pairs.push({ lid: p.lid, pn: p.id });
29
+ }
30
+ }
31
+ if (pairs.length) {
32
+ await signalRepository.lidMapping.storeLIDPNMappings(pairs);
33
+ }
34
+ };
35
+ export const makeGroupsSocket = (config) => {
36
+ const sock = makeChatsSocket(config);
37
+ const { authState, ev, query, upsertMessage, signalRepository } = sock;
38
+ const groupQuery = async (jid, type, content) => query({
39
+ tag: 'iq',
40
+ attrs: {
41
+ type,
42
+ xmlns: 'w:g2',
43
+ to: jid
44
+ },
45
+ content
46
+ });
47
+ const groupMetadata = async (jid) => {
48
+ const result = await groupQuery(jid, 'get', [{ tag: 'query', attrs: { request: 'interactive' } }]);
49
+ const metadata = extractGroupMetadata(result);
50
+ await persistLidPnMappings(signalRepository, metadata.participants);
51
+ return metadata;
52
+ };
53
+ const groupFetchAllParticipating = async () => {
54
+ const result = await query({
55
+ tag: 'iq',
56
+ attrs: {
57
+ to: '@g.us',
58
+ xmlns: 'w:g2',
59
+ type: 'get'
60
+ },
61
+ content: [
62
+ {
63
+ tag: 'participating',
64
+ attrs: {},
65
+ content: [
66
+ { tag: 'participants', attrs: {} },
67
+ { tag: 'description', attrs: {} }
68
+ ]
69
+ }
70
+ ]
71
+ });
72
+ const data = {};
73
+ const groupsChild = getBinaryNodeChild(result, 'groups');
74
+ if (groupsChild) {
75
+ const groups = getBinaryNodeChildren(groupsChild, 'group');
76
+ for (const groupNode of groups) {
77
+ const meta = extractGroupMetadata({
78
+ tag: 'result',
79
+ attrs: {},
80
+ content: [groupNode]
81
+ });
82
+ data[meta.id] = meta;
83
+ await persistLidPnMappings(signalRepository, meta.participants);
84
+ }
85
+ }
86
+ sock.ev.emit('groups.update', Object.values(data));
87
+ return data;
88
+ };
89
+ sock.ws.on('CB:ib,,dirty', async (node) => {
90
+ const { attrs } = getBinaryNodeChild(node, 'dirty');
91
+ if (attrs.type !== 'groups') {
92
+ return;
93
+ }
94
+ await groupFetchAllParticipating();
95
+ await sock.cleanDirtyBits('groups');
96
+ });
97
+ return {
98
+ ...sock,
99
+ groupQuery,
100
+ groupMetadata,
101
+ groupCreate: async (subject, participants) => {
102
+ const key = generateMessageIDV2();
103
+ const result = await groupQuery('@g.us', 'set', [
104
+ {
105
+ tag: 'create',
106
+ attrs: {
107
+ subject,
108
+ key
109
+ },
110
+ content: participants.map(jid => ({
111
+ tag: 'participant',
112
+ attrs: { jid }
113
+ }))
114
+ }
115
+ ]);
116
+ const metadata = extractGroupMetadata(result);
117
+ await persistLidPnMappings(signalRepository, metadata.participants);
118
+ return metadata;
119
+ },
120
+ groupLeave: async (id) => {
121
+ await groupQuery('@g.us', 'set', [
122
+ {
123
+ tag: 'leave',
124
+ attrs: {},
125
+ content: [{ tag: 'group', attrs: { id } }]
126
+ }
127
+ ]);
128
+ },
129
+ groupUpdateSubject: async (jid, subject) => {
130
+ await groupQuery(jid, 'set', [
131
+ {
132
+ tag: 'subject',
133
+ attrs: {},
134
+ content: Buffer.from(subject, 'utf-8')
135
+ }
136
+ ]);
137
+ },
138
+ groupRequestParticipantsList: async (jid) => {
139
+ const result = await groupQuery(jid, 'get', [
140
+ {
141
+ tag: 'membership_approval_requests',
142
+ attrs: {}
143
+ }
144
+ ]);
145
+ const node = getBinaryNodeChild(result, 'membership_approval_requests');
146
+ const participants = getBinaryNodeChildren(node, 'membership_approval_request');
147
+ return participants.map(v => v.attrs);
148
+ },
149
+ groupRequestParticipantsUpdate: async (jid, participants, action) => {
150
+ const result = await groupQuery(jid, 'set', [
151
+ {
152
+ tag: 'membership_requests_action',
153
+ attrs: {},
154
+ content: [
155
+ {
156
+ tag: action,
157
+ attrs: {},
158
+ content: participants.map(jid => ({
159
+ tag: 'participant',
160
+ attrs: { jid }
161
+ }))
162
+ }
163
+ ]
164
+ }
165
+ ]);
166
+ const node = getBinaryNodeChild(result, 'membership_requests_action');
167
+ const nodeAction = getBinaryNodeChild(node, action);
168
+ const participantsAffected = getBinaryNodeChildren(nodeAction, 'participant');
169
+ return participantsAffected.map(p => {
170
+ return { status: p.attrs.error || '200', jid: p.attrs.jid };
171
+ });
172
+ },
173
+ groupParticipantsUpdate: async (jid, participants, action) => {
174
+ const CHUNK_SIZE = 25;
175
+ const results = [];
176
+ for (let i = 0; i < participants.length; i += CHUNK_SIZE) {
177
+ const chunk = participants.slice(i, i + CHUNK_SIZE);
178
+ const result = await groupQuery(jid, 'set', [
179
+ {
180
+ tag: action,
181
+ attrs: {},
182
+ content: chunk.map(jid => ({
183
+ tag: 'participant',
184
+ attrs: { jid }
185
+ }))
186
+ }
187
+ ]);
188
+ const node = getBinaryNodeChild(result, action);
189
+ const participantsAffected = getBinaryNodeChildren(node, 'participant');
190
+ results.push(...participantsAffected.map(p => ({
191
+ status: p.attrs.error || '200', jid: p.attrs.jid, content: p
192
+ })));
193
+ }
194
+ return results;
195
+ },
196
+ groupUpdateDescription: async (jid, description) => {
197
+ const metadata = await groupMetadata(jid);
198
+ const prev = metadata.descId ?? null;
199
+ await groupQuery(jid, 'set', [
200
+ {
201
+ tag: 'description',
202
+ attrs: {
203
+ ...(description ? { id: generateMessageIDV2() } : { delete: 'true' }),
204
+ ...(prev ? { prev } : {})
205
+ },
206
+ content: description ? [{ tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }] : undefined
207
+ }
208
+ ]);
209
+ },
210
+ groupInviteCode: async (jid) => {
211
+ const result = await groupQuery(jid, 'get', [{ tag: 'invite', attrs: {} }]);
212
+ const inviteNode = getBinaryNodeChild(result, 'invite');
213
+ return inviteNode?.attrs.code;
214
+ },
215
+ groupRevokeInvite: async (jid) => {
216
+ const result = await groupQuery(jid, 'set', [{ tag: 'invite', attrs: {} }]);
217
+ const inviteNode = getBinaryNodeChild(result, 'invite');
218
+ return inviteNode?.attrs.code;
219
+ },
220
+ groupAcceptInvite: async (code) => {
221
+ const results = await groupQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }]);
222
+ const result = getBinaryNodeChild(results, 'group');
223
+ return result?.attrs.jid;
224
+ },
225
+ /**
226
+ * revoke a v4 invite for someone
227
+ * @param groupJid group jid
228
+ * @param invitedJid jid of person you invited
229
+ * @returns true if successful
230
+ */
231
+ groupRevokeInviteV4: async (groupJid, invitedJid) => {
232
+ const result = await groupQuery(groupJid, 'set', [
233
+ { tag: 'revoke', attrs: {}, content: [{ tag: 'participant', attrs: { jid: invitedJid } }] }
234
+ ]);
235
+ return !!result;
236
+ },
237
+ /**
238
+ * accept a GroupInviteMessage
239
+ * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite
240
+ * @param inviteMessage the message to accept
241
+ */
242
+ groupAcceptInviteV4: ev.createBufferedFunction(async (key, inviteMessage) => {
243
+ key = typeof key === 'string' ? { remoteJid: key } : key;
244
+ const results = await groupQuery(inviteMessage.groupJid, 'set', [
245
+ {
246
+ tag: 'accept',
247
+ attrs: {
248
+ code: inviteMessage.inviteCode,
249
+ expiration: inviteMessage.inviteExpiration.toString(),
250
+ admin: key.remoteJid
251
+ }
252
+ }
253
+ ]);
254
+ // if we have the full message key
255
+ // update the invite message to be expired
256
+ if (key.id) {
257
+ // create new invite message that is expired
258
+ inviteMessage = proto.Message.GroupInviteMessage.fromObject(inviteMessage);
259
+ inviteMessage.inviteExpiration = 0;
260
+ inviteMessage.inviteCode = '';
261
+ ev.emit('messages.update', [
262
+ {
263
+ key,
264
+ update: {
265
+ message: {
266
+ groupInviteMessage: inviteMessage
267
+ }
268
+ }
269
+ }
270
+ ]);
271
+ }
272
+ // generate the group add message
273
+ await upsertMessage({
274
+ key: {
275
+ remoteJid: inviteMessage.groupJid,
276
+ id: generateMessageIDV2(sock.user?.id),
277
+ fromMe: false,
278
+ participant: key.remoteJid
279
+ },
280
+ messageStubType: WAMessageStubType.GROUP_PARTICIPANT_ADD,
281
+ messageStubParameters: [JSON.stringify(authState.creds.me)],
282
+ participant: key.remoteJid,
283
+ messageTimestamp: unixTimestampSeconds()
284
+ }, 'notify');
285
+ return results.attrs.from;
286
+ }),
287
+ groupGetInviteInfo: async (code) => {
288
+ const results = await groupQuery('@g.us', 'get', [{ tag: 'invite', attrs: { code } }]);
289
+ const metadata = extractGroupMetadata(results);
290
+ await persistLidPnMappings(signalRepository, metadata.participants);
291
+ return metadata;
292
+ },
293
+ groupToggleEphemeral: async (jid, ephemeralExpiration) => {
294
+ const content = ephemeralExpiration
295
+ ? { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } }
296
+ : { tag: 'not_ephemeral', attrs: {} };
297
+ await groupQuery(jid, 'set', [content]);
298
+ },
299
+ groupSettingUpdate: async (jid, setting) => {
300
+ await groupQuery(jid, 'set', [{ tag: setting, attrs: {} }]);
301
+ },
302
+ groupMemberAddMode: async (jid, mode) => {
303
+ await groupQuery(jid, 'set', [{ tag: 'member_add_mode', attrs: {}, content: mode }]);
304
+ },
305
+ groupJoinApprovalMode: async (jid, mode) => {
306
+ await groupQuery(jid, 'set', [
307
+ { tag: 'membership_approval_mode', attrs: {}, content: [{ tag: 'group_join', attrs: { state: mode } }] }
308
+ ]);
309
+ },
310
+ groupFetchAllParticipating
311
+ };
312
+ };
313
+ export const extractGroupMetadata = (result) => {
314
+ const group = getBinaryNodeChild(result, 'group');
315
+ if (!group) {
316
+ // Mirror WAWeb: surface server/client errors with their code+text instead of crashing.
317
+ const errorNode = getBinaryNodeChild(result, 'error');
318
+ if (errorNode) {
319
+ const code = errorNode.attrs.code ? +errorNode.attrs.code : 500;
320
+ const text = errorNode.attrs.text || 'group metadata query failed';
321
+ throw new Boom(text, { statusCode: code, data: errorNode });
322
+ }
323
+ throw new Boom('Invalid group metadata response: missing <group> node', { data: result });
324
+ }
325
+ if (!group.attrs.id) {
326
+ throw new Boom('Invalid group metadata response: missing group id', { data: group });
327
+ }
328
+ const descChild = getBinaryNodeChild(group, 'description');
329
+ let desc;
330
+ let descId;
331
+ let descOwner;
332
+ let descOwnerPn;
333
+ let descOwnerUsername;
334
+ let descTime;
335
+ if (descChild) {
336
+ desc = getBinaryNodeChildString(descChild, 'body');
337
+ descOwner = descChild.attrs.participant ? jidNormalizedUser(descChild.attrs.participant) : undefined;
338
+ descOwnerPn = descChild.attrs.participant_pn ? jidNormalizedUser(descChild.attrs.participant_pn) : undefined;
339
+ descOwnerUsername = descChild.attrs.participant_username || undefined;
340
+ descTime = +descChild.attrs.t;
341
+ descId = descChild.attrs.id;
342
+ }
343
+ const groupId = group.attrs.id.includes('@') ? group.attrs.id : jidEncode(group.attrs.id, 'g.us');
344
+ const eph = getBinaryNodeChild(group, 'ephemeral')?.attrs.expiration;
345
+ const memberAddMode = getBinaryNodeChildString(group, 'member_add_mode') === 'all_member_add';
346
+ const metadata = {
347
+ id: groupId,
348
+ notify: group.attrs.notify,
349
+ addressingMode: group.attrs.addressing_mode === 'lid' ? WAMessageAddressingMode.LID : WAMessageAddressingMode.PN,
350
+ subject: group.attrs.subject,
351
+ subjectOwner: group.attrs.s_o,
352
+ subjectOwnerPn: group.attrs.s_o_pn,
353
+ subjectOwnerUsername: group.attrs.s_o_username,
354
+ subjectTime: +group.attrs.s_t,
355
+ size: group.attrs.size ? +group.attrs.size : getBinaryNodeChildren(group, 'participant').length,
356
+ creation: +group.attrs.creation,
357
+ owner: group.attrs.creator ? jidNormalizedUser(group.attrs.creator) : undefined,
358
+ ownerPn: group.attrs.creator_pn ? jidNormalizedUser(group.attrs.creator_pn) : undefined,
359
+ ownerUsername: group.attrs.creator_username || undefined,
360
+ owner_country_code: group.attrs.creator_country_code,
361
+ desc,
362
+ descId,
363
+ descOwner,
364
+ descOwnerPn,
365
+ descOwnerUsername,
366
+ descTime,
367
+ linkedParent: getBinaryNodeChild(group, 'linked_parent')?.attrs.jid || undefined,
368
+ restrict: !!getBinaryNodeChild(group, 'locked'),
369
+ announce: !!getBinaryNodeChild(group, 'announcement'),
370
+ isCommunity: !!getBinaryNodeChild(group, 'parent'),
371
+ isCommunityAnnounce: !!getBinaryNodeChild(group, 'default_sub_group'),
372
+ joinApprovalMode: !!getBinaryNodeChild(group, 'membership_approval_mode'),
373
+ memberAddMode,
374
+ participants: getBinaryNodeChildren(group, 'participant').map(({ attrs }) => {
375
+ return {
376
+ id: attrs.jid,
377
+ phoneNumber: isLidUser(attrs.jid) && isPnUser(attrs.phone_number) ? attrs.phone_number : undefined,
378
+ lid: isPnUser(attrs.jid) && isLidUser(attrs.lid) ? attrs.lid : undefined,
379
+ username: attrs.participant_username || attrs.username || undefined,
380
+ admin: (attrs.type || null)
381
+ };
382
+ }),
383
+ ephemeralDuration: eph ? +eph : undefined
384
+ };
385
+ return metadata;
386
+ };